var qxMenus = qxMenus ? qxMenus : function () {
	var private = {
		opened: null,
		closeTimer: null,
		menu: function(menuEl, effect, horizontal) {
			var menuItems=Array(), parentMenu, activationEl, menuPos=Array(), open, thisObj=this;
			this.close = function() {
				effect(menuEl);
			}
			this.id = menuEl.id.substr(menuEl.id.indexOf("_")+1);
			if (activationEl = document.getElementById("qxMenuItem_"+this.id)) {
				parentMenu = activationEl.parentNode;
				while(parentMenu.name && parentMenu.name.substr(0,9) != "qxSubMenu") parentMenu = parentMenu.parentNode;
				qxLib.event("resize", position);
				position();
				qxLib.event("mouseover", open, activationEl);
				qxLib.event("mouseover", function(){clearTimeout(private.closeTimer)}, menuEl);
				qxLib.event("mouseout", function(){private.closeTimer=setTimeout("qxMenus.closeUntil()", 500)}, activationEl);
				qxLib.event("mouseout", function(){private.closeTimer=setTimeout("qxMenus.closeUntil()", 500)}, menuEl);
				this.close();
			}
//			for (i in menuItems = qxLib.collectionToArray(menuEl.childNodes)) {
//			alert(menuItems[i].id);
//				if (menuItems[i].id.substr(0,10) != "qxMenuItem") menuItems.splice(i,1);
//			}		
			function position() {
				menuPos = qxLib.findPos(activationEl);
				if (horizontal && !parentMenu.parentMenu) menuPos.top += activationEl.offsetHeight;
				else menuPos.left += activationEl.offsetWidth;
				menuEl.style.position = "absolute"; menuEl.style.left = menuPos.left+"px"; menuEl.style.top = menuPos.top+"px"; 
			}
			function open () {
				clearTimeout(private.closeTimer);
				public.closeUntil(parentMenu);
				effect(menuEl,true);
				private.opened = thisObj;
			}
		}
	}
	var public = {
		closeUntil: function (menu) {
			var untilId;
			if (menu) untilId=menu.id;
			while(private.opened && private.opened.id!=untilId) {
				private.opened.close();
				private.opened = private.opened.parentMenu;
			}
		},
		init: function () {
			var i, j, hooks, args, subMenu;
			for (i in hooks = qxLib.collectionToArray(document.getElementsByName("qxMenus[]"))) {
				hooks[i].name = "";
				args = hooks[i].value.split("|"); //menu_name | horizontal?
				for (j=0, subMenu = document.getElementsByName("qxSubMenu["+args[0]+"]"); j<subMenu.length; j++)
					new private.menu(document.getElementById(subMenu[j].value), public.instantEffect, args[1]);
			}
		},
		instantEffect : function(el,open) {
			var disp="none";
			if (open) disp = "";
			el.style.display = disp;
		}
	}
	return public;
}();
qxLib.domLoad(qxMenus.init);
