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