// Script to create submenu with TOC of page in navigation menu
// tested in Opera 9, Firefox 2 and IE6

// Mark Schenk, 2006 - 2007

if (window.addEventListener){
  window.addEventListener("load",createTOC,false); }
else if (window.attachEvent) {
	window.attachEvent("onload",createTOC,false); } 


function createTOC() {
	// basic object detection
	if(!document.getElementById || !document.getElementsByTagName) { return; }

	// check for presence of navmenu markup
	if (!document.getElementById('navmenu')) { return; }
	
	// hide it, fill it, show it
	document.getElementById('navmenu').style.display = "none";

	// create TOC
	var pagetoc = document.createElement('ul');
	pagetoc.id = 'toc';

	// make TOC
	var x = document.getElementById('content').childNodes;

	var toBeTOCced = new Array();
	for (var i=0;i<x.length;i++) {
		if (x[i].nodeName.indexOf('H') != -1)
		toBeTOCced.push(x[i])
	}

	for (var i=0;i<toBeTOCced.length;i++) {
		var tmp1 = document.createElement('li');
		var tmp2= document.createElement('a');
		tmp2.innerHTML = toBeTOCced[i].firstChild.data;
		
		if(toBeTOCced[i].id==false) {toBeTOCced[i].id = "header_autonum" + i}
		tmp2.href='#' + toBeTOCced[i].id;

		tmp1.appendChild(tmp2);
		pagetoc.appendChild(tmp1);
		
		if (toBeTOCced[i].nodeName == 'H2')
		tmp1.className = 'h2';
		
		if (toBeTOCced[i].nodeName == 'H3')
		tmp1.className = 'h3';

		if (toBeTOCced[i].nodeName == 'H4')
		tmp1.className = 'h4';
	}

	
	// if there are headers, add TOC to navmenu

	if (toBeTOCced.length != 0) {

	// create page navigation
	var navmenu = document.getElementById('navmenu');

	var pagenav = navmenu.appendChild(document.createElement('li'));
	pagenav.appendChild(document.createTextNode('Page'));

	// add actual TOC
	pagenav.appendChild(pagetoc);
	}

	// IE now also works, using some additional styles
	if(!window.opera && navigator.appName.indexOf('Microsoft')!=-1) { 
		turnOnIE();
	}
	document.getElementById('navmenu').style.display = "block"; 
}

function turnOnIE() {
	var navigationmenu = document.getElementById('navmenu');
	var listitems = navigationmenu.childNodes;

	for (var i=0; i<listitems.length; i++) {
		if (listitems[i].nodeName == 'LI' && listitems[i].getElementsByTagName('ul').length != 0 ) {
		var hoveritem = listitems[i];
		hoveritem.onmouseover = function() { this.className+=" expand"; }
		hoveritem.onmouseout = function() { this.className=this.className.replace(" expand", ""); }

		// this improves the usability of the menu
		var hovermenu = 	hoveritem.getElementsByTagName('ul')[0];
		hovermenu.onmouseover = function() { this.className+=" ulhover"; }
		hovermenu.onmouseout = function() { this.className=this.className.replace(" ulhover", ""); }		
		}
		
		listitems[0].className='first';
	}
}
