
// configuration de l'application de l'effet ou pas
var Opacity_EnableFading = true;
// la liste des objets en transition
var Opacity_FadingObjects = new Hashtable();
// la valeur minimale de l'opacité
var Opacity_FadingMinValue = 0;
// la valeur maximale de l'opacité
var Opacity_FadingMaxValue = 90;

function FadeInfos(mode, activity)
{
	this.Mode = mode;
	this.IsActive = activity;
	this.LastValue = 0;
}

FadeInfos.prototype.IsFadingIn = function ()
{	
	if( this.IsActive && this.Mode == 'FadeIn' ) return true;
	else return false;
}

FadeInfos.prototype.IsFadingOut = function ()
{	
	if( this.IsActive && this.Mode == 'FadeOut' ) return true;
	else return false;
}



function Opacity_FadeIn(elementId, millisec)
{
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;
	var currentObject = document.getElementById(elementId);
	
	//if( Opacity_FadingObjects.has(elementId) && Opacity_FadingObjects.get(elementId).Mode != 'None' )
	//	return 0;
	
	// on stoppe l'éventuel effet courant
	Opacity_FadingObjects.put(elementId, new FadeInfos('None', false));
	
	// suppression de l'effet sur les navigateurs qui le supporte mal
    if( Opacity_EnableFading )
    {
    	// on mémorise le début de la transition
    	Opacity_FadingObjects.put(elementId, new FadeInfos('FadeIn', true));
    	
    	// boucle de transition
    	for(i = Opacity_GetOpacity(elementId); i <= Opacity_FadingMaxValue && Opacity_FadingObjects.get(elementId).IsFadingIn(); i++)
	    {
		    currentObject.timerRef = setTimeout("Opacity_ChangeOpacityFadeIn('" + elementId + "', " + i + ")",(timer * speed));
		    timer++;
	    }
    }
	else
		Opacity_SetOpacity(Opacity_FadingMaxValue, elementId);
}

function Opacity_ChangeOpacityFadeIn(elementId, opacity)
{
	var currentElement = Opacity_FadingObjects.get(elementId);
	if( currentElement.IsFadingIn() && currentElement.LastValue <= opacity)
	{
		Opacity_SetOpacity(opacity, elementId);
		currentElement.LastValue = opacity;
	}
}

function Opacity_FadeOut(elementId, millisec)
{
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;
	var currentObject = document.getElementById(elementId);
	
	//if( Opacity_FadingObjects.has(elementId) && Opacity_FadingObjects.get(elementId).Mode != 'Activated' )
	//	return 0;
		
	// on stoppe l'éventuel effet courant
	Opacity_FadingObjects.put(elementId, new FadeInfos('None', false));
	
	// suppression de l'effet sur les navigateurs qui le supporte mal
    if( Opacity_EnableFading )
    {
    	// on mémorise le début de la transition
    	Opacity_FadingObjects.put(elementId, new FadeInfos('FadeOut', true));
    	
    	// boucle de transition
    	for(i = Opacity_GetOpacity(elementId); i >= Opacity_FadingMinValue && Opacity_FadingObjects.get(elementId).IsFadingOut(); i--) 
	    {
		    currentObject.timerRef = setTimeout("Opacity_ChangeOpacityFadeOut('" + elementId + "', " + i + ")",(timer * speed));
		    timer++;
	    }
    }
	else
		Opacity_SetOpacity(Opacity_FadingMinValue, elementId);
}

function Opacity_ChangeOpacityFadeOut(elementId, opacity)
{
	var currentElement = Opacity_FadingObjects.get(elementId);
	if( currentElement.IsFadingOut() /*&& currentElement.LastValue >= opacity*/)
	{
		currentElement.LastValue = opacity;
		Opacity_SetOpacity(opacity, elementId);
	}
}

//change the opacity for different browsers
function Opacity_SetOpacity(opacity, elementId) 
{
	var object = document.getElementById(elementId).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
	
	if( opacity <= 0 ) object.display = 'none';
	else object.display = 'block';
}

function Opacity_GetOpacity(elementId)
{
	return document.getElementById(elementId).style.opacity * 100;
}

function Opacity_PreserveActivity(elementId)
{
	Opacity_FadingObjects.get(elementId).Mode = 'Activated';
}

function Opacity_StopActivity(elementId)
{
	Opacity_FadingObjects.get(elementId).Mode = 'None';
}