function Slideshow(slideshowArea)
{	
	this.slideshowArea = $(slideshowArea);
	this.slides        = this.slideshowArea.select('div.slide');
	this.actualSlide   = 0;
	this.active        = false;
	this.timeInterval  = 5;   //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)
	{
		//pri nacasovanom volani automatickej slideshow je fcia volana s 2 argumentami
		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;
}

