/**
 * uwmfmSlider - jQuery Plugin
 *
 * @author  Dominik Lukasik <dominik@devcube.pl>
 * @version 0.1
 *
 * Dual licensed under the MIT and GPL licenses:
 * 		http://www.opensource.org/licenses/mit-license.php
 * 		http://www.gnu.org/licenses/gpl.html
 *
 */
(function($){

	$.fn.uwmfmSlider = function(o){

      var def = {
			btnNext : '',
         btnPrev  : '',
         speed : 100
		};

		var o = $.extend(def, o);
      var uwmfm=this;
      var sl=null;
      var btnNext=null,btnPrev=null,curr=null;
      var st=null,of=0,r=0,mw=0,f=false;
      var li=null;

      uwmfmSlEx = {
         init : function(){
            sl=$(uwmfm).find('ul');
            sl.css({'top':0, 'left':0});
            btnNext=(o.btnNext) ? $(o.btnNext) : null;
            btnPrev=(o.btnPrev) ? $(o.btnPrev) : null;
            r=$(sl).height()-$(uwmfm).height();
            if(r>0){
               li=(sl).find('li');

               if(btnNext){
                  $(btnNext).click(function(){
                     uwmfmSlEx.scroll('next');
                     return false;
                  });
               }

               if(btnPrev){
                  $(btnPrev).click(function(){
                     uwmfmSlEx.scroll('prev');
                     return false;
                  }).css({'opacity' : 0.3 });
               }

               $(uwmfm).mousewheel(function(e,d){
                  mw+=d;
                  if(!(mw%2)){
                     if(d>0){uwmfmSlEx.scroll('prev');}else{uwmfmSlEx.scroll('next');}mw=0;
                  }
                  return false;
               });
            }
            else
            {
               $(btnNext).hide();
               $(btnPrev).hide();
            }
         },

         scroll : function(p, s){
            if(f==false){
            if(!s) s=o.speed;
            switch(p)
            {
               case 'prev':
                  var rt = parseInt($(sl).css('top'));
                  if(rt<0)
                  {
                     f=true;
                     curr=li[st];
                     of = rt + $(curr).outerHeight();
                     //console.log("Prev => Current height: %s; Offset %s; Step: %s", $(curr).outerHeight(), of, st);
                     sl.animate({'top':(of+'px')}, s, function(){f=false;});
                     if(st>0){st--;$(btnNext).animate({'opacity' : 1 }, 350);}else{st=null; $(btnPrev).animate({'opacity' : 0.3 }, 350);}
                  }
                  break;
               case 'next':
                  var rt = parseInt($(sl).css('top'));
                  if((r+rt)>0)
                  {
                     f=true;
                     if(st==null){
                        st=0;
                        $(btnPrev).animate({'opacity' : 1 }, 350);
                     }else{st++;}
                     curr=li[st];
                     of = rt - $(curr).outerHeight();
                     //console.log("Next => Current height: %s; Offset %s; Step: %s", $(curr).outerHeight(), of, st);
                     sl.animate({'top':(of+'px')}, s, function(){f=false;});
                     if((r+of)<0){$(btnNext).animate({'opacity' : 0.3 }, 350);}
                  }
                  break;
            }
            }
         }
      }

      if (jQuery.browser.safari && document.readyState != "complete"){
         setTimeout( "uwmfmSlEx.init()", 200 );
      }
      else
      {
         uwmfmSlEx.init();
      }
   };

})(jQuery);
