/*
   Datei: add_event.js
   Datum: 28.03.06

   Einen Eventaufruf einem Objekt zufügen.

   Einerseits werden 4'er Borwser unterstützt, anderseits enthält die
   Funktion eine verbesserte Fehlerüberprüfung (die Zeit haben wir hier)
   und die Funktion kann auch mit benannten Parametern aufgerufen werden.

   Die Funktion kann so benutzt werden:

   addEvent( function, event, obj);

   function - Eine Funktionsreferenz
   event - Der Event der beobachtet werden soll (ohne 'on')
   obj - Das Objekt auf dem der Event stattfindet.

   Oder so:

   addEvent( {
   func: function,
   evt: event,
   obj: obj
   })
*/

if (typeof addEvent == 'undefined')
{
( function() {
var mouse = {};

window.getEvtProp = function (e)
{
    if(!e) e = window.event;

    var body = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
    window.document.documentElement : window.document.body || null;

    mouse.Y = e.pageY ? e.pageY : e.clientY + body.scrollTop;
    mouse.X = e.pageX ? e.pageX : e.clientX + body.scrollLeft;
    mouse.clientX = e.clientX ? e.clientX : e.pageX - window.pageXOffset;
    mouse.clientY = e.clientY ? e.clientY : e.pageY - window.pageYOffset;
    mouse.type = e.type;

    mouse.obj = e.target ? e.target : e.srcElement ? e.srcElement : null;
    if(mouse.obj &&  mouse.obj.nodeType == 3) mouse.obj = mouse.obj.parentNode;
    return mouse;
};

var evt_id = 1;

window.addEvent = function()
{
    var o, n, f;
    if( arguments.length == 1)
    {
         // Argumente mit Namen
         o = arguments[0]['obj'];
         n = arguments[0]['evt'];
         f = arguments[0]['func'];
    }
    else
    {
         // Argumente
         o = arguments[0];
         n = arguments[1];
         f = arguments[2];
    }
    // Defaultwerte für das Objekt und für den Event
    if(!o) o = window;
    if(!n) n = 'load';

    var d = 'addEventListener';
    var h = 'on' + n;
    // addEventListener -> der Beste Weg
    if (o[d]) return o[d](n, f, false);

    if( !f.H_ID) f.H_ID = ++evt_id;
    if( !o.evtHandler) o.evtHandler = {};
    if( !o.evtHandler[n]) o.evtHandler[n] = {};
    o.evtHandler[n][f.H_ID] = f;

    // Den Handler registrieren
    o[h] = privateEvt;

    return true;
};
function privateEvt  (e)
{
     if(!e) e = window.event;
     for(var f_id in this.evtHandler[e.type]);
     {
        this.FUNCTION = this.evtHandler[e.type][f_id];
        this.FUNCTION(e);
     }
     return false;
}
window.removeEvent = function (o, n, f)
{
    var d = 'removeEventListener';
    if (o[d]) return o[d](n, f, false);

    if(o.evtHandler && o.evtHandler[n][f.H_ID]) delete o.evtHandler[n][f.H_ID];
    return true;
};


}())
}