//FocusVision ver.
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera);

function mcoXmlProvider(xmlPath,dataReadyHandler){
    var http_request;
    if (isIE){
        http_request=new ActiveXObject("Msxml2.XMLHTTP");
        http_request.onreadystatechange = function(){onReadyState(http_request);};
    }else{
        http_request=new XMLHttpRequest();
        http_request.onload = function(){onReadyState(http_request);};
    }
    http_request.open("GET",xmlPath,true);
    
    function onReadyState(http_request)
    {
        if (http_request.readyState == 4){
            if (http_request.status == 200) readDom(http_request.responseText);
            else alert('xml http request exception. status code:' + http_request.status);
        }
    }
    
    function readDom(xmlString)
    {
        var xDoc;
        if (isIE){
            xDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
            xDoc.loadXML(xmlString);
        }else if (window.XMLHttpRequest){
            var dom =new DOMParser();
            xDoc = dom.parseFromString(xmlString,'text/xml');
        }            
        xDoc.resolveExternals=false;
        xDoc.async=false;
        if (xDoc!=null) dataReadyHandler(xDoc);
    }

    this.run=function(){
        http_request.send(null);
    }
}

var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera);
var ROOT_ID = "mcoMenuRoot";

var H_WIDTH_LIMIT = window.screen.width - 20;
var PAGE_URL = window.location.pathname.toLowerCase();
if (PAGE_URL.lastIndexOf('/')==PAGE_URL.length-1)
{
   PAGE_URL +="index.jsp";
}

var selectedLevel2;
/*
window.onload = function(){
	H_WIDTH_LIMIT = document.body.clientWidth;
}
*/

window.onresize = function(){
	H_WIDTH_LIMIT = document.body.clientWidth;
	var menu = document.getElementById(ROOT_ID);
	if (selectedLevel2!=null && menu!=null) selectedLevel2.style.left = getClientLeft(menu) + "px";
}
if(typeof(HTMLElement)!="undefined"){
    HTMLElement.prototype.contains=function(obj){
        if (obj==this) return true;
        while (obj=obj.parentNode){if (obj==this) return true;}
        return false;
    }
}
function isNotNullOrEmpty(obj)
{
    if (obj==null) return false;
    if (typeof(obj)=="string" && obj.length>0) return true;
    else return false;
}
function getClientLeft(e)
{
    var offset=e.offsetLeft;
    if(e.offsetParent!=null) offset+=getClientLeft(e.offsetParent);
    return offset;
}


function mcoJSMenu(xmlURL,prDiv,wLimit)
{
    this.versionInfo = "ver 1.30+; Murphy&Co. 2009.";
    var _xml,_rootId,_root,c_li,p_src,p_to;
    if ((typeof(xmlURL)=="string") && xmlURL.length>0 && (typeof(prDiv)=="string") && prDiv.length>0 && (typeof(wLimit)=="number")){
        _xml = xmlURL;
        _rootId = prDiv;
        if (wLimit>0) H_WIDTH_LIMIT = wLimit;
        var xProvider = new mcoXmlProvider(_xml,renderMenu);
        xProvider.run();
    }
    function renderMenu(xDoc)
    {
        _root = new mcoJSMenuContainer(xDoc.childNodes[0]);
        if (isIE){
            _root.attachEvent("onmouseover",function(){onMenuMouseOver(event);});
            _root.attachEvent("onmouseout",function(){onMenuMouseOut(event);});
            _root.attachEvent("onclick",function(){onMenuClick(event);});
        }else{
            _root.addEventListener('mouseover',onMenuMouseOver, false);
            _root.addEventListener('mouseout',onMenuMouseOut, false);
            _root.addEventListener('click',onMenuClick, false);
        }
        document.getElementById(_rootId).appendChild(_root);
        if (selectedLevel2!=null) showSubMenu(selectedLevel2.parentNode);
    }
    function onMenuClick(e)
    {
        e=e||event;
        var obj=e.target?e.target:e.srcElement;
        if (obj.tagName=="A") obj = obj.parentNode;
        if (obj!=undefined && obj.getAttribute("url")!=null){
            if (obj.getAttribute("target")=="_blank") window.open(obj.getAttribute("url"));
            else window.location = obj.getAttribute("url");
            //omniture code to do
            if(typeof s_gi !='undefined'){
            var s=s_gi("macdev");
			s.tl(obj,'o',"Top Nav | " + obj.innerHTML);}

        }
    }
    var stm,o_li;
    function onMenuMouseOver(e)
    {
        e=e||event;
		var obj=e.target?e.target:e.srcElement;
        if (obj.tagName=="LI"){
        	if (stm!=null) clearTimeout(stm);
        	if (o_li!=undefined && obj.parentNode.id==ROOT_ID){
	        	stm= setTimeout(function(){hideSubMenu(o_li);showMenu(obj);showSubMenu(obj);o_li=null;},1);
	        }else{
	        	showMenu(obj);
	        	stm= setTimeout(function(){showSubMenu(obj);o_li=null;},1);
	        }
        }
    }    
    function showMenu(li)
    {
        if (li!=null && li!=c_li && li.childNodes.length>0){
            c_li = li;
            var ul = li.parentNode;
            setRollover(li,true);
            setDivider(ul,li);
            if (selectedLevel2!=null && li.parentNode.id==ROOT_ID && selectedLevel2.parentNode!=li) selectedLevel2.parentNode.className = selectedLevel2.parentNode.getAttribute("itemStyle");
            //parent item style and divider
            var pr=ul;
            while(pr.id!=ROOT_ID && pr.parentNode.id!=ROOT_ID){
                if (pr.parentNode.tagName=="LI") pr=pr.parentNode;
                else if (pr.parentNode.parentNode.tagName=="LI") pr=pr.parentNode.parentNode;
				setRollover(pr,false);
                setDivider(pr.parentNode,pr);
            }
            if (li.parentNode.id==ROOT_ID && selectedLevel2!=null) selectedLevel2.style.visibility="hidden";
        }    
    }
    function showSubMenu(li)
    {
        var sub_uls = li.getElementsByTagName("ul");
    	var ul = li.parentNode;
		 if (ul.id==ROOT_ID){ //hardcode fluor.com style
		      hideDivider(li.previousSibling); 
		      hideDivider(li.nextSibling); 
		 }
        if (sub_uls.length>0){
	    	var sub = sub_uls[0];
		    var ch=(ul.getAttribute("hMenu")=="1")?true:false;//current menu is horizontal
			var i,x,sh=(sub.getAttribute("hMenu")=="1")?true:false;//sub menu is horizontal
	        //position
	        if (ch){
	            if (sh && ul.id==ROOT_ID) x = 0;
	            else x = li.offsetLeft;
	            sub.style.top = (li.offsetHeight - 1) + "px";
	        }else{
	            x = li.offsetLeft + li.offsetWidth;
	            sub.style.top = (li.offsetTop - 1) + "px";
	        }
	        sub.style.left = x + "px";
	        //item style and divider
	        for(i=0;i<sub.childNodes.length;i++){
	            if (sub.childNodes[i].getAttribute("itemStyle")!=null) sub.childNodes[i].className = sub.childNodes[i].getAttribute("itemStyle");
	            else{if (sh) showDivider(sub.childNodes[i]);}
	        }
	        //vertical
	        if (!sh){
	            var absX = getClientLeft(sub);
	            var cWidth = sub.getAttribute("columnWidth");
	            //fluor university: multi-column
	            if (ch && isNotNullOrEmpty(sub.getAttribute("columnCount")) && isNotNullOrEmpty(cWidth))
	            {
	                var cCount = sub.getAttribute("columnCount") * 1;
	                var l = getNodeLength(sub);
	                var nw, currentStyle;
	                for(i=0;i<sub.childNodes.length;i++){
	                    if (sub.childNodes[i].tagName=="LI" && sub.childNodes[i].innerHTML.length>0){
	                        currentStyle=(isIE)?sub.childNodes[i].currentStyle:document.defaultView.getComputedStyle(sub.childNodes[i],null);
	                        sub.childNodes[i].style.cssText = "float:left;" + sub.childNodes[i].style.cssText;
	                        nw = cWidth - currentStyle.paddingLeft.replace("px","") * 1 - currentStyle.paddingRight.replace("px","") * 1;
	                        sub.childNodes[i].style.width = nw + "px";
	                    }
	                }sub.style.width = (cWidth*cCount) + "px";
	                if (li.previousSibling!=null) sub.style.left = (getClientLeft(li)-(sub.offsetWidth-li.offsetWidth)/2-(absX-x)) + "px";
	                else sub.style.left = "0px";
	            }
	             //normal
	            else
	            {
	                if (cWidth!=null) sub.style.width = cWidth + "px";
	                if (absX + sub.offsetWidth > H_WIDTH_LIMIT){
	                    if (ch) sub.style.left = (H_WIDTH_LIMIT - sub.offsetWidth - (absX - x)) + "px";
	                    else sub.style.left = (getClientLeft(li) - sub.offsetWidth - (absX - x)) + "px";
	                }
	            }
	            //fluor university style: right align last menu
	            if (ch && li.style.float=="right" && li!=ul.firstChild && li==ul.lastChild) sub.style.left = (li.offsetLeft + li.offsetWidth - sub.offsetWidth) + "px";
	        }
			if(sh){
				sub.style.visibility="visible";
				if (selectedLevel2 && selectedLevel2!=sub) selectedLevel2.style.visibility = "hidden";
			}
			else (f_obj!=sub)?fade(sub):sub.style.visibility = "visible";
        }
    }
    function hideSubMenu(pr)
    {
    	if(pr!=null){
			if (isNotNullOrEmpty(pr.getAttribute("itemStyle"))) pr.className = pr.getAttribute("itemStyle");    
	        var els,i;
	        els = pr.getElementsByTagName("ul");
	        for(i=0;i<els.length;i++){
				els[i].style.visibility = "hidden";
	        }
        }
    }    
    function onMenuMouseOut(e)
    {
        e=e||event;
        var src=e.target?e.target:e.srcElement;
        var to=(isIE)?e.toElement:e.relatedTarget;
        if (to==null) { hideSubMenu(_root); return; }
        if (_root.contains(to)){
            if (src.tagName=="UL") src=c_li;
            if (to.tagName=="UL") to=c_li;
            if ((p_src!=src || p_to!=to) && src!=null && to!=null ){
                p_src=src;p_to=to;
                if (!src.contains(to)){//not moving to a sub
                    if (src.parentNode!=to){//not moving to parent
                        //moved to a child of other parent
                        if (src.parentNode.parentNode.parentNode==to.parentNode) src = src.parentNode.parentNode;
                        else{
                            try{if (src.parentNode.parentNode.parentNode.parentNode.parentNode==to.parentNode) src = src.parentNode.parentNode.parentNode.parentNode;
                            }catch(e){}
                        }
			        	if (o_li==null && src.parentNode.id==ROOT_ID){
				        	o_li= src;
				        }else{
				        	hideSubMenu(src);
				        }
                    }
                }
            }
        }else{//out of menu
			hideSubMenu(_root);
            for(var i=0;i<_root.childNodes.length;i++){
                if (_root.childNodes[i].getAttribute("itemStyle")!=null) _root.childNodes[i].className = _root.childNodes[i].getAttribute("itemStyle");
                else{if (_root.getAttribute("hMenu")=="1") showDivider(_root.childNodes[i]);}
            }
            if (stm!=null) clearTimeout(stm);
            c_li = null;
            if (selectedLevel2!=null){
            	selectedLevel2.style.visibility = "visible";
            	for(var i=0;i<selectedLevel2.childNodes.length;i++){
            		if (selectedLevel2.childNodes[i].childNodes.length>0)  selectedLevel2.childNodes[i].className = selectedLevel2.childNodes[i].getAttribute("itemStyle");
            	}
            }
        }
    }
    function getNodeLength(nd)
    {
        return nd.childNodes.length;
        /*if (isIE) return nd.childNodes.length;
        else{
            var l=0;
            for(var i=0;i<nd.childNodes.length;i++){
                if (nd.childNodes[i].nodeType==1) l++;
            }
            return l;
        }
        */
    }
    function hideDivider(obj)
    {
        if (obj!=null && obj.tagName=="LI" && obj.childNodes.length==0) obj.style.visibility = "hidden";
    }
    function showDivider(obj)
    {
        if (obj!=null && obj.tagName=="LI" && obj.childNodes.length==0) obj.style.visibility = "inherit";
    }
    function setRollover(li,spr)
    {
        var is = li.getAttribute("itemStyle");
        var cn = is.replace("Selection","") + "Rollover";
        if (spr && li.getAttribute("specialRollover")!=null) cn = is.replace("Selection","") + "SpecialRollover";
        if (li.className!=cn) li.className=cn;
    }
    function setDivider(ul,li)
    {
        if (ul.getAttribute("hMenu")=="1" && isNotNullOrEmpty(ul.getAttribute("dividerStyle"))){
            for(i=0;i<ul.childNodes.length;i++){
                if (ul.childNodes[i]==li.previousSibling || ul.childNodes[i]==li.nextSibling){
                    if (li.childNodes.length==1) {showDivider(ul.childNodes[i]);}
                    else hideDivider(ul.childNodes[i]);
                }else showDivider(ul.childNodes[i]);
            }
        }
    }
}

function mcoJSMenuContainer(nd)
{
    var cs = nd.getAttribute("containerStyle");
    var hm = nd.getAttribute("hMenu");
    var ia = nd.getAttribute("itemAlign");
    var ds = nd.getAttribute("dividerStyle");
    var cc = nd.getAttribute("columnCount");
    var cw = nd.getAttribute("columnWidth");
    var ul = document.createElement("ul");
    ul.style.display = "block";
    if (nd.parentNode.parentNode==null){//root
        ul.id = ROOT_ID;
        ul.style.cursor="pointer";
    }else{
        ul.style.position = "absolute";
        ul.style.visibility = "hidden";
        ul.style.left = "-1000px";
        ul.style.top = "-1000px";
        if (hm!="1") {
            if (nd.parentNode.getAttribute("hMenu")=="1") ul.style.zIndex = "-1";//DO NOT CHANGE
		    else ul.style.zIndex = "1000";
        }else ul.style.zIndex = "1000";
    }
    if (cs!=null) {ul.className = cs;ul.setAttribute("itemStyle",cs);}
    if (hm!=null) ul.setAttribute("hMenu",hm);
    if (isNotNullOrEmpty(ds)) ul.setAttribute("dividerStyle",ds);
    if (cc!=null) ul.setAttribute("columnCount",cc);
    if (cw!=null) ul.setAttribute("columnWidth",cw);
    var i,cnd,li,dvr,l = nd.childNodes.length,rows,n,index;
    //if (cc!=null) {rows = Math.floor(((isIE)?l:(l-1)/2)/cc) + ((((isIE)?l:(l-1)/2)%cc==0)?0:1);}
    if (cc!=null) {rows = Math.floor(l/cc) + ((l%cc==0)?0:1);}
    for(i=0;i<l;i++){
        cnd = nd.childNodes[i];
        if (cnd.nodeType==1){
            li = new mcoJSMenuItem(cnd,hm,ia);
            if (cc==null) ul.appendChild(li);
	        else {
	            /*n =(isIE)?i:(i-1)/2;*/
	            n =i;
	        	if (n>=rows) {
	        	    index = (n%rows+1)*(Math.floor(n/rows)+1)-1;
	        		if (index==ul.childNodes.length) ul.appendChild(li);
	        		else{
	        		    ul.insertBefore(li,ul.childNodes[index]);
	        		}
	        	}
	        	else ul.appendChild(li);
	        }
            /*if (hm=="1" && isNotNullOrEmpty(ds) && i<l-((isIE)?1:2)){*/
            if (hm=="1" && isNotNullOrEmpty(ds) && i<l-1){
                if (PAGE_URL!=li.url && 
                    /*PAGE_URL.indexOf(cnd.getAttribute("selectionKey"))!=0 && 
                    PAGE_URL.indexOf(nd.childNodes[i+((isIE)?1:2)].getAttribute("selectionKey"))!=0){*/
                    PAGE_URL.indexOf(cnd.getAttribute("selectionKey"))==-1 && 
                    PAGE_URL.indexOf(nd.childNodes[i+1].getAttribute("selectionKey"))==-1){
                    //alert(PAGE_URL + " " + nd.childNodes[i+1].getAttribute("selectionKey"));
                    dvr = document.createElement("li");
                    if (ia=="right") dvr.style.cssText = "float:right;";
                    else dvr.style.cssText = "float:left;";
                    dvr.className = ds;
                    ul.appendChild(dvr);
                }
            }
        }
    }
    if (cc!=null){
        for(i=ul.childNodes.length;i<rows*cc-1;i++){
            var eli = document.createElement("Li");
            eli.style.cssText = "float:left;width:30px;height:30px;";
    	    index = (i%rows+1)*(Math.floor(i/rows)+1)-1;
    		if (index==ul.childNodes.length) ul.appendChild(eli);
    		else{
    		    ul.insertBefore(eli,ul.childNodes[index]);
    		}
        }
    }
    return ul;
}

function mcoJSMenuItem(nd,hm,ia)
{
    var sk = nd.getAttribute("selectionKey") + "";
    sk = sk.toLowerCase();
    var url = nd.getAttribute("url") + "";
    var is = nd.getAttribute("itemStyle");
    var trg = nd.getAttribute("target");
    var li = document.createElement("li");
    var spr = nd.getAttribute("specialRollover");
    var f_url =  window.location.href;
    f_url = f_url.toLowerCase();
    if (f_url.lastIndexOf('/')==f_url.length-1)
    {
       f_url +="index.jsp";
    }
    var selected = false;;
    li.style.display = "block";
    if (is!=null){
        if (sk.lastIndexOf("#")==sk.length-1){
            sk = sk.replace("#","");
            if (f_url.lastIndexOf(sk)==(f_url.length-sk.length)) selected = true;
        }else{
            if (PAGE_URL.indexOf(sk)>-1 || f_url.indexOf(sk.toLowerCase())>-1) selected = true;
        }
        if (selected){//highlight
            li.className = is + "Selection";
            li.setAttribute("itemStyle",is + "Selection");
        }else{
            li.className = is;
            li.setAttribute("itemStyle",is);
        }
    }
    if (trg!=null) li.setAttribute("target",trg);
    if (url!=null) li.setAttribute("url",url);
    if (spr!=null) li.setAttribute("specialRollover",spr);
    if (hm=="1"){
        if (ia=="right") li.style.cssText = "float:right;";
        else li.style.cssText = "float:left;";
    }
    li.style.height = "auto";
    li.innerHTML = nd.getAttribute("name");
    if (nd.childNodes.length>0){
    	li.appendChild(mcoJSMenuContainer(nd));
    	if (hm=="1" && nd.parentNode.parentNode.parentNode==null && (PAGE_URL==li.url || PAGE_URL.indexOf(sk)==0)){
    		selectedLevel2 = li.getElementsByTagName("ul")[0];
    	}
    }
    return li;
}

//Fade
var TimeToFade = 1.0;
var FadeState;
var FadeTimeLeft;
var lastFadeTime;
var f_obj;
function fade(eid){
	if(eid == null) return;
	eid.style.visibility="visible";
	eid.style.opacity = "0";
	eid.style.filter = "alpha(opacity=0)";
	if (eid.childNodes.length!=0){
		FadeState = 1;
		FadeTimeLeft = TimeToFade;
		lastFadeTime = new Date().getTime();
		setTimeout(function(){animateFade(lastFadeTime,eid);},1);	
	}
}
function animateFade(lastTick, eid){
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;
	if(FadeTimeLeft <= elapsedTicks){
		eid.style.opacity = FadeState == 1 ? '1' : '0';
		eid.style.filter = 'alpha(opacity = ' + (FadeState == 1 ? '100' : '0') + ')';
		eid.style.filter = "";
		f_obj = eid;
		return;
	}
	FadeTimeLeft -= elapsedTicks;
	var newOpVal = FadeTimeLeft/TimeToFade;
	if (FadeState == 1) newOpVal = 1 - newOpVal;
	eid.style.opacity = newOpVal;
	eid.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
	setTimeout(function(){animateFade(curTick,eid);},1);
}


