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;

  }

}

