/*
 *      Easy Slider 1.5 - jQuery plugin
 *     written by Alen Grakalic     
 *     http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *     Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *     Dual licensed under the MIT (MIT-LICENSE.txt)
 *     and GPL (GPL-LICENSE.txt) licenses.
 *
 *     Built for jQuery library
 *     http://jquery.com
 *
 */
 
/*
 *     markup example for $("#slider").easySlider();
 *     
 *      <div id="slider">
 *          <ul>
 *               <li><img src="images/01.jpg" alt="" /></li>
 *               <li><img src="images/02.jpg" alt="" /></li>
 *               <li><img src="images/03.jpg" alt="" /></li>
 *               <li><img src="images/04.jpg" alt="" /></li>
 *               <li><img src="images/05.jpg" alt="" /></li>
 *          </ul>
 *     </div>
 
 ***********************************************
 easy slider modificato per funzionamento geomag
 ***********************************************
 
 
 *
 */

(function($) {

     $.fn.easySlider = function(options){
       
          // default configuration properties
          var defaults = {               
               prevId:           'prevBtn',
               prevText:           'Previous',
               nextId:           'nextBtn',     
               nextText:           'Next',
               controlsShow:     true,
               controlsBefore:     '',
               controlsAfter:     '',     
               controlsFade:     true,
               firstId:           'firstBtn',
               firstText:           'First',
               firstShow:          false,
               lastId:           'lastBtn',     
               lastText:           'Last',
               lastShow:          false,                    
               vertical:          false,
               speed:                800,
               auto:               false,
               pause:               2000,
               continuous:          false,
               reverse:          false,
               random_item: 0
          }; 
          
          var options = $.extend(defaults, options);  
                    
          this.each(function() {  
               var obj = $(this);
               var s = $("li", obj).length;
               var w = $("li", obj).width(); 
               var h = $("li", obj).height(); 
               obj.width(w); 
               obj.height(h); 
               obj.css("overflow","hidden");
               var ts = s-1;
               var t = 0;
               $("ul", obj).css('width',s*w);               
               if(!options.vertical) $("li", obj).css('float','left');
               
               if(options.controlsShow){
                    var html = options.controlsBefore;
                    if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>';
                    html += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
                    html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
                    if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';
                    html += options.controlsAfter;                              
                    $(obj).after(html);                                                  
               };
     
               $("a","#"+options.nextId).click(function(){          
                    animate("next",true);
               });
               $("a","#"+options.prevId).click(function(){          
                    animate("prev",true);                    
               });     
               $("a","#"+options.firstId).click(function(){          
                    animate("first",true);
               });                    
               $("a","#"+options.lastId).click(function(){          
                    animate("last",true);                    
               });          
               
               var dir = 'next';
               function animate(dir,clicked){
                   n_ts = $("li:visible", obj).length;
                   // i li sono in display: none da CSS
                   if (n_ts == 0) n_ts = s;
                   if ( options.random_item == 0) $("li", obj).show();
                   /* situazione iniziale preleva solo random_item immagini */
                   if( options.random_item > 0 && s == n_ts){
                       arr_li = $("li", obj).hide();
                       for (i = 0; i < options.random_item; i++){
                           randNum = Math.floor ( Math.random ( ) * s );
                        // show image that is nth child of image array
                        arr_li.eq(randNum).show();
                       }
                       n_ts = options.random_item;
                   }
                   n_ts = n_ts - 1;
                   if (ts != n_ts){
                       ts = n_ts;
                       $("ul", obj).css('width',(n_ts+1)*w);
                       t = 0;
                   }
                    var ot = t;
                    switch(dir){
                         case "next":
                              t = (ot>=ts) ? (options.continuous ? 0 : ts) : t+1;                              
                              break; 
                         case "prev":
                              t = (t<=0) ? (options.continuous ? ts : 0) : t-1;
                              break; 
                         case "first":
                              t = 0;
                              break; 
                         case "last":
                              t = ts;
                              break; 
                         default:
                              break; 
                    };     
                    
                    if(options.reverse){
                        if(t == 0 && ot >= ts){
                            dir = 'prev';
                            t = ts - 1;
                        }
                        if(t == ts && ot <= 0){
                            dir = 'next';
                            t = 1;
                        }
                    }
                    
                    var diff = Math.abs(ot-t);
                    var speed = diff*options.speed;                              
                    if(!options.vertical) {
                         p = (t*w*-1);
                         $("ul",obj).animate(
                              { marginLeft: p }, 
                              speed
                         );                    
                    } else {
                         p = (t*h*-1);
                         $("ul",obj).animate(
                              { marginTop: p }, 
                              speed
                         );                         
                    };
                    
                    if(!options.continuous && options.controlsFade){                         
                         if(t==ts){
                              $("a","#"+options.nextId).hide();
                              $("a","#"+options.lastId).hide();
                         } else {
                              $("a","#"+options.nextId).show();
                              $("a","#"+options.lastId).show();                         
                         };
                         if(t==0){
                              $("a","#"+options.prevId).hide();
                              $("a","#"+options.firstId).hide();
                         } else {
                              $("a","#"+options.prevId).show();
                              $("a","#"+options.firstId).show();
                         };                         
                    };                    
                    
                    if(clicked) clearTimeout(timeout);
                    
                    if(options.auto && !clicked){;
                         timeout = setTimeout(function(){
                              animate(dir,false);
                         },diff*options.speed+options.pause);
                    };
                    
               };
               // init
               var timeout;
               if(options.auto){;
                    timeout = setTimeout(function(){
                         animate(dir,false);
                    },options.pause);
               };          
          
               if(!options.continuous && options.controlsFade){                         
                    $("a","#"+options.prevId).hide();
                    $("a","#"+options.firstId).hide();                    
               };                    
               
          });
       
     };

})(jQuery);
