// Sets the focus to the 'js_focus_element' field's value (another field's name) function setFocus() { try { //eval("document.main."+document.main.js_focus_element.value+".focus()"); } catch (err) { return(true); } } var currentMenuName = null; var currentMenuObj = null; var currentSubMenuObj = null; var menuVerticalOffset = -10; var menuCloseBufferSize = 20; var boundingBox = null; //initialize menu function initMenu() { var sub = new Array(9); sub[0] = document.getElementById("submenu_contactus"); sub[1] = document.getElementById("submenu_people"); sub[2] = document.getElementById("submenu_research"); sub[3] = document.getElementById("submenu_academics"); sub[4] = document.getElementById("submenu_prospective"); sub[5] = document.getElementById("submenu_current"); sub[6] = document.getElementById("submenu_iap"); sub[7] = document.getElementById("submenu_former"); sub[8] = document.getElementById("submenu_visitors"); // sub[9] = document.getElementById("submenu_degrees"); // sub[10] = document.getElementById("submenu_courses"); var base = 80; var offset = 25; for (var i=0; i<9; i++) { var posY = base + offset * i; sub[i].style.top = posY + "px"; sub[i].style.visibility = "hidden"; // } // for (var i=4; i<6; i++) // { // var posX = 182; // var offsetX = 90; // // sub[i].style.top = posY + "px"; // sub[i].style.top = "75px"; // sub[i].style.left = posX + offsetX * (i - 4) + "px"; // sub[i].style.visibility = "hidden"; // } // for (var i=6; i<11; i++) // { // var posY = base + offset * i - 10; sub[i].style.top = posY + "px"; //sub[i].style.visibility = "hidden"; } } function isMenuOpen() { if (currentMenuName != null && currentMenuObj != null && currentSubMenuObj != null) return true; return false; } function openMenu(name) { // Check if a menu is open if (isMenuOpen()) { if (currentMenuName != name) // If the menu is not the current one, close it { closeMenu(); } else // The currently open menu is the one that is being opened, return { return; } } currentMenuName = name; currentSubMenuObj = document.getElementById("submenu_"+name); currentMenuObj = document.getElementById("menu_item_"+name); if (!positionOpenMenu()) { currentMenuName = null; currentMenuObj = null; currentSubMenuObj = null; return; } currentSubMenuObj.style.visibility = "visible"; // 0 = top // 1 = left // 2 = bottom // 3 = right boundingBox = new Array(4); subLeft = findPosX(currentSubMenuObj); subRight = subLeft + currentSubMenuObj.offsetWidth; subTop = findPosY(currentSubMenuObj); subBottom = subTop + currentSubMenuObj.offsetHeight; mainLeft = findPosX(currentMenuObj); mainRight = mainLeft + currentMenuObj.offsetWidth; mainTop = findPosY(currentMenuObj); mainBottom = mainTop + currentMenuObj.offsetHeight; if (subTop > mainTop) boundingBox[0] = mainTop; else boundingBox[0] = subTop; if (subLeft > mainLeft) boundingBox[1] = mainLeft; else boundingBox[1] = subLeft; if (subBottom > mainBottom) boundingBox[2] = subBottom; else boundingBox[2] = mainBottom; if (subRight > mainRight) boundingBox[3] = subRight; else boundingBox[3] = mainRight; //alert("Bounding box: ("+boundingBox[1]+","+boundingBox[0]+"),("+boundingBox[3]+","+boundingBox[2]+")"); //alert("Menu " + currentMenuName + " opened and should be visible? " + currentSubMenuObj.style.visibility); } function closeMenu() { if (!isMenuOpen()) return; currentSubMenuObj.style.visibility = "hidden"; currentMenuName = null; currentMenuObj = null; currentSubMenuObj = null; boundingBox = null; } function positionOpenMenu() { if (!isMenuOpen()) return false; y = findPosY(currentMenuObj) + menuVerticalOffset; currentSubMenuObj.style.top = y+"px"; //alert("positioned " + currentMenuName + " to y = " + y + "px"); return true; } function mouseMoveHandler(event) { if (!isMenuOpen()) return; //closeMenu(); //return; // First, calculate the current mouse position on the page (need to account for page offest) mouseX = 0; mouseY = 0; if (!event || event == null) event = window.event; if (event.pageX || event.pageY) { mouseX = event.pageX; mouseY = event.pageY; } else if (event.clientX || event.clientY) { scrOfX = 0; scrOfY = 0; if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } mouseX = event.clientX + scrOfX; mouseY = event.clientY + scrOfY; } else { return; } if ( (mouseY < boundingBox[0] || mouseY > boundingBox[2]) || (mouseX < boundingBox[1] || mouseX > boundingBox[3])) { closeMenu(); } // checkMenu(mouseX,mouseY); } function checkMenu(x,y) { if (currentOpenMenu == "contactus" && (y > 200 || y < 85 || x > 420)) closeMenu(); if (currentOpenMenu == "people" && (y < 110 || y > 300 || x > 420)) closeMenu(); if (currentOpenMenu == "research" && (y < 135 || y > 240 || x > 420)) closeMenu(); if (currentOpenMenu == "academics" && (y < 160 || y > 370 || x > 420)) closeMenu(); if (currentOpenMenu == "prospective" && (y < 185 || y > 320 || x > 420)) closeMenu(); if (currentOpenMenu == "current" && (y < 210 || y > 400 || x > 420)) closeMenu(); if (currentOpenMenu == "iap" && (y < 235 || y > 370 || x > 420)) closeMenu(); if (currentOpenMenu == "former" && (y < 260 || y > 380 || x > 420)) closeMenu(); if (currentOpenMenu == "visitors" && (y < 285 || y > 500 || x > 420)) closeMenu(); if (currentOpenMenu == "degrees" && (y < 310 || y > 550 || x > 420)) closeMenu(); if (currentOpenMenu == "courses" && (y < 335 || y > 600 || x > 420)) closeMenu(); } function findPosX(obj) { if(obj == null) return 0; curleft = obj.offsetLeft; while (obj.offsetParent != null) { obj = obj.offsetParent; curleft += obj.offsetLeft } return curleft; } function findPosY(obj) { if(obj == null) return 0; curtop = obj.offsetTop; while (obj.offsetParent != null && !(obj.offsetParent.nodeType == 1 && obj.offsetParent.tagName == "BODY")) { obj = obj.offsetParent; curtop += obj.offsetTop; } return curtop; }