Menu = {
	Version : "1.1",
	HORIZONTAL : 1,
	VERTICAL : 2,
	_menuId : null,
	_menuNode : null,
	_hideTimeout : null,
	_activeLink : null,
	_activeSubMenu : null,
	_orientation : 1,
	_hidePause : 400,
	_opacity : 1,
	setHidePause : function(secs) {
		Menu._hidePause = secs * 1000;
		alert("Deprecated method Menu.setHidePause() used: Please use the options argument for Menu.init().");
	},
	init : function(menuId, options) {
		Menu._menuId = (typeof menuId == "string") ? menuId : "menu";
		if (options) {
			if (options.orientation != undefined) {
				Menu._orientation = options.orientation;
			}
			if (options.hidePause != undefined) {
				Menu._hidePause = options.hidePause * 500;
			}
			if (options.opacity != undefined) {
				Menu._opacity = options.opacity;
			}
		}
		if (document.loaded === true || $(Menu._menuId)) {
			Menu._doInit();
		} else {
			if (document.observe) {
				document.observe("dom:loaded", Menu._doInit);
			} else {
				Element.observe(window, "load", Menu._doInit);
			}
		}
	},
	_doInit : function() {
		Menu._menuNode = $(Menu._menuId);
		var elements = (Element.select) ? Menu._menuNode.select("li") : Menu._menuNode.getElementsBySelector("li");
		for (var i = 0; i < elements.length; i++) {
			if (((Element.select)? elements[i].select("ul").length : elements[i].getElementsBySelector("ul").length) > 0) {
				var a = (Element.select)? elements[i].select("a")[0]: elements[i].getElementsBySelector("a")[0];
				Element.observe(elements[i], "mouseover", Menu._showSubMenu.bind(elements[i]));
				Element.observe(elements[i], "mouseout", Menu._hideSubMenu.bind(elements[i]));
				Element.addClassName(a, "submenu");
			} else {
				Element.observe(elements[i], "mouseover", Menu._quickHideSubMenu);
			}
		}
		if (document.getElementById(current)) {
			this._showSubMenu.call($(current));
		}
	},
	_showSubMenu : function(e) {
		var a = (Element.select) ? this.select("a")[0] : this.getElementsBySelector("a")[0];
		var subMenu = (Element.select) ? this.select("ul")[0] : this.getElementsBySelector("ul")[0];
		Menu._quickHideSubMenu();
		Element.addClassName(a, "menu_open");
		Element.addClassName(a.parentNode, "menu_open");

		// hackje seperators weghalen en huidige menu open te laten
		Element.next(a.parentNode, "li").addClassName('hideseperator');
		Element.previous(a.parentNode, "li").addClassName('hideseperator');
		//---
		
		if (a.parentNode.id == current) {
			Element.setStyle(subMenu, {
				"visibility" : "visible",
				"position" : "absolute"
			});
		}
		var pos = (Element.positionedOffset) ? this.positionedOffset() : Position.positionedOffset(this);
		if (Menu._orientation == Menu.HORIZONTAL) {
			subMenu.setStyle({
				"top" : (pos[1] + this.getHeight()) + "px"
			});
		} else if (Menu._orientation == Menu.VERTICAL) {
			subMenu.setStyle({
				"left" : (pos[0] + this.getWidth()) + "px",
				"top" : pos[1] + "px"
			});
		}
		if (Menu._opacity > 0 && Menu._opacity < 1) {
			subMenu.setOpacity(Menu._opacity);
		}
		Menu._activeLink = a;
		Menu._activeSubMenu = subMenu;
	},
	_quickHideSubMenu : function() {
		if (Menu._hideTimeout) {
			window.clearTimeout(Menu._hideTimeout);
		}
		Menu._doHideSubMenu(Menu._activeLink, Menu._activeSubMenu);
	},
	_hideSubMenu : function() {
		var a = (Element.select) ? this.select("a")[0] : this.getElementsBySelector("a")[0];
		var subMenu = (Element.select) ? this.select("ul")[0] : this.getElementsBySelector("ul")[0];		
	
		if (Menu._hidePause <= 0) {
			Menu._doHideSubMenu(a, subMenu);
			if (document.getElementById(current)) {
				Menu._showSubMenu.call($(current));
			}
		} else {
			Menu._hideTimeout = window.setTimeout(function() {
				Menu._doHideSubMenu(a, subMenu);
				if (document.getElementById(current)) {
					Menu._showSubMenu.call($(current));
				}
			}, Menu._hidePause);
		}
	},
	_doHideSubMenu : function(a, subMenu) {
		if (a) {
			if (a.parentNode.id != current) {
				Element.removeClassName(a, "menu_open");
				Element.removeClassName(a.parentNode, "menu_open");
				
				//hackje
				Element.next(a.parentNode,"li").removeClassName('hideseperator');
				Element.previous(a.parentNode,"li").removeClassName('hideseperator');
				//--
			}
		}
		if (subMenu) {
			/*
			Element.setStyle(subMenu, {
				"visibility" : "hidden"
			});
			*/
		}
	}
};