﻿// 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.zIndex = "99";
                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
}

/*
// Submenu list item constructor:
function menuItem(itemName,itemURL,itemTitle, itemHasSubMenu) {
this.itemName  = itemName;  // link label
this.itemURL   = itemURL;   // link url
this.itemTitle = itemTitle; // title attribute
this.itemHasSubMenu = itemHasSubMenu; // sub-menu 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
            mOpen.style.width = "175px"; // 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();", 500);  // 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
