home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / html / fw_menu.js < prev    next >
Text File  |  2000-10-25  |  23KB  |  679 lines

  1. /**
  2.  * fw_menu 24OCT2000 Version 4.0
  3.  * John Ahlquist, October 2000
  4.  * Copyright (c) 2000 Macromedia, Inc.
  5.  *
  6.  * based on menu.js
  7.  * by gary smith, July 1997
  8.  * Copyright (c) 1997-1999 Netscape Communications Corp.
  9.  *
  10.  * Netscape grants you a royalty free license to use or modify this
  11.  * software provided that this copyright notice appears on all copies.
  12.  * This software is provided "AS IS," without a warranty of any kind.
  13.  */
  14. function Menu(label, mw, mh, fnt, fs, fclr, fhclr, bg, bgh) {
  15.     this.version = "990702 [Menu; menu.js]";
  16.     this.type = "Menu";
  17.     this.menuWidth = mw;
  18.     this.menuItemHeight = mh;
  19.     this.fontSize = fs||12;
  20.     this.fontWeight = "plain";
  21.     this.fontFamily = fnt||"arial,helvetica,verdana,sans-serif";
  22.     this.fontColor = fclr||"#000000";
  23.     this.fontColorHilite = fhclr||"#ffffff";
  24.     this.bgColor = "#555555";
  25.     this.menuBorder = 1;
  26.     this.menuItemBorder = 1;
  27.     this.menuItemBgColor = bg||"#cccccc";
  28.     this.menuLiteBgColor = "#ffffff";
  29.     this.menuBorderBgColor = "#777777";
  30.     this.menuHiliteBgColor = bgh||"#000084";
  31.     this.menuContainerBgColor = "#cccccc";
  32.     this.childMenuIcon = "arrows.gif";
  33.     this.items = new Array();
  34.     this.actions = new Array();
  35.     this.childMenus = new Array();
  36.  
  37.     this.hideOnMouseOut = true;
  38.  
  39.     this.addMenuItem = addMenuItem;
  40.     this.addMenuSeparator = addMenuSeparator;
  41.     this.writeMenus = writeMenus;
  42.     this.FW_showMenu = FW_showMenu;
  43.     this.onMenuItemOver = onMenuItemOver;
  44.     this.onMenuItemAction = onMenuItemAction;
  45.     this.hideMenu = hideMenu;
  46.     this.hideChildMenu = hideChildMenu;
  47.  
  48.     if (!window.menus) window.menus = new Array();
  49.     this.label = label || "menuLabel" + window.menus.length;
  50.     window.menus[this.label] = this;
  51.     window.menus[window.menus.length] = this;
  52.     if (!window.activeMenus) window.activeMenus = new Array();
  53. }
  54.  
  55. function addMenuItem(label, action) {
  56.     this.items[this.items.length] = label;
  57.     this.actions[this.actions.length] = action;
  58. }
  59.  
  60. function addMenuSeparator() {
  61.     this.items[this.items.length] = "separator";
  62.     this.actions[this.actions.length] = "";
  63.     this.menuItemBorder = 0;
  64. }
  65.  
  66. // For NS6. 
  67. function FIND(item) {
  68.     if (document.all) return(document.all[item]);
  69.     if (document.getElementById) return(document.getElementById(item));
  70.     return(false);
  71. }
  72.  
  73. function writeMenus(container) {
  74.     if (window.triedToWriteMenus) return;
  75.  
  76.     if (!container && document.layers) {
  77.         window.delayWriteMenus = this.writeMenus;
  78.         var timer = setTimeout('delayWriteMenus()', 250);
  79.         container = new Layer(100);
  80.         clearTimeout(timer);
  81.     } else if (document.all || document.hasChildNodes) {
  82.         document.writeln('<SPAN ID="menuContainer"></SPAN>');
  83.         container = FIND("menuContainer");
  84.     }
  85.  
  86.     window.fwHideMenuTimer = null;
  87.     if (!container) return;    
  88.     window.triedToWriteMenus = true; 
  89.     container.isContainer = true;
  90.     container.menus = new Array();
  91.     for (var i=0; i<window.menus.length; i++) 
  92.         container.menus[i] = window.menus[i];
  93.     window.menus.length = 0;
  94.     var countMenus = 0;
  95.     var countItems = 0;
  96.     var top = 0;
  97.     var content = '';
  98.     var lrs = false;
  99.     var theStat = "";
  100.     var tsc = 0;
  101.     if (document.layers) lrs = true;
  102.     for (var i=0; i<container.menus.length; i++, countMenus++) {
  103.         var menu = container.menus[i];
  104.         if (menu.bgImageUp) {
  105.             menu.menuBorder = 0;
  106.             menu.menuItemBorder = 0;
  107.         }
  108.         if (lrs) {
  109.             var menuLayer = new Layer(100, container);
  110.             var lite = new Layer(100, menuLayer);
  111.             lite.top = menu.menuBorder;
  112.             lite.left = menu.menuBorder;
  113.             var body = new Layer(100, lite);
  114.             body.top = menu.menuBorder;
  115.             body.left = menu.menuBorder;
  116.         } else {
  117.             content += ''+
  118.             '<DIV ID="menuLayer'+ countMenus +'" STYLE="position:absolute;z-index:1;left:10;top:'+ (i * 100) +';visibility:hidden;">\n'+
  119.             '  <DIV ID="menuLite'+ countMenus +'" STYLE="position:absolute;z-index:1;left:'+ menu.menuBorder +';top:'+ menu.menuBorder +';visibility:hide;" onMouseOut="mouseoutMenu();">\n'+
  120.             '     <DIV ID="menuFg'+ countMenus +'" STYLE="position:absolute;left:'+ menu.menuBorder +';top:'+ menu.menuBorder +';visibility:hide;">\n'+
  121.             '';
  122.         }
  123.         var x=i;
  124.         for (var i=0; i<menu.items.length; i++) {
  125.             var item = menu.items[i];
  126.             var childMenu = false;
  127.             var defaultHeight = menu.fontSize+6;
  128.             var defaultIndent = menu.fontSize;
  129.             if (item.label) {
  130.                 item = item.label;
  131.                 childMenu = true;
  132.             }
  133.             menu.menuItemHeight = menu.menuItemHeight || defaultHeight;
  134.             menu.menuItemIndent = menu.menuItemIndent || defaultIndent;
  135.             var itemProps = 'font-family:' + menu.fontFamily +';font-weight:' + menu.fontWeight + ';fontSize:' + menu.fontSize + ';';
  136.             if (menu.fontStyle) itemProps += 'font-style:' + menu.fontStyle + ';';
  137.             if (document.all) 
  138.                 itemProps += 'font-size:' + menu.fontSize + ';" onMouseOver="onMenuItemOver(null,this);" onClick="onMenuItemAction(null,this);';
  139.             else if (!document.layers) {
  140.                 itemProps += 'font-size:' + menu.fontSize + 'px;'; // zilla wants 12px.
  141.             }
  142.             var l;
  143.             if (lrs) {
  144.                 l = new Layer(800,body);
  145.             }
  146.             var dTag    = '<DIV ID="menuItem'+ countItems +'" STYLE="position:absolute;left:0;top:'+ (i * menu.menuItemHeight) +';'+ itemProps +'">';
  147.             var dClose = '</DIV>'
  148.             if (menu.bgImageUp) {
  149.                 menu.menuBorder = 0;
  150.                 menu.menuItemBorder = 0;
  151.                 dTag    = '<DIV ID="menuItem'+ countItems +'" STYLE="background:url('+menu.bgImageUp+');position:absolute;left:0;top:'+ (i * menu.menuItemHeight) +';'+ itemProps +'">';
  152.                 if (document.layers) {
  153.                     dTag = '<LAYER BACKGROUND="'+menu.bgImageUp+'" ID="menuItem'+ countItems +'" TOP="'+ (i * menu.menuItemHeight) +'" style="' + itemProps +'">';
  154.                     dClose = '</LAYER>';
  155.                 }
  156.             }
  157.             var textProps = 'position:absolute;left:' + menu.menuItemIndent + ';top:1;';
  158.             if (lrs) {
  159.                 textProps +=itemProps;
  160.                 dTag = "";
  161.                 dClose = "";
  162.             }
  163.  
  164.             var dText    = '<DIV ID="menuItemText'+ countItems +'" STYLE="' + textProps + 'color:'+ menu.fontColor +';">'+ item +' </DIV>\n<DIV ID="menuItemHilite'+ countItems +'" STYLE="' + textProps + 'top:1;color:'+ menu.fontColorHilite +';visibility:hidden;">'+ item +' </DIV>';
  165.             if (item == "separator") {
  166.                 content += ( dTag + '<DIV ID="menuSeparator'+ countItems +'" STYLE="position:absolute;left:1;top:2;"></DIV>\n<DIV ID="menuSeparatorLite'+ countItems +'" STYLE="position:absolute;left:1;top:2;"></DIV>\n' + dClose);
  167.             } else if (childMenu) {
  168.                 content += ( dTag + dText + '<DIV ID="childMenu'+ countItems +'" STYLE="position:absolute;left:0;top:3;"><IMG SRC="'+ menu.childMenuIcon +'"></DIV>\n' + dClose);
  169.             } else {
  170.                 content += ( dTag + dText + dClose);
  171.             }
  172.             if (lrs) {
  173.                 l.document.open("text/html");
  174.                 l.document.writeln(content);
  175.                 l.document.close();    
  176.                 content = '';
  177.                 theStat += "-";
  178.                 tsc++;
  179.                 if (tsc > 50) {
  180.                     tsc = 0;
  181.                     theStat = "";
  182.                 }
  183.                 status = theStat;
  184.             }
  185.             countItems++;  
  186.         }
  187.         if (lrs) {
  188.             // focus layer
  189.             var focusItem = new Layer(100, body);
  190.             focusItem.visiblity="hidden";
  191.             focusItem.document.open("text/html");
  192.             focusItem.document.writeln(" ");
  193.             focusItem.document.close();    
  194.         } else {
  195.           content += '      <DIV ID="focusItem'+ countMenus +'" STYLE="position:absolute;left:0;top:0;visibility:hide;" onClick="onMenuItemAction(null,this);"> </DIV>\n';
  196.           content += '   </DIV>\n  </DIV>\n</DIV>\n';
  197.         }
  198.         i=x;
  199.     }
  200.     if (document.layers) {        
  201.         container.clip.width = window.innerWidth;
  202.         container.clip.height = window.innerHeight;
  203.         container.onmouseout = mouseoutMenu;
  204.         container.menuContainerBgColor = this.menuContainerBgColor;
  205.         for (var i=0; i<container.document.layers.length; i++) {
  206.             proto = container.menus[i];
  207.             var menu = container.document.layers[i];
  208.             container.menus[i].menuLayer = menu;
  209.             container.menus[i].menuLayer.Menu = container.menus[i];
  210.             container.menus[i].menuLayer.Menu.container = container;
  211.             var body = menu.document.layers[0].document.layers[0];
  212.             body.clip.width = proto.menuWidth || body.clip.width;
  213.             body.clip.height = proto.menuHeight || body.clip.height;
  214.             for (var n=0; n<body.document.layers.length-1; n++) {
  215.                 var l = body.document.layers[n];
  216.                 l.Menu = container.menus[i];
  217.                 l.menuHiliteBgColor = proto.menuHiliteBgColor;
  218.                 l.document.bgColor = proto.menuItemBgColor;
  219.                 l.saveColor = proto.menuItemBgColor;
  220.                 l.onmouseover = proto.onMenuItemOver;
  221.                 l.onclick = proto.onMenuItemAction;
  222.                 l.action = container.menus[i].actions[n];
  223.                 l.focusItem = body.document.layers[body.document.layers.length-1];
  224.                 l.clip.width = proto.menuWidth || body.clip.width + proto.menuItemIndent;
  225.                 l.clip.height = proto.menuItemHeight || l.clip.height;
  226.                 if (n>0) l.top = body.document.layers[n-1].top + body.document.layers[n-1].clip.height + proto.menuItemBorder;
  227.                 l.hilite = l.document.layers[1];
  228.                 if (proto.bgImageUp) l.background.src = proto.bgImageUp;
  229.                 l.document.layers[1].isHilite = true;
  230.                 if (l.document.layers[0].id.indexOf("menuSeparator") != -1) {
  231.                     l.hilite = null;
  232.                     l.clip.height -= l.clip.height / 2;
  233.                     l.document.layers[0].document.bgColor = proto.bgColor;
  234.                     l.document.layers[0].clip.width = l.clip.width -2;
  235.                     l.document.layers[0].clip.height = 1;
  236.                     l.document.layers[1].document.bgColor = proto.menuLiteBgColor;
  237.                     l.document.layers[1].clip.width = l.clip.width -2;
  238.                     l.document.layers[1].clip.height = 1;
  239.                     l.document.layers[1].top = l.document.layers[0].top + 1;
  240.                 } else if (l.document.layers.length > 2) {
  241.                     l.childMenu = container.menus[i].items[n].menuLayer;
  242.                     l.document.layers[2].left = l.clip.width -13;
  243.                     l.document.layers[2].top = (l.clip.height / 2) -4;
  244.                     l.document.layers[2].clip.left += 3;
  245.                     l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
  246.                 }
  247.             }
  248.             body.document.bgColor = proto.bgColor;
  249.             body.clip.width  = l.clip.width +proto.menuBorder;
  250.             body.clip.height = l.top + l.clip.height +proto.menuBorder;
  251.             var focusItem = body.document.layers[n];
  252.             focusItem.clip.width = body.clip.width;
  253.             focusItem.Menu = l.Menu;
  254.             focusItem.top = -30;
  255.             focusItem.captureEvents(Event.MOUSEDOWN);
  256.             focusItem.onmousedown = onMenuItemDown;
  257.             menu.document.bgColor = proto.menuBorderBgColor;
  258.             var lite = menu.document.layers[0];
  259.             lite.document.bgColor = proto.menuLiteBgColor;
  260.             lite.clip.width = body.clip.width +1;
  261.             lite.clip.height = body.clip.height +1;
  262.             menu.clip.width = body.clip.width + (proto.menuBorder * 3) ;
  263.             menu.clip.height = body.clip.height + (proto.menuBorder * 3);
  264.         }
  265.     } else {
  266.         if ((!document.all) && (container.hasChildNodes)) {
  267.             container.innerHTML=content;
  268.         } else {
  269.             container.document.open("text/html");
  270.             container.document.writeln(content);
  271.             container.document.close();    
  272.         }
  273.         if (!FIND("menuLayer0")) return;
  274.         var menuCount = 0;
  275.         for (var x=0; x<container.menus.length; x++) {
  276.             var menuLayer = FIND("menuLayer" + x);
  277.             container.menus[x].menuLayer = "menuLayer" + x;
  278.             menuLayer.Menu = container.menus[x];
  279.             menuLayer.Menu.container = "menuLayer" + x;
  280.             menuLayer.style.zIndex = 1;
  281.             var s = menuLayer.style;
  282.             s.top = s.pixelTop = -300;
  283.             s.left = s.pixelLeft = -300;
  284.  
  285.             var menu = container.menus[x];
  286.             menu.menuItemWidth = menu.menuWidth || menu.menuIEWidth || 140;
  287.             menuLayer.style.backgroundColor = menu.menuBorderBgColor;
  288.             var top = 0;
  289.             for (var i=0; i<container.menus[x].items.length; i++) {
  290.                 var l = FIND("menuItem" + menuCount);
  291.                 l.Menu = container.menus[x];
  292.                 if (l.addEventListener) { // ns6
  293.                     l.style.width = menu.menuItemWidth;    
  294.                     l.style.height = menu.menuItemHeight;
  295.                     l.style.top = top;
  296.                     l.addEventListener("mouseover", onMenuItemOver, false);
  297.                     l.addEventListener("click", onMenuItemAction, false);
  298.                     l.addEventListener("mouseout", mouseoutMenu, false);
  299.                 } else { //ie
  300.                     l.style.pixelWidth = menu.menuItemWidth;    
  301.                     l.style.pixelHeight = menu.menuItemHeight;
  302.                     l.style.pixelTop = top;
  303.                 }
  304.                 top = top + menu.menuItemHeight+menu.menuItemBorder;
  305.                 l.style.fontSize = menu.fontSize;
  306.                 l.style.backgroundColor = menu.menuItemBgColor;
  307.                 l.style.visibility = "inherit";
  308.                 l.saveColor = menu.menuItemBgColor;
  309.                 l.menuHiliteBgColor = menu.menuHiliteBgColor;
  310.                 l.action = container.menus[x].actions[i];
  311.                 l.hilite = FIND("menuItemHilite" + menuCount);
  312.                 l.focusItem = FIND("focusItem" + x);
  313.                 l.focusItem.style.pixelTop = l.focusItem.style.top = -30;
  314.                 var childItem = FIND("childMenu" + menuCount);
  315.                 if (childItem) {
  316.                     l.childMenu = container.menus[x].items[i].menuLayer;
  317.                     childItem.style.pixelLeft = childItem.style.left = menu.menuItemWidth -11;
  318.                     childItem.style.pixelTop = childItem.style.top =(menu.menuItemHeight /2) -4;
  319.                     //childItem.style.pixelWidth = 30 || 7;
  320.                     //childItem.style.clip = "rect(0 7 7 3)";
  321.                     l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
  322.                 }
  323.                 var sep = FIND("menuSeparator" + menuCount);
  324.                 if (sep) {
  325.                     sep.style.clip = "rect(0 " + (menu.menuItemWidth - 3) + " 1 0)";
  326.                     sep.style.width = sep.style.pixelWidth = menu.menuItemWidth;    
  327.                     sep.style.backgroundColor = menu.bgColor;
  328.                     sep = FIND("menuSeparatorLite" + menuCount);
  329.                     sep.style.clip = "rect(1 " + (menu.menuItemWidth - 3) + " 2 0)";
  330.                     sep.style.width = sep.style.pixelWidth = menu.menuItemWidth;    
  331.                     sep.style.backgroundColor = menu.menuLiteBgColor;
  332.                     l.style.height = l.style.pixelHeight = menu.menuItemHeight/2;
  333.                     l.isSeparator = true
  334.                     top -= (menu.menuItemHeight - l.style.pixelHeight)
  335.                 } else {
  336.                     l.style.cursor = "hand"
  337.                 }
  338.                 menuCount++;
  339.             }
  340.             menu.menuHeight = top-1;
  341.             var lite = FIND("menuLite" + x);
  342.             var s = lite.style;
  343.             s.height = s.pixelHeight = menu.menuHeight +(menu.menuBorder * 2);
  344.             s.width = s.pixelWidth = menu.menuItemWidth + (menu.menuBorder * 2);
  345.             s.backgroundColor = menu.menuLiteBgColor;
  346.  
  347.             var body = FIND("menuFg" + x);
  348.             s = body.style;
  349.             s.height = s.pixelHeight = menu.menuHeight + menu.menuBorder;
  350.             s.width = s.pixelWidth = menu.menuItemWidth + menu.menuBorder;
  351.             s.backgroundColor = menu.bgColor;
  352.  
  353.             s = menuLayer.style;
  354.             s.width = s.pixelWidth  = menu.menuItemWidth + (menu.menuBorder * 4);
  355.             s.height = s.pixelHeight  = menu.menuHeight+(menu.menuBorder*4);
  356.         }
  357.     }
  358.     if (document.captureEvents) {    
  359.         document.captureEvents(Event.MOUSEUP);
  360.     }
  361.     if (document.addEventListener) {    
  362.         document.addEventListener("mouseup", onMenuItemOver, false);
  363.     }
  364.     if (document.layers && window.innerWidth) {
  365.         window.onresize = NS4resize;
  366.         window.NS4sIW = window.innerWidth;
  367.         window.NS4sIH = window.innerHeight;
  368.     }
  369.     document.onmouseup = mouseupMenu;
  370.     window.fwWroteMenu = true;
  371.     status = "";
  372. }
  373.  
  374. function NS4resize() {
  375.     if (NS4sIW < window.innerWidth || 
  376.         NS4sIW > window.innerWidth || 
  377.         NS4sIH > window.innerHeight || 
  378.         NS4sIH < window.innerHeight ) 
  379.     {
  380.         window.location.reload();
  381.     }
  382. }
  383.  
  384. function onMenuItemOver(e, l) {
  385.     FW_clearTimeout();
  386.     l = l || this;
  387.     a = window.ActiveMenuItem;
  388.     if (document.layers) {
  389.         if (a) {
  390.             a.document.bgColor = a.saveColor;
  391.             if (a.hilite) a.hilite.visibility = "hidden";
  392.             if (a.Menu.bgImageOver) {
  393.                 a.background.src = a.Menu.bgImageUp;
  394.             }
  395.             a.focusItem.top = -100;
  396.             a.clicked = false;
  397.         }
  398.         if (l.hilite) {
  399.             l.document.bgColor = l.menuHiliteBgColor;
  400.             l.zIndex = 1;
  401.             l.hilite.visibility = "inherit";
  402.             l.hilite.zIndex = 2;
  403.             l.document.layers[1].zIndex = 1;
  404.             l.focusItem.zIndex = this.zIndex +2;
  405.         }
  406.         if (l.Menu.bgImageOver) {
  407.             l.background.src = l.Menu.bgImageOver;
  408.         }
  409.         l.focusItem.top = this.top;
  410.         l.Menu.hideChildMenu(l);
  411.     } else if (l.style && l.Menu) {
  412.         if (a) {
  413.             a.style.backgroundColor = a.saveColor;
  414.             if (a.hilite) a.hilite.style.visibility = "hidden";
  415.             if (a.Menu.bgImageUp) {
  416.                 a.style.background = "url(" + a.Menu.bgImageUp +")";;
  417.             }
  418.         } 
  419.         if (l.isSeparator) return;
  420.         l.style.backgroundColor = l.menuHiliteBgColor;
  421.         l.zIndex = 1;  // magic IE 4.5 mac happy doohicky.    jba
  422.         if (l.Menu.bgImageOver) {
  423.             l.style.background = "url(" + l.Menu.bgImageOver +")";
  424.         }
  425.         if (l.hilite) {
  426.             l.style.backgroundColor = l.menuHiliteBgColor;
  427.             l.hilite.style.visibility = "inherit";
  428.         }
  429.         l.focusItem.style.top = l.focusItem.style.pixelTop = l.style.pixelTop;
  430.         l.focusItem.style.zIndex = l.zIndex +1;
  431.         l.Menu.hideChildMenu(l);
  432.     } else {
  433.         return; // not a menu - magic IE 4.5 mac happy doohicky.  jba
  434.     }
  435.     window.ActiveMenuItem = l;
  436. }
  437.  
  438. function onMenuItemAction(e, l) {
  439.     l = window.ActiveMenuItem;
  440.     if (!l) return;
  441.     hideActiveMenus();
  442.     if (l.action) {
  443.         eval("" + l.action);
  444.     }
  445.     window.ActiveMenuItem = 0;
  446. }
  447.  
  448. function FW_clearTimeout()
  449. {
  450.     if (fwHideMenuTimer) clearTimeout(fwHideMenuTimer);
  451.     fwHideMenuTimer = null;
  452.     fwDHFlag = false;
  453. }
  454. function FW_startTimeout()
  455. {
  456.     fwStart = new Date();
  457.     fwDHFlag = true;
  458.     fwHideMenuTimer = setTimeout("fwDoHide()", 1000);
  459. }
  460.  
  461. function fwDoHide()
  462. {
  463.     if (!fwDHFlag) return;
  464.     var elapsed = new Date() - fwStart;
  465.     if (elapsed < 1000) {
  466.         fwHideMenuTimer = setTimeout("fwDoHide()", 1100-elapsed);
  467.         return;
  468.     }
  469.     fwDHFlag = false;
  470.     hideActiveMenus();
  471.     window.ActiveMenuItem = 0;
  472. }
  473.  
  474. function FW_showMenu(menu, x, y, child) {
  475.     if (!window.fwWroteMenu) return;
  476.     FW_clearTimeout();
  477.     if (document.layers) {
  478.         if (menu) {
  479.             var l = menu.menuLayer || menu;
  480.             l.left = 1;
  481.             l.top = 1;
  482.             hideActiveMenus();
  483.             if (this.visibility) l = this;
  484.             window.ActiveMenu = l;
  485.         } else {
  486.             var l = child;
  487.         }
  488.         if (!l) return;
  489.         for (var i=0; i<l.layers.length; i++) {                
  490.             if (!l.layers[i].isHilite) 
  491.                 l.layers[i].visibility = "inherit";
  492.             if (l.layers[i].document.layers.length > 0) 
  493.                 FW_showMenu(null, "relative", "relative", l.layers[i]);
  494.         }
  495.         if (l.parentLayer) {
  496.             if (x != "relative") 
  497.                 l.parentLayer.left = x || window.pageX || 0;
  498.             if (l.parentLayer.left + l.clip.width > window.innerWidth) 
  499.                 l.parentLayer.left -= (l.parentLayer.left + l.clip.width - window.innerWidth);
  500.             if (y != "relative") 
  501.                 l.parentLayer.top = y || window.pageY || 0;
  502.             if (l.parentLayer.isContainer) {
  503.                 l.Menu.xOffset = window.pageXOffset;
  504.                 l.Menu.yOffset = window.pageYOffset;
  505.                 l.parentLayer.clip.width = window.ActiveMenu.clip.width +2;
  506.                 l.parentLayer.clip.height = window.ActiveMenu.clip.height +2;
  507.                 if (l.parentLayer.menuContainerBgColor) l.parentLayer.document.bgColor = l.parentLayer.menuContainerBgColor;
  508.             }
  509.         }
  510.         l.visibility = "inherit";
  511.         if (l.Menu) l.Menu.container.visibility = "inherit";
  512.     } else if (FIND("menuItem0")) {
  513.         var l = menu.menuLayer || menu;    
  514.         hideActiveMenus();
  515.         if (typeof(l) == "string") {
  516.             l = FIND(l);
  517.         }
  518.         window.ActiveMenu = l;
  519.         var s = l.style;
  520.         s.visibility = "inherit";
  521.         if (x != "relative") 
  522.             s.left = s.pixelLeft = x || (window.pageX + document.body.scrollLeft) || 0;
  523.         if (y != "relative") 
  524.             s.top = s.pixelTop = y || (window.pageY + document.body.scrollTop) || 0;
  525.         l.Menu.xOffset = document.body.scrollLeft;
  526.         l.Menu.yOffset = document.body.scrollTop;
  527.     }
  528.     if (menu) {
  529.         window.activeMenus[window.activeMenus.length] = l;
  530.     }
  531. }
  532.  
  533. function onMenuItemDown(e, l) {
  534.     var a = window.ActiveMenuItem;
  535.     if (document.layers) {
  536.         if (a) {
  537.             a.eX = e.pageX;
  538.             a.eY = e.pageY;
  539.             a.clicked = true;
  540.         }
  541.     }
  542. }
  543.  
  544. function mouseupMenu(e)
  545. {
  546.     hideMenu(true, e);
  547.     hideActiveMenus();
  548.     return true;
  549. }
  550.  
  551. function mouseoutMenu()
  552. {
  553.     hideMenu(false, false);
  554.     return true;
  555. }
  556.  
  557.  
  558. function hideMenu(mouseup, e) {
  559.     var a = window.ActiveMenuItem;
  560.     if (a && document.layers) {
  561.         a.document.bgColor = a.saveColor;
  562.         a.focusItem.top = -30;
  563.         if (a.hilite) a.hilite.visibility = "hidden";
  564.         if (mouseup && a.action && a.clicked && window.ActiveMenu) {
  565.              if (a.eX <= e.pageX+15 && a.eX >= e.pageX-15 && a.eY <= e.pageY+10 && a.eY >= e.pageY-10) {
  566.                 setTimeout('window.ActiveMenu.Menu.onMenuItemAction();', 2);
  567.             }
  568.         }
  569.         a.clicked = false;
  570.         if (a.Menu.bgImageOver) {
  571.             a.background.src = a.Menu.bgImageUp;
  572.         }
  573.     } else if (window.ActiveMenu && FIND("menuItem0")) {
  574.         if (a) {
  575.             a.style.backgroundColor = a.saveColor;
  576.             if (a.hilite) a.hilite.style.visibility = "hidden";
  577.             if (a.Menu.bgImageUp) {
  578.                 a.style.background = "url(" + a.Menu.bgImageUp +")";;
  579.             }
  580.         }
  581.     }
  582.     if (!mouseup && window.ActiveMenu) {
  583.         if (window.ActiveMenu.Menu) {
  584.             if (window.ActiveMenu.Menu.hideOnMouseOut) {
  585.                 FW_startTimeout();
  586.             }
  587.             return(true);
  588.         }
  589.     }
  590.     return(true);
  591. }
  592.  
  593. function PxToNum(pxStr)
  594. { // pxStr == 27px, we want 27.
  595.     if (pxStr.length > 2) {
  596.         n = Number(pxStr.substr(0, pxStr.length-2));
  597.         return(n);
  598.     }
  599.     return(0);
  600. }
  601.  
  602. function hideChildMenu(hcmLayer) {
  603.     FW_clearTimeout();
  604.     var l = hcmLayer;
  605.     for (var i=0; i < l.Menu.childMenus.length; i++) {
  606.         var theLayer = l.Menu.childMenus[i];
  607.         if (document.layers) {
  608.             theLayer.visibility = "hidden";
  609.         } else {
  610.             theLayer = FIND(theLayer);
  611.             theLayer.style.visibility = "hidden";
  612.         }
  613.         theLayer.Menu.hideChildMenu(theLayer);
  614.     }
  615.  
  616.     if (l.childMenu) {
  617.         var childMenu = l.childMenu;
  618.         if (document.layers) {
  619.             l.Menu.FW_showMenu(null,null,null,childMenu.layers[0]);
  620.             childMenu.zIndex = l.parentLayer.zIndex +1;
  621.             childMenu.top = l.top + l.parentLayer.top + l.Menu.menuLayer.top + l.Menu.menuItemHeight/3;
  622.             if (childMenu.left + childMenu.clip.width > window.innerWidth) {
  623.                 childMenu.left = l.parentLayer.left - childMenu.clip.width + l.Menu.menuLayer.left + 15;
  624.                 l.Menu.container.clip.left -= childMenu.clip.width;
  625.             } else {
  626.                 childMenu.left = l.parentLayer.left + l.parentLayer.clip.width  + l.Menu.menuLayer.left -5;
  627.             }
  628.             var w = childMenu.clip.width+childMenu.left-l.Menu.container.clip.left;
  629.             if (w > l.Menu.container.clip.width)  
  630.                 l.Menu.container.clip.width = w;
  631.             var h = childMenu.clip.height+childMenu.top-l.Menu.container.clip.top;
  632.             if (h > l.Menu.container.clip.height) l.Menu.container.clip.height = h;
  633.             l.document.layers[1].zIndex = 0;
  634.             childMenu.visibility = "inherit";
  635.         } else if (FIND("menuItem0")) {
  636.             childMenu = FIND(l.childMenu);
  637.             var menuLayer = FIND(l.Menu.menuLayer);
  638.             var s = childMenu.style;
  639.             s.zIndex = menuLayer.style.zIndex+1;
  640.             if (document.all) { // ie case.
  641.                 s.pixelTop = l.style.pixelTop + menuLayer.style.pixelTop + l.Menu.menuItemHeight/3;
  642.                 s.left = s.pixelLeft = (menuLayer.style.pixelWidth) + menuLayer.style.pixelLeft -5;
  643.             } else { // zilla case
  644.                 var top = PxToNum(l.style.top) + PxToNum(menuLayer.style.top) + l.Menu.menuItemHeight/3;
  645.                 var left = (PxToNum(menuLayer.style.width)) + PxToNum(menuLayer.style.left) -5;
  646.                 s.top = top;
  647.                 s.left = left;
  648.             }
  649.             childMenu.style.visibility = "inherit";
  650.         } else {
  651.             return;
  652.         }
  653.         window.activeMenus[window.activeMenus.length] = childMenu;
  654.     }
  655. }
  656.  
  657. function hideActiveMenus() {
  658.     if (!window.activeMenus) return;
  659.     for (var i=0; i < window.activeMenus.length; i++) {
  660.         if (!activeMenus[i]) continue;
  661.         if (activeMenus[i].visibility && activeMenus[i].Menu) {
  662.             activeMenus[i].visibility = "hidden";
  663.             activeMenus[i].Menu.container.visibility = "hidden";
  664.             activeMenus[i].Menu.container.clip.left = 0;
  665.         } else if (activeMenus[i].style) {
  666.             var s = activeMenus[i].style;
  667.             s.visibility = "hidden";
  668.             s.left = -200;
  669.             s.top = -200;
  670.         }
  671.     }
  672.     if (window.ActiveMenuItem) {
  673.         hideMenu(false, false);
  674.     }
  675.     window.activeMenus.length = 0;
  676. }
  677.  
  678.  
  679.