// FAQ PAGE - Hide / Show definitions //

function init_FAQ()
{
	if (document.getElementById('expandableDefinitionList'))
	{
		// Add .hideDefinition to all DD elements
		// first find all the dl objects
		var definitionLists = document.getElementById('expandableDefinitionList').getElementsByTagName('dl');
		for (var i = 0; i < definitionLists.length; i++)
		{
			// traverse dl.children and add .hideDefinition
			// alert(definitionLists[0].children());
			var element = definitionLists[i].getElementsByTagName('dt');
			for (var j = 0; j < element.length; j++)
			{
				addClass(element[j], "hideDefinition");

				// Add switch() to all DT onClick events
				element[j].onclick = switchDefinitionList;
				element[j].onmouseover = showDefinitionListHover;
				element[j].onmouseout = hideDefinitionListHover;
			}
			
			var element = definitionLists[i].getElementsByTagName('dd');
			for (var j = 0; j < element.length; j++)
			{
				addClass(element[j], "hideDefinition");
			}			
		}
	}	
}

function switchDefinitionList()
{
	if (hasClass(this, "hideDefinition")) 
	{
		// The element is currently hidden, so show it	
		
		// 1.) Turn off all elements that are currently on (if there are any)
			// traverse expandableDefinitionList and check if any DT or DD have .showDefinition
			// remove .showDefinition
			// add .hideDefinition
		var definitionLists = document.getElementById('expandableDefinitionList').getElementsByTagName('dl');
		for (var i = 0; i < definitionLists.length; i++)
		{
			var element = definitionLists[i].getElementsByTagName('dt');
			for (var j = 0; j < element.length; j++)
			{
				if (hasClass(element[j], "showDefinition")) {
					removeClass(element[j], "showDefinition");
					addClass(element[j], "hideDefinition");
				}
			}
			
			var element = definitionLists[i].getElementsByTagName('dd');
			for (var j = 0; j < element.length; j++)
			{
				if (hasClass(element[j], "showDefinition")) {
					removeClass(element[j], "showDefinition");
					addClass(element[j], "hideDefinition");
				}
			}			
		}		
	
		// 2.) Replace .hideDefinition with .showDefinition on this DT element
		removeClass(this, "hideDefinition");
		addClass(this, "showDefinition");
		
		// 3.) traverse elements within the DL until find the .showDefinition DT, then 
		//     remove .hideDefinition and add .showDefintion to the next element (DD)
		var listID = null;
		var elementID = null;
		var definitionLists = document.getElementById('expandableDefinitionList').getElementsByTagName('dl');
		for (var i = 0; i < definitionLists.length; i++)
		{
			var element = definitionLists[i].getElementsByTagName('dt');
			for (var j = 0; j < element.length; j++)
			{
				if (hasClass(element[j], "showDefinition")) {
					listID = i;
					elementID = j;
				}
			}
		}		
		var element = definitionLists[listID].getElementsByTagName('dd');
		removeClass(element[elementID], "hideDefinition");
		addClass(element[elementID], "showDefinition");				
	} else {
		var definitionLists = document.getElementById('expandableDefinitionList').getElementsByTagName('dl');
		for (var i = 0; i < definitionLists.length; i++)
		{
			var element = definitionLists[i].getElementsByTagName('dt');
			for (var j = 0; j < element.length; j++)
			{
				if (hasClass(element[j], "showDefinition")) {
					removeClass(element[j], "showDefinition");
					addClass(element[j], "hideDefinition");
				}
			}
			
			var element = definitionLists[i].getElementsByTagName('dd');
			for (var j = 0; j < element.length; j++)
			{
				if (hasClass(element[j], "showDefinition")) {
					removeClass(element[j], "showDefinition");
					addClass(element[j], "hideDefinition");
				}
			}			
		}	
	}
}

function showDefinitionListHover()
{
	addClass(this, "hover");
}

function hideDefinitionListHover()
{
	removeClass(this, "hover");
}