// 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
