var mouse = {x: 0, y: 0};
var pTimeoutId = 0;
var lastPopupId = new Array(null, '', '', '', '');

function getMouseXY(e)
{ 
	e = e || window.event;
	if (e.pageX || e.pageY) {
		mouse.x = e.pageX;
		mouse.y = e.pageY;
	} else if (e.clientX || e.clientY) {
		mouse.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		mouse.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
	}
}

document.onmousemove = getMouseXY;

function getPos(ref) {
	var x = y = 0;
	if (ref.offsetParent) {
		do {
			x += ref.offsetLeft;
			y += ref.offsetTop;
		} while (ref = ref.offsetParent);
	}
	return {x:x, y:y};
}

function showPopup(ref, popup, level) {
	if (pTimeoutId != 0) {
		clearTimeout(pTimeoutId);
		pTimeoutId = 0;
	}
	_hidePopup(level, true);
	lastPopupId[level] = popup;
	document.getElementById(popup).style.left = getPos(ref).x + ref.offsetWidth;
	document.getElementById(popup).style.top = getPos(ref).y - 1;
	document.getElementById(popup).style.display = 'inline';
}

function _hidePopup(level, force) {
	if (level < lastPopupId.length - 1) {
		if (!_hidePopup(level + 1, force)) return false;
	}
	var popup = lastPopupId[level];
	if (!popup) return true;
	p_left = document.getElementById(popup).offsetLeft;
	p_right = p_left + document.getElementById(popup).offsetWidth;
	p_top = document.getElementById(popup).offsetTop;
	p_bottom = p_top + document.getElementById(popup).offsetHeight;
	if (force || mouse.x < p_left || mouse.x > p_right || mouse.y < p_top || mouse.y > p_bottom) {
		document.getElementById(popup).style.display = 'none';
		lastPopupId[level] = '';
		return true;
	} else {
		return false;
	}
}

function hidePopup() {
	if (pTimeoutId == 0) pTimeoutId = setTimeout('pTimeoutId=0;_hidePopup(1)', 500);
}