<?xml version="1.0" encoding="us-ascii"?>
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ --><!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.2-Based DOM//EN" "http://www.w3.org/2002/08/xmlspec-v22-dom.dtd">
<spec w3c-doctype="wd" role="public">
  <!--
  *************************************************************************
  * FRONT MATTER                                                          *
  *************************************************************************
  -->
<!-- 
  ****************************************************** 
  | filenames to be used for each section              |
  ******************************************************
-->
<?command-options --map Copyright-Notice copyright-notice
--map Introduction     introduction
--map TOC expanded-toc
--map Core core
--map Events events
--map idl idl-definitions
--map ecma-binding ecma-script-binding
--map java-binding java-binding
--map Index def-index
--map Objects object-index
--map References references
--map Errors errors
--map Level-3-AS abstract-schemas
--map Load-Save load-save
--map XPath xpath
--map KeySet keyset
?>

<?command-options --map -IndexFile-      def-index
--map -OjbectIndexFile-      object-index
--strip-references
--strip-glossary
?>

<?command-options --map-type ECMAScript Object Object
--map-type ECMAScript DOMString String
--map-type ECMAScript "unsigned short" Number
--map-type ECMAScript "unsigned int" Number
--map-type ECMAScript "unsigned long" Number
--map-type ECMAScript long Number
--map-type ECMAScript boolean Boolean

--map-type ECMAScript DOMTimeStamp Date
--map-type ECMAScript DOMObject Object
--map-type ECMAScript DOMUserData "any type"
--map-type ECMAScript DOMInputStream Object
--map-type ECMAScript DOMOutputStream Object
--map-type ECMAScript DOMReader "this is an error and shouldn't be used."
--map-type ECMAScript DOMSystemException Object

--map-type Java Object Object
--map-type Java DOMString String
--map-type Java "unsigned short" short
--map-type Java "unsigned int" int
--map-type Java "unsigned long" int
--map-type Java long int
--map-type Java boolean boolean

--map-type Java DOMTimeStamp long
--map-type Java DOMObject Object
--map-type Java DOMUserData Object
--map-type Java DOMInputStream java.io.InputStream
--map-type Java DOMOutputStream java.io.OutputStream
--map-type Java DOMReader java.io.Reader
--map-type Java DOMSystemException Exception
?>

<header> 
<title>Document Object Model (DOM) Level 3 Events Specification</title>
<version>1.0</version> <w3c-designation>WD-DOM-Level-3-Events-20030221
</w3c-designation> <w3c-doctype>W3C Working Draft</w3c-doctype> <pubdate> 
<day>21</day> <month>February</month> <year>2003</year> 
</pubdate> 
<publoc> <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221</loc>
</publoc>
<altlocs>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="html" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/xml-source.xml" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML file</loc>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="plain" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/DOM3-Events.txt" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">plain text</loc>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="postscript" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/DOM3-Events.ps" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PostScript file</loc>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="pdf" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/DOM3-Events.pdf" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PDF file</loc>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="html" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/DOM3-Events.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">single HTML file</loc>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" role="zip" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030221/DOM3-Events.zip" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">ZIP file</loc>
    </altlocs>
<latestloc> <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/DOM-Level-3-Events</loc> </latestloc> 
<prevlocs>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Events-20020712" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2002/WD-DOM-Level-3-Events-20020712</loc>
</prevlocs> 
<authlist> 
<author role="editor"> <name>Philippe Le H&#233;garet</name> 
<affiliation>W3C</affiliation> </author> 
<author role="editor"> <name>Tom Pixley</name> 
<affiliation>Netscape Communications Corporation (until
	July 2002)</affiliation> </author> 
</authlist>
    <!--
    ******************************************************
    * DOCUMENT ABSTRACT                                  *
    ******************************************************
    -->
<abstract id="id-abstract"> 

<p>This specification defines the Document Object Model Events Level 3,
a generic platform- and language-neutral event system which allows
registration of event handlers, describes event flow through a tree
structure, and provides basic contextual information for each event.
The Document Object Model Events Level 3 builds on the Document Object
Model Events Level 2 <bibref role="normative" ref="DOM2Events"/>.</p>

</abstract>

<status id="Level-3-status"> 

      <p>
	<emph>This section describes the status of this document at the
	time of its publication. Other documents may supersede this
	document. The latest status of this document series is
	maintained at the W3C.</emph>
      </p>
      <p>
	This document contains the Document Object Model Level 3 Events
	specification.
      </p>
      <p>
	This is a <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Process-20010719/tr.html#RecsWD" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Working
	Draft</loc> for review by W3C members and other interested
	parties.
      </p>
      <p>
	It is a draft document and may be updated, replaced or obsoleted
	by other documents at any time. It is inappropriate to use W3C
	Working Drafts as reference material or to cite them as other
	than "work in progress". This is work in progress and does not
	imply endorsement by, or the consensus of, either W3C or members
	of the DOM Working Group.
      </p>
      <p>
	Comments on this document are invited and are to be sent to the
	public mailing list <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:www-dom@w3.org" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">www-dom@w3.org</loc>. An archive is available
	at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/www-dom/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://lists.w3.org/Archives/Public/www-dom/</loc>.
      </p>
      <p>
	Patent disclosures relevant to this specification may be found
	on the Working Group's <loc xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest" href="http://www.w3.org/2002/07/08-IPR-statements.html">patent
	disclosure page</loc>.
      </p>
      <p>
	This document has been produced as part of the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/DOM/Activity.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C DOM
	Activity</loc>. The authors of this document are the DOM Working
	Group members.
      </p>
      <p>
	A list of <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">current W3C
	Recommendations and other technical documents</loc> can be found
	at http://www.w3.org/TR.
      </p>
</status> 


<sourcedesc>
<p>Created in electronic form.</p>
</sourcedesc>
<langusage>
<language id="en">English</language>
</langusage>
<revisiondesc>
<p>$Revision: 1.3 $</p>
</revisiondesc>
<?GENERATE-TOC?>
</header>
<front>
  
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<div1 id="TOC">
  <head>Expanded Table of Contents</head>
  <?GENERATE-EXPANDED-TOC?>	
</div1>

  
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!--
 *************************************************************************
 * BEGINNING OF COPYRIGHT NOTICE                                         *
 *************************************************************************
-->
<div1 id="Copyright-Notice">
  <head>W3C Copyright Notices and Licenses</head>

  <p role="important">
    Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World
    Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
    Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
    Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
    Reserved.
  </p>
  <p>
    This document is published under the <specref ref="Copyright-notice-document"/>. The bindings within this document
    are published under the <specref ref="Copyright-notice-software"/>.
    The software license requires "Notice of any changes or
    modifications to the W3C files, including the date changes were
    made." Consequently, modified versions of the DOM bindings must
    document that they do not conform to the W3C standard; in the case
    of the IDL definitions, the pragma prefix can no longer be
    'w3c.org'; in the case of the Java language binding, the package
    names can no longer be in the 'org.w3c' package.
  </p>
  <div2 id="Copyright-notice-document">
    <head>W3C<sup>&#174;</sup> Document Copyright Notice and License</head>
    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Document
	Notice and License and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231</loc>.
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p role="important">      
      http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
    </p>
    <p>
      Public documents on the W3C site are provided by the copyright
      holders under the following license. By using and/or copying this
      document, or the W3C document from which this statement is linked,
      you (the licensee) agree that you have read, understood, and will
      comply with the following terms and conditions:
    </p>
    <p>
      Permission to copy, and distribute the contents of this document,
      or the W3C document from which this statement is linked, in any
      medium for any purpose and without fee or royalty is hereby
      granted, provided that you include the following on
      <emph>ALL</emph> copies of the document, or portions thereof, that
      you use:
    </p>
    <olist>
      <item>
	<p>
	  A link or URL to the original W3C document.
	</p>
      </item>
      <item>
	<p>
	  The pre-existing copyright notice of the original author, or
	  if it doesn't exist, a notice (hypertext is preferred, but a
	  textual representation is permitted) of the form:
	  "Copyright &#169; [$date-of-document] <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>,
	  (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute
	  of Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European Research Consortium for
	  Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All
	  Rights Reserved.  <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231</loc>"
	</p>
      </item>
      <item>
	<p>
	  <emph>If it exists</emph>, the STATUS of the W3C document.
	</p>
      </item>
    </olist>
    <p>
      When space permits, inclusion of the full text of this <emph role="important">NOTICE</emph> should be provided. We request that
      authorship attribution be provided in any software, documents, or other
      items or products that you create pursuant to the implementation of the
      contents of this document, or any portion thereof.
    </p>
    <p>
      No right to create modifications or derivatives of W3C documents is
      granted pursuant to this license. However, if additional requirements
      (documented in the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/IPR-FAQ" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Copyright
      FAQ</loc>) are satisfied, the right to create modifications or
      derivatives is sometimes granted by the W3C to individuals complying with
      those requirements.
    </p>
    <p>
      THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
      NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
      LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
      PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT
      ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH
      CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
      TRADEMARKS OR OTHER RIGHTS.
    </p>
    <p>
      COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
      CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE
      PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
    </p>
    <p>
      The name and trademarks of copyright holders may NOT be used in
      advertising or publicity pertaining to this document or its contents
      without specific, written prior permission. Title to copyright in this
      document will at all times remain with copyright holders.
    </p>
  </div2>
  <div2 id="Copyright-notice-software">
    <head>W3C<sup>&#174;</sup> Software Copyright Notice and License</head>
    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Software
	Copyright Notice and License and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</loc>
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p role="important">      
      http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
    </p>
    <p>
      This work (and included software, documentation such as READMEs,
      or other related items) is being provided by the copyright holders
      under the following license. By obtaining, using and/or copying
      this work, you (the licensee) agree that you have read,
      understood, and will comply with the following terms and
      conditions.
    </p>
    <p>
      Permission to copy, modify, and distribute this software and its
      documentation, with or without modification, for any purpose and
      without fee or royalty is hereby granted, provided that you
      include the following on ALL copies of the software and
      documentation or portions thereof, including modifications:
    </p>
    <olist>
      <item>
	<p>The full text of this NOTICE in a location viewable to users of the
	redistributed or derivative work.</p>
      </item>
      <item>
	<p>
	  Any pre-existing intellectual property disclaimers, notices,
	  or terms and conditions. If none exist, the <specref ref="Copyright-short-notice"/> should be included (hypertext
	  is preferred, text is permitted) within the body of any
	  redistributed or derivative code.
	</p>
      </item>
      <item>
	<p>
	  Notice of any changes or modifications to the files, including
	  the date changes were made. (We recommend you provide URIs to
	  the location from which the code is derived.)
	</p>
      </item>
    </olist>
    <p>
      THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
      HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
      INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
      FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
      DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
      TRADEMARKS OR OTHER RIGHTS.
    </p>
    <p>
      COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
      CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
      DOCUMENTATION.
    </p>
    <p>
      The name and trademarks of copyright holders may NOT be used in
      advertising or publicity pertaining to the software without specific,
      written prior permission. Title to copyright in this software and any
      associated documentation will at all times remain with copyright holders.
    </p>
  </div2>
  <div2 id="Copyright-short-notice">
    <head>W3C<sup>&#174;</sup> Short Software Notice</head>

    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Short Software
	Notice and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231</loc>
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World
      Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p>
      Copyright &#169; [$date-of-software] <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved. This work is distributed under the W3C<sup>&#174;</sup>
      Software License [1] in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    </p>
    <p>
      [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
    </p>
  </div2>
</div1>
<!--
 *************************************************************************
 * END OF COPYRIGHT NOTICE                                               *
 *************************************************************************
-->

</front> 
 
<body>
  
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!--
 *************************************************************************
 * BEGINNING OF EVENTS                                                   *
 *************************************************************************
-->
<div1 id="Events"> 
  <head>Document Object Model Events</head> 
  <orglist role="editors"> 
	 <member> 
		<name>Philippe Le H&#233;garet</name> 
		<affiliation>W3C</affiliation> 
	 </member> 
	 <member> 
		<name>Tom Pixley</name> 
		<affiliation>Netscape Communications Corporation (until
	July 2002)</affiliation> 
	 </member> 
  </orglist> <?GENERATE-MINI-TOC?>
<!--
  ******************************************************
  | INTRODUCTION                                       |
  ******************************************************
  -->
  <div2 id="Events-overview">
    <head>Introduction</head>
    <p>
      DOM Events is designed with two main goals.  The first goal is the
      design of an <termref def="dt-event">event</termref> system which
      allows registration of event listeners, describes event flow
      through a tree structure. Additionally, the specification will
      provide standard modules of events for user interface control and
      document mutation notifications, including defined contextual
      information for each of these event modules.
    </p>
    <p>
      The second goal of the DOM Events is to provide a common subset of
      the current event systems used in <termref def="dt-DOM-Level-0">DOM Level 0</termref> browsers.  This is
      intended to foster interoperability of existing scripts and
      content.  It is not expected that this goal will be met with full
      backwards compatibility.  However, the specification attempts to
      achieve this when possible.
    </p>
    <p>
      The following sections of the specification define both the
      specification for the DOM Event Model and a number of conformant
      event modules designed for use within the model. The DOM Event
      Model consists of:
    </p>
    <ulist>
      <item>
	<p>The <specref ref="Events-flow"/>, which describe the flow of
	events in a tree-based structure.</p>
      </item>
      <item>
	<p>
	  A set of interfaces to access contextual information on
	  events, to register event listeners.
	</p>
      </item>
    </ulist>
    <div3 id="Events-flows">
      <head>Event flows</head>
      <p>
	This document specifies an event flow for tree-based structures:
	<specref ref="Events-flow"/>. While it is expected that HTML and
	XML applications will follow this event flow, applications might
	reuse the interfaces defined in this document for non tree-based
	structure. In that case, it is the responsibility of such
	application to define their event flow and how it relates to the
	<specref ref="Events-flow"/>. As example of such use could be
	found in <bibref role="informative" ref="DOMLS"/>.
      </p>
    </div3>
    <div3 id="Conformance">      
      <head>Conformance</head>
      <p>
	An implementation is DOM Level 3 Events conformant if it
	supports the Core module defined in <bibref ref="DOM2Core"/>,
	the <specref ref="Events-flow"/> and the interfaces with their
	associated semantics defined in <specref ref="Events-interface"/>. An implementation conforms to a DOM
	Level 3 Events module if it conforms to DOM Level 3 Events and
	the event types defined in the module. An implementation
	conforms to an event type if it conforms to its associated
	semantics and DOM interfaces. For example, an implementation
	conforms to the DOM Level 3 User Interface Events module (see
	<specref ref="Events-eventgroupings-uievents"/>) if it conforms
	to DOM Level 3 Events (i.e. implements all the basic
	interfaces), can generate the event types
	<code>{"http://www.w3.org/2001/xml-events", "DOMActivate"}</code>
	<code>{"http://www.w3.org/2001/xml-events", "DOMFocusIn"}</code>
	<code>{"http://www.w3.org/2001/xml-events", "DOMFocusOut"}</code> accordingly to
	their semantics, supports the <code>UIEvent</code> interface,
	and conforms to DOM Level 2 Core module.
      </p>
      <note>
	<p>
	  An implementation which does not conform to an event module
	  can still implement the DOM interfaces associated with it. The
	  DOM application can then create an event object using the
	  <code>DocumentEvent.createEvent</code> method and dispatch an
	  event type associated with this interface using the
	  <code>EventTarget.dispatchEvent</code> method.
	</p>
      </note>
      <p>
	A DOM application may use the <code>hasFeature(feature,
	version)</code> method of the <code>DOMImplementation</code>
	interface with parameter values <code>"Events"</code> and
	<code>"3.0"</code> (respectively) to determine whether or not
	DOM Level 3 Events is supported by the implementation. In order
	to fully support DOM Level 3 Events, an implementation must also
	support the "Core" feature defined in the DOM Level 2 Core
	specification <bibref ref="DOM2Core"/> and use the <specref ref="Events-flow"/>. For additional information
	about <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022/introduction.html#ID-Conformance" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">conformance</xspecref>, 
	please see the DOM Level 3 Core specification <bibref ref="DOMCore"/>. DOM Level 3 Events is built on top of DOM Level
	2 Events <bibref ref="DOM2Events"/>, i.e. a DOM Level 3 Events
	implementation where <code>hasFeature("Events", "3.0")</code>
	returns <code>true</code> must also return <code>true</code>
	when the <code>version</code> number is <code>"2.0"</code>,
	<code>""</code> or, <code>null</code>.
      </p>
      <p>
	Each event module describes its own feature string in the event module
	listing.
      </p>
    </div3>
  </div2>
  <div2 id="Events-flow">
    <head>DOM event flow</head>
    <p>
      <termdef id="dt-event-flow" term="DOM event flow">The DOM event
      flow is the process through which the <termref def="dt-event">event</termref> originates from the DOM Events
      implementation and is dispatched into a tree.</termdef> Each event
      has an <termref def="dt-event-target">event target</termref>, a
      targeted node in the case of the DOM Event flow, toward which the
      event is dispatched by the DOM Events implementation.
    </p>
    <div3 id="Events-phases">
      <head>Phases</head>
      <p>
	The event is dispatched following a path from the root of the
	tree to this <termref def="dt-target-node">target
	node</termref>. It can then be handled locally at the target
	node level or from any target ancestor higher in the tree. The
	event dispatching (also called event propagation) occurs in
	three phases:
      </p>
      <olist>
	<item>
	  <p>
	    The <termref def="dt-capture-phase">capture phase</termref>:
	    the event is dispatched on the target ancestors from the
	    root of the tree to the direct parent of the <termref def="dt-target-node">target node</termref>.
	  </p>
	</item>
	<item>
	  <p>
	    The <termref def="dt-capture-phase">target phase</termref>:
	    the event is dispatched on the <termref def="dt-target-node">target node</termref>.
	  </p>
	</item>
	<item>
	  <p>
	    The <termref def="dt-bubbling-phase">bubbling
	    phase</termref>: the event is dispatched on the target
	    ancestors from the direct parent of the <termref def="dt-target-node">target node</termref> to the root of
	    the tree.
	  </p>
	</item>
      </olist>
      <graphic xmlns:xlink="http://www.w3.org/1999/xlink" source="./images/eventflow.png" alt="graphical representation of an event dispatched in a DOM tree using the DOM event flow" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
      <note>
	<p>An <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="./images/eventflow.svg" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">SVG 1.0 version of the
	representation above</loc> is also available.</p>
      </note>
      
      <p>
	The target ancestors are determined before the initial dispatch
	of the event. If the target node is removed during the
	dispatching, or a target ancestor is added or removed, the event
	propagation will always be based on the target node and the
	target ancestors determined before the dispatch.
      </p>
      <p>
	Some events may not necessarily accomplish the three phases of
	the DOM event flow, e.g. the event could only be defined for one
	or two phases. As an example, events defined in this
	specification will always accomplish the capture and target
	phases but some will not accomplish the bubbling phase
	("bubbling events" versus "non-bubbling events", see also the
	<code>Event.bubbles</code> attribute).
      </p>
    </div3>
    <div3 id="Events-listeners">
      <head>Event listeners</head>
      <p>
	Each node encountered during the dispatch of the event may
	contain event listeners.
      </p>
      <div4 id="Events-listeners-registration">
	<head>Registration of event listeners</head>
	<p>
	  Event listeners can be registered on all nodes in the tree for
	  a specific type of event, phase, and group. If the event
	  listener is registered on a node while an event gets processed
	  on this node, the event listener will not be triggered during
	  the current phase but may be triggered during a later phase in
	  the event flow, i.e. the <termref def="dt-bubbling-phase">bubbling phase</termref>.
	</p>
      </div4>
      <div4 id="Event-groups">
	<head>Event groups</head>

	<p>
	  An event listener is always part of a group. It is either
	  explicitly in a group if a group has been specified at the
	  registration or implicitly in the default group if no group
	  has been specified. Within a group, event listeners are
	  ordered in their order of registration. If two event listeners
	  {A1, A2}, that are part of the same group, are registered one
	  after the other (A1, then A2) for the same phase, the DOM event
	  flow guarantees their triggering order (A1, then A2). If the two
	  listeners are not part of the same group, no specification is
	  made as to the order in which they will be triggered.
	</p>
	<note>
	  <p>
	    While this specification does not specify a full ordering
	    (i.e. groups are still unordered), it does specify ordering
	    within a group. This implies that if the event listeners
	    {A1, A2, B1, B2}, with A and B being two different groups,
	    are registered for the same phase in the following order:
	    A1, A2, B1, and B2. The following triggering orders are
	    possible and conform to the DOM event flow: {A1, A2, B1,
	    B2}, {A1, B1, A2, B2}, {B1, A1, A2, B2}, {A1, B1, B2, A2},
	    {B1, A1, B2, A2}, {B1, B2, A1, A2}. DOM Events
	    implementations may impose priorities on groups but DOM
	    applications must not rely on it. Unlike this specification,
	    <bibref ref="DOM2Events"/> did not specify any triggering
	    order for event listeners.
	  </p>
	</note>
      </div4>
      <div4 id="Events-listeners-activation">
	<head>Triggering an event listener</head>
	<p>
	  When the event is dispatched through the tree, from node to
	  node, event listeners registered on the node are triggered if:
	</p>
	<olist>
	  <item>
	    <p>
	      they were registered for the same type of event;
	    </p>
	  </item>
	  <item>
	    <p>
	      they were registered for the same phase;
	    </p>
	  </item>
	  <item>
	    <p>
	      the event propagation has not been stopped for the group.
	    </p>
	  </item>
	</olist>
      </div4>
      <div4 id="Events-listeners-removal">
	<head>Removing an event listener</head>
	<p>
	  If an event listener is removed from a node while an event is
	  being processed on the node, it will not be triggered by the
	  current actions. Once removed, the event listener is never
	  invoked again (unless registered again for future processing).
	</p>
      </div4>
      <div4 id="Events-listeners-reentrance">
	<head>Reentrance</head>
	<p>
	  It is expected that actions taken by
	  <code>EventListener</code>s may cause additional events to be
	  dispatched. Additional events should be handled in a
	  synchronous manner and may cause reentrance into the event
	  model. If an event listener fires a new event using
	  <code>EventTarget.dispatchEvent</code>, the event propagation
	  that causes the event listener to be triggered will resume
	  only after the event propagation of the new event is
	  completed.
	</p>
	<p>
	  Since implementations may have restrictions such as
	  stack-usage or other memory requirements, applications should
	  not depend on how many synchronous events may be triggered.
	</p>
      </div4>
      <div4 id="Events-propagation-and-groups">
	<head>Event propagation and event groups</head>
	<p>
	  All event listeners are part of a group (see <specref ref="Events-listeners-registration"/>). An event listener may
	  prevent event listeners that are part of a same group from
	  being triggered. The effect could be:
	</p>
	<ulist>
	  <item>
	    <p>
	      immediate and no more event listeners from the same group
	      will be triggered by the event object;
	    </p>
	  </item>
	  <item>
	    <p>
	      differed until all event listeners from the same group
	      have been triggered on the current node, i.e. the event
	      listeners of the same group attached on other nodes will
	      not be triggered.
	    </p>
	  </item>
	</ulist>
	<p>
	  If two event listeners are registered for two different
	  groups, one cannot prevent the other from being triggered.
	</p>
      </div4>
    </div3>
  </div2>
  <div2 id="Events-flow-cancelation">
    <head>Default actions and cancelable events</head>
    <p>
      Implementations may have a default action associated with an event
      type. An example is the <bibref ref="HTML40" role="informative"/>
      form element. When the user submits the form (e.g. by pressing on
      a submit button), the event <code>{"http://www.w3.org/2001/xml-events",
      "submit"}</code> is dispatched to the element and the default
      action for this event type is generally to send a request to a Web
      server with the parameters from the form.
    </p>
    <p>
      The default actions are not part of the DOM Event flow. Before
      invoking a default action, the implementation must first dispatch
      the event as described in the <specref ref="Events-flow"/>.
    </p>
    <p>
      <termdef id="dt-cancelable-event" term="cancelable event">A
      <term>cancelable event</term> is an event associated with a
      default action which is allowed to be canceled during the DOM
      event flow.</termdef> At any phase during the event flow, the
      triggered event listeners have the option of canceling the default
      action or allowing the default action to proceed. In the case of
      the hyperlink in the browser, canceling the action would have the
      result of not activating the hyperlink. Not all events defined in
      this specification are cancelable events.
    </p>
    <p>
      Different implementations will specify their own default actions,
      if any, associated with each event. The DOM Events specification
      does not attempt to specify these actions.
    </p>
    <p>
      This specification does not provide mechanisms for accessing
      default actions or adding new ones.
    </p>
    <note>
      <p>
	Some implementations also provide default actions
	<emph>before</emph> the dispatch of the event. It is not
	possible to cancel those default actions and this specification
	does not address them. An example of such default actions can be
	found in <bibref role="informative" ref="DOM2HTML"/> on the
	<code>HTMLInputElement.checked</code> attribute.
      </p>
    </note>
  </div2>
  <div2 id="Event-types">
    <head>Event types</head>
    <p>
      Each event is associated with a type, called <term>event
      type</term>. The event type is composed of a <termref def="dt-localname">local name</termref> and a <termref def="dt-namespaceURI">namespace URI</termref> as defined in
      <bibref ref="Namespaces"/>. All events defined in this
      specification use the namespace URI <code>"http://www.w3.org/2001/xml-events"</code>.
    </p>
    <note>
      <p>
	As in <bibref role="informative" ref="DOMCore"/>, DOM Level 3
	Events does not perform any URI normalization or
	canonicalization. The URIs given to the DOM are assumed to be
	valid (e.g., characters such as white spaces are properly
	escaped), and no lexical checking is performed. Absolute URI
	references are treated as strings and <termref def="dt-string-compare">compared literally</termref>. How
	relative namespace URI references are treated is undefined. To
	ensure interoperability only absolute namespace URI references
	(i.e., URI references beginning with a scheme name and a colon)
	should be used. Applications that wish to have no namespace
	should use the value <code>null</code> as the namespaceURI
	parameter of methods. If they pass an empty string the DOM
	implementation turns it into a <code>null</code>.
      </p>
    </note>
    <div3 id="Events-EventTypes-complete">
      <head>Complete list of event types</head>

      <p>
	Depending on the level of DOM support, or the devices used to
	display (e.g. screen) or interact with (e.g. mouse, keyboard,
	touch screen, voice, ...), these event types could be generated by
	the implementation. When used with an <bibref ref="XML" role="informative"/> or <bibref ref="HTML40" role="informative"/> application, the specifications of those
	languages may restrict the semantics and scope (in particular the
	possible target nodes) associated with an event type. For
	example, <code>{"http://www.w3.org/2001/xml-events", "click"}</code> can be targeted to all
	<bibref ref="XHTML10" role="informative"/> elements but applet,
	base, basefont, bdo, br, font, frame, frameset, head, html,
	iframe, isindex, meta, param, script, style, and title. Refer to
	the specification defining the language used in order to find
	those restrictions or to find event types that are not defined
	in this document.
      </p>
      
      <p>
	The following table defines all event types provided in this
	specification (with the exception of two event types preserved
	for backward compatibility with <bibref role="informative" ref="HTML40"/>). All events will accomplish the capture phase
	and target phases, but not all of them will accomplish the
	bubbling phase (see also <specref ref="Events-flow"/>). Some
	events are not <termref def="dt-cancelable-event">cancelable</termref> (see <specref ref="Events-flow-cancelation"/>). Contextual information related
	to the event type are accessible using DOM interfaces.
      </p>
      <table summary="This table contains the complete list of event types  defined by DOM Level 3 Events. The first column contains the  name of the event type. The second column contains the  definition of of the event type. The third column indicates if  the event accomplish the bubbling phase or not (all events  accomplish the capture and target phases). The fourth column  indicates if the default action associated with the event can be  canceled. The fifth column indicates the nodes that can be  target of the event. the sixth (and last) column indicates the  DOM interface implemented by the event object." cellpadding="0" cellspacing="0">
	<tbody>
	  <tr>
	    <th rowspan="1" colspan="1">Event type</th>
	    <th rowspan="1" colspan="1">Description</th>
	    <th rowspan="1" colspan="1">Bubbling phase</th>
	    <th rowspan="1" colspan="1">Cancelable</th>
	    <th rowspan="1" colspan="1">Target node</th>
	    <th rowspan="1" colspan="1">DOM interface</th>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMActivate"</code></td>
	    <td rowspan="1" colspan="1">
	      An element is activated, for instance, using a mouse
	      device, a keyboard device, or a voice command.
	      <note>
		<p>
		  The activation of an element is device dependent but
		  is also application dependent, e.g. a link in a
		  document can be activated using a mouse click or a
		  mouse double click.
		</p>
	      </note>
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>UIEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMFocusIn"</code></td>
	    <td rowspan="1" colspan="1">
	      An <termref def="dt-event-target">event target</termref>
	      receives focus, for instance via a pointing device being
	      moved onto an element or using keyboard navigation.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>UIEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMFocusOut"</code></td>
	    <td rowspan="1" colspan="1">
	      A <termref def="dt-event-target">event target</termref>
	      loses focus, for instance via a pointing device being
	      moved out of an element or by tabbing navigation out of
	      the element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>UIEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "textInput"</code></td>
	    <td rowspan="1" colspan="1">
	      One or more characters have been entered. The characters
	      can originate from a variety of sources. For example, it
	      could be a character resulting from a key being pressed or
	      released on a keyboard device, a character resulting
	      from the processing of an <termref def="dt-ime">input
	      method editor</termref>, or resulting from a voice
	      command.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>TextEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "click"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device button is clicked over an element. The
	      definition of a click depends on the environment
	      configuration; i.e. may depend on the screen location or
	      the delay between the press and release of the pointing
	      device button. In any case, the target node must be the
	      same between the mousedown, mouseup, and click. The
	      sequence of these events is: <code>{"http://www.w3.org/2001/xml-events",
	      "mousedown"}</code>, <code>{"http://www.w3.org/2001/xml-events",
	      "mouseup"}</code>, and <code>{"http://www.w3.org/2001/xml-events",
	      "click"}</code>. Note that, given the definition of a
	      click, If one or more of the event types
	      <code>{"http://www.w3.org/2001/xml-events", "mouseover"}</code>,
	      <code>{"http://www.w3.org/2001/xml-events", "mousemove"}</code>, and
	      <code>{"http://www.w3.org/2001/xml-events", "mouseout"}</code> occur between
	      the press and release of the pointing device button, the
	      event type <code>{"http://www.w3.org/2001/xml-events", "click"}</code> cannot
	      occur. In the case of nested elements, this event type is
	      always targeted at the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "mousedown"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device button is pressed over an element. In
	      the case of nested elements, this event type is always
	      targeted at the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "mouseup"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device button is released over an element. In
	      the case of nested elements, this event type is always
	      targeted at the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "mouseover"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device is moved onto an element. In the case
	      of nested elements, this event type is always targeted at
	      the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "mousemove"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device is moved while it is over an
	      element. In the case of nested elements, this event type
	      is always targeted at the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "mouseout"</code></td>
	    <td rowspan="1" colspan="1">
	      A pointing device is moved away from an element. In the
	      case of nested elements, this event type is always
	      targeted at the most deeply nested element.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MouseEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "keydown"</code></td> 
	    <td rowspan="1" colspan="1">
	      A key is pressed down. This event type is device dependent
	      and relies on the capabilities of the input devices and
	      how they are mapped in the operating system. This event
	      type is generated after the keyboard mapping but before
	      the processing of the <termref def="dt-ime">input method
	      editor</termref>. This event should logically happen before
	      the event <code>{"http://www.w3.org/2001/xml-events", "keyup"}</code> is
	      produced.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>KeyboardEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "keyup"</code></td> 
	    <td rowspan="1" colspan="1">
	      A key is released. This event type is device dependent and
	      relies on the capabilities of the input devices and how
	      they are mapped in the operating system. This event type
	      is generated after the keyboard mapping but before the
	      processing of the <termref def="dt-ime">input method
	      editor</termref>. This event should logically happen after
	      the event <code>{"http://www.w3.org/2001/xml-events", "keydown"}</code> is
	      produced.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>KeyboardEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMSubtreeModified"</code></td> 
	    <td rowspan="1" colspan="1">
		This is a general event for notification of all changes
		to the document. It can be used instead of the more
		specific events listed below. It may be dispatched after
		a single modification to the document or, at the
		implementation's discretion, after multiple changes have
		occurred. The latter use should generally be used to
		accommodate multiple changes which occur either
		simultaneously or in rapid succession. The target of
		this event is the lowest common parent of the changes
		which have taken place.  This event is dispatched after
		any other events caused by the mutation(s) have occurred.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Document</code>, <code>DocumentFragment</code>,
	      <code>Element</code>, <code>Attr</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMNodeInserted"</code></td> 
	    <td rowspan="1" colspan="1">
	      A node has been added as a <termref def="dt-child">child</termref> of another node. This event
	      is dispatched after the insertion has taken place.  The
	      <termref def="dt-target-node">target node</termref> of
	      this event is the node being inserted.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code>, <code>Attr</code>,
	      <code>Text</code>, <code>Comment</code>,
	      <code>CDATASection</code>, <code>DocumentType</code>,
	      <code>EntityReference</code>, <code>ProcessingInstruction</code></td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMNodeRemoved"</code></td>
	    <td rowspan="1" colspan="1">
	      A node is being removed from its parent node.  This event
	      is dispatched before the node is removed from the tree.
	      The <termref def="dt-target-node">target node</termref> of
	      this event is the node being removed.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code>, <code>Attr</code>,
	      <code>Text</code>, <code>Comment</code>,
	      <code>CDATASection</code>, <code>DocumentType</code>,
	      <code>EntityReference</code>, <code>ProcessingInstruction</code></td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMNodeRemovedFromDocument"</code></td>
	    <td rowspan="1" colspan="1">
	      A node is being removed from a document, either through
	      direct removal of the node or removal of a subtree in
	      which it is contained. This event is dispatched before the
	      removal takes place. The <termref def="dt-target-node">target node</termref> of this event
	      type is the node being removed. If the node is being
	      directly removed, the event type <code>{"http://www.w3.org/2001/xml-events",
	      "DOMNodeRemoved"}</code> will fire before this event type.
	    </td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code>, <code>Attr</code>,
	      <code>Text</code>, <code>Comment</code>,
	      <code>CDATASection</code>, <code>DocumentType</code>,
	      <code>EntityReference</code>, <code>ProcessingInstruction</code></td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMNodeInsertedIntoDocument"</code></td>
	    <td rowspan="1" colspan="1">
	      A node is being inserted into a document, either through
	      direct insertion of the node or insertion of a subtree in
	      which it is contained. This event is dispatched after the
	      insertion has taken place. The <termref def="dt-target-node">target node</termref> of this event
	      is the node being inserted.  If the node is being directly
	      inserted, the event type <code>{"http://www.w3.org/2001/xml-events",
	      "DOMNodeInserted"}</code> will fire before this event
	      type.
	    </td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code>, <code>Attr</code>,
	      <code>Text</code>, <code>Comment</code>,
	      <code>CDATASection</code>, <code>DocumentType</code>,
	      <code>EntityReference</code>, <code>ProcessingInstruction</code></td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMAttrModified"</code></td>
	    <td rowspan="1" colspan="1">
	      Occurs after an <code>Attr</code> has been modified on a
	      node. The <termref def="dt-target-node">target
	      node</termref> of this event is the parent
	      <code>Element</code> node whose <code>Attr</code> changed.
	      It is expected that string based replacement of an
	      <code>Attr</code> value will be viewed as a modification
	      of the <code>Attr</code> since its identity does not
	      change. Subsequently replacement of the <code>Attr</code>
	      node with a different <code>Attr</code> node is viewed as
	      the removal of the first <code>Attr</code> node and the
	      addition of the second.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1"><code>Element</code></td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMCharacterDataModified"</code></td>
	    <td rowspan="1" colspan="1">
	      Occurs after <code>CharacterData.data</code> or
	      <code>ProcessingInstruction.data</code> have been modified
	      but the node itself has not been inserted or deleted. The
	      <termref def="dt-target-node">target node</termref> of
	      this event is the <code>CharacterData</code> node or the
	      <code>ProcessingInstruction</code> node.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Text</code>, <code>Comment</code>,
	      <code>CDATASection</code>,
	      <code>ProcessingInstruction</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>MutationEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMElementNameChanged"</code></td>
	    <td rowspan="1" colspan="1">
	      Occurs after the <code>namespaceURI</code> and/or the
	      <code>nodeName</code> of an <code>Element</code> node have
	      been modified (e.g., the element was renamed using
	      <code>Document.renameNode</code>). The target of this
	      event is the renamed <code>Element</code> node.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>MutationNameEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMAttributeNameChanged"</code></td>
	    <td rowspan="1" colspan="1">
	      Occurs after the <code>namespaceURI</code> and/or the
	      <code>nodeName</code> of a <code>Attr</code> node have
	      been modified (e.g., the attribute was renamed using
	      <code>Document.renameNode</code>). The target of this
	      event is the parent <code>Element</code> node whose
	      <code>Attr</code> has been renamed.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>MutationNameEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "load"</code></td>
	    <td rowspan="1" colspan="1">
	      The DOM Implementation finishes loading in the environment
	      the document or a resource linked from it.
	    </td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "unload"</code></td>
	    <td rowspan="1" colspan="1">
	      The DOM implementation removes from the environment the
	      document or a resource linked from it.
	    </td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "abort"</code></td>
	    <td rowspan="1" colspan="1">
	      The loading of the document, or a resource linked from it,
	      is stopped before being entirely loaded.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "error"</code></td>
	    <td rowspan="1" colspan="1">
	      The document, or a resource linked from it, has been
	      loaded but cannot be interpreted according to its
	      semantic, such as an invalid image or a script execution
	      error.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "select"</code></td>
	    <td rowspan="1" colspan="1">
	      A user selects some text. DOM Level 3 Events does not
	      provide contextual information to access the selected
	      text.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "change"</code></td>
	    <td rowspan="1" colspan="1">
	      A control loses the input focus and its values has been
	      modified since gaining focus.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "submit"</code></td>
	    <td rowspan="1" colspan="1">
	      A form, such as <bibref role="informative" ref="HTML40"/>,
	      <bibref role="informative" ref="XHTML10"/>, or <bibref role="informative" ref="XForms10"/> forms, is submitted.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "reset"</code></td>
	    <td rowspan="1" colspan="1">
	      A form, such as <bibref role="informative" ref="HTML40"/>,
	      <bibref role="informative" ref="XHTML10"/>, or <bibref role="informative" ref="XForms10"/> forms, is reset.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">
	      <code>Element</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>Event</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "resize"</code></td>
	    <td rowspan="1" colspan="1">
	      A document view is resized.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Document</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>UIEvent</code></td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "scroll"</code></td>
	    <td rowspan="1" colspan="1">
	      A document view is scrolled.
	    </td>
	    <td rowspan="1" colspan="1">Yes</td>
	    <td rowspan="1" colspan="1">No</td>
	    <td rowspan="1" colspan="1">
	      <code>Document</code>
	    </td>
	    <td rowspan="1" colspan="1"><code>UIEvent</code></td>
	  </tr>
	</tbody>
      </table>

      <p>
	The event objects associated with the event types described
	above may contain context information. Refer to the description
	of the DOM interfaces for further information.
      </p>

    </div3>
    <div3 id="Events-dom2-compatibility">
      <head>Compatibility with DOM Level 2 Events</head>
      <p>
	<termref def="dt-namespaceURI">Namespace URIs</termref> Were
	only introduced in DOM Level 3 Events and were not part of DOM
	Level 2 Events. DOM Level 2 Events methods are namespace
	ignorant and the event type is only represented by an <termref def="dt-XML-name">XML name</termref>, specified in the
	<code>Event.type</code> attribute.
      </p>
      <p>
	Therefore, while it is safe to use these methods when not
	dealing with namespaces, using them and the new ones at the same
	time should be avoided. DOM Level 2 Events methods solely
	identify events by their <code>Event.type</code>. On the
	contrary, the DOM Level 3 Events methods related to namespaces,
	identify attribute nodes by their
	<code>Event.namespaceURI</code> and
	<code>Event.type</code>. Because of this fundamental difference,
	mixing both sets of methods can lead to unpredictable
	results. For example, using
	<code>EventTarget.addEventListenerNS</code>, two event listeners
	(or more) could be registered using the same <code>type</code>
	and same <code>useCapture</code> values, but different
	<code>namespaceURI</code>s. Calling
	<code>EventTarget.removeEventListener</code> with that
	<code>type</code> and <code>useCapture</code> could then remove
	any or none of those event listeners. The result depends on the
	implementation. The only guarantee in such cases is that all
	methods which access an event listener by its
	<code>namespaceURI</code> and <code>type</code> will access the
	same event listener. For instance,
	<code>EventTarget.removeEventListenerNS</code> removes the event
	that <code>EventTarget.addEventListenerNS</code> added.
      </p>
      <p>
	For compatibility reasons, the dispatching of an event will
	ignore namespace URIs if either the event or the event listener
	has a <code>null</code> namespace URI. If a DOM Level 2 event
	(i.e. with a <code>null</code> namespace URI) is dispatched in
	the DOM tree, all event listeners that match the
	<code>type</code> will be triggered as described in the <specref ref="Events-flow"/>. If a DOM Level 3 event (i.e. with a
	namespace URI) is dispatched in the DOM tree, all event listener
	with the same type and the same or <code>null</code> namespace
	URI, will be triggered as described in the <specref ref="Events-flow"/>.
      </p>
    </div3>
  </div2>

  <div2 id="Events-registration">
    <head>Event listener registration</head>
    <note>
      <p>
	This section is informative.
      </p>
    </note>
    <p>
      There are mainly two ways to associate an event listener to a node
      in the tree:
    </p>
    <olist>
      <item>
	<p>at the programming level using the <code>EventTarget</code>
	methods.</p>
      </item>
      <item>
	<p>
	  at the document level using <bibref role="informative" ref="XMLEvents"/> or an ad-hoc syntax, as the ones provided in
	  <bibref role="informative" ref="XHTML10"/> or <bibref role="informative" ref="SVG1"/>.
	</p>
      </item>
    </olist>
    <div3 id="Events-Registration-interfaces">
      <head>Using the <code>EventTarget</code> methods</head>
      <p>
	The user can attach an event listener using the methods on the
	<code>EventTarget</code> interface:
      </p>
      <eg xml:space="preserve">myCircle.addEventListenerNS("http://www.w3.org/2001/xml-events",
                            "DOMActivate",
                            myListener,
                            true,
                            myEvtGroup);</eg>
      <p>
	The methods do not provide
	the ability to register the same event listener more than once for the same
	event type and the same phase. The <termref def="dt-target-phase">target phase</termref> and the <termref def="dt-bubbling-phase">bubbling phase</termref> are coupled
	during the registration, i.e. it is not possible to register an
	event listener for only one of these two phases (but the
	listener itself could ignore events during one of these phases
	if desired). It is also not possible to register an event
	listener for a specific event target and have it only triggered
	for this event target during the bubbling or capture phases (but
	again, the listener itself could ignore events with other event
	targets if desired).
      </p>
      <p>
	To register an event listener, DOM applications must use the
	methods <code>EventTarget.addEventListener</code> and
	<code>EventTarget.addEventListenerNS</code>.
      </p>
      <p>
	An <code>EventListener</code> being registered on an
	<code>EventTarget</code> may choose to have that
	<code>EventListener</code> triggered during the capture phase by
	specifying the <code>useCapture</code> parameter of the
	<code>EventTarget.addEventListener</code> or
	<code>EventTarget.addEventListenerNS</code> methods to be
	<code>true</code>. If <code>false</code>, the
	<code>EventListener</code> will be triggered during the target
	and bubbling phases.
      </p>
    </div3>
    <div3 id="Events-registration-xmlevents">
      <head>Using XML Events</head>
      <p>
	In <bibref role="informative" ref="XMLEvents"/>, event listeners
	are attached using elements and attributes:
      </p>
      <eg xml:space="preserve">&lt;listener event="DOMActivate" observer="myCircle" handler="#myListener"
          phase="capture" propagate="stop"/&gt;</eg>
      <p>
	Event listeners can only be registered on <code>Element</code>
	nodes, i.e. other <code>Node</code> types are not addressable,
	and cannot be registered for a specific group either, i.e. they
	are always attached to the default group. <bibref role="informative" ref="XMLEvents"/> does not address namespaces
	in event types. If the value of the <code>event</code> attribute
	of the <code>listener</code> element contains a colon (':'), it
	should be interpreted as a <term>QName</term> as defined in
	<bibref ref="XMLSchema2" role="informative"/>.
      </p>
    </div3>
    <div3 id="Events-registration-html40">
      <head>Using XML or HTML attributes</head>
      <p>
	In languages such as <bibref role="informative" ref="HTML40"/>,
	<bibref role="informative" ref="XHTML10"/>, or <bibref role="informative" ref="SVG1"/>, event listeners are specified
	as attributes:
      </p>
      <eg xml:space="preserve">&lt;circle id="myCircle" onactivate="myListener(evt)"
        cx="300" cy="225" r="100" fill="red"/&gt;</eg>
      <p>
	Since only one attribute with the same name can appear on an
	element, it is therefore not possible to register more than one
	event listener on a single <code>EventTarget</code> for the
	event type. Also, event listeners can only be registered on
	<code>Element</code> nodes for the <termref def="dt-target-phase">target phase</termref> and <termref def="dt-bubbling-phase">bubbling phase</termref>, i.e. other
	<code>Node</code> types and the <termref def="dt-capture-phase">capture phase</termref> are not
	addressable with these languages. Event listeners cannot be
	registered for a specific group either, i.e. they are always
	attached to the default group.
      </p>
      <p>
	In order to achieve compatibility with those languages,
	implementors may view the setting of attributes which represent
	event handlers as the creation and registration of an <code>
	EventListener</code> on the <code>EventTarget</code>. The value
	of <code>useCapture</code> defaults to <code>false</code>.  This
	<code>EventListener</code> behaves in the same manner as any
	other <code>EventListeners</code> which may be registered on the
	<code>EventTarget</code>. If the attribute representing the
	event listener is changed, this may be viewed as the removal of
	the previously registered <code>EventListener</code> and the
	registration of a new one. Furthermore, no specification is made
	as to the order in which event attributes will receive the event
	with regards to the other <code>EventListeners</code> on the
	<code>EventTarget</code>.
      </p>
    </div3>
  </div2>
  
  <div2 id="Events-interface">
    <head>Basic interfaces</head>
    <p>
      The interfaces described in this section are fundamental to DOM
      Level 3 Events and must always be supported by the implementation.
    </p>
    <definitions>
      
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- Event interface -->

  <interface name="Event" id="Events-Event" since="DOM Level 2">
    <descr>
    <p>
      The <code>Event</code> interface is used to provide contextual
      information about an event to the listener processing the event.
      An object which implements the <code>Event</code> interface is
      passed as the parameter to an <code>EventListener</code>.  More
      specific context information is passed to event listeners by
      deriving additional interfaces from <code>Event</code> which
      contain information directly relating to the type of event they
      represent. These derived interfaces are also implemented by the
      object passed to the event listener.
    </p>
    </descr>

  <group id="Events-Event-eventPhaseType" name="PhaseType">
    <descr>
      <p>
	An integer indicating which phase of the event flow is being
	processed as defined in <specref ref="Events-flow"/>.
      </p>
    </descr>
    <constant name="CAPTURING_PHASE" id="CAPTURING_PHASE" type="unsigned short" value="1">
      <descr>
	<p>
	  The current event phase is the <termref def="dt-capture-phase">capture phase</termref>.
	</p>
      </descr>
    </constant>
    <constant name="AT_TARGET" id="AT_TARGET" type="unsigned short" value="2">
      <descr>
	<p>
	  The current event is in the <termref def="dt-capture-phase">target phase</termref>, i.e. it is
	  being evaluated at the <termref def="dt-event-target">event
	  target</termref>.
	</p>
      </descr>
    </constant>
    <constant name="BUBBLING_PHASE" id="BUBBLING_PHASE" type="unsigned short" value="3">
      <descr>
	<p>
	  The current event phase is the <termref def="dt-bubbling-phase">bubbling phase</termref>.
	</p>
      </descr>
    </constant>
  </group>

  <attribute type="DOMString" name="type" readonly="yes" id="Events-Event-type">
    <descr>
      <p>
	The name must be an <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">NCName</loc>
	as defined in <bibref ref="Namespaces"/> and is
	case-sensitive. The character ":" (colon) should not be used in
	this attribute.
      </p>
      <p>
	If the attribute <code>Event.namespaceURI</code> is different
	from <code>null</code>, this attribute represents a <termref def="dt-localname">local name</termref>.
      </p>
     </descr>    
  </attribute>
  
  <attribute type="EventTarget" name="target" readonly="yes" id="Events-Event-target">
    <descr>
      <p>
	Used to indicate the <termref def="dt-event-target">event
	target</termref>. This attribute contain the <termref def="dt-target-node">target node</termref> when used with the
	<specref ref="Events-flow"/>.
      </p>
    </descr>
  </attribute>
  
  <attribute type="EventTarget" name="currentTarget" readonly="yes" id="Events-Event-currentTarget">
    <descr>
      <p>
	Used to indicate the <code>EventTarget</code> whose
	<code>EventListeners</code> are currently being processed. This
	is particularly useful during the capture and bubbling
	phases. This attribute could contain the <termref def="dt-target-node">target node</termref> or a target ancestor
	when used with the <specref ref="Events-flow"/>.
      </p>
    </descr>
  </attribute>
  
  <attribute type="unsigned short" name="eventPhase" readonly="yes" id="Events-Event-eventPhase">
    <descr>
      <p>
	Used to indicate which phase of event flow is currently being
	accomplished.
      </p>
    </descr>
  </attribute>
  
  <attribute type="boolean" name="bubbles" readonly="yes" id="Events-Event-canBubble">
    <descr>
      <p>
	Used to indicate whether or not an event is a bubbling event.
	If the event can bubble the value is <code>true</code>,
	otherwise the value is <code>false</code>.
      </p>
    </descr>
  </attribute>
  
  <attribute type="boolean" name="cancelable" readonly="yes" id="Events-Event-canCancel">
    <descr>
      <p>
	Used to indicate whether or not an event can have its default
	action prevented (see also <specref ref="Events-flow-cancelation"/>). If the default action can be
	prevented the value is <code>true</code>, otherwise the value is
	<code>false</code>.
      </p>
    </descr>
  </attribute>
  
  <attribute type="DOMTimeStamp" name="timeStamp" readonly="yes" id="Events-Event-timeStamp">
    <descr>
      <p>
	Used to specify the time (in milliseconds relative to the epoch)
	at which the event was created. Due to the fact that some
	systems may not provide this information the value of
	<code>timeStamp</code> may be not available for all events. When
	not available, a value of <code>0</code> will be
	returned. Examples of epoch time are the time of the system
	start or 0:0:0 UTC 1st January 1970.
      </p>
    </descr>
  </attribute>
  
  <method name="stopPropagation" id="Events-Event-stopPropagation">
    <descr>
      <p>
	This method is used to prevent event listeners of the same group
	to be triggered but its effect is differed until all event
	listeners attached on the <code>currentTarget</code> have been
	triggered (see <specref ref="Events-propagation-and-groups"/>). Once it has been called,
	further calls to that method have no additional effect.
      </p>
      <note>
	<p>
	  This method does not prevent the default action from being
	  invoked; use <code>preventDefault</code> for that effect.
	</p>
      </note>
    </descr>
    <parameters>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p></descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
  
  <method name="preventDefault" id="Events-Event-preventDefault">
    <descr>
      <p>
	If an event is cancelable, the <code>preventDefault</code>
	method is used to signify that the event is to be canceled,
	meaning any default action normally taken by the implementation
	as a result of the event will not occur (see also <specref ref="Events-flow-cancelation"/>), and thus independently of
	event groups. Calling this method for a non-cancelable event has
	no effect.
      </p>
      <note>
	<p>
	  This method does not stop the event propagation; use
	  <code>stopPropagation</code> or
	  <code>stopImmediatePropagation</code> for that effect.
	</p>
      </note>
    </descr>
    <parameters>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p></descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
  
  <method name="initEvent" id="Events-Event-initEvent">
    <descr>
      <p>
	The <code>initEvent</code> method is used to initialize the
	value of an <code>Event</code> created through the
	<code>DocumentEvent.createEvent</code> method. This method may
	only be called before the <code>Event</code> has been dispatched
	via the <code>EventTarget.dispatchEvent</code> method. If the
	method is called several times before invoking
	<code>EventTarget.dispatchEvent</code>, only the final
	invocation takes precedence. If called from a subclass of
	<code>Event</code> interface only the values specified in this
	method are modified, all other attributes are left unchanged.
      </p>
      <p>
	This method sets the <code>Event.type</code> attribute to
	<code>eventTypeArg</code>, and <code>Event.localName</code> and
	<code>Event.namespaceURI</code> to <code>null</code>. To
	initialize an event with a local name and namespace URI, use the
	<code>initEventNS</code> method.
      </p>
    </descr>
    <parameters>
      <param name="eventTypeArg" type="DOMString" attr="in">
	<descr>
	  <p>
	    Specifies the event type.
	  </p>
	</descr>
      </param>
      <param name="canBubbleArg" type="boolean" attr="in">
	<descr>
	  <p>
	    Specifies whether or not the event can bubble. This
	    parameter overrides the intrinsic bubbling behavior of the
	    event.
	  </p>
	</descr>
      </param>
      <param name="cancelableArg" type="boolean" attr="in">
	<descr>
	  <p>
	    Specifies whether or not the event's default action can be
	    prevented. This parameter overrides the intrinsic cancelable
	    behavior of the event.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p>
      </descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>
  
  <attribute readonly="yes" type="DOMString" name="namespaceURI" id="Events-Event-namespaceURI" since="DOM Level 3"> 
    <descr>     
      <p>
	The <termref def="dt-namespaceURI">namespace URI</termref>
	associated with this event at creation time, or
	<code>null</code> if it is unspecified.
      </p>
      <p>
	For events initialized with a DOM Level 2 Events method, such as
	<code>initEvent</code>, this is always <code>null</code>.
      </p>
    </descr>
  </attribute>
  
  <method name="isCustom" id="Events-Event-isCustom" since="DOM Level 3">
    <descr>
      <p>
	This method will always return <code>false</code>, unless the
	event implements the <code>CustomEvent</code> interface.
      </p>
     </descr>    
    <parameters>
      <!-- No parameters -->
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if <code>preventDefault()</code> has been
	  called for this event.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>  
  
  <method name="stopImmediatePropagation" id="Events-Event-stopImmediatePropagation" since="DOM Level 3">
    <descr>
      <p>
	This method is used to prevent event listeners of the same group
	to be triggered and, unlike <code>stopPropagation</code> its
	effect is immediate (see <specref ref="Events-propagation-and-groups"/>). Once it has been called,
	further calls to that method have no additional effect.
      </p>
      <note>
	<p>
	  This method does not prevent the default action from being
	  invoked; use <code>preventDefault</code> for that effect.
	</p>
      </note>
    </descr>
    <parameters>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p></descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
  
  <method name="isDefaultPrevented" id="Events-Event-isDefaultPrevented" since="DOM Level 3">
    <descr>
      <p>
	This method will return <code>true</code> if the method
	<code>preventDefault()</code> has been called for this event,
	<code>false</code> otherwise.
      </p>
    </descr>    
    <parameters>
      <!-- No parameters -->
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if <code>preventDefault()</code> has been
	  called for this event.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>
  
  <method name="isPropagationStopped" id="Events-Event-isPropagationStopped" since="DOM Level 3">
    <descr>
      <p>
	This method will return <code>true</code> if the method
	<code>stopPropagation()</code> has been called for this event
	in the current group, <code>false</code> in any other cases.
      </p>
     </descr>    
    <parameters>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if the event propagation has been stopped
	  in the current group.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>
  
  <method name="initEventNS" id="Events-Event-initEventNS" since="DOM Level 3">
    <descr>
      <p>
	The <code>initEventNS</code> method is used to initialize the
	value of an <code>Event</code> created through the
	<code>DocumentEvent</code> interface.  This method may only be
	called before the <code>Event</code> has been dispatched via the
	<code>dispatchEvent</code> method, though it may be called
	multiple times the event has been dispatched. If called multiple
	times the final invocation takes precedence. If a call to
	<code>initEventNS</code> is made after one of the
	<code>Event</code> derived interfaces' init methods has been
	called, only the values specified in the
	<code>initEventNS</code> method are modified, all other
	attributes are left unchanged.
      </p>
      <p>
	This method sets the <code>Event.type</code> attribute to
	<code>eventTypeArg</code>, and <code>Event.namespaceURI</code>
	to <code>namespaceURIArg</code>.
      </p>
    </descr>
    <parameters>
      <param name="namespaceURIArg" type="DOMString" attr="in">
	<descr>
	  <p>
	    Specifies the <termref def="dt-namespaceURI">namespace
	    URI</termref> associated with this event, or
	    <code>null</code> if no namespace.
	  </p>
	</descr>
      </param>
      <param name="eventTypeArg" type="DOMString" attr="in">
	<descr>
	  <p>
	    Specifies the <termref def="dt-localname">local
	    name</termref> of the event type (see also the description
	    of <code>Event.type</code>).</p>
	</descr>
      </param>
      <param name="canBubbleArg" type="boolean" attr="in">
	<descr><p>Specifies whether or not the event can bubble.</p>
	</descr>
      </param>
      <param name="cancelableArg" type="boolean" attr="in">
	<descr>
	  <p>
	    Specifies whether or not the event's default action can be
	    prevented.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p></descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>

</interface>

      
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- Event target interface -->

<interface name="EventTarget" id="Events-EventTarget" since="DOM Level 2">
  <descr>
    <p>
      The <code>EventTarget</code> interface is implemented by all the
      objects which could be <termref def="dt-event-target">event
      targets</termref> in an implementation which supports the <specref ref="Events-flows"/>. The interface allows registration, removal
      or query of event listeners, and dispatch of events to an event
      target.
    </p>
    <p>
      When used with <specref ref="Events-flow"/>, this interface is
      implemented by all <termref def="dt-target-node">target
      nodes</termref> and target ancestors, i.e. all DOM
      <code>Nodes</code> of the tree support this interface when the
      implementation conforms to DOM Level 3 Events and, therefore, this
      interface can be obtained by using binding-specific casting
      methods on an instance of the <code>Node</code> interface.
    </p>
    <p>
      When using <code>addEventListener</code> or
      <code>addEventListenerNS</code>, 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.
     </p>
    </descr>

    <method name="addEventListener" id="Events-EventTarget-addEventListener">
     <descr>
      <p>
	This method allows the registration of an event listener in the
	default group and, depending on the <code>useCapture</code>
	parameter, on the capture phase of the DOM event flow or its
	target and bubbling phases.
      </p>
    </descr>
    <parameters>
      <param name="type" type="DOMString" attr="in">
	<descr>
	  <p>
	    Specifies the <code>Event.type</code> associated with the
	    event 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 object
	    implemented by the user which implements the
	    <code>EventListener</code> interface and contains the method
	    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 add the event listener for the <termref def="dt-capture-phase">capture phase</termref> only,
	    i.e. this event listener will not be triggered during the
	    <termref def="dt-target-phase">target</termref> and <termref def="dt-bubbling-phase">bubbling</termref> phases. If
	    <code>false</code>, the event listener will only be
	    triggered during the target and bubbling phases.
	  </p>
	</descr>
      </param>
     </parameters>
     <returns type="void">
       <descr><p><!--empty paragraph--></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
	default group.
      </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 <code>Event.type</code> for which the user
	    registered the event listener.
	  </p>
	</descr>
      </param>
      <param name="listener" type="EventListener" attr="in">
	<descr>
	  <p>
	    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 for the capture phase or not.  If a
	    listener was registered twice, once for the capture phase
	    and once for the target and bubbling phases, each must be
	    removed separately. Removal of an event listener registered
	    for the capture phase does not affect the same event
	    listener registered for the target and bubbling phases, and
	    vice versa.
	  </p>
	</descr>
      </param>
     </parameters>
     <returns type="void">
       <descr><p><!--empty paragraph--></p></descr>
     </returns>
     <raises>
      <!-- No exceptions -->
     </raises>
    </method>

    <method name="dispatchEvent" id="Events-EventTarget-dispatchEvent" version="DOM Level 3">
     <descr>
     <p>
	This method allows the dispatch of events into the
	implementation's event model. The <termref def="dt-event-target">event target</termref> of the event is the
	<code>EventTarget</code> object on which
	<code>dispatchEvent</code> is called.
     </p>
      <issue id="dispatchEvent-1" status="open">
	<p>
	  It is necessary to have an exception that occurs if the
	  specified event is not an event which the implementation knows
	  how to dispatch, if it was not created by calling
	  <code>DocumentEvent.createEvent</code> and
	  <code>Event.isCustom()</code> is <code>false</code>.
	  <code>NOT_SUPPORTED</code>?
	</p>
      </issue>
     </descr>
     <parameters>
      <param name="evt" type="Event" attr="in">
	<descr>
	  <p>
	    The event to be dispatched.
	  </p>
	</descr>
      </param>
     </parameters>
     <returns type="boolean">
       <descr>
	<p>
	  Indicates whether any of the listeners which handled the event
	  called <code>preventDefault</code>. If
	  <code>preventDefault</code> was called the returned value is
	  <code>false</code>, else it is <code>true</code>.
	</p>
      </descr>
     </returns>
     <raises>
      <exception name="EventException">
	<descr>
	  <p>
	    UNSPECIFIED_EVENT_TYPE_ERR: Raised if the
	    <code>Event.type</code> was not specified by initializing
	    the event before <code>dispatchEvent</code> was
	    called. Specification of the <code>Event.type</code> as
	    <code>null</code> or an empty string will also trigger this
	    exception.
	  </p>
	  <p>
	    DISPATCH_REQUEST_ERR: Raised if the <code>Event</code>
	    object is already being dispatched in the tree.
	  </p>
        </descr>
      </exception>
     </raises>
    </method>

<!-- removed
  <attribute type="EventListenerList" readonly="yes" name="eventListeners"
             id="EventTarget-eventListenerList" since="DOM Level 3"> 
    <descr>

      <p>An <code>EventListenerList</code> that contains all event listeners on
      this target, independently of their groups. Listeners may appear more
	than once in the list.</p>
    </descr> 
  </attribute> 
-->

  <method name="addEventListenerNS" id="Events-EventTargetGroup-addEventListenerNS" since="DOM Level 3">
    <descr>
     <p>
	This method allows the registration of an event listener in a
	specified group or the default group and, depending on the
	<code>useCapture</code> parameter, on the capture phase of the
	DOM event flow or its target and bubbling phases.
     </p>
    </descr>
    <parameters>
        <param name="namespaceURI" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.namespaceURI</code> associated
	    with the event for which the user is registering.
	  </p>
	</descr>
      </param>
        <param name="type" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.type</code> associated
	    with the event 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 object
	    implemented by the user which implements the
	    <code>EventListener</code> interface and contains the method
	    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 add the event listener for the <termref def="dt-capture-phase">capture phase</termref> only,
	    i.e. this event listener will not be triggered during the
	    <termref def="dt-target-phase">target</termref> and <termref def="dt-bubbling-phase">bubbling</termref> phases. If
	    <code>false</code>, the event listener will only be
	    triggered during the target and bubbling phases.
	  </p>
	</descr>
      </param>
      <param name="evtGroup" type="EventListenerGroup" attr="in">
	<descr>
	  <p>
	    The <code>EventListenerGroup</code> to associate with the
	    <code>EventListener</code> (see also <specref ref="Events-propagation-and-groups"/>). Use <code>null</code> to
	    attach the event listener to the default group.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr>
      </descr>
    </returns>
    <raises><!-- No exceptions -->
    </raises>
  </method>
  <method name="removeEventListenerNS" id="Events-EventTargetGroup-removeEventListenerNS" since="DOM Level 3">
    <descr>
      <p>
	This method allows the removal of event listeners from a
	specified group or the default group.
      </p>
      <p>
	Calling <code>removeEventListenerNS</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="namespaceURI" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.namespaceURI</code> associated
	    with the event for which the user registered the event
	    listener.
	  </p>
	</descr>
      </param>
        <param name="type" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.type</code> associated with the
	    event for which the user registered the event listener.
	  </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 for the capture phase or not.  If a
	    listener was registered twice, once for the capture phase
	    and once for the target and bubbling phases, each must be
	    removed separately. Removal of an event listener registered
	    for the capture phase does not affect the same event
	    listener registered for the target and bubbling phases, and
	    vice versa.
	  </p>
	</descr>
      </param>
      <param name="evtGroup" type="EventListenerGroup" attr="in">
	<descr>
	  <p>
	    The <code>EventListenerGroup</code> associated with the
	    <code>EventListener</code>. Use <code>null</code> to
	    reference the default group.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr>
	<p><!--empty paragraph--></p>
      </descr>
    </returns>
    <raises><!-- No exceptions -->
    </raises>
  </method>

  <method name="willTriggerNS" since="DOM Level 3" id="Events3-willTriggerNS">
    <descr>
      <p>
	This method allows the DOM application to know if an event
	listener, attached to this <code>EventTarget</code> or one of
	its ancestors, will be triggered by the specified event type
	during the dispatch of the event to this event target or one of
	its descendants.
      </p>
    </descr>
    <parameters>
        <param name="namespaceURI" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.namespaceURI</code> associated
	    with the event.
	  </p>
	</descr>
      </param>
        <param name="type" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.type</code> associated with the
	    event.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if an event listener will be triggered on
	  the <code>EventTarget</code> with the specified event type,
	  <code>false</code> otherwise.
	</p>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>

  <method name="hasEventListenerNS" since="DOM Level 3" id="Events3-hasEventListenerNS">
    <descr>
      <p>
	This method allows the DOM application to know if this
	<code>EventTarget</code> contains an event listener registered
	for the specified event type.  This is useful for determining at
	which nodes within a hierarchy altered handling of specific
	event types has been introduced, but should not be used to
	determine whether the specified event type triggers an event
	listener (see <code>willTriggerNS</code>).
      </p>
      <issue id="canTriggerOnTarget-useCapture" status="closed">
	<p>do we need a useCapture parameter?</p>
	<resolution>
	  <p>
	    No use case for that.
	  </p>
	</resolution>
      </issue>
    </descr>
    <parameters>
        <param name="namespaceURI" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.namespaceURI</code> associated
	    with the event.
	  </p>
	</descr>
      </param>
        <param name="type" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <code>Event.type</code> associated
	    with the event.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if an event listener is registered on this
	  <code>EventTarget</code> for the specified event type,
	  <code>false</code> otherwise.
	</p>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>

</interface>

      
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- Event listener interface -->

<interface id="Events-EventListener" name="EventListener" since="DOM Level 2" role="ecmascript-function">
  <descr>
    <p>
      The <code>EventListener</code> interface is the primary way for
      handling events. Users implement the <code>EventListener</code>
      interface and register their event listener on an
      <code>EventTarget</code>. The users should also remove their
      <code>EventListener</code> from its <code>EventTarget</code> after
      they have completed using the listener.
    </p>
    <p>
      Copying a <code>Node</code> does not copy the event listeners
      attached to it.  Event listeners must be attached to the newly
      created <code>Node</code> afterwards if so desired.  Therefore,
      <code>Nodes</code> are copied using <code>Node.cloneNode</code> or
      <code>Range.cloneContents</code>, the <code>EventListeners</code>
      attached to the source <code>Nodes</code> are not attached to
      their copies.
    </p>
    <p>
      Moving a <code>Node</code> does not affect the event listeners
      attached to it. Therefore, when <code>Nodes</code> are moved using
      <code>Document.adoptNode</code>, <code>Node.appendChild</code>, or
      <code>Range.extractContents</code>, the
      <code>EventListeners</code> attached to the moved
      <code>Nodes</code> stay attached to them.
    </p>
  </descr>
  
  <method name="handleEvent" id="Events-EventListener-handleEvent">
    <descr>
      <p>
	This method is called whenever an event occurs of the event type
	for which the <code>EventListener</code> interface was
	registered.
      </p>
    </descr>
    <parameters>
      <param name="evt" type="Event" attr="in">
	<descr>
	  <p>
	    The <code>Event</code> contains contextual information about
	    the <termref def="dt-event">event</termref>.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr><p><!--empty paragraph--></p></descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
</interface>

      
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->

<interface name="EventListenerGroup" id="Events-EventListenerGroup" since="DOM Level 3">
  <descr>
    <p>
      Event listeners can be registered using
      <code>Event.addEventListenerNS</code> within a group.
    </p>
    <p>
      When a set of actions associated with event listeners is critical
      for an application such as refreshing the display, it is important
      to separate them from other event listeners who might stop the
      event flow. In order to prevent undesirable side effects, the
      application should create a group using
      <code>DocumentEvent.createEventListenerGroup</code> and use it
      when adding or removing event listeners.
    </p>
  </descr>
  <method name="isSameEventListenerGroup" id="EventListenerGroup-isSameEventListenerGroup">
    <descr>
      <p>
	This method checks if the supplied
	<code>EventListenerGroup</code> is the same as the
	<code>EventListenerGroup</code> upon which the method is called.
      </p>
    </descr>
    <parameters>
      <param name="other" type="EventListenerGroup" attr="in">
	<descr>
	  <p>
	    The <code>EventListenerGroup</code> with which to check
	    equality.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  Returns <code>true</code> if the
	  <code>EventListenerGroup</code>s are the same, else returns
	  <code>false</code>.
	</p>
        <issue id="isSameEventListenerGroup-equal" status="open">
          <p>
            We should clarify what "equal" means here, or better yet,
            substitute it with "is the same"?
	  </p>
        </issue>
      </descr>
    </returns>
    <raises><!-- No exceptions -->
    </raises>
  </method>
</interface>

      
<!-- EventException interface -->

<exception id="Events-EventException" name="EventException" since="DOM Level 2">
  <descr>
    <p>
      Event operations may throw an <code>EventException</code> as specified in
      their method descriptions.
    </p>
  </descr>
  
  <component id="Events-EventException-code" name="code">
    <typename>unsigned short</typename>
  </component>
  
</exception>

<group id="Events-EventException-EventExceptionCode" name="EventExceptionCode" since="DOM Level 2">
  <descr>
    <p>
      An integer indicating the type of error generated.
    </p>
  </descr>
  <constant name="UNSPECIFIED_EVENT_TYPE_ERR" id="UNSPECIFIED_EVENT_TYPE_ERR" type="unsigned short" value="0">
    <descr>
      <p>
	If the <code>Event.type</code> was not specified by initializing
	the event before the method was called. Specification of the
	<code>Event.type</code> as <code>null</code> or an empty string
	will also trigger this exception.
      </p>
    </descr>
  </constant>
  <constant name="DISPATCH_REQUEST_ERR" id="DISPATCH_REQUEST_ERR" type="unsigned short" value="1" since="DOM Level 3">
    <descr>
      <p>
	If the <code>Event</code> object is already dispatched in the
	tree.
      </p>
    </descr>
  </constant>
</group>

    </definitions>
    <div3 id="Events-document">
      <head>Event creation</head>

      <p>
	In most cases, the events dispatched by the DOM Events
	implementation are also created by the implementation. It is
	however possible to simulate events such as mouse events by
	creating the <code>Event</code> objects and dispatch them using
	the DOM Events implementation.
      </p>
      <p>
	DOM Events provides two ways for creating <code>Event</code>
	objects. An application can either create <code>Event</code>
	objects that are known to the implementation, or create its own
	objects and have them dispatched by the DOM Events
	implementation.
      </p>
      <p>
	Creating <code>Event</code> objects that are known to the DOM
	Events implementation is done using
	<code>DocumentEvent.createEvent</code>. The application must
	then initialize the object by calling the appropriate
	initialization method before invoking
	<code>EventTarget.dispatchEvent</code>. The <code>Event</code>
	objects created must be known by the DOM Events implementation
	otherwise an event exception is thrown.
      </p>
      <p>
	The DOM application might want to create its own
	<code>Event</code> objects, in order to change the default
	<code>Event</code> implementation provided by the DOM Events
	implementation or to generate new event types with specific
	contextual information. In any case, the application is
	responsible for creating and initializing the <code>Event</code>
	object. The application can then dispatch the event using the
	DOM Events implementation by using
	<code>EventTarget.dispatchEvent</code>.
      </p>
      <p>
	However, the DOM Events implementation requires to have access
	to two attributes in the <code>Event</code> object in order to
	accomplish the dispatch appropriately:
	<code>Event.currentTarget</code> and
	<code>Event.eventPhase</code>. Those attributes are defined as
	<code>readonly</code> in the <code>Event</code> interface since
	event listeners must not change them and it is the
	responsibility of the DOM Events implementation to update them
	during the event flow. Therefore, implementing the
	<code>Event</code> interface when creating its own events is not
	enough for an application since the DOM Events implementation
	will not be able to update the current phase and the current
	node during the dispatch, unless the event object also
	implements the <code>CustomEvent</code> interface to give access
	to the relevant attributes.
      </p>

      <definitions>
	
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- DocumentEvent interface -->

<interface name="DocumentEvent" id="Events-DocumentEvent" since="DOM Level 2">
  <descr>
    <p>
      The <code>DocumentEvent</code> interface provides a mechanism by
      which the user can create an <code>Event</code> object of a type
      supported by the implementation. It is expected that the
      <code>DocumentEvent</code> interface will be implemented on the
      same object which implements the <code>Document</code> interface
      in an implementation which supports the Event model.
    </p>
  </descr>

    <method name="createEvent" id="Events-DocumentEvent-createEvent">
     <descr>
     <p><!--empty paragraph--></p>
     </descr>
     <parameters>
      <param name="eventType" type="DOMString" attr="in">
	<descr>
	  <p>
	    The <code>eventType</code> parameter specifies the name of
	    the DOM Events interface to be supported by the created
	    event object, e.g. <code>"Event"</code>,
	    <code>"MouseEvent"</code>, <code>"MutationEvent"</code>
	    ... If the <code>Event</code> is to be dispatched via the
	    <code>EventTarget.dispatchEvent</code> method the
	    appropriate event init method must be called after creation
	    in order to initialize the <code>Event</code>'s values.
	  </p>
	  <p>
	    As an example, a user wishing to synthesize some kind of
	    <code>UIEvent</code> would call
	    <code>DocumentEvent.createEvent</code> with the parameter
	    <code>"UIEvent"</code>.  The <code>UIEvent.initUIEventNS</code>
	    method could then be called on the newly created
	    <code>UIEvent</code> object to set the specific type of user
	    interface event to be dispatched, <code>{"http://www.w3.org/2001/xml-events",
	    "DOMActivate"}</code> for example, and set its context
	    information, e.g. <code>UIEvent.detail</code> in this example.
	  </p>
	  <p>
	    The <code>createEvent</code> method is used in creating
	    <code>Event</code>s when it is either inconvenient or
	    unnecessary for the user to create an <code>Event</code>
	    themselves.  In cases where the implementation provided
	    <code>Event</code> is insufficient, users may supply their
	    own <code>Event</code> implementations for use with the
	    <code>EventTarget.dispatchEvent</code> method. However, the
	    DOM implementation needs access to the attributes
	    <code>Event.currentTarget</code> and
	    <code>Event.eventPhase</code> to propagate appropriately the
	    event in the DOM tree. Therefore users' <code>Event</code>
	    implementations might need to support the
	    <code>CustomEvent</code> interface for that effect.
	  </p>
	  <note>
	    <p>
	      For backward compatibility reason, "UIEvents",
	      "MouseEvents", "MutationEvents", and "HTMLEvents" feature
	      names are valid values for the parameter
	      <code>eventType</code> and represent respectively the
	      interfaces "UIEvent", "MouseEvent", "MutationEvent", and
	      "Event".
	    </p>
	  </note>
      </descr>
      </param>
     </parameters>
     <returns type="Event">
       <descr>
	<p>
	  The newly created event object.
	</p>
      </descr>
     </returns>
     <raises>
      <exception name="DOMException">
	<descr>
	  <p>
	    NOT_SUPPORTED_ERR: Raised if the implementation does not
	    support the <code>Event</code> interface requested.
	  </p>
        </descr>
      </exception>
     </raises>
    </method>

  <method name="createEventListenerGroup" id="Events-DocumentEvent-createEventListenerGroup" since="DOM Level 3">
    <descr>
      <p>
	This method creates a new <code>EventListenerGroup</code> for
	use in the <code>addEventListenerNS</code> and
	<code>removeEventListenerNS</code> methods of the
	<code>EventTarget</code> interface (see also <specref ref="Events-propagation-and-groups"/>).
      </p>
    </descr>
    <parameters>
    </parameters>
    <returns type="EventListenerGroup">
      <descr>
	<p>
	  The newly created <code>EventListenerGroup</code> object.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
  
  <method name="canDispatch" id="Events-DocumentEvent-canDispatch" since="DOM Level 3">
    <descr>
      <p>
	Test if the implementation can generate events of a specified
	type.
      </p>
    </descr>
    <parameters>
        <param name="namespaceURI" type="DOMString" attr="in">
          <descr>
          <p>
            Specifies the <code>Event.namespaceURI</code> of the event.
          </p>
        </descr>
      </param>
        <param name="type" type="DOMString" attr="in">
          <descr>
          <p>
            Specifies the <code>Event.type</code> of the event.
          </p>
        </descr>
      </param>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if the implementation can generate and
	  dispatch this event type, <code>false</code> otherwise.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>
  
</interface>

	
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- UIEvent interface -->

<interface name="CustomEvent" inherits="Event" id="Events-CustomEvent" since="DOM Level 3">
  <descr>
    <p>
      The <code>CustomEvent</code> interface gives access to the
      attributes <code>Event.currentTarget</code> and
      <code>Event.eventPhase</code>. It is intended to be used by the
      DOM Events implementation to access the underlying current target
      and event phase while dispatching a custom <code>Event</code> in
      the tree; it is intended to be implemented, and <emph>not
      used</emph>, by DOM applications.
    </p>
    <p>
      The methods contained in this interface are not intended to be
      used by a DOM application, especially during the dispatch on the
      <code>Event</code> object. Changing the current target or the
      current phase may conduct into unpredictable results of the event
      flow. The DOM Events implementation should ensure that both
      methods return the appropriate current target and phase before
      invoking each event listener on the current target to protect DOM
      applications from malicious event listeners.
    </p>
    <note>
      <p>
	If this interface is supported by the event object,
	<code>Event.isCustom()</code> must return <code>true</code>.
      </p>
    </note>
  </descr>
  
  <method name="setCurrentTarget" id="Events-CustomEvent-setCurrentTarget">
    <descr>
      <p>
	The <code>setCurrentTarget</code> method is used by the DOM
	Events implementation to change the value of
	<code>Event.currentTarget</code>.
      </p>
    </descr>
    <parameters>
      <param name="target" type="EventTarget" attr="in">
	<descr>
	  <p>
	    Specifies the new value for the
	    <code>Event.currentTarget</code> attribute.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>
  
  <method name="setEventPhase" id="Events-CustomEvent-setEventPhase">
    <descr>
      <p>
	The <code>setEventPhase</code> method is used by the DOM Events
	implementation to change the value of
	<code>Event.eventPhase</code>.
      </p>
    </descr>
    <parameters>
      <param name="phase" type="unsigned short" attr="in">
	<descr>
	  <p>
	    Specifies the new value for the
	    <code>Event.eventPhase</code> attribute.
	  </p>
	</descr>
      </param>
    </parameters>
    <returns type="void">
      <descr>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>
  
  <method name="setCurrentEventListenerGroup" id="Events-CustomEvent-setCurrentEventListenerGroup">
    <descr>
      <p>
	The <code>setCurrentEventListenerGroup</code> method is used by the DOM
	Events implementation to change the current event group on which
	the event is being processed.
      </p>
    </descr>
    <parameters>
      <param name="evtGroup" type="EventListenerGroup" attr="in">
        <descr>
          <p>
            The specified event group. Use <code>null</code> to specify
            the default group.
          </p>
        </descr>
      </param>
    </parameters>
    <returns type="void">
      <descr>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>
  
  <method name="isImmediatePropagationStopped" id="Events-Event-isImmediatePropagationStopped" since="DOM Level 3">
    <descr>
      <p>
	The <code>isImmediatePropagationStopped</code> method is used by
	the DOM Events implementation to know if the method
	<code>stopImmediatePropagation()</code> has been called for this
	event in the current group. It returns <code>true</code> if the
	method has been called, <code>false</code> otherwise.
      </p>
     </descr>    
    <parameters>
    </parameters>
    <returns type="boolean">
      <descr>
	<p>
	  <code>true</code> if the event propagation has been stopped
	  immediately in the current group.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- no exception -->
    </raises>
  </method>
  
</interface>


      </definitions>
    </div3>
  </div2>
  <div2 id="Events-eventgroupings">
    <head>Event module definitions</head>
    <p>
      The DOM Event Model allows a DOM implementation to support
      multiple modules of events. The model has been designed to allow
      addition of new event modules as is required.  The DOM will not
      attempt to define all possible events. For purposes of
      interoperability, the DOM will define a module of user interface
      events including lower level device dependent events, a module of
      UI logical events, and a module of document mutation events.
    </p>
    <div3 id="Events-eventgroupings-uievents">
      <head>User Interface event types</head>
      <p>
	The User Interface event module contains basic event types
	associated with user interfaces.
      </p>

      <definitions>
	
<!-- $Id: xml-source.xml,v 1.3 2003/02/21 16:08:15 plehegar Exp $ -->
<!-- UIEvent interface -->

  <interface name="UIEvent" inherits="Event" id="Events-UIEvent" since="DOM Level 2">
    <descr>
    <p>
      The <code>UIEvent</code> interface provides specific contextual
      information associated with User Interface events.
    </p>
    <note>
      <p>
	To create an instance of the <code>UIEvent</code> interface, use
	the feature string "UIEvent" as the value of the input parameter
	used with the <code>DocumentEvent.createEvent</code> method.
      </p>
    </note>
  </descr>

  <attribute type="views::AbstractView" name="view" readonly="yes" id="Events-UIEvent-view">
    <descr>
      <p>The <code>view</code> attribute identifies the
	<code>AbstractView</code> from which the event was generated.</p>
    </descr>
  </attribute>

  <attribute id="Events-UIEvent-detail" name="detail" type="long" readonly="yes">
    <descr><p>Specifies some detail information about the <code>Event</code>,
	depending on the type of event.</p>
    </descr>
  </attribute>

    <method name="initUIEvent" id="Events-Event-initUIEvent">
      <descr>
      <p>The <code>initUIEvent</code> method is used to initialize the
      value of a <code>UIEvent</code> created using the
      <code>DocumentEvent.createEvent</code> method.  This method may only be
      called before the <code>UIEvent</code> has been dispatched via the
      <code>EventTarget.dispatchEvent</code> method, though it may be
      called multiple times during that phase if necessary. If called
      multiple times, the final invocation takes precedence.</p>
      </descr>
      <parameters>
        <param name="typeArg" type="DOMString" attr="in">
          <descr><p>Specifies the event type.</p>
          </descr>
        </param>
        <param name="canBubbleArg" type="boolean" attr="in">
          <descr><p>Specifies whether or not the event can bubble.  This parameter overrides the intrinsic
          bubbling behavior of the event.</p>
          </descr>
        </param>
        <param name="cancelableArg" type="boolean" attr="in">
          <descr><p>Specifies whether or not the event's default action
          can be prevented. This parameter overrides the intrinsic
          cancelable behavior of the event.</p>
          </descr>
        </param>
        <param name="viewArg" type="views::AbstractView" attr="in">
          <descr><p>Specifies the <code>Event</code>'s
          <code>AbstractView</code>.</p>
          </descr>
        </param>
        <param name="detailArg" type="long" attr="in">
          <descr><p>Specifies the <code>Event</code>'s detail.</p>
          </descr>
        </param>
      </parameters>
      <returns type="void">
       <descr><p><!--empty paragraph--></p></descr>
      </returns>
      <raises>
      <!-- No exceptions -->
      </raises>
    </method>

    <method name="initUIEventNS" id="Events-Event-initUIEventNS" since="DOM Level 3">
      <descr>
      <p>
	The <code>initUIEventNS</code> method is used to initialize the
	value of a <code>UIEvent</code> created using the
	<code>DocumentEvent.createEvent</code> method.  This method may only be
	called before the <code>UIEvent</code> has been dispatched via
	the <code>EventTarget.dispatchEvent</code> method, though it may
	be called multiple times during that phase if necessary.  If
	called multiple times, the final invocation takes
	precedence.</p>
      </descr>
      <parameters>
        <param name="namespaceURI" type="DOMString" attr="in">
	  <descr>
	  <p>
	    Specifies the <termref def="dt-namespaceURI">namespace
	    URI</termref> associated with this event, or
	    <code>null</code> if the application wish not to use
	    namespaces.
	  </p>
	</descr>
      </param>
        <param name="typeArg" type="DOMString" attr="in">
          <descr><p>
	    Specifies the event type (see also the description of the
	    <code>type</code> attribute in the <code>Event</code>
	    interface).</p>
          </descr>
        </param>
        <param name="canBubbleArg" type="boolean" attr="in">
          <descr><p>Specifies whether or not the event can bubble.</p>
          </descr>
        </param>
        <param name="cancelableArg" type="boolean" attr="in">
          <descr><p>Specifies whether or not the event's default 
          action can be prevented.</p>
          </descr>
        </param>
        <param name="viewArg" type="views::AbstractView" attr="in">
          <descr><p>Specifies the <code>Event</code>'s
	    <code>AbstractView</code>.</p>
          </descr>
        </param>
        <param name="detailArg" type="long" attr="in">
          <descr><p>Specifies the <code>Event</code>'s detail.</p>
          </descr>
        </param>
      </parameters>
      <returns type="void">
       <descr><p><!--empty paragraph--></p></descr>
      </returns>
      <raises>
      <!-- No exceptions -->
      </raises>
    </method>

  </interface>

      </definitions>
      
      <p>
	The User Interface event types are listed below. For a full
	description of the semantics associated with these event types,
	refer to the <specref ref="Events-EventTypes-complete"/>.  A DOM
	application may use the <code>hasFeature(feature,
	version)</code> method of the <code>DOMImplementation</code>
	interface with parameter values <code>"UIEvents"</code> and <code>"3.0"</code>
	(respectively) to determine whether or not the DOM Level 3 User
	Interface event types are supported by the implementation. In
	order to fully support this module, an implementation must also
	support the <code>"Events"</code> feature defined in this specification and
	the <code>"Views"</code> feature defined in the DOM Level 2 Views
	specification <bibref ref="DOM2Views"/>. For
	additional information about <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022/introduction.html#ID-Conformance" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">conformance</xspecref>,
	please see the DOM Level 3 Core specification <bibref role="informative" ref="DOMCore"/>. The DOM Level 3 User Interface Events module is
	built on top of the DOM Level 2 User Interface Events <bibref ref="DOM2Events"/> module, i.e. a DOM Level 3 User Interface
	Events implementation where <code>hasFeature("UIEvents",
	"3.0")</code> returns <code>true</code> must also return
	<code>true</code> when the <code>version</code> number is
	<code>"2.0"</code>, <code>""</code> or, <code>null</code>.
      </p>

      <table summary="This table contains the context information for the event types in connection with the DOM interface" cellpadding="0" cellspacing="0">
	<tbody>
	  <tr>
	    <th rowspan="1" colspan="1">Event type</th>
	    <th rowspan="1" colspan="1">Context information</th>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMActivate"</code></td>
	    <td rowspan="1" colspan="1">
	      <code>UIEvent.view</code> is in use.
	      <code>UIEvent.detail</code> contains a numerical value to
	      give an indication of the type of activation that occurs:
	      <code>1</code> for a simple activation (e.g. a simple
	      click or Enter), <code>2</code> for hyperactivation (for
	      instance a double click or Shift Enter).
	    </td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMFocusIn"</code></td>
	    <td rowspan="1" colspan="1">
	      <code>UIEvent.view</code> is in use.
	    </td>
	  </tr>
	  <tr>
	    <td rowspan="1" colspan="1"><code>"http://www.w3.org/2001/xml-events", "DOMFocusOut"</code></td>
	    <td rowspan="1" colspan="1">
	      <code>UIEvent.view</code> is in use.
	    </td>
	  </tr>
	</tbody>
      </table>
    </div3>

    <div3 id="Events-TextEvents-Interfaces"> 
      <head>Text events</head> 
      <p>
	The text event module originates from the <bibref ref="HTML40" role="informative"/> <code>onkeypress</code> attribute. Unlike
	this attribute, the event type <code>{"http://www.w3.org/2001/xml-events", "textInput"}</code>
	applies only to characters and is specifically designed for use
	with text input devices.
      </p>
      <definitions>	
	
<!-- $Date: 2003/02/21 16:08:15 $ $Revision: 1.3 $ -->
<!--[ TextEvent object description ]-->
<interface name="TextEvent" inherits="UIEvent" id="Events-TextEvent" since="DOM Level 3"> 
  <descr> 
    <p>The <code>TextEvent</code> interface provides specific contextual
      information associated with Text Events.
    </p>
    <note>
      <p>
	To create an instance of the <code>TextEvent</code> interface,
	use the feature string "TextEvent" as the value of the input
	parameter used with the <code>DocumentEvent.createEvent</code>
	method.
      </p>
    </note>
    <issue id="auto-repeat" status="closed">
      <p>
	In the past, detail was used to contain the repeat count for
	the key. Do we want to keep this notion? How? using an
	auto-repeat event instead? Use cases?
      </p>
      <resolution>
	<p>closed.</p>
      </resolution>
    </issue>
    <issue id="visibleOutputGenerated-1" status="closed">
      <p>
	same question for visibleOutputGenerated: This attribute is
	device dependent (display related). What happen on voice system
	for example? What are the real use cases for it?
      </p>
      <resolution>
	<p>closed.</p>
      </resolution>
    </issue>
    <issue id="paste-1" status="closed">
      <p>
	What happens on paste through Ctrl-V? Do you get a textInput
	event or not if the selection contains characters?
      </p>
      <resolution>
	<p>
	  This will be undefined by this specification.
	</p>
      </resolution>
    </issue>
  </descr> 
  <attribute type="DOMString" name="data" id="Events-UIEvent-data" readonly="yes"> 
    <descr> 
      <p>
	<code>data</code> holds the value of the characters generated by
	the character device. This may be a single Unicode character or
	it may be a string.
      </p>
    </descr>
  </attribute>
  <method name="initTextEvent" id="Events-Event-initTextEvent"> 
    <descr> 
      <p>The <code>initTextEvent</code> method is used to initialize the value 
	of a <code>TextEvent</code> created using the
	<code>DocumentEvent.createEvent</code> method.
	This method may only be called before the <code>TextEvent</code> has been dispatched 
	via the <code>EventTarget.dispatchEvent</code> method, though it may be called multiple times during that 
	phase if necessary. If called multiple times, the final invocation takes precedence.
	This method has no effect if called after the event has been dispatched.</p>	
    </descr> 
    <parameters> 
      <param name="typeArg" type="DOMString" attr="in"> 
	<descr>
	  <p>Specifies the event type.</p> 
	</descr> 
      </param> 
      <param name="canBubbleArg" type="boolean" attr="in"> 
	<descr>
	  <p>Specifies whether or not the event can bubble. This parameter overrides the intrinsic
	    bubbling behavior of the event.</p> 
	</descr> 
      </param> 
      <param name="cancelableArg" type="boolean" attr="in"> 
	<descr>
	  <p>Specifies whether or not the event's default action can be
	    prevent.  This parameter overrides the intrinsic
	    cancelable behavior of the event.</p> 
	</descr> 
      </param> 
      <param name="viewArg" type="views::AbstractView" attr="in"> 
	<descr>
	  <p>Specifies the <code>TextEvent</code>'s view.</p> 
	</descr> 
      </param> 
      <param name="dataArg" type="DOMString" attr="in"> 
	<descr>
	  <p>Specifies the <code>TextEvent</code>'s
	    <code>data</code> attribute</p> 
	</descr> 
      </param>
    </parameters> 
    <returns type="void"> 
      <descr>
      </descr> 
    </returns> 
    <raises>      <!-- No exceptions -->
    </raises> 
  </method> 
  
  <method name="initTextEventNS" id="Events-Event-initTextEventNS"> 
    <descr> 
      <p>The <code>initTextEventNS</code> method is used to initialize the value 
	of a <code>TextEvent</code> created using the
	<code>DocumentEvent.createEvent</code> method.
	This method may only be called before the <code>TextEvent</code> has been dispatched 
	via the <code>EventTarget.dispatchEvent</code> method, though it may be called multiple times during that 
	phase if necessary. If called multiple times, the final invocation takes precedence.
	This method has no effect if called after the event has been dispatched.</p>	
    </descr> 
    <parameters> 
      <param name="namespaceURI" type="DOMString" attr="in">
	<descr>
	  <p>
	    Specifies the <termref def="dt-namespaceURI">namespace
	      URI</termref> associated with this event, or
	    <code>null</code> if the applications wish to have no
	    n