// global menu statevar menuReady = false;// pre-cache menubar image pairsif (document.images) {    var imagesNormal = new Array();    imagesNormal["home"] = new Image(25, 200);    imagesNormal["home"].src = "images/buttons/home.jpg";    imagesNormal["services"] = new Image(25, 200);    imagesNormal["services"].src  = "images/buttons/services.jpg";    imagesNormal["websites"] = new Image(25, 200);    imagesNormal["websites"].src  = "images/buttons/websites.jpg";    imagesNormal["contact"] = new Image(25, 200);    imagesNormal["contact"].src  = "images/buttons/contact.jpg";    var imagesHilite = new Array();    imagesHilite["home"] = new Image(25, 200);    imagesHilite["home"].src = "images/buttons/home-up.jpg";    imagesHilite["services"] = new Image(25, 200);    imagesHilite["services"].src  = "images/buttons/services-up.jpg";    imagesHilite["websites"] = new Image(25, 200);    imagesHilite["websites"].src  = "images/buttons/websites-up.jpg";    imagesHilite["contact"] = new Image(25, 200);    imagesHilite["contact"].src  = "images/buttons/contact-up.jpg";}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 valuesvar CSSRuleValues = {menuItemHeight:"18px",                     menuItemLineHeight:"1.4em",                     menuWrapperBorderWidth:"2px",                     menuWrapperPadding:"3px",                     defaultBodyFontSize:"12px"                    };// specifications for menu contents and menubar image associationsvar menus = new Array();menus[0] = {mBarImgId:"menuImg_1",            mBarImgNormal:imagesNormal["home"],            mBarImgHilite:imagesHilite["home"],            menuItems:[],            elemId:""           };menus[1] = {mBarImgId:"menuImg_2",            mBarImgNormal:imagesNormal["services"],            mBarImgHilite:imagesHilite["services"],            menuItems:[ {text:"Spam/Spybots", href:"spam-spybots.html"},                        {text:"Networking/Wireless", href:"networking.html"},                        {text:"Operating Systems", href:"os.html"},                        {text:"Databases", href:"dbs.html"},                        {text:"Software Engineering", href:"soft-eng.html"},                        {text:"Graphics", href:"graphics.html"},                        {text:"Training", href:"training.html"},                        {text:"Service Area", href:"service-area.html"},                        {text:"Rates", href:"rates.html"}                      ],            elemId:""           };menus[2] = {mBarImgId:"menuImg_3",             mBarImgNormal:imagesNormal["websites"],            mBarImgHilite:imagesHilite["websites"],            menuItems:[ {text:"Got Nation", href:"http://www.gotnation.com/"},						{text:"Pirates Hold", href:"http://pirateshold.buccaneersoft.com/"},                        {text:"Tread Marks", href:"http://treadmarks.buccaneersoft.com/"}                      ],            elemId:""           };menus[3] = {mBarImgId:"menuImg_4",            mBarImgNormal:imagesNormal["contact"],            mBarImgHilite:imagesHilite["contact"],            menuItems:[],            elemId:""           };// create hash table-like lookup for menu objects with id string indexesfunction 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 handlersfunction 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 constructionfunction 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 hidingvar 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 cancelledfunction requestHide() {    timer = setTimeout("hideMenus()", 250);}// "brute force" hiding of all menus and restoration// of normal menu bar imagesfunction 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 itfunction 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 + mBarImg.width + "px";    //menuDiv.style.left = offsetLeft + "px";    //menuDiv.style.top = offsetTop + mBarImg.height + "px";    menuDiv.style.top = offsetTop + "px";}// display a particular menu divfunction 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 rolloversfunction 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 supportedfunction initMenus() {    if (document.getElementById && document.styleSheets) {        setTimeout("makeMenus()", 5);        window.onunload=cancelAll;    }}