/* Cyrillic Virtual (on-screen) keyboard - JavaScript file
   Copyright (c) 2005  Paul Gorodyansky
  
  Implementation: http://Kbd.RusWin.net (http://ourworld.compuserve.com/homepages/PaulGor/onscreen.htm)
     or Russian interface version: 
  http://Klava.RusWin.net (http://ourworld.compuserve.com/homepages/PaulGor/screen_r.htm)

  Auhtor's site - "Cyrillic (Russian): instructions for Windows and Internet": 
  http://ourworld.compuserve.com/homepages/PaulGor/
  ( same as http://RusWin.net )
   
 * 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.    
 *  
 *      This JavaScript code is for
 *
 *      Virtual Cyrillic Keyboard - with standard and phonetic layouts -
 *      works with MS Internet Explorer, Opera 8 and newer and with
 *      Mozilla software:
 *      Mozilla ver. 1.3 or higher, Netscape 7.1 or newer, FireFox
 *
 *
 *      Mode: 'as at home with MS Word' - input/edit text normally using 
 *      physical keyboard.
 *      In addition, one can use a mouse with a layout picture to place a
 *      letter into needed position.
 *
 *
 *  This is the first Vurtual Keyboard (that provides physical keyboard input)
 *  with a programming code suitable for all three browser brands:
 *  Internet Explorer, Opera and Mozilla
 *
 *  That is, this code for such "on-the-fly" input/editing is *original* -
 *  both keyboard-based and mouse-based parts -
 *  I could not use any code of older Virtual Keyboards because their programming
 *  code was working only under Internet Explorer.
 *  Also older mouse-based Keyboards were not suitable for normal text input/editing -
 *  they placed a new letter only at the end of the text, thus no text
 *  editing/correction was possible.
 *
 */


JSwasLoaded = true;

// Some functions here use global variable that is set in calling .html:
//  txtControl - textarea object (f.e. windows.document.cyr.message)

var Netscape, MSIE, Opera, Unknown, NN1, NN2;
var Win, Mac, Other;
var NetscapeVer, MSIEVer, OperaVer, NetscapeOK, AlertMsg;
var strOperaPos;

var Br = "1";

// detect browser

Netscape = navigator.appName == "Netscape";
MSIE = navigator.appName == "Microsoft Internet Explorer";
Opera = navigator.userAgent.indexOf("Opera") > -1;

Unknown = !(Netscape || MSIE || Opera);

NetscapeOK = false;

// detect platform

Win = navigator.userAgent.indexOf("Win") > -1;
Mac = navigator.userAgent.indexOf("Mac") > -1;
Other = !(Win || Mac);

// now extract version numbers

if(Netscape)
{
  NetscapeVer = parseFloat(navigator.appVersion);
  if (NetscapeVer>4)
  {
    n = navigator.userAgent;
    if (n.indexOf("Netscape/") != -1)
    {
       NN1 = n.substr(n.indexOf("Netscape/")+9);
       NN1 = parseFloat(NN1);
    }
    NN1 = n.substr(n.indexOf("rv:")+3);
    NN1 = parseFloat(NN1); 

    if (NN1 >= "1.3")
        NetscapeOK = true;
  }
  if (NetscapeOK)
      Br="NN";    
}
else if(MSIE)
{
  n = navigator.userAgent;
  MSIEVer = n.substr(n.indexOf("MSIE ")+("MSIE ").length, 4);
  MSIEVer = parseFloat(MSIEVer); 
  // converts it into a floatint point number

  if(Opera)
  {
     strOperaPos = n.indexOf("Opera/"); // "Opera " or "Opera/"
     if (strOperaPos == -1)
       OperaVer = n.substr(n.indexOf("Opera ")+("Opera ").length, 4);
     else
       OperaVer = n.substr(strOperaPos + ("Opera/").length, 4);    
        
     OperaVer = parseFloat(OperaVer);
  }
  else
    Br = "IE";
}
else if(Opera)  // Opera does not identify itself as MSIE
{
  n = navigator.userAgent;
  strOperaPos = n.indexOf("Opera/"); // "Opera " or "Opera/"

  if (strOperaPos == -1)
      OperaVer = n.substr(n.indexOf("Opera ")+("Opera ").length, 4);
  else
      OperaVer = n.substr(strOperaPos + ("Opera/").length, 4);    
        
  OperaVer = parseFloat(OperaVer);        
}


////////////////////////


                                 // YaZHert
  var Layout1 = {          
    "~": "Þ",
    "!": "!",    
    "@": "¨",
    "#": "¸",
    "$": "$",
    "%": "%",
    "^": "Ú",
    "&": "ú",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ü",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ü",    
    
    "Q": "ß",
    "W": "Æ",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Ø",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "æ",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "ø",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "'",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };

                   // YaWert
  var Layout2 = {
    "~": "Þ",
    "!": "!",    
    "@": "¨",
    "#": "¸",
    "$": "$",
    "%": "%",
    "^": "Ú",
    "&": "ú",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ü",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ü",    
    
    "Q": "ß",
    "W": "Â",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Ø",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "â",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "ø",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "'",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Æ",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "æ",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
             

                           // YaSHert
  var Layout3 = {
    "~": "Þ",
    "!": "!",    
    "@": "¨",
    "#": "¸",
    "$": "$",
    "%": "%",
    "^": "Ú",
    "&": "ú",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ü",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ü",    
    
    "Q": "ß",
    "W": "Ø",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Æ",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "ø",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "æ",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "'",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
                     // YaSCHert
  var Layout4 = {
    "~": "Þ",
    "!": "!",    
    "@": "Ú",
    "#": "ú",
    "$": "Ü",
    "%": "%",
    "^": "¨",
    "&": "¸",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "=",    
    
    "Q": "ß",
    "W": "Ù",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Æ",
    "}": "Ø",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "ù",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "æ",
    "]": "ø",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "ü",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
                             
                          // AATSEEL Student
  var Layout5 = {
    "~": "¨",
    "!": "!",    
    "@": "@",
    "#": "#",
    "$": "\"",
    "%": ":",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ú",
    
    "`": "¸",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ú",    
    
    "Q": "ß",
    "W": "Ø",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Þ",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "ø",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "þ",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": "Ü",
    "\"": "Æ",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": "ü",
    "'": "æ",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
                   // YaWert2
  var Layout6 = {
    "~": "Þ",
    "!": "!",    
    "@": "¨",
    "#": "¸",
    "$": "$",
    "%": "%",
    "^": "Ú",
    "&": "ú",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "×",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "÷",    
    
    "Q": "ß",
    "W": "Â",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Ø",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "â",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "ø",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "Õ",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "õ",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "'",
    
    "Z": "Ç",
    "X": "Ü",
    "C": "Ö",
    "V": "Æ",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "ü",
    "c": "ö",
    "v": "æ",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };  
             
             // YaSHert2
  var Layout7 = {
    "~": "¨",
    "!": "!",    
    "@": "-",
    "#": "#",
    "$": "$",
    "%": "%",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "Ý",
    "+": "Ù",
    
    "`": "¸",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "ý",    
    "=": "ù",    
    
    "Q": "ß",
    "W": "Ø",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Þ",
    "}": "Ú",
    "|": "¨",
    
    "q": "ÿ",
    "w": "ø",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "þ",
    "]": "ú",
    "\\": "¸",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "Õ",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": "×",
    "\"": "Æ",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "õ",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": "÷",
    "'": "æ",
    
    "Z": "Ç",
    "X": "Ü",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "ü",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
             
                              // YaZHert2
    var Layout8 = {
    "~": "Þ",
    "!": "!",    
    "@": "¨",
    "#": "¸",
    "$": "$",
    "%": "%",
    "^": "Ú",
    "&": "ú",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "×",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "÷",    
    
    "Q": "ß",
    "W": "Æ",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Ø",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "æ",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "ø",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "Õ",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": ":",
    "\"": "\"",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "õ",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": ";",
    "'": "'",
    
    "Z": "Ç",
    "X": "Ü",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "<",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "ü",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
                             // YaZHert3  ~ orig. of SoftCorp.
    var Layout9 = {
    "~": "Þ",
    "!": "!",    
    "@": "\"",
    "#": "#",
    "$": "?",
    "%": "%",
    "^": "\\",
    "&": "/",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ú",
    
    "`": "þ",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ú",    
    
    "Q": "ß",
    "W": "Æ",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Ø",
    "}": "Ù",
    "|": "Ý",
    
    "q": "ÿ",
    "w": "æ",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "ø",
    "]": "ù",
    "\\": "ý",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "Õ",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": "×",
    "\"": "¨",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "õ",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": "÷",
    "'": "¸",
    
    "Z": "Ç",
    "X": "Ü",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": ";",
    ">": ":",
    "?": "Ú",    
    
    "z": "ç",
    "x": "ü",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "ú"
  };
  
                     // YaYuertj
  var Layout10 = {
    "~": "¨",
    "!": "!",    
    "@": "\"",
    "#": "#",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "¸",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "=",    
    
    "Q": "ß",
    "W": "Þ",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "É",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Û",
    "}": "Ú",
    "|": "|",
    
    "q": "ÿ",
    "w": "þ",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "é",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "û",
    "]": "ú",
    "\\": "/",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "Õ",
    "J": "Æ",
    "K": "Ê",
    "L": "Ë",
    ":": "×",
    "\"": "Ö",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "õ",
    "j": "æ",
    "k": "ê",
    "l": "ë",
    ";": "÷",
    "'": "ö",
    
    "Z": "Ç",
    "X": "Ù",
    "C": "Ø",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": "Ü",
    ">": ",",
    "?": "Ý",    
    
    "z": "ç",
    "x": "ù",
    "c": "ø",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": "ü",
    ".": ".",
    "/": "ý"
  };
  
             // YaSHert3 - ER UniversI2
  var Layout11 = {
    "~": "Ý",
    "!": "¹",    
    "@": "!",
    "#": "-",
    "$": "\"",
    "%": ":",
    "^": "«",
    "&": "»",
    "*": "?",
    "(": "(",
    ")": ")",
    "_": "-",
    "+": "Ú",
    
    "`": "ý",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "ú",    
    
    "Q": "ß",
    "W": "Ø",
    "E": "Å",
    "R": "Ð",
    "T": "Ò",
    "Y": "Û",
    "U": "Ó",
    "I": "È",
    "O": "Î",
    "P": "Ï",
    "{": "Þ",
    "}": "Ù",
    "|": "¨",
    
    "q": "ÿ",
    "w": "ø",
    "e": "å",
    "r": "ð",
    "t": "ò",
    "y": "û",
    "u": "ó",
    "i": "è",
    "o": "î",
    "p": "ï",
    "[": "þ",
    "]": "ù",
    "\\": "¸",
    
    "A": "À",
    "S": "Ñ",
    "D": "Ä",
    "F": "Ô",
    "G": "Ã",
    "H": "×",
    "J": "É",
    "K": "Ê",
    "L": "Ë",
    ":": "Ü",
    "\"": "Æ",
    
    "a": "à",
    "s": "ñ",
    "d": "ä",
    "f": "ô",
    "g": "ã",
    "h": "÷",
    "j": "é",
    "k": "ê",
    "l": "ë",
    ";": "ü",
    "'": "æ",
    
    "Z": "Ç",
    "X": "Õ",
    "C": "Ö",
    "V": "Â",
    "B": "Á",
    "N": "Í",
    "M": "Ì",    
    "<": ";",
    ">": ">",
    "?": "?",    
    
    "z": "ç",
    "x": "õ",
    "c": "ö",
    "v": "â",
    "b": "á",
    "n": "í",
    "m": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };


          
                   // MS Standard éöóêåí
  var Layout30 = {
    "~": "¨",
    "!": "!",    
    "@": "\"",
    "#": "¹",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "¸",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "=",    
    
    "Q": "É",
    "W": "Ö",
    "E": "Ó",
    "R": "Ê",
    "T": "Å",
    "Y": "Í",
    "U": "Ã",
    "I": "Ø",
    "O": "Ù",
    "P": "Ç",
    "{": "Õ",
    "}": "Ú",
    "|": "/",
    
    "q": "é",
    "w": "ö",
    "e": "ó",
    "r": "ê",
    "t": "å",
    "y": "í",
    "u": "ã",
    "i": "ø",
    "o": "ù",
    "p": "ç",
    "[": "õ",
    "]": "ú",
    "\\": "\\",
    
    "A": "Ô",
    "S": "Û",
    "D": "Â",
    "F": "À",
    "G": "Ï",
    "H": "Ð",
    "J": "Î",
    "K": "Ë",
    "L": "Ä",
    ":": "Æ",
    "\"": "Ý",
    
    "a": "ô",
    "s": "û",
    "d": "â",
    "f": "à",
    "g": "ï",
    "h": "ð",
    "j": "î",
    "k": "ë",
    "l": "ä",
    ";": "æ",
    "'": "ý",
    
    "Z": "ß",
    "X": "×",
    "C": "Ñ",
    "V": "Ì",
    "B": "È",
    "N": "Ò",
    "M": "Ü",    
    "<": "Á",
    ">": "Þ",
    "?": ",",    
    
    "z": "ÿ",
    "x": "÷",
    "c": "ñ",
    "v": "ì",
    "b": "è",
    "n": "ò",
    "m": "ü",    
    ",": "á",
    ".": "þ",
    "/": "."
  };          
  
                   // MS Typewriter éöóêåí
  var Layout31 = {
    "~": "+",
    "!": "1",    
    "@": "2",
    "#": "3",
    "$": "4",
    "%": "5",
    "^": "6",
    "&": "7",
    "*": "8",
    "(": "9",
    ")": "0",
    "_": "=",
    "+": "\\",
    
    "`": "|",
    "1": "¹",
    "2": "-",
    "3": "/",
    "4": "\"",
    "5": ":",
    "6": ",",
    "7": ".",
    "8": "_",
    "9": "?",
    "0": "%",
    "-": "!",    
    "=": ";",    
    
    "Q": "É",
    "W": "Ö",
    "E": "Ó",
    "R": "Ê",
    "T": "Å",
    "Y": "Í",
    "U": "Ã",
    "I": "Ø",
    "O": "Ù",
    "P": "Ç",
    "{": "Õ",
    "}": "Ú",
    "|": "(",
    
    "q": "é",
    "w": "ö",
    "e": "ó",
    "r": "ê",
    "t": "å",
    "y": "í",
    "u": "ã",
    "i": "ø",
    "o": "ù",
    "p": "ç",
    "[": "õ",
    "]": "ú",
    "\\": ")",
    
    "A": "Ô",
    "S": "Û",
    "D": "Â",
    "F": "À",
    "G": "Ï",
    "H": "Ð",
    "J": "Î",
    "K": "Ë",
    "L": "Ä",
    ":": "Æ",
    "\"": "Ý",
    
    "a": "ô",
    "s": "û",
    "d": "â",
    "f": "à",
    "g": "ï",
    "h": "ð",
    "j": "î",
    "k": "ë",
    "l": "ä",
    ";": "æ",
    "'": "ý",
    
    "Z": "ß",
    "X": "×",
    "C": "Ñ",
    "V": "Ì",
    "B": "È",
    "N": "Ò",
    "M": "Ü",    
    "<": "Á",
    ">": "Þ",
    "?": "¨",    
    
    "z": "ÿ",
    "x": "÷",
    "c": "ñ",
    "v": "ì",
    "b": "è",
    "n": "ò",
    "m": "ü",    
    ",": "á",
    ".": "þ",
    "/": "¸"
  };            
  
                     // Alphabet order
  var Layout32 = {
    "~": "~",
    "!": "!",    
    "@": "@",
    "#": "#",
    "$": "$",
    "%": "%",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "`",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "=",    
    
    "Q": "À",
    "W": "Á",
    "E": "Â",
    "R": "Ã",
    "T": "Ä",
    "Y": "Å",
    "U": "¨",
    "I": "Æ",
    "O": "Ç",
    "P": "È",
    "{": "È",
    "}": "Ê",
    "|": "|",
    
    "q": "à",
    "w": "á",
    "e": "â",
    "r": "ã",
    "t": "ä",
    "y": "å",
    "u": "¸",
    "i": "æ",
    "o": "ç",
    "p": "è",
    "[": "é",
    "]": "ê",
    "\\": "\\",
    
    "A": "Ë",
    "S": "Ì",
    "D": "Í",
    "F": "Î",
    "G": "Ï",
    "H": "Ð",
    "J": "Ñ",
    "K": "Ò",
    "L": "Ó",
    ":": "Ô",
    "\"": "Õ",
    
    "a": "ë",
    "s": "ì",
    "d": "í",
    "f": "î",
    "g": "ï",
    "h": "ð",
    "j": "ñ",
    "k": "ò",
    "l": "ó",
    ";": "ô",
    "'": "õ",
    
    "Z": "Ö",
    "X": "×",
    "C": "Ø",
    "V": "Ù",
    "B": "Ú",
    "N": "Û",
    "M": "Ü",    
    "<": "Ý",
    ">": "Þ",
    "?": "ß",    
    
    "z": "ö",
    "x": "÷",
    "c": "ø",
    "v": "ù",
    "b": "ú",
    "n": "û",
    "m": "ü",    
    ",": "ý",
    ".": "þ",
    "/": "ÿ"
  };          
  
                     // MS Standard éöóêåí - Ukrainian. Óêðàèíñêàÿ ñòàíäàðòíàÿ - ñì.
                     // http://www.microsoft.com/globaldev/reference/keyboards.aspx

  var Layout33 = {
    "~": "¨",
    "!": "!",    
    "@": "\"",
    "#": "¹",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "¥",
    
    "`": "¸",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "´",    
    
    "Q": "É",
    "W": "Ö",
    "E": "Ó",
    "R": "Ê",
    "T": "Å",
    "Y": "Í",
    "U": "Ã",
    "I": "Ø",
    "O": "Ù",
    "P": "Ç",
    "{": "Õ",
    "}": "¯",
    "|": "/",
    
    "q": "é",
    "w": "ö",
    "e": "ó",
    "r": "ê",
    "t": "å",
    "y": "í",
    "u": "ã",
    "i": "ø",
    "o": "ù",
    "p": "ç",
    "[": "õ",
    "]": "¿",
    "\\": "\\",
    
    "A": "Ô",
    "S": "²",
    "D": "Â",
    "F": "À",
    "G": "Ï",
    "H": "Ð",
    "J": "Î",
    "K": "Ë",
    "L": "Ä",
    ":": "Æ",
    "\"": "ª",
    
    "a": "ô",
    "s": "³",
    "d": "â",
    "f": "à",
    "g": "ï",
    "h": "ð",
    "j": "î",
    "k": "ë",
    "l": "ä",
    ";": "æ",
    "'": "º",
    
    "Z": "ß",
    "X": "×",
    "C": "Ñ",
    "V": "Ì",
    "B": "È",
    "N": "Ò",
    "M": "Ü",    
    "<": "Á",
    ">": "Þ",
    "?": ",",    
    
    "z": "ÿ",
    "x": "÷",
    "c": "ñ",
    "v": "ì",
    "b": "è",
    "n": "ò",
    "m": "ü",    
    ",": "á",
    ".": "þ",
    "/": "."
  };          
  
  
  
    var Layout888 = {   // To Translit
    "~": "~",
    "!": "!",    
    "@": "@",
    "#": "#",
    "$": "$",
    "%": "%",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "`",
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0",
    "-": "-",    
    "=": "=",    

    "{": "{",
    "}": "}",    
    "|": "|",    
    "[": "[",
    "]": "]",    
    "\\": "\\",  
    
    ":": ":",    
    "\"": "\"",    
    ";": ";",
    "'": "'",          
        
    "<": "<",
    ">": ">",    
    "?": "?",    
    ",": ",",
    ".": ".",    
    "/": "/",  
        
    "À": "A",
    "Á": "B",
    "Â": "V",
    "Ã": "G",
    "Ä": "D",
    "Å": "E",
    "¨": "YO",
    "Æ": "ZH",
    "Ç": "Z",
    "È": "I",
    "É": "J",
    "Ê": "K",
    "Ë": "L",
    "Ì": "M",
    "Í": "N",
    "Î": "O",
    "Ï": "P",
    "Ð": "R",
    "Ñ": "S",
    "Ò": "T",
    "Ó": "U",
    "Ô": "F",
    "Õ": "X",
    "Ö": "TS",
    "×": "CH",
    "Ø": "SH",    
    "Ù": "SCH",
    "Ú": "\"",
    "Û": "Y",
    "Ü": "'",
    "Ý": "E",
    "Þ": "YU",
    "ß": "YA",
    
    "à": "a",     // 0
    "á": "b",     // 1
    "â": "v",     // 2
    "ã": "g",     // 3
    "ä": "d",     // 4
    "å": "e",     // 5
    "¸": "yo",    // 6
    "æ": "zh",    // 7
    "ç": "z",     // 8
    "è": "i",     // 9
    "é": "j",     // 10
    "ê": "k",     // 11
    "ë": "l",     // 12
    "ì": "m",     // 13
    "í": "n",     // 14
    "î": "o",     // 15
    "ï": "p",     // 16
    "ð": "r",     // 17
    "ñ": "s",     // 18
    "ò": "t",     // 19
    "ó": "u",     // 20
    "ô": "f",     // 21
    "õ": "x",     // 22
    "ö": "ts",    // 23
    "÷": "ch",    // 24
    "ø": "sh",    // 25
    "ù": "sch",  // 26
    "ú": "\"",    // 27
    "û": "y",     // 28
    "ü": "'",     // 29
    "ý": "e",     // 30
    "þ": "yu",    // 31
    "ÿ": "ya"     // 32

  };


//////////////////////////////////////////////////////////

var ListName;

// var KBDSymbols = "~!@#$%^&*()_+`1234567890-=QWERTYUIOP{}|qwertyuiop[]\\ASDFGHJKL:\"asdfghjkl;'ZXCVBNM<>?zxcvbnm,./";
var RUSymbols = "ÀÁÂÃÄÅ¨ÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäå¸æçèéêëìíîïðñòóôõö÷øùúûüýþÿ";

var ShowToLatin = false;
if (typeof ToLatin != 'undefined')
  if (ToLatin)  ShowToLatin = true;

         


if (Opera)
 if (OperaVer >= 8) Br = "NN"; // Opera 8 works as Mozilla


/*
 * Mozilla did not let me use arrow buttons, Home/End, Fx buttons, etc.
 * The solution was for Mozilla do NOT use event.keyCode, use just event.charCode
 * or to issue
 *     if (evt.ctrlKey)		// Separate pressing 'c' from Ctrl/c
 *        return true;
 * and 
 *     if (evt.which == 0)      // To have arrows, etc. work
 *         return true;
  
  
the third argument to changeKey should be a function
   function exampleKeyChecker (keyCode, CurrentKey)
which returns an object 
  { cancelKey: boolean, replaceKey: boolean, newKeyCode: number, newKey:
    string }
Not all properties need to be present, if cancelKey is set to true the
other properties are not needed.
If replaceKey is set to true then at least newKeyCode needs to be set.

Newly found:
Gecko browsers (and many others) have boolean properties of the event
object:-

event.altKey
event.ctrlKey
event.metaKey
event.shiftKey
*/


function changeKey (textControl, evt, keyChecker1)
{
  if (Lang == 'E' && Layout != '888')  // regular latin editing
     return true;
  
  if (evt.ctrlKey)
     return true;
      
  var keyChecker = eval(keyChecker1); // function name
  var keyCode = void 0;

  keyCode = evt.keyCode ? evt.keyCode :
               evt.charCode ? evt.charCode :
               evt.which ? evt.which : void 0;   

  if (evt.which == 0)
     return true;
		
  var CurrentKey;

  if (keyCode)
     CurrentKey = String.fromCharCode(keyCode);
  
  var keyCheck = keyChecker(keyCode, CurrentKey);
  
  if (keyCode && window.event && !window.opera)   // IE
  {
    if (keyCheck.cancelKey)
      return false;
    else if (keyCheck.replaceKey)  
    {
      window.event.keyCode = keyCheck.newKeyCode;
      if (window.event.preventDefault)
          window.event.preventDefault();
      return true;
    }
    else
      return true;
  }
  else if (typeof textControl.setSelectionRange != 'undefined') // NN
  {
    if (keyCheck.cancelKey)
    {
      if (evt.preventDefault)
         evt.preventDefault();
      return false;
    }
    else if (keyCheck.replaceKey)
    {
      // cancel the key event and insert the newKey for the current selection
      if (evt.preventDefault)
         evt.preventDefault();
 
      var oldSelectionStart = textControl.selectionStart;
      var oldSelectionEnd = textControl.selectionEnd;
      var selectedText = textControl.value.substring(oldSelectionStart, oldSelectionEnd);
      var newText = typeof keyCheck.newKey != 'undefined' ?
                    keyCheck.newKey : String.fromCharCode(keyCheck.newKeyCode);
                    

      var scrollTop, scrollLeft;                                            
      if (textControl.type == 'textarea' && typeof textControl.scrollTop != 'undefined')
      {                                                        
         scrollTop  = textControl.scrollTop;                                 
         scrollLeft = textControl.scrollLeft;                               
      }                                                                     
      textControl.value =                                                   
               textControl.value.substring(0, oldSelectionStart) +          
               newText +                                                    
               textControl.value.substring(oldSelectionEnd);                
               
      if (typeof scrollTop != 'undefined')
      {                                
         textControl.scrollTop  = scrollTop;                                 
         textControl.scrollLeft = scrollLeft;                               
      }                                                                     
      textControl.setSelectionRange(oldSelectionStart + newText.length,     
                                    oldSelectionStart + newText.length);
      return false;
    }
    else
      return true;
  }          // Other browser:
  else if (keyCheck.cancelKey)
  {
    if (evt.preventDefault)
        evt.preventDefault();
    return false;
  }
  else
   return true;
}


function fIE (keyCode, CurrentKey) {
 
  if (Layout == '888')  // To Translit
  {
      if (RUSymbols.indexOf(CurrentKey) != -1)
      {
         if ( txtControl.isTextEdit )
         {
             var newString = Layout888[CurrentKey];
             insertAtCaret(txtControl, newString);
         }
         return { cancelKey: true };         
      }
      else
         return { cancelKey: false };
  }
  else       // Regular           
  {
   if (Lang == 'R')
   {
       var newKeyOut = eval("Layout" + Layout)[CurrentKey];
       if (newKeyOut)
         return { replaceKey: true, newKeyCode: newKeyOut.charCodeAt(), newKey: newKeyOut };    
       else
         return { cancelKey: false };
   }
   else
      return { cancelKey: false };
  }   
}
  // Copyright (c) 2005  Paul Gorodyansky http://RusWin.net
function fNN (keyCode, CurrentKey) {

  if (Layout == '888')  // To Translit
  {
      if (RUSymbols.indexOf(CurrentKey) != -1)
      {
          return { replaceKey: true, newKeyCode: keyCode, newKey:
                   Layout888[CurrentKey] };
      }
      else
         return { cancelKey: false };
  }
  else
  {
   if (Lang == 'R')
   { 
       var newKeyOut = eval("Layout" + Layout)[CurrentKey];
       if (newKeyOut)
         return { replaceKey: true, newKeyCode: keyCode, newKey: newKeyOut };
       else
         return { cancelKey: false };
   }
   else 
      return { cancelKey: false };
  } 
}

function fOther (keyCode, CurrentKey) {
 
  if (Layout == '888')  // To Translit
  {
      if (RUSymbols.indexOf(CurrentKey) != -1)
      {
         var newString = Layout888[CurrentKey];
         txtControl.value += newString;
         return { cancelKey: true };         
      }
      else
         return { cancelKey: false };
  }
  else
  {
   if (Lang == 'R')
   {
      var newKeyOut = eval("Layout" + Layout)[CurrentKey];
      if (newKeyOut)
      {
         txtControl.value += newKeyOut;
         return { cancelKey: true };
      }
      else
         return { cancelKey: false };
   }
   else
      return { cancelKey: false };
  }   
}



/************ End of main, typing related code *************************************/





function getkey(e)
{
  if (window.event) return window.event.keyCode
  else if (e) return e.which
     else return null;
}

function inpMode(form,e)
{
   if ( (!Opera && getkey(e) == 123) || getkey(e) == 27 )
   {
      if (typeof UseVirtKbd != 'undefined')
      {
         if (UseVirtKbd)
             chgLang(form);   
      }
      else
         chgLang(form);   
             
      if (Br == "IE")
          e.returnValue=false;
   }    
}                       
                        // 17 - Ctrl, 123 - F12, ESC - 27        
                        // IE - standard behavior for TEXTAREA - 
                        // remove all text if press Esc          
function chgLang(form)
{
  if (Lang == 'E')
  {
    Lang = 'R';
    form.lang[0].checked = true;
  }
  else
  {
    Lang = 'E';
    form.lang[1].checked = true;
  }
  txtControl.focus();
}

function swapImage(name,image)
{
  if (window.document.images)
      window.document.images[name].src = image;
}

function chgLayout(myForm, sName, l, imgTagName)
{
  Layout = l.value;

  // l.checked = true;
  l.selected = true;
  
  txtControl.focus();
   
  if (Layout == '1') swapImage(imgTagName,'../../../img/sys/keyb_gor/yazhert.gif')
  else if (Layout == '2') swapImage(imgTagName,'../../../img/sys/keyb_gor/yawerto.gif')
  else if (Layout == '3') swapImage(imgTagName,'../../../img/sys/keyb_gor/yashert.gif')  
  else if (Layout == '4') swapImage(imgTagName,'../../../img/sys/keyb_gor/yaschert.gif')  
  else if (Layout == '5') swapImage(imgTagName,'../../../img/sys/keyb_gor/student.gif')  // AATSEEL Student
  else if (Layout == '6') swapImage(imgTagName,'../../../img/sys/keyb_gor/yawert2.gif')  
  else if (Layout == '7') swapImage(imgTagName,'../../../img/sys/keyb_gor/yashert2.gif')  
  else if (Layout == '8') swapImage(imgTagName,'../../../img/sys/keyb_gor/yazhert2.gif')  
  else if (Layout == '9') swapImage(imgTagName,'../../../img/sys/keyb_gor/yazhert3.gif')  // ~ orig of SoftCorp
  else if (Layout == '10') swapImage(imgTagName,'../../../img/sys/keyb_gor/yayuertj.gif')
  else if (Layout == '11') swapImage(imgTagName,'../../../img/sys/keyb_gor/eruniver.gif') // russnet.org
  else if (Layout == '30') swapImage(imgTagName,'../../../img/sys/keyb_gor/std_ruo.gif')
  else if (Layout == '31') swapImage(imgTagName,'../../../img/sys/keyb_gor/std_rutw.gif')
  else if (Layout == '32') swapImage(imgTagName,'../../../img/sys/keyb_gor/alphabet.gif')
  else if (Layout == '33') swapImage(imgTagName,'../../../img/sys/keyb_gor/std_ukr.gif')
  else if (Layout == '888')
       {   
         if (interfaceLanguage == 'R')
            swapImage(imgTagName,'../../../img/sys/keyb_gor/cyr-lat.gif');  
         else   
            swapImage(imgTagName,'../../../img/sys/keyb_gor/cyr-late.gif');  
       }   

  else
  {
       if (typeof JSnonUSwasLoaded != 'undefined')
         if (JSnonUSwasLoaded) nonUSchangeLayout(myForm, Layout, imgTagName);
  }
           

  if (sName == "Slayouts")
  {        
     myForm.Flayouts.options[0].selected = true;   
     if (ShowToLatin)  myForm.Latin.options[0].selected = true;
  }        
  else if (sName == "Flayouts")
  {        
     myForm.Slayouts.options[0].selected = true;   
     if (ShowToLatin) myForm.Latin.options[0].selected = true;   
  }        
  else     
  {        
        // "Latin" then:
        myForm.Flayouts.options[0].selected = true;
        myForm.Slayouts.options[0].selected = true;
  }        
           
}          
           
           
function CopyText(box, parent_box)
{          
   var txt = parent_box.value + box.value;
           
   parent_box.value = txt;
   // parent_box.focus();
}          
           
function saveCaret(elem)
{          
  if ( elem.isTextEdit ) 
    elem.caretPos = document.selection.createRange();
}          
           
function insertAtCaret(textElement, newText)
{   
  if ( textElement.isTextEdit )
  { 
    if ( !textElement.caretPos )
    {
       saveCaret(textElement);       
    }
    
    var caretPos = textElement.caretPos;
    caretPos.text = newText;
    caretPos.select(); 
  } 
}   

 
var Mouse30 = "¨!\"¹;%:?*()_+ÉÖÓÊÅÍÃØÙÇÕÚ/ÔÛÂÀÏÐÎËÄÆÝ/|ß×ÑÌÈÒÜÁÞ,¸1234567890-=éöóêåíãøùçõú\\ôûâàïðîëäæý\\\\ÿ÷ñìèòüáþ.";
var Mouse31 = "+1234567890=\\ÉÖÓÊÅÍÃØÙÇÕÚ(ÔÛÂÀÏÐÎËÄÆÝ(|ß×ÑÌÈÒÜÁÞ¨|¹-/\":,._?%!;éöóêåíãøùçõú)ôûâàïðîëäæý)\\ÿ÷ñìèòüáþ¸";
var Mouse32 = "~!@#$%^&*()_+ÀÁÂÃÄÅ¨ÆÇÈÉÊ|ËÌÍÎÏÐÑÒÓÔÕ||Ö×ØÙÚÛÜÝÞß`1234567890-=àáâãäå¸æçèéê\\ëìíîïðñòóôõ\\\\ö÷øùúûüýþÿ";
var Mouse33 = "¨!\"¹;%:?*()_¥ÉÖÓÊÅÍÃØÙÇÕ¯/Ô²ÂÀÏÐÎËÄÆª/|ß×ÑÌÈÒÜÁÞ,¸1234567890-´éöóêåíãøùçõ¿\\ô³âàïðîëäæº\\\\ÿ÷ñìèòüáþ.";
var Mouse34 = "¨!\"¹;%:?*()_+ÉÖÓÊÅÍÃØÙÇÕÚ/ÔÛÂÀÏÐÎËÄÆÝ/>ß×ÑÌÈÒÜÁÞ,¸1234567890-=éöóêåíãøùçõú\\ôûâàïðîëäæý\\<ÿ÷ñìèòüáþ.";

var Mouse1  = "Þ!¨¸$%Úú*()_ÜßÆÅÐÒÛÓÈÎÏØÙÝÀÑÄÔÃ×ÉÊË:\"Ý|ÇÕÖÂÁÍÌ<>?þ1234567890-üÿæåðòûóèîïøùýàñäôã÷éêë;'ý\\çõöâáíì,./";
var Mouse2  = "Þ!¨¸$%Úú*()_ÜßÂÅÐÒÛÓÈÎÏØÙÝÀÑÄÔÃ×ÉÊË:\"Ý|ÇÕÖÆÁÍÌ<>?þ1234567890-üÿâåðòûóèîïøùýàñäôã÷éêë;'ý\\çõöæáíì,./";
var Mouse3  = "Þ!¨¸$%Úú*()_ÜßØÅÐÒÛÓÈÎÏÆÙÝÀÑÄÔÃ×ÉÊË:\"Ý|ÇÕÖÆÁÍÌ<>?þ1234567890-üÿøåðòûóèîïæùýàñäôã÷éêë;'ý\\çõöæáíì,./";
var Mouse4  = "Þ!ÚúÜ%¨¸*()_+ßÙÅÐÒÛÓÈÎÏÆØÝÀÑÄÔÃ×ÉÊË:\"Ý|ÇÕÖÂÁÍÌ<>?þ1234567890-=ÿùåðòûóèîïæøýàñäôã÷éêë;üý\\çõöâáíì,./";
var Mouse5  = "¨!@#\":^&*()_ÚßØÅÐÒÛÓÈÎÏÞÙÝÀÑÄÔÃ×ÉÊËÜÆÝ|ÇÕÖÂÁÍÌ<>?¸1234567890-úÿøåðòûóèîïþùýàñäôã÷éêëüæý\\çõöâáíì,./";
var Mouse6  = "Þ!¨¸$%Úú*()_×ßÂÅÐÒÛÓÈÎÏØÙÝÀÑÄÔÃÕÉÊË:\"Ý|ÇÜÖÆÁÍÌ<>?þ1234567890-÷ÿâåðòûóèîïøùýàñäôãõéêë;'ý\\çüöæáíì,./";
var Mouse7  = "¨!-#$%^&*()ÝÙßØÅÐÒÛÓÈÎÏÞÚ|ÀÑÄÔÃÕÉÊË×Æ||ÇÜÖÂÁÍÌ<>?¸1234567890ýùÿøåðòûóèîïþú\\àñäôãõéêë÷æ\\\\çüöâáíì,./";
var Mouse8  = "Þ!¨¸$%Úú*()_×ßÆÅÐÒÛÓÈÎÏØÙÝÀÑÄÔÃÕÉÊË:\"Ý|ÇÜÖÂÁÍÌ<>?þ1234567890-÷ÿæåðòûóèîïøùýàñäôãõéêë;'ý\\çüöâáíì,./";
var Mouse9  = "Þ!\"#?%\\/*()_ÚßÆÅÐÒÛÓÈÎÏØÙÝÀÑÄÔÃÕÉÊË×¨Ý|ÇÜÖÂÁÍÌ;:Úþ1234567890-úÿæåðòûóèîïøùýàñäôãõéêë÷¸ý\\çüöâáíì,.ú";
var Mouse10 = "¨!\"#;%:?*()_+ßÞÅÐÒÉÓÈÎÏÛÚ|ÀÑÄÔÃÕÆÊË×Ö||ÇÙØÂÁÍÌÜ,Ý¸1234567890-=ÿþåðòéóèîïûú\\àñäôãõæêë÷ö\\\\çùøâáíìü.ý";
var Mouse11 = "Ý¹!-\":«»?()-ÚßØÅÐÒÛÓÈÎÏÞÙ¨ÀÑÄÔÃ×ÉÊËÜÆ¨|ÇÕÖÂÁÍÌ;>?ý1234567890-úÿøåðòûóèîïþù¸àñäôã÷éêëüæ¸\\çõöâáíì,./";
              

function fromAlphabet(LetNumber, evt)
{
  var CurrentKey; 
  if (  Layout != 888  )
  {
    var ListName;
    if (Layout < 60 && Layout > 40)  // non-US: std_ru layout for larger physical keyboard is the same for every language
    {
      if (KbdPhysical == "UK")       // |\ on the button in the bottom left
         ListName = Mouse30;
      else                           // <> on the button in the bottom left
         ListName = Mouse34;
    } 
    else
     ListName = eval("Mouse" + Layout);
     
    var ShiftNum = 49;
        
    if (evt.shiftKey)
        CurrentKey =  ListName.charAt(LetNumber);
    else
        CurrentKey =  ListName.charAt(LetNumber+ShiftNum);
    
    txtControl.focus();

    if (Br == "NN")
    {
       if (typeof txtControl.setSelectionRange != 'undefined')
       {
         var oldSelectionStart = txtControl.selectionStart;
         var oldSelectionEnd = txtControl.selectionEnd;
         var selectedText = txtControl.value.substring(oldSelectionStart, oldSelectionEnd);
         var newText = CurrentKey;
         
         var scrollTop, scrollLeft;                                            
         if (txtControl.type == 'textarea' &&                                  
             typeof txtControl.scrollTop != 'undefined')                       
         {                                                                     
            scrollTop  = txtControl.scrollTop;                                 
            scrollLeft = txtControl.scrollLeft;  
         }                                                                     
         txtControl.value =                                                                                 
                  txtControl.value.substring(0, oldSelectionStart) +                                        
                  newText +                                                                                 
                  txtControl.value.substring(oldSelectionEnd);                                              
                                                                                                            
         if (typeof scrollTop != 'undefined')                                                               
         {                                                                                                  
            txtControl.scrollTop  = scrollTop;                                                              
            txtControl.scrollLeft = scrollLeft;                                                            
         }                                                                                                  
         txtControl.setSelectionRange(oldSelectionStart + newText.length,                                   
                                      oldSelectionStart + newText.length);                                  
       }
    }
    else if (Br == "IE")
         { 
            insertAtCaret(txtControl,CurrentKey);
         }
         else
            txtControl.value += CurrentKey;
   } 
}


/* Paul Gorodyansky, author of the site
   "Cyrillic (Russian): instructions for Windows and Internet": 
   http://ourworld.compuserve.com/homepages/PaulGor/
   same as http://RusWin.net
*/


