home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 October / Chip Ekim 2003.iso / prog / web / xtreeme / setup.exe / {app} / Scripts / menu_dom.js next >
Encoding:
Text File  |  2003-06-06  |  27.2 KB  |  1,026 lines

  1. // script generated by Xtreeme SiteXpert
  2. // sitemap and search engine creator
  3. // http://www.xtreeme.com/sitexpert
  4. // Copyright(C) 2001-2002 Xtreeme GmbH
  5.  
  6. // additional defines
  7. #ifdef MENU_TRANSPARENCY_EFFECT
  8. #define MENU_TRANSPARENCY_OR_DELAY_EFFECT
  9. #endif
  10.  
  11. #ifdef MENU_DELAY_EFFECT
  12. #define MENU_TRANSPARENCY_OR_DELAY_EFFECT
  13. #endif
  14.  
  15. #define makeTransparent f01
  16. #define showDelayed f02
  17. #define createMenuItem f03
  18. #define setRealWidth f04
  19. #define createPopupFromCode f05
  20. #define closePopup f06
  21. #define absToRel f07
  22. #define openPopup f08
  23. #define setPopupHeight f09
  24. #define scrollPopup f10
  25. #define isChildOfActivePopup f13
  26. #define onPopupOver f14
  27. #define onPopupOut f15
  28. #define getBrowserRect f17
  29. #define calcClientRect f18
  30. #define getClientRect f19
  31. #define onItemClick f20
  32. #define onNextScroll f21
  33. #define onItemOver f22
  34. #define onItemOut f23
  35. #define expandMenu exM
  36. #define collapseMenu coM
  37. #define onDocClick f28
  38. #define initializeMenu f29
  39. #define addNewEvent f30
  40. #define initializeAll f31
  41. #define errorTrap f32
  42. #define getAbsolutePath f33
  43. #define findElement zz
  44. #define removeHighlight f34
  45.  
  46. #define popupRightPad v01
  47. #define curPopupWidth v02
  48. #define expandArrowSrc v03
  49. #define ownerMenu v04
  50. #define highlightColor v05
  51. #define normalColor v06
  52. #define highlightBgColor v07
  53. #define normalBgColor v08
  54. #define levelAttribs v09
  55. #define popupOpenHeight v10
  56. #define bBitmapPopups v11
  57. #define arrayName v12
  58. #define arrayItem v13
  59. #define expandedWnd v14
  60. #define popupRect v15
  61. #define browserRect v16
  62. #define activePopup v17
  63. #define popupFrame v18
  64. #define sepFrame v19
  65. #define openSameFrame v20
  66. #define imgFolder v21
  67. #define popAlign v22
  68. #define popupWidth v23
  69. #define contentFrame v24
  70. #define bBitmapScheme v25
  71. #define itemText v26
  72. #define itemLink v27
  73. #define bottomImgHeight v28
  74. #define scrollTimeout v29
  75. #define popupArray v30
  76. #define popupHeight v31
  77. #define nmenu q
  78.  
  79. function findElement(e,i)
  80. {
  81.     return e?e.document.getElementById (i):document.getElementById (i);
  82. }
  83.  
  84. function getAbsolutePath(p)
  85. {
  86.     if(p&&p.indexOf(':/')==-1&&p.indexOf(':\\')==-1&&p.indexOf('/')!=0) return unescape(absPath)+p;
  87.     else return p;
  88.  
  89. }
  90.  
  91. function addLoadHandler(lh)
  92. {
  93.     if (!document.loadHandlers)
  94.     {
  95.         document.loadHandlers=new Array();
  96.         document.loadHandlers[0]=lh;
  97.         document.lastLoadHandler=0;
  98.     }
  99.     else
  100.     {
  101.         document.lastLoadHandler++;
  102.         document.loadHandlers[document.lastLoadHandler]=lh;
  103.     }
  104. }
  105. addLoadHandler ('initializeMenu');
  106. window.onload=initializeAll;
  107. function errorTrap(){return true;}
  108. window.onerror=errorTrap;
  109.  
  110. #ifdef MENU_FILTERS
  111. function getFilter (nmenu)
  112. {
  113.     if(!nmenu)return "";
  114.     if(nmenu.shs>0&&IE4) return "progid:DXImageTransform.Microsoft.Shadow(Color="+nmenu.shc+",direction=135,strength="+nmenu.shs+")";
  115.     else if(nmenu.shs<0&&IE4) return "progid:DXImageTransform.Microsoft.Glow(Color="+nmenu.shc+",strength="+(-nmenu.shs)+")";
  116. }
  117. #endif
  118.  
  119. #ifdef MENU_TRANSPARENCY_OR_DELAY_EFFECT
  120. function makeTransparent(op,opObj,vis,ns,ie,frc)
  121. {
  122.     if(op||frc)
  123.     {
  124.         if(ns)opObj.style.MozOpacity = vis?op+'%':'';
  125. #ifdef MENU_FILTERS
  126.         if(ie)opObj.style.filter=(vis?"alpha(opacity="+op+")":"")+" "+getFilter(opObj.nmenu);
  127. #else
  128.         if(ie)opObj.style.filter=vis?"alpha(opacity="+op+")":"";
  129. #endif
  130.     }
  131. }
  132. #endif
  133.  
  134. #ifdef MENU_DELAY_EFFECT
  135. function showDelayed(nmenu,objId,step)
  136. {
  137.     var obj=findElement(nmenu.popupFrame,objId);
  138.     var objBg=findElement(nmenu.popupFrame,objId+'bgWnd');
  139.     if(nmenu.showDelayedTimeout){nmenu.showDelayedTimeout=null;clearTimeout(nmenu.showDelayedTimeout);}
  140.     var max=nmenu.popupOpacity?nmenu.popupOpacity:100;
  141.     if(obj)makeTransparent((nmenu.fadingSteps-step)*max/nmenu.fadingSteps,obj,1,1,1,1);
  142.     if(objBg)makeTransparent(100,objBg,0,0,nmenu.bBitmapPopups,1);
  143.     if(step<=0)return;
  144.     setTimeout("showDelayed("+nmenu.name+",'"+objId+"',"+(step-1)+")", nmenu.bShowDel/nmenu.fadingSteps);
  145. }
  146. #endif
  147.  
  148. function createMenuItem(nmenu,popup,id,itemLink,itemText,popupArray,levelAttribs,bLast,popupHeight,parent)
  149. {
  150.     var itemType=0;
  151.  
  152. #ifdef MENU_SCROLL
  153.     if(itemText&&itemText.indexOf("(^1)")!=-1)itemType=1;
  154.     if(itemText&&itemText.indexOf("(^2)")!=-1)itemType=2;
  155. #endif
  156.  
  157.     var itemWnd=nmenu.popupFrame.document.createElement("DIV");
  158.     popup.appendChild(itemWnd);
  159.     if(mac)
  160.     {
  161.         var brWnd=nmenu.popupFrame.document.createElement("BR");
  162.         popup.appendChild(brWnd)
  163.     }
  164.     addNewEvent(itemWnd,"mouseover",onItemOver,false);
  165.     addNewEvent(itemWnd,"mouseout",onItemOut,false);
  166.     addNewEvent(itemWnd,"mousedown",onItemClick,false);
  167.     addNewEvent(itemWnd,"dblclick",onItemClick,false);
  168.     itemWnd.owner=popup;
  169.     itemWnd.id=id;
  170.     with (itemWnd.style)
  171.     {
  172.         position="absolute";
  173.         if(itemType==2)top=popupHeight-nmenu.scrollHeight;
  174.         else top=popupHeight;
  175.         if(itemLink){cursor=(!IE4||version>=6)?"pointer":"hand";}
  176.         else{cursor="default";}
  177.         color=levelAttribs [3];
  178.  
  179. #ifdef MENU_NO_BITMAP_POPUPS
  180.         if (!nmenu.bBitmapPopups)
  181.         {
  182.             if (!bLast)
  183.             {
  184.                 borderBottomColor=nmenu.borderCol;
  185.                 borderBottomWidth=nmenu.sep;
  186.                 borderBottomStyle="solid";
  187.             }
  188.         }
  189.         else
  190. #endif
  191.         left=nmenu.popupLeftPad+nmenu.vertSpace;
  192.         if (!itemType)padding=nmenu.vertSpace;
  193.         paddingLeft=nmenu.popupLeftPad+nmenu.vertSpace;
  194.         paddingRight=(nmenu.popupRightPad<nmenu.iconSize?nmenu.iconSize:nmenu.popupRightPad)+nmenu.vertSpace;
  195.         fontSize=levelAttribs[0];
  196.         fontWeight=(levelAttribs[1])?"bold":"normal";
  197.         fontStyle=(levelAttribs[2])?"italic":"normal";
  198.         fontFamily=levelAttribs[6];
  199.         textAlign=(nmenu.popAlign==1?'center':(nmenu.popAlign==2?'right':'left'));
  200.         setRealWidth(itemWnd,nmenu.bBitmapPopups?nmenu.curPopupWidth-nmenu.popupLeftPad-nmenu.popupRightPad-2*nmenu.vertSpace:nmenu.curPopupWidth,2*nmenu.bord);
  201.     }
  202.     if (popupArray)itemWnd.popupArray=popupArray;
  203.  
  204. #ifdef MENU_SCROLL
  205.     if(itemType>0)
  206.     {
  207.         var arrow=nmenu.popupFrame.document.createElement("IMG");
  208.         itemWnd.appendChild(arrow);
  209.         var arrowSrc=getAbsolutePath(nmenu.imgFolder);
  210.         arrow.src=arrowSrc+"/"+nmenu.fnm+"s"+((itemType==1)?"up":"down")+".gif";
  211.         itemWnd.style.textAlign="center";
  212.         itemWnd.style.display="none";
  213.     }
  214.     else
  215. #endif
  216.     itemWnd.innerHTML=itemText;
  217.     itemWnd.url=getAbsolutePath(itemLink);
  218.     itemWnd.dispText=itemText;
  219.     if (popupArray)
  220.     {
  221.         var expandArrow=nmenu.popupFrame.document.createElement("IMG");
  222.         itemWnd.appendChild(expandArrow);
  223.         var expandArrowSrc=getAbsolutePath(nmenu.imgFolder);
  224.         expandArrow.src=expandArrowSrc+"/"+nmenu.fnm+"ia.gif";
  225.         with (expandArrow.style)
  226.         {
  227.             width=nmenu.iconSize;
  228.             height=nmenu.iconSize;
  229.             position="absolute";
  230.             var itemRect=getClientRect(nmenu,itemWnd);
  231.             top=(itemRect.bottom-itemRect.top)/2-nmenu.iconSize/2-2;
  232.             left=itemWnd.offsetWidth-nmenu.iconSize-1;
  233.         }
  234.     }
  235.     return itemWnd.offsetHeight;
  236. }
  237.  
  238. function setRealWidth(wnd,width,borderWidth)
  239. {
  240.     wnd.style.width=width-borderWidth;
  241.     if (wnd.offsetWidth>width-borderWidth) wnd.style.width=width-parseInt(wnd.style.paddingLeft)-parseInt(wnd.style.paddingRight);
  242. }
  243.  
  244. function createPopupFromCode(nmenu,arrayName,level,ownerMenu)
  245. {
  246.     var popupName=arrayName+"popup";
  247.     var popup=findElement(nmenu.popupFrame,popupName);
  248.     if (popup)return popup;
  249.     var levelAttribs;
  250.     if(level>0)nmenu.curPopupWidth=nmenu.popupWidth;
  251.     if (level > nmenu.maxlev) {levelAttribs = eval ("nmenu.lev" + nmenu.maxlev) ;} else {levelAttribs = eval ("nmenu.lev" + level) ;}
  252.     popup=nmenu.popupFrame.document.createElement("DIV");
  253.     nmenu.popupFrame.document.body.appendChild(popup);
  254.     popup.id=popupName;
  255.     popup.ownerMenu=ownerMenu;
  256.     popup.level=level;
  257.     popup.highlightColor=levelAttribs[5];
  258.     popup.normalColor=levelAttribs[3];
  259.     popup.highlightBgColor=levelAttribs[7];
  260.     popup.normalBgColor=levelAttribs[4];
  261.     popup.scrVis=false;
  262.     with (popup.style)
  263.     {
  264.         zIndex=maxZ;
  265.         position="absolute";
  266.         width=nmenu.curPopupWidth;
  267.         if (!nmenu.bBitmapPopups)
  268.         {
  269.             borderColor=nmenu.borderCol;
  270.             backgroundColor=levelAttribs[4];
  271.             borderWidth=nmenu.bord;
  272.             borderStyle="solid";
  273.         }
  274.         else backgroundColor="";
  275. #ifdef MENU_FILTERS
  276.         filter=getFilter(nmenu);
  277. #endif
  278.     }
  279.     popup.nmenu=nmenu;
  280.     addNewEvent(popup,"mouseout",onPopupOut,false);
  281.     addNewEvent(popup,"mouseover",onPopupOver,false);
  282.  
  283.     var popupHeight=0;
  284.  
  285. #ifdef MENU_BITMAP_POPUPS
  286.     if (nmenu.bBitmapPopups)
  287.     {
  288.         var source=findElement(0,nmenu.name+'menubg4');
  289.         if (source)
  290.         {
  291.             var imel=nmenu.popupFrame.document.createElement("IMG");
  292.             popup.appendChild(imel);
  293.             imel.src=source.src;
  294.             imel.id=popup.id+"openingImg"
  295.             imel.style.position="absolute";
  296.             imel.style.top=0;
  297. #ifdef MENU_TRANSPARENCY_EFFECT
  298.             makeTransparent(nmenu.popupOpacity,imel,1,0,1,0);
  299. #endif
  300.             popupHeight+=nmenu.popupOpenHeight;
  301.         }
  302.     }
  303. #endif
  304.  
  305.     var bgWnd=nmenu.popupFrame.document.createElement("DIV");
  306.     popup.appendChild(bgWnd);
  307.     bgWnd.id=popup.id+"bgWnd";
  308.     bgWnd.style.position="absolute";
  309.     bgWnd.style.top=nmenu.popupOpenHeight;
  310.     bgWnd.style.width=nmenu.curPopupWidth-2*nmenu.bord;
  311.     bgWnd.innerHTML="<font size='1'> </font>";
  312.  
  313. #ifdef MENU_BITMAP_POPUPS
  314.     if (nmenu.bBitmapPopups)
  315.     {
  316.         var source=findElement(0,nmenu.name+'menubg5');
  317.         if (source) bgWnd.style.backgroundImage="url("+source.src+")";
  318.     }
  319. #else
  320.     if(0){}
  321. #endif
  322.  
  323. #ifdef MENU_NO_BITMAP_POPUPS
  324.     else
  325.     {
  326.         bgWnd.style.backgroundColor=levelAttribs[4];
  327.     }
  328. #endif
  329.  
  330.     var array=eval(arrayName);
  331.     var arrayItem;
  332.  
  333. #ifdef MENU_SCROLL
  334.     createMenuItem(nmenu,popup,popup.id+"scrollUp","javascript:scrollUp("+nmenu.name+",'"+popup.id+"');","(^1)",null,levelAttribs,true,popupHeight,bgWnd);
  335. #endif
  336.  
  337.     for(arrayItem=0;arrayItem<array.length/3;arrayItem++)
  338.     {
  339.         var popupArray=(array[arrayItem*3+2])?(arrayName+"_"+parseInt(arrayItem+1)):null;
  340.         popupHeight+=createMenuItem(nmenu,popup,null,array[arrayItem*3+1],array[arrayItem*3],popupArray,levelAttribs,(arrayItem == array.length/3-1),popupHeight,bgWnd);
  341.     }
  342.  
  343. #ifdef MENU_SCROLL
  344.     createMenuItem(nmenu,popup,popup.id+"scrollDown","javascript:scrollDown("+nmenu.name+",'"+popup.id+"');","(^2)",null,levelAttribs,true,popupHeight,bgWnd);
  345. #endif
  346.  
  347.     var bottomImgHeight=0;
  348.  
  349. #ifdef MENU_BITMAP_POPUPS
  350.     if (nmenu.bBitmapPopups)
  351.     {
  352.         var source=findElement(0,nmenu.name+'menubg6');
  353.         if (source)
  354.         {
  355.             var imel=nmenu.popupFrame.document.createElement("IMG");
  356.             popup.appendChild(imel);
  357.             imel.src=source.src;
  358.             imel.id=popup.id+"closingImg";
  359.             imel.style.position="absolute";
  360.             imel.style.top=popupHeight-1;
  361.  
  362. #ifdef MENU_TRANSPARENCY_EFFECT
  363.             makeTransparent(nmenu.popupOpacity,imel,1,0,1,0);
  364. #endif
  365.  
  366.             bottomImgHeight=imel.offsetHeight;
  367.             popupHeight+=bottomImgHeight;
  368.         }
  369.     }
  370. #endif
  371.  
  372.     popup.style.height=popupHeight+nmenu.bord*2+bottomImgHeight;
  373.     popup.maxHeight=popupHeight+nmenu.bord*2;
  374.     bgWnd.style.height=popupHeight-nmenu.popupOpenHeight-bottomImgHeight;
  375.  
  376. #ifdef MENU_TRANSPARENCY_EFFECT
  377.     makeTransparent(nmenu.popupOpacity,bgWnd,1,0,nmenu.bBitmapPopups,0);
  378.     makeTransparent(nmenu.popupOpacity,popup,1,1,!nmenu.bBitmapPopups,0);
  379. #endif
  380.  
  381.     if(popup.offsetHeight>popupHeight+nmenu.bord*2+bottomImgHeight){popup.style.height=popupHeight;nmenu.bIncBorder=false;popup.maxHeight=popupHeight;}
  382.     return popup;
  383. }
  384.  
  385. function closePopup(nmenu,popupId,dl)
  386. {
  387.     if(popupId.indexOf('_')==-1)
  388.     {
  389.         var hideWnd=findElement(nmenu.popupFrame,'HideItem');
  390.         if(hideWnd)hideWnd.style.visibility='visible';
  391.         if (nmenu.actm&&dl) chgBg (nmenu, nmenu.actm, 0, 1);
  392.     }
  393. #ifdef MENU_SCROLL
  394.     if(nmenu.scrollTimeout){nmenu.scrollTimeoutStr=null;clearTimeout(nmenu.scrollTimeout);}
  395. #endif
  396.     var popup=findElement(nmenu.popupFrame,popupId);
  397.     if(popup)
  398.     {
  399.         if(popup.expandedWnd)closePopup(nmenu,popup.expandedWnd.id);
  400.         if(popup.ownerMenu)popup.ownerMenu.expandedWnd=null;
  401.         popup.style.visibility="hidden";
  402.         popup.style.display="none";
  403.     }
  404.     if(nmenu.activePopup&&nmenu.activePopup.id==popupId)nmenu.activePopup=null;
  405. }
  406.  
  407. function absToRel(rect,refx,refy)
  408. {
  409.     var retval=new rct(rect.left-refx,rect.top-refy,rect.right-refx,rect.bottom-refy);
  410.     return retval;
  411. }
  412.  
  413. function removeHighlight (popup,actEl)
  414. {
  415.     var items=popup.getElementsByTagName("DIV");
  416.     var i=0;
  417.     for (;i<items.length;i++)if(actEl!=items[i]&&(!items[i].id||items[i].id.indexOf("scroll")==-1))
  418.     {
  419.         items[i].style.backgroundColor=popup.nmenu.bBitmapPopups?"transparent":popup.normalBgColor;
  420.         items[i].style.color=popup.normalColor;
  421.     }
  422. }
  423.  
  424. function openPopup(nmenu,popup,x,y,bDontMove,refWnd)
  425. {
  426.     if(popup.id.indexOf('_')==-1){var hideWnd=findElement(nmenu.popupFrame,'HideItem');if(hideWnd)hideWnd.style.visibility='hidden';}
  427.     if(nmenu.activePopup&&nmenu.activePopup.id==popup.id)return;
  428.     popup.style.left=x;
  429.     popup.style.top=y;
  430.     popup.style.display="";
  431.     popup.style.visibility="visible";
  432.  
  433. #ifdef MENU_ENABLE_REVERSED_POPUPS
  434.     if(nmenu.rev)
  435.     {
  436.         if(nmenu.menuHorizontal)
  437.         {
  438.             if (popup.id.indexOf('_')==-1) popup.style.top=y-popup.offsetHeight;
  439.         }
  440.         else
  441.         {
  442.             popup.style.left=x-popup.offsetWidth;
  443.         }
  444.     }
  445. #endif
  446.  
  447.     var popupRect=getClientRect(nmenu,popup);
  448.     var browserRect=getBrowserRect(nmenu.popupFrame);
  449.     var bResize=(popup.offsetHeight<popup.maxHeight);
  450.  
  451.     if (popupRect.right>browserRect.right)
  452.     {
  453.         if(refWnd&&refWnd.id&&refWnd.id.indexOf('top')==-1)popup.style.left=Math.max(0,refWnd.offsetLeft-popup.offsetWidth+nmenu.levelOffset);
  454.         else popup.style.left=browserRect.right-popup.offsetWidth-5;
  455.     }
  456.  
  457. #ifdef MENU_SCROLL
  458.     var wnd1=findElement(nmenu.popupFrame,popup.id+"scrollDown");
  459.     var wnd2=findElement(nmenu.popupFrame,popup.id+"scrollUp");
  460. #endif
  461.  
  462.     var cv=mac?15:(nmenu.bIncBorder?3:20);
  463.     if (((popupRect.bottom>browserRect.bottom)||bResize)&&!NS60)
  464.     {
  465.         var newtop=browserRect.bottom-popup.offsetHeight-cv;
  466.         if(!nmenu.menuHorizontal)bDontMove=false;
  467. #ifdef MENU_SCROLL
  468.         if (newtop<0||bDontMove||bResize)
  469.         {
  470. #ifdef MENU_SEPARATE_FRAME
  471.             if(nmenu.sepFrame&&!nmenu.openSameFrame&&nmenu.menuPos==3)popup.style.top=Math.max(browserRect.top,newtop);
  472. #endif
  473.             var minNum=Math.min(popup.maxHeight,browserRect.bottom-popup.offsetTop-cv-(nmenu.bIncBorder?0:nmenu.bord*2));
  474.             popup.scrVis=(minNum!=popup.maxHeight);
  475.             setPopupHeight(nmenu,popup,browserRect.top,minNum);
  476.         }
  477.         else
  478. #endif
  479.         popup.style.top=newtop;
  480.     }
  481.  
  482. #ifdef MENU_SCROLL
  483.     wnd1.style.display=popup.scrVis?"":"none";
  484.     wnd2.style.display=popup.scrVis?"":"none";
  485. #endif
  486.  
  487. #ifdef MENU_DELAY_EFFECT
  488.     if(nmenu.bShowDel&&!mac)showDelayed(nmenu,popup.id,nmenu.fadingSteps);
  489. #endif
  490.  
  491.     removeHighlight (popup,null);
  492. }
  493.  
  494. function setPopupHeight(nmenu,popup,documentOffset,height)
  495. {
  496.  
  497. #ifdef MENU_SCROLL
  498.     var wnd2=findElement(nmenu.popupFrame,popup.id+"scrollDown");
  499.     var wnd4=findElement(nmenu.popupFrame,popup.id+"scrollUp");
  500. #endif
  501.  
  502.     var wnd3=findElement(nmenu.popupFrame,popup.id+"bgWnd");
  503.     var wnd1Height=0;
  504.  
  505. #ifdef MENU_BITMAP_POPUPS
  506.     if(nmenu.bBitmapPopups)
  507.     {
  508.         var wnd1=findElement(nmenu.popupFrame,popup.id+"closingImg");
  509.         var wnd5=findElement(nmenu.popupFrame,popup.id+"openingImg");
  510.         wnd1Height=wnd1.offsetHeight;
  511.         wnd1.style.top=height-1-wnd1Height;
  512.     }
  513. #endif
  514.  
  515. #ifdef MENU_SCROLL
  516.     wnd2.style.zIndex=maxZ+1;
  517.     wnd4.style.zIndex=maxZ+1;
  518. #endif
  519.  
  520.     popup.style.height=height;
  521.     wnd3.style.height=height-nmenu.popupOpenHeight-nmenu.bord*2-wnd1Height;
  522.  
  523. #ifdef MENU_SCROLL
  524.     wnd2.style.top=height-wnd1Height-nmenu.scrollHeight-(nmenu.bIncBorder?nmenu.bord*2:0);
  525.     scrollPopup(nmenu,popup.id,0);
  526. #endif
  527. }
  528.  
  529. #ifdef MENU_SCROLL
  530. function scrollPopup(nmenu,popupId,dir)
  531. {
  532.     var popup=findElement(nmenu.popupFrame,popupId);
  533.     var popupRect=getClientRect(nmenu,popup);
  534.     var items=popup.getElementsByTagName("DIV");
  535.     var i=(dir>0?0:items.length-1);
  536.     var off=(dir>0?1:-1);
  537.     var bFirst=true;
  538.     var offset=dir*nmenu.scrollStep;
  539.     if(popup.scrVis)
  540.     {
  541.         popupRect.top+=nmenu.scrollHeight;
  542.         popupRect.bottom-=nmenu.scrollHeight;
  543.     }
  544.     popupRect.bottom-=2*nmenu.bord;
  545.     var wnd1Height=0;
  546. #ifdef MENU_BITMAP_POPUPS
  547.     if(nmenu.bBitmapPopups)wnd1Height=findElement(nmenu.popupFrame,popup.id+"closingImg").offsetHeight;
  548. #endif
  549.     for (;i<items.length&&i>=0;i+=off)
  550.     {
  551.         var item=items[i];
  552.         if (!item.id||(item.id.indexOf("scroll")==-1&&item.id.indexOf("bgWnd")==-1))
  553.         {
  554.             var itemRect=getClientRect(nmenu,item);
  555.             if(bFirst&&dir==0){offset=popup.maxHeight-(item.offsetTop+item.offsetHeight)+(popup.scrVis?nmenu.scrollHeight:0)-(nmenu.bIncBorder?nmenu.bord*2:0)-wnd1Height;}
  556.             var relRect=absToRel(popupRect,itemRect.left,itemRect.top+offset);
  557.             if (dir>0 && relRect.top<-nmenu.scrollHeight && bFirst) return;
  558.             if (dir<0 && itemRect.bottom+offset<popupRect.bottom-nmenu.scrollHeight-wnd1Height && bFirst) return;
  559.             if(offset!=0)item.style.top=item.offsetTop+offset;
  560.             if(!mac)item.style.clip="rect("+relRect.top+","+relRect.right+","+relRect.bottom+","+relRect.left+")";
  561.             if (relRect.bottom<0||relRect.top>item.offsetHeight)
  562.                 item.style.visibility="hidden";
  563.             else
  564.                 item.style.visibility="visible";
  565.             bFirst=false;
  566.         }
  567.     }
  568.     if(popup.scrPos)popup.scrPos+=offset;
  569.     else popup.scrPos=offset;
  570. }
  571.  
  572. function scrollUp(nmenu,popupId)
  573. {
  574.     scrollPopup(nmenu,popupId,1);
  575. }
  576.  
  577. function scrollDown(nmenu,popupId)
  578. {
  579.     scrollPopup(nmenu,popupId,-1);
  580. }
  581. #endif
  582.  
  583. function isChildOfActivePopup(nmenu,popup)
  584. {
  585.     var wnd=nmenu.activePopup;
  586.     while(wnd)
  587.     {
  588.         if (wnd.id==popup.id)
  589.             return true;
  590.         wnd=wnd.expandedWnd;
  591.     }
  592.     return false;
  593. }
  594.  
  595. function onPopupOver()
  596. {
  597.     var nmenu=this.nmenu;
  598.     if (nmenu.activePopup&&nmenu.activePopupTimeout&&isChildOfActivePopup (nmenu,this))clearTimeout(nmenu.activePopupTimeout);
  599. }
  600.  
  601. function onPopupOut()
  602. {
  603.     var nmenu=this.nmenu;
  604.     onPopupOutImpl(nmenu,this);
  605. }
  606.  
  607. function onPopupOutImpl(nmenu,popup)
  608. {
  609.     if(nmenu.mout&&nmenu.activePopup&&isChildOfActivePopup(nmenu,popup))
  610.     {
  611.         if(nmenu.activePopupTimeout)clearTimeout(nmenu.activePopupTimeout);
  612.         nmenu.activePopupTimeout=setTimeout("closePopup("+nmenu.name+",'"+nmenu.activePopup.id+"',1);",nmenu.closeDelay);
  613.     }
  614. }
  615.  
  616. function rct(left,top,right,bottom)
  617. {
  618.     this.left=left;
  619.     this.top=top;
  620.     this.right=right;
  621.     this.bottom=bottom;
  622. }
  623.  
  624. function getBrowserRect(doc)
  625. {
  626.     var left=0;
  627.     var top=0;
  628.     var right;
  629.     var bottom;
  630.     if(doc.pageXOffset)left=doc.pageXOffset;
  631.     else if(doc.document.body.scrollLeft)left=doc.document.body.scrollLeft;
  632.     if(doc.pageYOffset)top=doc.pageYOffset;
  633.     else if(doc.document.body.scrollTop)top=doc.document.body.scrollTop;
  634.     if(doc.innerWidth)right=left+doc.innerWidth;
  635.     else if(doc.document.body.clientWidth)right=left+doc.document.body.clientWidth;
  636.     if(doc.innerHeight)bottom=top+doc.innerHeight;
  637.     else if(doc.document.body.clientHeight)bottom=top+doc.document.body.clientHeight;
  638.     var retval=new rct(left,top,right,bottom);
  639.     return retval;    
  640. }
  641.  
  642. function calcClientRect(nmenu,wnd)
  643. {
  644.     var left=mac?parseInt(document.body.leftMargin):0;
  645.     var top=mac?parseInt(document.body.topMargin):0;
  646.     var right=0;
  647.     var bottom=0;
  648.     var par=wnd;
  649.     while (par)
  650.     {
  651.         left=left+parseInt(par.offsetLeft);
  652.         top=top+parseInt(par.offsetTop);
  653.         if (par.offsetParent==par || par.offsetParent==nmenu.popupFrame.document.body) break;
  654.         par=par.offsetParent;
  655.     }
  656.     right=left+parseInt(wnd.offsetWidth);
  657.     bottom=top+parseInt(wnd.offsetHeight);
  658.     var retval=new rct(left,top,right,bottom);
  659.     return retval;
  660. }
  661.  
  662. function getClientRect(nmenu,wnd)
  663. {
  664.     if ((mac||DOM||Opera7)&&wnd.getBoundingClientRect) return wnd.getBoundingClientRect ();
  665.     return calcClientRect(nmenu,wnd);
  666. }
  667.  
  668. function findFr(wn,fr)
  669. {
  670.     if(wn.frames)
  671.     {
  672.         for(var i=0;i<wn.frames.length;i++)
  673.         {
  674.             if(wn.frames[i].name==fr)return wn.frames[i];
  675.             var ret=findFr(wn.frames[i],fr);
  676.             if(ret)return ret;
  677.         }
  678.     }
  679.     return null;
  680. }
  681.  
  682. function onItemClick()
  683. {
  684.     var item=this;
  685.     var close=true;
  686.     var nmenu=this.owner.nmenu;
  687.     if (item.url)
  688.     {
  689.         var trgFrame=nmenu.cntFrame;
  690.         var startPos=item.dispText.indexOf('<!--');
  691.         if (startPos!=-1)
  692.         {
  693.             var endPos = item.dispText.indexOf('-->',startPos);
  694.             trgFrame = item.dispText.substring (startPos+4,endPos);
  695.         }
  696.         if(trgFrame)
  697.         {
  698.             if (trgFrame=="_blank") window.open (item.url);
  699.             else if (trgFrame=="_top") window.top.location.href=item.url;
  700.             else if (trgFrame.indexOf('_')==0) parent.location.href=item.url;
  701.             else
  702.             {
  703.                 var fr=findFr(window.top,trgFrame);
  704.                 if(fr)fr.location.href=item.url;
  705.                 else window.location.href=item.url;
  706.             }
  707.         }
  708.         else
  709.         {
  710.             var find=item.url.indexOf("javascript:");
  711.             if (find!=-1)
  712.             {
  713.                 eval(item.url.substring(find));
  714. #ifdef MENU_SCROLL
  715.                 if(item.url.indexOf("scroll")!=-1) close=false;
  716. #endif
  717.             }
  718.             else
  719.             {
  720.                 var mt=item.url.indexOf("mailto:");
  721.                 if(mt!=-1)window.top.location=item.url.substring(mt);
  722.                 else nmenu.targetFrame.location=item.url;
  723.             }
  724.         }
  725.         if(nmenu.activePopup&&close)closePopup(nmenu,nmenu.activePopup.id,1);
  726.     }
  727. }
  728.  
  729. #ifdef MENU_SCROLL
  730. function onNextScroll(nmenu)
  731. {
  732.     if(nmenu.scrollTimeoutStr)
  733.     {
  734.         eval(nmenu.scrollTimeoutStr);
  735.         if(nmenu.scrollTimeout)clearTimeout(nmenu.scrollTimeout);
  736.         nmenu.scrollTimeout=setTimeout("onNextScroll("+nmenu.name+")",nmenu.scrollDelay);
  737.     }
  738. }
  739. #endif
  740.  
  741. function onItemOver()
  742. {
  743.     var item=this;
  744.     var nmenu=this.owner.nmenu;
  745.  
  746.     var bOp=0;
  747.  
  748. #ifdef MENU_SCROLL
  749.     if (item.id&&item.id.indexOf("scroll")!=-1)
  750.     {
  751.         nmenu.scrollTimeoutStr=item.url;
  752.         var jsind=nmenu.scrollTimeoutStr.indexOf('javascript:');
  753.         if(jsind!=-1)nmenu.scrollTimeoutStr=nmenu.scrollTimeoutStr.substring(jsind);
  754.         onNextScroll(nmenu);
  755.         return;
  756.     }
  757. #endif
  758.  
  759.     if (item.owner.expandedWnd)
  760.     {
  761.         if(item.popupArray&&item.popupArray+'popup'==item.owner.expandedWnd.id)bOp=1;
  762.         if(!bOp)closePopup(nmenu,item.owner.expandedWnd.id);
  763.     }
  764.     if (item.url&&item.url.indexOf("javascript:")==-1)
  765.         window.status=item.url;
  766.     else
  767.         window.status="";
  768. #ifdef MENU_TRANSPARENCY_EFFECT
  769.     makeTransparent(nmenu.popupOpacity,item,1,0,nmenu.bBitmapPopups,0);
  770. #endif
  771.  
  772.     removeHighlight (item.owner,item);
  773.  
  774.     item.style.color=item.owner.highlightColor;
  775.     item.style.backgroundColor=item.owner.highlightBgColor;
  776.  
  777.     if (item.popupArray&&!bOp)
  778.     {
  779.         var rect=getClientRect(nmenu,item);
  780.         var x=rect.right-nmenu.levelOffset;
  781.         var y=rect.top;
  782.         var popup=createPopupFromCode(nmenu,item.popupArray,item.owner.level+1,item.owner);
  783.         item.owner.expandedWnd=popup;
  784.  
  785. #ifdef MENU_ENABLE_REVERSED_POPUPS
  786.         if(nmenu.rev)
  787.         {
  788.             if(!nmenu.menuHorizontal)
  789.             {
  790.                 x-=nmenu.curPopupWidth-nmenu.levelOffset;
  791.             }
  792.         }
  793. #endif
  794.  
  795.         openPopup(nmenu,popup,x,y+2,false,item.owner);
  796.     }
  797. }
  798.  
  799. function onItemOut()
  800. {
  801.     var item=this;
  802.     var nmenu=this.owner.nmenu;
  803. #ifdef MENU_SCROLL
  804.     if(nmenu.scrollTimeout){nmenu.scrollTimeoutStr=null;clearTimeout(nmenu.scrollTimeout);}
  805. #endif
  806.  
  807. #ifdef MENU_TRANSPARENCY_EFFECT
  808.     makeTransparent(nmenu.popupOpacity,item,0,0,nmenu.bBitmapPopups,0);
  809. #endif
  810.  
  811. #ifdef MENU_SCROLL
  812.     if (item.id&&item.id.indexOf("scroll")!=-1) return;
  813. #endif
  814.  
  815.     window.status="";
  816. }
  817.  
  818. function expandMenu(nmenu,popupId,refWnd,dum,ml,mt,mr,mb)
  819. {
  820.     if(!docLoaded)return;
  821.     if(nmenu.activePopupTimeout)clearTimeout(nmenu.activePopupTimeout);
  822.     if (nmenu.activePopup&&nmenu.activePopup.id!=popupId+"popup")
  823.         closePopup(nmenu,nmenu.activePopup.id);
  824.     if(popupId=='none')return;
  825.     var rect;
  826.     if(refWnd=='coords')
  827.     {
  828.         rect=calcClientRect(nmenu,findElement(0,nmenu.name+'tl'));
  829.         rect.left=rect.left+ml;
  830.         rect.top=rect.top+mt;
  831.         rect.right=rect.left+mr;
  832.         rect.bottom=rect.top+mb;
  833.     }
  834.     else
  835.     {
  836.         rect=calcClientRect(nmenu,findElement(0,refWnd));
  837.     }
  838.     if(nmenu.bVarWidth&&!nmenu.bBitmapPopups)nmenu.curPopupWidth=rect.right-rect.left+(IE4?nmenu.bord*2:0);
  839.     var x;
  840.     var y;
  841.  
  842. #ifndef MENU_ENABLE_REVERSED_POPUPS
  843.  
  844. #ifdef MENU_HORIZONTAL
  845. #ifdef MENU_VERTICAL
  846.     if(nmenu.menuHorizontal)
  847.     {
  848.         x=rect.left-nmenu.bord;
  849.         y=rect.bottom+nmenu.popupOffset;
  850.     }
  851.     else
  852.     {
  853.         x=rect.right+nmenu.popupOffset;
  854.         y=rect.top-nmenu.bord;
  855.     }
  856. #endif
  857. #endif
  858.  
  859. #ifdef MENU_HORIZONTAL
  860. #ifndef MENU_VERTICAL
  861.         x=rect.left-nmenu.bord;
  862.         y=rect.bottom+nmenu.popupOffset;
  863. #endif
  864. #endif
  865.  
  866. #ifndef MENU_HORIZONTAL
  867. #ifdef MENU_VERTICAL
  868.         x=rect.right+nmenu.popupOffset;
  869.         y=rect.top-nmenu.bord;
  870. #endif
  871. #endif
  872.  
  873. #else
  874.  
  875.     if(nmenu.menuHorizontal)
  876.     {
  877.         x=rect.left-nmenu.bord;
  878.         y=nmenu.rev?rect.top-nmenu.popupOffset:rect.bottom+nmenu.popupOffset;
  879.     }
  880.     else
  881.     {
  882.         x=nmenu.rev?rect.left-nmenu.popupOffset:rect.right+nmenu.popupOffset;
  883.         y=rect.top-nmenu.bord;
  884.     }
  885.  
  886. #endif
  887.  
  888. #ifdef MENU_SEPARATE_FRAME
  889.     if(nmenu.sepFrame&&!nmenu.openSameFrame)
  890.     {
  891.         var brRect=getBrowserRect(nmenu.popupFrame);
  892.         var wRect=getBrowserRect(window);
  893.         switch (nmenu.menuPos)
  894.         {
  895.         case 0:
  896.             x=brRect.left+nmenu.popupOffset;
  897.             y+=brRect.top-wRect.top;
  898.             break;
  899.         case 1:
  900.             x=brRect.right-nmenu.popupOffset;
  901.             y+=brRect.top-wRect.top;
  902.             break;
  903.         case 2:
  904.             x+=brRect.left-wRect.left;
  905.             y=brRect.top+nmenu.popupOffset;
  906.             break;
  907.         case 3:
  908.             x+=brRect.left-wRect.left;
  909.             y=brRect.bottom-nmenu.popupOffset;
  910.             break;
  911.         }
  912.     }
  913. #endif
  914.  
  915.     var popup=createPopupFromCode(nmenu,popupId,0,null);
  916.     openPopup(nmenu,popup,x+nmenu.xOff,y+nmenu.yOff,true,null);
  917.     nmenu.activePopup=popup;
  918. }
  919.  
  920. function collapseMenu(nmenu,popupId)
  921. {
  922.     if(!docLoaded)return;
  923.     var popup=findElement(nmenu.popupFrame,popupId+"popup");
  924.     if(popup)onPopupOutImpl(nmenu,popup);
  925. }
  926.  
  927. function expandMenuNS(nmenu,popupId,e,dItem)
  928. {
  929. }
  930.  
  931. function collapseMenuNS(nmenu,popupId)
  932. {
  933. }
  934.  
  935. function onDocClick()
  936. {
  937.     var nmn;
  938.     for(nmn=1;nmn<=lastm;nmn++)
  939.     {
  940.         var nmenu=eval("window.m"+nmn);
  941.         if(nmenu&&nmenu.activePopup)closePopup(nmenu,nmenu.activePopup.id,1);
  942.     }
  943. }
  944.  
  945. function initializeMenu()
  946. {
  947.     if(docLoaded)return;
  948.     var nmn;
  949.     for(nmn=1;nmn<=lastm;nmn++)
  950.     {
  951.         var nmenu=eval("window.m"+nmn);
  952.         if(nmenu)
  953.         {
  954.             nmenu.popupFrame=(nmenu.sepFrame&&!nmenu.openSameFrame)?findFr(window.top,nmenu.contentFrame):window;
  955.             nmenu.targetFrame=(nmenu.sepFrame)?findFr(window.top,nmenu.cntFrame):window;
  956.             if(!nmenu.mout)addNewEvent(nmenu.popupFrame.document,"mousedown",onDocClick,false);
  957. #ifdef MENU_DYNAMIC_ARROWS
  958.             if(nmenu.rm>=0)
  959.             {
  960.                 var images=document.getElementsByTagName('img');
  961.                 for(im=0;im<images.length;im++)
  962.                 {
  963.                     var curim=images[im];
  964.                     if(curim.id.indexOf('hidim'+nmn)!=-1)
  965.                     {
  966.                         var newar=document.createElement('img');
  967.                         document.body.appendChild(newar);
  968.                         var itemRect=getClientRect(nmenu,curim.parentElement?curim.parentElement.parentElement.parentElement:curim.parentNode.parentNode.parentNode);
  969.                         var curimRect=getClientRect(nmenu,curim);
  970.                         newar.style.position="absolute";
  971.                         newar.style.top=curimRect.top;
  972.                         newar.style.left=itemRect.right-nmenu.iconSize-2-nmenu.rm;
  973.                         newar.width=nmenu.iconSize;
  974.                         newar.height=nmenu.iconSize;
  975.                         var expandArrowSrc=getAbsolutePath(nmenu.imgFolder);
  976.                         newar.src=expandArrowSrc+"/"+nmenu.fnm+"ia.gif";
  977.                     }
  978.                 }
  979.             }
  980. #endif
  981.         }
  982.     }
  983.  
  984.     docLoaded=true;
  985. }
  986.  
  987. function addNewEvent(obj,event,fun,bubble)
  988. {
  989.     if (obj.addEventListener)
  990.         obj.addEventListener(event,fun,bubble);
  991.     else
  992.         eval("obj.on"+event+"="+fun);
  993. }
  994.  
  995. function chgBg(nmenu,item,color,cl)
  996. {
  997.     if (!IE4&&!DOM&&!Opera7)return;
  998.     var el=findElement(0,item);
  999.     var ela=findElement(0,item+'a');
  1000.     if (color==0)
  1001.     {
  1002.         if (cl)
  1003.         {
  1004.             if(!nmenu.bBitmapScheme)el.style.background=nmenu.tlmOrigBg;
  1005.             if(ela)ela.style.color=nmenu.tlmOrigCol;
  1006.             el.style.color=nmenu.tlmOrigCol;
  1007.         }
  1008.     }
  1009.     else
  1010.     {
  1011.         if(nmenu.actm) chgBg (nmenu, nmenu.actm, 0, 1);
  1012.         if(!nmenu.bBitmapScheme&&(color&1))el.style.background=nmenu.tlmHlBg;
  1013.         if(ela&&color&2)ela.style.color=nmenu.tlmHlCol;
  1014.         el.style.color=nmenu.tlmHlCol;
  1015.         nmenu.actm = item;
  1016.     }
  1017. }
  1018.  
  1019. function initializeAll()
  1020. {
  1021.     var i;
  1022.     for(i=0;i<=document.lastLoadHandler;i++)
  1023.     {
  1024.         eval(document.loadHandlers[i]+'();');
  1025.     }
  1026. }