var faqOldOnload = window.onload;

window.onload = function()
{
    if (typeof faqOldOnload == 'function')
    {
         faqOldOnload();
    }

    window.faqInstance = new faq();
    faqInstance.init();

}


faq = function ()
{
    this.container = null;
    this.questions = null;
}

faq.prototype.init = function()
{
    this.container = document.getElementById('faqContainer');

    if (!this.container)
    {
        return;
    }

    this.assignFaqBehaviours();
}

faq.prototype.assignFaqBehaviours = function ()
{
    this.questions = this.container.getElementsByTagName('dt');

    var script = this;

    for (var i=0; i<this.questions.length; i++)
    {
         var question = this.questions[i];

         // locate answer element
         question.answer = this.locateAnswer( question );
         question.link = this.locateLink( question );

         if ((!question.link) || (!question.answer))
         {
             continue;
         }

         question.link.onclick = function()
         {
             this.blur();
             return script.questionLinkClicked ( this );
         }

         this.updateQuestionStatus( question );
    }

    // this.resetQuestions();
}
faq.prototype.questionLinkClicked = function ( questionLink )
{
    var question = questionLink.parentNode;
    if (question.isActive)
    {
        this.deactivateQuestion ( question );
    }
    else
    {
        this.activateQuestion ( question );
    }
    return false;

}
faq.prototype.activateQuestion = function( question )
{
    this.resetQuestions();
    this.setQuestionClass(question, 'active');
    this.updateQuestionStatus( question );
}
faq.prototype.deactivateQuestion = function( question )
{
    this.setQuestionClass(question, '');
    this.updateQuestionStatus( question );
}


faq.prototype.updateQuestionStatus = function ( question )
{
    question.isActive = (question.className == 'active') ? true : false;
}
faq.prototype.setQuestionClass = function ( question , className )
{
    question.className = className;
    question.answer.className = className;
    this.updateQuestionStatus( question )
}

faq.prototype.resetQuestions = function( question )
{
    for (var i=0; i<this.questions.length; i++)
    {
         var question = this.questions[i];
         this.deactivateQuestion ( question );
    }
}

faq.prototype.locateAnswer = function ( question )
{
    var node = question;
    var found = false;
    while (!found && node.nextSibling)
    {
        var node = node.nextSibling;
        if (
            (node.nodeType == 1) // element
            &&
            (node.tagName.toLowerCase() == 'dd')
        )
        {
            var found = true;
        }
    }

    if (!found)
    {
        return null;
    }
    return node;
}
faq.prototype.locateLink = function ( question )
{
    var node = question;
    var links = node.getElementsByTagName('a');
    if (!links)
    {
        return null;
    }
    return links[0];

}
