// JavaScript Document
// ======================================================== 
//              ===== images slider ==== 
// script: Gerard Ferrandez - Ge-1-doot - February 2008 
// http://www.dhteumeuleu.com 
// CC-BY-NC 
// ======================================================== 
 
/* ==== slider nameSpace ==== */ 
var slider = function() { 
	/* ==== private methods ==== */ 
	function getElementsByClass(object, tag, className) { 
		var o = object.getElementsByTagName(tag); 
		for ( var i = 0, n = o.length, ret = []; i < n; i++) { 
			if (o[i].className == className) ret.push(o[i]); 
		} 
		if (ret.length == 1) ret = ret[0]; 
		return ret; 
	} 
	var slides = []; 
	var S, S0, iW, iH, oP, oc, frm, NF, view, Z; 
	var wh, ht, wr, r, mx, mn; 
	/* ==== animation loop ==== */ 
	var run = function () { 
		Z += (mn - Z) * .5; 
		view.calc(); 
		var i = NF; 
		while (i--) slides[i].move(); 
	} 
	/* ==== resize  ==== */ 
	var resize = function () { 
		wh = oc.clientWidth; 
		ht = oc.clientHeight; 
		wr = wh * iW; 
		r  = ht / wr; 
		mx = wh / NF; 
		mn = (wh * (1 - iW)) / (NF - 1); 
	} 
 
	/* ==== Slide Constructor ==== */ 
	Slide = function (N) { 
		this.N      = N; 
		this.x0     = this.x1 = N * mx; 
		this.v      = 0; 
		this.loaded = false; 
		this.cpt    = 0; 
		this.start  = new Date(); 
		this.obj    = frm[N]; 
		this.txt    = getElementsByClass(this.obj, 'div', 'text'); 
		this.img    = getElementsByClass(this.obj, 'img', 'diapo'); 
		this.bkg    = document.createElement('div'); 
		this.bkg.className = 'backgroundText'; 
		this.obj.insertBefore(this.bkg, this.txt); 
		if (N == 0) this.obj.style.borderLeft = 'none'; 
		this.obj.style.left = Math.floor(this.x0) + 'px'; 
		/* ==== mouse events ==== */ 
		this.obj.parent = this; 
		this.obj.onmouseover = function() { 
			this.parent.over(); 
			return false; 
		} 
	} 
	/* ==== target positions ==== */ 
	Slide.prototype.calc = function () { 
		for (var i = 0; i <= this.N; i++) 
			slides[i].x1 = i * Z; 
		for (var i = this.N + 1; i < NF; i++) 
			slides[i].x1 = wh - (NF - i) * Z; 
	} 
	/* ==== HTML animation : move slides ==== */ 
	Slide.prototype.move = function() { 
		var s = (this.x1 - this.x0) / S; 
		/* ==== lateral slide ==== */ 
		if (this.N && Math.abs(s) > .5) 
			this.obj.style.left = Math.floor(this.x0 += s) + 'px'; 
		/* ==== vertical text ==== */ 
		var v = (this.N < NF - 1) ? slides[this.N + 1].x0 - this.x0 : wh - this.x0; 
		if (Math.abs(v - this.v) > .5) { 
			this.bkg.style.top = this.txt.style.top = Math.floor(2 + ht - (v - Z) * iH * r) + 'px'; 
			this.v = v; 
			this.cpt++; 
		} else { 
			if (!this.pro) { 
				/* ==== adjust speed ==== */ 
				this.pro = true; 
				var tps = new Date() - this.start; 
				if(this.cpt > 1) { 
					S = Math.max(2, (28 / (tps / this.cpt)) * S0); 
				} 
			} 
		} 
		if (!this.loaded) { 
			if (this.img.complete) { 
				this.img.style.visibility = 'visible'; 
				this.loaded = true; 
			} 
		} 
	} 
	/* ==== over ==== */ 
	Slide.prototype.over = function () { 
		resize(); 
		view = this; 
		this.start = new Date(); 
		this.cpt = 0; 
		this.pro = false; 
		this.calc(); 
	} 
	/* ==== start script ==== */ 
	var init = function (oCont, speed, iw, ih, op) { 
		S   = S0 = speed; 
		iW  = iw; 
		iH  = ih; 
		oP  = op; 
		oc  = document.getElementById(oCont); 
		frm = getElementsByClass(oc, 'div', 'slide'); 
		NF  = frm.length; 
		resize(); 
		for (var i = 0; i < NF; i++) 
			slides[i] = new Slide(i); 
		view = slides[0]; 
		Z = mx; 
		setInterval(run, 32); 
	} 
	/* ==== public methods ==== */ 
	return { 
		init : init 
	} 
}(); 
 
