// MENU REPOSITIONING: This will stop menus showing outside visible screen boundaries. // To activate: // 1) Paste this after you create your "new FSMenu" object. // 2) Make sure the last line contains the correct menu object name, and // duplicate for each of the menu objects to which you want this to apply. page.winW=function() { with (this) return Math.max(minW, MS?win.document[db].clientWidth:win.innerWidth) }; page.winH=function() { with (this) return Math.max(minH, MS?win.document[db].clientHeight:win.innerHeight) }; page.scrollX=function() { with (this) return MS?win.document[db].scrollLeft:win.pageXOffset }; page.scrollY=function() { with (this) return MS?win.document[db].scrollTop:win.pageYOffset }; function repositionMenus(mN) { with (this) { var menu = this.menus[mN].lyr; // Showing before measuring corrects MSIE bug. menu.sty.display = 'block'; // Reset to and/or store original margins. if (!menu._fsm_origML) menu._fsm_origML = menu.ref.currentStyle ? menu.ref.currentStyle.marginLeft : (menu.sty.marginLeft || 'auto'); if (!menu._fsm_origMT) menu._fsm_origMT = menu.ref.currentStyle ? menu.ref.currentStyle.marginTop : (menu.sty.marginTop || 'auto'); menu.sty.marginLeft = menu._fsm_origML; menu.sty.marginTop = menu._fsm_origMT; // Calculate absolute position within document. var menuX = 0, menuY = 0, menuW = menu.ref.offsetWidth, menuH = menu.ref.offsetHeight, vpL = page.scrollX(), vpR = vpL + page.winW() - 16, vpT = page.scrollY(), vpB = vpT + page.winH() - 16; var tmp = menu.ref; while (tmp) { menuX += tmp.offsetLeft; menuY += tmp.offsetTop; tmp = tmp.offsetParent; } // Compare position to viewport, reposition accordingly. var mgL = 0, mgT = 0; if (menuX + menuW > vpR) mgL = vpR - menuX - menuW; if (menuX + mgL < vpL) mgL = vpL - menuX; if (menuY + menuH > vpB) mgT = vpB - menuY - menuH; if (menuY + mgT < vpT) mgT = vpT - menuY; if (mgL) menu.sty.marginLeft = mgL + 'px'; if (mgT) menu.sty.marginTop = mgT + 'px'; }}; // Set this to process menu show events for a given object. //addEvent(listMenu, 'show', repositionMenus, true);