function $(id)
{
	return document.getElementById(id);
}

function toggle(id)
{
	$(id).style.display = $(id).style.display=='none'?"block":"none";
}

function checkQSEnter(e) {
	var cKeyCode = null
	if(document.all) {
		cKeyCode = e.keyCode;
	} else {
		cKeyCode = e.which;
	}
	if(cKeyCode==13) {
		document.hpSearchForm.submit();
	}
}

function searchForCode( pageCode, arr )
{
	for( var i=0;i<arr.length;i++ )
	{
		if( arr[i].info[ navIndexes.code ] == pageCode ) return arr[i];
		if( arr[i].subNav )
		{
			var subSearch = searchForCode( pageCode, arr[i].subNav );
			if( subSearch != null ) return subSearch;
		}
	}
	return null;
}
function getNavStruct(pageCode)
{
	return searchForCode( pageCode, navData[0].subNav );
}
function init()
{
	var folderObj = new Object();
	folderObj.eventHandler = function(e) {
	
		var element = Event.element(e);
		liElement = element.parentNode;//move up from the a to li
		
		var lev = null;
		var listOfElementsToRemove = [];
		var liItems = liElement.parentNode.getElementsByTagName("li");

		for(var j = 0; j < liItems.length; j++)
		{
			if( liItems[j] == liElement )
			{
				c = liElement.classNames().toString();
				lev = c.charAt( c.indexOf("lev")+3 );

				if( j < liItems.length-1 )
				{
					c = liItems[j+1].className;
					nextLev = c.charAt( c.indexOf("lev")+3 );
					if( nextLev > lev )
					{
						Element.addClassName( liElement, "open");
						Element.removeClassName( liElement, "closed");
					}
					else{
						Element.addClassName( liElement, "closed");
						Element.removeClassName( liElement, "open");
					}
				}
			}
			else if( lev != null )//ok, we have a level so keep removing lower levels until it doesn't match anymore
			{
				//get the current level
				c = liItems[j].className;
				clev = c.charAt( c.indexOf("lev")+3 );
				if( clev > lev )
					listOfElementsToRemove.push( liItems[j] );
				else break;//finished finding sub items
			}
		}



		if( Element.hasClassName( liElement, "open") )
		{
			//mark as closed
			Element.removeClassName( liElement, "open");

			//remove any elements in the list
			if( listOfElementsToRemove.length )
				for (var j = listOfElementsToRemove.length-1; j >= 0; j--)
					Element.remove( listOfElementsToRemove[j] );

		}
		else{

			//mark as opened
			Element.addClassName( liElement, "open");
			
			//Extract the page code
			url = element.toString();
			lastSlash = url.lastIndexOf("/");
			pageCode = url.substring( lastSlash+1, url.length );
			
			
			//Determine the next level
			c = liElement.classNames().toString();
			lev = parseInt( c.charAt( c.indexOf("lev")+3 ) );
			lev++;
			
			var subNavHTML = "";
			var currNavItem = getNavStruct(pageCode);

			if( currNavItem.subNav )
			{
				for( var i=0;i<currNavItem.subNav.length;i++ )
				{
					if( currNavItem.subNav[i].info[navIndexes.IsVisible] )
					{
						subNavHTML += "<li class='lev"+lev;
						if( currNavItem.subNav[i].info[navIndexes.IsFolder] )subNavHTML += " folder";
						subNavHTML += "'>";
						subNavHTML += "<a href=\"index.cfm/page/" +currNavItem.subNav[i].info[navIndexes.code]+ "\">" + currNavItem.subNav[i].info[navIndexes.name] + "</a>";
						subNavHTML += "</li>";
					}
				}
			}
			
			try{
				new Insertion.After( liElement, subNavHTML );
			}catch(z){}
			
			//assign the event handler to any functions marked as class 'folder'
			var liFolders = document.getElementsByClassName("folder", $("docNavList"));
			liFolders.each( function(item, index){ item.onclick = folderObj.eventHandler.bindAsEventListener(folderObj) } );

		}
				
		Event.stop(e);
	} 

	//assign the event handler to any functions marked as class 'folder'
	var liFolders = document.getElementsByClassName("folder", $("docNavList"));
	liFolders.each( function(item, index){ item.onclick = folderObj.eventHandler.bindAsEventListener(folderObj) } );

}
