var level = 0;

function AddNodesToArray(liArray, node) {
	var i, j, child;
	level++;

	//doc.write("<b>"+node.nodeName+"</b>" + "<br>\n");
	for (i = 0; i < node.childNodes.length; i++) {
		child = node.childNodes[i];
		child.level = level;
		if (child.nodeName == 'LI') {
			//doc.write("&nbsp;&nbsp;&nbsp;"+child.nodeName + " " + child.innerText + "<br>\n");
			liArray[liArray.length] = child;
			//        child.style.display = 'line';
			child.style.listStyle = 'none';
			child.style.position = 'static';
			//		child.style.width= '100px';
			for (j = 0; j < child.childNodes.length; j++) {
				if (child.childNodes[j].nodeName == 'UL')
					AddNodesToArray(liArray, child.childNodes[j]);
			}
		}
	}
	level--;
}

function cssjsmenu(menuid, frame) {
	var i;
	var j;
	var node;
	var child;
	var parent;

	// if the browser doesn't even support
	// document.getElementById, give up now.
	if (!document.getElementById) {
		return true;
	}

	// check for downlevel browsers
	// Opera 6, IE 5/Mac are not supported

	var version;
	var offset;

	offset = navigator.userAgent.indexOf('Opera');
	if (offset != -1) {
		version = parseInt('0' + navigator.userAgent.substr(offset + 6), 10);
		if (version < 7) {
			return true;
		}
	}

	offset = navigator.userAgent.indexOf('MSIE');
	if (offset != -1) {
		if (navigator.userAgent.indexOf('Mac') != -1) {
			return true;
		}
	}

	var menudiv = document.getElementById(menuid);

	// ul
	var ul = new Array();

	for (i = 0; i < menudiv.childNodes.length; i++) {
		node = menudiv.childNodes[i];
		if (node.nodeName == 'UL') {
			ul[ul.length] = node;
		}
	}

	// ul > li
	var ul_gt_li = new Array();

	for (i = 0; i < ul.length; i++) {
		AddNodesToArray(ul_gt_li, ul[i]);
	}

	// ul > li > ul
	var ul_gt_li_gt_ul = new Array();

	for (i = 0; i < ul_gt_li.length; i++) {
		node = ul_gt_li[i];
		for (j = 0; j < node.childNodes.length; j++) {
			child = node.childNodes[j];
			if (child.nodeName == 'UL') {
				if (frame && frame.all) {
					frame.all[frame.all.length] = child;
				}
				ul_gt_li_gt_ul[ul_gt_li_gt_ul.length] = child;
				child.style.position = 'absolute';
				child.style.left = '-13em';
				child.style.visibility = 'hidden';

				// attach hover to parent li
				parent = child.parentNode;
				parent.onmouseover = function (e) {
					var i;
					var child;
					var point;

					// stop the pure css hover effect
					// this.style.paddingBottom = '0';

					for (i = 0; i < this.childNodes.length; i++) {
						child = this.childNodes[i];
						if (child.nodeName == 'UL') {
							point = getPageXY(this);
							if (this.level == 1)
								setPageXY(child, point.x, point.y + this.offsetHeight);
							else
								setPageXY(child, point.x + this.offsetWidth, point.y);
							child.style.visibility = 'visible';
							child.style.zIndex = '1000';
						}
					}
					return false;
				};
				parent.onmouseout = function (e) {
					var relatedTarget = null;
					if (e) {
						relatedTarget = e.relatedTarget;
						// work around Gecko Linux only bug where related target is null
						// when clicking on menu links or when right clicking and moving
						// into a context menu.
						if (navigator.product == 'Gecko' && navigator.platform.indexOf('Linux') != -1 && !relatedTarget) {
							relatedTarget = e.originalTarget;
						}
					}
					else if (window.event) {
						relatedTarget = window.event.toElement;
					}

					if (elementContains(this, relatedTarget)) {
						return false;
					}

					var i;
					var child;
					for (i = 0; i < this.childNodes.length; i++) {
						child = this.childNodes[i];
						if (child.nodeName == 'UL') {
							child.style.visibility = 'hidden';
						}
					}
					return false;
				};
			}
		}
	}
	return true;
}
function elementContains(elmOuter, elmInner) {
	while (elmInner && elmInner != elmOuter) {
		elmInner = elmInner.parentNode;
	}
	if (elmInner == elmOuter) {
		return true;
	}
	return false;
}

function getPageXY(elm) {
	var point = { x: 0, y: 0 };
	while (elm) {
		point.x += elm.offsetLeft;
		point.y += elm.offsetTop;
		elm = elm.offsetParent;
	}
	return point;
}

function setPageXY(elm, x, y) {
	var parentXY = { x: 0, y: 0 };

	if (elm.offsetParent) {
		parentXY = getPageXY(elm.offsetParent);
	}

	elm.style.left = (x - parentXY.x) + 'px';
	elm.style.top = (y - parentXY.y) + 'px';
}
