// Finds all divs with class="collapse", collapses them, and gives each
// one a "Show" link that uncollapses it. The "Show" link becomes a "Hide"
// link when the div is visible.

var CollapsedDivs = {
    collapse_re: /\bcollapse\b/,   // Class of divs that should be dealt with.
    collapsed_re: /\bcollapsed\b/, // Class that divs get when they're hidden.
    initially_visible_re: /\binitially-visible\b/,
    admonition_title_re: /\badmonition-title\b/,
    collapsed_class: 'collapsed',
    init: function() {
        var divs = document.getElementsByTagName('div');
        for (var i = 0, fs; fs = divs[i]; i++) {
            // Collapse this div if it has the correct class
            if (fs.className.match(CollapsedDivs.collapse_re)) {
                admonition_title = ''
                first_para = fs.getElementsByTagName('p')[0]
                if (first_para.className.match(CollapsedDivs.admonition_title_re)) {
                    admonition_title = first_para.innerHTML
                    fs.removeChild(first_para)
                }
                var collapse_link = document.createElement('a');
                collapse_link.className = 'collapse-toggle';
                collapse_link.id = 'divcollapser' + i;
                collapse_link.href = '#';
                if (fs.className.match(CollapsedDivs.initially_visible_re)) {
                    collapse_link.innerHTML = '‹‹‹';
                    collapse_link.onclick = new Function('CollapsedDivs.hide('+i+'); return false;');
                } else {
                    collapse_link.innerHTML = '›››';
                    fs.className += ' ' + CollapsedDivs.collapsed_class;
                    collapse_link.onclick = new Function('CollapsedDivs.show('+i+'); return false;');
                }
                var collapse_para = document.createElement('p');
                collapse_para.className = 'collapse-toggle-container';
                collapse_para.appendChild(collapse_link);
                var title = document.createElement('span');
                title.innerHTML = admonition_title;
                title.style.marginLeft = '1cm';
                title.className = 'collapse-toggle-title';
                collapse_para.appendChild(title);
                fs.parentNode.insertBefore(collapse_para, fs);
            }
        }
    },
    show: function(div_index) {
        var fs = document.getElementsByTagName('div')[div_index];
        // Remove the class name that causes the "display: none".
        fs.className = fs.className.replace(CollapsedDivs.collapsed_re, '');
        // Toggle the "Show" link to a "Hide" link
        var collapse_link = document.getElementById('divcollapser' + div_index);
        collapse_link.onclick = new Function('CollapsedDivs.hide('+div_index+'); return false;');
        collapse_link.innerHTML = '‹‹‹';
    },
    hide: function(div_index) {
        var fs = document.getElementsByTagName('div')[div_index];
        // Add the class name that causes the "display: none".
        fs.className += ' ' + CollapsedDivs.collapsed_class;
        // Toggle the "Hide" link to a "Show" link
        var collapse_link = document.getElementById('divcollapser' + div_index);
        collapse_link.onclick = new Function('CollapsedDivs.show('+div_index+'); return false;');
        collapse_link.innerHTML = '›››';
    }
}

addEvent(window, 'load', CollapsedDivs.init);
