var navID		= 'sidecol';	// ID value for menu container div
var waitDelay	= 1000;			// delay in ms before nav turns off



var navTimeout	= null; 		// timeout container for turning off the nav
var currentNavs = new Array();	// container for visible/on navigation elements

// removes whitespace-only text node children
function cleanWhitespace(el) {
	for (var i = 0; i < el.childNodes.length; i++) {
		var node = el.childNodes[i];
		if (node.nodeType == 3 && !/S/.test(node.nodeValue))
			el.removeChild(node);
	}
}

function distanceFromNavRoot(el, navRoot) {
	var dist = 0;
	while ((el != navRoot) && (el != document)) {
		el = el.parentNode;
		if (el.tagName == 'UL') dist++;
	}
	
	if (el == document) return null;
	return dist;
}

function hasClassName(el, name) {
	var classNames = el.className.split(/\s+/);
	for (var i = 0; i < classNames.length; i++)
		if (classNames[i] == name)
			return true;
	return false;
}

function addClassName(el, name) {
	removeClassName(el, name);
	el.className += ' ' + name;
}

function removeClassName(el, name) {
	var classNames = el.className.split(/\s+/);
	el.className = '';
	for (var i = 0; i < classNames.length; i++)
		if (classNames[i] != name)
			el.className +=  ' ' + classNames[i];
}


// b/c IE can't handled selectors for multiple classes (div.classOne.classTwo {})
// we need to concat the 'BU*' and 'over' classes, when applicable
function overClassFor(el) {
	if (hasClassName(el,'BU1')) return 'BU1over';
	if (hasClassName(el,'BU2')) return 'BU2over';
	if (hasClassName(el,'BU3')) return 'BU3over';
	return 'over';
}

function clearNavs(fromLevel) {
	var el;
	for (var i = fromLevel; i < currentNavs.length; i++) {
		if (el = currentNavs[i]) {
			if (el.getElementsByTagName('A').length > 0)
				removeClassName(el,overClassFor(el));
			if (el.lastChild.tagName == "UL")
				el.lastChild.style.display = 'none';
		}
		currentNavs[i] = null;
	}
}


function rollOnLI(e) {
	clearTimeout(navTimeout);
	if (currentNavs[this.level] && (currentNavs[this.level] != this)) {
		clearNavs(this.level);
	}
	currentNavs[this.level] = this;

	if (this.getElementsByTagName('A').length > 0)
		addClassName(this,overClassFor(this));
	if (this.lastChild.tagName == "UL")
		this.lastChild.style.display = 'block';
}


function rollOffLI(e) {
	clearTimeout(navTimeout);
	navTimeout = setTimeout('clearNavs(' + this.level + ');', waitDelay);
}

function activateMenu() {
	if ((! document.getElementById) || (! document.getElementsByTagName)) return;

	// get the root element of the menu
	var navRoot = document.getElementById(navID);
	
	// get all the list items within the menu
	var lis = navRoot.getElementsByTagName("LI");
	
	for (i = 0; i < lis.length; i++) {
		cleanWhitespace(lis[i]);
		lis[i].level = distanceFromNavRoot(lis[i], navRoot) - 1;
			
		lis[i].onmouseover = rollOnLI;
		lis[i].onmouseout = rollOffLI;
	}
}
