// This was originally based on:
// http://www.codestyle.org/javascript/dom/css/visibility-HorizontalMenus.shtml
// Copyright (c) 2001-2005, Philip Shaw
// This version is by K. Chayka, at:
// http://accessat.c-net.us/articles/menu/h_drop-down-menu.html
// If you take the code, please give credit where it is due.  thanks!


// Nothing in this script should need to be modified, unless you change class or id names from those in the supplied sample.

var mOpen   = null; // currently open menu
var mClose  = null; // menu to close
var menu    = new Array();
var mCount  = 0;
// browser must support the following methods & attributes
var DOMsupport = document.getElementById;

function buildMenus() {
        DOMsupport = document.getElementById && document.body.firstChild && document.body.lastChild;
        if (!DOMsupport) {return;} // browser doesn't support required methods

        setMenuVars();  // get the menu variables

// insert the submenus as nested lists
        for(i=1; i<=mCount; i++) {
                var parentElm = document.getElementById("mainmenu"+i);
                if (parentElm) {
                        if (menu[i].size > 0) {  // skip if no submenu
                        // change class on main menu link to show submenu indicator
                                parentElm.firstChild.className = "mainmenu more";
                        // make <ul> element
                                var newMenu = document.createElement("ul");

                        // insert individual links
                                for(j=1; j<=menu[i].size; j++) {
                                // make <a> element
                                        newLink = document.createElement("a");
                                        newLink.setAttribute("href",menu[i].item[j].itemURL);
                                        newLink.setAttribute("title",menu[i].item[j].itemTitle);
                                        newText = document.createTextNode(menu[i].item[j].itemName);
                                        newLink.appendChild(newText);
                                // make <li> element and append <a>
                                        newListItem = document.createElement("li");
                                        newListItem.appendChild(newLink);
                                // append <li> element to <ul>
                                        newMenu.appendChild(newListItem);
                                }
                        // set class name on nested <ul>
                                newMenu.setAttribute("id","submenu"+i);
                                newMenu.className = "submenu";
                                newMenu.style.display = "none";
                        // append <ul> element to associated main menu <li>
                                parentElm.appendChild(newMenu);
                        }

                        // set mouseover/out events (capture=true) on the main menu item
                        if (parentElm.addEventListener) { // standard W3C event listener
                                parentElm.addEventListener("mouseover",menuSet,true);
                                parentElm.addEventListener("mouseout",menuSet,true);
                        } else if (parentElm.attachEvent && parentElm.setCapture) { // non-std WinIE
                                parentElm.onmouseenter = menuSet;  // IE equivalent of
                                parentElm.onmouseleave = menuSet;  // event capture
                        }
                }
        }
}

function makeArray(n) {
        this.size = n;
        for(i=1; i<=n; i++){
                this[i] = 0;
        }
        return(this);
}

// Main menu group constructor:
function menuGroup(n) {
        this.size = n;              // number of submenu links
        this.item = new makeArray(n);
}

// Submenu list item constructor:
function menuItem(itemName,itemURL,itemTitle) {
        this.itemName  = itemName;  // link label
        this.itemURL   = itemURL;   // link url
        this.itemTitle = itemTitle; // title attribute
}

// *** End menu building


// *** Functions below are called by mouseover/mouseout

// Mouseover a menu
function menuOver(m){
        if (DOMsupport) {
                dom = document.getElementById("submenu" + m);
                if (dom) {
                        if (mOpen == dom) {       // already open
                                clearTimeout(mClose);   // don't close
                        } else {
                                if (mOpen != null) {    // another is open
                                        clearTimeout(mClose);
                                        hideNow();            // close it now
                                }
                        }
                        mOpen = dom;                   // set new open menu
                        mOpen.style.display = "block"; // show it
                }
        }
}

// Close menu after timeout
function menuOut(m){
        if (DOMsupport) {
                dom = document.getElementById("submenu" + m);
                if (dom) {
                        mOpen = dom;    // get current open menu
                        mClose = window.setTimeout("hideNow();",1000);  // auto-close after 500ms
                }
        }
}

// Close previously open menu now
function hideNow(){
        if ((mOpen.style) && (mOpen.style.display)) {
                mOpen.style.display = "none";
        }
}

// Mouse event handler - event capture
function menuSet(e) {
        if (!e) var e = window.event;

        var menuNbr = this.getAttribute("id").substr(8);  // digit part of id
        if (e.type == "mouseover" || e.type == "mouseenter") {menuOver(menuNbr);}
        else {menuOut(menuNbr);}
}

// the end

