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

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

loaded = 1;
layersMoved = 0;
layerPoppedUp = "";

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

currentY = 0;
var old_layer = "";

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=1; i<5; i++) {
        setVisibility('Layer' + 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);
    }
}


menuLeftShift = 2;
menuRightShift = 7;

/* merkt sich, ob layer links oder rechts geoeffnet wird
   fuer sublayer wichtig.
 */
LeftRight = new Array();
LeftRight["Layer1"] = 0;

function pi_setLayer(layer, sublayer, id, hasSub) {
    LMPopUp(sublayer, id, hasSub);
    setTop(sublayer, getOffsetTop("ref"+id));
    setLayerPositionX(layer, sublayer);
}


function setLayerPositionX(parent, layer) {

    width0 = getOffsetWidth(parent);
    width1 = getOffsetWidth(layer);

    onLeft = getOffsetLeft(parent) - width1 + menuLeftShift;
//linke Postion der linken oberen Ecke ab dem 2. aufgeklappten Layer
    onRight = getOffsetLeft(parent) + width0 - menuRightShift + 4;
    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 (LeftRight[parent]) {
        if (onLeft < windowXOffset) {
            LeftRight[layer] = 0;
        } else {
            LeftRight[layer] = 1;
        }
    } else {
//alert(onRight + " - " + width1 + " - " +  windowWidth + " - " + windowXOffset);
        if (onRight + width1 > windowWidth + windowXOffset) {
            LeftRight[layer] = 1;
        } else {
            LeftRight[layer] = 0;
        }
    }
    if (LeftRight[layer]) {
        setLeft(layer, onLeft);
    } else {
        setLeft(layer, onRight);
    }
}



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;
//linke Postion der linken oberen Ecke ab dem 2. aufgeklappten Layer
        onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift + 4;
        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 {
//alert(onRight + " - " + width1 + " - " +  windowWidth + " - " + windowXOffset);
            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) {
//oberer Abstand der linken oberen Ecke des aufgeklappten Layers ab der 2. Ebene
        setTop(menuName, newY - 10);
    }
}

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

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;
//alert(":" + xb1 + ":" + xb2 + ":" + yb1 + ":" + yb2 + ":");

    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(layer, on) {
/*  if (!loaded) {
        return;
    }
    if (!layersMoved) {
        moveLayers();
        layersMoved = 1;
    }*/
    setVisibility(layer, on);
        //setHTML(layer, menuName);
}

/* erzeugt die entsprechenden layer und füllt diese mit navigationspunkten
 * dabei ist menuName, die eindeutige ID jedes Navigationspunktes
 * layer gibt an welcher Navigationslayer sichtbar gemacht wird(aufpoppt)
 * mainMenu ist der root navigationspunkt der in den layer dargestellten navigationspunkte
 * isCurrent ist boolischer wert der true gesetzt ist falls der aktuelle navigationspunkt keine unternavigationspunkte mehr besitzt
 */
function LMPopUp( layer, menuName, isCurrent)
{
    //root_id = 'ref' + mainMenu;
    //akt_id = menuName;
    // falls keine unternavigationspunkte vorhanden sind werden alle layer außer der aktuelle geschlossen
    // und standardfarbwerte und -hintergrundbilder gesetzt
    if (isCurrent == false) {
        if(layer != 'Layer5'){
            LMPopUpL(layer, false);
            if(layer == 'Layer2'){
                LMPopUpL('Layer3', false);
                LMPopUpL('Layer4', false);
                LMPopUpL('Layer5', false);
            }
        }
        old_layer = layer;
        return;
    }
    //erzeugen der layer und derer inhalte
    if (layer == 'Layer1') {

        LMPopUpL(layer, true);
        setHTML(layer, menuName);
        LMPopUpL('Layer5', false);
        LMPopUpL('Layer4', false);
        LMPopUpL('Layer3', false);
        LMPopUpL('Layer2', false);
    }

    else if (layer == 'Layer2') {
        setHTML(layer, menuName);
        LMPopUpL(layer, true);
        if(old_layer == 'Layer5' || old_layer == 'Layer4' || old_layer == 'Layer3'){
            LMPopUpL('Layer5', false);
            LMPopUpL('Layer4', false);
            LMPopUpL('Layer3', false);
        }
    }

    else if (layer == 'Layer3'){
        LMPopUpL(layer, true);
        setHTML(layer, menuName);
        if(old_layer == 'Layer4' || old_layer == 'Layer5'){
            LMPopUpL('Layer5', false);
            LMPopUpL('Layer4', false);
        }
    }
    
    else if (layer == 'Layer4'){
        LMPopUpL(layer, true);
        setHTML(layer, menuName);
        if(old_layer == 'Layer5'){
            LMPopUpL('Layer5', false);
        }
    }


    layerPoppedUp = menuName;
    //old_mainMenu = mainMenu;
    //top_level = mainMenu;
    old_layer = layer;
}

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;\">");
    }
}

