//
//  Nur zwei Funkionen werden im HTML-Code gebraucht: Enter und init_mousemove
//  init_mousemove muss im Body Tag mit dem Event-Handler "OnLoad" aufgerufen werden!
//  Enter muss angegeben werden, wenn ein aufklappbares Menuelement das OnMouseOver-Event erhält
//  Enter erwartet drei Parameter, id, tabid und parent
//  die id erwartet die id des <div>-Tags, das die Elemente mit display:none hält.
//  die tabid erwartet die id des <div>-Tags, das das komplette Menü darstellt.
//  die parentid ist optional und ist nur notwendig, wenn die zweite Ebene ausgeklappt werden soll.
//  sonst muss die id des übergeordneten Menüs angegeben werden
//

var docE1 = (typeof document.compatMode != "undefined" && document.compatMode != "BackCompat") ? "documentElement" : "body";
var g_xPos = 0;
var g_yPos = 0;
var g_aElementsToCheck = new Array();

// Zusätzlicher Berechnungsrahmen. Um alle Menüelemente "platziert".
var g_Spielraum = {l:0,r:0,t:0,b:0};

function max(x,y)
{
    return (x > y) ? x : y;
}
function min(x,y)
{
    return (x < y) ? x : y;
}

// Diese Funktion zeigt das angegebene Element an und speichert dieses ab.
function Enter(id, tabid)
{
    document.getElementById(id).style.display = "inline";
    for(var x = 0; x < g_aElementsToCheck.length; x++)
    {
        if(g_aElementsToCheck[x][0] == id)
            return;
    }

    g_aElementsToCheck.push(new Array(id, tabid, parent));
}

function Leave(id)
{
    document.getElementById(id).style.display = "none";
}

function GetAbsElementPosition(id)
{
    var obj = document.getElementById(id);
    var pos = {left:0, top:0};

    if(typeof obj.offsetLeft != 'undefined')
    {
       while (obj)
       {
           pos.left += obj.offsetLeft;
           pos.top += obj.offsetTop;
           obj = obj.offsetParent;
       }
    }
    else
    {
       pos.left = obj.left ;
       pos.top = obj.top ;
    }
    return pos;
}

function GetAbsElementRect(id)
{
    var rect = {left:0, top:0, right:0, bottom:0};
    var pos = GetAbsElementPosition(id);
    rect.left = pos.left;
    rect.top = pos.top;
    rect.right = document.getElementById(id).offsetWidth + rect.left;
    rect.bottom = document.getElementById(id).offsetHeight + rect.top;

    return rect;
}

function AlertElementAbsRect(rect)
{
    document.feld.ausg2.value = rect.left + "," + rect.right + ";" + rect.top + "," + rect.bottom;
}

function dpl_mouse_pos(e)
{
    g_xPos = e ? e.pageX : window.event.x;
    g_yPos = e ? e.pageY : window.event.y;

    if(document.all && !document.captureEvents)
    {
        g_xPos += document[docE1].scrollLeft;
        g_yPos += document[docE1].scrollTop;
    }

    for(var i = 0; i < g_aElementsToCheck.length; i++)
    {
        var elem = g_aElementsToCheck[i];
        var rect = GetAbsElementRect(elem[1]);

        if((g_xPos < rect.left-g_Spielraum.l) || (g_xPos > rect.right+g_Spielraum.r) || (g_yPos < rect.top-g_Spielraum.t) || (g_yPos > rect.bottom+g_Spielraum.b))
        {
            Leave(elem[0]);
            g_aElementsToCheck.splice(i,1);
        }

    }

    if(document.layers) routeEvent(e);
}

function init_mousemove()
{
    if(document.layers) document.captureEvents(Event.MOUSEMOVE);
    document.onmousemove = dpl_mouse_pos;
}
