var currentOpac = 0;
var currentMenu = -1;
var opacTimer = null;
var showWait = 0;
var showTimer = null;
var hideWait = 50;
var hideTimer = null;
var menuVisible = false; // Bepaalt de keuze tussen horizontaal schuiven of direct springen

function showMenu(menuTel) {
    clearTimeout(hideTimer);

    if (showWait == 0) {
        showWait = 0;
        hideWait = 50;
        clearTimeout(opacTimer);
        if (!menuVisible) {
            subPnl.style.marginLeft = (Math.min(menuTel, 5) * 189) + "px";
            subPnl.style.marginTop = "25px";
        }
        else {
        startSlide(subPnl.id, Math.min(menuTel, 5) * 189, 26, "", "", 2);
        }
        subPnl.style.display = "block";
        setOpac(100);
        
        // Oude subOmvatPnl uitzetten
        try { document.getElementById("myMenu_subOmvatPnl" + currentMenu).style.display = "none"; }
        catch (Error) { }
        // Nieuwe aanzetten
        try { document.getElementById("myMenu_subOmvatPnl" + menuTel).style.display = "block"; }
        catch (Error) { }
        
        currentMenu = menuTel;
    }
    else {
        showWait--;
        showTimer = setTimeout("showMenu(" + menuTel + ")", 10);
    }
}

function hideMenu(dontWait) {
    // Als je van een menu met submenu springt naar een menu
    // zonder submenu dan wordt de opdracht "hideMenu(true)"
    // gegeven om het menu meteen te laten verdwijnen
    if (dontWait == true) hideWait = 0;
    
    clearTimeout(showTimer);

    if (hideWait == 0) {
        menuVisible = false;
        showWait = 0;
        hideWait = 50;
        clearTimeout(opacTimer);
        setOpac(0);
    }
    else {
        hideWait--;
        hideTimer = setTimeout("hideMenu()", 10);
    }
}

// Zet de opacity van het subPnl op een bepaalde waarde
function setOpac(value) {
    var diff = Math.abs(currentOpac - value);
    var speed = 4;
    // Uitfaden sneller
    if (value == 0) speed = 2;
    
    if (diff >= 5) {
        var newOpac = Math.round(currentOpac + ((value - currentOpac) / speed));
        subPnl.style.opacity = newOpac / 100;
        subPnl.style.filter = "alpha(opacity=" + newOpac + ")";
        currentOpac = newOpac;
        opacTimer = setTimeout("setOpac(" + value + ")", 20);
    }
    else {
        // Als de nieuwe waarde 0 is, dan ook het subPnl
        // op onzichtbaar zetten en currentMenu -1 maken.
        if (value == 0) {
            subPnl.style.display = "none";
            // Oude subOmvatPnl uitzetten
            try { document.getElementById("myMenu_subOmvatPnl" + currentMenu).style.display = "none"; }
            catch (Error) { }
            currentMenu = -1;
        }
        else {
            menuVisible = true;
        }
        subPnl.style.opacity = value / 100;
        subPnl.style.filter = "alpha(opacity=" + value + ")";
        clearTimeout(opacTimer);
    }
}

// Checkt of een object een bepaalde parent heeft
// (Wordt gebruikt in fixOnMouseOut)
function is_child_of(parent, child) {
    if (child != null) {
        while (child.parentNode) {
            if ((child = child.parentNode) == parent) {
                return true;
            }
        }
    }
    return false;
}

// Waar de normale onmouseout raar gedrag vertoont bij
// nested divjes, doet deze dat niet
function fixOnMouseOut(element, event, JavaScript_code) {
    var current_mouse_target = null;
    
    if (event.toElement) {
        current_mouse_target = event.toElement;
    }
    else if (event.relatedTarget) {
        current_mouse_target = event.relatedTarget;
    }
    
    if (!is_child_of(element, current_mouse_target) && element != current_mouse_target) {
        eval(JavaScript_code);
    }
}
