thumbScrollerRunning = false;
scrollSpeed = 0;
currentSlide = 1;
numSlides = 1;

var slideshowEngine = {
	init: function() {
    Behaviour.register(slideshowRules);	
	},
	
  showNextSlide: function() {
    nextSlide = (currentSlide == numSlides) ? 1 : currentSlide +1;
    slideshowEngine.showSlide(nextSlide);
  },

  showPrevSlide: function() {
    prevSlide = (currentSlide == 1) ? numSlides : currentSlide -1;
    slideshowEngine.showSlide(prevSlide);
  },
  
  showSlide: function(slideNum) {
    if (typeof slideNum == "undefined") slideNum = currentSlide;
    slideNum = parseInt(slideNum);
    if ((slideNum >= 1) && (slideNum <= numSlides)) {
      new Effect.Fade('currentSlide', { 
        duration: 0.5, 
        fps: 50, 
        afterFinish: function() { 
            $('currentSlideHolder').innerHTML = slides[slideNum-1];
              new Effect.Appear('currentSlideHolder', {
                duration: 0.5,
                fps: 50,
                queue:'end'
              })
              currentSlide = slideNum;
              $('slideNumber').innerHTML = slideNum;
              if (top.location.href.match("#")) top.location.href = top.location.href.slice(0, top.location.href.indexOf('#')) + '#' + slideNum;
              else top.location.href = top.location.href + "#" + slideNum;
            } 
          }) 
    }
  },
  
  toggleSlideshow: function(interval) {
    if (typeof interval == "undefined") interval = 8;
    if (typeof slideshow == "undefined") slideshowEngine.startSlideshow(interval);
    else if (slideshow.currentlyExecuting == false) slideshowEngine.stopSlideshow();
    else slideshowEngine.startSlideshow();
  },

  startSlideshow: function(interval) {
    if (typeof interval == "undefined") interval = 8;
    if (typeof slideshow == "undefined") slideshow = new PeriodicalExecuter(slideshowEngine.showNextSlide, interval);
    slideshowEngine.showNextSlide();
    slideshow.currentlyExecuting = false;
    $('slideshowToggle').src = "/gfx/icons/pause_black.png"; 
  },
  
  stopSlideshow: function() {
    if (typeof slideshow != "undefined") slideshow.currentlyExecuting = true;
    $('slideshowToggle').src = "/gfx/icons/play_black.png";
  },
  
  startThumbScroller: function() {
    if (thumbScrollerRunning) {
      var firstThumbPosX = Position.cumulativeOffset($('firstThumb'))[0];
      var lastThumbPosX = Position.cumulativeOffset($('lastThumb'))[0];
      if (((firstThumbPosX < 55) && (scrollSpeed > 0)) || ((lastThumbPosX > 640) && (scrollSpeed < 0))){
        new Effect.Move('thumbsContainerInner', { duration: 0.1, x: scrollSpeed, y: 0, transition: Effect.Transitions.linear, afterFinish: function() { if (thumbScrollerRunning) slideshowEngine.startThumbScroller(); } });
      }
    }
  },
  
  showSlideFromURL: function() {
    if (top.location.href.match("#")) {
      slideshowEngine.showSlide(top.location.href.slice(top.location.href.indexOf('#')+1));
    } 
  }
};
