﻿function getPosition(e)
{
	var left = 0;
	var top  = 0;

	while (e.offsetParent)
	{
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseCoords(ev) { if (ev.pageX || ev.pageY) { return { x: ev.pageX, y: ev.pageY }; } return { x: ev.clientX + document.body.scrollLeft - document.body.clientLeft, y: ev.clientY + document.body.scrollTop - document.body.clientTop }; }

function getMouseOffset(target, ev) {
    var docPos = getPosition(target);
    var mousePos = mouseCoords(ev);
    return { x: mousePos.x - docPos.x, y: mousePos.y - docPos.y + target.scrollTop };
}

var visiblemenu = null;

function showPopup(ev, hid, pid, anchor) 
{
    var hold = document.getElementById(hid);
    var menu = document.getElementById(pid);
    if (menu == null) return;

    menu.style.position = 'absolute';
    if (anchor == 'topleft') {
        menu.style.left = getPosition(hold).x + 'px';
        menu.style.top = getPosition(hold).y + hold.offsetHeight + 'px';
    }
    else if (anchor == 'topright') {
        menu.style.left = getPosition(hold).x + hold.offsetWidth - menu.offsetWidth + 'px';
        menu.style.top = getPosition(hold).y + hold.offsetHeight + 'px';
    }
    else if (anchor == 'bottomleft') {
        menu.style.left = getPosition(hold).x + 'px';
        menu.style.top = getPosition(hold).y - menu.offsetHeight + 'px';
    }
    else if (anchor == 'bottomright') {
        menu.style.left = getPosition(hold).x + hold.offsetWidth - menu.offsetWidth + 'px';
        menu.style.top = getPosition(hold).y - menu.offsetHeight + 'px';
    }
    else if (anchor == 'topmiddle') {
        menu.style.left = getPosition(hold).x + (hold.offsetWidth / 2) - (menu.offsetWidth / 2) + 'px';
        menu.style.top = getPosition(hold).y + hold.offsetHeight + 'px';
    }
    else if (anchor == 'leftmiddle') {
        menu.style.left = getPosition(hold).x + hold.offsetWidth + 'px';
        menu.style.top = getPosition(hold).y + (hold.offsetHeight / 2) - (menu.offsetHeight / 2) + 'px';
    }
    else if (anchor == 'rightmiddle') {
        menu.style.left = getPosition(hold).x - menu.offsetWidth + 'px';
        menu.style.top = getPosition(hold).y + (hold.offsetHeight / 2) - (menu.offsetHeight / 2) + 'px';
    }
    else if (anchor == 'bottommiddle') {
        menu.style.left = getPosition(hold).x + (hold.offsetWidth / 2) - (menu.offsetWidth / 2) + 'px';
        menu.style.top = getPosition(hold).y - menu.offsetHeight + 1 + 'px';
    }
    menu.style.visibility = 'visible';
//  menu.style.display = 'inline';

    if (visiblemenu != null && visiblemenu != menu) 
    {
        visiblemenu.style.visibility = 'hidden';
//        visiblemenu.style.display = 'none';
    }
    visiblemenu = menu;
}
function showPopup2(ev, hid, pid, x, y) 
{
    var hold = document.getElementById(hid);
    var menu = document.getElementById(pid);
    if (menu == null) return;

    menu.style.position = 'absolute';
    menu.style.left = $('#nav').position().left + 'px';
    menu.style.top = y + 'px';
    menu.style.visibility = 'visible';

    if (visiblemenu != null && visiblemenu != menu) 
    {
        visiblemenu.style.visibility = 'hidden';
    }
    visiblemenu = menu;
}

function hidePopup(ev, hid, pid) 
{
    var hold = document.getElementById(hid);
    var menu = document.getElementById(pid);
    if (menu == null) return;
    
    var holdOffset = getMouseOffset(hold, ev);
    var menuOffset = getMouseOffset(menu, ev);

    if ((holdOffset.x > 0 && holdOffset.x < hold.offsetWidth && holdOffset.y > 0 && holdOffset.y < hold.offsetHeight) ||
        (menuOffset.x > 0 && menuOffset.x < menu.offsetWidth && menuOffset.y > 0 && menuOffset.y < menu.offsetHeight))
    {
    }
    else
    {
        menu.style.visibility = 'hidden';
    }
}