home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 August / Chip_2004-08_cd2.bin / avid_dvfree / info / limit_soubory / menu.js < prev    next >
Text File  |  2004-06-17  |  13KB  |  500 lines

  1. var menuStack = new Array();
  2. var hiddenElmStack = new Array();
  3. var currentMenu = null;
  4. var closeMenusDelay = null;
  5. var openMenusDelay = null;
  6. var delayTime = 75;                    // ms for menu open delay
  7.  
  8. function eraseTimeout(tId) {
  9.     //if (tId != null)
  10.     window.clearTimeout(tId);
  11.     return null;
  12. }
  13.  
  14. function tbButtonMouseOverOrig(id){
  15.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  16.     var menuName = id.replace(/Handle/i,'Menu');
  17.     var menu = getLayer(menuName);
  18.     //if (menu) menu.className = 'tbButtonMouseOverUp';
  19.     if (currentMenu){
  20.         closeAllMenus();
  21.     }
  22.     popupMenu(id, menu);
  23. }
  24. function tbButtonMouseOver(id){
  25.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  26.     if (openMenusDelay == null){
  27.         openMenusDelay = window.setTimeout("showMenu('"+id+"')", delayTime);
  28.     }
  29. }
  30. function showMenu(id){
  31.     openMenusDelay = eraseTimeout(openMenusDelay);
  32.     var menuName = id.replace(/Handle/i,'Menu');
  33.     var menu = getLayer(menuName);
  34.     //if (menu) menu.className = 'tbButtonMouseOverUp';
  35.     if (currentMenu){
  36.         closeAllMenus();
  37.     }
  38.     popupMenu(id, menu);
  39. }
  40.  
  41. function showSubMenu(id){
  42.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  43.     var menuName = id.replace(/Handle/i,'Menu');
  44.     var menu = getLayer(menuName);
  45. //    if (currentMenu){
  46. //        closeMenus();
  47. //    }
  48. //    popupMenu(id, menu);
  49.     popupSubMenu(id, menu);
  50. }
  51.  
  52. function popupMenu(handleID, menu){
  53.     if (menu){
  54.         var menuHandle = getLayer(handleID);
  55.         var p=menuHandle;
  56.         var top = p.offsetHeight, left = 0;
  57.         top = 81;
  58.         while(p&&p.tagName.toUpperCase()!='BODY'){
  59.             //top+=p.offsetTop;
  60.             left+=p.offsetLeft;
  61.             p=p.offsetParent;
  62.         }
  63.         //left+=3;
  64. /*
  65.         if (menu.isSubMenu){
  66.             try{
  67.                 if (blnNetscape6){
  68.                     left+=(getLayer(menu.parentid).offsetWidth - 4);
  69.                 }else{
  70.                     left+=(getLayer(menu.parentid).clientWidth - 8);
  71.                 }
  72.             }catch(e){
  73.             }
  74.         }else{
  75.             top += menuItem.offsetHeight;
  76.         }
  77. */
  78.         //menu.x = left;
  79.         //menu.y = top;
  80.         setMenuVisible(menu, left, top, false);
  81.         //fixWidth(paneID, menu);
  82.     }
  83. }
  84.  
  85. function popupSubMenu(handleID, menu){
  86.     if (menu){
  87.         var menuHandle = getLayer(handleID);
  88.         var p=menuHandle;
  89.         //var top = p.offsetHeight, left = 0;
  90.         var top = 0, left = p.offsetWidth;
  91.         while(p&&p.tagName.toUpperCase()!='BODY'){
  92.             top+=p.offsetTop;
  93.             left+=p.offsetLeft;
  94.             p=p.offsetParent;
  95.         }
  96.         if (is.ie && is.mac){
  97.             top -= 3;
  98.             left -= 10;
  99.         }
  100. /*
  101.         if (menu.isSubMenu){
  102.             try{
  103.                 if (blnNetscape6){
  104.                     left+=(getLayer(menu.parentid).offsetWidth - 4);
  105.                 }else{
  106.                     left+=(getLayer(menu.parentid).clientWidth - 8);
  107.                 }
  108.             }catch(e){
  109.             }
  110.         }else{
  111.             top += menuItem.offsetHeight;
  112.         }
  113. */
  114.         //menu.x = left;
  115.         //menu.y = top;
  116.         setMenuVisible(menu, left, top, true);
  117.         //fixWidth(paneID, menu);
  118.     }
  119. }
  120.  
  121. function closeMenusOrig(){
  122.     if (currentMenu){
  123.         setMenuVisibility(currentMenu, false);
  124. //        currentMenu = null;
  125.     }
  126. }
  127.  
  128. function closeSubMenus(handle){
  129.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  130.     if (menuStack.length > 0){
  131.         for (var i = menuStack.length-1; i >=0; i--){
  132.             var menu = menuStack[menuStack.length-1];
  133.             if (menu.id == handle.getAttribute('parentid')){
  134.                 currentMenu = menu;
  135.                 break;
  136.             }else{
  137.                 closeMenu(menu);
  138.                 //menuStack.pop();
  139.                 menuPop();
  140.             }
  141.         }
  142.     }
  143. }
  144.  
  145. function closeMenu(menu){
  146.     setMenuVisibility(menu, false);
  147. }
  148.  
  149. function closeMenusOrig(){
  150.     if (menuStack.length > 0){
  151.         for (var i = menuStack.length-1; i >=0; i--){
  152.             //var menu = menuStack.pop();
  153.             var menu = menuPop();
  154.             closeMenu(menu);
  155.         }
  156.     }
  157.     currentMenu = null;
  158. }
  159.  
  160. function closeMenus(){
  161.     if (closeMenusDelay == null){
  162.         closeMenusDelay = window.setTimeout("closeAllMenus()", delayTime);
  163.     }
  164. }
  165.  
  166. function closeAllMenus(){
  167.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  168.     if (menuStack.length > 0){
  169.         for (var i = menuStack.length-1; i >=0; i--){
  170.             //var menu = menuStack.pop();
  171.             var menu = menuPop();
  172.             closeMenu(menu);
  173.         }
  174.     }
  175.     currentMenu = null;
  176. }
  177.  
  178. function setMenuVisible(menu, x, y, isSubMenu){
  179. /*
  180.    var id = menu.id;
  181.    var left=0;
  182.    var top=0;
  183.    var menuItem = menu.getMenuItemElm();
  184.  
  185.    if (menuItem && menu){
  186.       if (menu.isTopMenu){
  187.          menuItem.className = 'tbButtonMouseDown';
  188.       }
  189.    }
  190. */
  191.     if (menu){
  192.         //menu.x = left;
  193.         //menu.y = top;
  194.         if (isSubMenu){
  195.             if (menu.getAttribute('parentid') == currentMenu.getAttribute('parentid')){
  196.                 //menuStack.pop();
  197.                 menuPop();
  198.                 setMenuVisibility(currentMenu, false);
  199.             }
  200.         }else{
  201.             //menuStack.pop();
  202.             menuPop();
  203.             setMenuVisibility(currentMenu, false);
  204.         }
  205.         currentMenu = menu;
  206.         //menuStack.push(menu);
  207.         menuPush(menu);
  208.         setMenuVisibility(menu, true, x, y);
  209.     }
  210. }
  211.  
  212. function getLayer(layerid){
  213. /*
  214.     if (document.layers && layerid){
  215.         if (document.layers[layerid]) return document.layers[layerid];
  216.     }
  217.     if (document.links && layerid){
  218.         if (document.links[layerid]) return document.links[layerid];
  219.     }
  220.     if (document.all && layerid){
  221.         if (document.all(layerid)) return document.all(layerid);
  222.     }
  223. */
  224.     return document.getElementById(layerid);
  225. }
  226.  
  227. function setMenuVisibility(menu, on, x, y){
  228.     var parent = menu;
  229.     if (menu){
  230. /*
  231.         menu.visible = on;
  232.         setLayer(menu.id, !menu.visible, menu.x, menu.y);
  233.         setLayer(menu.id, !menu.visible, 0, 0);
  234.         menu.visible = on;
  235. */
  236.         setLayer(menu.id, !on, x, y);
  237.         if (is.ie){
  238.             if (!on){
  239.                 if (!menu.getAttribute('parentid')){
  240.                     showElement("SELECT");
  241.                 }
  242.             }else{
  243.                 hideElement("SELECT", x, y, menu.offsetWidth, menu.offsetHeight);
  244.             }
  245.         }
  246. /*
  247.         setLayer(menu.id, !menu.visible, 0, 0);
  248.         var menuWidth, menuHeight;
  249.         var menuLayer = getLayer(menu.id);
  250.         if (menuLayer){
  251.             if (blnIE55){
  252.                 menuWidth = menuLayer.clientWidth;
  253.                 menuHeight = menuLayer.clientHeight;
  254.             }else{
  255.                 menuWidth = menuLayer.offsetWidth;
  256.                 menuHeight = menuLayer.offsetHeight;
  257.             }
  258.             if (menu.x+menuWidth > clientWindowWidth){
  259.                 menu.x = clientWindowWidth - menuWidth - 25;
  260.                 if (menu.x < 10){
  261.                     menu.x = 10;
  262.                 }
  263.             }
  264.             if (menu.y+menuHeight > clientWindowHeight){
  265.                 menu.y = clientWindowHeight - menuHeight - 25;
  266.                 if (menu.y < 10){
  267.                     menu.y = 10;
  268.                 }
  269.             }
  270.             setLayer(menu.id, !menu.visible, menu.x, menu.y);
  271.         }
  272. */
  273.     }
  274. /*
  275.     var parentid = menu.parentid;
  276.     while (parentid){
  277.         parent = getMenu(menu.paneID, parentid);
  278.         if (parent){
  279.             parent.visible = on;
  280.             setLayer(parent.id, !parent.visible, parent.x, parent.y);
  281.             parentid = parent.parentid;
  282.             if (on == false) currentMenu = parent;
  283.         }else{
  284.             parentid = null;
  285.         }
  286.     }
  287.     }
  288.     return parent;
  289. */
  290. }
  291.  
  292. function menuPop(){
  293.     if (is.ie && (is.mac || !is.ie5_5up)){
  294.         var menu = menuStack[menuStack.length-1];
  295.         var newMenuStack = new Array();
  296.         for (var i = 0; i < menuStack.length-1; i++){
  297.             newMenuStack[newMenuStack.length] = menuStack[i];
  298.         }
  299.         menuStack = newMenuStack;
  300.         return menu;
  301.     }else{
  302.         return menuStack.pop();
  303.     }
  304. }
  305.  
  306. function menuPush(menu){
  307.     if (is.ie && (is.mac || !is.ie5_5up)){
  308.         menuStack[menuStack.length] = menu;
  309.     }else{
  310.         menuStack.push(menu);
  311.     }
  312. }
  313.  
  314. function checkBrowserWidth(){
  315.     var    windowWidth;
  316.     if (is.ie){
  317.         windowWidth = document.body.clientWidth;
  318.     }else{
  319.         // 17px for scrollbar width
  320.         windowWidth = window.innerWidth - 16;
  321.     }
  322.     if (windowWidth >= 1000){
  323.         showSB('sbContent',true,'sb');
  324.     }else{
  325.         showSB('sbContent',false,'sb');
  326.     }
  327. }
  328.  
  329. function showSB(id, hideit, imgIdPrefix){
  330.     setLayer(id, !hideit, -1, -1);
  331.     setLayer(imgIdPrefix+'On', !hideit, -1, -1);
  332.     setLayer(imgIdPrefix+'Off', hideit, -1, -1);
  333. }
  334.  
  335. function setLayer(id, hidden, x, y){
  336.     var layer = getLayer(id);
  337.     setLayerElm(layer, hidden, x, y);
  338. }
  339.  
  340. function setLayerElm(layer, hideit, x, y){
  341.     if (layer && layer.style){
  342.         if (hideit){
  343.             layer.style.visibility='hidden';
  344.             //layer.style.display='none';
  345.         }else{
  346.             layer.style.display='block';
  347.             layer.style.visibility='visible';
  348.         }
  349.         if (x >=0 && y >= 0){
  350. //alert(layer.id+': '+x+', '+y+'\n'+layer.offsetLeft+', '+layer.offsetTop);
  351.             //layer.style.left=x;
  352.             //layer.style.top=y;
  353.             layer.style.left = x+'px';
  354.             layer.style.top = y+'px';
  355.         }
  356.     }
  357. }
  358.  
  359. function hiliteItem(menuItem){
  360.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  361.     if (menuItem.getAttribute('avid') == 'false'){
  362.         menuItem.className = 'menuItemHiliteX';
  363.     }else{
  364.         menuItem.className = 'menuItemHilite';
  365.     }
  366. }
  367.  
  368. function unhiliteItem(menuItem){
  369.     closeMenusDelay = eraseTimeout(closeMenusDelay);
  370.     if (menuItem.getAttribute('avid') == 'false'){
  371.         menuItem.className = 'menuItemX';
  372.     }else{
  373.         menuItem.className = 'menuItem';
  374.     }
  375. }
  376.  
  377. function showElement(elmID){
  378.     for (i = 0; i < document.getElementsByTagName(elmID).length; i++)    {
  379.         obj = document.getElementsByTagName(elmID)[i];
  380.         if (! obj || ! obj.offsetParent)
  381.             continue;
  382.         obj.style.visibility = "";
  383.     }
  384. }
  385. function showElementNew(elmID){
  386.     if (hiddenElmStack.length > 0){
  387.         for (var i = hiddenElmStack.length-1; i >=0; i--){
  388.             var obj = hiddenElmStack[hiddenElmStack.length-1];
  389.             obj.style.visibility = "";;
  390.             hiddenElmStack.pop();
  391.         }
  392.     }
  393. }
  394.  
  395. function hideElement(elmID,x,y,w,h){
  396.     for (i = 0; i < document.getElementsByTagName(elmID).length; i++){
  397.         obj = document.getElementsByTagName(elmID)[i];
  398.         if (! obj || ! obj.offsetParent)
  399.             continue;
  400.  
  401.         // Find the element's offsetTop and offsetLeft relative to the BODY tag.
  402.         objLeft   = obj.offsetLeft;
  403.         objTop    = obj.offsetTop;
  404.         objParent = obj.offsetParent;
  405.         while (objParent.tagName.toUpperCase() != "BODY"){
  406.             objLeft  += objParent.offsetLeft;
  407.             objTop   += objParent.offsetTop;
  408.             objParent = objParent.offsetParent;
  409.         }
  410.         // Adjust the element's offsetTop relative to the dropdown menu
  411.         objTop = objTop - y;
  412.  
  413.         if (x > (objLeft + obj.offsetWidth) || objLeft > (x + w))
  414.             ;
  415.         else if (objTop > h)
  416.             ;
  417.         else if ((y + h) <= 80)
  418.             ;
  419.         else {
  420.             obj.style.visibility = "hidden";
  421.             //hiddenElmStack.push(obj);
  422.         }
  423.     }
  424. }
  425.  
  426. function Is (){
  427.     // convert all characters to lowercase to simplify testing
  428.     var agt = navigator.userAgent.toLowerCase();
  429.  
  430.     // *** BROWSER VERSION ***
  431.     // Note: On IE5, these return 4, so use is.ie5up to detect IE5.
  432.     this.major = parseInt(navigator.appVersion);
  433.     this.minor = parseFloat(navigator.appVersion);
  434.  
  435.     // Note: Opera and WebTV spoof Navigator.  We do strict client detection.
  436.     // If you want to allow spoofing, take out the tests for opera and webtv.
  437.     this.nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
  438.                 && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
  439.                 && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
  440.     this.nav2 = (this.nav && (this.major == 2));
  441.     this.nav3 = (this.nav && (this.major == 3));
  442.     this.nav4 = (this.nav && (this.major == 4));
  443.     this.nav4up = (this.nav && (this.major >= 4));
  444.     this.navonly      = (this.nav && ((agt.indexOf(";nav") != -1) ||
  445.                           (agt.indexOf("; nav") != -1)) );
  446.     this.nav6 = (this.nav && (this.major == 5));
  447.     this.nav6up = (this.nav && (this.major >= 5));
  448.     this.gecko = (agt.indexOf('gecko') != -1);
  449.  
  450.     this.nav7 = (this.gecko && (this.major >= 5) && (agt.indexOf('netscape/7')!=-1));
  451.     this.moz1 = false;
  452.     this.moz1up = false;
  453.     this.moz1_1 = false;
  454.     this.moz1_1up = false;
  455.     if (this.nav6up){
  456. //    if (this.nav){
  457.        myRegEx = new RegExp("rv:\\d*.\\d*.\\d*");
  458.        //myFind = myRegEx.exec("; rv:9.10.5)");
  459.        myFind = myRegEx.exec(agt);
  460.        if(myFind!=null){
  461.          var strVersion = myFind.toString();
  462.          strVersion = strVersion.replace(/rv:/,'');
  463.          var arrVersion = strVersion.split('.');
  464.          var major = parseInt(arrVersion[0]);
  465.          var minor = parseInt(arrVersion[1]);
  466.          if (arrVersion[2]) var revision = parseInt(arrVersion[2]);
  467.          this.moz1 = ((major == 1) && (minor == 0));
  468.          this.moz1up = ((major == 1) && (minor >= 0));
  469.          this.moz1_1 = ((major == 1) && (minor == 1));
  470.          this.moz1_1up = ((major == 1) && (minor >= 1));
  471.       }
  472.     }
  473.  
  474.     this.ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
  475.     this.ie3    = (this.ie && (this.major < 4));
  476.     this.ie4    = (this.ie && (this.major == 4) && (agt.indexOf("msie 4")!=-1) );
  477.     this.ie4up  = (this.ie  && (this.major >= 4));
  478.     this.ie5    = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")!=-1) );
  479.     this.ie5_5  = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.5") !=-1));
  480.     this.ie5up  = (this.ie  && !this.ie3 && !this.ie4);
  481.  
  482.     this.ie5_5up =(this.ie && !this.ie3 && !this.ie4 && !this.ie5);
  483.     this.ie6    = (this.ie && (this.major == 4) && (agt.indexOf("msie 6.")!=-1) );
  484.     this.ie6up  = (this.ie  && !this.ie3 && !this.ie4 && !this.ie5 && !this.ie5_5);
  485.  
  486.     this.mac    = (agt.indexOf("mac") != -1);
  487. }
  488.  
  489. function checkBrowser (){
  490.     //if (is.ie5_5up || is.nav7 || is.moz1up) ;// supported browser
  491.     //else alert('This browser is not a supported browser or browser version.\nUnexpected or erroneous behavior may occur.');
  492.     //else alert(strBrowserWarn1+'\n'+strBrowserWarn2+'\n'+strBrowserWarn3);
  493.     if (!is.ie5up && !is.nav6up){
  494.         //alert('Avid.com is a richly-featured site that requires the latest version of an Internet browser. Please upgrade your browser in order to take full advantage of what the site has to offer.');
  495.     }
  496. }
  497.  
  498. var is = new Is();
  499. checkBrowser();
  500.