function hidetoc()
{
	tocholder = document.getElementById('h2tocholder');
	if(!tocholder) return;

	tocholder.className = 'hidden';
}

function showtoc()
{
	tocholder = document.getElementById('h2tocholder');
	if(!tocholder) return;

	tocholder.className = '';
}

function node2text(node)
{
	var index;
	var child;
	var text;

	text = "";
	for(index=0; index<node.childNodes.length; index++) {
		child = node.childNodes.item(index);
		if(child.nodeType == document.TEXT_NODE) {
			text += child.nodeValue;
		} else if(child.nodeType == document.ELEMENT_NODE) {
			text += node2text(child);
		}
	}

	return text;
}

/* Checks if the nodeType constants are available, and sets them
 * otherwise. This is to work around a bug in Opera 8 */
function checkNodeTypes()
{
	if(document.ELEMENT_NODE != undefined) return;

	document.ELEMENT_NODE       = 1;
	document.ATTRIBUTE_NODE     = 2;
	document.TEXT_NODE          = 3;
	document.CDATA_SECTION_NODE = 4;
	document.ENTITY_REFERENCE_NODE = 5;
	document.ENTITY_NODE        = 6;
	document.PROCESSING_INSTRUCTION_NODE = 7;
	document.COMMENT_NODE       = 8;
	document.DOCUMENT_NODE      = 9;
	document.DOCUMENT_TYPE_NODE = 10;
	document.DOCUMENT_FRAGMENT_NODE = 11;
	document.NOTATION_NODE      = 12;
}

function make_h2_toc()
{
	var tocdiv;
	var h2s;
	var ol;
	var h2;
	var li;
	var a;
	var text;
	var href;

	if(!document.getElementById) return;
	if(!document.getElementsByTagName) return;
	if(!document.createElement) return;
	if(!document.createTextNode) return;
	if(!document.createAttribute) return;

	tocdiv = document.getElementById('h2toc');
	if(!tocdiv) return;

	h2s    = document.getElementsByTagName('h2');
	if(!h2s || h2s.length == 0) {
		hidetoc();
		return;
	}

	checkNodeTypes();

	ol = document.createElement('ol');

	for(i=0; i<h2s.length; i++) {
		h2 = h2s[i];
		if(!h2.id) h2.id = 'header'+i;

		// Create elements
		li   = document.createElement('li');
		a    = document.createElement('a');
		text = document.createTextNode(node2text(h2));

		// Set attributes
		href = document.createAttribute('href');
		href.value = '#' + h2.id;

		// Put them all together
		a.attributes.setNamedItem(href);
		a.appendChild(text);
		li.appendChild(a);
		ol.appendChild(li);
	}

	tocdiv.appendChild(ol);
	showtoc();
}

MochiKit.DOM.addLoadEvent(make_h2_toc);
