// Collapse/Expand script for the FAQ page
// Version 2 - New and Improved (but mostly simplified like crazy)
// !! Commented version can be found at ./faq_doc.js !!

var fId = 0;

function Collapse(e)
{
	var answers = document.getElementsByTagName('dd');

	for(index in answers)
	{
		answers[index].className = 'noshow';
	}

	if(e && e.preventDefault)
	{
		e.preventDefault();
	}
	else
	{
		e = window.event;

		e.cancelBubble = true;
		e.returnValue = false;
	}
}

function CollapseManual(except)
{
	var answers = document.getElementsByTagName('dd');

	if(except == null)
	{
		for(index in answers)
		{
			answers[index].className = 'noshow';
		}
	}
	else
	{
		for(index in answers)
		{
			var question = answers[index].previousSibling;
			var questionName = '';

			while(question != null)
			{
				if(IsNode(question) && question.tagName.toLowerCase() == 'dt')
				{
					question = question.getElementsByTagName('a');

					question = question[0];

					questionName = question.name;

					question = null;
				}
				else
				{
					question = question.previousSibling;
				}
			}

			if(except == questionName)
			{
				var parent = answers[index].parentNode;

				while(parent.tagName.toLowerCase() != 'body')
				{
					if(parent.className == 'noshow')
					{
						parent.className = null;
					}

					parent = parent.parentNode;
				}
			}
			else
			{
				answers[index].className = 'noshow';
			}
		}
	}
}

function Expand(e)
{
	var answers = document.getElementsByTagName('dd');

	for(index in answers)
	{
		answers[index].className = null;
	}

	if(e && e.preventDefault)
	{
		e.preventDefault();	
	}
	else
	{
		e = window.event;
		
		e.cancelBubble = true;
		e.returnValue = false;
	}
}

function Init()
{
	var triggers = document.getElementsByTagName('dt');

	for(var index = 0; index < triggers.length; index++)
	{
		var question = triggers[index];

		anchor = question.getElementsByTagName('a');

		if(anchor.length > 0)
		{
			anchor = anchor[0];

			anchor.href = 'faq.php#'+anchor.name;
		}
		else
		{
			anchor = document.createElement('a');

			anchor.id = 'fId'+fId;
			fId = fId + 1;
			anchor.href = 'faq.php#'+anchor.id;
			anchor.innerHTML = question.innerHTML;

			question.innerHTML = '';
			question.appendChild(anchor);
		}

		addEvent(anchor, 'click', Toggle);
	}

	var active = document.location.href;

	if(active.indexOf('#') > 0)
	{
		active = active.substring(active.indexOf('#') + 1);
	}
	else
	{
		active = null;
	}

	var funcLinks = document.getElementById('faqnav');

	if(funcLinks != null)
	{
		var expandAll = document.createElement('a');
		var collapseAll = document.createElement('a');

		expandAll.href = 'faq.php';
		expandAll.innerHTML = 'Expand All';

		collapseAll.href = 'faq.php';
		collapseAll.innerHTML = 'Collapse All';

		addEvent(expandAll, 'click', Expand);
		addEvent(collapseAll, 'click', Collapse);

		funcLinks.appendChild(expandAll);

		funcLinks.appendChild(document.createTextNode(' or '));

		funcLinks.appendChild(collapseAll);
	}

	CollapseManual(active);
}

function IsNode(testNode)
{
	return (testNode.nodeType == 1);
}

function Toggle()
{
	var toggleMe = this.parentNode.nextSibling;

	while(toggleMe != null)
	{
		if(IsNode(toggleMe) && toggleMe.tagName.toLowerCase() == 'dd')
		{
			if(toggleMe.className == 'noshow')
			{
				toggleMe.className = null;
			}
			else
			{
				toggleMe.className = 'noshow';
			}

			toggleMe = null;
		}
		else
		{
			toggleMe = toggleMe.nextSibling;
		}
	}
}


addEvent(window, "load", Init);

