var Slideshow = new Class({
	Implements : Options,

	options    :
	{
		path     : "",
		slides   : [],
		slideCss : "",
		duration : 3000,
		delay    : 1000
	},

	initialize : function(container, options)
	{
		this.container = $(container);
		this.slides = [];
		this.currentSlide = -1;
		this.setOptions(options);
		//this.__slideshow = this;

		for (var i = 0; i < this.options.slides.length; i++)
		{
			var slide = new Element("img");
			slide.src = this.options.path + this.options.slides[i];
			slide.addClass(this.options.slideCss);
			slide.setStyle("opacity", 0.0);

			this.slides.push(slide);
		}

		this.start();
	},

	getNextSlide : function()
	{
		this.currentSlide++;

		if (this.currentSlide >= this.slides.length)
		{
			this.currentSlide = 0;
		}

		var slide = this.slides[this.currentSlide];

		return slide;
	},

	start : function()
	{
		if (this.slides.length < 2)
		{
			return;
		}

		var firstSlide = this.getNextSlide();
		firstSlide.setStyle("opacity", 1.0);

		this.container.adopt(firstSlide);
	},

	fadeSlide : function()
	{
		var slideA = this.slides[this.currentSlide];
		var slideB = this.getNextSlide();

		this.container.adopt(slideB);

		var fadeOut = new Fx.Morph(slideA, { duration : this.options.duration, transition : Fx.Transitions.Cubic.easeInOut } );
		var fadeIn = new Fx.Morph(slideB, { duration : this.options.duration, transition : Fx.Transitions.Cubic.easeInOut } );
		fadeIn.__slideshow = this;

		fadeOut.start({ "opacity" : [1.0, 0.0] } );
		fadeIn.start( { "opacity" : [0.0, 1.0] } ).chain(
			function()
			{
				slideA.remove();
			}
		);
	}
});
