var Slideshow = Class.create({
	
	initialize : function(elm, params) {
		
		this.elm = $(elm);
		this.counter = 0;
		this.loaded = false;
		
		this.params = Object.extend({
			uri : [],
			interval : 5,
			duration : 1,
			fps : 50
		}, params || {});
		
		this.elm.setStyle({position: "relative"});
		
		var img = document.createElement("img");
		img.src = this.params.uri[0];
		
		this.cycle();
		new PeriodicalExecuter(this.cycle.bind(this), this.params.interval);
	},
	
	cycle: function() {
		
		var elm = this.elm;
		var params = this.params;
		
		if(++this.counter == params.uri.length) {
			this.counter = 1;
			this.loaded = true;
		}
		
		var count = this.counter;
		
		var next = document.createElement("img");
		next.src = params.uri[count-1];
		
		if(!this.loaded) {
			var preload = document.createElement("img");
			preload.src = params.uri[count];
		}
		
		var currentSlide;
		
		if(elm.firstChild) {
			currentSlide = elm.firstChild;
		} else {
			currentSlide = document.createElement("div");
			elm.appendChild(currentSlide);
		}
		
		var nextSlide = $(document.createElement("div"));
		
		nextSlide.setStyle({
			position: "absolute",
			width: "280px",
			height: "186px",
			opacity: 0,
			backgroundImage: "url("+next.src+")"
		});
		
		elm.appendChild(nextSlide);
		
		new Effect.Appear(nextSlide, {
			duration : params.duration,
			fps : params.fps,
			afterFinish : function() {
				Element.remove(currentSlide);
			}
		});
	}
});
