function initNlMenuRoot() {	
	var effects_a = new Array();
	var nlMenuRoot = document.getElementById('nlMenuRoot');	
	var lis = nlMenuRoot.getElementsByTagName('li');
	
	for (var i = 0; i < lis.length; i++) {
		lis[i].onmouseover = nlMenuOver;
		lis[i].onmouseout = nlMenuSetTimeout;
		
		//if (lis[i].getElementsByTagName('ul').length > 0) {
			//lis[i].getElementsByTagName('a')[0].innerHTML += '<span>&rarr;</span>';
		//}
		var uls = lis[i].getElementsByTagName('ul');
		
		for (var k = 0; k < uls.length; k++) {
			var found = 'no';
			for (var z = 0; z < effects_a.length; z++) {
				if (effects_a[z] == uls[k]) {
					found = 'yes';
				}
			}
			if (found == 'no') {
				effects_a[effects_a.length] = uls[k];
				uls[k].style.zIndex = '100';
				mlEffectLoad(uls[k]);
			}
		}
	}
}
function nlMenuSetTimeout(e) {
	if (!e) {
		var the_e = window.event;
	} else {
		var the_e = e;
	}
	var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.toElement;
	if (reltg) {
		var under = ancestor(reltg, this);
		if (under === false && reltg != this) {
			window.mlLast = this;
			var parent = this.parentNode;
			while (parent.parentNode
					&& parent.id.indexOf('nlMenuRoot') == -1) {
				parent = parent.parentNode;				
			}
			if (parent.className.indexOf('delay') != -1) {
				window.mlTimeout = setTimeout(function() {
							nlMenuOut()
						}, 500);				
			} else {
				nlMenuOut();
			}			
		}
	}
}
function nlMenuOut() {
	if (window.mlLast == null)
		return false;
	var uls = window.mlLast.getElementsByTagName('ul');
	for (var i = 0; i < uls.length; i++) {
		mlEffectOut(uls[i]);
		uls[i].parentNode.className = 'nlMenuParent';
	}
	window.lastover = null;
}
function nlMenuOver(e) {
	if (!e) {
		var the_e = window.event;
	} else {
		var the_e = e;
	}
	the_e.cancelBubble = true;
	if (the_e.stopPropagation) {
		the_e.stopPropagation();
	}
	clearTimeout(window.mlTimeout);
	if (window.mlLast && window.mlLast != this
			&& ancestor(this, window.mlLast) == false) {
		nlMenuOut();
	} else {
		window.mlLast = null;
	}
	var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.fromElement;
	var ob = this.getElementsByTagName('ul');
	var under = ancestor(reltg, this);
	if (ob[0] && under == false) {
		if (window.lastover != ob[0]) {			
			this.className = 'nlMenuParent over';
			mlEffectOver(ob[0], this);
			window.lastover = ob[0];
		}
	}
}
function mlSetOpacity(ob, level) {
	if (ob) {
		var standard = level / 10;
		var ie = level * 10;
		
		ob.style.opacity = standard;
		ob.style.filter = "alpha(opacity=" + ie + ")"
	}
}
function mlIncreaseOpacity(ob) {
	var current = ob.style.opacity;
	if (lastob == ob && lastop == current) {
		current = current * 10;
		var upone = current + 1;
		mlSetOpacity(ob, upone);
		lastob = ob;
		lastop = upone / 10;
	}
}
function mlEffectOver(ob, parent) {	
	ob.style.display = 'block';
	if (ob.style.opacity == 0) {
		lastob = ob
		lastop = 0;
		for (var i = 1; i <= 10; i++) {
			setTimeout(function() {
						mlIncreaseOpacity(ob)
					}, i * 30);
		}
		setTimeout(function() {
					ob.style.filter = ''
				}, 500);
	}		
}
function mlEffectOut(ob) {
	mlSetOpacity(ob, 0);
	ob.style.display = 'none';
}
function mlEffectLoad(ob) {
	var parent = ob.parentNode;
	while (parent.parentNode && parent.id.indexOf('nlMenuRoot') == -1) {
		parent = parent.parentNode;
	}
	if (parent.className.indexOf('fade') != -1) {
		ob.style.display = 'none';
		ob.className = 'fade';
		mlSetOpacity(ob, 0);
	}
}
function ancestor(child, parent) {
	if (child == null)
		return false;
		
	if (navigator.userAgent.indexOf('Gecko') != -1
			&& navigator.userAgent.indexOf('Opera') == -1) {
		var allc = parent.getElementsByTagName('*');
		for (var i = 0; i < allc.length; i++) {
			if (allc[i] == child) {
				return true;
			}
		}
	} else {
		for (; child.parentNode; child = child.parentNode) {
			if (child.parentNode === parent)
				return true;
		}
	}
	return false;
}