
function MainMenu(containerId, submenuId, itemClass, selectedItem) {
	var selectedItem = selectedItem;
	var containerId = containerId;
	var overItem = null;
	var outTimer = null;
	var submenu = null;

	function toggleDisplay(item, showClass, hideClass) {
		for (var i = 0; i < item.childNodes.length; i++) {
			if (item.childNodes[i].hasClassName(showClass)) {
				Element.show(item.childNodes[i]);
			} else if (item.childNodes[i].hasClassName(hideClass)) {
				Element.hide(item.childNodes[i]);
			}
		}
	}

	function select(item) {
		deselect();
		toggleDisplay(item, "menuOn", "menuOff");
		selectedItem = item;
		selectedItem.parentNode.removeClassName("links");
		selectedItem.parentNode.addClassName("linksOn");
		submenu = null;
	}

	function deselect() {
		if (selectedItem == null) {
			return;
		}
		toggleDisplay(selectedItem, "menuOff", "menuOn");
		selectedItem.parentNode.removeClassName("linksOn");
		selectedItem.parentNode.addClassName("links");
		selectedItem = null;
	}

	function over(item) {
		
		clearTimeout(outTimer);

		if (overItem) {
			overItem.removeClassName("menuOver");
			if ($("sub" + overItem.id)) {
				$("sub" + overItem.id).removeClassName("submenuOn");
				$("sub" + overItem.id).addClassName("submenuOff");
			}
		}

		overItem = item;
		overItem.addClassName("menuOver");
		if (submenu) {
			submenu.removeClassName("submenuOn");
			submenu.addClassName("submenuOff");
		}
		if (selectedItem && $("sub" + selectedItem.id)) {
			$("sub" + selectedItem.id).removeClassName("submenuOn");
			$("sub" + selectedItem.id).addClassName("submenuOff");
		}
		if ($("sub" + item.id)) {
			$("sub" + item.id).removeClassName("submenuOff");
			$("sub" + item.id).addClassName("submenuOn");
		}
	}

	function out(item) {
		outTimer = setTimeout(
			function() {
				overItem.removeClassName("menuOver");
				overItem = null;

				if ($("sub" + item.id)) {
					$("sub" + item.id).removeClassName("submenuOn");
					$("sub" + item.id).addClassName("submenuOff");
				}

				if (submenu) {
					submenu.removeClassName("submenuOff");
					submenu.addClassName("submenuOn");
				} else if (selectedItem && $("sub" + selectedItem.id)) {
					$("sub" + selectedItem.id).removeClassName("submenuOff");
					$("sub" + selectedItem.id).addClassName("submenuOn");
				}
			},
			1000
		);
	}

	function submenuOver() {
		if (overItem) {
			over(overItem);
		}
	}

	function submenuOut() {
		if (overItem) {
			out(overItem);
		}
	}

	// Set all menu functions
	var menuItems = $(containerId).getElementsByClassName(itemClass);
	for (var i = 0; i < menuItems.length; i++) {
		menuItems[i].onmouseover = function () {
			over(this);
		};
		menuItems[i].onmouseout = function () {
			out(this);
		};
		menuItems[i].onclick = function () {
			select(this);
		};
	}

	$(submenuId).onmouseover = function () {
		submenuOver();
	};
	$(submenuId).onmouseout = function () {
		submenuOut();
	};

	selectedSubmenu = $(submenuId).getElementsByClassName("submenuOn");
	if (selectedSubmenu.length) {
		submenu = selectedSubmenu[0];
	}
}
