home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 February / Chip_2003-02_cd1.bin / tema / cadstudio / HM_ScriptDOM.js < prev    next >
Text File  |  2001-11-15  |  37KB  |  975 lines

  1. /*HM_ScriptDOM.js
  2. * by Peter Belesis. v4.1.3 011108
  3. * Copyright (c) 2001 Peter Belesis. All Rights Reserved.
  4. * Originally published and documented at http://www.dhtmlab.com/
  5. * Available solely from INT Media Group. Incorporated under exclusive license.
  6. * Contact licensing@internet.com for more information.
  7. */
  8.  
  9. HM_IE5M = HM_IE && HM_Mac;
  10. HM_IE5W = HM_IE && !HM_Mac;
  11. HM_NS6 = (navigator.vendor == ("Netscape6") || navigator.product == ("Gecko"));
  12. HM_IEpos = HM_IE || (HM_NS6 && parseInt(navigator.productSub)>=20010710);
  13. HM_IECSS = (HM_IE && document.compatMode) ? document.compatMode ==  "CSS1Compat" : false;
  14. HM_IEDTD = (HM_IE && document.doctype) ? document.doctype.name.indexOf(".dtd")!=-1 : HM_IECSS;
  15.  
  16. HM_IEnoDTD = HM_IE && !HM_IEDTD;
  17.  
  18. HM_a_Parameters = [
  19.     ["MenuWidth",          150,        "number"],
  20.     ["FontFamily",         "Arial,sans-serif"],
  21.     ["FontSize",           10,        "number"],
  22.     ["FontBold",           false,    "boolean"],
  23.     ["FontItalic",         false,    "boolean"],
  24.     ["FontColor",          "black"],
  25.     ["FontColorOver",      "white"],
  26.     ["BGColor",            "white"],
  27.     ["BGColorOver",        "black"],
  28.     ["ItemPadding",        3,        "number"],
  29.     ["BorderWidth",        2,        "number"],
  30.     ["BorderColor",        "red"],
  31.     ["BorderStyle",        "solid"],
  32.     ["SeparatorSize",      1,        "number"],
  33.     ["SeparatorColor",     "yellow"],
  34.     ["ImageSrc",           null],
  35.     ["ImageSrcOver",       null],
  36.     ["ImageSrcLeft",       null],
  37.     ["ImageSrcLeftOver",   null],
  38.     ["ImageSize",          5,        "number"],
  39.     ["ImageHorizSpace",    0,        "number"],
  40.     ["ImageVertSpace",     0,        "number"],
  41.     ["KeepHilite",         false,    "boolean"],
  42.     ["ClickStart",         false,    "boolean"],
  43.     ["ClickKill",          true,    "boolean"],
  44.     ["ChildOverlap",       20,        "number"],
  45.     ["ChildOffset",        10,        "number"],
  46.     ["ChildPerCentOver",   null,    "number"],
  47.     ["TopSecondsVisible",  .5,        "number"],
  48.     ["ChildSecondsVisible",.3,        "number"],
  49.     ["StatusDisplayBuild", 1,        "boolean"],
  50.     ["StatusDisplayLink",  1,        "boolean"],
  51.     ["UponDisplay",        null,    "delayed"],
  52.     ["UponHide",           null,    "delayed"],
  53.     ["RightToLeft",        false,    "boolean"],
  54.     ["CreateTopOnly",      0,        "boolean"],
  55.     ["ShowLinkCursor",     false,    "boolean"]
  56. ]
  57.  
  58. HM_MenuIDPrefix = "HM_Menu";
  59. HM_ItemIDPrefix = "HM_Item";
  60. HM_ArrayIDPrefix = "HM_Array";
  61.  
  62. Function.prototype.isFunction = true;
  63. Function.prototype.isString = false;
  64. String.prototype.isFunction = false;
  65. String.prototype.isString = true;
  66. String.prototype.isBoolean = false;
  67. String.prototype.isNumber = false;
  68. Number.prototype.isString = false;
  69. Number.prototype.isFunction = false;
  70. Number.prototype.isBoolean = false;
  71. Number.prototype.isNumber = true;
  72. Boolean.prototype.isString = false;
  73. Boolean.prototype.isFunction = false;
  74. Boolean.prototype.isBoolean = true;
  75. Boolean.prototype.isNumber = false;
  76. Array.prototype.itemValidation = false;
  77. Array.prototype.isArray = true;
  78.  
  79. if(HM_IE) {
  80.     HM_a_ElementsCreated = [];
  81.  
  82.     function HM_f_StoreElement(el){
  83.         HM_a_ElementsCreated[HM_a_ElementsCreated.length] = el;
  84.     }
  85.  
  86.     HM_IEcanvas = null;
  87. }
  88.  
  89. function HM_f_AssignParameters(paramarray){
  90.     var ParamName = paramarray[0];
  91.     var DefaultValue = paramarray[1];
  92.     var FullParamName = "HM_" + ParamName;
  93.     
  94.     if (typeof eval("window.HM_PG_" + ParamName) == "undefined") {
  95.         if (typeof eval("window.HM_GL_" + ParamName) == "undefined") {
  96.             eval(FullParamName + "= DefaultValue");
  97.         }
  98.         else {
  99.             eval(FullParamName + "= HM_GL_" + ParamName);
  100.         }
  101.     }
  102.     else {
  103.         eval(FullParamName + "= HM_PG_" + ParamName);
  104.     }
  105.  
  106.     paramarray[0] = FullParamName;
  107.     paramarray[1] = eval(FullParamName);
  108. }
  109.  
  110. function HM_f_EvalParameters(valuenew,valueold,valuetype){
  111.     var TestString, ParPosition;
  112.  
  113.     if(typeof valuenew == "undefined" || valuenew == null || (valuenew.isString && valuenew.length == 0)){
  114.         return valueold;
  115.     }
  116.  
  117.     if(valuetype != "delayed"){
  118.         while(valuenew.isString) {
  119.             ParPosition = valuenew.indexOf("(");
  120.             if(ParPosition !=-1) {
  121.                 TestString = "window." + valuenew.substr(0,ParPosition);
  122.                 if (typeof eval(TestString) != "undefined" && eval(TestString).isFunction) {
  123.                     valuenew = eval(valuenew);
  124.                 }
  125.             }
  126.             else break
  127.         }
  128.     }
  129.  
  130.     while(valuenew.isFunction) {valuenew = valuenew()}
  131.  
  132.     switch(valuetype){    
  133.         case "number":
  134.             while (valuenew.isString) {valuenew = eval(valuenew)}
  135.             break;
  136.         case "boolean":
  137.             while (!valuenew.isBoolean) {
  138.                 valuenew = (valuenew.isNumber) ? valuenew ? true : false : eval(valuenew);
  139.             }
  140.             break;
  141.     }
  142.  
  143.     return valuenew;
  144. }
  145.  
  146. for (i=0;i<HM_a_Parameters.length;i++) {
  147.     HM_f_AssignParameters(HM_a_Parameters[i]);
  148.     eval(HM_a_Parameters[i][0] + "= HM_f_EvalParameters("+ HM_a_Parameters[i][0] +",null,HM_a_Parameters[i][2])")
  149. }
  150.  
  151. HM_ChildPerCentOver = (isNaN(parseFloat(HM_ChildPerCentOver))) ? null : parseFloat(HM_ChildPerCentOver)/100;
  152.  
  153. HM_ChildMilliSecondsVisible = HM_ChildSecondsVisible * 1000;
  154.  
  155. function HM_f_ValidateArray(arrayname){
  156.     var MenuArrayIsValid = false;
  157.     var MenuArrayIsObject = (typeof eval("window." + arrayname) == "object");
  158.     if(MenuArrayIsObject) { 
  159.         var TheMenuArray = eval(arrayname);
  160.         if(TheMenuArray.isArray && TheMenuArray.length > 1) {
  161.             MenuArrayIsValid = true;
  162.             if(!TheMenuArray.itemValidation) {
  163.                 while((typeof TheMenuArray[TheMenuArray.length-1] != "object") || (!TheMenuArray[TheMenuArray.length-1].isArray)) {
  164.                     TheMenuArray.length--;
  165.                 }
  166.                 TheMenuArray.itemValidation = true;
  167.             }
  168.         }
  169.     }
  170.     return MenuArrayIsValid;
  171. }
  172.  
  173. if(!window.HM_a_TreesToBuild) {
  174.     HM_a_TreesToBuild = [];
  175.     for(i=1; i<100; i++){
  176.         if(HM_f_ValidateArray(HM_ArrayIDPrefix + i)) HM_a_TreesToBuild[HM_a_TreesToBuild.length] = i;
  177.     }
  178. }
  179.  
  180. HM_CurrentArray = null;
  181. HM_CurrentTree  = null;
  182. HM_CurrentMenu  = null;
  183. HM_CurrentItem  = null;
  184. HM_a_TopMenus = [];
  185. HM_AreLoaded = false;
  186. HM_AreCreated = false;
  187. HM_BeingCreated = false;
  188. HM_UserOverMenu = false;
  189. HM_HideAllTimer = null;
  190. HM_TotalTrees = 0; 
  191. HM_ZIndex = 5000;
  192.  
  193. function HM_f_StartIt() {
  194.     if(HM_AreCreated) return;
  195.     if((typeof(document.body) == "undefined") || (document.body == null)) return;
  196.     if(HM_IE) HM_IEcanvas = HM_IECSS ? document.documentElement : document.body;
  197.  
  198.     HM_AreLoaded = true;
  199.     if (HM_ClickKill) {
  200.         HM_f_OtherMouseDown = (document.onmousedown) ? document.onmousedown :  new Function;
  201.         document.onmousedown = function(){HM_f_PageClick();HM_f_OtherMouseDown()}
  202.     }
  203.     else {
  204.         HM_TopMilliSecondsVisible = HM_TopSecondsVisible * 1000;
  205.     }
  206.     HM_f_MakeTrees();
  207.     HM_f_OtherOnLoad();
  208. }
  209.  
  210. function HM_f_MakeTrees(){
  211.     HM_BeingCreated = true;
  212.     var TreeParams = null;
  213.     var TreeHasChildren = false;
  214.     var ItemArray = null;
  215.  
  216.     for(var t=0; t<HM_a_TreesToBuild.length; t++) {
  217.         if(!HM_f_ValidateArray(HM_ArrayIDPrefix + HM_a_TreesToBuild[t])) continue;
  218.         HM_CurrentArray = eval(HM_ArrayIDPrefix + HM_a_TreesToBuild[t]);
  219.  
  220.         TreeParams = HM_CurrentArray[0];
  221.         TreeHasChildren = false;
  222.  
  223.         for(var i=1; i<HM_CurrentArray.length; i++) {
  224.             ItemArray = HM_CurrentArray[i];
  225.             if(ItemArray[ItemArray.length-1]) {TreeHasChildren = true; break}
  226.         }
  227.         HM_CurrentTree = {
  228.             MenuWidth        : MenuWidth = HM_f_EvalParameters(TreeParams[0],HM_MenuWidth,"number"),
  229.             MenuLeft         : MenuLeft = HM_f_EvalParameters(TreeParams[1],null,"delayed"),
  230.             MenuTop          : MenuTop = HM_f_EvalParameters(TreeParams[2],null,"delayed"),
  231.             ItemWidth        : MenuWidth - (HM_BorderWidth*2),
  232.             FontColor        : HM_f_EvalParameters(TreeParams[3],HM_FontColor),
  233.             FontColorOver    : HM_f_EvalParameters(TreeParams[4],HM_FontColorOver),
  234.             BGColor          : HM_f_EvalParameters(TreeParams[5],HM_BGColor),
  235.             BGColorOver      : HM_f_EvalParameters(TreeParams[6],HM_BGColorOver),
  236.             BorderColor      : HM_f_EvalParameters(TreeParams[7],HM_BorderColor),
  237.             SeparatorColor   : HM_f_EvalParameters(TreeParams[8],HM_SeparatorColor),
  238.             TopIsPermanent   : ((MenuLeft == null) || (MenuTop == null)) ? false : HM_f_EvalParameters(TreeParams[9],false,"boolean"),
  239.             TopIsHorizontal  : TopIsHorizontal = HM_f_EvalParameters(TreeParams[10],false,"boolean"),
  240.             TreeIsHorizontal : TreeHasChildren ? HM_f_EvalParameters(TreeParams[11],false,"boolean") : false,
  241.             PositionUnder    : (!TopIsHorizontal || !TreeHasChildren) ? false : HM_f_EvalParameters(TreeParams[12],false,"boolean"),
  242.             TopImageShow     : TreeHasChildren ? HM_f_EvalParameters(TreeParams[13],true,"boolean")  : false,
  243.             TreeImageShow    : TreeHasChildren ? HM_f_EvalParameters(TreeParams[14],true,"boolean")  : false,
  244.             UponDisplay      : HM_f_EvalParameters(TreeParams[15],HM_UponDisplay,"delayed"),
  245.             UponHide         : HM_f_EvalParameters(TreeParams[16],HM_UponHide,"delayed"),
  246.             RightToLeft      : HM_f_EvalParameters(TreeParams[17],HM_RightToLeft,"boolean"),
  247.             ClickStart         : HM_f_EvalParameters(TreeParams[18],HM_ClickStart,"boolean"),
  248.             TopIsVariableWidth  : HM_f_EvalParameters(TreeParams[19],false,"boolean"),
  249.             TreeIsVariableWidth  : HM_f_EvalParameters(TreeParams[20],false,"boolean")
  250.         }
  251.  
  252.         HM_CurrentMenu = null;
  253.         HM_f_MakeMenu(HM_a_TreesToBuild[t]);
  254.         HM_a_TopMenus[HM_TotalTrees] = HM_CurrentTree.treeParent;
  255.         HM_TotalTrees++;
  256.         if(HM_CurrentTree.TopIsPermanent){
  257.             with(HM_CurrentTree.treeParent) {
  258.                 HM_CurrentTree.treeParent.xPos = eval(HM_CurrentTree.MenuLeft);
  259.                 HM_CurrentTree.treeParent.yPos = eval(HM_CurrentTree.MenuTop);
  260.                 moveTo(HM_CurrentTree.treeParent.xPos,HM_CurrentTree.treeParent.yPos);
  261.                 style.zIndex = HM_ZIndex;
  262.             }
  263.             if(HM_IE5M) setTimeout(HM_CurrentTree.treeParent.id + ".fixSize(true)",10);    
  264.             else HM_CurrentTree.treeParent.style.visibility = "visible";
  265.         }
  266.     }
  267.  
  268.     if(HM_StatusDisplayBuild) status = HM_TotalTrees + " Hierarchical Menu Trees Created";
  269.     HM_AreCreated = true;
  270.     HM_BeingCreated = false;
  271. }
  272.  
  273. function HM_f_SetItemProperties(itemidsuffix) {
  274.     this.tree        = HM_CurrentTree;
  275.     this.index       = HM_CurrentMenu.itemCount - 1;
  276.     this.isLastItem  = (HM_CurrentMenu.itemCount == HM_CurrentMenu.maxItems);
  277.     this.array         = HM_CurrentMenu.array[HM_CurrentMenu.itemCount];
  278.     this.dispText    = this.array[0];
  279.     this.linkText    = this.array[1];
  280.     this.permHilite  = HM_f_EvalParameters(this.array[3],false,"boolean");
  281.     this.hasRollover = (!this.permHilite && HM_f_EvalParameters(this.array[2],true,"boolean"));
  282.     this.hasMore     = HM_f_EvalParameters(this.array[4],false,"boolean") && HM_f_ValidateArray(HM_ArrayIDPrefix + itemidsuffix);
  283.     this.childID     = this.hasMore ? (HM_MenuIDPrefix + itemidsuffix) : null;
  284.     this.child         = null;
  285.     this.onmouseover = HM_f_ItemOver;
  286.     this.onmouseout  = HM_f_ItemOut;
  287.     this.setItemStyle = HM_f_SetItemStyle;
  288.     this.showChild   = HM_f_ShowChild;
  289.     this.ClickStart = this.hasMore && this.tree.ClickStart && (this.tree.TopIsPermanent && (this.tree.treeParent==this.menu));
  290.     if(this.ClickStart) {
  291.         this.linkText = "";
  292.         this.onclick = this.showChild;
  293.     }
  294.     this.ChildOverlap = null;
  295. }
  296.  
  297. function HM_f_MakeElement(menuid) {
  298.     var MenuObject;
  299.     MenuObject = document.createElement("DIV");
  300.  
  301.     if(HM_IE)HM_f_StoreElement(MenuObject);
  302.  
  303.     with(MenuObject){
  304.         id = menuid;
  305.         with(style) {
  306.             position = "absolute";
  307.             visibility = "hidden";
  308.             left = "-500px";
  309.             top = "0px";
  310.             width = (HM_IEnoDTD ? HM_CurrentTree.MenuWidth : HM_CurrentTree.ItemWidth) + "px";
  311.         }
  312.     }
  313.     document.body.appendChild(MenuObject);
  314.     return MenuObject;
  315. }
  316.  
  317. function HM_f_MakeMenu(menucount) {
  318.     if(!HM_f_ValidateArray(HM_ArrayIDPrefix + menucount)) return false;
  319.     HM_CurrentArray = eval(HM_ArrayIDPrefix + menucount);
  320.  
  321.     NewMenu = document.getElementById(HM_MenuIDPrefix + menucount);
  322.     if(!NewMenu){
  323.         NewMenu = HM_f_MakeElement(HM_MenuIDPrefix + menucount);
  324.         if(HM_CurrentMenu) {
  325.             NewMenu.parentMenu = HM_CurrentMenu;
  326.             NewMenu.parentItem = HM_CurrentMenu.itemElement;
  327.             NewMenu.parentItem.child = NewMenu;
  328.             NewMenu.hasParent = true;
  329.             NewMenu.isHorizontal = HM_CurrentTree.TreeIsHorizontal;
  330.             NewMenu.showImage = HM_CurrentTree.TreeImageShow;
  331.         }
  332.         else {
  333.             NewMenu.isHorizontal = HM_CurrentTree.TopIsHorizontal;
  334.             NewMenu.showImage = HM_CurrentTree.TopImageShow;
  335.             HM_CurrentTree.treeParent = HM_CurrentTree.startChild = NewMenu;
  336.         }
  337.  
  338.         HM_CurrentMenu = NewMenu;
  339.         HM_CurrentMenu.array = HM_CurrentArray;
  340.         HM_CurrentMenu.tree  = HM_CurrentTree;
  341.         HM_CurrentMenu.itemCount = 0;
  342.         HM_CurrentMenu.maxItems = HM_CurrentMenu.array.length - 1;
  343.         HM_CurrentMenu.IsVariableWidth = ((HM_CurrentMenu.hasParent && HM_CurrentTree.TreeIsVariableWidth) || (!HM_CurrentMenu.hasParent && HM_CurrentTree.TopIsVariableWidth));
  344.         HM_CurrentMenu.showIt = HM_f_ShowIt;
  345.         HM_CurrentMenu.count = menucount;
  346.         HM_CurrentMenu.keepInWindow = HM_f_KeepInWindow;
  347.         HM_CurrentMenu.onmouseover = HM_f_MenuOver;
  348.         HM_CurrentMenu.onmouseout = HM_f_MenuOut;
  349.         HM_CurrentMenu.hideTree = HM_f_HideTree
  350.         HM_CurrentMenu.hideParents = HM_f_HideParents;
  351.         HM_CurrentMenu.hideChildren = HM_f_HideChildren;
  352.         HM_CurrentMenu.hideTop = HM_f_HideTop;
  353.         HM_CurrentMenu.hideSelf = HM_f_HideSelf;
  354.         HM_CurrentMenu.hasChildVisible = false;
  355.         HM_CurrentMenu.isOn = false;
  356.         HM_CurrentMenu.hideTimer = null;
  357.         HM_CurrentMenu.currentItem = null;
  358.         HM_CurrentMenu.setMenuStyle = HM_f_SetMenuStyle;
  359.         HM_CurrentMenu.sizeFixed = false;
  360.         HM_CurrentMenu.fixSize = HM_f_FixSize;
  361.  
  362.         if(HM_IE) HM_CurrentMenu.onselectstart = HM_f_CancelSelect;
  363.         HM_CurrentMenu.moveTo = HM_f_MoveTo;
  364.         HM_CurrentMenu.setMenuStyle();
  365.     }
  366.  
  367.     while (HM_CurrentMenu.itemCount < HM_CurrentMenu.maxItems) {
  368.         HM_CurrentMenu.itemCount++;
  369.         HM_CurrentMenu.itemElement = document.getElementById(HM_ItemIDPrefix + menucount + "_" + HM_CurrentMenu.itemCount);
  370.         if(!HM_CurrentMenu.itemElement){
  371.             if(HM_StatusDisplayBuild) status = "Creating Hierarchical Menus: " + menucount + " / " + HM_CurrentMenu.itemCount;
  372.             HM_CurrentMenu.itemElement = HM_f_MakeItemElement(menucount);
  373.         }
  374.         if(HM_CurrentMenu.itemElement.hasMore && (!HM_CreateTopOnly || HM_AreCreated && HM_CreateTopOnly)) {
  375.             MenuCreated = HM_f_MakeMenu(menucount + "_" + HM_CurrentMenu.itemCount);
  376.             if(MenuCreated) {
  377.                 HM_CurrentMenu = HM_CurrentMenu.parentMenu;
  378.             }
  379.         }
  380.     }
  381.     if(!HM_IE5M)HM_CurrentMenu.fixSize();
  382.     return HM_CurrentMenu;
  383. }
  384.  
  385. function HM_f_SetMenuStyle(){
  386.     with(this.style) {
  387.         borderWidth = HM_BorderWidth + "px";
  388.         borderColor = HM_CurrentTree.BorderColor;
  389.         borderStyle = HM_BorderStyle;
  390.         overflow    = "hidden";
  391.         cursor      = "default";
  392.     }
  393. }
  394.  
  395. function HM_f_MakeItemElement(menucount) {
  396.     var ItemElement = document.createElement("DIV");
  397.  
  398.     if(HM_IE)HM_f_StoreElement(ItemElement);
  399.  
  400.     ItemElement.id = HM_ItemIDPrefix + menucount + "_" + HM_CurrentMenu.itemCount;
  401.     ItemElement.style.position = "absolute";
  402.     ItemElement.style.visibility = "inherit";
  403.     HM_CurrentMenu.appendChild(ItemElement);
  404.     ItemElement.menu = HM_CurrentMenu;
  405.     ItemElement.setItemProperties = HM_f_SetItemProperties;
  406.     ItemElement.setItemProperties(menucount + "_" + HM_CurrentMenu.itemCount);
  407.     ItemElement.siblingBelow = ItemElement.previousSibling;
  408.     if(ItemElement.linkText && !ItemElement.ClickStart) {
  409.         ItemElement.onclick = HM_f_LinkIt;
  410.         if(HM_ShowLinkCursor)ItemElement.style.cursor = HM_NS6 ? "pointer" : "hand";
  411.     }
  412.     var FullPadding  = (HM_ItemPadding*2) + HM_ImageSize + HM_ImageHorizSpace;
  413.  
  414.     ItemElement.hasImage = (ItemElement.hasMore && HM_CurrentMenu.showImage);
  415.     if(ItemElement.hasImage) {
  416.         var ImageElement = document.createElement("IMG");
  417.  
  418.         if(HM_IE)HM_f_StoreElement(ImageElement);
  419.  
  420.         ItemElement.imageSrc = HM_CurrentTree.RightToLeft ? HM_ImageSrcLeft : HM_ImageSrc;
  421.         ItemElement.hasImageRollover = ((!HM_CurrentTree.RightToLeft && HM_ImageSrcOver) || (HM_CurrentTree.RightToLeft && HM_ImageSrcLeftOver));
  422.         if(ItemElement.hasImageRollover) {
  423.             ItemElement.imageSrcOver = HM_CurrentTree.RightToLeft ? HM_ImageSrcLeftOver : HM_ImageSrcOver;
  424.             if(ItemElement.permHilite) ItemElement.imageSrc = ItemElement.imageSrcOver;
  425.         }
  426.  
  427.         with(ImageElement){
  428.             src = ItemElement.imageSrc;
  429.             removeAttribute("height");
  430.             hspace = (!HM_CurrentTree.RightToLeft && HM_IE5W) ? HM_ItemPadding : 0;
  431.             vspace = 0;
  432.             width = HM_ImageSize;
  433.             with(style) {
  434.                 position = "absolute";
  435.                 top = (HM_ItemPadding + HM_ImageVertSpace) + "px";
  436.  
  437.                 if(HM_CurrentTree.RightToLeft) {
  438.                     left = (HM_ItemPadding + HM_ImageHorizSpace) + "px";
  439.                 }
  440.             }
  441.         }
  442.         ItemElement.imgLyr = ImageElement;
  443.     }
  444.     ItemElement.innerHTML = ItemElement.dispText;
  445.     if(ImageElement) ItemElement.insertBefore(ImageElement,ItemElement.firstChild);
  446.     ItemElement.setItemStyle();
  447.     return ItemElement;
  448. }
  449.  
  450. function HM_f_SetItemStyle() {
  451.     with(this.style){
  452.         backgroundColor = (this.permHilite) ? HM_CurrentTree.BGColorOver : HM_CurrentTree.BGColor;
  453.         color = (this.permHilite) ? HM_CurrentTree.FontColorOver : HM_CurrentTree.FontColor;
  454.         padding = HM_ItemPadding +"px";
  455.         font = ((HM_FontBold) ? "bold " : "normal ") + HM_FontSize + "pt " + HM_FontFamily;
  456.         fontStyle = (HM_FontItalic) ? "italic" : "normal";
  457.         if(HM_IE) overflow = "hidden";
  458.  
  459.         if((this.menu.showImage && (!this.menu.IsVariableWidth || (this.menu.IsVariableWidth && this.tree.RightToLeft && !this.menu.isHorizontal))) || (this.menu.IsVariableWidth && this.imgLyr)) {
  460.  
  461.             var FullPadding  = (HM_ItemPadding*2) + HM_ImageSize + HM_ImageHorizSpace;
  462.             if (HM_CurrentTree.RightToLeft) paddingLeft = FullPadding + "px";
  463.             else paddingRight = FullPadding + "px";
  464.         }
  465.         if(!this.isLastItem) {
  466.             var SeparatorString = HM_SeparatorSize + "px solid " + this.tree.SeparatorColor;
  467.             if (this.menu.isHorizontal) borderRight = SeparatorString;
  468.             else borderBottom = SeparatorString;
  469.         }
  470.  
  471.         if(this.menu.isHorizontal){
  472.             top = "0px";
  473.             if(!this.menu.IsVariableWidth) {
  474.                 if(HM_IEnoDTD){
  475.                     if(this.isLastItem) width = (HM_CurrentTree.MenuWidth - HM_BorderWidth - HM_SeparatorSize) + "px";
  476.                     else width = (HM_CurrentTree.MenuWidth - HM_BorderWidth) + "px";
  477.                     left = (this.index * (HM_CurrentTree.MenuWidth - HM_BorderWidth)) + "px";
  478.                 }
  479.                 else {
  480.                     width = (HM_CurrentTree.MenuWidth - HM_BorderWidth - parseInt(paddingLeft) - parseInt(paddingRight) - HM_SeparatorSize) + "px";
  481.                     left = ((this.index * parseInt(width)) + ((HM_SeparatorSize * this.index)))  + ((parseInt(paddingLeft) + parseInt(paddingRight)) * this.index) + "px";
  482.                 }
  483.                 var LeftAndWidth = parseInt(left) + parseInt(width);
  484.                 this.menu.style.width = LeftAndWidth + (HM_IEnoDTD ? (HM_BorderWidth * 2) : (parseInt(paddingLeft) + parseInt(paddingRight))) + "px"
  485.             }
  486.         }
  487.         else {
  488.             left = "0px";
  489.             if(!this.menu.IsVariableWidth) {
  490.                 if(HM_IEnoDTD) width = HM_CurrentTree.ItemWidth + "px";
  491.                 else width = (HM_CurrentTree.ItemWidth - (parseInt(paddingLeft) + parseInt(paddingRight))) + "px";
  492.             }
  493.  
  494.         }
  495.     }
  496. }
  497.  
  498. function HM_f_FixSize(makevis){
  499.     if(this.isHorizontal) {
  500.         if(this.IsVariableWidth) {
  501.             for(i=0; i<this.childNodes.length; i++) {
  502.                 var TempItem = this.childNodes[i];
  503.                 TempItem.realWidth = HM_IE ? TempItem.scrollWidth : TempItem.offsetWidth;
  504.                 if(HM_IE5M) TempItem.realWidth += (parseInt(TempItem.style.paddingLeft) + parseInt(TempItem.style.paddingRight))
  505.                 if(HM_IEnoDTD){
  506.                     if(TempItem.isLastItem) TempItem.style.width = (TempItem.realWidth) + "px";
  507.                     else TempItem.style.width = (TempItem.realWidth + HM_SeparatorSize) + "px";
  508.                     TempItem.style.left = (TempItem.index ? parseInt(TempItem.siblingBelow.style.left) + parseInt(TempItem.siblingBelow.style.width) : 0) + "px";
  509.                 }
  510.                 else { 
  511.                     if(TempItem.hasImage && !HM_CurrentTree.RightToLeft) {
  512.                         if(!HM_IECSS) TempItem.realWidth += HM_ItemPadding;
  513.                     }
  514.                     TempItem.realWidth -= (parseInt(TempItem.style.paddingLeft) + parseInt(TempItem.style.paddingRight));
  515.                      if(!HM_IECSS && !HM_IE5M && !TempItem.isLastItem)  TempItem.realWidth -= HM_SeparatorSize;
  516.                     TempItem.allowableWidth = TempItem.tree.ItemWidth - (parseInt(TempItem.style.paddingLeft) + parseInt(TempItem.style.paddingRight));
  517.                     TempItem.style.width = Math.min(TempItem.allowableWidth,TempItem.realWidth) + "px";
  518.                     TempItem.style.left = (TempItem.index ? (parseInt(TempItem.siblingBelow.style.left) + TempItem.siblingBelow.offsetWidth) : 0) + "px";
  519.                 }
  520.                 if(TempItem.isLastItem) {
  521.                     LeftAndWidth = parseInt(TempItem.style.left) + parseInt(TempItem.style.width);
  522.                     this.style.width = LeftAndWidth + (HM_IEnoDTD ? (HM_BorderWidth * 2) : (parseInt(TempItem.style.paddingLeft) + parseInt(TempItem.style.paddingRight))) + "px";
  523.                 }
  524.             }
  525.         }
  526.  
  527.         var MaxItemHeight = 0;
  528.         for(i=0; i<this.childNodes.length; i++) {
  529.             var TempItem = this.childNodes[i];
  530.             if(TempItem.index) {
  531.                 var SiblingHeight = TempItem.siblingBelow.offsetHeight - (HM_IEnoDTD ? 0 : (HM_ItemPadding * 2));
  532.                 MaxItemHeight = Math.max(MaxItemHeight,SiblingHeight);
  533.             }
  534.                else {
  535.                 MaxItemHeight = TempItem.offsetHeight - (HM_IEnoDTD ? 0 : (HM_ItemPadding * 2));
  536.             }
  537.         }
  538.         for(i=0; i<this.childNodes.length; i++) {
  539.             var TempItem = this.childNodes[i];
  540.             TempItem.style.height = MaxItemHeight +"px";
  541.             if(TempItem.imgLyr) {
  542.                 if(this.tree.RightToLeft){
  543.                     TempItem.imgLyr.style.left = (HM_ItemPadding + HM_ImageHorizSpace) + "px";
  544.                 }
  545.                 else {
  546.                     TempItem.imgLyr.style.left = (TempItem.offsetWidth - ((TempItem.isLastItem ? 0 : HM_SeparatorSize) + (HM_IEnoDTD ? HM_IE5M ? HM_ItemPadding : HM_ItemPadding * 2 : HM_IECSS ? HM_ItemPadding * 2 : HM_ItemPadding) + HM_ImageHorizSpace + HM_ImageSize)) + "px";
  547.                 }
  548.             }
  549.         }
  550.  
  551.         this.style.height = MaxItemHeight + (HM_IEnoDTD ? HM_BorderWidth * 2 : (HM_ItemPadding * 2)) + "px";
  552.     }
  553.     else {
  554.         if(this.IsVariableWidth) {
  555.             var MaxItemWidth = 0;
  556.             for(i=0; i<this.childNodes.length; i++) {
  557.                 var TempItem = this.childNodes[i];
  558.                 TempItem.realWidth = HM_IE ? TempItem.scrollWidth : TempItem.offsetWidth;
  559.                 if(HM_IE5M) TempItem.realWidth += (parseInt(TempItem.style.paddingLeft) + parseInt(TempItem.style.paddingRight))
  560.                 if(!HM_IEnoDTD)    {
  561.                     TempItem.realWidth -= ((parseInt(TempItem.style.paddingRight) + parseInt(TempItem.style.paddingLeft)))
  562.                 }
  563.                 MaxItemWidth = i ? Math.max(MaxItemWidth,TempItem.realWidth) : TempItem.realWidth;
  564.                 if(MaxItemWidth==TempItem.realWidth) TempWidest = TempItem;
  565.             }
  566.  
  567.             for(i=0; i<this.childNodes.length; i++) {
  568.                 this.childNodes[i].style.width = (TempWidest.realWidth + (HM_IEnoDTD ? 0 : (0))) + "px";
  569.                 if(!HM_IEnoDTD) {
  570.                     this.childNodes[i].style.paddingLeft = TempWidest.style.paddingLeft;
  571.                     this.childNodes[i].style.paddingRight = TempWidest.style.paddingRight;
  572.                 }
  573.             }
  574.             this.style.width = (this.childNodes[0].offsetWidth +  (HM_IEnoDTD ? HM_BorderWidth * 2 : 0)) + "px";
  575.         }
  576.  
  577.         for(i=0; i<this.childNodes.length; i++) {
  578.             var TempItem = this.childNodes[i];
  579.             if (TempItem.index) {
  580.                 var SiblingHeight =(TempItem.siblingBelow.offsetHeight);
  581.                 TempItem.style.top = parseInt(TempItem.siblingBelow.style.top) + SiblingHeight + "px";
  582.             }
  583.             else TempItem.style.top = "0px";
  584.  
  585.             if(TempItem.imgLyr) {
  586.                 if(this.tree.RightToLeft){
  587.                     TempItem.imgLyr.style.left = (HM_ItemPadding + HM_ImageHorizSpace) + "px";
  588.                 }
  589.                 else {
  590.                     TempItem.imgLyr.style.left = (TempItem.offsetWidth - ((HM_IEnoDTD ? HM_IE5M ? HM_ItemPadding : HM_ItemPadding*2 :  HM_IECSS ? HM_ItemPadding * 2 : HM_ItemPadding) + HM_ImageHorizSpace + HM_ImageSize)) + "px";
  591.                 }
  592.             }
  593.         }
  594.         this.style.height = parseInt(TempItem.style.top) + (HM_IE5W ? TempItem.scrollHeight : TempItem.offsetHeight) + (HM_IEnoDTD ? (HM_BorderWidth * 2) : 0) + "px";
  595.     }
  596.  
  597.     this.sizeFixed = true;
  598.     if(makevis)this.style.visibility = "visible";
  599. }
  600.  
  601. function HM_f_PopUp(menuname,e){
  602.  
  603.  
  604.  
  605.  
  606.     if(HM_IE) e = event;
  607.     if (!HM_AreLoaded) return;
  608.     menuname = menuname.replace("elMenu",HM_MenuIDPrefix);
  609.     var TempMenu = document.getElementById(menuname);
  610.     if(!TempMenu)return;
  611.     HM_CurrentMenu = TempMenu;
  612.     if (HM_CurrentMenu.tree.ClickStart) {
  613.         var ClickElement = (HM_IE) ? e.srcElement : e.target;
  614.         if(HM_NS6) {
  615.             while(ClickElement.tagName==null){
  616.                 ClickElement = ClickElement.parentNode;
  617.             }
  618.         }
  619.         ClickElement.onclick = HM_f_PopMenu;
  620.     }
  621.     else HM_f_PopMenu(e);
  622.     
  623.     
  624.     
  625.     
  626. }
  627.  
  628. function HM_f_PopMenu(e){
  629.     if(HM_IE) e = event;
  630.     if (!HM_AreLoaded || !HM_AreCreated) return true;
  631.     if (HM_CurrentMenu.tree.ClickStart && e.type != "click") return true;
  632.     var mouse_x_position, mouse_y_position;
  633.     HM_f_HideAll();
  634.     HM_CurrentMenu.hasParent = false;
  635.     HM_CurrentMenu.tree.startChild = HM_CurrentMenu;
  636.     HM_CurrentMenu.mouseX = mouse_x_position = (HM_IE) ? (e.clientX + HM_IEcanvas.scrollLeft) : e.pageX;
  637.     HM_CurrentMenu.mouseY = mouse_y_position = (HM_IE) ? (e.clientY + HM_IEcanvas.scrollTop)  : e.pageY;
  638.     HM_CurrentMenu.xIntended = HM_CurrentMenu.xPos = (HM_CurrentMenu.tree.MenuLeft!=null) ? eval(HM_CurrentMenu.tree.MenuLeft) : mouse_x_position;
  639.     HM_CurrentMenu.yIntended = HM_CurrentMenu.yPos = (HM_CurrentMenu.tree.MenuTop!=null)  ? eval(HM_CurrentMenu.tree.MenuTop)  : mouse_y_position;
  640.     if(HM_IE5M && !HM_CurrentMenu.sizeFixed) HM_CurrentMenu.fixSize(false);
  641.     HM_CurrentMenu.keepInWindow();
  642.     HM_CurrentMenu.moveTo(HM_CurrentMenu.xPos,HM_CurrentMenu.yPos);
  643.     HM_CurrentMenu.isOn = true;
  644.     HM_CurrentMenu.showIt(true);
  645.     return false;
  646. }
  647.  
  648. function HM_f_MenuOver() {
  649.     if(!this.tree.startChild){this.tree.startChild = this}
  650.     if(this.tree.startChild == this) HM_f_HideAll(this)
  651.     this.isOn = true;
  652.     HM_UserOverMenu = true;
  653.     HM_CurrentMenu = this;
  654.     if (this.hideTimer) clearTimeout(this.hideTimer);
  655. }
  656.  
  657. function HM_f_MenuOut() {
  658.     if(HM_IE && event.srcElement.contains(event.toElement)) return;
  659.     this.isOn = false;
  660.     HM_UserOverMenu = false;
  661.     if(HM_StatusDisplayLink) status = "";
  662.     if(!HM_ClickKill) {
  663.         clearTimeout(HM_HideAllTimer);
  664.         HM_HideAllTimer = null;
  665.         HM_HideAllTimer = setTimeout("HM_CurrentMenu.hideTree()",HM_ChildMilliSecondsVisible); 
  666.     }
  667. }
  668.  
  669. function HM_f_ShowChild(){
  670.     if(!this.child) {
  671.            HM_CurrentTree = this.tree;
  672.            HM_CurrentMenu = this.menu;
  673.            HM_CurrentItem = this;
  674.            HM_CurrentMenu.itemElement = this;
  675.            this.child = HM_f_MakeMenu(this.menu.count + "_"+(this.index+1));
  676.            this.tree.treeParent = this.menu;
  677.            this.tree.startChild = this.menu;
  678.     }
  679.     
  680.     if(HM_IE5M && !this.child.sizeFixed) this.child.fixSize(false);
  681.     if (this.tree.PositionUnder && (this.menu == this.tree.treeParent)) {
  682.         this.child.xPos = parseInt(this.menu.style.left) + parseInt(this.style.left);
  683.         this.child.yPos = parseInt(this.menu.style.top)  + this.menu.offsetHeight - (HM_BorderWidth);
  684.     }
  685.     else {
  686.         if(this.ChildOverlap==null) {
  687.             this.DistanceToRightEdge = parseInt(this.style.width);
  688.             if(!HM_IEnoDTD) this.DistanceToRightEdge += (parseInt(this.style.paddingLeft)+parseInt(this.style.paddingRight)) + ((this.menu.isHorizontal && !this.isLastItem) ? HM_SeparatorSize : 0); 
  689.             if (!this.menu.isHorizontal || (this.menu.isHorizontal && this.isLastItem)) this.DistanceToRightEdge += HM_BorderWidth;
  690.             this.DistanceToLeftEdge = (!this.menu.isHorizontal || (this.menu.isHorizontal && this.index==0)) ? HM_BorderWidth : HM_SeparatorSize;
  691.             this.ChildOverlap = (parseInt((HM_ChildPerCentOver != null) ? (HM_ChildPerCentOver  * this.DistanceToRightEdge) : HM_ChildOverlap));
  692.         }
  693.         if(HM_IE5M) {
  694.             this.oL = parseInt(this.menu.style.left) - HM_ItemPadding;
  695.             this.oL += this.offsetLeft;
  696.             this.oT = parseInt(this.menu.style.top) - HM_ItemPadding;
  697.             this.oT += this.offsetTop;
  698.         }
  699.         else {
  700.             this.oL = (HM_IEpos) ? parseInt(this.menu.style.left) + HM_BorderWidth : 0;
  701.             this.oL += this.offsetLeft;
  702.             this.oT = (HM_IEpos) ? parseInt(this.menu.style.top) : -HM_BorderWidth;
  703.             this.oT += this.offsetTop;
  704.         }
  705.         if(this.tree.RightToLeft) {
  706.             this.child.xPos = ((this.oL - this.DistanceToLeftEdge) + this.ChildOverlap) - this.child.offsetWidth;
  707.         }
  708.         else {        
  709.             this.child.xPos = (this.oL + this.DistanceToRightEdge) - this.ChildOverlap;
  710.         }
  711.         this.child.yPos = this.oT + HM_ChildOffset + HM_BorderWidth;
  712.     }
  713.     
  714.     this.child.xDiff = this.child.xPos - parseInt(this.menu.style.left);
  715.     this.child.yDiff = this.child.yPos - parseInt(this.menu.style.top);
  716.     if(!this.tree.PositionUnder || this.menu!=this.tree.treeParent) this.child.keepInWindow();
  717.     
  718.     this.child.moveTo(this.child.xPos,this.child.yPos);
  719.     this.menu.hasChildVisible = true;
  720.     this.menu.visibleChild = this.child;
  721.     this.child.showIt(true);
  722. }
  723.  
  724. function HM_f_ItemOver(){
  725.     if (HM_KeepHilite) {
  726.         if (this.menu.currentItem && this.menu.currentItem != this && this.menu.currentItem.hasRollover) {
  727.             with(this.menu.currentItem.style){
  728.                 backgroundColor = this.tree.BGColor;
  729.                 color = this.tree.FontColor
  730.             }
  731.             if(this.menu.currentItem.hasImageRollover)this.menu.currentItem.imgLyr.src = this.menu.currentItem.imageSrc;
  732.         }
  733.     }
  734.     if(HM_IE && event.srcElement.id == "HM_ImMore") return;
  735.     if(this.hasRollover) {
  736.         this.style.backgroundColor = this.tree.BGColorOver;
  737.         this.style.color = this.tree.FontColorOver;
  738.         if(this.hasImageRollover)this.imgLyr.src = this.imageSrcOver;
  739.     }
  740.  
  741.     if(HM_StatusDisplayLink) status = this.linkText;
  742.     this.menu.currentItem = this;
  743.  
  744.     if (this.menu.hasChildVisible) {
  745.         if(this.menu.visibleChild == this.child && this.menu.visibleChild.hasChildVisible) this.menu.visibleChild.hideChildren(this);
  746.         else this.menu.hideChildren(this);
  747.     }
  748.  
  749.     if (this.hasMore && !this.ClickStart) this.showChild();
  750. }
  751.  
  752. function HM_f_ItemOut() {
  753.     if (HM_IE && (event.srcElement.contains(event.toElement)
  754.       || (event.fromElement.tagName=="IMG" && (event.toElement && event.toElement.contains(event.fromElement)))))
  755.           return;
  756.     if ( (!HM_KeepHilite || ((this.tree.TopIsPermanent && (this.tree.treeParent==this)) && !this.menu.hasChildVisible)) && this.hasRollover) {
  757.         with(this.style) {
  758.             backgroundColor = this.tree.BGColor;
  759.             color = this.tree.FontColor
  760.         }
  761.         if(this.hasImageRollover)this.imgLyr.src = this.imageSrc;
  762.     }
  763. }
  764.  
  765. function HM_f_MoveTo(xPos,yPos) {
  766.     this.style.left = xPos + "px";
  767.     this.style.top = yPos + "px";
  768. }
  769.  
  770. function HM_f_ShowIt(on) {
  771.     if (!(this.tree.TopIsPermanent && (this.tree.treeParent==this))) {
  772.         if(!this.hasParent || (this.hasParent && this.tree.TopIsPermanent && (this.tree.treeParent==this.parentMenu))) {
  773.             var IsVisible = (this.style.visibility == "visible");
  774.             if ((on && !IsVisible) || (!on && IsVisible))
  775.                 eval(on ? this.tree.UponDisplay : this.tree.UponHide)
  776.         }
  777.         if (on) this.style.zIndex = ++HM_ZIndex;
  778.         this.style.visibility = (on) ? "visible" : "hidden";
  779.     }
  780.     if (HM_KeepHilite && this.currentItem && this.currentItem.hasRollover) {
  781.         with(this.currentItem.style){
  782.             backgroundColor = this.tree.BGColor;
  783.             color = this.tree.FontColor;
  784.         }
  785.         if(this.currentItem.hasImageRollover)this.currentItem.imgLyr.src = this.currentItem.imageSrc;
  786.     }
  787.     this.currentItem = null;
  788. }
  789.  
  790. function HM_f_KeepInWindow() {
  791.     var ExtraSpace     = 10;
  792.  
  793.     var WindowLeftEdge = (HM_IE) ? HM_IEcanvas.scrollLeft   : window.pageXOffset;
  794.     var WindowTopEdge  = (HM_IE) ? HM_IEcanvas.scrollTop    : window.pageYOffset;
  795.     var WindowWidth    = (HM_IE) ? HM_IEcanvas.clientWidth  : window.innerWidth;
  796.     var WindowHeight   = (HM_IE) ? HM_IEcanvas.clientHeight : window.innerHeight;
  797.     var WindowRightEdge  = (WindowLeftEdge + WindowWidth) - ExtraSpace;
  798.     var WindowBottomEdge = (WindowTopEdge + WindowHeight) - ExtraSpace;
  799.     var MenuLeftEdge = this.xPos;
  800.     var MenuRightEdge = MenuLeftEdge + this.offsetWidth;
  801.     var MenuBottomEdge = this.yPos + this.offsetHeight;
  802.  
  803.     if (this.hasParent) {
  804.         var ParentLeftEdge = this.parentItem.oL;
  805.     }
  806.     if (MenuRightEdge > WindowRightEdge) {
  807.         if (this.hasParent) {
  808.             this.xPos = ((ParentLeftEdge - this.parentItem.DistanceToLeftEdge) + this.parentItem.ChildOverlap) - this.offsetWidth;
  809.         }
  810.         else {
  811.             dif = MenuRightEdge - WindowRightEdge;
  812.             this.xPos -= dif;
  813.         }
  814.         this.xPos = Math.max(5,this.xPos);
  815.     }
  816.  
  817.     if (MenuBottomEdge > WindowBottomEdge) {
  818.         dif = MenuBottomEdge - WindowBottomEdge;
  819.         this.yPos -= dif;
  820.     }
  821.  
  822.     if (MenuLeftEdge < WindowLeftEdge) {
  823.         if (this.hasParent) {
  824.             this.xPos = (ParentLeftEdge + this.parentItem.DistanceToRightEdge) - this.parentItem.ChildOverlap;
  825.             MenuRightEdge = this.xPos + this.offsetWidth;
  826.             if(MenuRightEdge > WindowRightEdge) this.xPos -= (MenuRightEdge - WindowRightEdge);
  827.         }
  828.         else {this.xPos = 5}
  829.     }      
  830. }
  831.  
  832. function HM_f_LinkIt() {
  833.     if (this.linkText.indexOf("javascript:")!=-1) eval(this.linkText)
  834.     else {
  835.         HM_f_HideAll();
  836.         location.href = this.linkText;
  837.     }
  838. }
  839.  
  840. function HM_f_PopDown(menuname){
  841.     if (!HM_AreLoaded || !HM_AreCreated) return;
  842.     menuname = menuname.replace("elMenu",HM_MenuIDPrefix);
  843.     var MenuToHide = document.getElementById(menuname);
  844.     if(!MenuToHide)return;
  845.     MenuToHide.isOn = false;
  846.     if (!HM_ClickKill) MenuToHide.hideTop();
  847. }
  848.  
  849. function HM_f_HideAll(callingmenu) {
  850.     for(var i=0; i<HM_TotalTrees; i++) {
  851.         var TopMenu = HM_a_TopMenus[i].tree.startChild;
  852.         if(TopMenu == callingmenu)continue
  853.         TopMenu.isOn = false;
  854.         if (TopMenu.hasChildVisible) TopMenu.hideChildren();
  855.         TopMenu.showIt(false);
  856.     }    
  857. }
  858.  
  859. function HM_f_HideTree() { 
  860.     HM_HideAllTimer = null;
  861.     if (HM_UserOverMenu) return;
  862.     if (this.hasChildVisible) this.hideChildren();
  863.     this.hideParents();
  864. }
  865.  
  866. function HM_f_HideTop() {
  867.     TopMenuToHide = this;
  868.     (HM_ClickKill) ? TopMenuToHide.hideSelf() : (this.hideTimer = setTimeout("TopMenuToHide.hideSelf()",HM_TopMilliSecondsVisible));
  869. }
  870.  
  871. function HM_f_HideSelf() {
  872.     this.hideTimer = null;
  873.     if (!this.isOn && !HM_UserOverMenu) this.showIt(false);
  874. }
  875.  
  876. function HM_f_HideParents() {
  877.     var TempMenu = this;
  878.     while(TempMenu.hasParent) {
  879.         TempMenu.showIt(false);
  880.         TempMenu.parentMenu.isOn = false;        
  881.         TempMenu = TempMenu.parentMenu;
  882.     }
  883.     TempMenu.hideTop();
  884. }
  885.  
  886. function HM_f_HideChildren(callingitem) {
  887.     var TempMenu = this.visibleChild;
  888.     while(TempMenu.hasChildVisible) {
  889.         TempMenu.visibleChild.showIt(false);
  890.         TempMenu.hasChildVisible = false;
  891.         TempMenu = TempMenu.visibleChild;
  892.     }
  893.     if((callingitem && (!callingitem.hasMore || this.visibleChild != callingitem.child)) || (!callingitem && !this.isOn)) {
  894.         this.visibleChild.showIt(false);
  895.         this.hasChildVisible = false;
  896.     }
  897. }
  898.  
  899. function HM_f_CancelSelect(){return false}
  900.  
  901. function HM_f_PageClick() {
  902.     if (!HM_UserOverMenu && HM_CurrentMenu!=null && !HM_CurrentMenu.isOn) HM_f_HideAll();
  903. }
  904.  
  905. popUp = HM_f_PopUp;
  906. popDown = HM_f_PopDown;
  907.  
  908. function HM_f_ResizeHandler(){
  909.     var mouse_x_position, mouse_y_position;
  910.     for(var i=0; i<HM_TotalTrees; i++) {
  911.         var TopMenu = HM_a_TopMenus[i].tree.startChild;
  912.         if(TopMenu.style.visibility == "visible") {
  913.             TopMenu.oldLeft = TopMenu.xPos;
  914.             TopMenu.oldTop = TopMenu.yPos;
  915.             mouse_x_position = TopMenu.mouseX;
  916.             mouse_y_position = TopMenu.mouseY;
  917.             TopMenu.xPos = eval(TopMenu.tree.MenuLeft);
  918.             TopMenu.yPos = eval(TopMenu.tree.MenuTop);
  919.             if(TopMenu.xPos == null) TopMenu.xPos = TopMenu.xIntended;
  920.             if(TopMenu.yPos == null) TopMenu.yPos = TopMenu.yIntended;
  921.             if(!TopMenu.tree.TopIsPermanent) TopMenu.keepInWindow();
  922.             TopMenu.moveTo(TopMenu.xPos,TopMenu.yPos);
  923.             var TempMenu = TopMenu;
  924.             while(TempMenu.hasChildVisible) {
  925.                 TempParent = TempMenu;
  926.                 TempMenu = TempMenu.visibleChild;
  927.                 TempMenu.xPos = TempParent.xPos + TempMenu.xDiff;
  928.                 TempMenu.yPos = TempParent.yPos + TempMenu.yDiff;
  929.                 if(!TopMenu.tree.TopIsPermanent || (TopMenu.tree.TopIsPermanent && !TopMenu.tree.PositionUnder)) TempMenu.keepInWindow();
  930.                 TempMenu.moveTo(TempMenu.xPos,TempMenu.yPos);
  931.             }
  932.         }
  933.     }
  934.     HM_f_OtherResize();
  935. }
  936.  
  937. HM_f_OtherResize = (window.onresize) ? window.onresize :  new Function;
  938. window.onresize = HM_f_ResizeHandler;
  939.  
  940. HM_f_OtherOnLoad = (window.onload) ? window.onload :  new Function;
  941. window.onload = function(){setTimeout("HM_f_StartIt()",10)};
  942.  
  943. if(HM_IE) {
  944.     HM_f_OtherOnUnload = (window.onunload) ? window.onunload :  new Function;
  945.     window.onunload = function(){
  946.         HM_CurrentMenu = null;
  947.         HM_CurrentItem = null;
  948.         if(HM_CurrentTree != null) {
  949.             HM_CurrentTree.treeParent = null;
  950.             HM_CurrentTree.startChild = null;
  951.         }
  952.         var Eclength = HM_a_ElementsCreated.length;
  953.         for(var i=Eclength-1; i>=0; i--){
  954.             TempElement = HM_a_ElementsCreated[i];
  955.             TempElement.parentMenu = null;
  956.             TempElement.parentItem = null;
  957.             TempElement.itemElement = null;
  958.             TempElement.currentItem = null;
  959.             TempElement.child = null;
  960.             TempElement.siblingBelow = null;
  961.             TempElement.imgLyr = null;
  962.         }
  963.         TempElement = null;
  964.     
  965.         for(var i=0; i<HM_TotalTrees; i++) {
  966.             HM_a_TopMenus[i].tree.startChild = null;
  967.             HM_a_TopMenus[i].tree.treeParent = null;
  968.         }
  969.  
  970.         HM_f_OtherOnUnload();
  971.     }
  972. }
  973.  
  974.  
  975. //end