home *** CD-ROM | disk | FTP | other *** search
/ com!online 2002 May / comcd0502.iso / homepage / special / javascript / 02_01 / java / Menue / yx_menu-v4.js < prev    next >
Encoding:
JavaScript  |  2000-08-27  |  18.3 KB  |  567 lines

  1. // +------------------------------------------------------------+
  2. // | yx_menu                         Version 4                  |
  3. // | Copyright 1999  Xin Yang        yangxin@iname.com          |
  4. // | Created 11/04/1999              Last Modified 08/27/2000   |
  5. // | Web Site:                       http://yx.webprovider.com  |
  6. // +------------------------------------------------------------+
  7. // | Copyright 1999,2000  Xin Yang   All Rights Reserved.       |
  8. // +------------------------------------------------------------+
  9. // | For personal purpose, send me your URL and put a link back |
  10. // | to my web site, then you can use this script free.         |
  11. // |                                                            |
  12. // | For commercial purpose, obtain quotation for referencing,  |
  13. // | using, hosting, selling or distributing this script.       |
  14. // |                                                            |
  15. // | In all cases copyright must remain intact.                 |
  16. // +------------------------------------------------------------+
  17.  
  18. // Script begins
  19.  
  20. var isIE4 = false;
  21. var isNN4 = false;
  22.  
  23. var flagMenu = "M";
  24. var flagLink = "L";
  25. var flagCommand = "C";
  26. var flagSeparator = "S";
  27.  
  28. var charWidth = 7; // character width
  29. var charHeight = 15; // character height
  30. var colorNormal = "#cccccc"; // menu pad color
  31. var colorHighlighted = "#ffffff"; // menu highlighted item color
  32. var colorTopLine = "#999999"; // separator upper line color
  33. var colorBottomLine = "#ffffff"; // separator lower line color
  34.  
  35. var borderSize = 2;
  36. var marginSize = 4;
  37. var marginString = "  ";
  38. var subMenuFlagSize = 4;
  39.  
  40. var menuShown = -1;
  41. var itemOn = false;
  42. var nnWidth = 0, nnHeight = 0;
  43.  
  44. var menuItemCount = -1;
  45. var menuItem = new Array();
  46. var menuFolderCount = -1;
  47. var menuFolder = new Array();
  48. var menuFolderSwitch = new Array();
  49. var menuWidth = new Array();
  50. var itemLayer = new Array();
  51. var menuLayer = new Array();
  52. var menuHolder = new Array();
  53. var menuDone = new Array();
  54.  
  55. var focusIt = 0;
  56.  
  57. function launchCommand(commandString) {
  58.   eval(commandString);
  59. }
  60.  
  61. function launchPage(pageURL) {
  62.   document.location.assign(pageURL);
  63. }
  64.  
  65. function getLayer(layerID) {
  66.   return (isIE4)?document.all[layerID]:document.layers[layerID];
  67. }
  68.  
  69. function clickMenu(menuNum,itemIndex) {
  70.   var menuIndex = menuItem[menuNum][itemIndex].myFolder;
  71.   var folderIndex = menuItem[menuNum][itemIndex].folder;
  72.   var itemX = menuItem[menuNum][itemIndex].x;
  73.   var itemY = menuItem[menuNum][itemIndex].y;
  74.  
  75.   var menuID = getMenu(menuNum,menuIndex,0,0);
  76.   var theLayer = getLayer(menuID);
  77.  
  78.   if (menuItem[menuNum][itemIndex].type == flagMenu) {
  79.     if (menuFolderSwitch[menuNum][folderIndex])
  80.       hideMenu(menuNum,folderIndex)
  81.     else
  82.       showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);
  83.   }
  84.   else if (menuItem[menuNum][itemIndex].type == flagLink) {
  85.     closeMenu(menuNum);
  86.     launchPage(menuItem[menuNum][itemIndex].url);
  87.   }
  88.   else if (menuItem[menuNum][itemIndex].type == flagCommand) {
  89.     closeMenu(menuNum);
  90.     launchCommand(menuItem[menuNum][itemIndex].command);
  91.   }
  92. }
  93.  
  94. function mouseOver() {
  95.   var menuNum = this.menuNum;
  96.   var itemIndex = this.itemIndex;
  97.   var menuIndex = menuItem[menuNum][itemIndex].myFolder;
  98.   var menuLength = menuFolder[menuNum][menuIndex].length;
  99.   var folderIndex = menuItem[menuNum][itemIndex].folder;
  100.   var itemX = menuItem[menuNum][itemIndex].x;
  101.   var itemY = menuItem[menuNum][itemIndex].y;
  102.   var thisFolder = 0;
  103.   var thisItem = 0;
  104.  
  105.   var menuID = getMenu(menuNum,menuIndex,0,0);
  106.   var theLayer = getLayer(menuID);
  107.  
  108.   itemOn = true;
  109.  
  110.   if (menuItem[menuNum][itemIndex].type != flagSeparator) {
  111.     if (isIE4) {
  112.       this.style.backgroundColor = colorHighlighted;
  113.     }
  114.     else if (isNN4) {
  115.       this.document.bgColor = colorHighlighted;
  116.     }
  117.   }
  118.  
  119.   for (var i = 0; i < menuLength; i++) {
  120.     thisItem = menuFolder[menuNum][menuIndex][i];
  121.     
  122.     if (thisItem != itemIndex)
  123.       if (menuItem[menuNum][thisItem].type == flagMenu) {
  124.         thisFolder = menuItem[menuNum][thisItem].folder;
  125.  
  126.         if (menuFolderSwitch[menuNum][thisFolder])
  127.           hideMenu(menuNum,thisFolder);
  128.       }
  129.   }
  130.  
  131.   if (menuItem[menuNum][itemIndex].type == flagMenu)
  132.     if (!menuFolderSwitch[menuNum][folderIndex])
  133.       showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);
  134.  
  135.   window.status = menuItem[menuNum][itemIndex].description;  
  136.   return true;
  137. }
  138.  
  139. function mouseOut() {
  140.   itemOn = false;
  141.  
  142.   if (isIE4)
  143.     this.style.backgroundColor = colorNormal
  144.   else if (isNN4)
  145.     this.document.bgColor = colorNormal;
  146.  
  147.   window.status = "";
  148.   return true;
  149. }
  150.  
  151. function menuItemUnit() {
  152.   this.type = "";
  153.   this.name = "";
  154.   this.description = "";
  155.   this.url = "";
  156.   this.command = "";
  157.   this.menu = "";
  158.   this.folder = -1;
  159.   this.myFolder = -1;
  160.   this.x = -1;
  161.   this.y = -1;
  162. }
  163.  
  164. function readMenu(menuNum,menuName) {
  165.   var menu = eval(menuName);
  166.   var menuLength = menu.length
  167.   var thisFolder = ++menuFolderCount;
  168.  
  169.   menuFolder[menuNum][thisFolder] = new Array();
  170.   menuFolderSwitch[menuNum][thisFolder] = false;
  171.   menuWidth[menuNum][thisFolder] = 0;
  172.   menuLayer[menuNum][thisFolder] = false;
  173.   menuDone[menuNum][thisFolder] = false;
  174.  
  175.   for (var i = 0; i < menuLength; i++) {
  176.     menuFolder[menuNum][thisFolder][i] = ++menuItemCount;
  177.     itemLayer[menuNum][menuItemCount] = false;
  178.  
  179.     menuItem[menuNum][menuItemCount] = new menuItemUnit();
  180.     menuItem[menuNum][menuItemCount].myFolder = thisFolder;
  181.     menuItem[menuNum][menuItemCount].type = menu[i][0];
  182.     menuItem[menuNum][menuItemCount].name = menu[i][1];
  183.     menuItem[menuNum][menuItemCount].description = menu[i][2];
  184.  
  185.     if (menuWidth[menuNum][thisFolder] < (menuItem[menuNum][menuItemCount].name.length + marginSize))
  186.       menuWidth[menuNum][thisFolder] = menuItem[menuNum][menuItemCount].name.length + marginSize;
  187.  
  188.     if (menuItem[menuNum][menuItemCount].type == flagMenu) {
  189.       menuItem[menuNum][menuItemCount].menu = menu[i][3];
  190.       menuItem[menuNum][menuItemCount].folder = menuFolderCount + 1;
  191.       readMenu(menuNum,menuItem[menuNum][menuItemCount].menu);
  192.     }
  193.     else if (menuItem[menuNum][menuItemCount].type == flagLink) {
  194.       menuItem[menuNum][menuItemCount].url = menu[i][3];
  195.     }
  196.     else if (menuItem[menuNum][menuItemCount].type == flagCommand) {
  197.       menuItem[menuNum][menuItemCount].command = menu[i][3];
  198.     }
  199.     else if (menuItem[menuNum][menuItemCount].type != flagSeparator) {
  200.       alert("Error found in " + menuName);
  201.     }
  202.   }
  203. }
  204.  
  205. function getItem(menuNum,itemIndex,itemDimX,itemDimY,menuIndex) {
  206.   var thisItem = null;
  207.   var subMenuFlag = (menuItem[menuNum][itemIndex].type == flagMenu)?"subMenu.gif":"onePixel.gif";
  208.   var singleQuote = "'";
  209.   var itemID = "m" + menuNum + "i" + itemIndex + "";
  210.   var layerString = '<div id="' + itemID + '" style="position:absolute; width:' + itemDimX + '; background-color:' + colorNormal + '; visibility:hidden;"></div>';
  211.   var htmlString = (menuItem[menuNum][itemIndex].type == flagSeparator)?('<table width=' + itemDimX +' height=2 cellpadding=0 cellspacing=0 border=0><tr align=left valign=bottom><td bgcolor=' + colorTopLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr><tr align=left valign=top><td bgcolor=' + colorBottomLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr></table>'):('<table width=' + itemDimX +' height=' + itemDimY + ' cellpadding=0 cellspacing=0 border=0><tr align=left valign=middle><td nowrap><span id="menuText"><a class="menu" href="javascript:clickMenu(' + menuNum + ',' + itemIndex + ')" onMouseOver="window.status=' + singleQuote + menuItem[menuNum][itemIndex].description + singleQuote + ';return true;">' + marginString + menuItem[menuNum][itemIndex].name + marginString + '</a></span></td><td><img src="' + subMenuFlag + '" width=4 height=7 border=0 align=right></td></tr></table>');
  212.  
  213.   if (!itemLayer[menuNum][itemIndex]) {
  214.     itemLayer[menuNum][itemIndex] = true;
  215.  
  216.     if (isIE4) {
  217.       document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
  218.       thisItem = document.all[itemID];
  219.  
  220.       thisItem.innerHTML = htmlString;
  221.       thisItem.style.zIndex = menuIndex * 2 + 1;
  222.  
  223.       thisItem.onmouseover = mouseOver;
  224.       if (menuItem[menuNum][itemIndex].type != flagSeparator)
  225.         thisItem.onmouseout = mouseOut;
  226.     }
  227.     else if (isNN4) {
  228.       document.layers[itemID] = new Layer(itemDimX,document.layers[menuHolder[menuNum]]);
  229.       thisItem = document.layers[itemID];
  230.  
  231.       thisItem.visibility = "hidden";
  232.       thisItem.document.open();
  233.       thisItem.document.writeln(htmlString);
  234.       thisItem.document.close();
  235.       thisItem.document.bgColor = colorNormal;
  236.       thisItem.zIndex = menuIndex * 2 + 1;
  237.  
  238.       thisItem.onmouseover = mouseOver;
  239.       if (menuItem[menuNum][itemIndex].type != flagSeparator)
  240.         thisItem.onmouseout = mouseOut;
  241.     }
  242.  
  243.     thisItem.itemIndex = itemIndex;
  244.     thisItem.menuNum = menuNum;
  245.   }
  246.   
  247.   return itemID;
  248. }
  249.  
  250. function getMenu(menuNum,menuIndex,menuDimX,menuDimY) {
  251.   var menuID = "m" + menuNum + "f" + menuIndex + "";
  252.   var menuPadX = menuDimX + borderSize * 2;
  253.   var menuPadY = menuDimY + borderSize * 2;
  254.   var layerString = '<div id="' + menuID + '" style="position:absolute; width:' + menuPadX + '; visibility:hidden;"></div>';
  255.   var htmlString = '<table width=' + menuPadX +' height=' + menuPadY + ' cellpadding=0 cellspacing=0 border=' + borderSize + '><tr align=left valign=middle><td></td></tr></table>';
  256.   var theLayer = null;
  257.  
  258.   if (!menuLayer[menuNum][menuIndex]) {
  259.     menuLayer[menuNum][menuIndex] = true;
  260.  
  261.     if (isIE4) {
  262.       document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
  263.       theLayer = document.all[menuID];
  264.  
  265.       theLayer.innerHTML = htmlString;
  266.       theLayer.style.zIndex = menuIndex * 2;
  267.     }
  268.     else if (isNN4) {
  269.       document.layers[menuID] = new Layer(menuPadX,document.layers[menuHolder[menuNum]]);
  270.       theLayer = document.layers[menuID];
  271.  
  272.       theLayer.visibility = "hidden";
  273.       theLayer.zIndex = menuIndex * 2;
  274.       theLayer.document.open();
  275.       theLayer.document.writeln(htmlString);
  276.       theLayer.document.close();
  277.     }
  278.  
  279.     theLayer.padWidth = menuPadX;
  280.     theLayer.padHeight = menuPadY;
  281.     theLayer.paDimX = 0; theLayer.paDimY = 0; theLayer.seDimX = 0; theLayer.seDimY = 0;
  282.   }
  283.   
  284.   return menuID;
  285. }
  286.  
  287. function showLayer(layerID) {
  288.   if (isIE4)
  289.     document.all[layerID].style.visibility = "visible"
  290.   else if (isNN4)
  291.     document.layers[layerID].visibility = "show";
  292. }
  293.  
  294. function hideLayer(layerID) {
  295.   if (isIE4)
  296.     document.all[layerID].style.visibility = "hidden"
  297.   else if (isNN4)
  298.     document.layers[layerID].visibility = "hidden";
  299. }
  300.  
  301. function moveLayerTo(layerID,x,y) {
  302.   if (isIE4) {
  303.     document.all[layerID].style.pixelLeft = x;
  304.     document.all[layerID].style.pixelTop = y;
  305.   }
  306.   else if (isNN4) {
  307.     document.layers[layerID].left = x;
  308.     document.layers[layerID].top = y;
  309.   }
  310. }
  311.  
  312. function hideMenu(menuNum,menuIndex) {
  313.   var menuLength = menuFolder[menuNum][menuIndex].length;
  314.   var menuID = getMenu(menuNum,menuIndex,0,0);
  315.   var itemID = "";
  316.   var itemIndex = 0;
  317.  
  318.   var theLayer = getLayer(menuID);
  319.  
  320.   for (var i = 0; i < menuLength; i++) {
  321.     itemIndex = menuFolder[menuNum][menuIndex][i];
  322.  
  323.     if (menuItem[menuNum][itemIndex].type == flagMenu)
  324.       if (menuFolderSwitch[menuNum][menuItem[menuNum][itemIndex].folder])
  325.         hideMenu(menuNum,menuItem[menuNum][itemIndex].folder);
  326.  
  327.     itemID = getItem(menuNum,itemIndex,0,0,0);
  328.     hideLayer(itemID);
  329.   }
  330.  
  331.   hideLayer(menuID);
  332.  
  333.   if (isNN4) { setMenuSize(menuHolder[menuNum],theLayer.paDimX,theLayer.paDimY); }
  334.  
  335.   menuFolderSwitch[menuNum][menuIndex] = false;
  336. }
  337.  
  338. function _getLeft(_holder) {
  339.   return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetLeft):(_holder.offsetLeft+_getLeft(_holder.offsetParent));
  340. }
  341.  
  342. function _getTop(_holder) {
  343.   return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetTop):(_holder.offsetTop+_getTop(_holder.offsetParent));
  344. }
  345.  
  346. function getLeft(_holder) {
  347.   return (isIE4)?_getLeft(_holder):_holder.pageX;
  348. }
  349.  
  350. function getTop(_holder) {
  351.   return (isIE4)?_getTop(_holder):_holder.pageY;
  352. }
  353.  
  354. function showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  355.   var menuLength = menuFolder[menuNum][menuIndex].length;
  356.   var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  357.   var menuID = "";
  358.   var itemID = "";
  359.   var itemIndex = 0;
  360.   var itemDimY = menuY;
  361.  
  362.   if (fCount == focusIt || fCount < 0) {
  363.     for (var i = 0; i < menuLength; i++) {
  364.        itemID = getItem(menuNum,menuFolder[menuNum][menuIndex][i],0,0,0);
  365.  
  366.        itemIndex = menuFolder[menuNum][menuIndex][i];
  367.        menuItem[menuNum][itemIndex].x = menuX;
  368.        menuItem[menuNum][itemIndex].y = itemDimY;
  369.        itemDimY +=  (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
  370.        moveLayerTo(itemID,menuItem[menuNum][itemIndex].x,menuItem[menuNum][itemIndex].y);
  371.  
  372.        showLayer(itemID);
  373.      }
  374.  
  375.     menuID = getMenu(menuNum,menuIndex,0,0);
  376.     moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);
  377.  
  378.     if (isNN4) {
  379.       var theLayer = document.layers[menuID];
  380.       theLayer.paDimX = dimX; theLayer.paDimY = dimY;
  381.       theLayer.seDimX = (dimX < menuX + borderSize + menuDimX)?(menuX + borderSize + menuDimX):dimX;
  382.       theLayer.seDimY = (dimY < itemDimY + borderSize)?(itemDimY + borderSize):dimY;
  383.       setMenuSize(menuHolder[menuNum],theLayer.seDimX,theLayer.seDimY);
  384.     }
  385.  
  386.     showLayer(menuID);
  387.     
  388.     menuFolderSwitch[menuNum][menuIndex] = true;
  389.   }
  390. }
  391.  
  392. function showSubMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  393.   var menuLength = menuFolder[menuNum][menuIndex].length;
  394.   var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  395.   var menuID = "";
  396.   var itemID = "";
  397.   var theLayer = null;
  398.   var itemIndex = 0;
  399.   var dy=0,dx=0;
  400.  
  401.   var frameWidth,frameHeight,contentWidth,contentHeight,scrollX,scrollY;
  402.  
  403.   if (isNN4) {
  404.     frameWidth=window.innerWidth; frameHeight=window.innerHeight;
  405.     contentWidth=(frameHeight<window.document.height)?(frameWidth-20):frameWidth;
  406.     contentHeight=(frameWidth<window.document.width)?(frameHeight-20):frameHeight;
  407.     scrollX=window.pageXOffset;
  408.     scrollY=window.pageYOffset;
  409.   }
  410.   else {
  411.     contentWidth=window.document.body.clientWidth;
  412.     contentHeight=window.document.body.clientHeight;
  413.     scrollX=window.document.body.scrollLeft;
  414.     scrollY=window.document.body.scrollTop;
  415.   }
  416.  
  417.   menuID = getMenu(menuNum,menuIndex,0,0);
  418.   theLayer = getLayer(menuID);
  419.  
  420.   var padLeft=getLeft(theLayer);
  421.   var padRight=padLeft+theLayer.padWidth;
  422.   var padTop=getTop(theLayer);
  423.   var padBottom=padTop+theLayer.padHeight;
  424.  
  425.   if (padBottom-scrollY>contentHeight) {
  426.     dy=contentHeight+scrollY-padBottom;
  427.     if (padTop+dy<scrollY) { dy=scrollY-padTop; }
  428.   }
  429.  
  430.   if (padRight-scrollX>contentWidth) {
  431.     dx=contentWidth+scrollX-padRight;
  432.     if (padLeft+dx<scrollX) { dx=scrollX-padLeft; }
  433.   }
  434.  
  435.   if (dy != 0 || dx != 0) {
  436.     menuX += dx; menuY += dy;
  437.     if (menuX < borderSize) { menuX = borderSize; }
  438.     if (menuY < borderSize) { menuY = borderSize; }
  439.   }
  440.  
  441.   showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
  442. }
  443.  
  444. function showMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  445.   var itemDimY = menuY;
  446.   var menuLength = menuFolder[menuNum][menuIndex].length;
  447.   var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  448.   var menuID = "";
  449.   var itemID = "";
  450.   var itemIndex = 0;
  451.  
  452.   if (menuShown != -1 && menuShown != menuNum)
  453.     hideMenu(menuShown,0);
  454.  
  455.   menuShown = menuNum;
  456.  
  457.   if (!menuDone[menuNum][menuIndex]) {
  458.     menuDone[menuNum][menuIndex] = true;
  459.  
  460.     for (var i = 0; i < menuLength; i++) {
  461.       itemIndex = menuFolder[menuNum][menuIndex][i];
  462.       itemDimY +=  (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
  463.       itemID = getItem(menuNum,itemIndex,menuDimX,charHeight,menuIndex);
  464.     }
  465.     menuID = getMenu(menuNum,menuIndex,menuDimX,itemDimY-menuY);
  466.   }
  467.  
  468.   if (menuIndex != 0) {
  469.     menuID = getMenu(menuNum,menuIndex,0,0);
  470.     moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);
  471.     setTimeout(("showSubMenu("+menuNum+","+menuIndex+","+menuX+","+menuY+","+dimX+","+dimY+","+fCount+")"),0);
  472.     return;
  473.   }
  474.   else {
  475.     showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
  476.   }
  477. }
  478.  
  479. function setMenuSize(menuHolderID,menuDimX,menuDimY) {
  480.   document.layers[menuHolderID].clip.width=menuDimX;
  481.   document.layers[menuHolderID].clip.height=menuDimY;
  482. }
  483.  
  484. function buildMenu(menuArrayName) {
  485.   isIE4 = document.all;
  486.   isNN4 = document.layers;
  487.  
  488.   var menuArray = eval(menuArrayName);
  489.   var menuCount = menuArray.length;
  490.   var menuSizeX = 0;
  491.   var menuSizeY = 0;
  492.  
  493.   if (isIE4 || isNN4) {
  494.     for (var i = 0; i < menuCount; i++) {
  495.       menuItemCount = -1;
  496.       menuFolderCount = -1;
  497.  
  498.       menuItem[i] = new Array();
  499.       menuFolder[i] = new Array();
  500.       menuFolderSwitch[i] = new Array();
  501.       menuWidth[i] = new Array();
  502.  
  503.       itemLayer[i] = new Array();
  504.       menuLayer[i] = new Array();
  505.       menuDone[i] = new Array();
  506.  
  507.       menuHolder[i] = menuArray[i][1];
  508.  
  509.       readMenu(i,menuArray[i][0]);
  510.     }
  511.  
  512.     if (isNN4) {
  513.       nnWidth = window.innerWidth;
  514.       nnHeight = window.innerHeight;
  515.       window.onResize = reloadMenu;
  516.     }
  517.  
  518.     captureClick();
  519.   }
  520. }
  521.  
  522. function switchMenu() {
  523.   if (!itemOn)
  524.     if (menuShown != -1)
  525.       closeMenu(menuShown);
  526.  
  527.   return true;
  528. }
  529.  
  530. function captureClick() {
  531.   if (isIE4)
  532.     document.onclick = switchMenu;
  533.   else {
  534.     document.onClick = switchMenu;
  535.     document.captureEvents(Event.CLICK);
  536.   }
  537. }
  538.  
  539. function reloadMenu() {
  540.   if (nnWidth != window.innerWidth || nnHeight != window.innerHeight)
  541.     document.location.reload();
  542. }
  543.  
  544. function overMenu(menuNum) {
  545.   itemOn = true;
  546.  
  547.   if (menuShown != -1 && menuShown != menuNum)
  548.     openMenu(menuNum);
  549. }
  550.  
  551. function outMenu(menuNum) {
  552.   itemOn = false;
  553. }
  554.  
  555. function openMenu(menuNum) {
  556.   if (menuShown == menuNum)
  557.     closeMenu(menuNum)
  558.   else
  559.     showMenu(menuNum,0,borderSize,borderSize,0,0, -1);
  560. }
  561.  
  562. function closeMenu(menuNum) {
  563.   menuShown = -1;
  564.   hideMenu(menuNum,0);
  565. }
  566.  
  567. // Script ends