/**
 * Setup for global web site behaviours 
 */
window.onload = function() 
{
	anchorSetup();
	inPageNavSetup();
	formatTablesSetup();
	faqSetup();
}

/**
 * Makes all links with certain rel values
 * open in a new window
 */
function anchorSetup()
{
	var allAnchors = document.getElementsByTagName("a");
	//set up anchors	
	for (var i=0; i < allAnchors.length; i++) 
	{
		var currentItem = allAnchors[i];
		if(currentItem.getAttribute("rel") == "external" || 
		   currentItem.getAttribute("rel") == "document") 
		{
			currentItem.target = "_blank";
		}
	}
}

/**
 * Initial setup for in page navigation
 */
function inPageNavSetup()
{
	var allAnchors = document.getElementsByTagName("a");
	var allDivs = document.getElementsByTagName("div");

	//fields
	var items = new Array();
	var content = new Array();
	
	//initialise
	//get in page nav content
	for (var i=0; i < allDivs.length; i++) 
	{
		var currentContent = allDivs[i];
		if(currentContent.className == "inPageNavContent") 
		{
			content.push(currentContent);
		}
	}
	
	//hide all except first
	for(var i = 1; i < content.length; i++)
	{
		content[i].style.display = "none";
	}	
}

/**
 * Displays the specified In Page Nav content for an in page nav item onclick event
 * @param elementId the element ID of the div to display
 */
function inPageNavDisplay(eventSource, elementId)
{
	//set all in page nav anchors to unselected
	var inPageNavList = document.getElementById("inPageNavItems");
	var inPageNavAnchors = inPageNavList.getElementsByTagName("a");
	for (var i=0; i < inPageNavAnchors.length; i++) 
	{
		inPageNavAnchors[i].className = "";
	}
	//set the selected in page nav item to selected
	eventSource.className = "selected";
	
	//hide all in page nav content
	var allDivs = document.getElementsByTagName("div");
	for (var i=0; i < allDivs.length; i++) 
	{
		var currentContent = allDivs[i];
		if(currentContent.className == "inPageNavContent") 
		{
			currentContent.style.display = "none";
		}
	}
	//show the one to be selected
	document.getElementById(elementId).style.display = "block";
}

/**
 * Formats CSS of visible tables to look better. Even row colouring, for example
 */
function formatTablesSetup()
{
	var allTables = document.getElementsByTagName("table");
	
	var visibleTables = new Array();
	for (var i=0; i < allTables.length; i++) 
	{
		var currentTable = allTables[i];
		if(currentTable.className == "visibleTable1") 
		{
			var rows = currentTable.getElementsByTagName("tr")
			
			for(var j = 2; j < rows.length; j = j + 2)
			{
				rows[j].className = "even";
			}
		}
	}
	
}

/**
 * Hides all faq answers on a page
 */
function faqSetup()
{
	var allDefLists = document.getElementsByTagName("dl");
	for (var i=0; i < allDefLists.length; i++) 
	{
		var currentDefList = allDefLists[i];
		if(currentDefList.className == "faqList") 
		{
			var faqAnswers = currentDefList.getElementsByTagName("dd");
			for(var j = 0; j < faqAnswers.length; j++)
			{
				faqAnswers[j].style.display = "none";
			}
		}
	}	
}
/**
 * Displays the FAQ answer element (a <dd>) directly following the event source question.
 */	
function displayFaqAnswer(eventSource)
{
	//change question apperance
	if(eventSource.className == "answerVisible")
	{
		eventSource.className = "answerHidden";
	}
	else
	{
		eventSource.className = "answerVisible";		
	}	
	
	//search for relevant answer node
	var defLists = document.getElementsByTagName("dl");
	
	var faqLists = new Array();
	for (var i=0; i < defLists.length; i++) 
	{
		var currentList = defLists[i];
		if(currentList.className == "faqList") 
		{
			faqListElements = currentList.getElementsByTagName("*");
			var lookForAnswer = false;
			for(var j=0; j < faqListElements.length; j++)
			{
				var currentFaqListElement = faqListElements[j]
				
				if(eventSource == currentFaqListElement)
				{
					//now event source node has been found next dd will be answer
					lookForAnswer = true;
				}

				if(lookForAnswer && (currentFaqListElement.tagName == "DD" || currentFaqListElement.tagName == "dd"))
				{
					if(currentFaqListElement.style.display != "block")
					{
						currentFaqListElement.style.display = "block";
					}
					else
					{
						currentFaqListElement.style.display = "none";
					}
					break;
				}
				
			}
		}
	}	
}
