
function createEl(i) {
  function fnx() { alert(this.innerHTML + "\n" + i); }
  (function() {
    var div = document.createElement("span");
    div.className = "muci";
    div.innerHTML = "&nbsp;foobar #"+i+"&nbsp;";
    //div.onclick = function() { alert(this.innerHTML + "\n" + i); };
    document.body.appendChild(div);
    addEvent(div, 'click', fnx)
  })()
  //div = null
};

function start() {
	var T1 = (new Date()).getTime(); // DEBUG.PROFILE
	for (var i = 0; i < 3000; ++i)
		createEl(i);
	alert(((new Date()).getTime() - T1) / 1000); // DEBUG.PROFILE
};


/*
var Function_array = []

function addEvent(obj,evType,fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
  }
  else if (obj.attachEvent){

    var nfn = function() {
      obj['tf'] = fn
      var r = obj['tf'](window.event)
      obj['tf'] = null
      obj = null
      return r
    };

    //(function(){
    Function_array[Function_array.length] = new Array(fn, nfn)

    var r = obj.attachEvent("on"+evType, nfn);
    //obj=null
    //})();

    return r
  }
}
*/


function addEvent(obj,evType,fn){
 var r = false;
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    r = true;
  }
  else if (obj.attachEvent) {
    var id = obj.sourceIndex || -1;

    if (!fn[evType + id]) {
      var f = fn[evType + id] = function(e) {
        var o = document.all[id] || document;
        o._f = fn;
        var s = o._f(e);
        o._f = null;
        return s;
      };

      r = obj.attachEvent("on" + evType, f);
      obj = null;
    }
  }
  return r;
};

function removeEvent(obj, evType, fn){
  var r = false
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, false);
    r = true;
  } else if (obj.detachEvent) {
    r = obj.detachEvent("on" + evType, fn[evType + (obj.sourceIndex || -1)]);
  }
  return r;
};
