var slideshows = [];
function Slideshow(name,delay,autoplay,current_id,next_id,pagination_id,title_id,description_id,link_id,callback){
	this.name = name;
	this.delay = delay;
	this.autoplay = autoplay||false;
	this.callback = callback||false;
	this.speed = 0.07;
	this.timeout = false;
	this.elements = {current:$(current_id),next:$(next_id),pagination:$(pagination_id),title:$(title_id),description:$(description_id),link:$(link_id)};
	this.slides = [];
	this.n = slideshows.length;
	this.active = 0;
	slideshows[this.n] = this;
	this.verify = function(n){
		var self = slideshows[n];
		if(!self||!self.elements) return false;
		for(var e in self.elements){
			if(!self.elements[e]) return false;
		}
		return true;
	};
	this.begin = function(n){
		var self = slideshows[n];
		if(!self||!self.slides) return false;
		if(self.elements["pagination"]) self.elements["pagination"].update();
		if(self.elements["title"]) self.elements["title"].update();
		if(self.elements["description"]) self.elements["description"].update();
		if(self.elements["link"]) self.elements["link"].href = "#";
		if(self.elements["next"]) self.elements["next"].setOpacity(0);
		if(self.elements["pagination"]){
			for(var i=0;i<self.slides.length;i++){
				var li = new Element('li');
				var a = new Element('a',{href:"javascript:"+self.name+".loadSlide("+n+","+i+",true);",id:"slideshow-page-"+(i+1)});
				a.update(i+1);
				li.insert(a);
				self.elements["pagination"].insert(li);
			}
		}
		self.loadSlide(n,0,false);
	};
	this.updatePagination = function(n,s){
		var self = slideshows[n];
		if(!self) return false;
		for(var i=0;i<self.slides.length;i++){
			var a = $("slideshow-page-"+(i+1));
			if(a) a.removeClassName("active");
		}
		var a = $("slideshow-page-"+(s+1));
		if(a) a = a.addClassName("active");
	};
	this.appendSlide = function(n,image,width,height,title,description,link){
		var self = slideshows[n];
		if(!self) return false;
		var img = new Image(width,height); 
		img.src = image; 
		self.slides[self.slides.length] = {image:image,title:title,description:description,width:width,height:height,link:link};
	};
	this.loadSlide = function(n,s,clicked){
		var self = slideshows[n];
		if(!self||!self.slides||self.slides.length==0) return false;
		s = (s+self.slides.length)%self.slides.length;
		if(!self.slides[s]) return false;
		if(self.timeout){
			clearTimeout(self.timeout);
			self.timeout = false;
		}
		if(self.elements["title"]) self.elements["title"].update(self.slides[s]["title"]);
		if(self.elements["description"]) self.elements["description"].update(self.slides[s]["description"]);
		if(self.elements["link"]) self.elements["link"].href = self.slides[s]["link"];
		if(self.elements["current"]) self.elements["current"].src = self.slides[s]["image"];
		if(self.elements["current"]) self.elements["current"].style.width = self.slides[s]["width"]+"px";
		if(self.elements["current"]) self.elements["current"].style.height = self.slides[s]["height"]+"px";
		if(self.elements["current"]) self.elements["current"].style.left = ($(self.elements["current"].parentNode).getWidth()-self.slides[s]["width"])/2+"px";
		if(self.elements["current"]) self.elements["current"].style.top = ($(self.elements["current"].parentNode).getHeight()-self.slides[s]["height"])/2+"px";
		if(clicked){
			if(self.elements["next"]) self.elements["next"].setOpacity(0);
			if(self.elements["next"]) self.elements["next"].src = self.slides[s]["image"];
			if(self.elements["next"]) self.elements["next"].style.width = self.slides[s]["width"]+"px";
			if(self.elements["next"]) self.elements["next"].style.height = self.slides[s]["height"]+"px";
			if(self.elements["next"]) self.elements["next"].style.left = ($(self.elements["next"].parentNode).getWidth()-self.slides[s]["width"])/2+"px";
			if(self.elements["next"]) self.elements["next"].style.top = ($(self.elements["next"].parentNode).getHeight()-self.slides[s]["height"])/2+"px";
		}
		self.active = s;
		self.updatePagination(n,s);
		if(self.callback) self.callback(s);
		if(self.autoplay) self.timeout = setTimeout(self.name+".fade("+n+","+(s+1)%self.slides.length+")",self.delay*1000);
	};
	this.fade = function(n,s){
		var self = slideshows[n];
		if(!self) return false;
		if(self.elements["next"]&&self.elements["next"].src!=self.slides[s]["image"]){
			self.elements["next"].setOpacity(0);
			self.elements["next"].src = self.slides[s]["image"];
			self.elements["next"].style.width = self.slides[s]["width"]+"px";
			self.elements["next"].style.height = self.slides[s]["height"]+"px";
			self.elements["next"].style.left = ($(self.elements["next"].parentNode).getWidth()-self.slides[s]["width"])/2+"px";
			self.elements["next"].style.top = ($(self.elements["next"].parentNode).getHeight()-self.slides[s]["height"])/2+"px";
		}
		if(self.elements["next"]&&self.elements["next"].getOpacity()<0.99){
			if(self.elements["next"]) self.elements["next"].setOpacity(self.elements["next"].getOpacity()+self.speed);
			if(self.elements["next"]) self.timeout = setTimeout(self.name+".fade("+n+","+s+")",30);
		}else{
			self.loadSlide(n,s,false);
		}
	};
}
