
/* Russian Virtual (on-screen) keyboard

  Copyright (c) 2003  Paul Gorodyansky.

  Paul Gorodyansky - paulgor@compuserve.com, author of the site
  "Cyrillic (Russian): instructions for Windows and Internet": 
  http://ourworld.compuserve.com/homepages/PaulGor/
  ( same as http://RusWin.net )
   
 *  
 *      This code is for
 *
 *      Russian On-Screen Keyboard - standard and phonetic layouts
 *      works with MS Internet Explorer and with Mozilla ver. 1.3 or higher,
 *      Netscape 7.1 or newer, Mozilla FireFox
 *
 */

JSwasLoaded = true;

var Netscape, MSIE, Opera, Unknown, NN1, NN2;
var Win, Mac, Other;
var NetscapeVer, MSIEVer, OperaVer, NetscapeOK, AlertMsg;

var Br = "1";

var ListName;

var KBDSymbols = "~!@#$%^&*()_+`1234567890-=QWERTYUIOP{}|qwertyuiop[]\\ASDFGHJKL:\"asdfghjkl;'ZXCVBNM<>?zxcvbnm,./";
var RUSymbols = "ÀÁÂÃÄÅ¨ÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäå¸æçèéêëìíîïðñòóôõö÷øùúûüýþÿ";

               
               
// detect browser

AlertMsg = " Works only with MS Internet Explorer or \n Netscape 7.1+ / Mozilla 1.3+ / FireFox \n Details on the page";
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);
   // alert("NetscapeVer = "+NetscapeVer);
  if (NetscapeVer>4)
  {

    n = navigator.userAgent;
    if (n.indexOf("Netscape/") != -1)
    {
       NN1 = n.substr(n.indexOf("Netscape/")+9);
       NN1 = parseFloat(NN1);
       // alert ("Official Netscape ver. "+NN1);
    }
    //else
    //{
       NN1 = n.substr(n.indexOf("rv:")+3);
       NN1 = parseFloat(NN1); 

       if (NN1 >= "1.3")
          NetscapeOK = true;
         // alert ("Mozilla ver. "+NN1 +" - 1.3 or later");
       // else
          // alert ("Mozilla ver. "+NN1 +" - older than 1.3");
         
    //}
  }
  if (!NetscapeOK)
      alert (AlertMsg);
  else    
  {
     Br="NN";    
     // alert(document.characterSet);
  }
}
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) {
    OperaVer = n.substr(n.indexOf("Opera ")+("Opera ").length, 4);
    OperaVer = parseFloat(OperaVer);
    alert (AlertMsg);
  }
  else
  {
    Br = "IE";
   // alert(document.charset);
  }
}
else
  alert (AlertMsg);





/*
 * 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
  
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
*/


                   // YaWert
  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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
                   // YaZHert
  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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
                             
                          // Student
  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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
                   // YaWert2
  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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };  
             
             // YaSHert2
  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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
  
             
                              // YaZHert2
    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": "ì",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
                             // YaZHert3
    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": "ì",    
    ",": ",",
    ".": ".",
    "/": "ú"
  };
  
                     // YaYuertj
  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": "ì",    
    ",": "ü",
    ".": ".",
    "/": "ý"
  };
  
          
                   // 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": "ü",    
    ",": "ý",
    ".": "þ",
    "/": "ÿ"
  };          
  
  
    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",
    "¨": "AE",
    "Æ": "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
    "¸": "ae",    // 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

  };




function changeKey (textControl, evt, keyChecker)
{
  
  var keyCode = void 0;
  if (Br == "NN")
  {
     keyCode =  evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;   
		
     if (evt.ctrlKey)		// Separate pressing 'c' from Ctrl/c
         keyCode = void 0;
  }
  else
  {
     keyCode = evt.keyCode ? evt.keyCode :
               evt.charCode ? evt.charCode :
               evt.which ? evt.which : void 0;   
  }
		
  var CurrentKey;

  if (keyCode)
  {
     CurrentKey = String.fromCharCode(keyCode);

    /*
    if (evt.charCode)
        alert("!!! "+CurrentKey+"  "+keyCode+" CharCode "+evt.charCode);

    if (evt.keyCode)  
      alert("!!! "+CurrentKey+"  "+keyCode+" KeyCode "+evt.keyCode);

    if (evt.which)  
      alert("!!! "+CurrentKey+"  "+keyCode+" Which "+evt.which);      
   */
  }
  
  var keyCheck = keyChecker(keyCode, CurrentKey);
  
  if (keyCode && window.event && !window.opera)
  {
    if (keyCheck.cancelKey)
    {
      return false;
    }
    else if (keyCheck.replaceKey)  // IE 
    {
      window.event.keyCode = keyCheck.newKeyCode;
      if (window.event.preventDefault)
      { 
          window.event.preventDefault();
      }
      return true;
    }
    else
    {
      return true;
    }
  }
  else if (typeof textControl.setSelectionRange != 'undefined')
  {
    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);
      textControl.value = 
        textControl.value.substring(0, oldSelectionStart) +
        newText +
        textControl.value.substring(oldSelectionEnd);
      textControl.setSelectionRange(oldSelectionStart + newText.length,
                                    oldSelectionStart + newText.length);
      return false;
    }
    else
    {
      return true;
    } 
  }
  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)
      {
         //var newKey = Layout888[CurrentKey];
         //alert (window.document.cyr.text.value);
         getCaretPos(window.document.cyr.text,CurrentKey);
         return { cancelKey: true };         
         // return { replaceKey: true, newKeyCode: newKey.charCodeAt(), newKey: newKey };    
      }
      else
      {
         return { cancelKey: false };
      }   
  }
  else
  {
   if (Lang == 'R')
   {
      if (KBDSymbols.indexOf(CurrentKey) != -1)
      {
         var newKey = eval("Layout" + Layout)[CurrentKey];
         return { replaceKey: true, newKeyCode: newKey.charCodeAt(), newKey: newKey };    
      }
      else
      {
         return { cancelKey: false };
      }
   }
   else
   {
         return { cancelKey: false };
   }    
  }   

}

function fNN (keyCode, CurrentKey) {
   //if (keyCode)
   //   alert("Inside zero "+CurrentKey + keyCode);
  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')
   { 
      if (KBDSymbols.indexOf(CurrentKey) != -1)
      {
         //if (keyCode)
         // alert("Inside "+CurrentKey + keyCode);
         return { replaceKey: true, newKeyCode: keyCode, newKey: eval("Layout" + Layout)[CurrentKey] };
      }
      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)
{
   // alert(getkey(e));
   if (getkey(e) == 123) chgLang(form); // 17 - Ctrl, 123 - F12
}

function chgLang(form)
{
  if (Lang == 'E')
  {
    Lang = 'R';
    if (interfaceLanguage == 'E')
       form.lang.value = "RU  Russian input mode";
    else   
       form.lang.value = " RU     Ðóññêèé ðåæèì ";
  }
  else
  {
    Lang = 'E';
    if (interfaceLanguage == 'E')
       form.lang.value = " EN  English input mode ";
    else   
       form.lang.value = "EN  Àíãëèéñêèé ðåæèì";    
  }
  form.text.focus();
}

function swapImage(name,image)
{
  if (window.document.images) window.document.images[name].src = image;
}

function chgLayout(form, sName, l)
{
  Layout = l.value;
  // l.checked = true;
  l.selected = true;
  form.text.focus();
  if (Layout == '1') swapImage('imgLayout','yawertO.gif')
  else if (Layout == '2') swapImage('imgLayout','yazhert.gif')
  else if (Layout == '3') swapImage('imgLayout','yashert.gif')  
  else if (Layout == '4') swapImage('imgLayout','student.gif')  
  else if (Layout == '5') swapImage('imgLayout','yawert2.gif')  
  else if (Layout == '6') swapImage('imgLayout','yashert2.gif')  
  else if (Layout == '7') swapImage('imgLayout','yazhert2.gif')  
  else if (Layout == '8') swapImage('imgLayout','yazhert3.gif')  // ~ orig of SoftCorp
  else if (Layout == '9') swapImage('imgLayout','yayuertj.gif')  
  else if (Layout == '30') swapImage('imgLayout','std_ruO.gif')
  else if (Layout == '31') swapImage('imgLayout','std_rutw.gif')
  else if (Layout == '32') swapImage('imgLayout','alphabet.gif')
  else if (Layout == '888')
       {
         if (interfaceLanguage == 'R')
            swapImage('imgLayout','cyr-lat.gif');  
         else   
            swapImage('imgLayout','cyr-late.gif');  
       }  
  
  if (sName == "Slayouts")
  {
     form.Flayouts.options[0].selected = true;   
     form.Latin.options[0].selected = true;
  }
  else if (sName == "Flayouts")
  {
     form.Slayouts.options[0].selected = true;   
     form.Latin.options[0].selected = true;   
  }
  else
  {
        // "Latin" then:
        form.Flayouts.options[0].selected = true;
        form.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 getCaretPos(elem, CurrentKey)
{
  if ( elem.isTextEdit && elem.caretPos )
  {
    var newKey = Layout888[CurrentKey];
    var orig = elem.value;
    var caretPos = elem.caretPos;
    caretPos.text = newKey;
  }
}

function getCaretPosAlph(elem, CurrentKey)
{
  if ( elem.isTextEdit )
  {
    if ( !elem.caretPos )
       saveCaret(elem);       

    var orig = elem.value;
    var caretPos = elem.caretPos;
    caretPos.text = CurrentKey; 
  }
}

var Mouse30 = "¨!\"¹;%:?*()_+ÉÖÓÊÅÍÃØÙÇÕÚ/ÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ,¸1234567890-=éöóêåíãøùçõú\\ôûâàïðîëäæýÿ÷ñìèòüáþ.";
var Mouse31 = "+1234567890=\\ÉÖÓÊÅÍÃØÙÇÕÚ(ÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ¨|¹-/\":,._?%!;éöóêåíãøùçõú)ôûâàïðîëäæýÿ÷ñìèòüáþ¸";
var Mouse32 = "~!@#$%^&*()_+ÀÁÂÃÄÅ¨ÆÇÈÉÊ|ËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß`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-=ÿþåðòéóèîïûú\\àñäôãõæêë÷öçùøâáíìü.ý";

function fromAlphabet(LetNumber, evt)
{
  var CurrentKey; 
  if (  Layout != 888  )
  {
        var ListName;
        var ShiftNum;
        
  
        ListName = eval("Mouse" + Layout);
        ShiftNum = 47;
            
        if (evt.shiftKey)
            CurrentKey =  ListName.charAt(LetNumber);
        else
            CurrentKey =  ListName.charAt(LetNumber+ShiftNum);
        
        
        var textControl = window.document.cyr.text;
        textControl.focus();
        if (Br == "NN")
        {
                if (typeof textControl.setSelectionRange != 'undefined')
                {
                        var oldSelectionStart = textControl.selectionStart;
                        var oldSelectionEnd = textControl.selectionEnd;
                        var selectedText = textControl.value.substring(oldSelectionStart, oldSelectionEnd);
                        var newText = CurrentKey;
                        textControl.value = 
                        textControl.value.substring(0, oldSelectionStart) +
                        newText +
                        textControl.value.substring(oldSelectionEnd);
                        textControl.setSelectionRange(oldSelectionStart + newText.length,
                                                      oldSelectionStart + newText.length);
                }
        }
        else  // IE
        {
                // document.selection.createRange().text = CurrentKey;

                getCaretPosAlph(textControl,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
*/


