/* dryes [at] featureblend.com */
function NavClass(instanceName,navParentElementId,skirtParentElementId,theme){
	var t = this;
	t.timer = null;
	t.latency = 150;
	var lastParentElementObj;
	var lastFlyoutElementObj;	
	var navParentElementObj;
	var menuItemParentObj;
	var menuItemFlyoutObj;
	var menuItemFlyoutLeft;
	var primaryNavImgOnloadCollection = [];
	var imageBackgroundImgSrcStates = ["_0.","_2."];
	var flyoutTextIndent = 10;
	var flyoutBorderOffset = 4;
	var flyoutLeftPosition = 0;
	var charWidth = 6;
	var primaryNavImgLength = 0;
	var iemacTextClass = "nav-item-tab-text-iemac";
	var u = navigator.userAgent.toLowerCase();
	var safari = u.indexOf("safari")!=-1;
	var safariUnstable = (safari)?u.indexOf("85")!=-1:false;
	var iemac = (u.indexOf("msie")!=-1)?u.indexOf("mac")!=-1:false;
	var iewin = (u.indexOf("msie")!=-1)?u.indexOf("windows")!=-1:false;
	var ns70 = u.indexOf("netscape/7.0")!=-1;
	var parseCssBackgroundImage = function(backgroundImage){
		var str;
		str = backgroundImage.replace(/url\(/i,"");
		str = str.replace(/\)/i,"");
		return str;
	}
	var getSwapImgSrc = function(str){
		return (str.indexOf(imageBackgroundImgSrcStates[1])!=-1)?str.replace(imageBackgroundImgSrcStates[1],imageBackgroundImgSrcStates[0]):str.replace(imageBackgroundImgSrcStates[0],imageBackgroundImgSrcStates[1]);	
	}
	var getFlyoutLeftPosition = function(elementObj){
		if(elementObj.previousSibling){
			if(elementObj.previousSibling.nodeName!="#text"){
				flyoutLeftPosition += parseInt(elementObj.previousSibling.getElementsByTagName("A")[0].style.width);
			}
			return getFlyoutLeftPosition(elementObj.previousSibling);
		}else{
			var value = flyoutLeftPosition;
			flyoutLeftPosition = 0;
			return value;
		}
	}
	var walkThroughNavElements = function(parentObj){
		var navChildren = parentObj.childNodes;
		if(parentObj.id.indexOf("nav-item-")!=-1){
			menuItemParentObj = parentObj;
			menuItemFlyoutObj = parentObj.getElementsByTagName("UL")[0];
			if(safariUnstable){
				menuItemFlyoutLeft = getFlyoutLeftPosition(menuItemParentObj);
			}
		}
		for(var i=0; i<navChildren.length; i++){
			if(safari && (navChildren[i].nodeName!="#text" || navChildren[i].nodeName=="#text") || navChildren[i].nodeName!="#text"){
				navChildren[i].menuItemParentObj = menuItemParentObj;
				navChildren[i].menuItemFlyoutObj = menuItemFlyoutObj;
				if(safariUnstable){
					navChildren[i].menuItemFlyoutLeft = menuItemFlyoutLeft;
				}
				if(navChildren[i].childNodes.length>0){
					walkThroughNavElements(navChildren[i]);
				}
			}
		}
	}
	var preloadImage = function(imgSrc){
		altImgSrc = getSwapImgSrc(imgSrc);
		altImgObj = new Image();
		altImgObj.src = altImgSrc;
	}
	var createSkirtElement = function(backgroundImageCssStyle,index){
		var skirtElementObj;
		var skirtElementsClassName = "skirt-item";
		var skirtParentElementObj = document.getElementById(skirtParentElementId);
		var newSkirtElementObj = document.createElement("div");
		newSkirtElementObj.className = skirtElementsClassName;
		setCssBackgroundImage(newSkirtElementObj,backgroundImageCssStyle);
		newSkirtElementObj.id = skirtElementsClassName + "-" + index;
		skirtElementObj = skirtParentElementObj.appendChild(newSkirtElementObj);
		return skirtElementObj;
	}
	var styleNavElements = function(){
		for(var h=0; h<imgObj.length; h++){
			var obj = imgObj[h];
			var secondaryNavElementChildrenObj;
			var secondaryNavElementObj;
			var secondaryNavWidth;
			var maxOffsetWidth = 0;
			secondaryNavElementObj = obj.primaryNavAnchorElementObj.parentNode.parentNode.getElementsByTagName("UL")[0];
			obj.skirtElementObj.style.width = parseInt(obj.primaryNavAnchorElementObj.style.width) + "px";
			if(iewin && obj.primaryNavAnchorElementObj.parentNode.parentNode.disableMouseover){
				obj.primaryNavAnchorElementObj.parentNode.style.backgroundImage = obj.primaryNavAnchorElementObj.style.backgroundImage;
			}
			if(secondaryNavElementObj){
				secondaryNavElementChildrenObj = secondaryNavElementObj.getElementsByTagName("A");
				maxOffsetWidth = parseInt(obj.primaryNavAnchorElementObj.style.width) - flyoutTextIndent - flyoutBorderOffset;
				for(var i=0; i<secondaryNavElementChildrenObj.length; i++){
					if(iemac){
						var calculatedOffsetWidth = Math.round(secondaryNavElementChildrenObj[i].innerHTML.length*charWidth);
						maxOffsetWidth = (maxOffsetWidth<calculatedOffsetWidth)?calculatedOffsetWidth:maxOffsetWidth; 
					}else{
						maxOffsetWidth = (maxOffsetWidth<secondaryNavElementChildrenObj[i].offsetWidth)?secondaryNavElementChildrenObj[i].offsetWidth:maxOffsetWidth; 
					}
					if(ns70 && (secondaryNavElementChildrenObj.length-1)==i){
						secondaryNavElementChildrenObj[i].parentNode.className = "nav-item-children-active-ns70";
					}
				}
				secondaryNavWidth = (flyoutTextIndent + maxOffsetWidth) + "px";
				if(!iewin){
					secondaryNavElementObj.style.width = secondaryNavWidth;
				}
				for(var j=0; j<secondaryNavElementChildrenObj.length; j++){
					secondaryNavElementChildrenObj[j].parentNode.style.width = secondaryNavWidth;
					secondaryNavElementChildrenObj[j].style.width = "100%";
				}
			}
		}
	}
	var setNavElementsLayoutValues = function(){
		var primaryNavAnchorElementObj;
		var backgroundImageCssStyle;
		var skirtElementObj;
		var activeThemeParentNavElementId;
		var parentNavElementObj;
		var skirtElementObj;
		var imgSrc;
		var secondaryNavElementObj;
		var h2ElementCollection = navParentElementObj.getElementsByTagName("H2");
		primaryNavImgLength = h2ElementCollection.length;
		for(var i=0; i<h2ElementCollection.length; i++){ 
			primaryNavAnchorElementObj = h2ElementCollection[i].getElementsByTagName("A")[0];
			if(iemac){
				primaryNavAnchorElementObj.getElementsByTagName("SPAN")[0].className = iemacTextClass;
			}
			parentNavElementObj = h2ElementCollection[i].parentNode;
			if(theme==parentNavElementObj.id){
				backgroundImageCssStyle = getSwapImgSrc(primaryNavAnchorElementObj.style.backgroundImage);
				t.modifyTab(parentNavElementObj.id,getSwapImgSrc(primaryNavAnchorElementObj.style.backgroundImage),parseInt(primaryNavAnchorElementObj.style.width),true);
			}else{
				if(iewin && !primaryNavAnchorElementObj.parentNode.disableMouseover){
					var iewinBackgroundImgSrc = getSwapImgSrc(parseCssBackgroundImage(primaryNavAnchorElementObj.style.backgroundImage));
					setCssBackgroundImage(h2ElementCollection[i],iewinBackgroundImgSrc);
				}
				backgroundImageCssStyle = primaryNavAnchorElementObj.style.backgroundImage;
			}
			skirtElementObj = createSkirtElement(backgroundImageCssStyle,parentNavElementObj.id);	
			imgSrc = parseCssBackgroundImage(backgroundImageCssStyle);
			preloadImage(imgSrc);
			//comment out these lines for quick fix for seg nav not rendering correctly on safari browser
			//if(safari){
			//	imgObj[i].style.position = "absolute";
			//	imgObj[i].style.left = "-999px";
			//	document.body.appendChild(imgObj[i]);
			//}
			secondaryNavElementObj = primaryNavAnchorElementObj.parentNode.parentNode.getElementsByTagName("UL")[0];
			skirtElementObj.style.width = parseInt(primaryNavAnchorElementObj.style.width) + "px";
			if(iewin && primaryNavAnchorElementObj.parentNode.parentNode.disableMouseover){
				primaryNavAnchorElementObj.parentNode.style.backgroundImage = primaryNavAnchorElementObj.style.backgroundImage;
			}
			if(secondaryNavElementObj){
				var secondaryNavElementChildrenObj;
				var secondaryNavWidth;
				var maxOffsetWidth = 0;
				secondaryNavElementChildrenObj = secondaryNavElementObj.getElementsByTagName("A");
				maxOffsetWidth = parseInt(primaryNavAnchorElementObj.style.width) - flyoutTextIndent - flyoutBorderOffset;
				for(var j=0; j<secondaryNavElementChildrenObj.length; j++){
					if(iemac){
						var calculatedOffsetWidth = Math.round(secondaryNavElementChildrenObj[j].innerHTML.length*charWidth);
						maxOffsetWidth = (maxOffsetWidth<calculatedOffsetWidth)?calculatedOffsetWidth:maxOffsetWidth; 
					}else{
						maxOffsetWidth = (maxOffsetWidth<secondaryNavElementChildrenObj[j].offsetWidth)?secondaryNavElementChildrenObj[j].offsetWidth:maxOffsetWidth; 
					}
					if(ns70 && (secondaryNavElementChildrenObj.length-1)==j){
						secondaryNavElementChildrenObj[j].parentNode.className = "nav-item-children-active-ns70";
					}
				}
				secondaryNavWidth = (flyoutTextIndent + maxOffsetWidth) + "px";
				if(!iewin){
					secondaryNavElementObj.style.width = secondaryNavWidth;
				}
				for(var k=0; k<secondaryNavElementChildrenObj.length; k++){
					secondaryNavElementChildrenObj[k].parentNode.style.width = secondaryNavWidth;
					secondaryNavElementChildrenObj[k].style.width = "100%";
				}
			}			
		}
	}
	var setCssBackgroundImage = function(elementObj,backgroundImage){
		if(!(backgroundImage.indexOf("url(")!=-1)){
			backgroundImage = "url("+backgroundImage+")";
		}
		elementObj.style.backgroundImage = backgroundImage;
	}	
	var swapBackgroundImageCssStyle = function(parentElementObj){
		if(!parentElementObj.disableMouseover){
			var primaryNavElementObj = parentElementObj.getElementsByTagName("H2")[0].childNodes[0]
			var str = primaryNavElementObj.style.backgroundImage;
			str = getSwapImgSrc(str);
			setCssBackgroundImage(primaryNavElementObj,str);
			var skirtElementObj = document.getElementById("skirt-item-"+parentElementObj.id);
			setCssBackgroundImage(skirtElementObj,str);
		}
	}
	var activate = function(parentElementObj,flyoutElementObj){
		parentElementObj.active = true;
		if(flyoutElementObj){
			if(safariUnstable){
				flyoutElementObj.className = "nav-item-children-active-safari-unstable";
				flyoutElementObj.style.left = flyoutElementObj.menuItemFlyoutLeft+"px";
			}else{
				flyoutElementObj.className = "nav-item-children-active";
			}
		}	
		swapBackgroundImageCssStyle(parentElementObj);
	}
	var deActivate = function(parentElementObj,flyoutElementObj){
		lastParentElementObj = parentElementObj;
		lastFlyoutElementObj = flyoutElementObj;
		t.timer = setTimeout(instanceName+'.hideFlyout()',t.latency);
	}
	t.hideFlyout = function(){
		if(lastFlyoutElementObj){
			lastFlyoutElementObj.className = "nav-item-children";
			if(safariUnstable){
				lastFlyoutElementObj.style.left = "";
			}
		}
		swapBackgroundImageCssStyle(lastParentElementObj);
		lastParentElementObj.active = false;
		t.timer = null;
	}
	t.modifyTab = function(parentMenuElementId,imgSrc,imgWidth,disableMouseover){
		var parentElementObj = document.getElementById(parentMenuElementId);
		var primaryNavAnchorElementObj = parentElementObj.getElementsByTagName("H2")[0].childNodes[0];
		setCssBackgroundImage(primaryNavAnchorElementObj,imgSrc);
		setCssBackgroundImage(primaryNavAnchorElementObj.parentNode,imgSrc);
		primaryNavAnchorElementObj.style.width = imgWidth + "px";
		parentElementObj.modifiedTab = true;
		parentElementObj.disableMouseover = disableMouseover;
	}
	t.eventHandler = function(e){
		var eventType;
		var fromElementObj;
		var toElementObj;
		var activeParentMenuElementObj;
		if(!e){
			e = event;
		}
		eventType = e.type;
		fromElementObj = e[(window.Event)?((eventType=="mouseover")?"relatedTarget":"target"):"fromElement"];
		toElementObj = e[(window.Event)?((eventType!='mouseover')?"relatedTarget":"target"):"toElement"];
		if(eventType=='mouseover' && toElementObj){
			if(t.timer){
				clearTimeout(t.timer);
				t.timer = null;
				if(toElementObj.menuItemParentObj!=lastParentElementObj){
					t.hideFlyout();
				}
			}
			if(toElementObj.className.match(/nav-item-tab/) && !toElementObj.menuItemParentObj){
				walkThroughNavElements(toElementObj.parentNode.parentNode);
			}
			if(toElementObj.className.match(/nav-item-tab/) && !toElementObj.menuItemParentObj.active){
				activate(toElementObj.menuItemParentObj,toElementObj.menuItemFlyoutObj);
			}
		}else if(eventType=='mouseout' && toElementObj && fromElementObj && toElementObj!=fromElementObj){
			try{
				if(ns70 && toElementObj.nodeName!="#text" && fromElementObj.menuItemParentObj.active){
					deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
				}else if(fromElementObj.menuItemParentObj!=toElementObj.menuItemParentObj && toElementObj.nodeName!="#text" && fromElementObj.menuItemParentObj.active){
					deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
				}else if(safari && fromElementObj.nodeName=="#text" && toElementObj.nodeName=="BODY" && fromElementObj.menuItemParentObj.active){
					deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
				}else if(iemac && toElementObj==fromElementObj && fromElementObj.menuItemParentObj.active){
					deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
				}			
			}catch(error){
				deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
			}finally{}
		}else{
			if(fromElementObj){
				if(fromElementObj.menuItemParentObj.active){
					deActivate(fromElementObj.menuItemParentObj,fromElementObj.menuItemFlyoutObj);
				}
			}
		}
		e.cancelBubble = true;
		e.returnValue = false;
	}
	t.init = function(){
		navParentElementObj = document.getElementById(navParentElementId);
		setNavElementsLayoutValues();
		navParentElementObj.onmouseover = navParentElementObj.onmouseout = t.eventHandler;
		if(iewin){
			window.onunload = function(){
				navParentElementObj.onmouseover = null;
				navParentElementObj.onmouseout = null;
			}
		}
	}
}