var _Event = {
    DOMEvents : new Array(),
    addDOMEvent : function(a,b,c)
    {
        if(window.addEventListener)
            a.addEventListener(b,c,true);
        else if(window.attachEvent)
            a.attachEvent('on'+b,c);  
        else
            eval("a.on"+b+" = c");  
        var h = new _EventHandle(a,b,c)    
        _Event.DOMEvents.push(h);
        return h;
    },
    releaseDOMEvent : function(h)
    {
       var i = _Event.DOMEvents.index(h);
       if(i != -1)
       {
          if(window.removeEventListener)
             h.source.removeEventListener(h.method,h.handler,true);
          else
             h.source.detachEvent("on"+h.method,h.handler);
          h.active = false;
       }
    },
    releaseDOMEvents : function()
    {
       var e = _Event.DOMEvents;
       var l = e.length;
       for(var i=0;i<l;i++)
       {
         _Event.releaseDOMEvent(e[i]);
       }
    },
    releaseEventsFromDOMNode : function(s)
    {
       var e = _Event.DOMEvents;
       for(var i=0;i<e.length;i++)
       {
          if(e[i].source == s)
            _Event.releaseDOMEvent(e[i]);
       }
    },
    cancelEvent : function(e)
    {
		if(window.addEventListener)
			e.preventDefault();
		else
			e.returnValue = false;
    }
}

function _EventHandle(a,b,c)
{
    this.source = a;
    this.method = b;
    this.handler = c;
    this.active = true;
}
_Event.addDOMEvent(window,"unload",_Event.releaseDOMEvents);
