function createTOC() {
    var toc2 = document.getElementById("toc2");
    var toc1 = document.getElementById("toc1");
    var ul1 = document.createElement("ul");
    var ul2 = document.createElement("ul");
    var h4 = getElementsByTagNames('h4');
    if (h4.length < 2) return;

    for (var i = 0; i < h4.length; i++) {
        if (h4[i].title != 'notTOC') {

            var link = document.createElement('a');
            link.innerHTML = h4[i].innerHTML;
            var href = h4[i].innerHTML;
            href = href.replace(/ /g, "_");
            href = href.replace("'", "");
            href = href.replace("'", "");
            href = href.replace("\"", "");
            href = href.replace("\"", "");
            href = href.replace("\/", "");
            href = href.replace("(", "");
            href = href.replace(")", "");
            href = href.replace("[", "");
            href = href.replace("]", "");
            href = href.replace("?", "");
            href = href.replace("!", "");
            href = href.replace(".", "");
            href = href.replace(",", "");
            href = href.replace("+", "");
            link.href = '#' + href;
            link.className = 'on_page';
            var li = document.createElement('li');
            if(h4[i].className =='underline') li.className='lead';
            li.appendChild(link);
            i < h4.length / 2 ? ul1.appendChild(li) : ul2.appendChild(li);
            h4[i].id = href;
        }
        if (document.getElementById('toc1') && document.getElementById('toc1')) {
        toc1.appendChild(ul1);
        toc2.appendChild(ul2);
        }
        if (document.location.hash) {
            location.href = document.location.hash;
        }
    }
}

function onloadTOC() {
    var crToc = getElementsByTagNames('div');
    for (var i = 0; i < crToc.length; i++) {
        if (crToc[i].title == 'createTOC') {

            //alert(crToc[i].id);

            var h4 = getElementsByTagNames('h4');
            //var h4 = getElementsByTagNames('h4');
            var ul = "";
            for (var j = 0; j < h4.length; j++) {
                if (crToc[i].id == h4[j].parentNode.parentNode.id) {
                    var href = h4[j].innerHTML;
                    href = href.replace(/ /g, "_");
                    href = href.replace("'", "");
                    href = href.replace("'", "");
                    href = href.replace("\"", "");
                    href = href.replace("\"", "");
                    href = href.replace("\/", "");
                    href = href.replace("(", "");
                    href = href.replace(")", "");
                    href = href.replace("[", "");
                    href = href.replace("]", "");
                    href = href.replace("?", "");
                    href = href.replace("!", "");
                    href = href.replace(".", "");
                    href = href.replace(",", "");
                    href = href.replace("+", "");

                    ul += "<li><a href=#" + href + ">" + h4[j].innerHTML + "</a></li>";
                }
            }
            //document.getElementById(crToc[i].id + "_toc").appendChild(ul);
            document.getElementById(crToc[i].id + "_toc").innerHTML = ul;
        }
    }
}

function getElementsByTagNames(list, obj)
{
    if (!obj) var obj = document;
    var tagNames = list.split(',');
    var resultArray = new Array();
    for (var i = 0; i < tagNames.length; i++)
    {
        var tags = obj.getElementsByTagName(tagNames[i]);
        for (var j = 0; j < tags.length; j++)
        {
            resultArray.push(tags[j]);
        }
    }
    var testNode = resultArray[0];
    if (testNode.sourceIndex)
    {
        resultArray.sort(function (a, b) {
            return a.sourceIndex - b.sourceIndex;
        });
    }
    else if (testNode.compareDocumentPosition)
    {
        resultArray.sort(function (a, b) {
            return 3 - (a.compareDocumentPosition(b) & 6);
        });
    }
    return resultArray;
}
