// PHP Layers Menu 2.3.2 (C) 2001-2003 Marco Pratesi (marco at telug dot it)

useTimeouts = 1;
timeoutLength = 300;	// time in ms; not significant if useTimeouts = 0;
shutdownOnClick = 0;

timeoutFlag = 0;
if (Opera || IE4) {
	useTimeouts = 0;
}
if (NS4 || Opera || IE4) {
	shutdownOnClick = 1;
}

//alert("DOM: "+DOM+"; NS4: "+NS4+"; Opera: "+Opera+"; IE4: "+IE4);

loaded = 0;
movedlayers = 0;

menuxleftshift = 0;
menuxrightshift = 0;

currentY = 0;
function grabMouse(e) {	// for NS4
	currentY = e.pageY;
}
if (NS4) {
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
	document.onmousemove = grabMouse;
}

function shutdown() {
	for (i=1; i<=numl; i++) {
		popUpL(listl[i], false);
	}
}
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 resizeHandler() {
	if (NS4) {
		window.location.reload();
	}
	shutdown();
//	for (i=0; i<=numl; i++) {
//		setleft(listl[i], 0);
//		settop(listl[i], 0);
//	}
	moveLayers();
	movedlayers = 1;
}
window.onresize = resizeHandler;

function yaresizeHandler() {
	if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
		if (Konqueror2 || Opera5) {
			window.location.reload();	// Opera 5 often fails this
		}
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		resizeHandler();
	}
	setTimeout('yaresizeHandler()', 500);
}
function loadHandler() {
	if (Konqueror2 || Opera) {
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		yaresizeHandler();
	}
}
window.onload = loadHandler;

function setX(menuName) {
	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 $abscissa_step
			width0 = abscissa_step;
			width1 = abscissa_step;
		} else if (IE4) {
			width0 = getoffsetwidth(father[menuName]);
			width1 = getoffsetwidth(menuName);
		}
		onleft = getoffsetleft(father[menuName]) - width1 + menuxleftshift;
		onright = getoffsetleft(father[menuName]) + width0 - menuxrightshift;
		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);
		}
	}
}

function moveLayerY(menuName, ordinate_margin) {
if (loaded) {
	if (!movedlayers) {
		moveLayers();
		movedlayers = 1;
	}
	if (!NS4) {
//		newY = getoffsettop("ref" + menuName);
		newY = getoffsettop(menuName);
	} else {
		newY = currentY;
	}
	newY -= ordinate_margin;
	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 popUp(menuName) {
	shutdown();
	setX(menuName);
	do {
		popUpL(menuName,true);
		menuName = father[menuName];
	} while (menuName != "")
}

function popUpL(menuName,on) {
	if (loaded) {
		if (!movedlayers) {
			moveLayers();
			movedlayers = 1;
		}

		if (on) {
//			moveLayers();
			if (DOM) {
				document.getElementById(menuName).style.visibility = "visible";
			} else if (NS4) {
				document.layers[menuName].visibility = "show";
			} else {
				document.all[menuName].style.visibility = "visible";
			}
		} else {
			if (DOM) {
				document.getElementById(menuName).style.visibility = "hidden";
			} else if (NS4) {
				document.layers[menuName].visibility = "hide";
			} else {
				document.all[menuName].style.visibility = "hidden";
			}
		}
	}
}

function setleft(layer,x) {
	if (DOM && !Opera5) {
		document.getElementById(layer).style.left = x + "px";
	} else if (Opera5) {
		document.getElementById(layer).style.left = x;
	} else if (NS4) {
		document.layers[layer].left = x;
	} else {
		document.all[layer].style.pixelLeft = x;
	}
}

function getoffsetleft(layer) {
	var value = 0;
	if (DOM) {	// Mozilla, Konqueror >= 2.2, Opera 5 and 6, IE
		object = document.getElementById(layer);
		value = object.offsetLeft;
//alert (object.tagName + " --- " + object.offsetLeft);
		while (object.tagName != "BODY" && object.offsetParent) {
			object = object.offsetParent;
//alert (object.tagName + " --- " + object.offsetLeft);
			value += object.offsetLeft;
		}
	} else if (NS4) {
		value = document.layers[layer].pageX;
	} else {	// IE4 IS SIMPLY A BASTARD !!!
		if (document.all["IE4" + layer]) {
			layer = "IE4" + layer;
		}
		object = document.all[layer];
		value = object.offsetLeft;
		while (object.tagName != "BODY") {
			object = object.offsetParent;
			value += object.offsetLeft;
		}
	}
	return (value);
}

function settop(layer,y) {
	if (DOM && !Opera5) {
		document.getElementById(layer).style.top = y + "px";
	} else if (Opera5) {
		document.getElementById(layer).style.top = y;
	} else if (NS4) {
		document.layers[layer].top = y;
	} else {
		document.all[layer].style.pixelTop = y;
	}
}

function getoffsettop(layer) {
// IE 5.5 and 6.0 behaviour with this function is really strange:
// in some cases, they return a really too large value...
// ... after all, IE is buggy, nothing new
	var value = 0;
	if (DOM) {
		object = document.getElementById(layer);
		value = object.offsetTop;
		while (object.tagName != "BODY" && object.offsetParent) {
			object = object.offsetParent;
			value += object.offsetTop;
		}
	} else if (NS4) {
		value = document.layers[layer].pageY;
	} else {	// IE4 IS SIMPLY A BASTARD !!!
		if (document.all["IE4" + layer]) {
			layer = "IE4" + layer;
		}
		object = document.all[layer];
		value = object.offsetTop;
		while (object.tagName != "BODY") {
			object = object.offsetParent;
			value += object.offsetTop;
		}
	}
	return (value);
}

function setwidth(layer,w) {
	if (DOM) {
		document.getElementById(layer).style.width = w;
	} else if (NS4) {
//		document.layers[layer].width = w;
	} else {
		document.all[layer].style.pixelWidth = w;
	}
}

function getoffsetwidth(layer) {
	var value = 0;
	if (DOM && !Opera) {
		value = document.getElementById(layer).offsetWidth;
	} else if (NS4) {
		value = document.layers[layer].document.width;
	} else if (Opera) {
		value = document.getElementById(layer).style.pixelWidth;
	} else {	// IE4 IS SIMPLY A BASTARD !!!
		if (document.all["IE4" + layer]) {
			layer = "IE4" + layer;
		}
		value = document.all[layer].offsetWidth;
	}
	return (value);
}

function setheight(layer,h) {	// unused, not tested
	if (DOM) {
		document.getElementById(layer).style.height = h;
	} else if (NS4) {
//		document.layers[layer].height = h;
	} else {
		document.all[layer].style.pixelHeight = h;
	}
}

function getoffsetheight(layer) {
	var value = 0;
	if (DOM && !Opera) {
		value = document.getElementById(layer).offsetHeight;
	} else if (NS4) {
		value = document.layers[layer].document.height;
	} else if (Opera) {
		value = document.getElementById(layer).style.pixelHeight;
	} else {	// IE4 IS SIMPLY A BASTARD !!!
		if (document.all["IE4" + layer]) {
			layer = "IE4" + layer;
		}
		value = document.all[layer].offsetHeight;
	}
	return (value);
}

function getwindowwidth() {
	var value = 0;
	if ((DOM && !IE) || Konqueror || Opera) {
		value = top.innerWidth;
	} else if (NS4) {
		value = document.width;
	} else {	// IE
		if (document.documentElement && document.documentElement.clientWidth) {
			value = document.documentElement.clientWidth;
		} else if (document.body) {
			value = document.body.clientWidth;
		}
	}
	if (isNaN(value)) {
		value = top.innerWidth;
	}
	return (value);
}

function getwindowxoffset() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera) {
		value = window.pageXOffset;
	} else {	// IE
		if (document.documentElement && document.documentElement.scrollLeft) {
			value = document.documentElement.scrollLeft;
		} else if (document.body) {
			value = document.body.scrollLeft;
		}
	}
	return (value);
}

function getwindowheight() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera) {
		value = top.innerHeight;
	} else {	// IE
		if (document.documentElement && document.documentElement.clientHeight) {
			value = document.documentElement.clientHeight;
		} else if (document.body) {
			value = document.body.clientHeight;
		}
	}
	if (isNaN(value)) {
		value = top.innerHeight;
	}
	return (value);
}

function getwindowyoffset() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera) {
		value = window.pageYOffset;
	} else {	// IE
		if (document.documentElement && document.documentElement.scrollTop) {
			value = document.documentElement.scrollTop;
		} else if (document.body) {
			value = document.body.scrollTop;
		}
	}
	return (value);
}

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;\">");
	}
}

function setLMCookie(name, value) {
	// [Dark Pastor] added expire date of N days to store cookie values
	var expire_days = 30;
	var expire_date = new Date();
	var ms_from_now = expire_days * 24 * 60 * 60 * 1000;
	expire_date.setTime(expire_date.getTime() + ms_from_now);
	var expire_string = expire_date.toGMTString();

	document.cookie = name + "=" + value + "; expires=" + expire_string; // + "; domain=.crpg.ru";
}

function getLMCookie(name) {
	foobar = document.cookie.split(name + "=");
	if (foobar.length < 2) {
		return null;
	}
	tempstring = foobar[1];
	if (tempstring.indexOf(";") == -1) {
		return tempstring;
	}
	yafoobar = tempstring.split(";");
	return yafoobar[0];
}

function parse_expand_string() {
	expand_string = getLMCookie("expand");
	expand = new Array();
	if (expand_string) {
		expanded = expand_string.split("|");
		for (i=0; i<expanded.length-1; i++) {
			expand[expanded[i]] = 1;
		}
	}
}

function parse_collapse_string() {
	collapse_string = getLMCookie("collapse");
	collapse = new Array();
	if (collapse_string) {
		collapsed = collapse_string.split("|");
		for (i=0; i<collapsed.length-1; i++) {
			collapse[collapsed[i]] = 1;
		}
	}
}

parse_expand_string();
parse_collapse_string();

function save_expand_string() {
	expand_string = "";
	for (i=0; i<expand.length; i++) {
		if (expand[i] == 1) {
			expand_string += i + "|";
		}
	}
	setLMCookie("expand", expand_string);
}

function save_collapse_string() {
	collapse_string = "";
	for (i=0; i<collapse.length; i++) {
		if (collapse[i] == 1) {
			collapse_string += i + "|";
		}
	}
	setLMCookie("collapse", collapse_string);
}
