function UpdateNav() {
	DoLeftNav();
	DoRightNav();
}
function DoLeftNav() {
	var filename = GetFilename(document.URL);

	var left_nav_node = document.getElementById('left-nav');
	if (left_nav_node == null) return;

	var ul_node = left_nav_node.firstChild;
	while (ul_node.nodeName != 'UL') {
		ul_node = ul_node.nextSibling;
	}

	var li_node = FindMenuItem(ul_node,filename);
	if (li_node==null) {
		//alert('Unable to find '+filename+' in menu');
		return;
	}

	var crumb_p_node = document.getElementById('crumb').getElementsByTagName('p')[0];
	if (crumb_p_node == null) {
		alert('Unable to find crumbs');
		return;
	}

	HighlightNode(li_node,crumb_p_node,null);
}
function HighlightNode(li_node,crumb_p_node,crumb_last_node) {
	var a_node = li_node.getElementsByTagName('a')[0];
	var text_node = a_node.firstChild;
	if (text_node.nodeName == 'DIV')
		text_node = text_node.firstChild;
	var page_name = text_node.nodeValue;
	var div_node = document.createElement('div');
	div_node.setAttribute('class','here');
	var new_text_node = document.createTextNode(text_node.nodeValue);
	div_node.appendChild(new_text_node);
	text_node.nodeValue = "";
	a_node.appendChild(div_node);

	// Place in breadcrumbs:
	if (page_name != "Home") {
		var page_name_text = document.createTextNode(page_name);
		var separator_node = document.createTextNode(" \u25BA ");
		if (crumb_last_node == null) {		// this is first encountered (ie, lowest level) item
			crumb_p_node.appendChild(page_name_text);
			crumb_p_node.insertBefore(separator_node,page_name_text);
		} else {										// this is not the first encoutered (ie, lowest level) item
			var crumb_a_node = document.createElement('a');
			crumb_a_node.href = a_node.href;
			crumb_a_node.appendChild(page_name_text);
			crumb_p_node.insertBefore(crumb_a_node,crumb_last_node);
			crumb_p_node.insertBefore(separator_node,crumb_a_node);
		}
	}

	// If this is in a submenu, recurse to parent:
	var grandparent_node = li_node.parentNode.parentNode;
	if (grandparent_node.nodeName == "LI")
		HighlightNode(grandparent_node,crumb_p_node,separator_node);
}
function FindMenuItem(ul_node,filename) {
	for (var nodeNo in ul_node.childNodes) {
		var li_node = ul_node.childNodes[nodeNo]; 
		if (li_node.nodeName == 'LI') {
			var a_node = li_node.getElementsByTagName('a')[0];
			if (GetFilename(a_node.href) == filename) return li_node;	// found it!
			var submenu_nodes = li_node.getElementsByTagName('ul');
			if (submenu_nodes.length > 0) {
				var submenu_li_node = FindMenuItem(submenu_nodes[0],filename);
				if (submenu_li_node != null) return submenu_li_node;		// found it in submenu
			}
		}
	}
	return null;
}
function GetFilename(path) {
	var anchorStart = path.lastIndexOf("#");
	if (anchorStart < 0) anchorStart = path.length;
	var filenameStart = path.lastIndexOf("/") + 1;
	return path.slice(filenameStart,anchorStart);
}

var current_level;
var current_node;
var anchor_nbr;
 
function DoRightNav() {
	var content = document.getElementById('content');

	var highest_level;
	if (content.getElementsByTagName('h2').length > 0) highest_level = 2;
	else if (content.getElementsByTagName('h3').length > 0) highest_level = 3;
	else if (content.getElementsByTagName('h4').length > 0) highest_level = 4;
	else return;

	current_level = highest_level - 1;
	current_node = document.getElementById('right-nav');
	anchor_nbr = 0;

	ParseElementHeadings(content);
}
function ParseElementHeadings(parent) {
	for (var i=0; i<parent.childNodes.length; i++) {
		var h_node = parent.childNodes[i];
		switch(h_node.nodeName) {
			case "H2": ProcessHeading(parent,h_node,2); i++; break;
			case "H3": ProcessHeading(parent,h_node,3); i++; break;
			case "H4": ProcessHeading(parent,h_node,4); i++; break;
			case "TABLE":
			case "TBODY":
			case "TR":
			case "TD":
			case "A":
			case "DIV": ParseElementHeadings(h_node); break;
		}
	}
}
function ProcessHeading(parent, h_node, this_level)
{
   if (this_level > current_level) {
      for (var level = current_level; level < this_level; level++) {
   	   var ul_node = document.createElement('ul');
      	current_node.appendChild(ul_node);
      	current_node = ul_node;
      }
   } else if (this_level < current_level) {
	   for (var level = current_level; level > this_level; level--)
   		current_node = current_node.parentNode;
   }
   current_level = this_level;
   
   // Use heading's title attribute for menu text, or if not set, use heading's text:
   var menu_text = h_node.getAttribute('title');
   if (menu_text==null) menu_text = h_node.childNodes[0].nodeValue;
   
   // Create an anchor name:
   var a_name = "a_" + anchor_nbr++;
   var anchor = document.createElement('a');
   anchor.setAttribute('name',a_name);
   parent.insertBefore(anchor,h_node);

	// Create right-nav menu list item:
   var li_node = document.createElement('li');
   var a_node = document.createElement('a');
   a_node.href = "#" + a_name;
   a_node.appendChild(document.createTextNode(menu_text));
   li_node.appendChild(a_node);
   current_node.appendChild(li_node);
}
