var foldMenuStatusID = 0; // folded var miHoverID = 99; var miJustID = 99; // last hovered menuitem ID var miPrevID = -1; var miCurrentID = 99; // current page menuitem var foldDelayTO; // TimeOut ID var foldWaitTO; // TimeOut ID var uHmax = 101; // maximum px foldmenu var uH = 0; // default at start : px foldmenu Height var TFmiHasSubs = new Array(); var TFsbmLalign = new Array(); // ===================================================================== // init // ===================================================================== function initMenuW() // set width of the most right menu item { var menuItemAllMinusOneW = 0; for (i=0;i < 8;i++) { menuItemAllMinusOneW += document.getElementById('menuitem'+i).clientWidth; menuItemAllMinusOneW += 2; } document.getElementById('menuitem'+8).style.width = (728 - menuItemAllMinusOneW) + "px"; } function initSubMenu() { var PDL = 14; initFMLpadding(PDL,0); for (i=1;i < 9;i++) { PDL += document.getElementById('menuitem'+(i-1)).clientWidth + 2; initFMLpadding(PDL,i); } } function initFMLpadding(parPD,parID) { if (TFmiHasSubs[parID]) { if (TFsbmLalign[parID]) { document.getElementById('foldMenuLinks'+parID).style.paddingLeft = parPD + "px"; document.getElementById('foldMenuLinks'+parID).style.textAlign = "left"; } else { parPD = 756 - parPD + 2*9 - document.getElementById('menuitem'+parID).clientWidth; document.getElementById('foldMenuLinks'+parID).style.width = (756-parPD) + "px"; document.getElementById('foldMenuLinks'+parID).style.paddingRight = parPD + "px"; document.getElementById('foldMenuLinks'+parID).style.textAlign = "right"; } } } // ===================================================================== // movement // ===================================================================== function switchFoldMenuStatus(parID) // --- only called due to mouseover or mouseout (regarding foldmenu or menuitem) { var foldMenuStatusIDbefore = foldMenuStatusID; miHoverID = parID; switch(miHoverID) { case 99: // mouseout menuitem switch(foldMenuStatusID) { case 3: // unfolded (menuitem HAS subs) waitFolding(1); break; case 4: // folded : wait for unfolding (menuitem HAS subs) cancelFoldWait(0); break; case 5: // unfolding (menuitem HAS subs) cancelFoldDelay(); folding(); // directly change (un)fold direction break; default: break; } break; case 88: // mouseout foldmenu switch(foldMenuStatusID) { case 3: // unfolded waitFolding(1); break; case 5: // unfolding cancelFoldDelay(); folding(); // directly change (un)fold direction break; default: break; } break; case 77: // mouseover foldmenu switch(foldMenuStatusID) { case 1: // unfolded : wait for folding cancelFoldWait(3); break; case 2: // folding cancelFoldDelay(); unfolding(); // directly change (un)fold direction break; default: break; } break; default: // mouseover menuitem 0-8 switch(foldMenuStatusID) { case 0: // folded waitUnFolding(4); break; case 1: // unfolded : wait for folding if (TFmiHasSubs[miHoverID]) cancelFoldWait(3); break; case 2: // folding if (TFmiHasSubs[miHoverID]) { cancelFoldDelay(); unfolding(); // directly change (un)fold direction } break; default: break; } break; } if ((foldMenuStatusID == 3) && (foldMenuStatusID != foldMenuStatusIDbefore)) // foldMenuStatusID:3:unfolded showSubMenu(); } function unfolding() { //uH += 5; uH += foldStep(); if (uH < uHmax) { moreUnFolding(5); // set timer document.getElementById('foldMenu').style.height = uH+"px"; hideSubMenu(); } else { foldMenuStatusID = 3; // unfolded uH = uHmax; document.getElementById('foldMenu').style.height = uH+"px"; showSubMenu(); } } function folding() { //uH -= 5; uH -= foldStep(); if (uH > 0) moreFolding(2); // set timer else { foldMenuStatusID = 0; // folded uH = 0; } document.getElementById('foldMenu').style.height = uH+"px"; hideSubMenu(); } function foldStep() { //if (uH > 75) //return 1; //else return 5; } function hideSubMenu() { if (miPrevID != -1) document.getElementById('foldMenuLinks'+miPrevID).style.display = "none"; } function showSubMenu() { hideSubMenu(); if (TFmiHasSubs[miJustID]) { document.getElementById('foldMenuLinks'+miJustID).style.display = "block"; miPrevID = miJustID; } } function waitUnFolding(parID) { foldWaitTO = window.setTimeout('unfolding()',250); foldMenuStatusID = parID; } function moreUnFolding(parID) { foldDelayTO = window.setTimeout('unfolding()',10); foldMenuStatusID = parID; } function waitFolding(parID) { foldWaitTO = window.setTimeout('folding()',250); foldMenuStatusID = parID; } function moreFolding(parID) { foldDelayTO = window.setTimeout('folding()',10); foldMenuStatusID = parID; } function cancelFoldWait(parID) { window.clearTimeout(foldWaitTO); foldMenuStatusID = parID; } function cancelFoldDelay() { window.clearTimeout(foldDelayTO); } function uMV() { if (TFmiHasSubs[miJustID]) { switchFoldMenuStatus(77); } } function uMT() { switchFoldMenuStatus(88); } function MVmi(parID) { miJustID = parID; if (TFmiHasSubs[parID]) switchFoldMenuStatus(parID); } function MTmi(parID) { switchFoldMenuStatus(99); }