(function($) {
   $.fn.galleryslide = function(params) {
      return this.each(function(){

      var settings = {
         autoplay: true,
         autoplayInterval: 6000,
         fadeSpeed: 500,
         thumbSpeed: 1000,
         autoPlayType: 'bounce'
      };
      if(params) setttings = $.extend(settings, params);

      var largeitems = $(this).find('.large > li');
      var thumbitems = $(this).find('.thumbs > li');
      var largecontainer = $(this).find('.large');
      var thumbcontainer = $(this).find('.thumbs');
      var current = false;
      var interval = false;
      var direction = true;

      var large_left = $("<div class='large-left'></div>");
      var large_right = $("<div class='large-right'></div>");
      var thumbs_left = $("<div class='thumbs-left'></div>");
      var thumbs_right = $("<div class='thumbs-right'></div>");

      var T_WIDTH = thumbitems.outerWidth();
      var thumbheight = thumbitems.outerHeight();
      var T_CONTAINER_SCROLLWIDTH = thumbcontainer.attr('scrollWidth');
      var T_CONTAINER_WIDTH = thumbcontainer.width();

      largeitems.wrapInner("<table cellspacing='0'><tr><td></td></tr></table>");

      var maxheight = 0;
      largeitems.each(function(){
         if($(this).height() > maxheight) maxheight = $(this).height();
         if(largeitems.length >= 2) $(this).hide();
      });

      largeitems.find("table").add(largecontainer).height(maxheight);
      largeitems.find("table").width(largecontainer.width());

      largeitems.click(function(){
/*         pause();
         $.fancybox({
               'href': $(this).find('a').attr('href'),
               'overlayOpacity': 0.7,
               'overlayColor': '#000',
               'onClosed': resume
         });*/
         return false; 
      });

      if(largeitems.length < 2){
         thumbcontainer.hide(); 
         return;
      }

      $(this).append(large_left).append(large_right).append(thumbs_left).append(thumbs_right);

      large_left.add(large_right).css('top', (maxheight-large_left.height())/2);
      thumbs_left.add(thumbs_right).css('top', largecontainer.outerHeight(true) + (thumbheight-thumbs_left.height())/2);

      select(0);
      showHideThumbArrows();
      if(settings.autoplay){
         resetInterval();
      }

      large_left.click(function(){
         select((current-1) % thumbitems.length);
         resetInterval();
      });
      large_right.click(function(){
         select((current+1) % thumbitems.length);
         resetInterval();
      });
      thumbs_left.click(function(){
         thumbcontainer.animate({'scrollLeft': "-="+ Math.min( T_WIDTH*2, thumbcontainer.attr('scrollLeft'))}, settings.thumbSpeed/2, showHideThumbArrows);
         resetInterval();
      });
      thumbs_right.click(function(){
         thumbcontainer.animate({'scrollLeft': "+="+ Math.min( T_WIDTH*2, T_CONTAINER_SCROLLWIDTH - T_CONTAINER_WIDTH - thumbcontainer.attr('scrollLeft'))}, settings.thumbSpeed/2, showHideThumbArrows);
         resetInterval();
      });
      thumbitems.click(function(){
         select(thumbitems.index(this));
         resetInterval();
         return false;
      });

      function autoMove(){
         if(current == thumbitems.length-1){
            if(settings.autoPlayType == 'loop'){
               select(0);
            } else {
               direction = false;
               select(current-1);
            }
         } else if(current == 0){
            direction = true;
            select(1);
         } else if(!direction){
            select(current-1);
         } else {
            select(current+1);
         }
      }
      
      function select(i){
         if(current!==false){
            var prev_large = $(largeitems.get(current));
            var prev_thumb = $(thumbitems.get(current));
            prev_large.fadeOut(settings.fadeSpeed);
            prev_thumb.removeClass("selected");
         }
         var next_large = $(largeitems.get(i));
         var next_thumb = $(thumbitems.get(i));
         next_large.fadeIn(settings.fadeSpeed);
         next_thumb.addClass("selected");

         if(direction && next_thumb.attr('offsetLeft') + T_WIDTH > T_CONTAINER_WIDTH + thumbcontainer.attr('scrollLeft')){
            thumbcontainer.animate({'scrollLeft': "+="+ Math.min(T_WIDTH*2, T_CONTAINER_SCROLLWIDTH-next_thumb.attr('offsetLeft')) }, settings.thumbSpeed, showHideThumbArrows);
         } else if(next_thumb.attr('offsetLeft') < thumbcontainer.attr('scrollLeft')){
            thumbcontainer.animate({'scrollLeft': "-="+ Math.min(T_WIDTH*2,thumbcontainer.attr('scrollLeft')) }, settings.thumbSpeed, showHideThumbArrows);
         }
         
         if(settings.autoPlayType == 'bounce'){
            if(i == 0) large_left.hide();
            else large_left.show();
            if(i == thumbitems.length-1) large_right.hide();
            else large_right.show();
         }
         current = i;
      }

      function showHideThumbArrows(){
         if(thumbcontainer.attr('scrollLeft') == 0) thumbs_left.hide();
         else thumbs_left.show();
         if(thumbcontainer.attr('scrollLeft') == T_CONTAINER_SCROLLWIDTH - T_CONTAINER_WIDTH) thumbs_right.hide();
         else thumbs_right.show();
      }

      function pause(){
         if(interval) clearInterval(interval);
      }
      function resume(){
         resetInterval();
      }
      function resetInterval(){
         if(interval) clearInterval(interval);
         interval = setInterval(autoMove, settings.autoplayInterval);
      }
   });
   };

})(jQuery); 

