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])
			}
		}
	}
}