/*
   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 = {};
    var evt_id = 1;

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

         var body = window.document.body;

         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;
    };
    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] = function(e)
         {
              //alert(h + '/'+ this.href);
              // OP 7.21 "vergisst" manchmal das evtHandler Objekt
              return privateEvt(this, e, o.evtHandler);

         }
         return true;
    };
    function privateEvt (o, e, hdl)
    {
         if(!e) e = window.event;
         if(!hdl) return
         for(var f_id in hdl[e.type]);
         {
              o.FUNCTION = hdl[e.type][f_id];

              o.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;
    };
}())
}


