// faq.js
// emakina\fde
// requires: toolbox.js (addEvent)

// The purpose of this Javascript is to turn a simple definition list into a Questions/Answers (FAQ) list with clickable
// questions and on/off display answers.
// The list itself can be edited as simple html markup, it only needs to appear within the named DIV.
// If Javascript is disabled, all answers are visible.

var FAQ_DIV_ID = 'faq';		// ID applied to the DIV containing the FAQ definition list
var currentFAQ = null;

// Returns the <DL> inside the FAQ DIV
function getFAQ()
{
	if (!document || !document.getElementById) return null;
	var faqdiv = document.getElementById(FAQ_DIV_ID);
	var dls = faqdiv.getElementsByTagName('dl');
	if (dls.length > 0)
		return dls[0];
	return null;
}

// Called when clicking a question
// - close other opened answers,
// - open current answer
function showFAQ()
{
	lnk = this;	// used to be a link, now it's a <span></span>

	if (!document || !document.getElementById) return;
	// find container DT
	var elem = lnk;
	if (currentFAQ != lnk) {
		if (currentFAQ) currentFAQ.className = '';
		currentFAQ = lnk;
	}
	for (var elem=lnk; elem ; elem=elem.parentNode)
	{
		if (elem.nodeName && elem.nodeName.toUpperCase() == 'DT')
		{
			while (elem.nextSibling)
			{
				elem = elem.nextSibling;
				if (elem.nodeName.toUpperCase()=='DD')
				{
					if (elem.style.display == 'block')
					{
						// just close the current element
						elem.style.display = 'none';
						lnk.className = '';
					}
					else
					{
						// open a different element,
						// close all open questions (<DD></DD>)
						var dl = getFAQ();
						var dds = dl.getElementsByTagName('dd');
						for (var i=0; i < dds.length; i++) {
							dds[i].style.display = 'none';
						}
						// open element
						elem.style.display = 'block';
						lnk.className = 'current';
					}
					return;
				}
			}
			break;
		}
	}
}

function initFAQ()
{
	if (!document || !document.getElementById || !document.createElement) return;

	var dl = getFAQ();
	var dts = dl.getElementsByTagName('dt');
	for (var i=0; i < dts.length; i++)
	{
		if (dts[i].firstChild && dts[i].firstChild.nodeType==3) //TEXT_NODE
		{
			var sQuestionId = 'q'+i;
		
			// create a link
		    var lnk = document.createElement('span');
			lnk.setAttribute('href', '#'); //+sQuestionId);
			lnk.onclick = showFAQ;
			// remove the text node
			var oldchild = dts[i].firstChild;
			dts[i].removeChild(oldchild);
			// append text in the link
			lnk.appendChild(oldchild);
			// insert link in the document
			dts[i].appendChild(lnk);
			// find corresponding <dd></dd> and hide the answer
			var elem = dts[i];
			while (elem.nextSibling)
			{
				elem = elem.nextSibling;
				if (elem.nodeName.toUpperCase()=='DD')
				{
					// append <a name='qXX'></a> to beginning of the <dd></dd>
					var lnk_to = document.createElement('a');
					lnk_to.setAttribute('name', sQuestionId);
					elem.insertBefore(lnk_to, elem.firstChild);
					// hide the answer
					elem.style.display = 'none';
				}
			}
		}
	}
}

addEvent(window, 'load', initFAQ);
