/*
    Datei: mouse.js
    Datum: 23.09.2003
    Autor: Struppi <jstruebig@web.de>

    Beschreibung: Mouse events

    Funktionsliste:

     pos = getMousePos()
        pos.top/.left = Die aktuelle Mausposition.
        pos.scrollLeft/Top = Die aktuelle Mausposition im Doukement

     mouseEvent(event, function, ins [, Object])
        Ein Mouse Event erzeugen.

        event: ein String
        function: eine Referenz auf die Funktion
        Object: welches Objekt den Event bekommen soll (default: window)

        Werte für event: 'click', 'mousedown', 'mousemove', 'mouseover', 'mouseout'

    Die Mausposition
*/


///////////////////////////////////////////////////////////
// mouseEvent()
function mouseEvent(e, was, ins, wo)
{
    if(!wo) wo = window.document;
    // was muss eine Referenz auf eine Funktion sein.

    // Einige Vorbereitungen für NC 4.x
    if(typeof document.layers != 'undefined')
    {
          var evt = '';
          // Netscape 4 fängt nicht das onclick event.
          if(e == 'click') e = 'mousedown';

          if(e == 'mousedown') evt = Event.MOUSEDOWN;
          else if(e == 'mousemove') evt = Event.MOUSEMOVE;
          else if(e == 'mouseover') evt = Event.MOUSEOVER;
          else if(e == 'mouseout') evt = Event.MOUSEOUT;

          wo.captureEvents(evt);
    }
    else if(window.addEventListener && e == 'dblclick')
    {
          wo.addEventListener('dblclick',_event_func, false);
    }
    var event = 'on' + e;
    // Die Events sammeln
    if(typeof wo.hook == 'undefined') wo.hook = new Array();
    if(typeof wo.hook[e] == 'undefined')
    {
        wo.hook[e] = new Array();
        // alten Event sichern
        if(typeof wo[event] == 'function') wo.hook[e][wo.hook.length] = wo[event];
        wo[event] = _event_func;
    }
    if(ins) wo.hook[e][was] = was;
    else delete wo.hook[e][was];
    // alert(event + '\n' + _event_func);
}
///////////////////////////////////////////////////////////
// getMousePos()
function getMousePos()
{
    return _MOUSE_POS_;
}
//////////////////////////////////////////////////////////
// Die event Funktion
function _event_func(e)
{

    if(!e) e = window.event;
    for(var i in this.hook[e.type]) this.hook[e.type][i](e, this);
    return true;
}

///////////////////////////////////////////////////////////
// _mouse_pos_
var _MOUSE_POS_ = {left:0,top:0};

function _mouse_pos(evt, obj)
{
    if(!evt) return true;

    _MOUSE_POS_.left = evt.clientX;
    _MOUSE_POS_.top = evt.clientY;

    // Der IE 6 braucht Sonderbehandlung
    if(document.compatMode && document.compatMode == "BackCompat")
    {
        // IE 6 im Quirks-(BackCompat) Modus
        _MOUSE_POS_.scrollLeft =  _MOUSE_POS_.left + document.body.scrollLeft;
        _MOUSE_POS_.scrollTop = _MOUSE_POS_.top + document.body.scrollTop;
    }
    else if (document.compatMode && document.compatMode == "CSS1Compat") {
        // IE 6 im CSS1Compat Modus
        _MOUSE_POS_.scrollLeft= _MOUSE_POS_.left + document.documentElement.scrollLeft;
        _MOUSE_POS_.scrollTop = _MOUSE_POS_.top + document.documentElement.scrollTop;
    }else if (document.body)
    {
        // IE < 6 (nicht sicher da ich nur den IE 4 hab)
        _MOUSE_POS_.scrollLeft = _MOUSE_POS_.left + document.body.scrollLeft;
        _MOUSE_POS_.scrollTop  = _MOUSE_POS_.top + document.body.scrollTop;
    }
    return true;
}

 mouseEvent('mousemove', _mouse_pos, true);
