/** crossbrowser event handling wrapper
 * allows to attach and detach event handlers from/to dom objects 
 * 
 * addEventHandler(object obj, string evt, function yourhandler)
 *   attaches function to be event processor for given object.
 *     obj: dom object to attach event to
 *     evt: string event name ('onclick')
 *     function: function to attach
 *
 *   returns integer identifier of attached event handler.
 * 
 * removeEventHandler(int eventId)
 *   removes previously attached event handler
 *     eventId: identifier returned by addEventHandler
 *
 **/


var _EventHandlers = new Array();
var _EventHandlersId = 0;

function addEventHandler(obj, event, handler)
{
  _EventHandlers.push({obj:obj, event:event, handler:handler, id:++_EventHandlersId});
  if (obj.attachEvent)
    obj.attachEvent(event, handler);
  else if (obj.addEventListener)
    obj.addEventListener(event.substr(2), handler, false);
    
  return _EventHandlersId;
}

function cleanEventHandlers()
{
  var z, k;
  
  while ((k = _EventHandlers.pop()) != undefined)
  {
    if (k.obj.detachEvent)
      k.obj.detachEvent(k.event, k.handler);
    else if (k.obj.removeEventListener)
      k.obj.removeEventListener(k.event.substr(2), k.handler, false);
  }
}

function removeEventHandler(i)
{
  var j;
  for (j=0; j<_EventHandlers.length; j++)
    if (_EventHandlers[j].id == i)
    {
      var k = _EventHandlers.splice(j, 1)[0];
    
      if (k.obj.detachEvent)
        k.obj.detachEvent(k.event, k.handler);
      else if (k.obj.removeEventListener)
        k.obj.removeEventListener(k.event.substr(2), k.handler, false);  
      break;
    }
}

addEventHandler(window, 'onunload', cleanEventHandlers);

