123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- // PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
- useTimeouts = 1;
- timeoutLength = 1000; // time in ms; not significant if useTimeouts = 0;
- shutdownOnClick = 0;
- loaded = 0;
- layersMoved = 0;
- layerPoppedUp = '';
- timeoutFlag = 0;
- if (Opera56 || IE4) {
- useTimeouts = 0;
- }
- if (NS4 || Opera56 || IE4) {
- shutdownOnClick = 1;
- }
- 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 {
- //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) {
- setTop(menuName, newY);
- }
- }
- 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;
- }
- }
- 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;
- //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(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();
- 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);
- }
- if (toBeHidden != null && toBeHidden.length > 0) {
- seeThroughCoordinatesDetection();
- }
- // 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;">');
- }
- }
|