/**
 * @author Michael Fruehmann
 * uses parts of the excellent javascript book "ppk on javascript", isbn 0-321-42330-5
 */

var pathname = "http://www.sois.uwm.edu/afrikaans"; /* has to point to the sitmap.html file for menu generation, NO trailing slash */
//var pathname = "http://129.89.43.209/afrikaans-menu"; /* has to point to the sitmap.html file for menu generation, NO trailing slash */

/* ------------------ generic helper functions --------------------------- */

function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}

function getHTTPObject() {
	var myRequest = false;
	if (window.XMLHttpRequest) {
		myRequest = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			myRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				myRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				myRequest = false;
			}
		}
	}
	return myRequest;
}
function sendRequest(url,callback,postData) {
	var req = getHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}
/* ----------------------------------------------- */

function checkCompatible() {
	// object detection for old browsers
	if (!document.getElementsByTagName || !document.getElementById || !getHTTPObject()) {
		return false
	} else { return true; }
	
}

function readSitemap() {
	if (checkCompatible())
		sendRequest(pathname + "/sitemap.html", integrateMenu);
}

function integrateMenu(request) {
	var menuContent = request.responseText;
	
	var anonymousContainer = document.createElement('div');
	anonymousContainer.innerHTML = menuContent;
	
	var x = anonymousContainer.getElementsByTagName('ul');
	var siteMap;
	for (var i=0;i<x.length;i++) {
		if (x[i].id == "menu") {
			siteMap = x[i];
			break;
		}
	}
	if (!siteMap) return;
	
	var menuList = document.getElementById("menu");
	menuList.innerHTML = siteMap.innerHTML;
	initNavigation();
	
}



//  menu functions
// -----------------------------------
function initNavigation() {
	var menu = document.getElementById('menu');
	if (menu) {
		menu.onmouseover = navMouseOver;
		menu.onmouseout = navMouseOut;
		var listItems = menu.getElementsByTagName('li');
		for (var j = 0; j < listItems.length; j++) {
			var test = listItems[j].getElementsByTagName('ul')[0];
			if (test) {
				listItems[j].firstChild.onfocus = navMouseOver;
				listItems[j].relatedItem = test;
			}
		}
	}
	var menu2 = document.getElementById('menu2');
	if (menu2) {
		if (menu2.hasChildNodes()) {
			if (menu2) {
				menu2.onmouseover = navMouseOver;
				menu2.onmouseout = navMouseOut;
				var listItems2 = menu2.getElementsByTagName('li');
				for (var j = 0; j < listItems2.length; j++) {
					var test2 = listItems2[j].getElementsByTagName('ul')[0];
					if (test2) {
						listItems2[j].firstChild.onfocus = navMouseOver;
						listItems2[j].relatedItem = test2;
					}
				}
			}
		} else {
			menu2.style.display = "none";
		}
	}
}

var currentlyOpenedMenus = new Array();
var currentlyFocusedItem;

function navMouseOver(e) {
	var evt = e || window.event;
	var evtTarget = evt.target || evt.srcElement;
	if (evtTarget.nodeName == 'UL') return;
	while (evtTarget.nodeName != 'LI')
		evtTarget = evtTarget.parentNode;
	foldMenuIn(evtTarget);
	if (evtTarget.relatedItem && !evtTarget.relatedItem.opened) {
		evtTarget.className = 'highlight';



		evtTarget.relatedItem.className = 'foldOut';
		evtTarget.relatedItem.opened = true;
		currentlyOpenedMenus.push(evtTarget.relatedItem);
	}
}

function navMouseOut(e) {
	var evt = e || window.event;
	var relatedNode = evt.relatedTarget || evt.toElement;
	foldMenuIn(relatedNode);
}

function foldMenuIn(targetNode) {
	if (!targetNode) return;
	var newCurrentlyOpenedMenus = new Array();

	for (var i=0;i<currentlyOpenedMenus.length;i++) {
		if (!containsElement(currentlyOpenedMenus[i],targetNode)) {
			currentlyOpenedMenus[i].className = '';
			currentlyOpenedMenus[i].parentNode.className = '';
			

			
			currentlyOpenedMenus[i].opened = false;
		}
		else
			newCurrentlyOpenedMenus.push(currentlyOpenedMenus[i]);
	}
	currentlyOpenedMenus = newCurrentlyOpenedMenus;

}

function containsElement(obj1,obj2) {
	while (obj2.nodeName != 'HTML') {
		if (obj2 == obj1) return true;
		obj2 = obj2.parentNode;
	}
	return false;
}

function createIELink(){
	if (window.ActiveXObject) { // hack for IE browsers; otherwhise the next menu item will have a "magical" annoying offset
		var link = document.createElement("link");
		link.setAttribute("rel", "stylesheet");
		link.setAttribute("href", "http://www.sois.uwm.edu/afrikaans/style_ie.css");
		link.setAttribute("type", "text/css");
		var docHead = document.getElementsByTagName("head")[0];
		docHead.appendChild(link);
	}
}	
	


addEventSimple(window, "load", readSitemap);
addEventSimple(window, "load", createIELink);
