/**
 * dhtml menu rendering and event handling
 * author: David Shapiro
 * based on code by: Danny Goodman, Javascript & DHTML Cookbook, 2nd Ed. 2007
 */

 var MenuMgr = {
 	timer : null,
	menuReady : false,
 
swap : function (evt) {
    evt = (evt) ? evt : ((event) ? event : null);
    if (typeof MenuMgr.menuReady != "undefined") {
        if (evt && (document.getElementById && document.styleSheets) && MenuMgr.menuReady) {
            var elem = (evt.target) ? evt.target : evt.srcElement;
            if (elem.className == "menuImg") {
                if (evt.type == "mouseover") {
                    MenuMgr.showMenu(menus[elem.id].elemId);
                    elem.src = menus[elem.id].mBarImgHilite.src;
               } else if (evt.type == "mouseout") {
                    MenuMgr.requestHide();
                }
                evt.cancelBubble = true;
            }
        }
    }
},
 
assignLabelEvents : function(){
    var elem;
    for (var i = 0; i < menus.length; i++) {
        elem = document.getElementById(menus[i].mBarImgId);
        elem.onmouseover = MenuMgr.swap;
        elem.onmouseout = MenuMgr.swap;
    }
},
 
makeHashes : function(){
    for (var i = 0; i < menus.length; i++) {
        menus[menus[i].elemId] = menus[i];
        menus[menus[i].mBarImgId] = menus[i];
    }
},
 
makeHashes2 : function(cnt){
    for (var j = 0; j < menus[cnt].menuItems.length; j++) {
		menus[menus[cnt].menuItems[j].text] = menus[cnt];
    }
},

positionMenu : function(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);
	var position = menus[menuId].position;
	if( position == "top"){
    	menuDiv.style.left = offsetLeft + "px";
    	menuDiv.style.top = offsetTop + mBarImg.height + "px";
	}else if( position == "side"){
    	menuDiv.style.left = offsetLeft + 168 + "px";
    	menuDiv.style.top = offsetTop + "px";	
	}
},
 
showMenu : function(menuId){
    if (MenuMgr.menuReady) {
        MenuMgr.keepMenu();
        MenuMgr.hideMenus();
        MenuMgr.positionMenu(menuId);
        var menu = document.getElementById(menuId);
        menu.style.visibility = "visible";
    }
},
 
swap2 : function(evt){
    evt = (evt) ? evt : ((event) ? event : null);
    if (typeof MenuMgr.menuReady != "undefined") {
        if (evt && (document.getElementById && document.styleSheets) && MenuMgr.menuReady) {
            var elem = (evt.target) ? evt.target : evt.srcElement;
            if (elem.className == "menuImg") {
                if (evt.type == "mouseover") {
                    MenuMgr.showMenu(menus[elem.id].elemId);    //undef.
 					elem.src = imagesHilite[elem.id].src;
                } else if (evt.type == "mouseout") {
					elem.src = imagesNormal[elem.id].src;
					MenuMgr.requestHide();
                }
                evt.cancelBubble = true;
            }
        }
    }
},
 
hideMenus : function(){
    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";
    }
},

requestHide : function(){
    this.timer = setTimeout("MenuMgr.hideMenus()", 250);
},
 
keepMenu : function() {
    clearTimeout(MenuMgr.timer);
},

cancelAll : function(){
    MenuMgr.keepMenu();
    MenuMgr.menuReady = false;
},
 
makeMenus : function(){
    var menuDiv, menuItem, itemLink, mbarImg, imgNode, offsetLeft, offsetTop;
    var menuItemH = (parseFloat(CSSRuleValues.menuItemHeight));
    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 = MenuMgr.keepMenu;
        menuDiv.onmouseout = MenuMgr.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.onclick = MenuMgr.hideMenus;
            menuItem.style.top = menuItemH * j + "px";
            itemLink = document.createElement("a");
            itemLink.href = menus[i].menuItems[j].href;
            itemLink.className = "menuItem";
			imgNode = document.createElement("img");
			imgNode.src = menus[i].menuItems[j].src;
			imgNode.className = "menuImg";
			imgNode.id = menus[i].menuItems[j].text;
            imgNode.onmouseover = MenuMgr.swap2;
            imgNode.onmouseout = MenuMgr.swap2;
			itemLink.appendChild(imgNode);
            menuItem.appendChild(itemLink);
            menuDiv.appendChild(menuItem);
        }
        // append each menu div to the body
        document.body.appendChild(menuDiv);
		MenuMgr.makeHashes2(i);
    }
    MenuMgr.makeHashes();
    MenuMgr.assignLabelEvents();
    // pre-position menu
    for (i = 0; i < menus.length; i++) {
        MenuMgr.positionMenu(menus[i].elemId);
    }
    MenuMgr.menuReady = true;
},
 
 initMenus : function() {
    if (document.getElementById && document.styleSheets) {
        setTimeout("MenuMgr.makeMenus()", 5);
        window.onunload = MenuMgr.cancelAll;
    }
 }
		
 }
 addOnLoadEvent(function(){MenuMgr.initMenus()});