function init(){

	var uls = document.getElementsByTagName('ul');
	for(var u = 0; u < uls.length;u++){
		if(uls[u].className == "mainmenu") {
			var lis = uls[u].getElementsByTagName('li');
			for(var i = 0; i < lis.length;i++){
				var node = lis[i];
				addEvent(node,'mouseover',getMoverFor(node,i),false);
				addEvent(node,'mouseout',getMoutFor(node),false);
			}
		}
	}
}

function getMoverFor(node,i){
	return function(e) {mover(e, node, i); };
}

function getMoutForSub(node){
	return function(e) {moutSub(e, node); };
}

function moverSub(e, targetElement){
	var el = window.event ? targetElement : e ? e.currentTarget : null;
	if (!el) return;
	clearTimeout(window.outTimeout);
}

function mover(e, targetElement, i){
	var el = window.event ? targetElement : e ? e.currentTarget : null;
	if (!el) return;
	clearTimeout(window.outTimeout);
	el.className = "mainmenuact";
	el.getElementsByTagName('a')[0].className = "mainmenuact";
	reset(i);
}

function mout(e, targetElement) {
	var el = window.event ? targetElement : e ? e.currentTarget : null;
	if (!el) return;
	window.outTimeout = setTimeout(function() { mout2(); }, 400);
}

function moutSub(e, targetElement){
	if (checkMouseLeave(targetElement, e)){
		//window.outTimeout = setTimeout(function() { mout2(); }, 600);
		mout2();
	}
}

function mout2(){

	//de-highlight other tabs:
	var uls = document.getElementsByTagName('ul');
	for(var u = 0; u < uls.length;u++){
		if(uls[u].className == "mainmenu") {
			var lis = uls[u].getElementsByTagName('li');
			for(var x = 0; x < lis.length;x++){
				lis[x].className = "mainmenu";
				lis[x].getElementsByTagName('a')[0].className = "mainmenu";

			}
			var current = document.getElementById("current");
			if(current){
				current.className = "mainmenuact";
				current.getElementsByTagName('a')[0].className = "mainmenuact";
			}
		}
	}

	var divs = document.getElementsByTagName('div');
	for(var d = 0; d < divs.length;d++){
		if(divs[d].className == "submenu") {
			divs[d].style.display = 'none';
		}else if(divs[d].className == "submenuact") {
			divs[d].style.display = 'block';
		}
	}
}

function getMoverForSub(node){
	return function(e) {moverSub(e, node); };
}

function getMoutFor(node,i){
	return function(e) {mout(e, node, i); };
}

function reset(i){
	resetOtherTabs(i); // dehilite all tabs except for the moueover
	var divs = document.getElementsByTagName('div');
	for(var d = 0; d < divs.length;d++){
		if(divs[d].className == "submenu" || divs[d].className == "submenuact") {
			if (typeof(offset) == "undefined") offset = d;
			if(d==i+offset) divs[d].style.display = 'block';
			else divs[d].style.display = 'none';
			addEvent(divs[d],'mouseover',getMoverForSub(divs[d],i+offset),false);
			addEvent(divs[d],'mouseout',getMoutForSub(divs[d]),false);
		}
	}
}

function resetOtherTabs(i){

	var uls = document.getElementsByTagName('ul');
	for(var u = 0; u < uls.length;u++){
		if(uls[u].className == "mainmenu") {
			var lis = uls[u].getElementsByTagName('li');
			for(var x = 0; x < lis.length;x++){
				if(x != i) {
					lis[x].className = "mainmenu";
					lis[x].getElementsByTagName('a')[0].className = "mainmenu";
				}
			}
		}
	}
}

function containsDOM (container, containee) {
	var isParent = false;
	do {
		if ((isParent = container == containee))
		break;
		containee = containee.parentNode;
	}
	while (containee != null);
	return isParent;
}

function checkMouseLeave (element, evt) {
	if (element.contains && evt.toElement) {
		return !element.contains(evt.toElement);
	}
	else if (evt.relatedTarget) {
		return !containsDOM(element, evt.relatedTarget);
	}
}

function addEvent(elm, evType, fn, useCapture) {
	// cross-browser event handling for IE5+, NS6 and Mozilla
	// By Scott Andrew
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		EventCache.add(elm, evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
		return false;
	}
}

addEvent(window, 'unload', EventCache.flush, false);
