var disappeardelay=50;  //menu disappear speed onMouseout (in miliseconds)
var hidemenu_onclick="yes"; //hide menu when user clicks within menu?
if (hidemenu_onclick=="yes") document.onclick=hidemenu;
//************   If you need a second drop, use a 3rd param (the eid element) in dropdownmenu(), make sure to set style in stylesheet.
//****************** No further editing needed

var ie4=document.all
var ns6=document.getElementById&&!document.all

//1. dropdownmenu (object, event, elementid[optional]) - 
function dropdownmenu(obj, e, eid){
	if (window.event) event.cancelBubble=true; //DOM:event.cancelBubble
	else if (e.stopPropagation) e.stopPropagation() //DOM:event.stopPropagation
	clearhidemenu() //3.
	dropmenuobj=(eid)? document.getElementById(eid) : document.getElementById("subnav");
	if (ie4||ns6){
		showhide(dropmenuobj.style, e, "visible", "hidden") //4.
		dropmenuobj.x=getposOffset(obj, "left") //5.
		dropmenuobj.y=getposOffset(obj, "top")
		dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px" //6.
		dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
	}
	return clickreturnvalue() //7.
}

//3. hides menu
function clearhidemenu(){
	if (typeof delayhide!="undefined") clearTimeout(delayhide)
}

//4. showhide(object, event, visible, hidden, menu width)
function showhide(obj, e, visible, hidden){
	if (ie4||ns6) dropmenuobj.style.left=dropmenuobj.style.top="-500px";
	if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover") obj.visibility=visible;
	else if (e.type=="click") obj.visibility=hidden;
}

//5. getposOffset (object, which position:left, top, right, bottom)
function getposOffset(obj, offsettype){
	var totaloffset=(offsettype=="left")? obj.offsetLeft : obj.offsetTop;
	var parentEl=obj.offsetParent;
	while (parentEl!=null){
		totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
		parentEl=parentEl.offsetParent;
	}
	return totaloffset;
}

//6. clearbrowseredge (object, which param:left, top, right, bottom) sets absolute position;
function clearbrowseredge(obj, whichedge){
	var edgeoffset=0;
	if (whichedge=="rightedge"){
		var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15; //8.
		dropmenuobj.contentmeasure=dropmenuobj.offsetWidth;
		if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure) edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth;
	} else {
		var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset;
		var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18;
		dropmenuobj.contentmeasure=dropmenuobj.offsetHeight;
		if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up?
			edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
			if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either?
				edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge
		}
	}
	return edgeoffset
}

//7. determines whether to activate results in dropdownmenu function
function clickreturnvalue(){
	if (ie4||ns6) return false
	else return true
}

//8. DOM:document.compatMode Indicates whether the document is rendered in Quirks mode or Strict mode.
function iecompattest(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}



//9. On mouseout event dynamichide(event)
function dynamichide(e){
	if (ie4&&!dropmenuobj.contains(e.toElement)) delayhidemenu() //10.
	else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) //12.
	delayhidemenu()
}

//10. delayhidemenu() delays menu hide so there is time to mouseover
function delayhidemenu(){
	if (ie4||ns6) delayhide=setTimeout("hidemenu()",disappeardelay) //11.
}

//11. hidemenu(event) hides menu
function hidemenu(e){
	if (typeof dropmenuobj!="undefined"){
	if (ie4||ns6) dropmenuobj.style.visibility="hidden"
	}
}

//12. contains_ns6(event.currentTarget, event.relatedTarget) 
function contains_ns6(a, b) {
	while (b.parentNode)
		if ((b = b.parentNode) == a) return true;
	return false;
}

// Enhanced by Anthony Carcelli, based off a more basic version.
