
var Diaporama = Class.create({

	photos: Array(),
	position: 0,
	pe: null,
	container: null,
	preview: null,
	lock: false,

	initialize: function(s, preview){
		this.container = $(s);
		if(preview)
			this.preview = $(preview);
		this.position = 0;
		this.photos = Array();
		var photos = $$('img.diaporama');
		for(var i=0;i<photos.length;i++)
			this.photos.push(photos[i].id);
	
		if(this.photos.length > 0){
			this.displayPreview();
			this.display();
		}
	},

	displayPreview: function(){
		if(this.preview){
			this.preview.innerHTML = "";
			for(var i=0;i<this.photos.length;i++){
				this.preview.innerHTML += '<a href="javascript: void(0);"><img id="preview_'+i+'" src="'+$(this.photos[i]).src+'" onClick="diapo.stepTo('+i+');" /></a>';
				
			}
		}
	},

	display: function(){
		this.displayPhoto();
		if(this.pe)
			this.pe.stop();
		this.pe = new PeriodicalExecuter(this.displayPhoto.bind(this), 8);
	},

	displayPhoto: function(){
	if(this.lock == false){
		if(this.position != 0)
			new Effect.Fade(this.photos[this.position-1], {queue: 'end', duration: 1.5, beforeStart: function(){this.lock = true;}.bind(this), afterFinish: function(){this.lock = false;}.bind(this)});
		else
			new Effect.Fade(this.photos[this.photos.length - 1], {queue: 'end', duration: 1.5, beforeStart: function(){this.lock = true;}.bind(this), afterFinish: function(){this.lock = false;}.bind(this)});
		
		new Effect.Appear(this.photos[this.position], {queue: 'end', duration: 1.5, beforeStart: function(){this.lock = true;}.bind(this), afterFinish: function(){this.lock = false;}.bind(this)});
		this.position++;
		if(this.position == this.photos.length)
			this.position = 0;}
	},

	start_pause: function(){
		if(this.pe == null){
			this.displayPhoto();
			this.pe = new PeriodicalExecuter(this.displayPhoto.bind(this), 8);
		}
		else{
			this.pe.stop();
			this.pe = null;
		}
	},

	stepTo: function(pos){
		for(var i =0;i<this.photos.length;i++)
			$(this.photos[i]).style.display="none";
		this.position = pos;
		this.display();
		
	},

	clear: function(){
		if(this.pe != null){
			this.pe.stop();
			this.pe = null;
		}
		this.position = 0;
		this.container = "";
		this.photos = Array();
	}
	
});
