
var autoHideTime = 200;
var ie = document.all;
var firefox = document.getElementById &&! document.all;
var opera = window.opera?1:0;
var os = "";



if(opera){
	os="opera";
}else if(firefox){
	os = "firefox";
}else if(ie){
	os = "ie";
}


function initializeMenu(sName, menuType){
//menutype is either "menu" or "submenu" - a submenu has parents to keep visible when in focus (.style.parent), and aligns itself to the right of the key anchor.
//A menu aligns itself to the bottom of the key anchor
	
	var lnk = document.getElementById("lnk" + sName);
	var ddl = document.getElementById("ddl" + sName);
	
	var img = document.getElementById("img" + sName);
	
	if(lnk){
		lnk.onmouseover=function(){menu_mouseEnter(sName)};
		lnk.onmouseout=function(){menu_mouseLeave(sName)};
	}
	if(ddl){
		ddl.onmouseover=function(){menu_mouseEnter(sName)};
		ddl.onmouseout=function(){menu_mouseLeave(sName)};
	}
	if(img){
		img.onmouseover=function(){menu_mouseEnter(sName)};
		img.onmouseout=function(){menu_mouseLeave(sName)};
	}
	
	
	
	ddl.style.visibility='hidden';
	lnk.style.timeoutid=0;
	ddl.style.timeoutid=0;
	lnk.style.menutype = menuType;
	ddl.style.menutype = menuType;
}

function menu_mouseLeave(sName){
	//set timeout for menu disappearing
	var lnk = document.getElementById("lnk" + sName);
	var ddl = document.getElementById("ddl" + sName);
	
	lnk.style.timeoutid = setTimeout(function(){hidemenu(sName)},autoHideTime);
	ddl.style.timeoutid = lnk.style.timeoutid;
}

function menu_mouseEnter(sName){
	var lnk = document.getElementById("lnk" + sName);
	var ddl = document.getElementById("ddl" + sName);
	
	//remove any disappearing timeout ids, if any
	
	if(lnk.style.timeoutid!=0){
		clearTimeout(lnk.style.timeoutid);
		lnk.style.timeoutid=0;
		ddl.style.timeoutid=0;
	}
	
	showmenu(sName);
}

function showmenu(sName){

	var lnk = document.getElementById("lnk" + sName);
	var ddl = document.getElementById("ddl" + sName);
	
	
	
	
	if(ddl.style.visibility!='visible'){
		//change the positioning depending on browser
		switch(ddl.style.menutype){
			case 'menu':
				switch (os){
					case 'ie':
						ddl.style.left=lnk.offsetLeft;
						ddl.style.top=lnk.offsetTop + lnk.offsetHeight;
						break;
					case 'firefox':
						ddl.style.left=lnk.offsetLeft + 'px';
						ddl.style.top=(totalOffset(lnk,"top")+ lnk.offsetHeight )+ 'px';
						break;
					case 'opera':
						ddl.style.left=lnk.offsetLeft;
						ddl.style.top=(totalOffset(lnk,"top"))+ lnk.offsetHeight;
						break;
					default://follow the firefox rules if the browser is unknown...
						ddl.style.left=lnk.offsetLeft + 'px';
						ddl.style.top=(totalOffset(lnk,"top")+ lnk.offsetHeight )+ 'px';
						break;
				}
				break;
			case 'submenu':
				switch (os){
					case 'ie':
						//alert (totalDivOffset(lnk,'width'));
						//alert (lnk.width);
						ddl.style.left=totalDivOffset(lnk,'left')+totalDivOffset(lnk,'width');
						ddl.style.top=totalOffset(lnk,"top") ;
						break;
					case 'firefox':
						ddl.style.left=(totalDivOffset(lnk,'left')+totalDivOffset(lnk,'width')) + 'px';
						ddl.style.top=totalOffset(lnk,"top")+ 'px';
						break;
					case 'opera':
						ddl.style.left=totalDivOffset(lnk,'left')+totalDivOffset(lnk,'width');
						ddl.style.top=totalOffset(lnk,"top");
						break;
					default://follow the firefox rules if the browser is unknown...
						ddl.style.left=lnk.offsetLeft + lnk.offsetWidth + 'px';
						ddl.style.top=totalOffset(lnk,"top")+ 'px';
						break;
				}
		}
		
		
		ddl.style.zorder=-1;
		ddl.style.visibility='visible';
	}
	
	
}

function totalOffset(what, offsettype){
		var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
		
		//if(os == 'opera' || os=='firefox'){
			var parentEl=what.offsetParent; 
			
			while (parentEl!=null){
				totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
				parentEl=parentEl.offsetParent;
			}

			return totaloffset ;
		//}
		
		
		
}

function totalDivOffset(child, offsettype){
		var totaloffset=0;
		
		var parentEl=child.offsetParent; 
		
		while (parentEl!=null){
			if(parentEl.tagName.toLowerCase()=='div'){
				switch (offsettype){
					case 'top':
						totaloffset = parentEl.offsetTop;
						break;
					case 'left':
						totaloffset = parentEl.offsetLeft;
						break;
					case 'width':
						totaloffset = parentEl.offsetWidth;
						break;
					case 'height':
						totaloffset = parentEl.offsetHeight;
						break;
				}
				return totaloffset;
			}
			parentEl=parentEl.offsetParent;
		}

		return totaloffset ;
		
		
		
		
}



function hidemenu(sName){
	var lnk = document.getElementById("lnk" + sName);
	var ddl = document.getElementById("ddl" + sName);
	
	//if any children are visible then don't make invisible
	var visibleChildren = false;
	
	var menuitems=document.getElementsByTagName("div");
	
	for(var num=0;num<menuitems.length;num++){
		if(menuitems[num].id != ddl.id && menuitems[num].id.substring(0,ddl.id.length)==ddl.id && menuitems[num].style.visibility=='visible'){
			visibleChildren=true;
			break;
		}
	}
	
	//remove any disappearing timeout ids, if any
	if(lnk.style.timeoutid!=0){
		clearTimeout(lnk.style.timeoutid);
		lnk.style.timeoutid=0;
		ddl.style.timeoutid=0;
	}
	//alert(visibleChildren);
	if(!visibleChildren){
		ddl.style.visibility='hidden';
	}else{
		//create another timeout
		menu_mouseLeave(sName);
	}
	
	
	
}