with (classes) {
//
with (dom) {
//
with (events) {
//
events.EventTarget = /* classes.EventTarget? classes.EventTarget : */ function ()
{
 if (this.addEventListener) return this;

 with (EventTarget)
 {
  this.addEventListener = addEventListener;
  this.removeEventListener = addEventListener;
  this.dispatchEvent = dispatchEvent;

  this.Events_Object = {};
 }

 return this;
}
//
EventTarget.addEventListener = function (type, listener, useCapture) { with (EventTarget) with (this)
{
 var Event_Array = Events_Object[type];

 if (! Event_Array) Event_Array = Events_Object[type] = new Array;

 var listener_index = 0, listener_count = Event_Array.length;

 while (! (listener_index == listener_count || Event_Array[listener_index] == listener)) ++ listener_index;

 if (listener_index == listener_count) Event_Array.push(listener);
}}
//
EventTarget.removeEventListener = function (type, listener, useCapture) { with (EventTarget) with (this)
{
 var Event_Array = Events_Object[type];

 if (! Event_Array) return;

 var listener_index = 0, listener_count = Event_Array.length;

 while (! (listener_index == listener_count || Event_Array[listener_index] == listener)) ++ listener_index;

 if (listener_index != listener_count) Event_Array.splice(1, listener_index);
}}
//
EventTarget.dispatchEvent = function (evt) { with (EventTarget) with (this)
{
 if (! (evt && evt.type)) return;

 var Event_Array = Events_Object[evt.type];

 if (! Event_Array) return;

 var listener_index = 0, listener_count = Event_Array.length;

 try {

 while (! (listener_index == listener_count /* || evt.cancelBubble */)) Event_Array[listener_index ++].handleEvent(evt);

 }
 catch (e) {

 throw e.code? e : new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);

 }
}}
//
}
//
}
//
}
