// JavaScript Document

//Slideshow
var Slideshow = Class.create();
Slideshow.prototype = {
	initialize : function(div_id, data_url, delay) {
		
		this.cur_image 	= 0;
		
		this.delay = delay;
		
		this.div_node 	= document.getElementById(div_id);
		this.div_node.style.position = 'relative';
		
		this.fadeOpacity = 0;
		
		this.holder_front;
		this.holder_back;
		
		this.image_back;
		this.image_front;
		this.images 	= [];
		this.timing 	= 4;
		
		this.getImages(data_url);
		
	}, addImage : function(img_path) {
		this.images.push(img_path);
	}, createHolders : function() {
		this.image_front = document.createElement('img');
		this.image_front.style.position = 'absolute';
		this.image_front.style.zIndex = '2';
		this.image_front.src = this.images[this.cur_image];
		this.div_node.appendChild(this.image_front);
		
		
		this.image_back = document.createElement('img');
		this.image_back.style.position = 'absolute';
		this.image_back.style.zIndex = '1';
		this.image_back.src = this.images[this.cur_image];
		(this.cur_image+1)%this.images.length;
		this.div_node.appendChild(this.image_back);
		
	}, fadeInFront : function() {
		if (this.fadeOpacity <= 100) {
			this.setOpacity(this.image_front, this.fadeOpacity);
			this.fadeOpacity += 5;
			window.setTimeout(this.fadeInFront.bind(this), 50);
		} else {
			this.switchImages();
		}
	}, getImages : function(data_url) {
		
		this.imagesAjax = new Ajax.Request(data_url,
		{
			method:'get',
			onSuccess: this.setImages.bind(this),
			onFailure: function(transport){ 
				alert(transport.status) }
			});
	}, nextImage : function() {
		next_image = (this.cur_image+1)%this.images.length;
		this.image_front.src = this.images[next_image];
		this.fadeInFront();
		
		this.cur_image = next_image;
	}, start : function() {
		this.nextImage();
		this.interval = window.setInterval(this.nextImage.bind(this) , (this.timing*1000));
	}, setImages : function(transport) {
		this.images = transport.responseText.evalJSON();
		this.createHolders();
		if (this.delay == null)
		{
			this.start();	
		} else {
			window.setTimeout(this.start.bind(this), this.delay)	
		}
	}, setOpacity : function(obj, opacity) {
		opacity = (opacity >= 100)?99.999:opacity;
		
		// IE/Win
		obj.style.filter = "alpha(opacity:"+opacity+")";
		// Safari<1.2, Konqueror
		obj.style.KHTMLOpacity = opacity/100;
		// Older Mozilla and Firefox
		obj.style.MozOpacity = opacity/100;
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		obj.style.opacity = opacity/100;	
	}, switchImages : function() {

		var temp_back = this.image_back;
		this.image_back  = this.image_front;
		this.image_front = temp_back;
		
		this.image_front.style.zIndex = 2;
		this.image_back.style.zIndex = 1;
		
		this.fadeOpacity = 0;
		this.setOpacity(this.image_front, 0);
	}
}