
/*********************/
/* Events Classes */

function EventHandler(element, eventType, fn, obj, useCapture)
{
    this.useCapture = useCapture || false;
    this.element = element;
    this.eventType = eventType;
   	var self = this;

	this.__fixE = function(event) {
		if (!event) event = window.event;
		
		if (event.target)
			if (event.target.nodeType == 3) event.target = event.target.parentNode;
		else if (event.srcElement)
			event.target = event.srcElement;

		return event;
	}
	
	this.callback = function(e) {
		e = self.__fixE(e);
		// call the eventhandler
		var args = new Array;
		args[0] = e;
		obj[fn].apply(obj, args);
	}
}

EventManager =
{
    add: function (eventHandler)
    {
        if (eventHandler.element.addEventListener)
        {
            eventHandler.element.addEventListener(eventHandler.eventType, eventHandler.callback, eventHandler.useCapture);
            return true;
        }
        else if (eventHandler.element.attachEvent)
            return eventHandler.element.attachEvent("on" + eventHandler.eventType, eventHandler.callback);
    },
    
    remove: function (eventHandler)
    {
        if (eventHandler.element.removeEventListener)
        {
            eventHandler.element.removeEventListener(eventHandler.eventType, eventHandler.callback, eventHandler.useCapture);
            return true;
        }
        else if (eventHandler.element.detachEvent)
            return eventHandler.element.detachEvent("on" + eventHandler.eventType, eventHandler.callback);
    }
}

/* End EventManager */
