/**
 * Slideshow Widget
 *
 * Dependencies: prototype, scriptaculous
 *
 * Note: the last image will always be shown first.
 *
 * Example Usage...
 *
 * === HTML ===
 *
 * <div id="slideshow">
 *    <div class="slide"><img src="1.jpg"/></div>
 *    <div class="slide"><img src="2.jpg"/></div>
 *    <div class="slide"><img src="3.jpg"/></div>
 * </div>
 * 
 *
 * === CSS ===
 * 
 * #slideshow {
 *    position: relative;
 *    width: 240px;
 *    height: 180px;
 *    border: 1px solid #F00;
 * }
 *
 * #slideshow .slide {
 *    position: absolute;
 *    top: 0;
 *    left: 0;
 * }
 *
 *
 * === JS ===
 *
 * new DSala.Slideshow("slideshow", 2, 1);
 *
 */


var DSala = {};


DSala.Slideshow = function (slideshowId, pause, fadeRate) {
   this.id = slideshowId;
   this.pause = pause * 1000;
   this.fadeRate = fadeRate;
   this.slides = document.getElementsByClassName('slide', this.id);
   this.currentSlideIndex = this.slides.length - 1;
   //this.slides[this.slides.length - 1].style.zIndex -= this.slides.length;
   //this.resetZIndex();
   Element.show(slideshowId);
   setInterval((function(){this.nextSlide();}).bind(this), this.pause + DSala.Slideshow.pauseOffset);   
};


DSala.Slideshow.prototype = {

   nextSlide : function () {
      //debugger;
      this.resetZIndex();
      var fadeRate = this.fadeRate;
      Effect.Fade(this.slides[this.currentSlideIndex], {
         duration: fadeRate, 
         afterFinish: function(effect) {
            effect.element.style.zIndex = 0;
            Element.show(effect.element);
            Element.setOpacity(effect.element, 1);
         }
      });
      this.currentSlideIndex = (this.currentSlideIndex + 1) % this.slides.length;
      //setTimeout((function(){this.nextSlide();}).bind(this), this.pause + (this.fadeRate * 1000));
   },

   resetZIndex : function () {
      for (var i = 0; i < this.slides.length; i++) {
        var slide = this.slides[(this.currentSlideIndex + i) % this.slides.length];
        slide.style.zIndex = this.slides.length - i;
      }
   }
      

};


DSala.Slideshow.pauseOffset = 850;