// May 22, 2006
// Provides javascript services to display ISR web site pulldown menus.

// global menu state
var menuReady=false;
var myI=new Image();
myI.src="/graphics/SportsRepLogo.gif";

// precache menubar image pairs
if (document.images) {
    var imagesNormal=new Array();
    imagesNormal["home"]=new Image(29,83);
    imagesNormal["home"].src="/graphics/menu/home.jpg";
    imagesNormal["football"]=new Image(29,103);
    imagesNormal["football"].src="/graphics/menu/football.jpg";
    imagesNormal["recruit"]=new Image(29,109);
    imagesNormal["recruit"].src="/graphics/menu/recruit.jpg";
    imagesNormal["basketball"]=new Image(29,111);
    imagesNormal["basketball"].src="/graphics/menu/basketball.jpg";
    imagesNormal["olympics"]=new Image(29,146);
    imagesNormal["olympics"].src="/graphics/menu/olympics.jpg";
    imagesNormal["irishinfo"]=new Image(29,97);
    imagesNormal["irishinfo"].src="/graphics/menu/irishinfo.jpg";
    imagesNormal["advertise"]=new Image(29,121);
    imagesNormal["advertise"].src="/graphics/menu/advertise.jpg";

    var imagesHilite=new Array();
    imagesHilite["home"]=new Image(20,83);
    imagesHilite["home"].src="/graphics/menu/home_on_gr.jpg";
    imagesHilite["football"]=new Image(20,103);
    imagesHilite["football"].src="/graphics/menu/football_on_gr.jpg";
    imagesHilite["recruit"]=new Image(20,109);
    imagesHilite["recruit"].src="/graphics/menu/recruit_on_gr.jpg";
    imagesHilite["basketball"]=new Image(20,111);
    imagesHilite["basketball"].src="/graphics/menu/basketball_on_gr.jpg";
    imagesHilite["olympics"]=new Image(20,146);
    imagesHilite["olympics"].src="/graphics/menu/olympics_on_gr.jpg";
    imagesHilite["irishinfo"]=new Image(20,97);
    imagesHilite["irishinfo"].src="/graphics/menu/irishinfo_on_gr.jpg";
    imagesHilite["advertise"]=new Image(20,121);
    imagesHilite["advertise"].src="/graphics/menu/advertise_on_gr.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 som critical menu style sheet attribue values
var CSSRuleValues={
    menuItemHeight:"25px",
    menuItemWidth:"162px",
    menuItemLineHeight:"1.2em",
    menuWrapperBorderWidth:"2px",
    menuWrapperPadding:"3px",
    defaultBodyFontSize:"12px"
};

// specifications for menu contents and menubar image associations
var menus=new Array();
menus[0]={
    mBarImgId:"menuImg_1",
    mBarImgNormal:imagesNormal["home"],
    mBarImgHilite:imagesHilite["home"],
    menuItems:[],
    elemId:""
    };
menus[1]={
    mBarImgId:"menuImg_2",
    mBarImgNormal:imagesNormal["football"],
    mBarImgHilite:imagesHilite["football"],
    menuItems:[
        {text:"Football Home",href:"/apps/pbcs.dll/section?category=football",target:"_top"},
        {text:"Recruiting",href:"/apps/pbcs.dll/section?category=recruiting",target:"_top"},
        {text:"Rankings",href:"/apps/pbcs.dll/section?category=rankings",target:"_top"},
        {text:"Statistics",href:"/apps/pbcs.dll/section?category=statistics",target:"_top"},
        {text:"Roster",href:"/apps/pbcs.dll/section?category=rosters",target:"_top"},
        {text:"Schedule",href:"/apps/pbcs.dll/section?category=schedules",target:"_top"},
        {text:"Team Depth Charts",href:"/apps/pbcs.dll/section?category=charts",target:"_top"}
        ],
    elemId:""
    };
menus[2]={
    mBarImgId:"menuImg_3",
    mBarImgNormal:imagesNormal["recruit"],
    mBarImgHilite:imagesHilite["recruit"],
    menuItems:[
        {text:"Recruiting Home",href:"/apps/pbcs.dll/section?category=recruiting",target:"_top"},
        {text:"Tom Lemming",href:"/apps/pbcs.dll/section?category=columnists02",target:"_top"},
        {text:"Current Commitments",href:"/apps/pbcs.dll/section?category=recruiting01",target:"_top"},
        {text:"Rankings",href:"/apps/pbcs.dll/article?AID=/99999999/RECRUITING02/60611001/-1/FOOTBALL_INDEX&art2",target:"_top"}
        ],
    elemId:""
    };
menus[3]={
    mBarImgId:"menuImg_4",
    mBarImgNormal:imagesNormal["basketball"],
    mBarImgHilite:imagesHilite["basketball"],
    menuItems:[
        {text:"Men\'s Basketball",href:"/apps/pbcs.dll/section?category=mens_basketball",target:"_top"},
        {text:"Rankings",href:"/apps/pbcs.dll/section?category=rankings",target:"_top"},
        {text:"Statistics",href:"/apps/pbcs.dll/section?category=statistics",target:"_top"},
        {text:"Roster",href:"/apps/pbcs.dll/section?category=rosters",target:"_top"},
        {text:"Schedule",href:"/apps/pbcs.dll/section?category=schedules",target:"_top"},
        {text:"",href:"#",target:""},
        {text:"Women\'s Basketball",href:"/apps/pbcs.dll/section?category=womens_basketball",target:"_top"},
        {text:"Rankings",href:"/apps/pbcs.dll/section?category=rankings",target:"_top"},
        {text:"Statistics",href:"/apps/pbcs.dll/section?category=statistics",target:"_top"},
        {text:"Roster",href:"/apps/pbcs.dll/section?category=rosters",target:"_top"},
        {text:"Schedule",href:"/apps/pbcs.dll/section?category=schedules",target:"_top"}
        ],
    elemId:""
    };
menus[4]={
    mBarImgId:"menuImg_5",
    mBarImgNormal:imagesNormal["olympics"],
    mBarImgHilite:imagesHilite["olympics"],
    menuItems:[
        {text:"Olympics Home",href:"/apps/pbcs.dll/section?category=olympic_sports",target:"_top"},
		{text:"Hockey",href:"/apps/pbcs.dll/section?category=hockey",target:"_top"},
        {text:"Schedules",href:"/apps/pbcs.dll/section?category=schedules",target:"_top"}
        ],
    elemId:""
    };
menus[5]={
    mBarImgId:"menuImg_6",
    mBarImgNormal:imagesNormal["irishinfo"],
    mBarImgHilite:imagesHilite["irishinfo"],
    menuItems:[
        {text:"Irish Info Home",href:"/apps/pbcs.dll/section?category=ndinfo",target:"_top"},
        {text:"ND Stadium Seating",href:"http://und.cstv.com/facilities/nd-stadium-seating-chart.html",target:"_blank"},
        {text:"Traffic & Parking Info",href:"http://und.cstv.com/tickets/tickets-parking01.html",target:"_blank"},
        {text:"Schedules",href:"/apps/pbcs.dll/section?category=schedules",target:"_top"},
        {text:"South Bend Weather",href:"http://www.wsbt.com/weather",target:"_blank"}
        ],
    elemId:""
    };
menus[6]={
    mBarImgId:"menuImg_7",
    mBarImgNormal:imagesNormal["advertise"],
    mBarImgHilite:imagesHilite["advertise"],
    menuItems:[
        {text:"Classifieds",href:"/apps/pbcs.dll/classifieds",target:"_top"},
        {text:"Current Ads",href:"/apps/pbcs.dll/section?category=currentads",target:"_top"},
        {text:"Advertise With Us",href:"/apps/pbcs.dll/section?category=advertisewithus",target:"_top"}
        ],
    elemId:""
    };

// create hash table-like lookup for menu objects with id string indexes
function makeHashes() {
    var i=0;
    for (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;
    var i=0;
    for (i=0;i<menus.length;i++) {
        elem=document.getElementById(menus[i].mBarImgId);
        elem.onmouseover=swap;
        elem.onmouseout=swap;
    }
}

// invoked from initMenu(), generates the menu div elements and their contents.
// all this action is invisible to user during construction
function makeMenus() {
    var menuDiv,menuItem,itemLink,mBarImg,targetItem,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 (parseInt(bodyFontSize)==parseInt(CSSRuleValues.defaultBodyFontSize)) {
        if (navigator.appName=="Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win")!=-1) {
            menuItemH=parseInt(parseFloat(CSSRuleValues.menuItemHeight));
            //  menuItemH=22;
        } else {
            // this allows Mozilla to display menus if font sizes as specified
            if (parseInt(bodyFontSize)==19 || parseInt(bodyFontSize)==16 || parseInt(bodyFontSize)==14 || parseInt(bodyFontSize)==12) {
                 menuItemH=22;
            } else {
                return false;
            }
        }
    } else {
        if (navigator.appName=="Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win")!=-1) {
            menuItemH=22;
        } else {
            // this allows Mozilla to display menus if font sizes as specified
            // menuItemH=parseInt(parseFloat(CSSRuleValues.menuItemLineHeight)*bodyFontSize);
            if (parseInt(bodyFontSize)==19 || parseInt(bodyFontSize)==16 || parseInt(bodyFontSize)==14 || parseInt(bodyFontSize)==12) {
                menuItemH=22;
            } else {
                return false;
            }
        }
    }
    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;
    } else {
        heightAdjust-=heightAdjust;
    }
    // use menus array to drive div creation loop
    var i=0;
    for (i=0;i<menus.length;i++) {
        menuDiv=document.createElement("div");
        menuDiv.id="popupmenu"+i;
        // preserve menu's ID as property of the menu array item
        menus[i].elemId="popupmenu"+i;
        menuDiv.className="menuWrapper";
        if (menus[i].menuItems.length>0) {
            if (navigator.appName=="Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win")!=-1) {
                menuDiv.style.width=159+"px";
        } else {
                menuDiv.style.width=161+"px";
        }
            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 even handlers
        menuDiv.onmouseover=keepMenu;
        menuDiv.onmouseout=requestHide;

        // set stacking order in case other layers are around the page
        menuDiv.style.zIndex=100;

        // assemble menu item elements for inside menu div
        var j=0;
        for (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;
            itemLink.target=menus[i].menuItems[j].target;
            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 menage 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() {
    var i=0;
    for (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;
    }
}



