// 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 
} 
}(); 
