function addKeyDownEvent(func) {
  var oldkeydown = document.onkeydown;
  if (typeof document.onkeydown != 'function') {
    document.onkeydown = func;
  } else {
    document.onkeydown = function() {
      oldkeydown();
      func();
    } 
  }
}

var EventManager = {
	fix: 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
	},

	attach: function (element, eventName, handler) {
		if (element.addEventListener) {
			element.addEventListener(eventName, handler, false);
		} else if (element.attachEvent) {
			if (!element._listeners) element._listeners = new Array();
			if (!element._listeners[eventName]) element._listeners[eventName] = new Array();
			var workaroundFunc = function () {
				handler.apply(element, new Array());
			}
			element._listeners[eventName][handler] = workaroundFunc;
			element.attachEvent('on' + eventName, workaroundFunc);
		}
	},

	detach: function (element, eventName, handler) {
		if (element.removeEventListener) {
			element.removeEventListener(eventName, handler, false)
		} else if (element.detachEvent) {
			if (element._listeners
					&& element._listeners[eventName]
					&& element._listeners[eventName][handler]) {

				element.detachEvent('on' + eventName,
						element._listeners[eventName][handler])
			}
		}
	}
}