»
AnglaisFrançaisVietnamien

Imprimer - JavaScript Virtual Keyboard Interface avec de nombreuses langues - JavaScriptBank.com

Version complète: jsB@nk » Utilitaire » JavaScript Virtual Keyboard Interface avec de nombreuses langues
URL: https://www.javascriptbank.com/javascript-virtual-keyboard-interface-with-many-languages.html

JavaScript Virtual Keyboard Interface avec de nombreuses langues © JavaScriptBank.comCet exemple de code JavaScript est un script r?utilisable cool d'ajouter une interface graphique du clavier virtuel pour les champs de texte, les champs de mot de passe, et les zones de texte de sorte qu'ils peuvent ?tre remplis avec la souris uniquement pour les questions de s?curit? mieux
l'entr?e au clavier JavaScript script prend en charge ?galement de saisir des caract?res sp?ciaux facilement D'ailleurs, ce script est livr? avec clavier complet pour l'arabe, belges, n?erlandais, Dvorak, fran?ais, allemand, grec, h?breu, hongrois, italien, lituanien, norv?gien, Number Pad, le polonais de programmation, portugais, russe, slov?ne, espagnol (Espagne), Ajouter dispositions suppl?mentaires est simple Facilement mis en ?uvre sur n'importe quel site Web
clavier virtuelle JavaScript scripts d'interface sur ACC @ nk:
Virtual Keyboard
? Virtual Keyboard outil
? Clavier de l'utilisateur r?el

Version complète: jsB@nk » Utilitaire » JavaScript Virtual Keyboard Interface avec de nombreuses langues
URL: https://www.javascriptbank.com/javascript-virtual-keyboard-interface-with-many-languages.html



CSS
<style type="text/css">#keyboardInputMaster {  position:absolute;  border:2px groove #dddddd;  color:#000000;  background-color:#dddddd;  text-align:left;  z-index:1000000;  width:auto;}#keyboardInputMaster thead tr th {  text-align:left;  padding:2px 5px 2px 4px;  background-color:inherit;  border:0px none;}#keyboardInputMaster thead tr th select,#keyboardInputMaster thead tr th label {  color:#000000;  font:normal 11px Arial,sans-serif;}#keyboardInputMaster thead tr td {  text-align:right;  padding:2px 4px 2px 5px;  background-color:inherit;  border:0px none;}#keyboardInputMaster thead tr td span {  padding:1px 4px;  font:bold 11px Arial,sans-serif;  border:1px outset #aaaaaa;  background-color:#cccccc;  cursor:pointer;}#keyboardInputMaster thead tr td span.pressed {  border:1px inset #999999;  background-color:#bbbbbb;}#keyboardInputMaster tbody tr td {  text-align:left;  margin:0px;  padding:0px 4px 3px 4px;}#keyboardInputMaster tbody tr td div {  text-align:center;  position:relative;  height:0px;}#keyboardInputMaster tbody tr td div#keyboardInputLayout {  height:auto;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table {  height:20px;  white-space:nowrap;  width:100%;  border-collapse:separate;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table.keyboardInputCenter {  width:auto;  margin:0px auto;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td {  vertical-align:middle;  padding:0px 5px 0px 5px;  white-space:pre;  font:normal 11px 'Lucida Console',monospace;  border-top:1px solid #e5e5e5;  border-right:1px solid #5d5d5d;  border-bottom:1px solid #5d5d5d;  border-left:1px solid #e5e5e5;  background-color:#eeeeee;  cursor:default;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.last {  width:99%;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.alive {  background-color:#ccccdd;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.target {  background-color:#ddddcc;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.hover {  border-top:1px solid #d5d5d5;  border-right:1px solid #555555;  border-bottom:1px solid #555555;  border-left:1px solid #d5d5d5;  background-color:#cccccc;}#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.pressed,#keyboardInputMaster tbody tr td div#keyboardInputLayout table tbody tr td.dead {  border-top:1px solid #555555;  border-right:1px solid #d5d5d5;  border-bottom:1px solid #d5d5d5;  border-left:1px solid #555555;  background-color:#cccccc;}#keyboardInputMaster tbody tr td div var {  position:absolute;  bottom:0px;  right:0px;  font:bold italic 11px Arial,sans-serif;  color:#444444;}.keyboardInputInitiator {  margin-left:3px;  vertical-align:middle;  cursor:pointer;}</style>


JavaScript
<script type="text/javascript">// Created by: GreyWyvern | http://www.greywyvern.com// Licensed under: BSDL: http://www.opensource.org/licenses/bsd-license.php// This script downloaded from www.JavaScriptBank.com/* ******************************************************************** ********************************************************************** * HTML Virtual Keyboard Interface Script - v1.10 *   Copyright (c) 2008 - GreyWyvern * *  - Licenced for free distribution under the BSDL *          http://www.opensource.org/licenses/bsd-license.php * * Add a script-driven keyboard interface to text fields, password * fields and textareas. * * See http://www.greywyvern.com/code/js/keyboard.html for examples and * usage instructions. * * Version 1.10 - April 14, 2008 *   - Slovenian keyboard layout added by Miran Zeljko * * Version 1.9 - April 3, 2008 *   - Hungarian keyboard layout added by Antal Sall 'Hiromacu' * * Version 1.8 - March 31, 2008 *   - Performance tweaks * * Version 1.7 - March 27, 2008 *   - Arabic keyboard layout added by Srinivas Reddy * * Version 1.6 - January 16, 2008 *   - Hebrew keyboard layout added by Enon Avital * * Version 1.5 - January 7, 2008 *   - Italian and Spanish (Spain) keyboard layouts added by dictionarist.com * * Version 1.4a - October 15, 2007 *   - Keyboard is fully removed from document when hidden * * Version 1.4 - August 1, 2007 *   - Simplified layout syntax a bit *   - Added version number to lower right of interface *   - Various other small bug fixes * * Version 1.3 - July 30, 2007 *   - Interaction styling changes (Alt, AltGr, Shift) *   - Justified keys - last key expands to fit width *   - If no dead keys in layout, dead key checkbox is hidden *   - Option to disable dead keys per keyboard *   - Added the Number Pad layout *   - Pulled all variations of script up to same version number * * Keyboard Credits *   - Slovenian keyboard layout added by Miran Zeljko *   - Hungarian keyboard layout added by Antal Sall 'Hiromacu' *   - Arabic keyboard layout added by Srinivas Reddy *   - Italian and Spanish (Spain) keyboard layouts added by dictionarist.com *   - Lithuanian and Russian keyboard layouts added by Ramunas *   - German keyboard layout added by QuHno *   - French keyboard layout added by Hidden Evil *   - Polish Programmers layout assisted by moose *   - Turkish keyboard layouts added by offcu *   - Dutch and US Int'l keyboard layouts assisted by jerone *   - Portuguese keyboard layout added by clisboa * */function VKI_buildKeyboardInputs() {  var self = this;  this.VKI_version = "1.10";  this.VKI_target = this.VKI_visible = "";  this.VKI_shift = this.VKI_capslock = this.VKI_alternate = this.VKI_dead = false;  this.VKI_deadkeysOn = false;  this.VKI_kt = "US";  // Default keyboard layout  this.VKI_range = false;  this.VKI_keyCenter = 3;  /* ***** Create keyboards **************************************** */  this.VKI_layout = new Object();  this.VKI_layoutDDK = new Object();  // - Lay out each keyboard in rows of sub-arrays.  Each sub-array  //   represents one key.  //   // - Each sub-array consists of four slots described as follows:  //     example: ["a", "A", "\u00e1", "\u00c1"]  //  //          a) Normal character  //          A) Character + Shift or Caps  //     \u00e1) Character + Alt or AltGr  //     \u00c1) Character + Shift or Caps + Alt or AltGr  //  //   You may include sub-arrays which are fewer than four slots.  In  //   these cases, the missing slots will be blanked when the  //   corresponding modifier key (Shift or AltGr) is pressed.  //  // - If the second slot of a sub-array matches one of the following  //   strings:  //       "Tab", "Caps", "Shift", "Enter", "Bksp", "Alt" OR "AltGr"  //   then the function of the key will be the following,  //   respectively:  //     - Insert a tab  //     - Toggle Caps Lock (technically a Shift Lock)  //     - Next entered character will be the shifted character  //     - Insert a newline (textarea), or close the keyboard  //     - Delete the previous character  //     - Next entered character will be the alternate character  //  //   The first slot of this sub-array will be the text to display on  //   the corresponding key.  This allows for easy localisation of key  //   names.  //  // - Layout dead keys (diacritic + letter) should be added as arrays  //   of two item arrays with hash keys equal to the diacritic.  See  //   the "this.VKI_deadkey" object below the layout definitions. In  //   each two item child array, the second item is what the diacritic  //   would change the first item to.  //  // - To disable dead keys for a layout, simply assign true to the  //   this.VKI_layoutDDK (DDK = disable dead keys) object of the same  //   name as the layout.  See the Numpad layout below for an example.  //  // - Note that any characters beyond the normal ASCII set should be  //   entered in escaped Unicode format.  (eg \u00a3 = Pound symbol)  //   You can find Unicode values for characters here:  //     http://unicode.org/charts/  //  // - To remove a keyboard, just delete it, or comment it out of the  //   source code  this.VKI_layout.Arabic = [ // Arabic Keyboard    [["\u0630", "\u0651 "], ["1", "!", "\u00a1", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a4", "\u00a3"], ["5", "%", "\u20ac"], ["6", "^", "\u00bc"], ["7", "&", "\u00bd"], ["8", "*", "\u00be"], ["9", "(", "\u2018"], ["0", ")", "\u2019"], ["-", "_", "\u00a5"], ["=", "+", "\u00d7", "\u00f7"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["\u0636", "\u064e"], ["\u0635", "\u064b"], ["\u062b", "\u064f"], ["\u0642", "\u064c"], ["\u0641", "\u0644"], ["\u063a", "\u0625"], ["\u0639", "\u2018"], ["\u0647", "\u00f7"], ["\u062e", "\u00d7"], ["\u062d", "\u061b"], ["\u062c", "\u003c"], ["\u062f", "\u003e"], ["\u005c", "\u007c"]],    [["Caps", "Caps"], ["\u0634", "\u0650"], ["\u0633", "\u064d"], ["\u064a", "\u005d"], ["\u0628", "\u005b"], ["\u0644", "\u0644"], ["\u0627", "\u0623"], ["\u062a", "\u0640"], ["\u0646", "\u060c"], ["\u0645", "\u002f"], ["\u0643", "\u003a"], ["\u0637", "\u0022"], ["Enter", "Enter"]],    [["Shift", "Shift"], ["\u0626", "\u007e"], ["\u0621", "\u0652"], ["\u0624", "\u007d"], ["\u0631", "\u007b"], ["\u0644", "\u0644"], ["\u0649", "\u0622"], ["\u0629", "\u2019"], ["\u0648", "\u002c"], ["\u0632", "\u002e"], ["\u0638", "\u061f"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["Alt", "Alt"]]  ];  this.VKI_layout.Belgian = [ // Belgian Standard Keyboard    [["\u00b2", "\u00b3"], ["&", "1", "|"], ["\u00e9", "2", "@"], ['"', "3", "#"], ["'", "4"], ["(", "5"], ["\u00a7", "6", "^"], ["\u00e8", "7"], ["!", "8"], ["\u00e7", "9", "{"], ["\u00e0", "0", "}"], [")", "\u00b0"], ["-", "_"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["a", "A"], ["z", "Z"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u005e", "\u00a8", "["], ["$", "*", "]"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["q", "Q"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["m", "M"], ["\u00f9", "%", "\u00b4"], ["\u03bc", "\u00a3", "`"]],    [["Shift", "Shift"], ["<", ">", "\\"], ["w", "W"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], [",", "?"], [";", "."], [":", "/"], ["=", "+", "~"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Dutch = [ // Dutch Standard Keyboard    [["@", "\u00a7", "\u00ac"], ["1", "!", "\u00b9"], ["2", '"', "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00bc"], ["5", "%", "\u00bd"], ["6", "&", "\u00be"], ["7", "_", "\u00a3"], ["8", "(", "{"], ["9", ")", "}"], ["0", "'"], ["/", "?", "\\"], ["\u00b0", "~", "\u00b8"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R", "\u00b6"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00a8", "^"], ["*", "|"], ["<", ">"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S", "\u00df"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["+", "\u00b1"], ["\u00b4", "\u0060"], ["Enter", "Enter"]],    [["Shift", "Shift"], ["]", "[", "\u00a6"], ["z", "Z", "\u00ab"], ["x", "X", "\u00bb"], ["c", "C", "\u00a2"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u00b5"], [",", ";"], [".", ":", "\u00b7"], ["-", "="], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Dvorak = [ // Dvorak Keyboard    [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["[", "{"], ["]", "}"], ["Bksp", "Bksp"]],    [["Tab", "Tab"],["'", '"'], [",", "<"], [".", ">"], ["p", "P"], ["y", "Y"], ["f", "F"], ["g", "G"], ["c", "C"], ["r", "R"], ["l", "L"], ["/", "?"], ["=", "+"], ["\\", "|"]],    [["Caps", "Caps"], ["a", "A"], ["o", "O"], ["e", "E"], ["u", "U"], ["i", "I"], ["d", "D"], ["h", "H"], ["t", "T"], ["n", "N"], ["s", "S"], ["-", "_"], ["Enter", "Enter"]],    [["Shift", "Shift"], [";", ":"], ["q", "Q"], ["j", "J"], ["k", "K"], ["x", "X"], ["b", "B"], ["m", "M"], ["w", "W"], ["v", "V"], ["z", "Z"], ["Shift", "Shift"]],    [[" ", " "]]  ];  this.VKI_layout.French = [ // French Standard Keyboard    [["\u00b2", "\u00b3"], ["&", "1"], ["\u00e9", "2", "~"], ['"', "3", "#"], ["'", "4", "{"], ["(", "5", "["], ["-", "6", "|"], ["\u00e8", "7", "\u0060"], ["_", "8", "\\"], ["\u00e7", "9", "\u005e"], ["\u00e0", "0", "\u0040"], [")", "\u00b0", "]"], ["=", "+", "}"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["a", "A"], ["z", "Z"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["^", "\u00a8"], ["$", "\u00a3", "\u00a4"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["q", "Q"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["m", "M"], ["\u00f9", "%"], ["*", "\u03bc"]],    [["Shift", "Shift"], ["<", ">"], ["w", "W"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], [",", "?"], [";", "."], [":", "/"], ["!", "\u00a7"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.German = [ // German Standard Keyboard    [["\u005e", "\u00b0"], ["1", "!"], ["2", '"', "\u00b2"], ["3", "\u00a7", "\u00b3"], ["4", "$"], ["5", "%"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["\u00df", "?", "\\"], ["\u00b4", "\u0060"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q", "\u0040"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00fc", "\u00dc"], ["+", "*", "~"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f6", "\u00d6"], ["\u00e4", "\u00c4"], ["#", "'"]],    [["Shift", "Shift"], ["<", ">", "\u00a6"], ["y", "Y"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u00b5"], [",", ";"], [".", ":"], ["-", "_"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Greek = [ // Greek Standard Keyboard    [["`", "~"], ["1", "!"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a3"], ["5", "%", "\u00a7"], ["6", "^", "\u00b6"], ["7", "&"], ["8", "*", "\u00a4"], ["9", "(", "\u00a6"], ["0", ")", "\u00ba"], ["-", "_", "\u00b1"], ["=", "+", "\u00bd"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], [";", ":"], ["\u03c2", "^"], ["\u03b5", "\u0395"], ["\u03c1", "\u03a1"], ["\u03c4", "\u03a4"], ["\u03c5", "\u03a5"], ["\u03b8", "\u0398"], ["\u03b9", "\u0399"], ["\u03bf", "\u039f"], ["\u03c0", "\u03a0"], ["[", "{", "\u201c"], ["]", "}", "\u201d"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["\u03b1", "\u0391"], ["\u03c3", "\u03a3"], ["\u03b4", "\u0394"], ["\u03c6", "\u03a6"], ["\u03b3", "\u0393"], ["\u03b7", "\u0397"], ["\u03be", "\u039e"], ["\u03ba", "\u039a"], ["\u03bb", "\u039b"], ["\u0384", "\u00a8", "\u0385"], ["'", '"'], ["\\", "|", "\u00ac"]],    [["Shift", "Shift"], ["<", ">"], ["\u03b6", "\u0396"], ["\u03c7", "\u03a7"], ["\u03c8", "\u03a8"], ["\u03c9", "\u03a9"], ["\u03b2", "\u0392"], ["\u03bd", "\u039d"], ["\u03bc", "\u039c"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Hebrew = [ // Hebrew Standard Keyboard    [["~", "`"], ["1", "!"], ["2", "@"], ["3", "#"], ["4" , "$", "\u20aa"], ["5" , "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", ")"], ["0", "("], ["-", "_"], ["=", "+"], ["\\", "|"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["/", "Q"], ["'", "W"], ["\u05e7", "E", "\u20ac"], ["\u05e8", "R"], ["\u05d0", "T"], ["\u05d8", "Y"], ["\u05d5", "U", "\u05f0"], ["\u05df", "I"], ["\u05dd", "O"], ["\u05e4", "P"], ["]", "}"], ["[", "{"]],    [["Caps", "Caps"], ["\u05e9", "A"], ["\u05d3", "S"], ["\u05d2", "D"], ["\u05db", "F"], ["\u05e2", "G"], ["\u05d9", "H", "\u05f2"], ["\u05d7", "J", "\u05f1"], ["\u05dc", "K"], ["\u05da", "L"], ["\u05e3", ":"], ["," , '"'], ["Enter", "Enter"]],    [["Shift", "Shift"], ["\u05d6", "Z"], ["\u05e1", "X"], ["\u05d1", "C"], ["\u05d4", "V"], ["\u05e0", "B"], ["\u05de", "N"], ["\u05e6", "M"], ["\u05ea", ">"], ["\u05e5", "<"], [".", "?"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Hungarian = [ // Hungarian Standard Keyboard    [["0", "\u00a7"], ["1", "'", "\u007e"], ["2", '"', "\u02c7"], ["3", "+", "\u02c6"], ["4", "!", "\u02d8"], ["5", "%", "\u00b0"], ["6", "/", "\u02db"], ["7", "=", "\u0060"], ["8", "(", "\u02d9"], ["9", ")", "\u00b4"], ["\u00f6", "\u00d6", "\u02dd"], ["\u00fc", "\u00dc", "\u00a8"], ["\u00f3", "\u00d3", "\u00b8"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q", "\u005c"], ["w", "W", "\u007c"], ["e", "E", "\u00c4"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U", "\u20ac"], ["i", "I", "\u00cd"], ["o", "O"], ["p", "P"], ["\u0151", "\u0150", "\u00f7"], ["\u00fa", "\u00da", "\u00d7"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A", "\u00e4"], ["s", "S","\u0111"], ["d", "D","\u0110"], ["f", "F","\u005b"], ["g", "G","\u005d"], ["h", "H"], ["j", "J","\u00ed"], ["k", "K","\u0141"], ["l", "L","\u0142"], ["\u00e9", "\u00c9","\u0024"], ["\u00e1", "\u00c1","\u00df"], ["\u0171", "\u0170","\u00a4"]],    [["Shift", "Shift"], ["\u00ed", "\u00cd","\u003c"], ["y", "Y","\u003e"], ["x", "X","\u0023"], ["c", "C","\u0026"], ["v", "V","\u0040"], ["b", "B","\u007b"], ["n", "N","\u007d"], ["m", "M","\u003c"], [",", "?","\u003b"], [".", ":","\u003e"], ["-", "_","\u002a"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Italian = [ // Italian Standard Keyboard    [["\u005c", "\u007c"], ["1", "!"], ["2", '"'], ["3", "\u00a3"], ["4", "$", "\u20ac"], ["5", "%"], ["6", "&"], ["7", "/"], ["8", "("], ["9", ")"], ["0", "="], ["'", "?"], ["\u00ec", "\u005e"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e8", "\u00e9", "[", "{"], ["+", "*", "]", "}"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f2", "\u00e7", "@"], ["\u00e0", "\u00b0", "#"], ["\u00f9", "\u00a7"]],    [["Shift", "Shift"], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";"], [".", ":"], ["-", "_"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];    this.VKI_layout.Lithuanian = [ // Lithuanian Standard Keyboard    [["`", "~"], ["\u0105", "\u0104"], ["\u010D", "\u010C"], ["\u0119", "\u0118"], ["\u0117", "\u0116"], ["\u012F", "\u012E"], ["\u0161", "\u0160"], ["\u0173", "\u0172"], ["\u016B", "\u016A"], ["\u201E", "("], ["\u201C", ")"], ["-", "_"], ["\u017E", "\u017D"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["[", "{"], ["]", "}"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", '"'], ["\\", "|"]],    [["Shift", "Shift"], ["\u2013", "\u20AC"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " "]]  ];  this.VKI_layout.Norwegian = [ // Norwegian Standard Keyboard    [["|", "\u00a7"], ["1", "!"], ["2", '"', "@"], ["3", "#", "\u00a3"], ["4", "\u00a4", "$"], ["5", "%"], ["6", "&"], ["7", "/", "{"], ["8", "(", "["], ["9", ")", "]"], ["0", "=", "}"], ["+", "?"], ["\\", "`", "\u00b4"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u00e5", "\u00c5"], ["\u00a8", "^", "~"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f8", "\u00d8"], ["\u00e6", "\u00c6"], ["'", "*"]],    [["Shift", "Shift"], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M", "\u03bc", "\u039c"], [",", ";"], [".", ":"], ["-", "_"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Numpad = [ // Number pad    [["$"], ["\u00a3"], ["\u20ac"], ["\u00a5"], ["/"], ["^"], ["Bksp", "Bksp"]],    [["."], ["7"], ["8"], ["9"], ["*"], ["<"], ["("], ["["]],    [["="], ["4"], ["5"], ["6"], ["-"], [">"], [")"], ["]"]],    [["0"], ["1"], ["2"], ["3"], ["+"], ["Enter", "Enter"]],    [[" "]]  ];  this.VKI_layoutDDK.Numpad = true;  this.VKI_layout["Polish Prog"] = [ // Polish Programmers Keyboard    [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u0119", "\u0118"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P"], ["[", "{"], ["]", "}"], ["\\", "|"]],    [["Caps", "Caps"], ["a", "A", "\u0105", "\u0104"], ["s", "S", "\u015b", "\u015a"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L", "\u0142", "\u0141"], [";", ":"], ["'", '"'], ["Enter", "Enter"]],    [["Shift", "Shift"], ["z", "Z", "\u017c", "\u017b"], ["x", "X", "\u017a", "\u0179"], ["c", "C", "\u0107", "\u0106"], ["v", "V"], ["b", "B"], ["n", "N", "\u0144", "\u0143"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["Alt", "Alt"]]  ];  this.VKI_layout.Portuguese = [ // Portuguese Standard Keyboard    [["`", "\u00ac", "\u00a6"], ["1", "!"], ["2", '"'], ["3", "\u00a3"], ["4", "$", "\u20ac"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u00e9", "\u00c9"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U", "\u00fa", "\u00da"], ["i", "I", "\u00ed", "\u00cd"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P"], ["[", "{"], ["]", "}"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A", "\u00e1", "\u00c1"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00e7", "\u00c7"], [";", ":"], ["'", "@"], ["#", "~"]],    [["Shift", "Shift"], ["\\", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.Russian = [ // Russian Standard Keyboard    [["\u0451", "\u0401"], ["1", "!"], ["2", '"'], ["3", "\u2116"], ["4", ";"], ["5", "%"], ["6", ":"], ["7", "?"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["\u0439", "\u0419"], ["\u0446", "\u0426"], ["\u0443", "\u0423"], ["\u043A", "\u041A"], ["\u0435", "\u0415"], ["\u043D", "\u041D"], ["\u0433", "\u0413"], ["\u0448", "\u0428"], ["\u0449", "\u0429"], ["\u0437", "\u0417"], ["\u0445", "\u0425"], ["\u044A", "\u042A"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["\u0444", "\u0424"], ["\u044B", "\u042B"], ["\u0432", "\u0412"], ["\u0430", "\u0410"], ["\u043F", "\u041F"], ["\u0440", "\u0420"], ["\u043E", "\u041E"], ["\u043B", "\u041B"], ["\u0434", "\u0414"], ["\u0436", "\u0416"], ["\u044D", "\u042D"], ["\\", "/"]],    [["Shift", "Shift"], ["/", "|"], ["\u044F", "\u042F"], ["\u0447", "\u0427"], ["\u0441", "\u0421"], ["\u043C", "\u041C"], ["\u0438", "\u0418"], ["\u0442", "\u0422"], ["\u044C", "\u042C"], ["\u0431", "\u0411"], ["\u044E", "\u042E"], [".", ","], ["Shift", "Shift"]],    [[" ", " "]]  ];  this.VKI_layout.Slovenian = [ // Slovenian Standard Keyboard    [["\u00a8", "\u00a8", "\u00b8"], ["1", "!", "~"], ["2", '"', "\u02c7"], ["3", "#", "^"], ["4", "$", "\u02d8"], ["5", "%", "\u00b0"], ["6", "&", "\u02db"], ["7", "/", "\u0060"], ["8", "(", "\u00B7"], ["9", ")", "\u00b4"], ["0", "=", "\u2033"], ["'", "?", "\u00a8"], ["+", "*", "\u00b8"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q", "\\"], ["w", "W","|"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["z", "Z"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u0161", "\u0160", "\u00f7"], ["\u0111", "\u0110", "\u00d7"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F", "["], ["g", "G", "]"], ["h", "H"], ["j", "J"], ["k", "K", "\u0142"], ["l", "L", "\u0141"], ["\u010D", "\u010C"], ["\u0107", "\u0106", "\u00df"], ["\u017E", "\u017D", "\u00a4"]],    [["Shift", "Shift"], ["<", ">"], ["y", "Y"], ["x", "X"], ["c", "C"], ["v", "V", "@"], ["b", "B", "{",], ["n", "N", "}"], ["m", "M", "\u00a7"], [",", ";"], [".", ":"], ["-", "_"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout["Spanish-SP"] = [ // Spanish (Spain) Standard Keyboard    [["\u00ba", "\u00aa", "\\"], ["1", "!", "|"], ["2", '"', "@"], ["3", "'", "#"], ["4", "$", "~"], ["5", "%", "\u20ac"], ["6", "&","\u00ac"], ["7", "/"], ["8", "("], ["9", ")"], ["0", "="], ["'", "?"], ["\u00a1", "\u00bf"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["\u0060", "^", "["], ["\u002b", "\u002a", "]"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u00f1", "\u00d1"], ["\u00b4", "\u00a8", "{"], ["\u00e7", "\u00c7", "}"]],    [["Shift", "Shift"], ["<", ">"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", ";"], [".", ":"], ["-", "_"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout["Turkish-F"] = [ // Turkish F Keyboard Layout    [['+', "*", "\u00ac"], ["1", "!", "\u00b9", "\u00a1"], ["2", '"', "\u00b2"], ["3", "^", "#", "\u00b3"], ["4", "$", "\u00bc", "\u00a4"], ["5", "%", "\u00bd"], ["6", "&", "\u00be"], ["7", "'", "{"], ["8", "(", '['], ["9", ")", ']'], ["0", "=", "}"], ["/", "?", "\\", "\u00bf"], ["-", "_", "|"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["f", "F", "@"], ["g", "G"], ["\u011f", "\u011e"], ["\u0131", "\u0049", "\u00b6", "\u00ae"], ["o", "O"], ["d", "D", "\u00a5"], ["r", "R"], ["n", "N"], ["h", "H", "\u00f8", "\u00d8"], ["p", "P", "\u00a3"], ["q", "Q", "\u00a8"], ["w", "W", "~"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["u", "U", "\u00e6", "\u00c6"], ["i", "\u0130", "\u00df", "\u00a7"], ["e", "E", "\u20ac"], ["a", "A", " ", "\u00aa"], ["\u00fc", "\u00dc"], ["t", "T"], ["k", "K"], ["m", "M"], ["l", "L"], ["y", "Y", "\u00b4"], ["\u015f", "\u015e"], ["x", "X", "`"]],    [["Shift", "Shift"], ["<", ">", "|", "\u00a6"], ["j", "J", "\u00ab", "<"], ["\u00f6", "\u00d6", "\u00bb", ">"], ["v", "V", "\u00a2", "\u00a9"], ["c", "C"], ["\u00e7", "\u00c7"], ["z", "Z"], ["s", "S", "\u00b5", "\u00ba"], ["b", "B", "\u00d7"], [".", ":", "\u00f7"], [",", ";", "-"], ["Shift", "Shift"]],    [[" ", " ", " ", " "],  ["AltGr", "AltGr"]]  ];  this.VKI_layout["Turkish-Q"] = [ // Turkish Q Keyboard Layout    [['"', "\u00e9", "<"], ["1", "!", ">"], ["2", "'", "\u00a3"], ["3", "^", "#"], ["4", "+", "$"], ["5", "%", "\u00bd"], ["6", "&"], ["7", "/", "{"], ["8", "(", '['], ["9", ")", ']'], ["0", "=", "}"], ["*", "?", "\\"], ["-", "_", "|"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q", "@"], ["w", "W"], ["e", "E", "\u20ac"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["\u0131", "\u0049", "\u0069", "\u0130"], ["o", "O"], ["p", "P"], ["\u011f", "\u011e", "\u00a8"], ["\u00fc", "\u00dc", "~"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A", "\u00e6", "\u00c6"], ["s", "S", "\u00df"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], ["\u015f", "\u015e", "\u00b4"], ["\u0069", "\u0130"], [",", ";", "`"]],    [["Shift", "Shift"], ["<", ">", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], ["\u00f6", "\u00d6"], ["\u00e7", "\u00c7"], [".", ":"], ["Shift", "Shift"]],    [[" ", " ", " ", " "],  ["AltGr", "AltGr"]]  ];  this.VKI_layout.UK = [ // UK Standard Keyboard    [["`", "\u00ac", "\u00a6"], ["1", "!"], ["2", '"'], ["3", "\u00a3"], ["4", "$", "\u20ac"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E", "\u00e9", "\u00c9"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U", "\u00fa", "\u00da"], ["i", "I", "\u00ed", "\u00cd"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P"], ["[", "{"], ["]", "}"], ["Enter", "Enter"]],    [["Caps", "Caps"], ["a", "A", "\u00e1", "\u00c1"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", "@"], ["#", "~"]],    [["Shift", "Shift"], ["\\", "|"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["AltGr", "AltGr"]]  ];  this.VKI_layout.US = [ // US Standard Keyboard    [["`", "~"], ["1", "!"], ["2", "@"], ["3", "#"], ["4", "$"], ["5", "%"], ["6", "^"], ["7", "&"], ["8", "*"], ["9", "("], ["0", ")"], ["-", "_"], ["=", "+"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q"], ["w", "W"], ["e", "E"], ["r", "R"], ["t", "T"], ["y", "Y"], ["u", "U"], ["i", "I"], ["o", "O"], ["p", "P"], ["[", "{"], ["]", "}"], ["\\", "|"]],    [["Caps", "Caps"], ["a", "A"], ["s", "S"], ["d", "D"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L"], [";", ":"], ["'", '"'], ["Enter", "Enter"]],    [["Shift", "Shift"], ["z", "Z"], ["x", "X"], ["c", "C"], ["v", "V"], ["b", "B"], ["n", "N"], ["m", "M"], [",", "<"], [".", ">"], ["/", "?"], ["Shift", "Shift"]],    [[" ", " "]]  ];  this.VKI_layout["US Int'l"] = [ // US International Keyboard    [["`", "~"], ["1", "!", "\u00a1", "\u00b9"], ["2", "@", "\u00b2"], ["3", "#", "\u00b3"], ["4", "$", "\u00a4", "\u00a3"], ["5", "%", "\u20ac"], ["6", "^", "\u00bc"], ["7", "&", "\u00bd"], ["8", "*", "\u00be"], ["9", "(", "\u2018"], ["0", ")", "\u2019"], ["-", "_", "\u00a5"], ["=", "+", "\u00d7", "\u00f7"], ["Bksp", "Bksp"]],    [["Tab", "Tab"], ["q", "Q", "\u00e4", "\u00c4"], ["w", "W", "\u00e5", "\u00c5"], ["e", "E", "\u00e9", "\u00c9"], ["r", "R", "\u00ae"], ["t", "T", "\u00fe", "\u00de"], ["y", "Y", "\u00fc", "\u00dc"], ["u", "U", "\u00fa", "\u00da"], ["i", "I", "\u00ed", "\u00cd"], ["o", "O", "\u00f3", "\u00d3"], ["p", "P", "\u00f6", "\u00d6"], ["[", "{", "\u00ab"], ["]", "}", "\u00bb"], ["\\", "|", "\u00ac", "\u00a6"]],    [["Caps", "Caps"], ["a", "A", "\u00e1", "\u00c1"], ["s", "S", "\u00df", "\u00a7"], ["d", "D", "\u00f0", "\u00d0"], ["f", "F"], ["g", "G"], ["h", "H"], ["j", "J"], ["k", "K"], ["l", "L", "\u00f8", "\u00d8"], [";", ":", "\u00b6", "\u00b0"], ["'", '"', "\u00b4", "\u00a8"], ["Enter", "Enter"]],    [["Shift", "Shift"], ["z", "Z", "\u00e6", "\u00c6"], ["x", "X"], ["c", "C", "\u00a9", "\u00a2"], ["v", "V"], ["b", "B"], ["n", "N", "\u00f1", "\u00d1"], ["m", "M", "\u00b5"], [",", "<", "\u00e7", "\u00c7"], [".", ">"], ["/", "?", "\u00bf"], ["Shift", "Shift"]],    [[" ", " ", " ", " "], ["Alt", "Alt"]]  ];  /* ***** Define Dead Keys **************************************** */  this.VKI_deadkey = new Object();  // - Lay out each dead key set in one row of sub-arrays.  The rows  //   below are wrapped so uppercase letters are below their lowercase  //   equivalents.  //  // - The first letter in each sub-array is the letter pressed after  //   the diacritic.  The second letter is the letter this key-combo  //   will generate.  //  // - Note that if you have created a new keyboard layout and want it  //   included in the distributed script, PLEASE TELL ME if you have  //   added additional dead keys to the ones below.  this.VKI_deadkey['"'] = this.VKI_deadkey['\u00a8'] = [ // Umlaut / Diaeresis / Greek Dialytika    ["a", "\u00e4"], ["e", "\u00eb"], ["i", "\u00ef"], ["o", "\u00f6"], ["u", "\u00fc"], ["y", "\u00ff"], ["\u03b9", "\u03ca"], ["\u03c5", "\u03cb"],    ["A", "\u00c4"], ["E", "\u00cb"], ["I", "\u00cf"], ["O", "\u00d6"], ["U", "\u00dc"], ["Y", "\u0178"], ["\u0399", "\u03aa"], ["\u03a5", "\u03ab"]  ];  this.VKI_deadkey['~'] = [ // Tilde    ["a", "\u00e3"], ["o", "\u00f5"], ["n", "\u00f1"],    ["A", "\u00c3"], ["O", "\u00d5"], ["N", "\u00d1"]  ];  this.VKI_deadkey['^'] = [ // Circumflex    ["a", "\u00e2"], ["e", "\u00ea"], ["i", "\u00ee"], ["o", "\u00f4"], ["u", "\u00fb"], ["w", "\u0175"], ["y", "\u0177"],    ["A", "\u00c2"], ["E", "\u00ca"], ["I", "\u00ce"], ["O", "\u00d4"], ["U", "\u00db"], ["W", "\u0174"], ["Y", "\u0176"]  ];  this.VKI_deadkey['\u02c7'] = [ // Baltic caron    ["c", "\u010D"], ["s", "\u0161"], ["z", "\u017E"], ["r", "\u0159"], ["d", "\u010f"], ["t", "\u0165"], ["n", "\u0148"], ["l", "\u013e"], ["e", "\u011b"],    ["C", "\u010C"], ["S", "\u0160"], ["Z", "\u017D"], ["R", "\u0158"], ["D", "\u010e"], ["T", "\u0164"], ["N", "\u0147"], ["L", "\u013d"], ["E", "\u011a"]  ];  this.VKI_deadkey['\u02d8'] = [ // Romanian and Turkish breve    ["a", "\u0103"], ["g", "\u011f"],    ["A", "\u0102"], ["G", "\u011e"]  ];  this.VKI_deadkey['`'] = [ // Grave    ["a", "\u00e0"], ["e", "\u00e8"], ["i", "\u00ec"], ["o", "\u00f2"], ["u", "\u00f9"],    ["A", "\u00c0"], ["E", "\u00c8"], ["I", "\u00cc"], ["O", "\u00d2"], ["U", "\u00d9"]  ];  this.VKI_deadkey["'"] = this.VKI_deadkey['\u00b4'] = this.VKI_deadkey['\u0384'] = [ // Acute / Greek Tonos    ["a", "\u00e1"], ["e", "\u00e9"], ["i", "\u00ed"], ["o", "\u00f3"], ["u", "\u00fa"], ["\u03b1", "\u03ac"], ["\u03b5", "\u03ad"], ["\u03b7", "\u03ae"], ["\u03b9", "\u03af"], ["\u03bf", "\u03cc"], ["\u03c5", "\u03cd"], ["\u03c9", "\u03ce"],    ["A", "\u00c1"], ["E", "\u00c9"], ["I", "\u00cd"], ["O", "\u00d3"], ["U", "\u00da"], ["\u0391", "\u0386"], ["\u0395", "\u0388"], ["\u0397", "\u0389"], ["\u0399", "\u038a"], ["\u039f", "\u038c"], ["\u03a5", "\u038e"], ["\u03a9", "\u038f"]  ];  this.VKI_deadkey['\u02dd'] = [ // Hungarian Double Acute Accent    ["o", "\u0151"], ["u", "\u0171"],    ["O", "\u0150"], ["U", "\u0170"]  ];  this.VKI_deadkey["\u0385"] = [ // Greek Dialytika + Tonos    ["\u03b9", "\u0390"], ["\u03c5", "\u03b0"]  ];  this.VKI_deadkey['\u00b0'] = this.VKI_deadkey['\u00ba'] = [ // Ring    ["a", "\u00e5"],    ["A", "\u00c5"]  ];  /* ***** Find tagged input & textarea elements ******************* */  var inputElems = [    document.getElementsByTagName('input'),    document.getElementsByTagName('textarea'),  ]  for (var x = 0, inputCount = 0, elem; elem = inputElems[x++];) {    if (elem) {      for (var y = 0, keyid = "", ex; ex = elem[y++];) {        if ((ex.nodeName == "TEXTAREA" || ex.type == "text" || ex.type == "password") && ex.className.indexOf("keyboardInput") > -1) {          if (!ex.id) {            do { keyid = 'keyboardInputInitiator' + inputCount++; } while (document.getElementById(keyid));            ex.id = keyid;          } else keyid = ex.id;          var keybut = document.createElement('img');              keybut.src = "keyboard.png";              keybut.alt = "Keyboard interface";              keybut.className = "keyboardInputInitiator";              keybut.title = "Display graphical keyboard interface";              keybut.onclick = (function(a) { return function() { self.VKI_show(a); }; })(keyid);          ex.parentNode.insertBefore(keybut, ex.nextSibling);          if (!window.sidebar && !window.opera) {            ex.onclick = ex.onkeyup = ex.onselect = function() {              if (self.VKI_target.createTextRange) self.VKI_range = document.selection.createRange();            };          }        }      }    }  }  /* ***** Build the keyboard interface **************************** */  this.VKI_keyboard = document.createElement('table');  this.VKI_keyboard.id = "keyboardInputMaster";  this.VKI_keyboard.cellSpacing = this.VKI_keyboard.cellPadding = this.VKI_keyboard.border = "0";  var layouts = 0;  for (ktype in this.VKI_layout) if (typeof this.VKI_layout[ktype] == "object") layouts++;  var thead = document.createElement('thead');    var tr = document.createElement('tr');      var th = document.createElement('th');        if (layouts > 1) {          var kblist = document.createElement('select');            for (ktype in this.VKI_layout) {              if (typeof this.VKI_layout[ktype] == "object") {                var opt = document.createElement('option');                    opt.value = ktype;                    opt.appendChild(document.createTextNode(ktype));                  kblist.appendChild(opt);              }            }              kblist.value = this.VKI_kt;              kblist.onchange = function() {                self.VKI_kt = this.value;                self.VKI_buildKeys();                self.VKI_position();              };          th.appendChild(kblist);        }          var label = document.createElement('label');            var checkbox = document.createElement('input');                checkbox.type = "checkbox";                checkbox.checked = this.VKI_deadkeysOn;                checkbox.title = "Toggle dead key input";                checkbox.onclick = function() {                  self.VKI_deadkeysOn = this.checked;                  this.nextSibling.nodeValue = " Dead keys: " + ((this.checked) ? "On" : "Off");                  self.VKI_modify("");                  return true;                };              label.appendChild(checkbox);              label.appendChild(document.createTextNode(" Dead keys: " + ((checkbox.checked) ? "On" : "Off")))          th.appendChild(label);        tr.appendChild(th);      var td = document.createElement('td');        var clearer = document.createElement('span');            clearer.id = "keyboardInputClear";            clearer.appendChild(document.createTextNode("Clear"));            clearer.title = "Clear this input";            clearer.onmousedown = function() { this.className = "pressed"; };            clearer.onmouseup = function() { this.className = ""; };            clearer.onclick = function() {              self.VKI_target.value = "";              self.VKI_target.focus();              return false;            };          td.appendChild(clearer);        var closer = document.createElement('span');            closer.id = "keyboardInputClose";            closer.appendChild(document.createTextNode('X'));            closer.title = "Close this window";            closer.onmousedown = function() { this.className = "pressed"; };            closer.onmouseup = function() { this.className = ""; };            closer.onclick = function() { self.VKI_close(); };          td.appendChild(closer);        tr.appendChild(td);      thead.appendChild(tr);  this.VKI_keyboard.appendChild(thead);  var tbody = document.createElement('tbody');    var tr = document.createElement('tr');      var td = document.createElement('td');          td.colSpan = "2";        var div = document.createElement('div');            div.id = "keyboardInputLayout";          td.appendChild(div);        var div = document.createElement('div');          var ver = document.createElement('var');              ver.appendChild(document.createTextNode("v" + this.VKI_version));            div.appendChild(ver);          td.appendChild(div);        tr.appendChild(td);      tbody.appendChild(tr);  this.VKI_keyboard.appendChild(tbody);        /* ***** Functions ************************************************ */  /* ******************************************************************   * Build or rebuild the keyboard keys   *   */  this.VKI_buildKeys = function() {    this.VKI_shift = this.VKI_capslock = this.VKI_alternate = this.VKI_dead = false;    this.VKI_deadkeysOn = (this.VKI_layoutDDK[this.VKI_kt]) ? false : this.VKI_keyboard.getElementsByTagName('label')[0].getElementsByTagName('input')[0].checked;    var container = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0];    while (container.firstChild) container.removeChild(container.firstChild);    for (var x = 0, hasDeadKey = false, lyt; lyt = this.VKI_layout[this.VKI_kt][x++];) {      var table = document.createElement('table');          table.cellSpacing = table.cellPadding = table.border = "0";      if (lyt.length <= this.VKI_keyCenter) table.className = "keyboardInputCenter";        var tbody = document.createElement('tbody');          var tr = document.createElement('tr');          for (var y = 0, lkey; lkey = lyt[y++];) {            if (!this.VKI_layoutDDK[this.VKI_kt] && !hasDeadKey)              for (var z = 0; z < lkey.length; z++)                if (this.VKI_deadkey[lkey[z]]) hasDeadKey = true;            var td = document.createElement('td');                td.appendChild(document.createTextNode(lkey[0]));              var alive = false;              if (this.VKI_deadkeysOn) for (key in this.VKI_deadkey) if (key === lkey[0]) alive = true;                td.className = (alive) ? "alive" : "";              if (lyt.length > this.VKI_keyCenter && y == lyt.length)                td.className += " last";              if (lkey[0] == " ")                td.style.paddingLeft = td.style.paddingRight = "50px";                td.onmouseover = function() { if (this.className != "dead" && this.firstChild.nodeValue != "\xa0") this.className += " hover"; };                td.onmouseout = function() { if (this.className != "dead") this.className = this.className.replace(/ ?(hover|pressed)/g, ""); };                td.onmousedown = function() { if (this.className != "dead" && this.firstChild.nodeValue != "\xa0") this.className += " pressed"; };                td.onmouseup = function() { if (this.className != "dead") this.className = this.className.replace(/ ?pressed/g, ""); };                td.ondblclick = function() { return false; };              switch (lkey[1]) {                case "Caps":                case "Shift":                case "Alt":                case "AltGr":                  td.onclick = (function(type) { return function() { self.VKI_modify(type); return false; }})(lkey[1]);                  break;                case "Tab":                  td.onclick = function() { self.VKI_insert("\t"); return false; };                  break;                case "Bksp":                  td.onclick = function() {                    self.VKI_target.focus();                    if (self.VKI_target.setSelectionRange) {                      var srt = self.VKI_target.selectionStart;                      var len = self.VKI_target.selectionEnd;                      if (srt < len) srt++;                      self.VKI_target.value = self.VKI_target.value.substr(0, srt - 1) + self.VKI_target.value.substr(len);                      self.VKI_target.setSelectionRange(srt - 1, srt - 1);                    } else if (self.VKI_target.createTextRange) {                      try { self.VKI_range.select(); } catch(e) {}                      self.VKI_range = document.selection.createRange();                      if (!self.VKI_range.text.length) self.VKI_range.moveStart('character', -1);                      self.VKI_range.text = "";                    } else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);                    if (self.VKI_shift) self.VKI_modify("Shift");                    if (self.VKI_alternate) self.VKI_modify("AltGr");                    return true;                  };                  break;                case "Enter":                  td.onclick = function() {                    if (self.VKI_target.nodeName == "TEXTAREA") { self.VKI_insert("\n"); } else self.VKI_close();                    return true;                  };                  break;                default:                  td.onclick = function() {                    if (self.VKI_deadkeysOn && self.VKI_dead) {                      if (self.VKI_dead != this.firstChild.nodeValue) {                        for (key in self.VKI_deadkey) {                          if (key == self.VKI_dead) {                            if (this.firstChild.nodeValue != " ") {                              for (var z = 0, rezzed = false, dk; dk = self.VKI_deadkey[key][z++];) {                                if (dk[0] == this.firstChild.nodeValue) {                                  self.VKI_insert(dk[1]);                                  rezzed = true;                                  break;                                }                              }                            } else {                              self.VKI_insert(self.VKI_dead);                              rezzed = true;                            }                            break;                          }                        }                      } else rezzed = true;                    }                    self.VKI_dead = false;                    if (!rezzed && this.firstChild.nodeValue != "\xa0") {                      if (self.VKI_deadkeysOn) {                        for (key in self.VKI_deadkey) {                          if (key == this.firstChild.nodeValue) {                            self.VKI_dead = key;                            this.className = "dead";                            if (self.VKI_shift) self.VKI_modify("Shift");                            if (self.VKI_alternate) self.VKI_modify("AltGr");                            break;                          }                        }                        if (!self.VKI_dead) self.VKI_insert(this.firstChild.nodeValue);                      } else self.VKI_insert(this.firstChild.nodeValue);                    }                    self.VKI_modify("");                    return false;                  };              }              tr.appendChild(td);            tbody.appendChild(tr);          table.appendChild(tbody);          for (var z = lkey.length; z < 4; z++) lkey[z] = "\xa0";      }      container.appendChild(table);    }    this.VKI_keyboard.getElementsByTagName('label')[0].style.display = (hasDeadKey) ? "inline" : "none";  };  this.VKI_buildKeys();  VKI_disableSelection(this.VKI_keyboard);  /* ******************************************************************   * Controls modifier keys   *   */  this.VKI_modify = function(type) {    switch (type) {      case "Alt":      case "AltGr": this.VKI_alternate = !this.VKI_alternate; break;      case "Caps": this.VKI_capslock = !this.VKI_capslock; break;      case "Shift": this.VKI_shift = !this.VKI_shift; break;    }    var vchar = 0;    if (!this.VKI_shift != !this.VKI_capslock) vchar += 1;    var tables = this.VKI_keyboard.getElementsByTagName('table');    for (var x = 0; x < tables.length; x++) {      var tds = tables[x].getElementsByTagName('td');      for (var y = 0; y < tds.length; y++) {        var dead = alive = target = false;        var lkey = this.VKI_layout[this.VKI_kt][x][y];        switch (lkey[1]) {          case "Alt":          case "AltGr":            if (this.VKI_alternate) dead = true;            break;          case "Shift":            if (this.VKI_shift) dead = true;            break;          case "Caps":            if (this.VKI_capslock) dead = true;            break;          case "Tab": case "Enter": case "Bksp": break;          default:            if (type) tds[y].firstChild.nodeValue = lkey[vchar + ((this.VKI_alternate && lkey.length == 4) ? 2 : 0)];            if (this.VKI_deadkeysOn) {              var char = tds[y].firstChild.nodeValue;              if (this.VKI_dead) {                if (char == this.VKI_dead) dead = true;                for (var z = 0; z < this.VKI_deadkey[this.VKI_dead].length; z++)                  if (char == this.VKI_deadkey[this.VKI_dead][z][0]) { target = true; break; }              }              for (key in this.VKI_deadkey) if (key === char) { alive = true; break; }            }        }        tds[y].className = (dead) ? "dead" : ((target) ? "target" : ((alive) ? "alive" : ""));        if (y == tds.length - 1 && tds.length > this.VKI_keyCenter) tds[y].className += " last";      }    }    this.VKI_target.focus();  };  /* ******************************************************************   * Insert text at the cursor   *   */  this.VKI_insert = function(text) {    this.VKI_target.focus();    if (this.VKI_target.setSelectionRange) {      var srt = this.VKI_target.selectionStart;      var len = this.VKI_target.selectionEnd;      this.VKI_target.value = this.VKI_target.value.substr(0, srt) + text + this.VKI_target.value.substr(len);      if (text == "\n" && window.opera) srt++;      this.VKI_target.setSelectionRange(srt + text.length, srt + text.length);    } else if (this.VKI_target.createTextRange) {      try { this.VKI_range.select(); } catch(e) {}      this.VKI_range = document.selection.createRange();      this.VKI_range.text = text;      this.VKI_range.collapse(true);      this.VKI_range.select();    } else this.VKI_target.value += text;    if (this.VKI_shift) this.VKI_modify("Shift");    if (this.VKI_alternate) this.VKI_modify("AltGr");    this.VKI_target.focus();  };  /* ******************************************************************   * Show the keyboard interface   *   */  this.VKI_show = function(id) {    if (this.VKI_target = document.getElementById(id)) {      if (this.VKI_visible != id) {        this.VKI_range = "";        try { this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard); } catch (e) {}        var elem = this.VKI_target;        this.VKI_target.keyboardPosition = "absolute";        do {          if (VKI_getStyle(elem, "position") == "fixed") {            this.VKI_target.keyboardPosition = "fixed";            break;          }        } while (elem = elem.offsetParent);        this.VKI_keyboard.style.top = this.VKI_keyboard.style.right = this.VKI_keyboard.style.bottom = this.VKI_keyboard.style.left = "auto";        this.VKI_keyboard.style.position = this.VKI_target.keyboardPosition;        document.body.appendChild(this.VKI_keyboard);        this.VKI_visible = this.VKI_target.id;        this.VKI_position();        this.VKI_target.focus();      } else this.VKI_close();    }  };  /* ******************************************************************   * Position the keyboard   *   */  this.VKI_position = function() {    if (self.VKI_visible != "") {      var inputElemPos = VKI_findPos(self.VKI_target);      self.VKI_keyboard.style.top = inputElemPos[1] - ((self.VKI_target.keyboardPosition == "fixed") ? document.body.scrollTop : 0) + self.VKI_target.offsetHeight + 3 + "px";      self.VKI_keyboard.style.left = Math.min(VKI_innerDimensions()[0] - self.VKI_keyboard.offsetWidth - 15, inputElemPos[0]) + "px";    }  };  if (window.addEventListener) {    window.addEventListener('resize', this.VKI_position, false);   } else if (window.attachEvent)    window.attachEvent('onresize', this.VKI_position);  /* ******************************************************************   * Close the keyboard interface   *   */  this.VKI_close = function() {    try { this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard); } catch (e) {}    this.VKI_visible = "";    this.VKI_target.focus();    this.VKI_target = "";  };}/* ***** Attach this script to the onload event ******************** */if (window.addEventListener) {  window.addEventListener('load', VKI_buildKeyboardInputs, false); } else if (window.attachEvent)  window.attachEvent('onload', VKI_buildKeyboardInputs);function VKI_findPos(obj) {  var curleft = curtop = 0;  do {    curleft += obj.offsetLeft;    curtop += obj.offsetTop;  } while (obj = obj.offsetParent);      return [curleft, curtop];}function VKI_innerDimensions() {  if (self.innerHeight) {    return [self.innerWidth, self.innerHeight];  } else if (document.documentElement && document.documentElement.clientHeight) {    return [document.documentElement.clientWidth, document.documentElement.clientHeight];  } else if (document.body)    return [document.body.clientWidth, document.body.clientHeight];  return [0, 0];}function VKI_getStyle(obj, styleProp) {  if (obj.currentStyle) {    var y = obj.currentStyle[styleProp];  } else if (window.getComputedStyle)    var y = window.getComputedStyle(obj, null)[styleProp];  return y;}function VKI_disableSelection(elem) {  elem.onselectstart = function() { return false; };  elem.unselectable = "on";  elem.style.MozUserSelect = "none";  elem.style.cursor = "default";  if (window.opera) elem.onmousedown = function() { return false; };}</script>


HTML
<input type="text" value="" class="keyboardInput">


Files
/javascript/utility/JavaScript_Virtual_Keyboard_Interface_with_Many_Languages/keyboard.png