var procfunc = new Array();

function initEvents() {
//  if (window.Event) {
    //window.captureEvents(Event.CLICK);
    //window.captureEvents(Event.KEYDOWN);
    //window.captureEvents(Event.MOUSEDOWN);
try {
    window.addEventListener('mousedown', processMouseDown, false);
    //window.addEventListener('mouseup', processMouseUp, false);
    window.addEventListener('mousemove', processMouseMove, false);
    window.addEventListener('keydown', processKeyDown, false);
    window.addEventListener('click', processClicks, false);
} catch (exception) {
    document.attachEvent('onmousemove', processMouseMove);
    document.attachEvent('onmousedown', processMouseDown);
    //document.attachEvent('onmouseup', processMouseUp);
    document.attachEvent('onkeydown', processKeyDown);
    document.attachEvent('onclick', processClicks);
}
    //window.captureEvents(Event.MOUSEMOVE);
    //window.captureEvents(Event.MOUSEUP);

    //window.captureEvents(Event.FOCUS);
  //  window.captureEvents(Event.BLUR);
//  }
//  document.onclick = processClicks;
//  document.onkeydown = processKeyDown;
//  document.onmousedown = processMouseDown;
//  document.onmouseup = processMouseUp;
  //document.onfocus = processFocus;
  //document.onblur = processBlur;
}

function addEventFunc(name, eventname, eventfunc) {
  var eventadd = procfunc[eventname];
  if (eventadd == null) {
    eventadd = new Array();
    procfunc[eventname] = eventadd;
  }
  var func = eventadd[name];
  if (func == null) {
    func = new Array();
    eventadd[name] = func;
  }
  if (eventfunc in func) {
  } else {
    func[func.length] = eventfunc;
  }
}

function callFunc(e) {
  var ev, ele;
  if (window.event) {
    ev = window.event;
    ele = ev.srcElement;
  } else {
    ev = e;
    ele = e.target;
  }
  var eventadd = procfunc[ev.type];
  if (eventadd) {
    // check id
    var func = eventadd[ele.id];
    if (!func) {
      // check name
      func = eventadd[ele.name];
    }
    if (!func) {
      // check keycode
      func = eventadd[ev.keyCode];
    }
    if (func) {
      for (var i=0;i<func.length;i++) {
        var _cont = func[i](ev, ele);
        if (_cont != null) {
          return _cont;
        }
      }
    }
    var deffunc = eventadd['_default_'];
    if (deffunc) {
      for (var i=0;i<deffunc.length;i++) {
        var _cont = deffunc[i](ev, ele);
        if (_cont != null) return _cont;
      }
    }
  }
}

function unregisterObjEvent(obj, name, func, iscap) {
  try {
    obj.removeEventListener(name, (func), iscap);
    return;
  } catch (e) {}
  try {
    var fn;
    fn = func;
    obj['e'+name+fn] = fn;
    obj[name+fn] = function(){return obj['e'+name+fn](window.event);}
    //obj.detachEvent('on'+name, obj[name+fn]);
    obj.detachEvent('on'+name, func);
  } catch (e) {
  }
}

function registerObjEvent(obj, name, func, iscap, is_not_anym) {
  try {
    //obj.addEventListener(name, callFunc, iscap);
    func.indexOf('function');
    obj.addEventListener(name, new Function(func), iscap);
    return;
  } catch (e) {
    try {
      obj.addEventListener(name, (func), iscap);
      return;
    } catch (ee) {
    }
  }
  try {
    //obj.attachEvent('on'+name, callFunc);
    var fn;
    try {
      func.indexOf('function');
      fn = new Function(func);
    } catch (e) {
      fn = func;
    }
    obj['e'+name+fn] = fn;
    obj[name+fn] = function(){return obj['e'+name+fn](window.event);}
    if (is_not_anym == true) {
      obj.attachEvent('on'+name, func);
    } else {
      obj.attachEvent('on'+name, obj[name+fn]);
    }
    //obj.attachEvent('on'+name, func);
//    obj.attachEvent('on'+name, new Function(func));
  } catch (e) {
  }
  //addEventFunc(obj.id, name, func);
}

function processMouseUp(e) {
  return callFunc(e);
}

function processMouseMove(e) {
  return callFunc(e);
}

function processMouseDown(e) {
  return callFunc(e);
}

function processClicks(e) {
  return callFunc(e);
}

function processKeyDown(e) {
  return callFunc(e);
}

function processFocus(e) {
window.status = e.target+':'+e.relatedTarget;
}

function processBlur(e) {
window.status = e + ':'+window.event.type;
//  alert(e);
}

addEventFunc('27', 'keydown', resetBox);
function resetBox(event, ele) {
  if (ele.type) {
    if (ele.type == 'text' || ele.type == 'textarea' || ele.type =='select-one') {
      setTimeout(function(){resetInput(ele);}, 10);
    }
  }
}

function parseEvent(e) {
  var ev, ele;
  if (window.event) {
    ev = window.event;
    ele = ev.srcElement;
  } else {
    ev = e;
    ele = e.target;
  }
  var o = new Object();
  o.event = ev;
  o.element = ele;
  return o;
}
