
Menu.count=0;Menu.imgPopup=new Image();Menu.imgPopupHover=new Image();Menu.iconsPath="";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"),node.getAttribute("value"));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(document.body);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.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.addMenuItem=function(command,text,description,icon,value){var menuItem=new MenuItem(command,text,description,(icon!=null)?(this.iconsPath+icon):icon,value);menuItem.menu=this;this.items[this.items.length]=menuItem;this.menuItems[command]=menuItem;return menuItem;}
Menu.prototype.addSeparator=function(){var separator=new MenuSeparator();separator.menu=this;this.items[this.items.length]=separator;}
Menu.prototype.setDefault=function(menuItem){this.defaultMenuItem=menuItem;}
Menu.prototype.render=function(parentNode){var menu=this;var menuDiv=document.createElement("div");menuDiv.className=this.classMenu;menuDiv.style.position="absolute";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);this.calculatedWidth=this.divElement.offsetWidth+8;this.calculateDimensions();}
Menu.prototype.calculateDimensions=function(){this.calculatedHeight=this.divElement.offsetHeight;var calculatedPopupMargin=this.calculatedWidth-this.iconWidth-Menu.imgPopup.width-13;var topDistance=0;for(var i=0;i<this.items.length;i++){var menuItem=this.items[i];if(!menuItem.hidden){menuItem.divElement.style.width=this.calculatedWidth+"px";menuItem.topDistance=topDistance;if(menuItem.calculatedHeight==0)
menuItem.calculatedHeight=menuItem.divElement.offsetHeight;topDistance+=menuItem.calculatedHeight;if(menuItem.spanElement)
menuItem.spanElement.style.marginRight=(calculatedPopupMargin-menuItem.spanElement.offsetWidth)+"px";}}}
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){this.calculateDimensions();var posx=e.clientX;var posy=e.clientY;var rightSpace=Viewport.getWidth()-posx;var bottomSpace=Viewport.getHeight()-posy;if(rightSpace<(this.calculatedWidth+6))
posx-=this.calculatedWidth;if(bottomSpace<(this.calculatedHeight+6))
posy-=this.calculatedHeight;this.show(posx,posy);var menu=this;this.documentOnMouseDown=document.onmousedown;this.documentOnMouseUp=document.onmouseup;document.onmousedown=function(e){menu.hidePopup();};document.onmouseup=function(e){menu.hidePopup();};}
Menu.prototype.popupSubmenu=function(){this.calculateDimensions();var posx=this.parentMenuItem.menu.right;var posy=this.parentMenuItem.menu.top+this.parentMenuItem.topDistance;var rightSpace=Viewport.getWidth()-posx;var bottomSpace=Viewport.getHeight()-posy;if(this.parentMenuItem.menu.showLeft||(rightSpace<(this.calculatedWidth+6))){posx=this.parentMenuItem.menu.left-this.calculatedWidth;this.showLeft=true;}else
this.showLeft=false;if(bottomSpace<(this.calculatedHeight+6))
posy=posy+this.parentMenuItem.calculatedHeight-this.calculatedHeight+6;this.depth=this.parentMenuItem.menu.depth+1;this.divElement.style.zIndex=this.depth;this.show(posx,posy);this.parentMenuItem.menu.lastSubmenu=this;}
Menu.prototype.show=function(posx,posy){var scrollx=Viewport.getScrollLeft();var scrolly=Viewport.getScrollTop();this.divElement.style.left=(posx+scrollx)+"px";this.divElement.style.top=(posy+scrolly)+"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.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,value){this.command=command;this.text=text;this.description=description;this.icon=icon;this.value=value;this.disabled=false;this.hidden=false;this.topDistance=0;this.calculatedHeight=0;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){var menuItem=this;var menuItemDiv=document.createElement("div");parentNode.appendChild(menuItemDiv);if(this.description!=null)menuItemDiv.title=this.description;menuItemDiv.className=this.menu.classMenuItem;menuItemDiv.style.whiteSpace="nowrap";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";spanElement.style.marginRight="6px";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.clientX;var mousey=e.clientY;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;setOpacity(this.imgIcon,10);this.disabled=false;}
MenuItem.prototype.disable=function(){this.divElement.disabled=true;this.divElement.className=this.menu.classDisabled;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.divElement=null;this.calculatedHeight=7;}
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);}