function EventHandler(element) {
  var element = element;
  var oldEventHandlers = new Array();
  var attachedHandlers = new Array();
  var eventIndexes = {};
  this.attachEvent = attachEvent;

  function Handler(eventIndex, func) {
    this.eventIndex = eventIndex;
    this.doHandler = doHandler;

    function doHandler() {
      return func.call(this, eventIndex);
    }
  }

  construct.call(this);

  function construct() {
  }

  function attachEvent(evnt, func) {
    var eventIndex = eventIndexes[evnt];
    if(typeof(eventIndex) == "undefined") {
      eventIndex = attachedHandlers.length;
      eventIndexes[evnt] = eventIndex;
      oldEventHandlers[eventIndex] = eval("element." + evnt);
      attachedHandlers[eventIndex] = new Array();
      var handler = new Handler(eventIndex, doHandler);
      eval("element." + evnt + " = handler.doHandler;");
    }
    attachedHandlers[eventIndex][attachedHandlers[eventIndex].length] = func;
  }

  function doHandler(eventIndex) {
    var res = true;
    if(typeof(oldEventHandlers[eventIndex]) != "undefined" && oldEventHandlers[eventIndex] != null) {
      if(!oldEventHandlers[eventIndex].call(this)) res = false;
    }
    for(var i=0; i<attachedHandlers[eventIndex].length; i++) {
      if(!attachedHandlers[eventIndex][i].call(this)) res = false;
    }
    return res;
  }
}
