/**
 */

window.addEvent('domready', function() {
	var d = new Diapo(['nature', 'ville', 'eau'], diapoImages, {
		timer: 5000,
		baseUrl: baseDiapoUrl
	});
});

var Diapo = new Class({
	
	Implements : [Options, Events],
	
	options: {
		timer: 2000,
		baseUrl : null
	},
	
	initialize: function (elements, images, options) {
		this.elements = elements;	// array les 3 ids des containers  d'img
		this.images = images;		// object : les images par univers
		this.usedImages = {};
		this.initUsedImages();
		this.usedUniv = [];
		this.actualUniv = null;
		this.setOptions(options);
		this.elements.each(function(univ, k){
			this.actualNumImage = getRandomInt(0, this.images[univ].length-1);
			this.actualUniv = univ;
			this.attachTips();
			$('photos-' + univ).setStyle('background-image', 'url("' + this.options.baseUrl + univ + '/' + encodeURIComponent(this.images[univ][this.actualNumImage]) + '")');
			this.usedImages[univ].push(this.actualNumImage);
		}.bind(this));
		this.run.periodical(this.options.timer, this);
	},
	
	initUsedImages: function() {
		this.elements.each(function(univ, k){
			this.usedImages[univ] = [];
		}.bind(this));
	},
	
	attachTips: function() {
		var infos = this.images[this.actualUniv][this.actualNumImage].replace('&apos;', '\'').split('_');
		$('photos-' + this.actualUniv).store('tip:title', '&copy; ' + infos[0] + ' ' + (infos[1] ? infos[1].slice(0, -4) : ''));
		this.tip = new Tips('#photos-' + this.actualUniv, {
			hideDelay: 250,
			showDelay: 250,
			className: 'tooltip',
			offset: {
				x: 4,
				y: -20
			},
			onBound: function(bounds) {
				if (bounds.x2 && this.container.hasClass('tip')) {
					this.container.removeClass('tip').addClass('righttip');
				} else if (!bounds.x2 && this.container.hasClass('righttip')) {
					this.container.removeClass('rightip').addClass('tip');
				}
			}
		});
	},
	
	run: function () {
		this.actualUniv = this.getUniv();
		this.actualNumImage = this.getImage(this.actualUniv);
		var image = this.options.baseUrl + this.actualUniv + '/' + this.images[this.actualUniv][this.actualNumImage];
		this.preload(image, function(){
			var self = this;
			this.attachTips();
			var fx = new Fx.Tween('photos-' + self.actualUniv, {
				property: 'opacity',
				duration: 1000
			});
			fx.start(1,0).chain(
			    function(){
			    	$('photos-' + self.actualUniv).setStyle('background-image', 'url("' + image + '")');
			    	this.start(0,1);
			    }
			);
		}.bind(this));
	},
	
	getImage: function(univ) {
		var numImage;
		if (this.usedImages[univ].length == this.images[univ].length) this.usedImages[univ] = [];
		do {
			numImage = getRandomInt(0, this.images[univ].length-1);
		} while(this.usedImages[univ].indexOf(numImage) > -1);
		this.usedImages[univ].push(numImage);
		return numImage;
	},
	
	getUniv: function() {
		var univ;
		if (this.usedUniv.length == this.elements.length) this.usedUniv = [];
		do {
			var numUniv = getRandomInt(0, this.elements.length-1);
			univ = this.elements[numUniv];
		} while(this.usedUniv.indexOf(univ) > -1);
		this.usedUniv.push(univ);
		return univ;
	},
	
	preload: function(file, successCallback) {
		var myImage = Asset.image(file, {
			onLoad: successCallback
		});
	}
	
});

function getRandomInt(min, max) {
	return Math.floor(Math.random() * (max - min + 1) + min);
}

