with (classes) {
//
with (XHTML) {
//
XHTML.events = function () // abstract
{
 classes.Common.Observable.call(this);

 with (events)
 {
  this.enableEvents = enableEvents;
  this.disableEvents = disableEvents;

  this.enableDefault = null;

  with (this)
  {
   enableEvents.apply(this, arguments);
  }
 }

 return null;
}
//
events.click = "click";
events.dblclick = "dblclick";
events.mousedown = "mousedown";
events.mouseup = "mouseup";
events.mouseover = "mouseover";
events.mousemove = "mousemove";
events.mouseout = "mouseout";
events.keydown = "keydown";
events.keyup = "keyup";
//
events.enableEvents = function () { with (this)
{
 var event_count = arguments.length;

 for (var event_index = 0; event_index != event_count; ++ event_index)
 {
  var event_name = arguments[event_index];

  if (event_name && event_name in events) this["on" + event_name] = events.handleEvent;
 }
}}
//
events.disableEvents = function () { with (this)
{
 var event_count = arguments.length;

 for (var event_index = 0; event_index != event_count; ++ event_index)
 {
  var event_name = arguments[event_index];

  if (event_name && this["on" + event_name] == events.handleEvent) this["on" + event_name] = null;
 }
}}
//
events.handleEvent = function (The_Event) { with (events) with (this)
{
 if (! The_Event) The_Event = (ownerDocument? ownerDocument : this).parentWindow.event;

 var event_type = The_Event.type;

 switch (event_type)
 {
  case events.click: event_type = "clicked";
  case events.mousedown:
  case events.mouseup:
  case events.mouseover:
  case events.mousemove:
  case events.mouseout: classes.dom.events.MouseEvent.call(The_Event, this);
   break;
  case events.keydown:
  case events.keyup: classes.dom.events.KeyboardEvent.call(The_Event, this);
   break;
  default:;
 }

 The_Event.stopPropagation();

 broadcast(event_type, The_Event);

 return "form" in The_Event.target; // || The_Event.returnValue; // The_Event.target.nodeName.toLowerCase() == "input";
}}
//
}
//
}
