
var autoHideTime = 200;
var ie = document.all;
var firefox = document.getElementById &&! document.all;
var opera = window.opera?1:0;
var safari = (navigator.appVersion.toLowerCase().indexOf("safari") >= 1)
var ie6 = false/*@cc_on || @_jscript_version < 5.7@*/;
var os = "";



if(safari){
	os="safari"
}else 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.menuType = menuType;
	ddl.menuType = menuType;
	
	ddl.init = true;
	
	
	
}

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 changeallobjectvisibilities() {

    //check all dropdowns. if any are visible, the objects are hidden, and vice versa
    var menuitems = document.getElementsByTagName('div');
    var visibility = 'visible';

    if (menuitems.length == 0)
        return;

    for (var num = 0; num < menuitems.length; num++) {
        if (menuitems[num].id.length > 19) {
            
            if (menuitems[num].id.substr( 0, 19) == 'ddldropdownmenuitem') {
                if (menuitems[num].style.visibility == 'visible') {
                    visibility = 'hidden';
                }
            }
            
        }
    }


    
    
    var elem = document.getElementsByTagName('object');

    if (elem.length == 0)
        return;

    for (var num = 0; num < elem.length; num++) {
        elem[num].style.visibility = visibility;
    }
}

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
		var tries = 10;
		
		while(ddl.style.left == 0 && ddl.style.top == 0 && tries>0 ){
			
			tries--;
			switch(ddl.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';
							//ddl.style.width = lnk.offsetWidth + '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")-8)+ '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;
					}
			}
			
		
		}
		
		//if(ddl.style.left == 0 && ddl.style.top == 0)
		//		alert(ddl.style.left + ", " + ddl.style.top + ", " + os + ", " + ddl.menuType + ", " + ddl.id );
		
		if(os =='safari'){//safari doesn't support the dropdowns...
			ddl.style.zorder=-1;
			ddl.style.visibility='hidden';
		}else{
			ddl.style.zorder=-1;
			ddl.style.visibility='visible';
		}
		
	}
	changeallobjectvisibilities();
	
}

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;
			}
			
			if(os=='firefox' && offsettype=='top'){
				totaloffset += 16;
			}
			

			return totaloffset ;
		//}
		
		
		
}

function totalCustomOffset(child, offsettype, parentTagName){
		var totaloffset=0;
		
		var parentEl=child.offsetParent; 
		while (parentEl!=null){
			if(parentEl.tagName.toLowerCase()==parentTagName.toLowerCase()){
				switch (offsettype.toLowerCase()){
					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 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);
	}

	changeallobjectvisibilities();
}


