function Menu() {}

Menu.visibleMenu = false;
Menu.BG_HILITE	= "#669999";
Menu.FG_HILITE	= "#ffffff";
Menu.BG_NORMAL	= "#999966";
Menu.FG_NORMAL	= "#000000";
Menu.SUBMENU_WIDTH = 120 + 2 + 2 + 2 + 2; // real width + border left + border right + subitem padding (left & right)

Menu.onmousemove = function(event) {
	// cancel event so document.onmousemove doesn't hide the menu
	if (!event) event = window.event;
	if (event) {
		if (event.stopPropagation) event.stopPropagation();
		else event.cancelBubble = true;
	}
}

Menu.hilite = function(elem) {
	if (elem) {
		elem.onmousemove = Menu.onmousemove;
		elem.style.backgroundColor = Menu.BG_HILITE;
		elem.style.color = Menu.FG_HILITE;
	}
}

Menu.lolite = function(elem) {
	if (elem) {
		elem.onmousemove = Menu.onmousemove;
		elem.style.backgroundColor = Menu.BG_NORMAL;
		elem.style.color = Menu.FG_NORMAL;
	}
}

Menu.show = function(elem, subname) {
	Menu.hide();
	Menu.hilite(elem);
	var sub = document.getElementById("menu:" + subname);
	if (sub) {
		Menu.visibleMenu = sub;
		var wdiff = elem.offsetWidth - Menu.SUBMENU_WIDTH;
		if (wdiff < 0) wdiff = -wdiff;
		if (!document.all) wdiff += 4; // account for border in gecko browsers
		var top = Menu.getAbsoluteTop(elem) + elem.offsetHeight;
		if (document.all) top -= 6; // account for border in non-gecko browsers
		sub.style.top = String(top) + "px";
		sub.style.left = String(Menu.getAbsoluteLeft(elem) - wdiff) + "px";
	}
}

Menu.hide = function(elem) {
	Menu.lolite(elem);
	if (Menu.visibleMenu) {
		var sub = Menu.visibleMenu;
		Menu.visibleMenu = false;
		sub.style.top = "-1000px";
		sub.style.left = "-1000px";
	}
}

Menu.style2num = function(style) {
	return Number(style.replace(new RegExp(/[^0-9]*$/), ""));
}

Menu.init = function() {
	window.document.onmousemove = function() {
		Menu.hide();
	};
}

Menu.addSubMenu = function(subname) {
	var sub = document.getElementById("menu:" + subname);
	if (sub) {
		sub.onmousemove = Menu.onmousemove;
		sub.style.top = "-1000px";
		sub.style.left = "-1000px";
		sub.style.width = String(Menu.SUBMENU_WIDTH) + "px";
	}
}

Menu.getAbsoluteTop = function(o) {
	var top = o.offsetTop;
	while ((o = o.offsetParent) && (o != document.body))
		top += o.offsetTop;
	return top;
}

Menu.getAbsoluteLeft = function(o) {
	var left = o.offsetLeft;
	while ((o = o.offsetParent) && (o != document.body))
		left += o.offsetLeft;
	return left;
}