<!--
/*
+----------------------------------------------------------------------------------------------
| gotopage 3.0 - Content Management by Rosman
| Copyright (c) 2003 - 2005 Rosman (http://www.rosman.co.at)
|
| Author(s): Johan Rosman <johan@rosman.co.at>
| Credits:   Peter-Paul Koch (http://www.quirksmode.org)
+----------------------------------------------------------------------------------------------
| Purpose
| Register Event Handlers using an advanced model
+----------------------------------------------------------------------------------------------
| Version   Date         Comment
| 3.03      2005/10/21   issue 142, unregister_handler added
| 3.02      2005/10/10   issue 132, Microsoft's event handling "attachEvent" is useless
| 3.01      2005/09/23   initial version, issue 24
+----------------------------------------------------------------------------------------------
*/
if ( !window._event ) {
/*
+----------------------------------------------------------------------------------------------
| private part
+----------------------------------------------------------------------------------------------
*/
    var _event = new Object();
    _event.objects = new Array();
    _event.pseudo_id = 0;
    _event.id = null;

    _event.handler_proxy = function ( _e ) {
        if ( !_e ) var _e = window.event;
        _event.id = this.id;
        for ( var _i=0; _i<_event.objects[this.id][_e.type].length; _i++ ) {
            if ( _event.objects[this.id][_e.type][_i] ) // issue 142
                _event.objects[this.id][_e.type][_i] ( _e );
        }
    } // handler_proxy
/*
+----------------------------------------------------------------------------------------------
| public part
+----------------------------------------------------------------------------------------------
*/
    _event.target = function ( _e ) {
        if ( _e.target ) var _tgt = _e.target;
        else if ( _e.srcElement ) var _tgt = _e.srcElement;
        if ( _tgt.nodeType == 3 ) // defeat Safari bug
            _tgt = _tgt.parentNode;
        return _tgt;
    } // target

    _event.register_handler = function ( _obj, _name, _handler ) {
        _onname = 'on' + _name;
        if ( _obj.addEventListener ) _obj.addEventListener ( _name, _handler, false );
        else {
            if ( !_obj.id ) {
                _obj.id = '___event___' + _event.pseudo_id;
                _event.pseudo_id++;
            }
            if ( ! _event.objects[_obj.id] ) {
                _event.objects[_obj.id] = new Array();
            }
            if ( ! _event.objects[_obj.id][_name] ) {
                _event.objects[_obj.id][_name] = new Array();
                eval ( '_obj.on'+_name+' = _event.handler_proxy;' );
            }
            _event.objects[_obj.id][_name][_event.objects[_obj.id][_name].length] = _handler;
        }
    } // register_handler

// issue 142 : new function unregister_handler_________________________________________________
    _event.unregister_handler = function ( _obj, _name, _handler ) {
        _onname = 'on' + _name;
        if ( _obj.removeEventListener ) _obj.removeEventListener ( _name, _handler, false );
        else {
            if ( !_obj.id ) {
                _obj.id = '___event___' + _event.pseudo_id;
                _event.pseudo_id++;
            }
            if ( _event.objects[_obj.id] && _event.objects[_obj.id][_name] ) {
                for ( var _i=0; _i<_event.objects[_obj.id][_name].length; _i++ ) {
                    if ( _event.objects[_obj.id][_name][_i] == _handler )
                        _event.objects[_obj.id][_name][_i] = null;
                }
            }
        }
    } // unregister_handler

}
-->
