/* Table of Contents Generator
*
* Checks for two div ID's 'toc' and 'tocd' if both of those
* elements do not exist, the function exits.
* 'toc' is the container where the generated TableOfContents
* outputs to. 'tocd' is the parent node of all the header elements
* that will make up the content.
*/

function maketoc() {
    
    var container = document.getElementById('toc');
    var mNode = document.getElementById('tocd');
    if (!container || !mNode) { return; }

    var sections = [];
    var allNodes = [];
    var numbers = [0, 0, 0, 0, 0, 0];
    var child;

    //Add Headers to 'sections' Array.
    //alert('FirstLoopEnter');
    for (child = mNode.firstChild; child != null; child = child.nextSibling) {
        allNodes.push(child);
        if (child.nodeType != 1 /*ELEMENT*/) { continue; }
        if (child.tagName == 'P') { continue; }
        if ((child.tagName.length == 2) && (child.tagName.charAt(0) == 'H')) {
            sections.push(child);
        }
    }
    //alert('FirstLoopExit');
    var parsedHeaderLevel = 0;
    var sectionString = "";

    //alert('SecondLoopEnter');   
    for (var i = 0; i < sections.length; i++) {


        parsedHeaderLevel = parseInt(sections[i].tagName.charAt(1));

        numbers[parsedHeaderLevel - 1] += 1;
        for (var x = parsedHeaderLevel; x < 6; x++) {
            numbers[x] = 0;
        }

        sectionString = numbers[0];
        for (var x = 1; x < parsedHeaderLevel; x++) {
            sectionString += "." + numbers[x];
        }
        var div = document.createElement('div');
        div.className = "TOCTEntry " + "TOCTLevel" + parsedHeaderLevel;

        var link = document.createElement('a');
        link.id = "TOCT" + sectionString.toString().replace('.', '_');
        //link.name = "TOCT" + sectionString;
        link.href = "#TOCH" + sectionString.toString().replace('.', '_');
        link.onclick = assignEvent(sectionString.toString().replace('.', '_'));

        link.innerHTML = sections[i].innerHTML;

        var span = document.createElement('span');
        span.innerHTML = sectionString + " ";

        div.appendChild(span);
        div.appendChild(link);
        container.appendChild(div);

        var isBigList = "";
        if (sections.length < 30) {
            isBigList = "#TOCT1";
        } else {
            isBigList = "#TOCT" + sectionString.replace('.', '_');
        }

        sections[i].innerHTML = '<span class="TOCHEntry TOCHLevel' + parsedHeaderLevel + '">' + sectionString + ' </span><a id="TOCH' + sectionString.toString().replace('.', '_') + '" href="' + isBigList + '" class="hLinkBack">' + sections[i].innerHTML + '</a>';
        div = document.createElement('div');

        div.id = "TOCHighlight" + sectionString.toString().replace('.', '_');
        //div.name = "TOCHighlight" + sectionString;

        mNode.appendChild(sections[i]);
        var add = false;
        for (var x = 0; x < allNodes.length; x++) {
            if (allNodes[x] == sections[i]) {
                add = true;
            } else if (add && ((allNodes[x].nodeType == 1) && allNodes[x].tagName.charAt(0) == 'H')) {
                add = false;
            }
            if (add) { div.appendChild(allNodes[x]); }
        }
        mNode.appendChild(div);


    }
}


function assignEvent(i) {
    return function() {
        jQuery('#TOCHighlight' + i).css('background-color', '#E6E6E6');
        jQuery('#TOCHighlight' + i).animate({ backgroundColor: '#FFFFFF' }, 3000);
        return true;
    };
}


jQuery(document).ready(function() {
    jQuery('head').append('<script type="text/javascript" src="/lib/js/jquery/UI_1.7/jquery_UI.js"></script>');
    maketoc();
});