/// <reference path="jquery-1.4.1.js" />

var toggle = false;
var expandfirst = toggle;
var faq_all_headers = [];
var expanded = false;

function faq_init_header(c, h, nodes) {
    var x = $(h).hasClass('expanded') ? true : (expandfirst ? (c == 0) : false);
    $([h].concat(nodes)).wrapAll('<div>');
    var d = h.parentNode;
    var s = document.createElement('span');
    s.className = 'faq-span';
    s.innerHTML = h.innerHTML;
    h.innerHTML = '';
    h.appendChild(s);
    h.faq_nodes = nodes;
    h.unselectable = 'on';
    s.unselectable = 'on';
    h.faq_xc = function (_x, _force) {
        if ((!_force) && toggle && _x) {
            for (var i in faq_all_headers) {
                faq_all_headers[i].faq_xc(false);
            }
        }
        for (var i in nodes) {
            if (nodes[i].style) {
                nodes[i].style.display = _x ? '' : 'none';
            }
        }
        h.className = 'faq-' + (_x ? 'x' : 'c');
        d.className = 'faq-container-' + (_x ? 'x' : 'c');
        x = _x;
    };
    h.onclick = function (e) {
        h.faq_xc(x = !x);
    };
    h.ondblclick = function (e) {
        h.faq_xc(x = !x);
        if (e) {
            e.cancelBubble = true;
            e.returnValue = false;
            if (e.preventDefault) {
                e.preventDefault();
            }
            if (e.stopPropagation) {
                e.stopPropagation();
            }
        }
        else if (event) {
            event.cancelBubble = true;
            event.returnValue = false;
        }
        return false;
    };
    h.faq_xc(x);
    faq_all_headers.push(h);
}

function faq_get_paragraph(c, h) {
    if (h) {
        var p = h.parentNode;
        if (p) {
            var cs = p.childNodes;
            if (cs && cs.length) {
                var mode = 0;
                var nodes = [];
                for (var i = 0; i < cs.length; i++) {
                    switch (mode) {
                        case 0:
                            if (cs[i] == h) {
                                mode = 1;
                            }
                            break;
                        case 1:
                            if (cs[i].tagName && cs[i].tagName == 'H3') {
                                mode = 2;
                            } else {
                                nodes.push(cs[i]);
                            }
                            break;
                    }
                    if (mode == 2) {
                        break;
                    }
                }
                if (mode > 0) {
                    faq_init_header(c, h, nodes);
                }
            }
        }
    }
}

function faq_show_all(expand) {
    /// <summary>
    /// Expands or collapses all faq headers.
    /// </summary>
    /// <param name="expand">true to expand or false to collapse all headers.</param>
    for (var i in faq_all_headers) {
        faq_all_headers[i].faq_xc(expand, true);
    }
}

function faq_initialize(id) {
    /// <summary>
    /// Initializes collapsible element behavior in the container.
    /// </summary>
    /// <param name="id">Container identifier.</param>
    if (document.getElementById) {
        var faq = document.getElementById(id);
        if (faq && faq.getElementsByTagName) {
            var hs = faq.getElementsByTagName('H3');
            if (hs && hs.length) {
                for (var i = 0; i < hs.length; i++) {
                    var h = hs[i];
                    faq_get_paragraph(i, h);
                }
            }
        } 
    }
}

function faq_toggle(textElementId, expandText, collapseText) {
    faq_show_all(!expanded);
    expanded = !expanded;
    if (textElementId) {
        var element = document.getElementById(textElementId);
        if (element) {
            element.innerHTML = expanded ? collapseText : expandText;
        }
    }
}
