| 
/*    =======================================
Copyright 1998 - 2010 - E Net Arch
 This program is distributed under the terms of the GNU
 General Public License (or the Lesser GPL).
 www.ENetArch.net
 ======================================= */
 
 var NS = (navigator.appName == "Netscape");
 var IE = (navigator.appName != "Netscape");
 var NS6 = (NS && parseFloat (navigator.appVersion) >= 5.0)
 var NS4 = (NS && parseFloat (navigator.appVersion) < 5.0)
 
 ENetArch.Menu = function ()
 { return (
 {
 nID : parseInt (Math.random()*9999999999999),
 szDisplay : "",
 szURL : "",
 menuDirection : "V", // Vertical or Horizontal
 
 Max : 0,
 Menus : new Array (),
 parent : null,
 
 add : function (thsDisplay, thsURL)
 {
 var thsInst = this;
 var menu = new ENetArch.Menu ();
 
 menu.szDisplay = thsDisplay
 menu.szURL = thsURL;
 menu.parent = thsInst;
 
 var x = thsInst.Max++;
 thsInst.Menus [x+1] = menu;
 
 return menu;
 },
 
 remove : function ()
 {
 var thsInst = this;
 var thsParent = thsInst.parent;
 
 for (var t=1; t<thsParent.Max+1; t++)
 {
 var nID = thsParent.Menus[t].nID ;
 if (nID == this.nID)
 {
 thsParent.Menus.splice (t,1);
 thsParent.Max--;
 }
 }
 },
 });
 };
 
 ENetArch.DOMMenus =
 {
 divMenu : null,
 menuActive : false,
 activeMenusCnt : 0,
 activeMenus : new Array(),
 Menus : null,
 
 _init : function (thsDiv, thsMenus)
 {
 if (thsMenus == null) return;
 
 if (thsDiv != null)
 {
 this.divMenu = thsDiv;
 this.Menus = thsMenus;
 
 }
 else
 {
 var divBody = document.getChild ("BODY");
 divBody.innerHTML += "\n" +
 "<div id='Menus_" + this.szRandom + "' class=''>" +
 "</div>";
 
 this.divMenu = divBody;
 }
 },
 
 show : function ()
 {
 var thsInst = this;
 var divMenu = thsInst.divMenu;
 divMenu.innerHTML = "";
 var nLevel = 1;
 
 thsInst.draw (thsInst.Menus, nLevel);
 var szMenuName = "Menu_" + thsInst.Menus.nID;
 var divMenu = $(szMenuName);
 thsInst.visible (divMenu, true);
 },
 
 draw : function (mnu, nLevel)
 {
 if (mnu == null) return;
 
 var thsInst = this;
 var divMenu = thsInst.divMenu;
 
 if (mnu.Max == 0) return;
 
 var szClass = ( (mnu.menuDirection == "H") ? "mnuBar" : "mnuList");
 
 var szMenuName = "Menu_" + mnu.nID;
 
 divMenu.innerHTML += "\n" +"\n" +
 "<div ID='" + szMenuName + "' class='" + szClass + "' " +
 'onMouseOver="ENetArch.DOMMenus.menuActive=true;" ' +
 'onMouseOut="ENetArch.DOMMenus.menuActive=false;" ' +
 'style="visibility:hidden;" ' +
 ">" +
 "</div>";
 
 var divMenuItems = $(szMenuName);
 
 for (var t=1; t<mnu.Max+1; t++)
 {
 var nID = mnu.Menus[t].nID ;
 var szID = "MenuItem_" + nID;
 var szDisplay = mnu.Menus[t].szDisplay;
 var szURL = mnu.Menus[t].szURL;
 
 if (szURL == "") szURL = "javascript:void(0);";
 
 var szMnuItem = "";
 if (szDisplay == "<HR>")
 { szMnuItem = "<HR>"; }
 else
 {
 szMnuItem =
 '<span ID="' + szID + '" class="mnuItem">' +
 '<a href="' + szURL + '" class="mnuStyle" ' +
 'onMouseOver="ENetArch.DOMMenus.onMouseOver (this, ' + nLevel + ');" ' +
 'Name="' + nID + '" ' +
 '>' + szDisplay + '</a></span> ';
 
 if (mnu.menuDirection == "V")
 szMnuItem += "<BR>";
 }
 
 divMenuItems.innerHTML += "\n" + szMnuItem;
 }
 
 for (var t=1; t<mnu.Max+1; t++)
 thsInst.draw (mnu.Menus[t], nLevel +1);
 
 setInterval("ENetArch.DOMMenus.hideMenus()",250);
 
 },
 
 peek : function ()
 {
 var thsInst = this;
 var mnu
 for (var t=1; t<thsInst.Max+1; t++)
 {
 var szName = "MenuItem_" + thsInst.Menus[t].szRandom ;
 var aHref = $(szName).$("A");
 
 // note that <div id="szStatus"></div> must exist in the DOM
 var divStatus = $("szStatus");
 divStatus.innerHTML += "<BR>\n" +
 "aHref.id = " + aHref.parentNode.id + ", " +
 "aHref.onclick = " + aHref.onclick;
 }
 },
 
 hideMenus : function  ()
 {
 if (! this.menuActive)
 {
 for (var t=0; t<this.activeMenusCnt; t++)
 this.visible (this.activeMenus [t], false);
 
 this.activeMenusCnt = 0;
 }
 },
 
 closeMenus : function (nLevel)
 {
 for (var t=nLevel-1; t<this.activeMenusCnt; t++)
 if (this.activeMenus [t] != null)
 this.visible (this.activeMenus [t], false);
 
 this.activeMenusCnt = nLevel -1;
 },
 
 visible : function (divMenu, tf)
 {
 if (divMenu == null) return;
 divMenu.style.visibility = ((tf) ? "visible" : "hidden");
 },
 
 onClick : function (ths) { window.alert ("clicked " + ths.parentNode.id); },
 
 onMouseOut : function  (p) {},
 
 onMouseOver : function  (p, nLevel)
 {
 var thsInst = this;
 
 // get the layer that is to be displayed
 
 var thsSpan = $("MenuItem_" + p.name);
 var thsDiv = p.offsetParent;
 
 var thsLayer = $("Menu_" + p.name);
 if (thsLayer == null) return;
 
 // close all other layers that may be open
 // and unnecessary
 
 thsInst.closeMenus(nLevel);
 thsInst.menuActive = true;
 
 // position the layer
 
 var ofx = 0;
 var ofy = 0;
 
 if (thsInst.activeMenusCnt > 0)
 {
 var t = thsInst.activeMenusCnt -1;
 ofx = thsInst.activeMenus [t].offsetWidth-10;
 }
 
 thsInst.activeMenus [nLevel-1] = thsLayer;
 thsInst.activeMenusCnt = nLevel;
 thsLayer.zIndex = nLevel;
 
 // Position the new Menu Layer
 
 var x = 0;
 var y = 0;
 
 x = thsSpan.offsetLeft;
 y = thsSpan.offsetTop ;
 if (nLevel == 1)
 y += thsSpan.offsetHeight - 2;
 
 x += thsDiv.offsetLeft;
 y += thsDiv.offsetTop; // + thsDiv.offsetHeight;
 
 thsLayer.style.left = x + ofx;
 thsLayer.style.top = y + ofy;
 thsLayer.style.visibility = "visible";
 }
 };
 
 
 |