
Menu.count=0;Menu.imgPopup=new Image();Menu.imgPopupHover=new Image();Menu.iconsPath="";Menu.container=null;Menu.parseXML=function(xmlDoc,onMenuItemClick){var menus=new Array();var menusNode=xmlDoc.getElementsByTagName("Menus")[0];var menuIndex=0;for(var i=0;i<menusNode.childNodes.length;i++){var node=menusNode.childNodes[i];if(node.nodeType==1){var menu=Menu.parseNode(node,onMenuItemClick);menus[menuIndex]=menu;menuIndex++;}}
return menus;}
Menu.parseNode=function(menuNode,onMenuItemClick){var menu=new Menu();menu.onMenuItemClick=onMenuItemClick;for(var i=0;i<menuNode.childNodes.length;i++){var node=menuNode.childNodes[i];if(node.nodeType==1){var command=node.getAttribute("command");if(command=="[Separator]")
menu.addSeparator();else{var menuItem=menu.addMenuItem(command,language.getString(node.getAttribute("text")),node.getAttribute("description"),node.getAttribute("icon"));menuItem.parentPermissions=node.getAttribute("parentPermissions");menuItem.permissions=node.getAttribute("permissions");if(node.getAttribute("isDefault")=="yes")menu.setDefault(menuItem);for(var j=0;j<node.childNodes.length;j++){var childNode=node.childNodes[j];if(childNode.nodeType==1){var submenu=Menu.parseNode(childNode,onMenuItemClick);menuItem.setSubmenu(submenu);}}}}}
menu.render(Menu.container?Menu.container:document.body);menu.container=Menu.container;return menu;}
function Menu(){this.index=Menu.count++;this.items=new Array();this.menuItems=new Object();this.divElement=null;this.iconsPath=Menu.iconsPath;this.iconWidth=16;this.iconHeight=16;this.hidden=true;this.itemClicked=false;this.left=0;this.top=0;this.right=0;this.bottom=0;this.calculatedWidth=0;this.calculatedHeight=0;this.lastSubmenu=null;this.showLeft=false;this.defaultMenuItem=null;this.parentMenuItem=null;this.depth=0;this.target=null;this.onMenuItemClick=null;this.documentOnMouseDown=null;this.documentOnMouseUp=null;this.classMenu="menu";this.classMenuItem="menuItem";this.classMenuItemHover="menuItem MIHover";this.classMenuSeparator="menuSeparator";this.classDisabled="menuItem MIDisabled";}
Menu.prototype.setIconSize=function(width,height){this.iconWidth=width;this.iconHeight=height;}
Menu.prototype.setIconsPath=function(iconsPath){this.iconsPath=iconsPath;}
Menu.prototype.addMenuItem=function(command,text,description,icon){var menuItem=new MenuItem(command,text,description,(icon!=null)?(this.iconsPath+icon):icon);menuItem.menu=this;menuItem.index=this.items.length;this.items[menuItem.index]=menuItem;this.menuItems[command]=menuItem;return menuItem;}
Menu.prototype.addSeparator=function(){var separator=new MenuSeparator();separator.menu=this;separator.index=this.items.length;this.items[separator.index]=separator;}
Menu.prototype.insertMenuItem=function(insertAt,command,text,description,icon){var menuItem=new MenuItem(command,text,description,(icon!=null)?(this.iconsPath+icon):icon);menuItem.menu=this;menuItem.index=insertAt;this.items.splice(insertAt,0,menuItem);this.menuItems[command]=menuItem;for(var i=0;i<this.items.length;i++){this.items[i].index=i;}
menuItem.render(this.divElement,this.items[insertAt+1].divElement);return menuItem;}
Menu.prototype.setDefault=function(menuItem){this.defaultMenuItem=menuItem;if(menuItem.spanElement)menuItem.spanElement.style.fontWeight="bold";}
Menu.prototype.render=function(parentNode){var menu=this;var menuDiv=document.createElement("div");menuDiv.className=this.classMenu;menuDiv.style.position="absolute";menuDiv.style.display="none";menuDiv.style.visibility="hidden";menuDiv.style.cursor="default";menuDiv.onmousedown=function(e){return menu.cancelEvent(e);};menuDiv.onmouseup=function(e){return menu.cancelEvent(e);};menuDiv.oncontextmenu=function(e){return false;};menuDiv.onselectstart=function(e){return false;};menuDiv.ondragstart=function(e){return false;};this.divElement=menuDiv;parentNode.appendChild(menuDiv);for(var i=0;i<this.items.length;i++)
this.items[i].render(menuDiv);}
Menu.prototype.calculateDimensions=function(){this.divElement.style.display="block";var calculatedPopupMargin;if(this.calculatedWidth!=this.divElement.offsetWidth){this.widthChanged=true;this.calculatedWidth=this.divElement.offsetWidth;calculatedPopupMargin=this.calculatedWidth-this.iconWidth-6-Menu.imgPopup.width+10;}
else
this.widthChanged=false;if(this.calculatedHeight!=this.divElement.offsetHeight){this.heightChanged=true;this.calculatedHeight=this.divElement.offsetHeight;}
else
this.heightChanged=false;var topDistance=0;for(var i=0;i<this.items.length;i++){var item=this.items[i];if(!item.hidden){if(item.isSeparator){topDistance+=item.calculatedHeight;if(item.divElement.clientHeight>1)
item.divElement.style.height="1px";}else{item.topDistance=topDistance;item.calculatedHeight=item.divElement.offsetHeight;topDistance+=item.calculatedHeight;if(this.widthChanged)
item.spanElement.style.marginRight=(calculatedPopupMargin-item.spanElement.offsetWidth)+"px";}}}
if(this.widthChanged){this.divElement.style.display="none";this.divElement.style.display="block";this.calculatedWidth=this.divElement.offsetWidth;}
if(this.heightChanged)
this.calculatedHeight=this.divElement.offsetHeight;var parentPosition=findPosition(this.divElement.offsetParent);this.parentLeft=parentPosition[0];this.parentTop=parentPosition[1];}
Menu.prototype.cancelEvent=function(e){if(this.itemClicked){this.itemClicked=false;return false;}
if(!e)var e=window.event
e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();return false;}
Menu.prototype.popup=function(e,target){deSelectAllRanges();this.calculateDimensions();var posx=(e.pageX)?e.pageX:e.clientX+Viewport.getScrollLeft();var posy=(e.pageY)?e.pageY:e.clientY+Viewport.getScrollTop();posx-=this.parentLeft;posy-=this.parentTop;var rightSpace=this.container.offsetWidth-posx;var bottomSpace=this.container.offsetHeight-posy;if(rightSpace<this.calculatedWidth)
posx-=this.calculatedWidth;if(bottomSpace<this.calculatedHeight)
posy-=this.calculatedHeight;this.target=target;this.show(posx,posy);var menu=this;this.documentOnMouseDown=document.onmousedown;this.documentOnMouseUp=document.onmouseup;document.onmousedown=function(e){menu.hidePopup();if(target&&target.onContextMenuClose)target.onContextMenuClose();};document.onmouseup=function(e){menu.hidePopup();if(target&&target.onContextMenuClose)target.onContextMenuClose();};}
Menu.prototype.popupSubmenu=function(){this.calculateDimensions();var posx=this.parentMenuItem.menu.right-8;var posy=this.parentMenuItem.menu.top+this.parentMenuItem.topDistance;var rightSpace=this.container.clientWidth-posx;var bottomSpace=this.container.clientHeight-posy;if(this.parentMenuItem.menu.showLeft||(rightSpace<this.calculatedWidth)){posx=this.parentMenuItem.menu.left-this.calculatedWidth+4;this.showLeft=true;}else
this.showLeft=false;if(bottomSpace<this.calculatedHeight)
posy=posy+this.parentMenuItem.calculatedHeight-this.calculatedHeight;this.depth=this.parentMenuItem.menu.depth+1;this.divElement.style.zIndex=this.depth;this.target=this.parentMenuItem.menu.target;this.show(posx,posy);this.parentMenuItem.menu.lastSubmenu=this;}
Menu.prototype.show=function(posx,posy){this.divElement.style.left=posx+"px";this.divElement.style.top=posy+"px";this.divElement.style.visibility="visible";this.left=posx;this.top=posy;this.right=posx+this.calculatedWidth;this.bottom=posy+this.calculatedHeight;this.hidden=false;}
Menu.prototype.hide=function(){if(this.lastSubmenu&&!this.lastSubmenu.hidden)this.lastSubmenu.hide();this.divElement.style.display="none";this.divElement.style.visibility="hidden";this.hidden=true;if(this.parentMenuItem)this.parentMenuItem.unselect();}
Menu.prototype.hidePopup=function(){this.hide();document.onmousedown=this.documentOnMouseDown;document.onmouseup=this.documentOnMouseUp;}
function MenuItem(command,text,description,icon){this.command=command;this.text=text;this.description=description;this.icon=icon;this.index=-1;this.disabled=false;this.hidden=false;this.topDistance=0;this.calculatedHeight=0;this.widthChanged=false;this.heightChanged=false;this.menu=null;this.submenu=null;this.divElement=null;this.imgIcon=null;this.imgPopup=null;this.spanElement=null;}
MenuItem.prototype.setSubmenu=function(submenu){this.submenu=submenu;submenu.parentMenuItem=this;}
MenuItem.prototype.render=function(parentNode,insertBeforeNode){var menuItem=this;var menuItemDiv=document.createElement("div");if(insertBeforeNode)
parentNode.insertBefore(menuItemDiv,insertBeforeNode);else
parentNode.appendChild(menuItemDiv);if(this.description!=null)menuItemDiv.title=this.description;menuItemDiv.className=this.menu.classMenuItem;menuItemDiv.style.whiteSpace="nowrap";menuItemDiv.style.paddingRight="8px";menuItemDiv.onmouseover=function(e){return menuItem.onMouseOver(e);};menuItemDiv.onmouseout=function(e){return menuItem.onMouseOut(e);};menuItemDiv.onmouseup=function(e){return menuItem.onMouseUp(e);};this.divElement=menuItemDiv;var textIndent;if(this.icon!=null){var imgIcon=new Image();imgIcon.src=this.icon;imgIcon.style.width=this.menu.iconWidth+"px";imgIcon.style.height=this.menu.iconHeight+"px";imgIcon.style.verticalAlign="middle";imgIcon.style.marginLeft="3px";this.imgIcon=imgIcon;menuItemDiv.appendChild(imgIcon);textIndent=3;}else
textIndent=this.menu.iconWidth+6;var spanElement=document.createElement("span");spanElement.style.verticalAlign="middle";spanElement.style.marginLeft=textIndent+"px";if(this.menu.defaultMenuItem==this)spanElement.style.fontWeight="bold";this.spanElement=spanElement;var textNode=document.createTextNode(this.text);spanElement.appendChild(textNode);menuItemDiv.appendChild(spanElement);if(this.submenu){var imgPopup=new Image();imgPopup.src=Menu.imgPopup.src;imgPopup.style.verticalAlign="middle";imgPopup.style.width="5px";imgPopup.style.height="9px";this.imgPopup=imgPopup;menuItemDiv.appendChild(imgPopup);}
if(this.disabled)this.disable();}
MenuItem.prototype.onMouseOver=function(e){if(this.disabled)return;this.select();if(this.menu.lastSubmenu&&this.menu.lastSubmenu!=this.submenu)this.menu.lastSubmenu.hide();if(this.submenu&&this.submenu.hidden)
this.submenu.popupSubmenu();}
MenuItem.prototype.onMouseOut=function(e){if(this.disabled)return;if(this.submenu&&!this.submenu.hidden){if(!e)var e=window.event;var mouseX=(e.pageX)?e.pageX:e.clientX+Viewport.getScrollLeft();var mouseY=(e.pageY)?e.pageY:e.clientY+Viewport.getScrollTop();mouseX-=this.menu.parentLeft;mouseY-=this.menu.parentTop;var overSubmenu=(mouseX>this.submenu.left-10&&mouseX<this.submenu.right+10&&mouseY>this.submenu.top-10&&mouseY<this.submenu.bottom+10);if(!overSubmenu)this.submenu.hide();}else
this.unselect();}
MenuItem.prototype.onMouseUp=function(e){if(this.disabled||this.submenu)return;if(!e)var e=window.event
var leftButton=(e.which)?(e.which==1):(e.button==1);if(!leftButton)return;this.menu.itemClicked=true;document.onmousedown();if(this.menu.onMenuItemClick)this.menu.onMenuItemClick(e,this);}
MenuItem.prototype.select=function(){this.divElement.className=this.menu.classMenuItemHover;if(this.imgPopup)this.imgPopup.src=Menu.imgPopupHover.src;}
MenuItem.prototype.unselect=function(){this.divElement.className=this.menu.classMenuItem;if(this.imgPopup)this.imgPopup.src=Menu.imgPopup.src;}
MenuItem.prototype.enable=function(){this.divElement.disabled=false;this.divElement.className=this.menu.classMenuItem;if(this.imgIcon)setOpacity(this.imgIcon,10);this.disabled=false;}
MenuItem.prototype.disable=function(){this.divElement.disabled=true;this.divElement.className=this.menu.classDisabled;if(this.imgIcon)setOpacity(this.imgIcon,4);this.disabled=true;}
MenuItem.prototype.show=function(){this.divElement.style.display="block";this.hidden=false;}
MenuItem.prototype.hide=function(){this.divElement.style.display="none";this.hidden=true;}
function MenuSeparator(){this.menu=null;this.index=-1;this.divElement=null;this.calculatedHeight=7;this.hidden=false;this.isSeparator=true;}
MenuSeparator.prototype.render=function(parentNode){var menuSeparator=this;var separatorDiv=document.createElement("div");separatorDiv.className=this.menu.classMenuSeparator;separatorDiv.style.marginTop="3px";separatorDiv.style.marginLeft="0px";separatorDiv.style.marginBottom="3px";separatorDiv.style.marginRight="0px";separatorDiv.style.lineHeight="1px";separatorDiv.style.fontSize="1px";this.divElement=separatorDiv;var textNode=document.createTextNode("\u00a0");separatorDiv.appendChild(textNode);parentNode.appendChild(separatorDiv);}
MenuSeparator.prototype.show=function(){this.divElement.style.display="block";this.hidden=false;}
MenuSeparator.prototype.hide=function(){this.divElement.style.display="none";this.hidden=true;}