/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
*/

/*
 * This var contains the limited keyboard translation tables.
 * This is the table that users can modify to make special keyboard to work properly.
 * They are used by the ajaxviewer.js
 */

//client event type. corresponds to events in ajaxviewer.


//use java AWT key modifier masks
JS_KEY_BACKSPACE = 8;
JS_KEY_TAB = 9;
JS_KEY_ENTER = 13;
JS_KEY_SHIFT = 16;
JS_KEY_CTRL = 17;
JS_KEY_ALT = 18;
JS_KEY_CAPSLOCK = 20;
JS_KEY_ESCAPE = 27;
JS_KEY_PAGEUP = 33;
JS_KEY_PAGEDOWN = 34;
JS_KEY_END = 35;
JS_KEY_HOME = 36;
JS_KEY_LEFT = 37;
JS_KEY_UP = 38;
JS_KEY_RIGHT = 39;
JS_KEY_DOWN = 40;
JS_KEY_INSERT = 45;
JS_KEY_DELETE = 46;
JS_KEY_SELECT_KEY = 93;
JS_KEY_NUMPAD0 = 96;
JS_KEY_NUMPAD1 = 97;
JS_KEY_NUMPAD2 = 98;
JS_KEY_NUMPAD3 = 99;
JS_KEY_NUMPAD4 = 100;
JS_KEY_NUMPAD5 = 101;
JS_KEY_NUMPAD6 = 102;
JS_KEY_NUMPAD7 = 103;
JS_KEY_NUMPAD8 = 104;
JS_KEY_NUMPAD9 = 105;
JS_KEY_MULTIPLY = 106;
JS_KEY_ADD = 107;
JS_KEY_SUBSTRACT = 109;
JS_KEY_DECIMAL_POINT = 110;
JS_KEY_DIVIDE = 111;
JS_KEY_F1 = 112;
JS_KEY_F2 = 113;
JS_KEY_F3 = 114;
JS_KEY_F4 = 115;
JS_KEY_F5 = 116;
JS_KEY_F6 = 117;
JS_KEY_F7 = 118;
JS_KEY_F8 = 119;
JS_KEY_F9 = 120;
JS_KEY_F10 = 121;
JS_KEY_F11 = 122;
JS_KEY_F12 = 123;
JS_KEY_SEMI_COLON = 186;			// ;
JS_KEY_COMMA = 188;				// ,
JS_KEY_DASH = 189;				// -
JS_KEY_PERIOD = 190;				// .
JS_KEY_FORWARD_SLASH = 191;		// /
JS_KEY_GRAVE_ACCENT = 192;		// `
JS_KEY_OPEN_BRACKET = 219;		// [
JS_KEY_BACK_SLASH = 220;			// \
JS_KEY_CLOSE_BRACKET = 221;		// ]
JS_KEY_SINGLE_QUOTE = 222;		// '


//X11 keysym definitions
X11_KEY_CAPSLOCK = 0xffe5;
X11_KEY_BACKSPACE = 0xff08;
X11_KEY_TAB = 0xff09;
X11_KEY_ENTER = 0xff0d;
X11_KEY_ESCAPE = 0xff1b;
X11_KEY_INSERT = 0xff63;
X11_KEY_DELETE = 0xffff;
X11_KEY_HOME = 0xff50;
X11_KEY_END = 0xff57;
X11_KEY_PAGEUP = 0xff55;
X11_KEY_PAGEDOWN = 0xff56;
X11_KEY_LEFT = 0xff51;
X11_KEY_UP = 0xff52;
X11_KEY_RIGHT = 0xff53;
X11_KEY_DOWN = 0xff54;
X11_KEY_F1 = 0xffbe;
X11_KEY_F2 = 0xffbf;
X11_KEY_F3 = 0xffc0;
X11_KEY_F4 = 0xffc1;
X11_KEY_F5 = 0xffc2;
X11_KEY_F6 = 0xffc3;
X11_KEY_F7 = 0xffc4;
X11_KEY_F8 = 0xffc5;
X11_KEY_F9 = 0xffc6;
X11_KEY_F10 = 0xffc7;
X11_KEY_F11 = 0xffc8;
X11_KEY_F12 = 0xffc9;
X11_KEY_SHIFT = 0xffe1;
X11_KEY_CTRL = 0xffe3;
X11_KEY_ALT = 0xffe9;
X11_KEY_GRAVE_ACCENT = 0x60;
X11_KEY_SUBSTRACT = 0x2d;
X11_KEY_ADD = 0x2b;
X11_KEY_OPEN_BRACKET = 0x5b;
X11_KEY_CLOSE_BRACKET = 0x5d;
X11_KEY_BACK_SLASH = 0x7c;
X11_KEY_REVERSE_SOLIUS = 0x5c;			// another back slash (back slash on JP keyboard)
X11_KEY_SINGLE_QUOTE = 0x22;
X11_KEY_COMMA = 0x3c;
X11_KEY_PERIOD = 0x3e;
X11_KEY_FORWARD_SLASH = 0x3f;
X11_KEY_DASH = 0x2d;
X11_KEY_COLON = 0x3a;
X11_KEY_SEMI_COLON = 0x3b;
X11_KEY_NUMPAD0 = 0x30;
X11_KEY_NUMPAD1 = 0x31;
X11_KEY_NUMPAD2 = 0x32;
X11_KEY_NUMPAD3 = 0x33;
X11_KEY_NUMPAD4 = 0x34;
X11_KEY_NUMPAD5 = 0x35;
X11_KEY_NUMPAD6 = 0x36;
X11_KEY_NUMPAD7 = 0x37;
X11_KEY_NUMPAD8 = 0x38;
X11_KEY_NUMPAD9 = 0x39;
X11_KEY_DECIMAL_POINT = 0x2e;
X11_KEY_DIVIDE = 0x3f;
X11_KEY_TILDE = 0x7e;				// ~
X11_KEY_CIRCUMFLEX_ACCENT = 0x5e;	// ^
X11_KEY_YEN_MARK = 0xa5;				// Japanese YEN mark
X11_KEY_ASTERISK = 0x2a;
X11_KEY_KP_0 = 0xFFB0;
X11_KEY_KP_1 = 0xFFB1;
X11_KEY_KP_2 = 0xFFB2;
X11_KEY_KP_3 = 0xFFB3;
X11_KEY_KP_4 = 0xFFB4;
X11_KEY_KP_5 = 0xFFB5;
X11_KEY_KP_6 = 0xFFB6;
X11_KEY_KP_7 = 0xFFB7;
X11_KEY_KP_8 = 0xFFB8;
X11_KEY_KP_9 = 0xFFB9;
X11_KEY_KP_Decimal = 0xFFAE;

KEY_DOWN = 5;
KEY_UP = 6;

KEYBOARD_TYPE_COOKED = "us";
KEYBOARD_TYPE_JP = "jp";
KEYBOARD_TYPE_UK = "uk";

//JP keyboard type

var	keyboardTables = [
           {tindex: 0, keyboardType: KEYBOARD_TYPE_COOKED, mappingTable:
               {X11: [  {keycode: 220, entry: X11_KEY_YEN_MARK},
                        {keycode: 226, entry: X11_KEY_REVERSE_SOLIUS},

                        {keycode: 240, entry: [
                            {type: KEY_DOWN, code: X11_KEY_CAPSLOCK, modifiers: 0 },
                            {type: KEY_UP, code: X11_KEY_CAPSLOCK, modifiers: 0 },
                            ]
                        }
                     ],
                keyPress: [
                        {keycode: 59, entry: [
                                              {type: KEY_DOWN, code: X11_KEY_SEMI_COLON, modifiers: 0 },
                                              {type: KEY_UP, code: X11_KEY_SEMI_COLON, modifiers: 0 },
                                              ]
                        },
                        {keycode: 43, entry: [
                                              {type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
                                              {type: KEY_DOWN, code: X11_KEY_ADD, modifiers: 0, shift: false },
                                              {type: KEY_UP, code: X11_KEY_ADD, modifiers: 0, shift: false },
                                              {type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
                                              {type: KEY_DOWN, code: X11_KEY_ADD, modifiers: 0, shift: true },
                                              {type: KEY_UP, code: X11_KEY_ADD, modifiers: 0, shift: true },
                                              ]
                        }
                        ]
               }
           }, {tindex: 1, keyboardType: KEYBOARD_TYPE_JP, mappingTable:
           // intialize keyboard mapping for RAW keyboard
           {X11: [
                  {keycode: JS_KEY_CAPSLOCK,			entry : X11_KEY_CAPSLOCK},
                  {keycode: JS_KEY_BACKSPACE,			entry : X11_KEY_BACKSPACE},
                  {keycode: JS_KEY_TAB,					entry : X11_KEY_TAB},
                  {keycode: JS_KEY_ENTER,				entry : X11_KEY_ENTER},
                  {keycode: JS_KEY_ESCAPE,				entry : X11_KEY_ESCAPE},
                  {keycode: JS_KEY_INSERT,				entry : X11_KEY_INSERT},
                  {keycode: JS_KEY_DELETE,				entry : X11_KEY_DELETE},
                  {keycode: JS_KEY_HOME,				entry : X11_KEY_HOME},
                  {keycode: JS_KEY_END,					entry : X11_KEY_END},
                  {keycode: JS_KEY_PAGEUP,				entry : X11_KEY_PAGEUP},
                  {keycode: JS_KEY_PAGEDOWN,			entry : X11_KEY_PAGEDOWN},
                  {keycode: JS_KEY_LEFT,				entry : X11_KEY_LEFT},
                  {keycode: JS_KEY_UP,					entry : X11_KEY_UP},
                  {keycode: JS_KEY_RIGHT,				entry : X11_KEY_RIGHT},
                  {keycode: JS_KEY_DOWN,				entry : X11_KEY_DOWN},
                  {keycode: JS_KEY_F1,					entry : X11_KEY_F1},
                  {keycode: JS_KEY_F2,					entry : X11_KEY_F2},
                  {keycode: JS_KEY_F3,					entry : X11_KEY_F3},
                  {keycode: JS_KEY_F4,					entry : X11_KEY_F4},
                  {keycode: JS_KEY_F5,					entry : X11_KEY_F5},
                  {keycode: JS_KEY_F6,					entry : X11_KEY_F6},
                  {keycode: JS_KEY_F7,					entry : X11_KEY_F7},
                  {keycode: JS_KEY_F8,					entry : X11_KEY_F8},
                  {keycode: JS_KEY_F9,					entry : X11_KEY_F9},
                  {keycode: JS_KEY_F10,					entry : X11_KEY_F10},
                  {keycode: JS_KEY_F11,					entry : X11_KEY_F11},
                  {keycode: JS_KEY_F12,					entry : X11_KEY_F12},
                  {keycode: JS_KEY_SHIFT,				entry : X11_KEY_SHIFT},
                  {keycode: JS_KEY_CTRL,				entry : X11_KEY_CTRL},
                  {keycode: JS_KEY_ALT,					entry : X11_KEY_ALT},
                  //{keycode: JS_KEY_GRAVE_ACCENT,		entry : X11_KEY_GRAVE_ACCENT},
                  //[192 / 64 = "' @"]
                  {keycode: 192,	entry : 0x5b,	browser: "IE"},
                  {keycode: 64,		entry : 0x5b, 	browser: "Firefox"},
                  //{keycode: JS_KEY_ADD,					entry : X11_KEY_ADD},
                  //[187 / 59 = "; +"]
                  {keycode: 187,	entry : 0x3a,	browser: "IE"},
                  {keycode: 59,		entry : 0x3b, 	browser: "Firefox"},
                  //{keycode: JS_KEY_OPEN_BRACKET,		entry : X11_KEY_OPEN_BRACKET},
                  //[219 = "[{"]
                  {keycode: 219,	entry : 0x5d,	browser: "IE"},
                  {keycode: 219,	entry : 0x5d, 	browser: "Firefox"},
                  //{keycode: JS_KEY_CLOSE_BRACKET,		entry : X11_KEY_CLOSE_BRACKET},
                  //[221 = "]}"]
                  {keycode: 221,	entry : 0x5c,	browser: "IE"},
                  {keycode: 221,	entry : 0x5c,	browser: "Firefox"},
                  {keycode: JS_KEY_BACK_SLASH,			entry : X11_KEY_BACK_SLASH},
                  //{keycode: JS_KEY_SINGLE_QUOTE,		entry : X11_KEY_SINGLE_QUOTE},
                  //[222 / 160 = "~^"]
                  {keycode: 222,		entry : 0x3d,	browser: "IE"},
                  {keycode: 160,		entry : 0x3d,	browser: "Firefox"},
                  //[173 = "-=" ] specific to Firefox browser
                  {keycode: 173,		entry : 0x2d,	browser: "Firefox"},
                  {keycode: JS_KEY_COMMA,				entry : X11_KEY_COMMA},
                  {keycode: JS_KEY_PERIOD, 				entry : X11_KEY_PERIOD},
                  {keycode: JS_KEY_FORWARD_SLASH,		entry : X11_KEY_FORWARD_SLASH},
                  {keycode: JS_KEY_DASH,				entry : X11_KEY_DASH},
                  {keycode: JS_KEY_SEMI_COLON,			entry : X11_KEY_SEMI_COLON},
                  {keycode: JS_KEY_NUMPAD0,				entry : X11_KEY_KP_0},
                  {keycode: JS_KEY_NUMPAD1,				entry : X11_KEY_KP_1},
                  {keycode: JS_KEY_NUMPAD2,				entry : X11_KEY_KP_2},
                  {keycode: JS_KEY_NUMPAD3,				entry : X11_KEY_KP_3},
                  {keycode: JS_KEY_NUMPAD4,				entry : X11_KEY_KP_4},
                  {keycode: JS_KEY_NUMPAD5,				entry : X11_KEY_KP_5},
                  {keycode: JS_KEY_NUMPAD6,				entry : X11_KEY_KP_6},
                  {keycode: JS_KEY_NUMPAD7,				entry : X11_KEY_KP_7},
                  {keycode: JS_KEY_NUMPAD8,				entry : X11_KEY_KP_8},
                  {keycode: JS_KEY_NUMPAD9,				entry : X11_KEY_KP_9},
                  {keycode: JS_KEY_DECIMAL_POINT,		entry : X11_KEY_KP_Decimal},
                  {keycode: JS_KEY_DIVIDE,				entry : 0xffaf},
                  {keycode: JS_KEY_MULTIPLY,			entry : 0xffaa},
                  {keycode: JS_KEY_ADD,					entry : 0xffab},
                  {keycode: JS_KEY_SUBSTRACT,			entry : 0xffad},
                  //Kanji Key = 243 / 244
                  {keycode: 243,	entry : 0x7e,	browser: "IE"},
                  {keycode: 244,	entry : 0x7e,	browser: "IE"},
                  //Caps Lock = 240
                  {keycode: 240,			entry : 0xffe5},
                  /*
                  {keycode: JS_KEY_MULTIPLY,    entry : [
                                                         {type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0 },
                                                         {type: KEY_DOWN, code: X11_KEY_ASTERISK, modifiers: 0 },
                                                         {type: KEY_UP, code: X11_KEY_ASTERISK, modifiers: 0 },
                                                         {type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0 }
                                                         ]},
                  {keycode: JS_KEY_ADD,         entry : false}
                   */
                  //[186 / 58 = "~^"]
                  {keycode: 186,		entry : 0x22, browser: "IE"},
                  {keycode: 58,		entry : 0x22, browser: "Firefox"},
                  ],
                  keyPress: [
                             {keycode: 61,      entry:  [
                                                         {type: KEY_DOWN, code: X11_KEY_ADD, modifiers: 0, shift: false },
                                                         {type: KEY_UP, code: X11_KEY_ADD, modifiers: 0, shift: false }
                                                         ]},
                                                         ]
           }
           }, {tindex: 2, keyboardType: KEYBOARD_TYPE_UK, mappingTable:
                 {X11: [
                          //[223 = `¬¦]
                          {keycode: 223,		entry : 0x60, 	browser: "IE"},
                          ],
                  keyPress: [
                             //[34 = "]
                          {keycode: 34, entry:
                              [{type : KEY_DOWN, code : 0x40, modifiers : 64, shift : true}]
                          },
                          //[35 = #]
                          {keycode: 35, entry:
                              [{type : KEY_DOWN, code : 0x5c, modifiers : 0, shift : false}]
                          },
                          // [64 = @]
                          {keycode: 64, entry:
                              [{type : KEY_DOWN, code : 0x22, modifiers : 64, shift : true}]
                          },
                          // [92 = \]
                          {keycode: 92, entry:
                              [{type : KEY_DOWN, code : 0xa6, modifiers : 0, shift : false}]
                          },
                          // [124 = |]
                          {keycode: 124, entry:
                              [{type : KEY_DOWN, code : 0xa6, modifiers : 64, shift : true}]
                          },
                          // [126 = ~]
                          {keycode: 126, entry:
                              [{type : KEY_DOWN, code : 0x7c, modifiers : 64, shift : true}]
                          },
                          // [163 = £]
                          {keycode: 163, entry:
                              [{type : KEY_DOWN, code : 0x23, modifiers : 64, shift : true}]
                          },
                          // [172 = ¬]
                          {keycode: 172, entry:
                              [{type : KEY_DOWN, code : 0x7e, modifiers : 64, shift : true}]
                          },
                          // [166 = ¦]
                          {keycode: 166, entry:
                              [{type : KEY_DOWN, code : 0x60, modifiers : 896, shift : false}]
                          }
                          ]
           }
           }]
