/*
   Datei: add_event.js
   Datum: 28.03.06

   Einen Eventaufruf einem Objekt zufuegen.

   Einerseits werden 4'er Browser unterstuetzt, anderseits enthaelt die
   Funktion eine verbesserte Fehlerueberpruefung (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 fuer das Objekt und fuer 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;
};


}())
}
