// 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();",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