﻿// Global timer table
var FadeElementTimers = new Array();
var FadeDirection = new Array();
var LastElement;

function setfadein(element, opacity, increment) {
    FadeDirection[element] = 1;


    // Get object
    obj = document.getElementById(element);

    // Tidy up timer and register
    FadeElementStop_timeout(element);

    // Make visible
    if (opacity == 0) {
        obj.style.display = "block";
    }

    // Fade in one more step
    if (opacity <= 100) {
        set_opacity(obj, opacity);
        opacity += increment;
        window.setTimeout("setfadein(\'" + element + "\'," + opacity + "," + increment + ")", 50);
    }
}

function setfadeout(element, opacity, increment) {
    FadeDirection[element] = 0;
    // Get object
    obj = document.getElementById(element);

    // If still visible, fade down one further step
    if (opacity > 0) {
        set_opacity(obj, opacity);
        opacity -= increment;
        window.setTimeout("setfadeout(\'" + element + "\', " + opacity + ", " + increment + ")", 50);
    }

    // If close to invisible, hide object completely
    if (opacity < 5) {
        obj.style.display = "none";
    }
}

function set_opacity(obj, opacity) {
    opacity = (opacity == 100) ? 99.999 : opacity;

    // IE/Win
    obj.style.filter = "alpha(opacity:" + opacity + ")";

    // Safari<1.2, Konqueror
    obj.style.KHTMLOpacity = opacity / 100;

    // Older Mozilla and Firefox
    obj.style.MozOpacity = opacity / 100;

    // Safari 1.2, newer Firefox and Mozilla, CSS3
    obj.style.opacity = opacity / 100;
}

function fade_in(element, increment, e) {
    FadeElementStop_timeout(element);
    var obj = document.getElementById(element);
    if (obj.style.display == "none") {
        //setfadein(element, 0, increment);
        FadeElementTimers[element] = setTimeout("setfadein(\'" + element + "\', 0, " + increment + ")", 100);
    } else {
        FadeElementTimers[element] = setTimeout("setfadein(\'" + element + "\', " + obj.style.opacity * 100 + ", " + increment + ")", 50);
        //setfadein(element, obj.style.opacity * 100, increment);
    }
}

function fade_out(element, increment, e) {
    // Tidy up timer and register
    FadeElementStop_timeout(element);

    var obj = document.getElementById(element);
    //setfadeout(element, obj.style.opacity * 100, increment);
    FadeElementTimers[element] = setTimeout("setfadeout(\'" + element + "\', " + obj.style.opacity * 100 + ", " + increment + ")", 10);

    // Make sure we´re outside the whole fading div
    var relTarg;
    if (e.relatedTarget) {
        relTarg = e.relatedTarget;
    } else if (e.toElement) {
        relTarg = e.toElement;
    }

    // If all the way out, fade out
    //    if (relTarg.id=="") {
    //        setfadeout(element, 100, increment);
    //    }
}

function fade_toggle(element, increment, e) {
    FadeElementStop_timeout(element);


    var obj = document.getElementById(element);

    if (FadeDirection[element] == 1) {
        fade_out(element, increment, e);
    } else {
        //alert(LastElement);
        if (LastElement != null) {
            FadeElementStop_timeout(LastElement);
            fade_out(LastElement, increment, e);
        }
        FadeDirection[element] = 1;
        fade_in(element, increment, e);
        LastElement = element;
    }

}

function FadeElementStop_timeout(element) {
    // Stop timer
    clearTimeout(FadeElementTimers[element]);

    // Clear register
    FadeElementTimers[element] = false;
}

