function Slideshow(slideshowArea) {	
	this.slideshowArea = $(slideshowArea);
	this.slides        = this.slideshowArea.select('div.slide');
	this.actualSlide   = 0;
	this.active        = false;
	this.timeInterval  = slt;   //sec
	this.fadeInterval  = 2; //sec
	this.pe            = null;
	this.block		   = false;
} 

Slideshow.prototype.run = function() {
	if(this.slides.size() > 0 && $(this.slideshowArea.parentNode).visible()) 	{
		this.active = true;
		this.pe = new PeriodicalExecuter(this.slide.bind(this, null), this.timeInterval);
	}
}

Slideshow.prototype.stop = function() {
	if(this.pe) {
		this.pe.stop();
	}
}

Slideshow.prototype.slide = function(slideNumber) {
	if(this.block == false) {
		if($(arguments).length == 2) {
			slideNumber = (this.actualSlide + 1) % this.slides.size();
		}
		else {
			this.stop();
		}
		if(slideNumber != this.actualSlide) {
			this.block = true;
			var newSlide = $('slide_' + slideNumber);
			var oldSlide = $('slide_' + this.actualSlide);
			$('slideLink_' + this.actualSlide).removeClassName('active');
			$('slideLink_' + slideNumber).addClassName('active');
			if(newSlide && oldSlide) {
				this.slideshowArea.insertBefore(newSlide, oldSlide);
				newSlide.show();
				this.actualSlide = slideNumber;
				new Effect.Fade(oldSlide.identify(),{duration:this.fadeInterval, afterFinish: this.unblock.bindAsEventListener(this)});
			}			
		}
	}
}

Slideshow.prototype.show = function(slideNumber) {
	if(this.block == false) {
		this.stop();
		if(slideNumber != this.actualSlide) {
			var newSlide = $('slide_' + slideNumber);
			var oldSlide = $('slide_' + this.actualSlide);
			$('slideLink_' + this.actualSlide).removeClassName('active');
			$('slideLink_' + slideNumber).addClassName('active');
			if(newSlide && oldSlide) {
				this.slideshowArea.insertBefore(newSlide, oldSlide);
				newSlide.show();
				this.actualSlide = slideNumber;
				oldSlide.hide();
			}			
		}
	}
}

Slideshow.prototype.unblock = function() {
	this.block = false;
}