var navListItems = new Array();
var navActiveListItems = new Object();
var myNav = null;

function initializeNav()
{
	function toggleActiveClassname( obj, toggleOn )
	{
		var className = obj.className;
		if( className )
		{
			var names = className.split(" ");
			var namesString = "";
			for( var nc = 0; nc < names.length; nc++ )
			{
				if( names[nc].toLowerCase() != "active" )
				{
					namesString += ( namesString.length > 0 ? " " : "" ) + names[nc];
				}
			}

			obj.className = namesString;
		}

		if( toggleOn === true )
		{
			obj.className += ( className.length > 0 ? " " : "" ) + "active";
		}
	}

	myNav = document.getElementById("nav");
	if( myNav )
	{
		myNav.navID = -1;
		navListItems = getElementsByTagNameDeep( myNav, "li" );
		for( var c = 0; c < navListItems.length; c++ )
		{
			var curItem = navListItems[c];
			curItem.navTimerObj = null;
			curItem.navTimerFnc = null;
			curItem.navTimerFncOff = null;
			curItem.navID = c;
			curItem.navTimerFnc = function(curItem,c)
			{
				return function()
				{
					toggleActiveClassname( curItem, true );
					navActiveListItems[c] = curItem;

					var siblings = getElementsByTagNameDeep( curItem.parentNode, "li", 1 );

					//remove active class from all active sibling nodes
					for( var li in navActiveListItems )
					{
						clearTimeout( navActiveListItems[li].navTimerObj );

						var isSibling = false;
						for( var sc = 0; sc < siblings.length && isSibling == false; sc++ )
						{
							if( typeof( siblings[sc].navID ) != 'undefined' && siblings[sc].navID != null && ( navActiveListItems[li].navID == siblings[sc].navID ) )
							{
								isSibling = true;
							}
						}

						if( isSibling && navActiveListItems[li].navID != curItem.navID )
						{
							toggleActiveClassname( navActiveListItems[li], false );
							delete navActiveListItems[li];
						}
					}
				};
			}(curItem,c);

			curItem.navTimerFncOff = function(curItem,c)
			{
				return function()
				{
					toggleActiveClassname( curItem, false );

					if( navActiveListItems[c] )
					{
						delete navActiveListItems[c];
					}
				};
			}(curItem,c);

			curItem.navMouseOverFnc = function(curItem,c)
			{
				return function()
				{
					clearTimeout( curItem.navTimerObj );
					curItem.navTimerObj = setTimeout( "navListItems["+c+"].navTimerFnc();", 0 );
				};
			}(curItem,c);

			curItem.navMouseOutFnc = function(curItem,c)
			{
				return function()
				{
					clearTimeout( curItem.navTimerObj );
					curItem.navTimerObj = setTimeout( "navListItems["+c+"].navTimerFncOff();", 300 );
				}
			}(curItem,c);

			curItem.onmouseover = curItem.navMouseOverFnc;
			curItem.onmouseout = curItem.navMouseOutFnc;
		}
	}

	function getElementsByTagNameDeep( startNode, tagName, maxDepth )
	{
		maxDepth = ( typeof(maxDepth) != 'undefined' && maxDepth != null && maxDepth > 0 ) ? maxDepth : -1;
		var childNodes = new Array();
		if( startNode && startNode.childNodes && startNode.childNodes.length > 0 )
		{
			for( var c = 0; c < startNode.childNodes.length; c++ )
			{
				var curNode = startNode.childNodes[c];
				if( curNode )
				{
					if( curNode.tagName && curNode.tagName.toLowerCase() == tagName.toLowerCase() )
					{
						//match
						childNodes.push( curNode );
					}

					if( curNode.childNodes && curNode.childNodes.length > 0 )
					{
						if( maxDepth > 1 || maxDepth == -1 )
						{
							childNodes = childNodes.concat( getElementsByTagNameDeep( curNode, tagName, maxDepth - 1 ) );
						}
					}
				}
			}
		}

		return childNodes;
	}
}

