//fade routines w/locking

var lock = new Object;
var fadeIn = new Object;

function SetOpacity(elem, opacityAsInt)
{
    var opacityAsDecimal = opacityAsInt;
	
    if (opacityAsInt > 100)
        opacityAsInt = opacityAsDecimal = 100; 
    else if (opacityAsInt < 0)
        opacityAsInt = opacityAsDecimal = 0; 
	
    opacityAsDecimal /= 100;
    if (opacityAsInt < 1)
        opacityAsInt = 1; // IE7 bug, text smoothing cuts out if 0
	
    elem.style.opacity = opacityAsDecimal;
    elem.style.filter  = "alpha(opacity=" + opacityAsInt + ")";
}

function FadeOpacity(elemId, fromOpacity, toOpacity, time, fps)
{

    if(!lock[elemId])
    {
        var steps = Math.ceil(fps * (time / 1000));
        var delta = (toOpacity - fromOpacity) / steps;
    	
    	
        lock[elemId]=true;
        if(fromOpacity==0)
            fadeIn[elemId]=true;
        else
            fadeIn[elemId]=false;
            
        
        FadeOpacityStep(elemId, 0, steps, fromOpacity, delta, (time / steps));
    }
    else
    {
        if(fadeIn[elemId])
        {
            setTimeout("FadeOpacity('"+elemId+"', 100, 0, 200, 20)",200);
        }
        else
        {
            setTimeout("FadeOpacity('"+elemId+"', 0, 100, 200, 20)",200);
        }
    }
}

function FadeOpacityStep(elemId, stepNum, steps, fromOpacity, delta, timePerStep)
{
    SetOpacity(document.getElementById(elemId), Math.round(parseInt(fromOpacity) + (delta * stepNum)));
   
    if (stepNum < steps)
        setTimeout("FadeOpacityStep('" + elemId + "', " + (stepNum+1) + ", " + steps + ", " + fromOpacity + ", " + delta + ", " + timePerStep + ");", timePerStep);
    else
        lock[elemId]=false;
}
