
var popupmenus = new Array()
var do_close_all = -1;   // index, des aktuellen levels; alles darueber wird ausgeblendet

function isArray(obj) {
   if (!obj || !obj.constructor || obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}


function popupmenu_findPosX(obj)
{

    var curleft = 0;
    if (document.getElementById || document.all)
    {
        while (obj.offsetParent)
        {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (document.layers)
        curleft += obj.x;
    return curleft;
}

function popupmenu_findPosY(obj)
{
    var curtop = 0;
    if (document.getElementById || document.all)
    {
        while (obj.offsetParent)
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (document.layers)
        curtop += obj.y;
    return curtop;
}


function popupmenu_find(menu) {
	for (i = 0; i < popupmenus.length; i++) {
		if (popupmenus[i][0] == menu)
			return i;
	}
	return -1;
}

function popupmenu_find_group(group) {
	for (i = 0; i < popupmenus.length; i++) {
		if (popupmenus[i][1] == group)
			return i;
	}
	return -1;
}


function popupmenu_timeout() {
	setTimeout('popupmenu_close_all();', 100)
}

function popupmenu_mouseout(menu) {
	mi = popupmenu_find(menu)
	do_close_all = 0;  // register close all!
//	if (do_close_all < 0 || do_close_all > mi) do_close_all = mi
//	if (do_close_all >= 0) alert('mouseout: '+do_close_all)
	popupmenu_timeout()
}

function popupmenu_close(menu) {
	mi = popupmenu_find(menu)
	if (mi < 0) return false; /* menu not visible */

	document.getElementById(menu).style.visibility = "hidden";

	if (mi < popupmenus.length - 1) {
		/* traverse the tree up and close all children */
		while (mi < popupmenus.length - 1) {
			gi2 = popupmenu_find_group(menu)
			if (gi2 > mi) {
				popupmenu_close(popupmenus[gi2][0])
			}
			else
				break;
		}
	}

	if (mi == popupmenus.length-1) {
		l2 = popupmenus.length
		popupmenus.pop()
		return true;
	}

//	popupmenu_close(popupmenus[mi][0])
}

function popupmenu_close_all() {
	if (do_close_all < 0) return;
//	alert('do_close_all: '+do_close_all)

	for (i = popupmenus.length-1; i >= do_close_all; i--) {
		//alert('call close: '+i+" : "+popupmenus[i][0])
		popupmenu_close(popupmenus[i][0])
	}
	popupmenus.length = 0
	do_close_all = -1
}

function popupmenu_open_ex(menu, link, left, top, group) {

	m = document.getElementById(menu)
	if (!m) return false;

	m.style.left = popupmenu_findPosX(link)+left
	m.style.top = popupmenu_findPosY(link)+top

	return popupmenu_open(menu, group)
}

function popupmenu_open(menu, group) {
	m = document.getElementById(menu)
	if (!m) return false;

	gi = popupmenu_find_group(group)
	if (gi >= 0 && popupmenus[gi][0] != menu) {
		// close group
		if (isArray(popupmenus[gi]))
			popupmenu_close(popupmenus[gi][0])
	}

	mi = popupmenu_find(menu)
	if (do_close_all == 0) {
		do_close_all = -1
	}

	m.style.visibility = "visible";

	if (mi < 0) {
		popupmenus[popupmenus.length] = new Array(menu, group)
	}
	else
		return false; // already visible

	return true;
}



