//sets up FAQs
function initiateFAQs() {
    var dls = document.getElementsByTagName( "dl" ); //get all definition lists in page
    var faqDLs = new Array(); //array to hold DLs that are FAQs

    try { // fix IE issue with image caching; ref: http://dean.edwards.name/my/flicker.html; http://www.mister-pixel.com/#Content__state=is_that_simple
        document.execCommand( "BackgroundImageCache", false, true );
    } catch( err ) {
    }


    if( typeof eig_faq_defaultStyle != "undefined" ) { //if page doesn't have defined FAQ style, use default
        if( eig_faq_defaultStyle == true ) {
            setDefaultCSSForFAQs();
        }
    } else {
        setDefaultCSSForFAQs();
    }

    //iterate through DLs; if a DL has the class "eig_faq," then add it to the faqDLs array
    for( var i = 0; i < dls.length; i++ ) {
        if( dls[ i ].className.indexOf( "eig_faq" ) > -1 ) {
            faqDLs.push( dls[ i ] );
        }
    }

    for( var j = 0; j < faqDLs.length; j++ ) { //iterate through the faqDLs array and set each as an FAQ list
        setFAQ( faqDLs[ j ] );
    }
}

//show the item immediately following the parameter (should be the DD for a DT)
function showSibling( c ) {
    var s = c.previousSibling;

    while( s.nodeName.toUpperCase() != "DT" ) {
        s = s.previousSibling;
    }

    c.style.display = "list-item";
    addClassName( s, "expanded" );
}

function hideSibling( c ) {
    var s = c.previousSibling;

    while( s.nodeName.toUpperCase() != "DT" ) {
        s = s.previousSibling;
    }

    c.style.display = "none";
    removeClassName( s, "expanded" );
}

//toggle visibility of FAQ answer
function showHideSibling( target ) {
    var c = ( target.nextSibling == null ) ? target : target.nextSibling;

    while( c.nodeName.toUpperCase() != "DD" && c.nextSibling != null ) {
        c = c.nextSibling;
    }

    if( c.nodeName.toUpperCase() == "DD" ) {
        var currentStyle = c.style.display;

        if( currentStyle == "list-item" || currentStyle == "" ) {
            hideSibling( c );
        } else {
            showSibling( c );
        }
    }
}

//show all answers in a FAQ list
function showAll( evt ) {
    var e = getEventObject( evt );

    if( e ) {
        var el = getEventTarget( e );

        if( el ) {
            var dl = el.nextSibling;
            var dds;
            var text = el.firstChild.nodeValue;

            while( dl.nodeName.toUpperCase() != "DL" ) {
                dl = dl.nextSibling;
            }
            dds = dl.getElementsByTagName( "dd" );

            if( text == "View all" ) {
                for( var i = 0; i < dds.length; i++ ) {
                    showSibling( dds[ i ] );

                    while( el.firstChild ) {
                        el.removeChild( el.firstChild );
                    }

                    el.appendChild( document.createTextNode( "Hide all" ) );
                }
            } else {
                for( var i = 0; i < dds.length; i++ ) {
                    hideSibling( dds[ i ] );

                    while( el.firstChild ) {
                        el.removeChild( el.firstChild );
                    }

                    el.appendChild( document.createTextNode( "View all" ) );
                }
            }
        }
    }
}

//toggles answer visibility
function toggleAnswer( evt ) {
    var e = getEventObject( evt );

    if( e ) {
        var el = getEventTarget( e );

        if( el ) {
            var cn = el.className;

            if( cn.indexOf( "empty" ) < 0 ) {
                showHideSibling( el );
            }
        }
    }
}

//set up DL as FAQ lsit
function setFAQ( container ) {
    var dts = container.getElementsByTagName( "dt" ); //get all DT elements of DL
    var div = document.createElement( "div" ); //empty div
    var a = document.createElement( "a" ); //empty anchor

    //add onclick handler to each DT
    for( var i = 0; i < dts.length; i++ ) {
        addEvent( dts[ i ], "click", toggleAnswer );
        showHideSibling( dts[ i ] ); //hide answer by default
    }

    //create link to view all answers
    a.appendChild( document.createTextNode( "View all" ) );
    addClassName( div, "eig_faq_viewLink" );
    div.appendChild( a );
    container.parentNode.insertBefore( div, container );
    div.appendChild( container.parentNode.removeChild( container ) );
    addEvent( container.previousSibling, "click", showAll ); //add handler to View All link
}

//add default CSS for FAQs to the page
function setDefaultCSSForFAQs() {
    appendStyleRule( "div.eig_faq_viewLink { margin: 0; padding: 0 }" );
    appendStyleRule( "div.eig_faq_viewLink dl { margin: 1.12em 0; z-index: 10; position: relative }" );
    appendStyleRule( "div.eig_faq_viewLink dt { color: #00e; text-decoration: underline; font-weight: normal; background: url( /images/plus.gif ) no-repeat left 4px; cursor: pointer; margin-bottom: 0.3em; padding-left: 15px; display: block; position: relative }" );
    appendStyleRule( "div.eig_faq_viewLink dt.expanded { background-image: url( /images/minus.gif ) }" );
    appendStyleRule( "div.eig_faq_viewLink dd { list-style-type: none; margin: 0 0 1.12em 15px; padding: 0 }" );
    appendStyleRule( "div.eig_faq_viewLink a { color: #00e; text-decoration: underline; float: right; cursor: pointer; cursor: hand; padding: 0 0 1em 1em; z-index: 20; position: relative }" );
    appendStyleRule( "div.eig_faq_viewLink dt a { float: none; padding: 0; position: static }" );
    appendStyleRule( "div.eig_faq_viewLink dd a { float: none; padding: 0; position: static }" );
}

addEvent( window, "load", initiateFAQs ); //starts the process, fires on page load