// global menu statevar menuReady = false;// pre-cache menubar image pairsif (document.images) {    var imagesNormal = new Array();    imagesNormal["stream"] = new Image(15, 90);    imagesNormal["stream"].src = "stream_off.gif";    imagesNormal["still"] = new Image(15, 95);    imagesNormal["still"].src  = "still_off.gif";    imagesNormal["salt"] = new Image(15, 95);    imagesNormal["salt"].src  = "salt_off.gif";    imagesNormal["strategies"] = new Image(15, 75);    imagesNormal["strategies"].src = "strategies_off.gif";    imagesNormal["forums"] = new Image(15, 68);    imagesNormal["forums"].src  = "forums_off.gif";    imagesNormal["tier"] = new Image(15, 94);    imagesNormal["tier"].src  = "tier_off.gif";    imagesNormal["tips"] = new Image(15, 60);    imagesNormal["tips"].src  = "tips_off.gif";    imagesNormal["field"] = new Image(15, 75);    imagesNormal["field"].src  = "field_off.gif";    imagesNormal["photo"] = new Image(15, 118);    imagesNormal["photo"].src = "photo_off.gif";    var imagesHilite = new Array();    imagesHilite["stream"] = new Image(15, 90);    imagesHilite["stream"].src = "stream_on.gif";    imagesHilite["still"] = new Image(15, 95);    imagesHilite["still"].src  = "still_on.gif";    imagesHilite["salt"] = new Image(15, 95);    imagesHilite["salt"].src  = "salt_on.gif";    imagesHilite["strategies"] = new Image(15, 75);    imagesHilite["strategies"].src = "strategies_on.gif";    imagesHilite["forums"] = new Image(15, 68);    imagesHilite["forums"].src  = "forums_on.gif";    imagesHilite["tier"] = new Image(15, 94);    imagesHilite["tier"].src  = "tier_on.gif";    imagesHilite["tips"] = new Image(15, 60);    imagesHilite["tips"].src  = "tips_on.gif";    imagesHilite["field"] = new Image(15, 75);    imagesHilite["field"].src  = "field_on.gif";    imagesHilite["photo"] = new Image(15, 118);    imagesHilite["photo"].src = "photo_on.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:"18px",                     menuItemLineHeight:"1.4em",                     menuWrapperBorderWidth:"2px",                     menuWrapperPadding:"3px",                     defaultBodyFontSize:"10px"                    };// specifications for menu contents and menubar image associationsvar menus = new Array();menus[0] = {mBarImgId:"menuImg_1",            mBarImgNormal:imagesNormal["stream"],            mBarImgHilite:imagesHilite["stream"],            menuItems:[ {text:"Southeast Steelhead", href:"streamstalker/toddsteelie.html"},                        {text:"Anchor River Dollies", href:"streamstalker/anchordolly.html"},                        {text:"Bushwhacking Kings", href:"streamstalker/bushwhack.html"}                      ],            elemId:""           };menus[1] = {mBarImgId:"menuImg_2",            mBarImgNormal:imagesNormal["still"],            mBarImgHilite:imagesHilite["still"],            menuItems:[ {text:"Flatwater Bonanza", href:"stillwaterstalker/bestsecret.html"}                      ],            elemId:""           };menus[2] = {mBarImgId:"menuImg_3",             mBarImgNormal:imagesNormal["salt"],            mBarImgHilite:imagesHilite["salt"],            menuItems:[ {text:"Pink Paradise", href:"saltwaterstalker/valdezpinks.html"}                      ],            elemId:""           };menus[3] = {mBarImgId:"menuImg_4",             mBarImgNormal:imagesNormal["strategies"],            mBarImgHilite:imagesHilite["strategies"],            menuItems:[ {text:"The Strip Set", href:"strategies/stripset.html"},                        {text:"In The Flesh", href:"strategies/intheflesh.html"},                        {text:"The Salmon Shuffle", href:"strategies/salmonshuffle.html"},                        {text:"The Alaskan Sculpin", href:"strategies/sculpinfishing.html"},                        {text:"Chironomids", href:"strategies/ricebowlmidge.html"}                      ],            elemId:""           };menus[4] = {mBarImgId:"menuImg_5",            mBarImgNormal:imagesNormal["forums"],            mBarImgHilite:imagesHilite["forums"],            menuItems:[ {text:"To The Forums", href:"ufly/forumwelcome.html"}                      ],            elemId:""           };menus[5] = {mBarImgId:"menuImg_6",             mBarImgNormal:imagesNormal["tier"],            mBarImgHilite:imagesHilite["tier"],            menuItems:[ {text:"Eggs & Flesh", href:"afb/eggfleshindex.html"},                        {text:"Nymphs & Wet", href:"afb/nymphwetindex.html"},                        {text:"Dries & Terrestrials", href:"afb/dryindex.html"},                        {text:"Streamers", href:"afb/streamerindex.html"},                        {text:"Attractors", href:"afb/attractorindex.html"},                        {text:"The Naturals", href:"afb/creatureindex.html"}                      ],            elemId:""           };menus[6] = {mBarImgId:"menuImg_7",             mBarImgNormal:imagesNormal["tips"],            mBarImgHilite:imagesHilite["tips"],            menuItems:[ {text:"Reduce Fly Fouling", href:"tips/tip7flyloop.html"},                        {text:"Make A Tough Peacock", href:"tips/tip6toughherl.html"},                        {text:"Less Is More", href:"tips/tip5hipressure.html"},                        {text:"Tying Weedless", href:"tips/tip4weedless.html"},                        {text:"An Egg A Day", href:"tips/tip3eggsucking.html"},                        {text:"EZ Hook Removal", href:"tips/tip2upsidedown.html"},                        {text:"The Open Clinch", href:"tips/tip1clinchknot.html"}                      ],            elemId:""           };menus[7] = {mBarImgId:"menuImg_8",             mBarImgNormal:imagesNormal["field"],            mBarImgHilite:imagesHilite["field"],            menuItems:[ {text:"Bead Belly Bouncer Flies", href:"fieldnotes/beadbellybouncers.html"},
		      {text:"Cooking Eggs for Trout", href:"fieldnotes/eartheneggs.html"},
		      {text:"Egg-Sucking Anything", href:"fieldnotes/eggsucking.html"},
                        {text:"Gearing Up", href:"fieldnotes/gearupintro.html"},                        {text:"Pre-Season Tune Ups", href:"fieldnotes/tuneup.html"},                        {text:"Steele on Situk Steel", href:"fieldnotes/briansituk.html"},                        {text:"Naknek Spring Rainbows", href:"fieldnotes/naknekleeches.html"},                        {text:"Mickey on the Menu", href:"fieldnotes/mousing.html"},                        {text:"Fall is Rainbow Time", href:"fieldnotes/brianrainbows.html"}                      ],            elemId:""           };menus[8] = {mBarImgId:"menuImg_9",            mBarImgNormal:imagesNormal["photo"],            mBarImgHilite:imagesHilite["photo"],            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;    }}
