var Slideshow = Class.create();

Slideshow.prototype = {
	initialize: function() {
		this.currentSlide        = 0;
		this.transitionsDuration = 0.7;
		this.timeInSlide         = 5; 

		this.isInTransition      = false;
		var self = this;
	},

	/*
	 * The ID of the slide images must follow the format classOfSlideImages-{number of slide} (starting with zero)
	 */
	start: function(classOfSlideImages) {
		var self = this;
		this.classOfSlideImages = classOfSlideImages;

		document.observe("dom:loaded", function() {
			self.maxSlides = $$('.'+self.classOfSlideImages).size()-1;
		});

		window.onload = function()
		{
			if($(classOfSlideImages+'-1'))
				self.periodicalExecuter  = new PeriodicalExecuter(self.next.bindAsEventListener(self),self.timeInSlide);
		}
	},
	
	next: function(el) {
		if(this.isInTransition) return;
		if(typeof(el.tagName) != 'undefined' && typeof(this.periodicalExecuter) != 'undefined') this.periodicalExecuter.stop();

		var nextSlideNumber = this.currentSlide+1;
		if(nextSlideNumber>this.maxSlides) nextSlideNumber=0;
		this.goTo(this.currentSlide, nextSlideNumber);
		this.currentSlide = nextSlideNumber;
	},
	
	previous: function(el) {
		if(this.isInTransition) return;
		if(typeof(el.tagName) != 'undefined' && typeof(this.periodicalExecuter) != 'undefined') this.periodicalExecuter.stop();

		var prevSlideNumber = this.currentSlide-1;
		if(prevSlideNumber==0) prevSlideNumber=this.maxSlides;
		this.goTo(this.currentSlide, prevSlideNumber);
		this.currentSlide = prevSlideNumber;
	},
	
	goTo: function(oldOne, newOne) {
		this.isInTransition = true;
		var self = this;


		new Effect.Fade(this.classOfSlideImages+'-'+oldOne,{duration:this.transitionsDuration,fps:30,afterFinish:function(){self.isInTransition=false;}});
		new Effect.Appear(this.classOfSlideImages+'-'+newOne,{duration:this.transitionsDuration,fps:30});
	}
	
};

var slideshow = new Slideshow();

