cms.event =
{
	virtualHandlers : new Object(),
	
	attach : function(element, eventName, callback, thisKeyword, attachToProperty)
	{
		var eventHandler = callback;
		if (thisKeyword != undefined)
		{
			eventHandler = function(event)
			{
				if (event == undefined)
				{
					event = window.event;
				}
				callback.call(thisKeyword, event);
			};
			this.virtualHandlers[callback] = eventHandler;
		}

		if (attachToProperty)
		{
			element["on" + eventName] = eventHandler;
		}
		else if (element.addEventListener)
		{
			element.addEventListener(eventName, eventHandler, false);
		}
		else if (element.attachEvent)
		{
			element.attachEvent("on" + eventName, eventHandler);
		}
    },
	
	detach : function(element, eventName, callback, detachFromProperty)
	{
		if (this.virtualHandlers[callback] != undefined)
		{
			callback = this.virtualHandlers[callback];
			delete this.virtualHandlers[callback];
		}

		if (detachFromProperty)
		{
			element["on" + eventName] = undefined;
		}
		else if (element.removeEventListener)
		{
			element.removeEventListener(eventName, callback, false);
		}
		else if (element.detachEvent)
		{
			element.detachEvent("on" + eventName, callback);
		}
	}
}
