/* (c) Jean Luc Biellmann - Groupe Ressources - 2011  */

var SunLight = Class.create({
	initialize : function (urls,imgs,timeoutMin,timeoutMax) {
		this.url = $A(String(urls).split(',')); // pictures sources
		this.img = $A(imgs).map(Element.extend); // DOM pictures
		this.inc = 0.05; // opacity inc
		this.duration = 50; // ms / inc
		this.timeoutMin = timeoutMin; // ms / inc
		this.timeoutMax = timeoutMax; // ms / inc
		this.pos = $A(); // indexes
		this.timeout = $A(); // timeouts
		this.opacity = $A(); // opacities because prototype 1.6.1 returns null or string, not real...
	},
	start : function () {
		for (var pnum=0;pnum<this.img.length;pnum++)
			this.randPict(pnum);
	},
	stop : function () {
		for (var pnum=0;pnum<this.img.length;pnum++)
			if (this.timeout[pnum])
				clearTimeout(this.timeout[pnum]);
	},
	randTimeout : function () {
		var to = parseInt(this.timeoutMin+Math.random()*(this.timeoutMax-this.timeoutMin));
		return to<this.timeoutMin ? this.timeoutMin : to;
	},
	randPict : function (pnum) {
		var n;
		do
			n = parseInt((Math.random()*this.url.length)%(this.url.length));
		while (this.pos.indexOf(n)!=-1);
		this.pos[pnum] = n;
		var img =E('img',{src:this.url[n]});
		img.observe('load',this.randPictLoaded.bind(this,pnum,n));
	},
	randPictLoaded : function (pnum,n) {
		this.img[pnum].src = this.url[n];
		this.setOpacity(pnum,0.);
		this.img[pnum].style.visibility = 'visible';
		this.show(pnum);
	},
	setOpacity : function (pnum,o) {
		this.img[pnum].style.opacity = o;
		this.opacity[pnum] = o;
	},
	hide : function (pnum) {
		var o = this.opacity[pnum]-this.inc;
		if (o>0.) {
			this.setOpacity(pnum,o);
			this.timeout[pnum] = setTimeout(this.hide.bind(this,pnum),this.duration);
		} else {
			this.setOpacity(pnum,0.);
			this.randPict(pnum);
		}
	},
	show : function (pnum) {
		var o = this.opacity[pnum]+this.inc;
		if (o<1.) {
			this.setOpacity(pnum,o);
			this.timeout[pnum] = setTimeout(this.show.bind(this,pnum),this.duration);
		} else {
			this.setOpacity(pnum,1.);
			this.timeout[pnum] = setTimeout(this.hide.bind(this,pnum),this.randTimeout());
		}
	}
});
	


