/* Global dropdown menu variables */
var tii_pnav_closeMenuDelay = 1; /* milliseconds */
var tii_pnav_closeMenuDelayIE6 = 1; /* milliseconds */

/* This function sets the top nav highlight */
function rs_pnav_performTopNavHighlight ()
{
	var highlightId;
	if (typeof rs_topNavHighlightId != 'undefined' && rs_topNavHighlightId && rs_topNavHighlightId != '')
	{
		highlightId = rs_topNavHighlightId; 
	}
	else
	{
		var topNavHash = new Array (['home', 'tn_home'], ['a-z', 'az'], ['healthy-eating', 'he'], ['healthy-living', 'hl'], ['diet-weightloss', 'diet']);
		var tnhLength = topNavHash.length;
		for (var i = 0; i < tnhLength; i++)
		{
			if (new RegExp (topNavHash [i] [0], 'i').test (location.pathname))
			{
				highlightId = topNavHash [i] [1];
				break;
			}
		}
	}
	if (highlightId)
	{
		var li = document.getElementById (highlightId);
		if (li) { li.className += ' current_page'; }
	}
}

/* This is the core dropdown menu function */
function tii_pnav_initializeDropdownMenu (primaryNavId, hideOrShowMenuFunction, changeStateFunction)
{
	var isopera = typeof window.opera != 'undefined';
	var isie = typeof document.all != 'undefined'
		&& !isopera && navigator.vendor != 'KDE';
	var isie6 = (navigator.userAgent.indexOf ('MSIE 6.0') > -1) || (navigator.userAgent.indexOf ('MSIE 7.0') > -1);
	var issafari = navigator.vendor == 'Apple Computer, Inc.';
	var isfirefox = navigator.userAgent.toLowerCase ().indexOf ('firefox') > -1;
	var root = document.getElementById (primaryNavId);
	var doHandleFocus = true;
	var doHandleAllFocus = true;
	var focusEventSource;
	var focusLevel = -1;
	var lastEventType = -1;
	var lastEventSource;
	var lastPrimaryLi;
	var lastLevel = -1;
	var lastMenu;
	var delayMenuClose;
	var delayMenuUlClose;
	var lastBlurEventSource;
	var lastBlurPrimaryLi;
	var lastBlurLevel = -1;
	var lastLastEventType = -1;
	var lastLastBlurEventSource;
	var lastLastBlurPrimaryLi;
	var lastLastBlurLevel = -1;
	if (!root)
	{
		return false;
	}
	var primeUl = root.getElementsByTagName ('ul').item (0);
	if (!primeUl)
	{
		return false;
	}
	if (!isie)
	{
		primeUl.contains = containsFunction;
		tii_dom_removeWhitespaceTextNodes (primeUl);
	}
	tii_addEventHandler (primeUl, 'mouseout', function (event)
	{
		var related = typeof event.relatedTarget != 'undefined' ? event.relatedTarget : window.event.toElement;
		if (related && !primeUl.contains (related))
		{
			var menu = getMenu (event);
			if (menu)
			{
				if (!focusEventSource || focusEventSource != lastEventSource || menu.contains (focusEventSource))
				{
					deactivateLink (lastEventSource, lastLevel, true, true);
				}
			}
		}		
	}, false);
	var primeLis = primeUl.childNodes;
	var primeLisLength = primeLis.length;
	for (var i = 0; i < primeLisLength; i++)
	{
		primeLi = primeLis.item (i);
		if (!isie)
		{
			primeLi.contains = containsFunction;
		}
		var primeLiKids = primeLi.childNodes;
		var primeLiKidsLength = primeLiKids.length;
		for (var j = 0; j < primeLiKidsLength; j++)
		{
			var primeLiKid = primeLiKids.item (j);
			var primeLiKidNodeName = primeLiKid.nodeName;
			var primeLiKidClassName = primeLiKid.className || '';
			if (primeLiKidNodeName == 'A' && primeLiKidClassName != 'no_action')
			{
				addLinkEventHandlers (primeLiKid, 0);
			}
			else if (primeLiKidNodeName == 'UL')
			{
				if (!isie)
				{
					primeLiKid.contains = containsFunction;
					tii_dom_removeWhitespaceTextNodes (primeLiKid);
				}
				tii_pnav_assignFlyoutLis (primeLiKid, addLinkEventHandlers)
			}
		}
	}
	var keyevent = issafari || isie ? 'keydown' : 'keypress';
	tii_addEventHandler (document, keyevent, function (event)
	{
		var target = typeof event.target != 'undefined'? event.target : event.srcElement;
		if (primeUl.contains (target) && target.getAttribute ('href'))
		{
			if (event.keyCode == 27) /* escape key */
			{
				closeAllDropdowns ();
				if (typeof event.preventDefault != 'undefined')
				{
					event.preventDefault ();
				}
				return false;
			}
		}
		return true;
	}, false);
	var elements = document.getElementsByTagName ('*');
	var elementsLength = elements.length;
	for (p = 0; p < elementsLength; p++)
	{
		tii_addEventHandler (elements.item (p), 'focus', function (event)
		{
			if (doHandleAllFocus)
			{
				var target = typeof event.target != 'undefined'? event.target : event.srcElement;
				if (!primeUl.contains (target))
				{
					closeAllDropdowns ();
				}
			}
		}, false);
	}
	if (isfirefox)
	{
		tii_addEventHandler (document, 'focus', function (event) 
		{
			var target = typeof event.target != 'undefined'? event.target : event.srcElement;
			if (target == document)
			{
				if (lastBlurPrimaryLi)
				{
					doHandleFocus = false;
					deactivateLink (lastBlurPrimaryLi.getElementsByTagName ('a').item (0), 0, true, true);
					var resetDelay = setTimeout (function () { changeStateFunction (lastBlurPrimaryLi, false, 0); }, 1);
				}
			}
		}, false);
	}
	else
	{
		tii_addEventHandler (window, 'blur', function () 
		{
			if (lastEventSource)
			{
				deactivateLink (lastEventSource, lastLevel, true, true);
			}
		}, false);	
	}
	function containsFunction (node)
	{
		if (node == null)
		{
			return false;
		}
		if (node == this)
		{
			return true;
		}
		else
		{
			return this.contains (node.parentNode);
		}
	}
	function getMenu (event)
	{
		try
		{
			var menu = typeof event.target != 'undefined'? event.target : event.srcElement;
			while (menu && menu.parentNode.parentNode.parentNode != root)
			{
				menu = menu.parentNode;
			}
			if (menu && menu.parentNode.parentNode.parentNode == root)
			{
				return menu;
			}
			else
			{
				return null;
			}
		}
		catch (error) { return null; }
	}
	function closeAllDropdowns ()
	{
		for (var n = 0; n < primeLisLength; n++)
		{
			deactivateLink (primeLis.item (n).getElementsByTagName ('a').item (0), 0, true, true);
		}
	}
	function addLinkEventHandlers (link, level)
	{
		tii_addEventHandler (link, 'mouseover', callHandleEvent, false);
		tii_addEventHandler (link, 'mouseout', callHandleEvent, false);
		tii_addEventHandler (link, 'focus', callHandleEvent, false);
		tii_addEventHandler (link, 'blur', callHandleEvent, false);
		function callHandleEvent (event)
		{
			handleEvent (event, level);
		}
	}	
	function handleEvent (event, level)
	{
		var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
		while (eventSource && eventSource.nodeName != 'A')
		{
			eventSource = eventSource.parentNode;
		}
		if (!eventSource || eventSource.nodeName != 'A')
		{
			return;
		}
		var eventType = event.type;
		if (issafari && (eventType == 'mouseover' || eventType == 'mouseout') && tii_pnav_isUnwantedTextEvent ())
		{
			return;
		}
		if (eventType == 'mouseover')
		{
			handleMouseover (eventSource, level);
		}
		if (eventType == 'mouseout' && level == 0)
		{
			handleMouseout (eventSource, level, event);
		}
		else if (eventType == 'focus')
		{
			handleFocus (eventSource, level);
		}
		else if (eventType == 'blur')
		{
			handleBlur (eventSource, level);
		}
	}
	function handleMouseover (eventSource, level)
	{
		var closeMenu = false;
		if (level == 0)
		{
			if (eventSource.parentNode != lastPrimaryLi)
			{
				closeMenu = true;
			}
			else
			{
				if (lastLevel > 0)
				{
					clearTimeout (delayMenuClose);
				}
				closeMenu = false;
			}
			deactivateLink (lastEventSource, lastLevel, false, closeMenu);
			activateLink (eventSource, level);
		}
		else
		{
			if (!isie)
			{
				if (lastPrimaryLi && !lastPrimaryLi.contains)
				{
					lastPrimaryLi.contains = containsFunction;
				}
			}
			if (isfirefox && lastEventType == 2 && lastLastEventType == 2)
			{
				if (!lastLastBlurPrimaryLi.contains (eventSource) || !lastBlurPrimaryLi.contains (eventSource))
				{
					var delayBlurMenuClose = setTimeout (function () 
					{
						var lastLastBlurMenu = lastLastBlurPrimaryLi.getElementsByTagName ('ul').item (0);
						hideOrShowMenuFunction (lastLastBlurMenu, true, lastLastBlurPrimaryLi);
						changeStateFunction (lastLastBlurPrimaryLi, false, 0);
					}, (isie6 ? tii_pnav_closeMenuDelayIE6 : tii_pnav_closeMenuDelay));
				}
			}
			if (lastEventSource)
			{
				if (lastPrimaryLi.contains (eventSource))
				{
					clearTimeout (delayMenuClose);
					closeMenu = false;
				}
				else
				{
					closeMenu = true;
				}
				deactivateLink (lastEventSource, lastLevel, false, closeMenu);
			}
			activateLink (eventSource, level);
		}
		lastLastEventType = lastEventType;
		lastEventType = 0;
		lastEventSource = eventSource;
		lastPrimaryLi = level == 0 ? lastEventSource.parentNode : (level == 1 ? lastEventSource.parentNode.parentNode.parentNode : lastEventSource.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
		lastLevel = level;
		doHandleFocus = false;
		doHandleAllFocus = false;
		eventSource.focus ();
	}
	function handleMouseout (eventSource, level, event)
	{
		var related = typeof event.relatedTarget != 'undefined' ? event.relatedTarget : window.event.toElement;
		if (!eventSource.parentNode.contains (related))
		{
			deactivateLink (eventSource, level, true, true);
		}
	}
	function handleFocus (eventSource, level)
	{
		var closeMenu = false;
		if (!doHandleFocus)
		{
			doHandleFocus = true;
			return;
		}
		doHandleAllFocus = true;
		focusEventSource = eventSource;
		focusLevel = level;
		if (lastEventSource)
		{
			if (!isie && !lastPrimaryLi.contains)
			{
				lastPrimaryLi.contains = containsFunction;
			}
			if (lastPrimaryLi && lastPrimaryLi.contains (eventSource))
			{
				closeMenu = false;
			}
			else
			{
				closeMenu = true;
			}
			deactivateLink (lastEventSource, lastLevel, true, closeMenu);
		}
		activateLink (eventSource, level);
		lastLastEventType = lastEventType;
		lastEventType = 2;
		lastEventSource = eventSource;
		lastPrimaryLi = level == 0 ? lastEventSource.parentNode : (level == 1 ? lastEventSource.parentNode.parentNode.parentNode : lastEventSource.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
		lastLevel = level;
	}
	function handleBlur (eventSource, level)
	{
		lastLastBlurEventSource = lastBlurEventSource;
		lastLastBlurPrimaryLi = lastBlurPrimaryLi;
		lastLastBlurLevel = lastBlurLevel;
		lastBlurEventSource = eventSource;
		lastBlurPrimaryLi = level == 0 ? lastBlurEventSource.parentNode : (level == 1 ? lastBlurEventSource.parentNode.parentNode.parentNode : lastBlurEventSource.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
		lastBlurLevel = level;
	}
	function activateLink (link, level)
	{
		if (level == 0)
		{
			changeStateFunction (link.parentNode, false, 2);
			var menu = link.parentNode.getElementsByTagName ('ul').item (0);
			if (!menu)
			{
				return;
			}
			hideOrShowMenuFunction (menu, false, menu.parentNode);
		}
		else if (level == 1 || level == 2)
		{
			var secondLi = link.parentNode;
			if (level == 1)
			{
				menu = secondLi.parentNode;
			}
			else
			{
				menu = secondLi.parentNode.parentNode.parentNode.parentNode;
			}
			hideOrShowMenuFunction (menu, false, menu.parentNode);
			changeStateFunction (secondLi, true, 2);
			if (lastLevel == 0)
			{
				changeStateFunction (menu.parentNode, false, 1);
			}
		}
	}
	function deactivateLink (link, level, skipDelay, closeMenu)
	{
		var menu;
		var primeLi;
		var secondLi;
		if (level == 0)
		{
			primeLi = link.parentNode;
			menu = primeLi.getElementsByTagName ('ul').item (0);
			if (!menu)
			{
				changeStateFunction (primeLi, false, 0);
				return;
			}
		}
		else if (level == 1 || level == 2)
		{
			secondLi = link.parentNode;
			changeStateFunction (secondLi, true, 0);
			if (level == 1)
			{
				menu = secondLi.parentNode;
			}
			else
			{
				menu = secondLi.parentNode.parentNode.parentNode.parentNode;
			}
			primeLi = menu.parentNode;
		}
		if (menu && closeMenu)
		{
			doMenuClose (menu, primeLi, skipDelay);
		}
	}
	function doMenuClose (menu, primeLi, skipDelay)
	{
		if (skipDelay)
		{
			hideOrShowMenuFunction (menu, true, menu.parentNode);
			changeStateFunction (primeLi, false, 0);
			return;
		}
		delayMenuClose = setTimeout (function () 
		{
			hideOrShowMenuFunction (menu, true, menu.parentNode);
			changeStateFunction (primeLi, false, 0);
		}, (isie6 ? tii_pnav_closeMenuDelayIE6 : tii_pnav_closeMenuDelay));
	}
}

function tii_pnav_assignFlyoutLis (flyoutUl, addLinkEventHandlers)
{
	var isMulticolumn = true;
	var flyoutLis = flyoutUl.childNodes;
	var flyoutLisLength = flyoutLis.length;
	for (var k = 0; k < flyoutLisLength; k++)
	{
		var flyoutLi = flyoutLis.item (k);
		var secondFlyoutLis = flyoutLi.getElementsByTagName ('li');
		var secondFlyoutLisLength = secondFlyoutLis.length;
		if (secondFlyoutLisLength == 0)
		{
			var flyoutLinks = flyoutLi.getElementsByTagName ('a');
			var flyoutLinksLength = flyoutLinks.length;
			for (var m = 0; m < flyoutLinksLength; m++)
			{
				addLinkEventHandlers.call (this, flyoutLinks.item (m), 1);
			}
		}
		else
		{
			for (var n = 0; n < secondFlyoutLisLength; n++)
			{
				var secondFlyoutLi = secondFlyoutLis.item (n);
				var secondFlyoutLinks = secondFlyoutLi.getElementsByTagName ('a');
				var secondFlyoutLinksLength = secondFlyoutLinks.length;
				for (var p = 0; p < secondFlyoutLinksLength; p++)
				{
					addLinkEventHandlers.call (this, secondFlyoutLinks.item (p), 2);
				}
			}
		}
	}
}

function tii_pnav_isUnwantedTextEvent ()
{
 	return (navigator.vendor == 'Apple Computer, Inc.'
      && (event.target == event.relatedTarget.parentNode
      || (event.eventPhase == 3
      && event.target.parentNode == event.relatedTarget)));
}

/* These two function calls initialize the primary navigation menu after the 'topnav' div is loaded. */
tii_callFunctionOnElementLoad ('topnav', function() {
	var delay = setTimeout(tii_pnav_initializeNav, 10);
});

function tii_pnav_initializeNav() {
	tii_pnav_initializeDropdownMenu.apply(this, new Array ('topnav', pnav_hideOrShowMenuFunction, pnav_changeStateFunction));
}
							   
/* This is the hide/show menu function that needs to be defined for each site */

function pnav_hideOrShowMenuFunction(menu, hideElseShow, menuParent) {
//	var isie6 = (navigator.userAgent.indexOf ('MSIE 6.0') > -1) || (navigator.userAgent.indexOf ('MSIE 7.0') > -1);
//	var getOffset = (isie6) ? menuParent.offsetParent.offsetLeft : menuParent.offsetLeft ;
	menu.style.left = (hideElseShow ? '-9999' : (menuParent.offsetLeft)) + 'px';
}

/* This is the change/clear status function that needs to be defined for each site */
function pnav_changeStateFunction (element, isADropdownItem, state) {
	if (isADropdownItem) {
		element.className = element.className.replace(/active/gi, '');
		switch (state) {
			case 0: /* default */
				break;
			case 2:
				element.className += (element.className == '' ? '' : ' ') + 'active';
				break;
		}
	}
	else {
		element.className = element.className.replace(/selected/gi, '');
		element.className = element.className.replace(/active/gi, '');
		switch (state) {
			case 0: /* default */
				element.className = element.className.replace(/current_marker/gi, 'current_page');
				break;
			case 1:
				element.className += (element.className == '' ? '' : ' ') + 'selected';
				break;
			case 2:
				element.className = element.className.replace(/current_page/gi, 'current_marker');
				element.className += (element.className == '' ? '' : ' ') + 'active';
				break;
		}
	}
}
