var TimeToFade = 500.0;

function fadeIn (eid) {
    var element = document.getElementById(eid);
    if (element == null || element.FadeState == 2)
        return;
    fade (eid);
}
function fadeOut (eid) {
    var element = document.getElementById(eid);
    if (element == null || element.FadeState == -2)
        return;
    element.FadeState = 2;
    fade (eid);
}

function fade (eid, fadeoutdelay){

    var element = document.getElementById(eid);
    if(element == null)
        return;
    
    if(element.FadeState == null){
        element.FadeState = -2;
    }

    if(element.FadeState == 1 || element.FadeState == -1){
        element.FadeState = element.FadeState == 1 ? -1 : 1;
        element.FadeTimeLeft = TimeToFade-element.FadeTimeLeft;
    
    }else{
        element.FadeState = element.FadeState == 2 ? -1 : 1;
        element.FadeTimeLeft = TimeToFade;
        
        if (fadeoutdelay && fadeoutdelay > 0)
            element.FadeOutDelay = fadeoutdelay;
        
        setTimeout("animateFade(" + new Date().getTime() + ",'" +  eid + "')", 33);
    }
}

function animateFade(lastTick, eid){

    var curTick = new Date().getTime();
    var elapsedTicks = curTick-lastTick;

    var element = document.getElementById(eid);
    if(element.FadeTimeLeft <= elapsedTicks){

        element.style.opacity = element.FadeState == 1 ? '1' : '0';
        element.style.filter = 'alpha(opacity = '
                                + (element.FadeState == 1 ? '100' : '0') + ')';
        element.FadeState = element.FadeState == 1 ? 2 : -2;
        
        if (element.FadeState == 2 && element.FadeOutDelay)    // Fade out again
            setTimeout ("fade ('" + eid + "')", element.FadeOutDelay)
        
        return;
    }

    element.FadeTimeLeft -= elapsedTicks;
    var newOpVal = element.FadeTimeLeft/TimeToFade;
    if(element.FadeState == 1)
        newOpVal = 1-newOpVal;

    element.style.opacity = newOpVal;
    element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';

    setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}
