// global menu state var menuReady = false; var imagesNormal = new Array(); var imagesHilite = new Array(); imagepairs(); function imagepairs() { // pre-cache menubar image pairs if (document.images) { imagesNormal[1] = new Image(29, 97); imagesNormal[1].src = "/images/menuitem0.gif"; imagesNormal[2] = new Image(29, 137); imagesNormal[2].src = "/images/menuitem1.gif"; imagesNormal[3] = new Image(29, 125); imagesNormal[3].src = "/images/menuitem2.gif"; imagesNormal[4] = new Image(29, 60); imagesNormal[4].src = "/images/menuitem3.gif"; imagesNormal[5] = new Image(29, 119); imagesNormal[5].src = "/images/menuitem4.gif"; imagesNormal[6] = new Image(29, 89); imagesNormal[6].src = "/images/menuitem5.gif"; imagesNormal[7] = new Image(29, 65); imagesNormal[7].src = "/images/menuitem6.gif"; imagesHilite[1] = new Image(29, 97); imagesHilite[1].src = "/images/menuitem0over.gif"; imagesHilite[2] = new Image(29, 137); imagesHilite[2].src = "/images/menuitem1over.gif"; imagesHilite[3] = new Image(29, 125); imagesHilite[3].src = "/images/menuitem2over.gif"; imagesHilite[4] = new Image(29, 60); imagesHilite[4].src = "/images/menuitem3over.gif"; imagesHilite[5] = new Image(29, 119); imagesHilite[5].src = "/images/menuitem4over.gif"; imagesHilite[6] = new Image(29, 89); imagesHilite[6].src = "/images/menuitem5over.gif"; imagesHilite[7] = new Image(29, 65); imagesHilite[7].src = "/images/menuitem6over.gif"; } } function getElementStyle(elem, IEStyleProp, CSSStyleProp) { if (elem.currentStyle) { return elem.currentStyle[IEStyleProp]; } else if (window.getComputedStyle) { var compStyle = window.getComputedStyle(elem, ""); return compStyle.getPropertyValue(CSSStyleProp); } return ""; } // carry over some critical menu style sheet attribute values var CSSRuleValues = {menuItemHeight:"20px", menuItemLineHeight:"1.5em", menuWrapperBorderWidth:"0px", menuWrapperPadding:"0px", defaultBodyFontSize:"10px" }; // specifications for menu contents and menubar image associations var menus = new Array(); menus[0] = {mBarImgId:"menuImg_1", mBarImgNormal:imagesNormal[1], mBarImgHilite:imagesHilite[1], menuItems:[ {text:"About", href:"../content/story.asp?level0=2004&level1=2011"}, {text:"Vision and Market", href:"../content/story.asp?level0=2004&level1=2012"}, {text:"Technical Program", href:"../content/story.asp?level0=2004&level1=2046"}, {text:"Members", href:"../content/story.asp?level0=2004&level1=2048"} ], elemId:"" }; menus[1] = {mBarImgId:"menuImg_2", mBarImgNormal:imagesNormal[2], mBarImgHilite:imagesHilite[2], menuItems:[ {text:"Who can submit?", href:"../content/story.asp?level0=2005&level1=2013"}, {text:"Evaluation Criteria", href:"../content/story.asp?level0=2005&level1=2025"}, {text:"How to submit", href:"../content/story.asp?level0=2005&level1=2024"}, {text:"Current Call", href:"../content/story.asp?level0=2005&level1=2052"}, {text:"Search for Partners", href:"../content/story.asp?level0=2005&level1=2079"}, {text:"Documents", href:"../content/story.asp?level0=2005&level1=2053"} ], elemId:"" }; menus[2] = {mBarImgId:"menuImg_3", mBarImgNormal:imagesNormal[3], mBarImgHilite:imagesHilite[3], menuItems:[ {text:"From Label to Funding", href:"../content/story.asp?level0=2006&level1=2035"}, {text:"EUROGIA+ Support", href:"../content/story.asp?level0=2006&level1=2049"}, {text:"Country Information", href:"../content/fundinglist.asp?level0=2006&level1=2037"}, {text:"Post-Project support for SMEs", href:"../content/story.asp?level0=2006&level1=2075"} ], elemId:"" }; menus[3] = {mBarImgId:"menuImg_4", mBarImgNormal:imagesNormal[4], mBarImgHilite:imagesHilite[4], menuItems:[ {text:"Information Days", href:"../content/eventlist.asp?level0=2007&level1=2031"}, {text:"EUREKA EVENTS", href:"../content/eventlist.asp?level0=2007&level1=2030"} ], elemId:"" }; menus[4] = {mBarImgId:"menuImg_5", mBarImgNormal:imagesNormal[5], mBarImgHilite:imagesHilite[5], menuItems:[ {text:"Eurogia+ Call 1", href:"../content/projectlist.asp?level0=2008&level1=2081"}, {text:"Eurogia+ Call 2", href:"../content/projectlist.asp?level0=2008&level1=2082"}, {text:"Eurogia+ Call 3", href:"../content/projectlist.asp?level0=2008&level1=2083"}, {text:"Eurogia+ Call 4", href:"../content/projectlist.asp?level0=2008&level1=2084"}, {text:" Projects 2004 - 2008", href:"../content/projectlist.asp?level0=2008&level1=2080"} ], elemId:"" }; menus[5] = {mBarImgId:"menuImg_6", mBarImgNormal:imagesNormal[6], mBarImgHilite:imagesHilite[6], menuItems:[ {text:"News", href:"../content/publicationlist.asp?level0=2009&level1=2021"}, {text:"Press", href:"../content/publicationlist.asp?level0=2009&level1=2019"}, {text:"FAQ", href:"/content/faqlist.asp?level0=2009&level1=2022"} ], elemId:"" }; menus[6] = {mBarImgId:"menuImg_7", mBarImgNormal:imagesNormal[7], mBarImgHilite:imagesHilite[7], menuItems:[ ], elemId:"" }; // create hash table-like lookup for menu objects with id string indexes function makeHashes() { for (var i = 0; i < menus.length; i++) { menus[menus[i].elemId] = menus[i]; menus[menus[i].mBarImgId] = menus[i]; } } // assign menu label image event handlers function assignLabelEvents() { var elem; for (var i = 0; i < menus.length; i++) { elem = document.getElementById(menus[i].mBarImgId); elem.onmouseover = swap; elem.onmouseout = swap; } } // invoked from init(), generates the menu div elements and their contents. // all this action is invisible to user during construction function makeMenus() { var menuDiv, menuItem, itemLink, mbarImg, textNode, offsetLeft, offsetTop; // determine key adjustment factors for the total height of menu divs var menuItemH = 0; var bodyFontSize = parseInt(getElementStyle(document.body, "fontSize", "font-size")); // test to see if browser's font size has been adjusted by the user // and that the new size registers as an applied style property if (bodyFontSize == parseInt(CSSRuleValues.defaultBodyFontSize)) { menuItemH = (parseFloat(CSSRuleValues.menuItemHeight)); } else { // works nicely in Netscape 7 menuItemH = parseInt(parseFloat(CSSRuleValues.menuItemLineHeight) * bodyFontSize); } var heightAdjust = parseInt(CSSRuleValues.menuWrapperPadding) + parseInt(CSSRuleValues.menuWrapperBorderWidth); if (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win") != -1 && (typeof document.compatMode == "undefined" || document.compatMode == "BackCompat")) { heightAdjust = -heightAdjust; } // use menus array to drive div creation loop for (var i = 0; i < menus.length; i++) { menuDiv = document.createElement("div"); menuDiv.id = "popupmenu" + i; // preserve menu's ID as property of the menus array item menus[i].elemId = "popupmenu" + i; menuDiv.className = "menuWrapper"; if (menus[i].menuItems.length > 0) { menuDiv.style.height = (menuItemH * menus[i].menuItems.length) - heightAdjust + "px"; } else { // don't display any menu div lacking menu items menuDiv.style.display = "none"; } // define event handlers menuDiv.onmouseover = keepMenu; menuDiv.onmouseout = requestHide; // set stacking order in case other layers are around the page menuDiv.style.zIndex = 1000; // assemble menu item elements for inside menu div for (var j = 0; j < menus[i].menuItems.length; j++) { menuItem = document.createElement("div"); menuItem.id = "popupmenuItem_" + i + "_" + j; menuItem.className = "menuItem"; menuItem.onmouseover = toggleHighlight; menuItem.onmouseout = toggleHighlight; menuItem.onclick = hideMenus; menuItem.style.top = menuItemH * j + "px"; itemLink = document.createElement("a"); itemLink.href = menus[i].menuItems[j].href; itemLink.className = "menuItem"; itemLink.onmouseover = toggleHighlight; itemLink.onmouseout = toggleHighlight; textNode = document.createTextNode(menus[i].menuItems[j].text); itemLink.appendChild(textNode); menuItem.appendChild(itemLink); menuDiv.appendChild(menuItem); } // append each menu div to the body document.body.appendChild(menuDiv); } makeHashes(); assignLabelEvents(); // pre-position menu for (i = 0; i < menus.length; i++) { positionMenu(menus[i].elemId); } menuReady = true; } // initialize global that helps manage menu hiding var timer; // invoked from mouseovers inside menus to cancel hide // request from mouseout of menu bar image et al. function keepMenu() { clearTimeout(timer); } function cancelAll() { keepMenu(); menuReady = false; } // invoked from mouseouts to request hiding all menus // in 1/4 second, unless cancelled function requestHide() { timer = setTimeout("hideMenus()", 250); } // "brute force" hiding of all menus and restoration // of normal menu bar images function hideMenus() { for (var i = 0; i < menus.length; i++) { document.getElementById(menus[i].mBarImgId).src = menus[i].mBarImgNormal.src; var menu = document.getElementById(menus[i].elemId) menu.style.visibility = "hidden"; } } // set menu position just before displaying it function positionMenu(menuId){ // use the menu bar image for position reference of related div var mBarImg = document.getElementById(menus[menuId].mBarImgId); var offsetTrail = mBarImg; var offsetLeft = 0; var offsetTop = 0; while (offsetTrail) { offsetLeft += offsetTrail.offsetLeft; offsetTop += offsetTrail.offsetTop; offsetTrail = offsetTrail.offsetParent; } /*if (navigator.userAgent.indexOf("Mac") != -1 && typeof document.body.leftMargin != "undefined") { offsetLeft += document.body.leftMargin; offsetTop += document.body.topMargin; }*/ var menuDiv = document.getElementById(menuId); menuDiv.style.left = offsetLeft + "px"; menuDiv.style.top = offsetTop + mBarImg.height + "px"; } // display a particular menu div function showMenu(menuId) { if (menuReady) { keepMenu(); hideMenus(); positionMenu(menuId); var menu = document.getElementById(menuId); menu.style.visibility = "visible"; } } // menu bar image swapping, invoked from mouse events in menu bar // swap style sheets for menu items during rollovers function toggleHighlight(evt) { evt = (evt) ? evt : ((event) ? event : null); if (typeof menuReady != "undefined") { if (menuReady && evt) { var elem = (evt.target) ? evt.target : evt.srcElement; if (elem.nodeType == 3) { elem = elem.parentNode; } if (evt.type == "mouseover") { keepMenu(); elem.className ="menuItemOn"; } else { elem.className ="menuItem"; requestHide(); } evt.cancelBubble = true; } } } function swap(evt) { evt = (evt) ? evt : ((event) ? event : null); if (typeof menuReady != "undefined") { if (evt && (document.getElementById && document.styleSheets) && menuReady) { var elem = (evt.target) ? evt.target : evt.srcElement; if (elem.className == "menuImg") { if (evt.type == "mouseover") { showMenu(menus[elem.id].elemId); elem.src = menus[elem.id].mBarImgHilite.src; } else if (evt.type == "mouseout") { requestHide(); } evt.cancelBubble = true; } } } } // create menus only if key items are supported function initMenus() { if (document.getElementById && document.styleSheets) { setTimeout("makeMenus()", 5); window.onunload=cancelAll; } }