/*
 * Copyright (c) 2000 World Wide Web Consortium,
 * (Massachusetts Institute of Technology, Institut National de
 * Recherche en Informatique et en Automatique, Keio University). All
 * Rights Reserved. This program is distributed under the W3C's Software
 * Intellectual Property License. This program is distributed 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.
 * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
 */

// File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.idl

#ifndef _EVENTS_IDL_
#define _EVENTS_IDL_

#include "dom.idl"
#include "views.idl"

#pragma prefix "dom.w3c.org"
module events
{

//  typedef dom::DOMString DOMString;
//  typedef dom::DOMTimeStamp DOMTimeStamp;
//  typedef sequence<unsigned short> DOMString;
//  typedef dom::Node Node;

  interface EventListener;
  interface Event;

  // Introduced in DOM Level 2:
  exception EventException {
    unsigned short   code;
  };
  // EventExceptionCode
  const unsigned short      UNSPECIFIED_EVENT_TYPE_ERR     = 0;


  // Introduced in DOM Level 2:
  interface EventTarget {
    void               addEventListener(in DOMString type, 
                                        in EventListener listener, 
                                        in boolean useCapture);
    void               removeEventListener(in DOMString type, 
                                           in EventListener listener, 
                                           in boolean useCapture);
    boolean            dispatchEvent(in Event evt)
                                        raises(EventException);
  };

  // Introduced in DOM Level 2:
  interface EventListener {
    void               handleEvent(in Event evt);
  };

  // Introduced in DOM Level 2:
  interface Event {

    // PhaseType
    const unsigned short      CAPTURING_PHASE                = 1;
    const unsigned short      AT_TARGET                      = 2;
    const unsigned short      BUBBLING_PHASE                 = 3;

    readonly attribute DOMString        type;
    readonly attribute EventTarget      target;
    readonly attribute EventTarget      currentTarget;
    readonly attribute unsigned short   eventPhase;
    readonly attribute boolean          bubbles;
    readonly attribute boolean          cancelable;
    readonly attribute unsigned long    timeStamp;
    void               stopPropagation();
    void               preventDefault();
    void               initEvent(in DOMString eventTypeArg, 
                                 in boolean canBubbleArg, 
                                 in boolean cancelableArg);
  };

  // Introduced in DOM Level 2:
  interface DocumentEvent {
    Event              createEvent(in DOMString eventType)
                                        raises(dom::DOMException);
  };

  // Introduced in DOM Level 2:
  interface UIEvent : Event {
    readonly attribute AbstractView  view;
    readonly attribute long          detail;
    void               initUIEvent(in DOMString typeArg, 
                                   in boolean canBubbleArg, 
                                   in boolean cancelableArg, 
                                   in AbstractView viewArg, 
                                   in long detailArg);
  };

  // Introduced in DOM Level 2:
  interface MouseEvent : UIEvent {
    readonly attribute long             screenX;
    readonly attribute long             screenY;
    readonly attribute long             clientX;
    readonly attribute long             clientY;
    readonly attribute boolean          ctrlKey;
    readonly attribute boolean          shiftKey;
    readonly attribute boolean          altKey;
    readonly attribute boolean          metaKey;
    readonly attribute unsigned short   button;
    readonly attribute EventTarget      relatedTarget;
    void               initMouseEvent(in DOMString typeArg, 
                                      in boolean canBubbleArg, 
                                      in boolean cancelableArg, 
                                      in AbstractView viewArg, 
                                      in long detailArg, 
                                      in long screenXArg, 
                                      in long screenYArg, 
                                      in long clientXArg, 
                                      in long clientYArg, 
                                      in boolean ctrlKeyArg, 
                                      in boolean altKeyArg, 
                                      in boolean shiftKeyArg, 
                                      in boolean metaKeyArg, 
                                      in unsigned short buttonArg, 
                                      in EventTarget relatedTargetArg);
  };

  // Introduced in DOM Level 2:
  interface MutationEvent : Event {

    // attrChangeType
    const unsigned short      MODIFICATION                   = 1;
    const unsigned short      ADDITION                       = 2;
    const unsigned short      REMOVAL                        = 3;

    readonly attribute Node             relatedNode;
    readonly attribute DOMString        prevValue;
    readonly attribute DOMString        newValue;
    readonly attribute DOMString        attrName;
    readonly attribute unsigned short   attrChange;
    void               initMutationEvent(in DOMString typeArg, 
                                         in boolean canBubbleArg, 
                                         in boolean cancelableArg, 
                                         in Node relatedNodeArg, 
                                         in DOMString prevValueArg, 
                                         in DOMString newValueArg, 
                                         in DOMString attrNameArg, 
                                         in unsigned short attrChangeArg);
  };

  // Introduced in DOM Level 3 and manually moved here (ex. NS version):
  interface KeyboardEvent : UIEvent {

    // KeyLocationCode
    const unsigned long       DOM_KEY_LOCATION_STANDARD      = 0x00;
    const unsigned long       DOM_KEY_LOCATION_LEFT          = 0x01;
    const unsigned long       DOM_KEY_LOCATION_RIGHT         = 0x02;
    const unsigned long       DOM_KEY_LOCATION_NUMPAD        = 0x03;

    readonly attribute DOMString       keyIdentifier;
    readonly attribute unsigned long   keyLocation;
    readonly attribute boolean         ctrlKey;
    readonly attribute boolean         shiftKey;
    readonly attribute boolean         altKey;
    readonly attribute boolean         metaKey;
    boolean            getModifierState(in DOMString keyIdentifierArg);
    void               initKeyboardEvent(in DOMString typeArg, 
                                         in boolean canBubbleArg, 
                                         in boolean cancelableArg, 
                                         in AbstractView viewArg, 
                                         in DOMString keyIdentifierArg, 
                                         in unsigned long keyLocationArg, 
                                         in DOMString modifiersList);
  };

  // Borrowed from the 19990923 version of DOM2 Event Specifications

// Introduced in DOM Level 2:

interface KeyEvent : UIEvent {
  // VirtualKeyCode
  const unsigned long       CHAR_UNDEFINED                 = 0x0FFFF;
  const unsigned long       DOM_VK_0                       = 0x30;
  const unsigned long       DOM_VK_1                       = 0x31;
  const unsigned long       DOM_VK_2                       = 0x32;
  const unsigned long       DOM_VK_3                       = 0x33;
  const unsigned long       DOM_VK_4                       = 0x34;
  const unsigned long       DOM_VK_5                       = 0x35;
  const unsigned long       DOM_VK_6                       = 0x36;
  const unsigned long       DOM_VK_7                       = 0x37;
  const unsigned long       DOM_VK_8                       = 0x38;
  const unsigned long       DOM_VK_9                       = 0x39;
  const unsigned long       DOM_VK_A                       = 0x41;
  const unsigned long       DOM_VK_ACCEPT                  = 0x1E;
  const unsigned long       DOM_VK_ADD                     = 0x6B;
  const unsigned long       DOM_VK_AGAIN                   = 0xFFC9;
  const unsigned long       DOM_VK_ALL_CANDIDATES          = 0x0100;
  const unsigned long       DOM_VK_ALPHANUMERIC            = 0x00F0;
  const unsigned long       DOM_VK_ALT                     = 0x12;
  const unsigned long       DOM_VK_ALT_GRAPH               = 0xFF7E;
  const unsigned long       DOM_VK_AMPERSAND               = 0x96;
  const unsigned long       DOM_VK_ASTERISK                = 0x97;
  const unsigned long       DOM_VK_AT                      = 0x0200;
  const unsigned long       DOM_VK_B                       = 0x42;
  const unsigned long       DOM_VK_BACK_QUOTE              = 0xC0;
  const unsigned long       DOM_VK_BACK_SLASH              = 0x5C;
  const unsigned long       DOM_VK_BACK_SPACE              = 0x08;
  const unsigned long       DOM_VK_BRACELEFT               = 0xA1;
  const unsigned long       DOM_VK_BRACERIGHT              = 0xA2;
  const unsigned long       DOM_VK_C                       = 0x43;
  const unsigned long       DOM_VK_CANCEL                  = 0x03;
  const unsigned long       DOM_VK_CAPS_LOCK               = 0x14;
  const unsigned long       DOM_VK_CIRCUMFLEX              = 0x0202;
  const unsigned long       DOM_VK_CLEAR                   = 0x0C;
  const unsigned long       DOM_VK_CLOSE_BRACKET           = 0x5D;
  const unsigned long       DOM_VK_CODE_INPUT              = 0x0102;
  const unsigned long       DOM_VK_COLON                   = 0x0201;
  const unsigned long       DOM_VK_COMMA                   = 0x2C;
  const unsigned long       DOM_VK_COMPOSE                 = 0xFF20;
  const unsigned long       DOM_VK_CONTROL                 = 0x11;
  const unsigned long       DOM_VK_CONVERT                 = 0x1C;
  const unsigned long       DOM_VK_COPY                    = 0xFFCD;
  const unsigned long       DOM_VK_CUT                     = 0xFFD1;
  const unsigned long       DOM_VK_D                       = 0x44;
  const unsigned long       DOM_VK_DEAD_ABOVEDOT           = 0x86;
  const unsigned long       DOM_VK_DEAD_ABOVERING          = 0x88;
  const unsigned long       DOM_VK_DEAD_ACUTE              = 0x81;
  const unsigned long       DOM_VK_DEAD_BREVE              = 0x85;
  const unsigned long       DOM_VK_DEAD_CARON              = 0x8A;
  const unsigned long       DOM_VK_DEAD_CEDILLA            = 0x8B;
  const unsigned long       DOM_VK_DEAD_CIRCUMFLEX         = 0x82;
  const unsigned long       DOM_VK_DEAD_DIAERESIS          = 0x87;
  const unsigned long       DOM_VK_DEAD_DOUBLEACUTE        = 0x89;
  const unsigned long       DOM_VK_DEAD_GRAVE              = 0x80;
  const unsigned long       DOM_VK_DEAD_IOTA               = 0x8D;
  const unsigned long       DOM_VK_DEAD_MACRON             = 0x84;
  const unsigned long       DOM_VK_DEAD_OGONEK             = 0x8C;
  const unsigned long       DOM_VK_DEAD_SEMIVOICED_SOUND   = 0x8F;
  const unsigned long       DOM_VK_DEAD_TILDE              = 0x83;
  const unsigned long       DOM_VK_DEAD_VOICED_SOUND       = 0x8E;
  const unsigned long       DOM_VK_DECIMAL                 = 0x6E;
  const unsigned long       DOM_VK_DELETE                  = 0x7F;
  const unsigned long       DOM_VK_DIVIDE                  = 0x6F;
  const unsigned long       DOM_VK_DOLLAR                  = 0x0203;
  const unsigned long       DOM_VK_DOWN                    = 0x28;
  const unsigned long       DOM_VK_E                       = 0x45;
  const unsigned long       DOM_VK_END                     = 0x23;
  const unsigned long       DOM_VK_ENTER                   = 0x0D;
  const unsigned long       DOM_VK_EQUALS                  = 0x3D;
  const unsigned long       DOM_VK_ESCAPE                  = 0x1B;
  const unsigned long       DOM_VK_EURO_SIGN               = 0x0204;
  const unsigned long       DOM_VK_EXCLAMATION_MARK        = 0x0205;
  const unsigned long       DOM_VK_F                       = 0x46;
  const unsigned long       DOM_VK_F1                      = 0x70;
  const unsigned long       DOM_VK_F10                     = 0x79;
  const unsigned long       DOM_VK_F11                     = 0x7A;
  const unsigned long       DOM_VK_F12                     = 0x7B;
  const unsigned long       DOM_VK_F13                     = 0xF000;
  const unsigned long       DOM_VK_F14                     = 0xF001;
  const unsigned long       DOM_VK_F15                     = 0xF002;
  const unsigned long       DOM_VK_F16                     = 0xF003;
  const unsigned long       DOM_VK_F17                     = 0xF004;
  const unsigned long       DOM_VK_F18                     = 0xF005;
  const unsigned long       DOM_VK_F19                     = 0xF006;
  const unsigned long       DOM_VK_F2                      = 0x71;
  const unsigned long       DOM_VK_F20                     = 0xF007;
  const unsigned long       DOM_VK_F21                     = 0xF008;
  const unsigned long       DOM_VK_F22                     = 0xF009;
  const unsigned long       DOM_VK_F23                     = 0xF00A;
  const unsigned long       DOM_VK_F24                     = 0xF00B;
  const unsigned long       DOM_VK_F3                      = 0x72;
  const unsigned long       DOM_VK_F4                      = 0x73;
  const unsigned long       DOM_VK_F5                      = 0x74;
  const unsigned long       DOM_VK_F6                      = 0x75;
  const unsigned long       DOM_VK_F7                      = 0x76;
  const unsigned long       DOM_VK_F8                      = 0x77;
  const unsigned long       DOM_VK_F9                      = 0x78;
  const unsigned long       DOM_VK_FINAL                   = 0x18;
  const unsigned long       DOM_VK_FIND                    = 0xFFD0;
  const unsigned long       DOM_VK_FULL_WIDTH              = 0x00F3;
  const unsigned long       DOM_VK_G                       = 0x47;
  const unsigned long       DOM_VK_GREATER                 = 0xA0;
  const unsigned long       DOM_VK_H                       = 0x48;
  const unsigned long       DOM_VK_HALF_WIDTH              = 0x00F4;
  const unsigned long       DOM_VK_HELP                    = 0x9C;
  const unsigned long       DOM_VK_HIRAGANA                = 0x00F2;
  const unsigned long       DOM_VK_HOME                    = 0x24;
  const unsigned long       DOM_VK_I                       = 0x49;
  const unsigned long       DOM_VK_INSERT                  = 0x9B;
  const unsigned long       DOM_VK_INVERTED_EXCLAMATION_MARK = 0x0206;
  const unsigned long       DOM_VK_J                       = 0x4A;
  const unsigned long       DOM_VK_JAPANESE_HIRAGANA       = 0x0104;
  const unsigned long       DOM_VK_JAPANESE_KATAKANA       = 0x0103;
  const unsigned long       DOM_VK_JAPANESE_ROMAN          = 0x0105;
  const unsigned long       DOM_VK_K                       = 0x4B;
  const unsigned long       DOM_VK_KANA                    = 0x15;
  const unsigned long       DOM_VK_KANJI                   = 0x19;
  const unsigned long       DOM_VK_KATAKANA                = 0x00F1;
  const unsigned long       DOM_VK_KP_DOWN                 = 0xE1;
  const unsigned long       DOM_VK_KP_LEFT                 = 0xE2;
  const unsigned long       DOM_VK_KP_RIGHT                = 0xE3;
  const unsigned long       DOM_VK_KP_UP                   = 0xE0;
  const unsigned long       DOM_VK_L                       = 0x4C;
  const unsigned long       DOM_VK_LEFT                    = 0x25;
  const unsigned long       DOM_VK_LEFT_PARENTHESIS        = 0x0207;
  const unsigned long       DOM_VK_LESS                    = 0x99;
  const unsigned long       DOM_VK_M                       = 0x4D;
  const unsigned long       DOM_VK_META                    = 0x9D;
  const unsigned long       DOM_VK_MINUS                   = 0x2D;
  const unsigned long       DOM_VK_MODECHANGE              = 0x1F;
  const unsigned long       DOM_VK_MULTIPLY                = 0x6A;
  const unsigned long       DOM_VK_N                       = 0x4E;
  const unsigned long       DOM_VK_NONCONVERT              = 0x1D;
  const unsigned long       DOM_VK_NUM_LOCK                = 0x90;
  const unsigned long       DOM_VK_NUMBER_SIGN             = 0x0208;
  const unsigned long       DOM_VK_NUMPAD0                 = 0x60;
  const unsigned long       DOM_VK_NUMPAD1                 = 0x61;
  const unsigned long       DOM_VK_NUMPAD2                 = 0x62;
  const unsigned long       DOM_VK_NUMPAD3                 = 0x63;
  const unsigned long       DOM_VK_NUMPAD4                 = 0x64;
  const unsigned long       DOM_VK_NUMPAD5                 = 0x65;
  const unsigned long       DOM_VK_NUMPAD6                 = 0x66;
  const unsigned long       DOM_VK_NUMPAD7                 = 0x67;
  const unsigned long       DOM_VK_NUMPAD8                 = 0x68;
  const unsigned long       DOM_VK_NUMPAD9                 = 0x69;
  const unsigned long       DOM_VK_O                       = 0x4F;
  const unsigned long       DOM_VK_OPEN_BRACKET            = 0x5B;
  const unsigned long       DOM_VK_P                       = 0x50;
  const unsigned long       DOM_VK_PAGE_DOWN               = 0x22;
  const unsigned long       DOM_VK_PAGE_UP                 = 0x21;
  const unsigned long       DOM_VK_PASTE                   = 0xFFCF;
  const unsigned long       DOM_VK_PAUSE                   = 0x13;
  const unsigned long       DOM_VK_PERIOD                  = 0x2E;
  const unsigned long       DOM_VK_PLUS                    = 0x0209;
  const unsigned long       DOM_VK_PREVIOUS_CANDIDATE      = 0x0101;
  const unsigned long       DOM_VK_PRINTSCREEN             = 0x9A;
  const unsigned long       DOM_VK_PROPS                   = 0xFFCA;
  const unsigned long       DOM_VK_Q                       = 0x51;
  const unsigned long       DOM_VK_QUOTE                   = 0xDE;
  const unsigned long       DOM_VK_QUOTEDBL                = 0x98;
  const unsigned long       DOM_VK_R                       = 0x52;
  const unsigned long       DOM_VK_RIGHT                   = 0x27;
  const unsigned long       DOM_VK_RIGHT_PARENTHESIS       = 0x020A;
  const unsigned long       DOM_VK_ROMAN_CHARACTERS        = 0x00F5;
  const unsigned long       DOM_VK_S                       = 0x53;
  const unsigned long       DOM_VK_SCROLL_LOCK             = 0x91;
  const unsigned long       DOM_VK_SEMICOLON               = 0x3B;
  const unsigned long       DOM_VK_SEPARATER               = 0x6C;
  const unsigned long       DOM_VK_SHIFT                   = 0x10;
  const unsigned long       DOM_VK_SLASH                   = 0x2F;
  const unsigned long       DOM_VK_SPACE                   = 0x20;
  const unsigned long       DOM_VK_STOP                    = 0xFFC8;
  const unsigned long       DOM_VK_SUBTRACT                = 0x6D;
  const unsigned long       DOM_VK_T                       = 0x54;
  const unsigned long       DOM_VK_TAB                     = 0x09;
  const unsigned long       DOM_VK_U                       = 0x55;
  const unsigned long       DOM_VK_UNDEFINED               = 0x0;
  const unsigned long       DOM_VK_UNDERSCORE              = 0x020B;
  const unsigned long       DOM_VK_UNDO                    = 0xFFCB;
  const unsigned long       DOM_VK_UP                      = 0x26;
  const unsigned long       DOM_VK_V                       = 0x56;
  const unsigned long       DOM_VK_W                       = 0x57;
  const unsigned long       DOM_VK_X                       = 0x58;
  const unsigned long       DOM_VK_Y                       = 0x59;
  const unsigned long       DOM_VK_Z                       = 0x5A;

  readonly attribute boolean          ctrlKey;
  readonly attribute boolean          shiftKey;
  readonly attribute boolean          altKey;
  readonly attribute boolean          metaKey;
  readonly attribute unsigned long    keyCode;
  readonly attribute unsigned long    charCode;
  void               initKeyEvent(in DOMString typeArg, 
                                  in boolean canBubbleArg, 
                                  in boolean cancelableArg, 
                                  in boolean ctrlKeyArg, 
                                  in boolean altKeyArg, 
                                  in boolean shiftKeyArg, 
                                  in boolean metaKeyArg, 
                                  in unsigned long keyCodeArg, 
                                  in unsigned long charCodeArg, 
                                  in AbstractView viewArg);
};


};

#endif // _EVENTS_IDL_

