function MV_Action()
{
  this.active = false; // состояние объекта вкл./выкл.
  this.action = new Array();
  this.nullAction = new Array();
  this.f = false;
}

//определяем какой элемент получил событие
MV_Action.prototype.getNODE = function(evt)
{
  evt = (evt) ? evt : ((window.event) ? event : null);
  if(evt)
  {
    var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
    if(elem.nodeType == 3) elem = elem.parentNode;
    if(elem) return elem;
      else return null;
  }
}

MV_Action.prototype.setOnFunction = function(element, statusA, status, func)
{
  this.f = true
  var getTH = true;
  for(var th in this.action)
    if(th == element)
    {
      getTH = false;
      break;
    }
  if(getTH) this.action[element] = new Array();
  if(!this.action[element][statusA])this.action[element][statusA] = new Array();
  this.action[element][statusA][status]  = func;
}
MV_Action.prototype.setStatus = function(element, status)
{
  if(this.action[element])this.action[element]['status'] = status;
}

MV_Action.prototype.Action = function(evt, action)
{
  var flag = true;
  //document.getElementById('f_test').innerHTML = evt.nodeName.toUpperCase()
  for(var th in this.action)
  {
    if(evt.id && th == evt.id)
    {
      if(this.action[th].status)if(this.action[th][this.action[th].status])eval(this.action[th][this.action[th].status][action]);
      flag = false;
    }
    if(evt.name && th == evt.name)
    {
      if(this.action[th].status)if(this.action[th][this.action[th].status])eval(this.action[th][this.action[th].status][action]);
      flag = false;
    }
    if(evt.className && th == evt.className)
    {
      if(this.action[th].status)if(this.action[th][this.action[th].status])eval(this.action[th][this.action[th].status][action]);
      flag = false;
    }
    if(th.toUpperCase() == evt.nodeName.toUpperCase())
    {
      if(this.action[th].status)if(this.action[th][this.action[th].status])eval(this.action[th][this.action[th].status][action]);
      flag = false;
    }
  }
  if(flag && this.nullAction[action])
  {eval(this.nullAction[action])}else{}

}

document.onmouseup   = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "mouseup");}
document.onmousedown = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "mousedown");}
document.onclick     = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "click");}
document.onmouseover = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "mouseover");}
document.onmouseout  = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "mouseout");}
document.onmousemove = function(evt){if(actionObject && actionObject.active)actionObject.Action(actionObject.getNODE(evt), "mousemove");}

//document.onsubmit    = function(evt){if(actionObject.active)actionObject.Action(actionObject.getNODE(evt), "submit");}
//document.onblur    = function(evt){if(actionObject.active)actionObject.Action(actionObject.getNODE(evt), "blur");}
//document.onchange    = function(evt){if(actionObject.active)actionObject.Action(actionObject.getNODE(evt), "change");}
//document.onfocus    = function(evt){if(actionObject.active)actionObject.Action(actionObject.getNODE(evt), "focus");}

document.oncontextmenu = function(evt)
{
  if(actionObject && actionObject.active)
  {
    actionObject.Action(actionObject.getNODE(evt), "contextmenu");
    actionObject.getNODE(evt).returnValue = true;
    return true;
  }
  else return true;
}

actionObject = new MV_Action();
actionObject.active = true;