jQuery(function() {
  var ANIM_SPEED = 'fast';
  var FADE_OUT = 0.33;
  var TIME_BETWEEN_SLIDES = 9 * 1000;
  
  jQuery('.ngg-galleryoverview').each(function(i)
  {
    var gallery = jQuery(this);
    var next = jQuery('<a class="ngg-gallery-navigation ngg-gallery-next">Next</a>');
    var prev = jQuery('<a class="ngg-gallery-navigation ngg-gallery-prev">Previous</a>');
    var selectors = gallery.find('.ngg-gallery-thumbnail-box').data("slide_index", 0);
    var slides = jQuery('<div class="ngg-gallery-slides"/>');
    
    var slideshow = {
      index: 0,
      
      showNext: function() {
        selectors.eq(slideshow.index = (slideshow.index + 1) % selectors.length).triggerHandler('slide-select');      
      },
      
      showNextAndStop: function() {
        slideshow.showNext();
        slideshow.stop();
      },
      
      showPrevious: function() {
        selectors.eq(slideshow.index = (slideshow.index + selectors.length - 1) % selectors.length).triggerHandler('slide-select');      
      },
      
      showPreviousAndStop: function() {
        slideshow.showPrevious();
        slideshow.stop();
      },
      
      start: function() {
        slideshow.timer = setInterval(function() { slideshow.showNext(); }, TIME_BETWEEN_SLIDES);
      },
      
      stop: function() {
        clearInterval(slideshow.timer);
      },
      
      timer: null
    };

    gallery.find('.ngg-gallery-thumbnail-wrapper').append(next).prepend(prev);
    gallery.prepend(slides);
    
    selectors.each(function(i)
    {
      var image = jQuery('<img alt="" class="ngg-gallery-slide" />');
      var imageSelect = jQuery(this);
      
      image.attr("src", jQuery(this).find('a').attr("href")).css('zIndex', i == 0 ? 2 : 1).fadeTo(0, i == 0 ? 1 : 0);
      imageSelect.data('slide-image', image).fadeTo(0, i == 0 ? 1 : FADE_OUT).bind('slide-select', function(e)
      {
        var selector = jQuery(this);
        var selectorImage = selector.data('slide-image');
        
        slides.find("img").not(selectorImage).css('zIndex', 1).stop(true);
 
        selector.fadeTo(ANIM_SPEED, 1);
        selectorImage.css('zIndex', 2).fadeTo(ANIM_SPEED, 1, function()
        {
          slides.find("img").not(selectorImage).fadeTo(0, 0);
        });
        selectors.not(selector).fadeTo(ANIM_SPEED, FADE_OUT);
      }).click(function(e)
      {
        jQuery(this).triggerHandler('slide-select');
        slideshow.stop();
        e.preventDefault();
      });
      
      slides.append(image);
    });
    
    next.click(function(e) { slideshow.showNextAndStop(); })
    prev.click(function(e) { slideshow.showPreviousAndStop(); });
    
    slideshow.start();
  });
});

