function getElm(id, root) {
	if (!root) var root = document;
	return root.getElementById(id);
}

function addEvent(element, event, func) {
	element.hasEventHandler = true;
	if (element.addEventListener)
		element.addEventListener(event, func, true)
//	else if (element.attachEvent)
//		element.attachEvent("on" + event, func)
	else
		element["on" + event] = func;
}

Menu = function (root) {
	this.build(root, null);
}

Menu.prototype.build = function (root, parent) {
	root.m_children = [];
	var main = root.childNodes;
	main = filterByClassName(main, "menuElementMain");
	var real = [];
	for (i in main) {
		q = main[i];
		
		
		
		s = getNextSibling(q.firstChild);
		if (s && hasClassName(s, "menuElementSub")) {
			
			// Remove links
			if (q.firstChild.tagName == "A") {
				q.firstChild.href = "#";
			}
		
			m = q;
			m.s = s;
			s.s = s;
			s.m = m;
			m.m = m;

			addEvent(m, "mouseover", MENU_BEHAVIOUR_OVER);
			addEvent(m, "mouseout", MENU_BEHAVIOUR_OUT);

			addEvent(s, "mouseover", MENU_BEHAVIOUR_OVER);
			addEvent(s, "mouseout", MENU_BEHAVIOUR_OUT);

			this.build(s.getElementsByTagName("ul")[0], root);
		}
	}
	
}

function getEventTarget(e) {
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	return targ;
}

function MENU_BEHAVIOUR_OVER (e) {
	appendClassName(this.m, "over");
}

function MENU_BEHAVIOUR_OUT (e) {
	removeClassName(this.m, "over");
}

function appendClassName(e, className) {
	if (!hasClassName(e, className)) {
		e.className += " " + className;
	}
}

function removeClassName(e, className) {
	if (e && e.className) {
		var classNamesTemp = e.className.split(" ");
		var classNames = []
		for (i in classNamesTemp) {
			classNameTemp = classNamesTemp[i];
			if (classNameTemp != className) {
				classNames.push(classNameTemp);
			}
		}
		e.className = classNames.join(" ");
	}
}

function hasClassName(e, className) {
	if (!e.className)
		return false;
	var classNamesTemp = e.className.split(" ");
	for (i in classNamesTemp) {
		classNameTemp = classNamesTemp[i];
		if (classNameTemp == className)
			return true;
	}
	return false;
}

function filterByClassName(c, className) {
	var r = [];
	for (i in c) {
		var e = c[i];
		if (hasClassName(e, className)) r.push(e);
	}
	return r;
}

function getNextSibling(e) {
	do {
		e = e.nextSibling;
	} while (e && e.nodeType != 1)
	return e;
}

function trace(s) {
	document.getElementById("trace").innerHTML += " -| " + s + " |- ";
}