// global menu state
var menuReady = false;

// pre-cache menubar image pairs
if (document.images) {
    var imagesNormal = new Array();
    imagesNormal["tHome"] = new Image(27, 77);
    imagesNormal["tHome"].src = "images/nav_home.gif";
    imagesNormal["tAbout"] = new Image(27, 98);
    imagesNormal["tAbout"].src  = "images/nav_about.gif";
    imagesNormal["tArch"] = new Image(27, 119);
    imagesNormal["tArch"].src  = "images/nav_arch.gif";
    imagesNormal["tExp"] = new Image(27, 114);
    imagesNormal["tExp"].src  = "images/nav_exp.gif";
    imagesNormal["tCode"] = new Image(27, 197);
    imagesNormal["tCode"].src  = "images/nav_code.gif";
    imagesNormal["tRes"] = new Image(27, 114);
    imagesNormal["tRes"].src  = "images/nav_res.gif";

    var imagesHilite = new Array();
    imagesHilite["tHome"] = new Image(27, 77);
    imagesHilite["tHome"].src = "images/nav_home_over.gif";
    imagesHilite["tAbout"] = new Image(27, 98);
    imagesHilite["tAbout"].src  = "images/nav_about_over.gif";
    imagesHilite["tArch"] = new Image(27, 119);
    imagesHilite["tArch"].src  = "images/nav_arch_over.gif";
    imagesHilite["tExp"] = new Image(27, 114);
    imagesHilite["tExp"].src  = "images/nav_exp_over.gif";
    imagesHilite["tCode"] = new Image(27, 197);
    imagesHilite["tCode"].src  = "images/nav_code_over.gif";
    imagesHilite["tRes"] = new Image(27, 114);
    imagesHilite["tRes"].src  = "images/nav_res_over.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 "";
}


// specifications for menu contents and menubar image associations
// menu arrays begin here
var menus = new Array();
menus[0] = {mBarImgId:"menuImg_1",
            mBarImgNormal:imagesNormal["tHome"],
            mBarImgHilite:imagesHilite["tHome"],
            menuItems:[],
            elemId:""
           };
menus[1] = {mBarImgId:"menuImg_2",
            mBarImgNormal:imagesNormal["tAbout"],
            mBarImgHilite:imagesHilite["tAbout"],
            menuItems:[ {text:"Description of firm", href:"description.html", target:"mainFrame"},
                        {text:"Experience", href:"experience.html", target:"mainFrame"},
                        {text:"Contact page", href:"contact.html", target:"mainFrame"}
                      ],
            elemId:""
           };
menus[2] = {mBarImgId:"menuImg_3", 
            mBarImgNormal:imagesNormal["tArch"],
            mBarImgHilite:imagesHilite["tArch"],
            menuItems:[ {text:"Commercial projects", href:"commercial.html", target:"mainFrame"},
                        {text:"Residential projects", href:"residential.html", target:"mainFrame"}
                      ],
            elemId:""
           };

menus[3] = {mBarImgId:"menuImg_4", 
            mBarImgNormal:imagesNormal["tExp"],
            mBarImgHilite:imagesHilite["tExp"],
            menuItems:[ {text:"Code and zoning consulting", href:"consulting.html", target:"mainFrame"}
                      ],
            elemId:""
           };
menus[4] = {mBarImgId:"menuImg_5", 
            mBarImgNormal:imagesNormal["tCode"],
            mBarImgHilite:imagesHilite["tCode"],
            menuItems:[ {text:"Forms and information", href:"forms.html", target:"mainFrame"},
                        {text:"Apartment approvals", href:"apartment.html", target:"mainFrame"},
                        {text:"Equipment Use Permits", href:"equipment.html", target:"mainFrame"},
                        {text:"C of O", href:"cofo.html", target:"mainFrame"},
                        {text:"Restaurant approvals", href:"restaurant.html", target:"mainFrame"},
                        {text:"Frequently Asked Questions (FAQ)", href:"faq.html", target:"mainFrame"}
                      ],
            elemId:""
           };

menus[5] = {mBarImgId:"menuImg_6", 
            mBarImgNormal:imagesNormal["tRes"],
            mBarImgHilite:imagesHilite["tRes"],
            menuItems:[ {text:"Architectural resources", href:"resources.html", target:"mainFrame"},
                        {text:"Building products", href:"products.html", target:"mainFrame"},
                        {text:"Building Information System (BIS) online", href:"http://a810-bisweb.nyc.gov/bisweb/bsqpm01.jsp", target:"mainFrame"},
                        {text:"NYC Building Code", href:"http://www.ci.nyc.ny.us/html/dob/html/reference/code_internet.shtml", target:"mainFrame"},
                        {text:"NYC Zoning Resolutions", href:"http://www.ci.nyc.ny.us/html/dcp/html/zone/zonetext.shtml", target:"mainFrame"}
                      ],
            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;
    


    // use menus array to drive div creation loop
    for (var i = 0; i < menus.length; i++) {
        menuDiv = document.createElement("ul");
        menuDiv.id = "popupmenu" + i;
        // preserve menu's ID as property of the menus array item
        menus[i].elemId = "popupmenu" + i;
        menuDiv.className = "menuWrapper";

        // set stacking order in case other layers are around the page
        menuDiv.style.zIndex = 1000;
        
		//var prevItem = 0;
        // assemble menu item elements for inside menu div
        for (var j = 0; j < menus[i].menuItems.length; j++) {
            menuItem = document.createElement("li");
            menuItem.id = "popupmenuItem_" + i + "_" + j;
            menuItem.className = "menuItem";

            itemLink = document.createElement("a");
            itemLink.href = menus[i].menuItems[j].href;
			if (menus[i].menuItems[j].target) {
				itemLink.target = menus[i].menuItems[j].target;
				}
            itemLink.className = "itemLink";
            //itemLink.onmouseover = toggleHighlight;
            //itemLink.onmouseout = toggleHighlight;
			itemLink.onmouseover = keepMenu;
        	itemLink.onmouseout = requestHide;
			itemLink.onclick = hideMenus;
            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()", 1000);
}

// "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){

//}

// 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();

            } else {

                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;
    }
}




