function addsfhover(eid) {
	thisEle = document.getElementById(eid);
	if (thisEle.className.indexOf("sfhover") == -1) {
		thisEle.className+=" sfhover";
		//thisEle.style.border = '1px solid red';
	}
}

function removesfhover(eid) {
	thisEle = document.getElementById(eid);
	if (thisEle) {
		thisEle.className=thisEle.className.replace(new RegExp("sfhover\\b"), "");
		thisEle.className=thisEle.className.replace(new RegExp(" sfhover\\b"), "");
		//thisEle.style.border = '0';
	}
}
function removeHovers () {
	if (cancelTimeout == 0) {
		var nfEls = document.getElementById("nav").getElementsByTagName("LI");
		for (var i=0; i<nfEls.length; i++) {
			if (nfEls[i].id.length) removesfhover(nfEls[i].id);
		}
	}
}
function removeSubHovers (tlid,cid) {
	try {
		var nfEls = document.getElementById(tlid).getElementsByTagName("LI");
		ancestors = cid;
		for (var i=0; i<nfEls.length; i++) {
			// remove sfhovers on all elements except any ancestors of the current selected element
			if (ancestors.indexOf(nfEls[i].id) == -1) {
				if (nfEls[i].id.length) removesfhover(nfEls[i].id);
			}
		}
	} catch(err) {} //try catch in here to prevent error on bizarre bubble event
}
var cancelTimeout = 0;
var speed = 750;
var currentTopLevel = "";
sfHover = function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function(ev) {
			if (this.id == "") {
				tryGetParentLIid = this.parentNode;
				tryGetParentLIid = tryGetParentLIid.parentNode.id;
				if (tryGetParentLIid.indexOf("toplevel") > -1) tryGetParentLIid = 'item';
				//getLasti = tryGetParentLIid.split("-i");
				//if (getLasti.length > 1) tryGetParentLIid = "i" + getLasti[getLasti.length - 1];
				r = Math.floor(Math.random()*50000);
				this.id = tryGetParentLIid + "-" + r;
			}
			//document.title = this.id;
			if (this.id.indexOf("toplevel") > -1) {				
				removeHovers();
				currentTopLevel = this.id;
			} else if (currentTopLevel != "") {
				removeSubHovers(currentTopLevel,this.id);
			}
			cancelTimeout = 1;
			addsfhover(this.id);
			if (window.event) window.event.cancelBubble = true; else ev.stopPropagation(); //important, stop propogation of current event down the bubble
		}
		sfEls[i].onmouseout=function() {
			try {xo = clearTimeout(xx);} catch(err) {}
			xx = setTimeout('removeHovers()', speed);
			cancelTimeout = 0;
		}
	}
}

if (window.addEventListener) 
	window.addEventListener("load", sfHover, false)
else if (window.attachEvent) 
	window.attachEvent("onload", sfHover);