jsTransition = function(idContainer, params){this.init(idContainer, params);return this;}

jsTransition.prototype.init = function(idContainer, params)
{
	this.pause = (params['pause']) ? parseInt(params['pause']) : 2000; // Pause entre chaque transition
	this.transitionDelay = (params['transitionDelay']) ? parseInt(params['transitionDelay']) : 20;		// Délai de transition pour le fondu
	this.deltaOpacity = (params['deltaOpacity']) ? parseFloat(params['deltaOpacity']) : 0.05;			// Delta de l'opacité entre chaque transition

	// Conf à ne pas toucher
	this.isIE = document.all;
	this.isOpera = !!window.opera;
	this.currentOpacity = 0;
	this.currentLi = 0;
	this.dblSpeed = false;
	
	this.elts = document.getElementById(idContainer).getElementsByTagName("li");
	
	for (i = 0; i < this.elts.length; i++)
	{
		this.elts[i].style.position = 'absolute';
		this.elts[i].style.left = this.elts[i].style.top = '0px';
		this.setOpacity(this.elts[i], 0);
		this.elts[i].style.display = (i == 0) ? 'block' : 'none';
	}
	this.changeContent(1);
};

jsTransition.prototype.goNextPrev = function(way)
{
	way = (way != -1) ? 1 : -1;
	if(this.inTransition === true) return false;
	if (this.timeOut) clearTimeout(this.timeOut);
	this.dblSpeed = true;
	this.changeContent(0, way);
};

jsTransition.prototype.changeContent = function(step, way)
{
	way = (way != -1) ? 1 : -1;
	deltaOpacity = (this.dblSpeed === true) ? this.deltaOpacity * 4 : this.deltaOpacity;
	switch(step)
	{
		case 0:
			this.currentOpacity = (Math.max(0, this.currentOpacity - deltaOpacity));
			if (this.currentOpacity == 0)
			{
				this.setOpacity(this.elts[this.currentLi], 0);
				this.elts[this.currentLi].style.display = 'none';
				if (way == 1) this.currentLi = (this.currentLi < this.elts.length - 1) ? this.currentLi + 1 : 0;
				else this.currentLi = (this.currentLi > 0) ? this.currentLi - 1 : parseInt(this.elts.length - 1);
				this.elts[this.currentLi].style.display = 'block';
				step = 1;
			}
		break;
		case 1:
			this.currentOpacity = (Math.min(1, this.currentOpacity + deltaOpacity));
			if (this.currentOpacity == 1) step = false;
		break;
	}
	this.setOpacity(this.elts[this.currentLi], this.currentOpacity);
	
	if (step !== false)
	{
		this.inTransition = true;
		setTimeout(this.bindArgs(this, this.changeContent, [step, way]), this.transitionDelay);
	}
	else
	{
		this.inTransition = false;
		this.dblSpeed = false;
		this.timeOut = setTimeout(this.bindArgs(this, this.changeContent, [0]), this.pause);
	}
}

jsTransition.prototype.bindArgs = function(objet, methode, myArgs) {
  return function() {
    return methode.apply(objet, myArgs);
  }
};

jsTransition.prototype.setOpacity = function(obj, opacity)
{
	if (this.isIE && !this.isOpera)
	{
	    ieOpacity = opacity * 100;
	    obj.style.filter = "alpha(opacity=" + ieOpacity + ")";
	}
	else
	{
		obj.style.opacity = opacity;
	}
};