
#if defined(ENABLE_CEHTML) && ENABLE_CEHTML

    // Introduced in DOM Level 2:
	[
		DoNotCheckConstants
    ] interface KeyEvent : UIEvent {

        // VirtualKeyCode as of WD-DOM-Level-2-19990923
        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;

// CE-HTML specific key codes that SHALL be used for "keydown" and "keyup"-type events.

        const unsigned long VK_UNDEFINED = 0;
        const unsigned long VK_CANCEL = 3;
        const unsigned long VK_BACK_SPACE = 8;
        const unsigned long VK_TAB = 9;
        const unsigned long VK_CLEAR = 12;
        const unsigned long VK_ENTER = 13;
        const unsigned long VK_SHIFT = 16;
        const unsigned long VK_CONTROL = 17;
        const unsigned long VK_ALT = 18;
        const unsigned long VK_PAUSE = 19;
        const unsigned long VK_CAPS_LOCK = 20;
        const unsigned long VK_KANA = 21;
        const unsigned long VK_FINAL = 24;
        const unsigned long VK_KANJI = 25;
        const unsigned long VK_ESCAPE = 27;
        const unsigned long VK_CONVERT = 28;
        const unsigned long VK_NONCONVERT = 29;
        const unsigned long VK_ACCEPT = 30;
        const unsigned long VK_MODECHANGE = 31;
        const unsigned long VK_SPACE = 32;
        const unsigned long VK_PAGE_UP = 33;
        const unsigned long VK_PAGE_DOWN = 34;
        const unsigned long VK_END = 35;
        const unsigned long VK_HOME = 36;
        const unsigned long VK_LEFT = 37;
        const unsigned long VK_UP = 38;
        const unsigned long VK_RIGHT = 39;
        const unsigned long VK_DOWN = 40;
        const unsigned long VK_COMMA = 44;
        const unsigned long VK_PERIOD = 46;
        const unsigned long VK_SLASH = 47;
        const unsigned long VK_0 = 48;
        const unsigned long VK_1 = 49;
        const unsigned long VK_2 = 50;
        const unsigned long VK_3 = 51;
        const unsigned long VK_4 = 52;
        const unsigned long VK_5 = 53;
        const unsigned long VK_6 = 54;
        const unsigned long VK_7 = 55;
        const unsigned long VK_8 = 56;
        const unsigned long VK_9 = 57;
        const unsigned long VK_SEMICOLON = 59;
        const unsigned long VK_EQUALS = 61;
        const unsigned long VK_A = 65;
        const unsigned long VK_B = 66;
        const unsigned long VK_C = 67;
        const unsigned long VK_D = 68;
        const unsigned long VK_E = 69;
        const unsigned long VK_F = 70;
        const unsigned long VK_G = 71;
        const unsigned long VK_H = 72;
        const unsigned long VK_I = 73;
        const unsigned long VK_J = 74;
        const unsigned long VK_K = 75;
        const unsigned long VK_L = 76;
        const unsigned long VK_M = 77;
        const unsigned long VK_N = 78;
        const unsigned long VK_O = 79;
        const unsigned long VK_P = 80;
        const unsigned long VK_Q = 81;
        const unsigned long VK_R = 82;
        const unsigned long VK_S = 83;
        const unsigned long VK_T = 84;
        const unsigned long VK_U = 85;
        const unsigned long VK_V = 86;
        const unsigned long VK_W = 87;
        const unsigned long VK_X = 88;
        const unsigned long VK_Y = 89;
        const unsigned long VK_Z = 90;
        const unsigned long VK_OPEN_BRACKET = 91;
        const unsigned long VK_BACK_SLASH = 92;
        const unsigned long VK_CLOSE_BRACKET = 93;
        const unsigned long VK_NUMPAD0 = 96;
        const unsigned long VK_NUMPAD1 = 97;
        const unsigned long VK_NUMPAD2 = 98;
        const unsigned long VK_NUMPAD3 = 99;
        const unsigned long VK_NUMPAD4 = 100;
        const unsigned long VK_NUMPAD5 = 101;
        const unsigned long VK_NUMPAD6 = 102;
        const unsigned long VK_NUMPAD7 = 103;
        const unsigned long VK_NUMPAD8 = 104;
        const unsigned long VK_NUMPAD9 = 105;
        const unsigned long VK_MULTIPLY = 106;
        const unsigned long VK_ADD = 107;
        const unsigned long VK_SEPARATER = 108;
        const unsigned long VK_SUBTRACT = 109;
        const unsigned long VK_DECIMAL = 110;
        const unsigned long VK_DIVIDE = 111;
        const unsigned long VK_F1 = 112;
        const unsigned long VK_F2 = 113;
        const unsigned long VK_F3 = 114;
        const unsigned long VK_F4 = 115;
        const unsigned long VK_F5 = 116;
        const unsigned long VK_F6 = 117;
        const unsigned long VK_F7 = 118;
        const unsigned long VK_F8 = 119;
        const unsigned long VK_F9 = 120;
        const unsigned long VK_F10 = 121;
        const unsigned long VK_F11 = 122;
        const unsigned long VK_F12 = 123;
        const unsigned long VK_DELETE = 127;
        const unsigned long VK_NUM_LOCK = 144;
        const unsigned long VK_SCROLL_LOCK = 145;
        const unsigned long VK_PRINTSCREEN = 154;
        const unsigned long VK_INSERT = 155;
        const unsigned long VK_HELP = 156;
        const unsigned long VK_META = 157;
        const unsigned long VK_BACK_QUOTE = 192;
        const unsigned long VK_QUOTE = 222;
        const unsigned long VK_RED = 403;
        const unsigned long VK_GREEN = 404;
        const unsigned long VK_YELLOW = 405;
        const unsigned long VK_BLUE = 406;
        const unsigned long VK_GREY = 407;
        const unsigned long VK_BROWN = 408;
        const unsigned long VK_POWER = 409;
        const unsigned long VK_DIMMER = 410;
        const unsigned long VK_WINK = 411;
        const unsigned long VK_REWIND = 412;
        const unsigned long VK_STOP = 413;
        const unsigned long VK_EJECT_TOGGLE = 414;
        const unsigned long VK_PLAY = 415;
        const unsigned long VK_RECORD = 416;
        const unsigned long VK_FAST_FWD = 417;
        const unsigned long VK_PLAY_SPEED_UP = 418;
        const unsigned long VK_PLAY_SPEED_DOWN = 419;
        const unsigned long VK_PLAY_SPEED_RESET = 420;
        const unsigned long VK_RECORD_SPEED_NEXT = 421;
        const unsigned long VK_GO_TO_START = 422;
        const unsigned long VK_GO_TO_END = 423;
        const unsigned long VK_TRACK_PREV = 424;
        const unsigned long VK_TRACK_NEXT = 425;
        const unsigned long VK_RANDOM_TOGGLE = 426;
        const unsigned long VK_CHANNEL_UP = 427;
        const unsigned long VK_CHANNEL_DOWN = 428;
        const unsigned long VK_STORE_FAVORITE_0 = 429;
        const unsigned long VK_STORE_FAVORITE_1 = 430;
        const unsigned long VK_STORE_FAVORITE_2 = 431;
        const unsigned long VK_STORE_FAVORITE_3 = 432;
        const unsigned long VK_RECALL_FAVORITE_0 = 433;
        const unsigned long VK_RECALL_FAVORITE_1 = 434;
        const unsigned long VK_RECALL_FAVORITE_2 = 435;
        const unsigned long VK_RECALL_FAVORITE_3 = 436;
        const unsigned long VK_CLEAR_FAVORITE_0 = 437;
        const unsigned long VK_CLEAR_FAVORITE_1 = 438;
        const unsigned long VK_CLEAR_FAVORITE_2 = 439;
        const unsigned long VK_CLEAR_FAVORITE_3 = 440;
        const unsigned long VK_SCAN_CHANNELS_TOGGLE = 441;
        const unsigned long VK_PINP_TOGGLE = 442;
        const unsigned long VK_SPLIT_SCREEN_TOGGLE = 443;
        const unsigned long VK_DISPLAY_SWAP = 444;
        const unsigned long VK_SCREEN_MODE_NEXT = 445;
        const unsigned long VK_VIDEO_MODE_NEXT = 446;
        const unsigned long VK_VOLUME_UP = 447;
        const unsigned long VK_VOLUME_DOWN = 448;
        const unsigned long VK_MUTE = 449;
        const unsigned long VK_SURROUND_MODE_NEXT = 450;
        const unsigned long VK_BALANCE_RIGHT = 451;
        const unsigned long VK_BALANCE_LEFT = 452;
        const unsigned long VK_FADER_FRONT = 453;
        const unsigned long VK_FADER_REAR = 454;
        const unsigned long VK_BASS_BOOST_UP = 455;
        const unsigned long VK_BASS_BOOST_DOWN = 456;
        const unsigned long VK_INFO = 457;
        const unsigned long VK_GUIDE = 458;
        const unsigned long VK_TELETEXT = 459;
        const unsigned long VK_SUBTITLE = 460;
        const unsigned long VK_BACK = 461;
        const unsigned long VK_MENU = 462;

        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 optional DOMString typeArg, 
                          in optional boolean canBubbleArg = false, 
                          in optional boolean cancelableArg = false, 
                          in optional boolean ctrlKeyArg = false, 
                          in optional boolean altKeyArg = false, 
                          in optional boolean shiftKeyArg = false, 
                          in optional boolean metaKeyArg = false, 
                          in optional unsigned long keyCodeArg, 
                          in optional unsigned long charCodeArg, 
                          in optional DOMWindow? viewArg);
    };


#endif // defined(ENABLE_CEHTML) && ENABLE_CEHTML
