<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: eventtarget.xml 225913 2001-06-01 11:15:37Z dims $ -->
<!-- Event target interface -->

  <interface name="EventTarget" id="Events-EventTarget"
    since="DOM Level 2">
    <descr>
    <p>
      The <code>EventTarget</code> interface is implemented by all
      <code>Nodes</code> in an implementation which supports the DOM Event
      Model. Therefore, this interface can be obtained by using
      binding-specific casting methods on an instance of the <code>Node</code>
      interface. The interface allows registration and removal of
      <code>EventListeners</code> on an <code>EventTarget</code> and dispatch
      of events to that <code>EventTarget</code>.</p>
    </descr>

    <method name="addEventListener" id="Events-EventTarget-addEventListener">
     <descr>
     <p>This method allows the registration of event listeners on the event target. 
     If an <code>EventListener</code> is added to an <code>EventTarget</code> while it is 
	 processing an event, it will not be triggered by the current actions but may be 
	 triggered during a later stage of event flow, such as the bubbling phase.
     </p>
     <p>
     If multiple identical <code>EventListener</code>s are registered on the same
    <code>EventTarget</code> with the same parameters the duplicate instances are discarded.
    They do not cause the <code>EventListener</code> to be called twice and since they are 
    discarded they do not need to be removed with the <code>removeEventListener</code> method.
     </p>
     </descr>
     <parameters>
      <param name="type" type="DOMString" attr="in">
	  <descr><p>The event type for which the user is registering</p></descr>
      </param>
      <param name="listener" type="EventListener" attr="in">
	  <descr><p>The <code>listener</code> parameter takes an interface implemented by
	  the user which contains the methods to be called when the event occurs.</p></descr>
      </param>
	  <param name="useCapture" type="boolean" attr="in">
	  <descr><p>If true, <code>useCapture</code> indicates that the user wishes to initiate
	  capture.  After initiating capture, all events of the specified type will be 
	  dispatched to the registered <code>EventListener</code> before being dispatched to any
	  <code>EventTargets</code> beneath them in the tree.  Events which are bubbling upward
	  through the tree will not trigger an <code>EventListener</code> designated to use
	  capture.</p>
    	  </descr>
      </param>
     </parameters>
     <returns type="void">
       <descr><p></p></descr>
     </returns>
     <raises>
      <!-- No exceptions -->
     </raises>
    </method>

    <method name="removeEventListener" id="Events-EventTarget-removeEventListener">
     <descr>
     <p>This method allows the removal of event listeners from the event target.  If an
	 <code>EventListener</code> is removed from an <code>EventTarget</code> while it is 
	 processing an event, it will not be triggered by the current actions.  <code>EventListener</code>s
	 can never be invoked after being removed.</p>
    <p>Calling <code>removeEventListener</code> with arguments which do not identify any
    currently registered <code>EventListener</code> on the <code>EventTarget</code>
    has no effect.</p>
     </descr>
     <parameters>
      <param name="type" type="DOMString" attr="in">
	    <descr><p>Specifies the event type of the <code>EventListener</code> being removed.
	    </p>
	    </descr>
      </param>
      <param name="listener" type="EventListener" attr="in">
	  <descr><p>The <code>EventListener</code> parameter indicates the <code>EventListener
	  </code> to be removed.
	  </p></descr>
      </param>
	    <param name="useCapture" type="boolean" attr="in">
	    <descr><p>Specifies whether the <code>EventListener</code> being removed was registered as a
	    capturing listener or not.  If a listener was registered twice, one with capture and one
      without, each must be removed separately.  Removal of a capturing listener does not
      affect a non-capturing version of the same listener, and vice versa.
	    </p></descr>
      </param>
     </parameters>
     <returns type="void">
       <descr><p></p></descr>
     </returns>
     <raises>
      <!-- No exceptions -->
     </raises>
    </method>

    <method name="dispatchEvent" id="Events-EventTarget-dispatchEvent">
     <descr>
     <p>This method allows the dispatch of events into the implementations event model.  Events
     dispatched in this manner will have the same capturing and bubbling behavior as events
     dispatched directly by the implementation.  The target of the event is the <code>
     EventTarget</code> on which <code>dispatchEvent</code> is called.
     </p>
     </descr>
     <parameters>
      <param name="evt" type="Event" attr="in">
	    <descr><p>Specifies the event type, behavior, and contextual information to be used
      in processing the event.</p>
	    </descr>
      </param>
     </parameters>
     <returns type="boolean">
       <descr><p>The return value of <code>dispatchEvent</code> indicates whether any of
       the listeners which handled the event called <code>preventDefault</code>.  If
       <code>preventDefault</code> was called the value is false, else the value is true.
       </p></descr>
     </returns>
     <raises>
      <exception name="EventException">
	      <descr><p>UNSPECIFIED_EVENT_TYPE_ERR: Raised if the
	      <code>Event</code>'s type was not specified by initializing the
	      event before <code>dispatchEvent</code> was called.
	      Specification of the <code>Event</code>'s type as
	      <code>null</code> or an empty string will also trigger this
	      exception.</p>
        </descr>
      </exception>
     </raises>
    </method>

  </interface>
