// PHP Layers Menu 3.1.0 (C) 2001-2003 Marco Pratesi (marco at telug dot it)

var useTimeouts = 1;
var timeoutLength = 1000;    // time in ms; not significant if useTimeouts = 0;
var shutdownOnClick = 0;

var loaded = 0;
var layersMoved = 0;
var layerPoppedUp = "";

var timeoutFlag = 0;
if (Opera56 || IE4) {
    var useTimeouts = 0;
}
if (NS4 || Opera56 || IE4) {
    var shutdownOnClick = 1;
}

var currentY = 0;
function grabMouse(e) {    // for NS4
    currentY = e.pageY;
}
if (NS4) {
    document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
    document.onmousemove = grabMouse;
}

function seeThroughElements(show) {
    if (show) {
        foobar = "visible";
    } else {
        foobar = "hidden";
    }
    for (i=0; i<toBeHidden.length; i++) {
        toBeHidden[i].style.visibility = foobar;
    }
}

function shutdown() {
    for (i=0; i<numl; i++) {
        LMPopUpL(listl[i], false);
    }
    layerPoppedUp = "";
    if (Konqueror || IE5) {
        seeThroughElements(true);
    }
}
if (shutdownOnClick) {
    if (NS4) {
        document.onmousedown = shutdown;
    } else {
        document.onclick = shutdown;
    }
}

function setLMTO() {
    if (useTimeouts) {
        timeoutFlag = setTimeout('shutdown()', timeoutLength);
    }
}

function clearLMTO() {
    if (useTimeouts) {
        clearTimeout(timeoutFlag);
    }
}

function moveLayerX(menuName) {
    if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
        return;
    }
    if (father[menuName] != "") {
        if (!Opera5 && !IE4) {
            width0 = lwidth[father[menuName]];
            width1 = lwidth[menuName];
        } else if (Opera5) {
            // Opera 5 stupidly and exaggeratedly overestimates layers widths
            // hence we consider a default value equal to $abscissaStep
            width0 = abscissaStep;
            width1 = abscissaStep;
        } else if (IE4) {
            width0 = getOffsetWidth(father[menuName]);
            width1 = getOffsetWidth(menuName);
        }
        onLeft = getOffsetLeft(father[menuName]) - width1 + menuLeftShift;
        onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift;
        windowWidth = getWindowWidth();
        windowXOffset = getWindowXOffset();
//        if (NS4 && !DOM) {
//            windowXOffset = 0;
//        }
        if (onLeft < windowXOffset && onRight + width1 > windowWidth + windowXOffset) {
            if (onRight + width1 - windowWidth - windowXOffset > windowXOffset - onLeft) {
                onLeft = windowXOffset;
            } else {
                onRight = windowWidth + windowXOffset - width1;
            }
        }
        if (back[father[menuName]]) {
            if (onLeft < windowXOffset) {
                back[menuName] = 0;
            } else {
                back[menuName] = 1;
            }
        } else {
            if (onRight + width1 > windowWidth + windowXOffset) {
                back[menuName] = 1;
            } else {
                back[menuName] = 0;
            }
        }
        if (back[menuName]) {
            setLeft(menuName, onLeft);
        } else {
            setLeft(menuName, onRight);
        }
    }
    moveLayerY(menuName);    // workaround needed for Mozilla < 1.4 for MS Windows
}

function moveLayerY(menuName) {
    if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
        return;
    }
    if (!layersMoved) {
        moveLayers();
        layersMoved = 1;
    }
    if (!NS4) {
        newY = getOffsetTop("ref" + menuName);
    } else {
        newY = currentY;
    }
    newY += menuTopShift;
    layerHeight = getOffsetHeight(menuName);
    windowHeight = getWindowHeight();
    windowYOffset = getWindowYOffset();
    if (newY + layerHeight > windowHeight + windowYOffset) {
        if (layerHeight > windowHeight) {
            newY = windowYOffset;
        } else {
            newY = windowHeight + windowYOffset - layerHeight;
        }
    }
    if (Math.abs(getOffsetTop(menuName) - newY) > thresholdY) {
        setTop(menuName, newY);
    }
}

function moveLayerX1(menuName, father) {
    if (!lwidthDetected) {
        return;
    }
    if (!Opera5 && !IE4) {
        var width1 = lwidth[menuName];
    } else if (Opera5) {
        // Opera 5 stupidly and exaggeratedly overestimates layers widths
        // hence we consider a default value equal to $abscissaStep
        var width1 = abscissaStep;
    }
    var foobar = getOffsetLeft(father + menuName);
if (!IE4) {
    var windowWidth = getWindowWidth();
    var windowXOffset = getWindowXOffset();
    if (foobar + width1 > windowWidth + windowXOffset) {
        foobar = windowWidth + windowXOffset - width1;
    }
    if (foobar < windowXOffset) {
        foobar = windowXOffset;
    }
}
    setLeft(menuName, foobar);
}

function layersOverlap(layer, i) {
    if (Konqueror22) {
        return true;
    }

//    xa1 = getOffsetLeft(layer);
//setLeft(layer, xa1);
    xa1 = layerLeft[layer];
    xa2 = xa1 + getOffsetWidth(layer);
//setWidth(layer, xa2-xa1);
//    ya1 = getOffsetTop(layer);
//setTop(layer, ya1);
    ya1 = layerTop[layer];
    ya2 = ya1 + getOffsetHeight(layer);
//setHeight(layer, ya2-ya1);
//alert(":" + xa1 + ":" + xa2 + ":" + ya1 + ":" + ya2 + ":");

    xb1 = toBeHiddenLeft[i];
    xb2 = xb1 + toBeHidden[i].offsetWidth;
    yb1 = toBeHiddenTop[i];
    yb2 = yb1 + toBeHidden[i].offsetHeight;

    if(xb1>xa1) xa1=xb1; if(xb2<xa2) xa2=xb2;
    if(yb1>ya1) ya1=yb1; if(yb2<ya2) ya2=yb2;

    return (xa2>xa1 && ya2>ya1);
}

function seeThroughWorkaround(menuName, on) {
    for (i=0; i<toBeHidden.length; i++) {
        if (layersOverlap(menuName, i)) {
            if (on) {
                toBeHidden[i].style.visibility = "hidden";
            } else {
                toBeHidden[i].style.visibility = "visible";
            }
        }
    }
}

function LMPopUpL(menuName, on) {
    if (!loaded) {
        return;
    }
    if (!layersMoved) {
        moveLayers();
        layersMoved = 1;
    }
    setVisibility(menuName, on);
}

function LMPopUp(menuName, isCurrent) {
    if (!loaded || menuName == layerPoppedUp || (isVisible(menuName) && !isCurrent)) {
        return;
    }
    if (menuName == father[layerPoppedUp]) {
        LMPopUpL(layerPoppedUp, false);
//        seeThroughWorkaround(menuName, false);
    } else if (father[menuName] == layerPoppedUp) {
        LMPopUpL(menuName, true);
        seeThroughWorkaround(menuName, true);
    } else {
        shutdown();
        var foobar = menuName;
        do {
            LMPopUpL(foobar, true);
            seeThroughWorkaround(foobar, true);
            foobar = father[foobar];
        } while (foobar != "")
    }
/*
    if (layerPoppedUp == "") {
        seeThroughElements(false);
    }
*/
    layerPoppedUp = menuName;
}

function resizeHandler() {
    if (NS4) {
        window.location.reload();
    }
    shutdown();
    for (i=0; i<numl; i++) {
        setLeft(listl[i], 0);
        setTop(listl[i], 0);
    }
//    moveLayers();
    layersMoved = 0;
}
window.onresize = resizeHandler;

function yaresizeHandler() {
    if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
        if (Konqueror22 || Opera5) {
            window.location.reload();    // Opera 5 often fails this
        }
        origWidth  = window.innerWidth;
        origHeight = window.innerHeight;
        resizeHandler();
    }
    setTimeout('yaresizeHandler()', 500);
}
function loadHandler() {
    if (Konqueror22 || Opera56) {
        origWidth  = window.innerWidth;
        origHeight = window.innerHeight;
        yaresizeHandler();
    }
}
window.onload = loadHandler;

function fixieflm(menuName) {
    if (DOM) {
        setWidth(menuName, "100%");
    } else {    // IE4 IS SIMPLY A BASTARD !!!
        document.write("</div>");
        document.write("<div id=\"IE4" + menuName + "\" style=\"position: relative; width: 100%; visibility: visible;\">");
    }
}








