var Menu=Class.create();Menu.prototype={initialize:function(B,A,C){this.name=A;this.type="menu";this.closeDelayTimer=null;this.closingMenuItem=null;this.config();if(typeof C=="function"){this.customConfig=C;this.customConfig()}this.rootContainer=new MenuContainer(B,this)},config:function(){this.collapseBorders=true;this.quickCollapse=true;this.closeDelayTime=500}};var MenuContainer=Class.create();MenuContainer.prototype={initialize:function(B,A){this.type="menuContainer";this.menuItems=[];this.init(B,A)},init:function(D,B){this.element=$(D);this.parent=B;this.parentMenu=(this.type=="menuContainer")?((B)?B.parent:null):B;this.root=B instanceof Menu?B:B.root;this.id=this.element.id;if(this.type=="menuContainer"){if(this.element.hasClassName("dropdown")){this.menuType="dropdown"}else{if(this.element.hasClassName("flyout")){this.menuType="flyout"}else{if(this.element.hasClassName("horizontal")){this.menuType="horizontal"}else{this.menuType="standard"}}}if(this.menuType=="flyout"||this.menuType=="dropdown"){this.isOpen=false;Element.setStyle(this.element,{position:"absolute",top:"0px",left:"0px",visibility:"hidden"})}else{this.isOpen=true}}else{this.isOpen=this.parentMenu.isOpen}var E=this.element.childNodes;if(E==null){return }for(var A=0;A<E.length;A++){var C=E[A];if(C.nodeType==1){if(this.type=="menuContainer"){if(C.tagName.toLowerCase()=="li"){this.menuItems.push(new MenuItem(C,this))}}else{if(C.tagName.toLowerCase()=="ul"){this.subMenu=new MenuContainer(C,this)}}}}},getBorders:function(D){var B=["Left","Top","Right","Bottom"];var A={};for(var C=0;C<B.length;++C){if(this.element.currentStyle){var E=parseInt(this.element.currentStyle["border"+B[C]+"Width"])}else{if(window.getComputedStyle){var E=parseInt(window.getComputedStyle(this.element,"").getPropertyValue("border-"+B[C].toLowerCase()+"-width"))}else{var E=parseInt(this.element.style["border"+B[C]])}}A[B[C].toLowerCase()]=isNaN(E)?0:E}return A},open:function(){if(this.root.closeDelayTimer){window.clearTimeout(this.root.closeDelayTimer)}this.parentMenu.closeAll(this);this.isOpen=true;if(this.menuType=="dropdown"){Element.setStyle(this.element,{left:(Position.positionedOffset(this.parent.element)[0])+"px",top:(Position.positionedOffset(this.parent.element)[1]+Element.getHeight(this.parent.element))+"px"})}else{if(this.menuType=="flyout"){var B=this.parentMenu?this.parentMenu.getBorders():new Object();var A=this.getBorders();if((Position.positionedOffset(this.parentMenu.element)[0]+this.parentMenu.element.offsetWidth+this.element.offsetWidth+20)>(window.innerWidth?window.innerWidth:document.body.offsetWidth)){Element.setStyle(this.element,{left:(-this.element.offsetWidth-(this.root.collapseBorders?0:B.left))+"px"})}else{Element.setStyle(this.element,{left:(this.parentMenu.element.offsetWidth-B.left-(this.root.collapseBorders?Math.min(B.right,A.left):0))+"px"})}Element.setStyle(this.element,{top:(this.parent.element.offsetTop-B.top-this.menuItems[0].element.offsetTop)+"px"})}}Element.setStyle(this.element,{visibility:"visible"})},close:function(){Element.setStyle(this.element,{visibility:"hidden"});this.isOpen=false;this.closeAll()},closeAll:function(A){for(var B=0;B<this.menuItems.length;++B){this.menuItems[B].closeItem(A)}}};var MenuItem=Class.create();Object.extend(Object.extend(MenuItem.prototype,MenuContainer.prototype),{initialize:function(idOrElement,parent){var menuItem=this;this.type="menuItem";this.subMenu;this.init(idOrElement,parent);if(this.subMenu){this.element.onmouseover=function(){menuItem.subMenu.open()}}else{if(this.root.quickCollapse){this.element.onmouseover=function(){menuItem.parentMenu.closeAll()}}}var linkTag=this.element.getElementsByTagName("A")[0];if(linkTag){linkTag.onfocus=this.element.onmouseover;this.link=linkTag;this.text=linkTag.text}if(this.subMenu){this.element.onmouseout=function(){if(menuItem.root.openDelayTimer){window.clearTimeout(menuItem.root.openDelayTimer)}if(menuItem.root.closeDelayTimer){window.clearTimeout(menuItem.root.closeDelayTimer)}eval(menuItem.root.name+".closingMenuItem = menuItem");menuItem.root.closeDelayTimer=window.setTimeout(menuItem.root.name+".closingMenuItem.subMenu.close()",menuItem.root.closeDelayTime)}}},openItem:function(){this.isOpen=true;if(this.subMenu){this.subMenu.open()}},closeItem:function(A){this.isOpen=false;if(this.subMenu){if(this.subMenu!=A){this.subMenu.close()}}}});var menu;function configMenu(){this.closeDelayTime=300}function initMenu(){menu=new Menu("root","menu",configMenu)}Event.observe(window,"load",initMenu,false);