  
 // Change Path to  vkb  folder _if necessary_ (измените путь к папке  vkb   _если нужно_):
 // for example, to (например, на) "/vkb/" - child of root directory (папка vkb  - в корневом каталоге)
 
 //    ( same can be done in HTML file via parameter   vkb_Path  
 //      то же самое можно сделать, задав в HTML файле параметр  vkb_Path )

if (typeof vkb_Path == 'undefined') 

    vkb_Path = "/javascripts/vkb/";   // Folder  vkb  - under a folder with a Keyboard's page
                         // Папка   vkb  - под-каталог того каталога, где лежит страница с Клавиатурой


//  *************** file contains Cyrillic in UTF-8 encoding     ********************
//  *************** этот файл - в кодировке UTF-8 ********************
// 
//  Therefore encoding MUST be specified in HTML (поэтому кодировка должна быть указана в HTML):
//
//  <script type='text/javascript' src='vkb/vkb_load.js' charset='utf-8'></script>
//

/* Cyrillic Virtual (on-screen) keyboard - Russian and Ukrainian:  load JavaScript files
   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)

  Author's site - "Cyrillic (Russian): instructions for Windows and Internet": 
  http://ourworld.compuserve.com/homepages/PaulGor/
  ( same as http://RusWin.net )
*/   

// Browser detection

var vkb_Netscape, vkb_MSIE, vkb_Opera, vkb_Unknown, vkb_NN1, vkb_NN2, vkb_Ffox=false;
var vkb_Win, vkb_Mac, vkb_Other;
var vkb_NetscapeVer, vkb_MSIEVer, vkb_OperaVer=0, vkb_strOperaPos, vkb_NetscapeOK;

var vkb_Br = "0";

vkb_Netscape = navigator.appName == "Netscape";
vkb_MSIE = navigator.appName == "Microsoft Internet Explorer";
vkb_Opera = navigator.userAgent.indexOf("Opera") > -1;

vkb_Unknown = !(vkb_Netscape || vkb_MSIE || vkb_Opera);

vkb_NetscapeOK = false;

// detect platform
var vkb_n;
vkb_Win = navigator.userAgent.indexOf("Win") > -1;
vkb_Mac = navigator.userAgent.indexOf("Mac") > -1;
vkb_Other = !(vkb_Win || vkb_Mac);

// now extract version numbers

if(vkb_Netscape)
{
  vkb_NetscapeVer = parseFloat(navigator.appVersion);
  if (vkb_NetscapeVer>4)
  {
    vkb_n = navigator.userAgent;
           
    if (vkb_n.indexOf("Netscape/") != -1)
    {
       vkb_NN1 = vkb_n.substr(vkb_n.indexOf("Netscape/")+9);
       vkb_NN1 = parseFloat(vkb_NN1);
    }
    vkb_NN1 = vkb_n.substr(vkb_n.indexOf("rv:")+3);
    vkb_NN1 = parseFloat(vkb_NN1); 

    if (vkb_NN1 >= "1.3")
        vkb_NetscapeOK = true;
  }
  if (vkb_NetscapeOK)
  {
      vkb_Br="NN";    
      if (vkb_n.indexOf("Firefox") != -1) vkb_Ffox = true;
  }
}
else if(vkb_MSIE)
{
  vkb_n = navigator.userAgent;
  vkb_MSIEVer = vkb_n.substr(vkb_n.indexOf("MSIE ")+("MSIE ").length, 4);
  vkb_MSIEVer = parseFloat(vkb_MSIEVer); 
  // converts it into a floating point number

  if(vkb_Opera)
  {
     vkb_strOperaPos = vkb_n.indexOf("Opera/"); // "Opera " or "Opera/"
     if (vkb_strOperaPos == -1)
       vkb_OperaVer = vkb_n.substr(vkb_n.indexOf("Opera ")+("Opera ").length, 4);
     else
       vkb_OperaVer = vkb_n.substr(vkb_strOperaPos + ("Opera/").length, 4);    
        
     vkb_OperaVer = parseFloat(vkb_OperaVer);
  }
  else
    vkb_Br = "IE";
}
else if(vkb_Opera)  // if Opera does not identify itself as MSIE: idetifies itself as "Opera"
{
  vkb_n = navigator.userAgent;
  vkb_strOperaPos = vkb_n.indexOf("Opera/"); // "Opera " or "Opera/"

  if (vkb_strOperaPos == -1)
      vkb_OperaVer = vkb_n.substr(vkb_n.indexOf("Opera ")+("Opera ").length, 4);
  else
      vkb_OperaVer = vkb_n.substr(vkb_strOperaPos + ("Opera/").length, 4);    
        
  vkb_OperaVer = parseFloat(vkb_OperaVer);        
}

////////////////////////

// Load .js and .css

var vkb_txtControl = null; 

if (typeof vkb_Variant == 'undefined') 
   vkb_Variant = 2;                     // default - flying #2

if (typeof vkb_Fix == 'undefined') vkb_Fix = false;  // default - no Fix-position layer

vkb_hobj = document.getElementsByTagName('head')[0]; 

function vkb_loadHeadCss(vkb_hobj, cssFileName)
{
  var link1 = document.createElement('link'); 
  link1.type = "text/css"; 
  link1.rel = "stylesheet"; 
  link1.href = cssFileName; 
  vkb_hobj.appendChild(link1);  
}

function vkb_createHeadStyle(stHTML)
{
  var style1 = document.createElement('style'); 
  style1.type = "text/css"; 
  style1.innerHTML=stHTML;
  vkb_hobj.appendChild(style1);  
  
}

if (vkb_Ffox)
{
   var stHTML=".vkb_IEbutton  {color: #000000;background-color: #b5c9e2;}"+
   "\n.vkb_IEbutton2 {color: #000000;background-color: #b5c9e2;}"+
   "\n.vkb_IEbutton3 {margin-bottom: -1em; color: #000000; background-color: #b5c9e2;}"+
   "\n.vkb_button2{color: #000000;font-size: 10px;font-family: verdana, monospace;background-color: #999900;}"+
   "\n.vkb_short{MARGIN-BOTTOM: 0px;}\n.vkb_short1{MARGIN-BOTTOM: 0px; MARGIN-TOP: 5px;}"+
   "\n.vkb_tip {font: 12px Arial,Helvetica,sans-serif;border:solid 1px #666666;width:210px;padding:3px;z-index:100;"+
   "position:absolute;visibility:hidden;color:#000000;top:20px;left:90px;background-color:#ffffcc;}";
   
   if (vkb_Fix) 
      stHTML= stHTML + "\nbody > div#vkb_Layer {position: fixed; right: 5px; top: 5px;}";
      
   vkb_createHeadStyle(stHTML); 
}
else
{
   vkb_loadHeadCss(vkb_hobj, vkb_Path+"vkb.css");
   if (vkb_Fix) vkb_loadHeadCss(vkb_hobj, vkb_Path+"vkbfix.css");
}

if (vkb_Br=="IE" && !vkb_Opera)
{
   vkb_loadHeadCss(vkb_hobj, vkb_Path+"vkb_ie.css");   
   if (vkb_Fix) vkb_loadHeadCss(vkb_hobj, vkb_Path+"vkbfixie.css");   
}
    
//else
//   vkb_loadHeadCss(vkb_hobj, vkb_Path+"vkbbox.css");    
 
/////////////

 
document.write("<div id='vkb_divMouse' style='visibility:hidden'>Virtual Keyboard</div>");

if (vkb_Variant < 3)
{
  if (vkb_Fix)
    document.write("<div id='vkb_Layer' style='VISIBILITY: hidden;'></div>"); 
  else
    document.write("<div id='vkb_Layer' style='VISIBILITY: hidden; WIDTH: 500px; POSITION: absolute; right: 100px; top: 100px;'></div>");     
}

// if (vkb_Variant == 3 || vkb_Variant == 4) document.write("<div id='vkb_VirtKbd' style='display:none'></div>");

document.write("<div id='vkb_tempDiv' style='display:none'></div>");

//var temp1=document.createElement('script'); vkb_hobj.appendChild(temp1);
//temp1.text="vkb_JSwasLoaded = false; vkb_Variant=2;";

// Commented out above because better to set them - if needed - in different variants .htm
// Here is full set
// (see http://ourworld.compuserve.com/homepages/PaulGor/readme_e.htm):
// <script type="text/javascript">vkb_Variant=2; vkb_nonUS=true; vkb_InterfaceLanguage = 'E'; vkb_KbdVariant = '30'; vkb_ToLatin = true; vkb_ShowLic=false;</script>  
//
// for English-interface users (AATSEEL layout then is a default):
// <script type="text/javascript">vkb_InterfaceLanguage = 'E'; vkb_KbdVariant = '5'; vkb_ShowLic=false;</script>  
//
// for Russian-interface such line in .htm is needed only for Fly variants or if "30" (Standard)
// is not good as default  and want to have "1" as default - "YaZHert"

// no use anymore in vkb_JSwasLoaded = false; vkb_JSnonUSwasLoaded = false; vkb_JSnon_EwasLoaded = false;
// no need anymore - decided do not check if corresponding 3 .js have been loaded -
// don't want to have such additional code in .htm


// var vkb_InterfaceLanguage; var vkb_KbdVariant;   // in .htm now. If not let's create such variables:
if (typeof vkb_InterfaceLanguage == 'undefined') vkb_InterfaceLanguage = "0";
if (typeof vkb_KbdVariant == 'undefined') {vkb_KbdVariant = "0";}


function vkb_loadJs(obj, jsFileName)
{
  var script1 = document.createElement('script'); 
  script1.type = 'text/javascript'; 
  script1.charset = 'utf-8';   
  script1.src = jsFileName; 
  obj.appendChild(script1);  
}


// vkb_loadJs(vkb_hobj, vkb_Path + 'vkb_lay.js');

//////////////////////////////////////////////////
/* vkb_lay.js

   Cyrillic Virtual (on-screen) keyboard - Russian and Ukrainian: Layouts/images, mouse code
   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)

  Author's site - "Cyrillic (Russian): instructions for Windows and Internet": 
  http://ourworld.compuserve.com/homepages/PaulGor/
  ( same as http://RusWin.net )
  
  Below text is "utf-8" encoding ( Cyrillic in UTF-8 )
*/   

var vkb_JSnonUSwasLoaded = false;
                                 // YaZHert
  var vkb_KbdVariant1 = {          
    "~": "Ю",
    "!": "!",    
    "@": "ъ",
    "#": "Ъ",
    "$": "$",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ь",
    
    "`": "ю",
    "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 vkb_KbdVariant2 = {
    "~": "Ю",
    "!": "!",    
    "@": "ъ",
    "#": "Ъ",
    "$": "$",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ь",
    
    "`": "ю",
    "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": "м",    
    ",": ",",
    ".": ".",
    "/": "/"
  };
 // Copyright (c) 2005 Paul Gorodyansky - http://ourworld.compuserve.com/homepages/PaulGor
 // http://Klava.RusWin.net

                           // YaSHert
  var vkb_KbdVariant3 = {
    "~": "Ю",
    "!": "!",    
    "@": "ъ",
    "#": "Ъ",
    "$": "$",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ь",
    
    "`": "ю",
    "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 vkb_KbdVariant4 = {
    "~": "Ю",
    "!": "!",    
    "@": "ъ",
    "#": "Ъ",
    "$": "Ь",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "ю",
    "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 vkb_KbdVariant5 = {
    "~": "Ё",
    "!": "!",    
    "@": "@",
    "#": "#",
    "$": "\"",
    "%": ":",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ъ",
    
    "`": "ё",
    "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              - Maslov
  var vkb_KbdVariant6 = {
    "~": "Ю",
    "!": "!",    
    "@": "@",
    "#": "ъ",
    "$": "Ъ",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ч",
    
    "`": "ю",
    "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 vkb_KbdVariant7 = {
    "~": "Ё",
    "!": "!",    
    "@": "-",
    "#": "#",
    "$": "$",
    "%": "%",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "Э",
    "+": "Щ",
    
    "`": "ё",
    "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
  var vkb_KbdVariant8 = {
    "~": "Ъ",
    "!": "!",    
    "@": "\"",
    "#": "№",
    "$": "=",
    "%": "%",
    "^": "'",
    "&": "+",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Щ",
    
    "`": "ъ",
    "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 = Maslov with 'zh' and 'v' changed
    var vkb_KbdVariant9 = {
    "~": "Ю",
    "!": "!",    
    "@": "@",
    "#": "ъ",
    "$": "Ъ",
    "%": "%",
    "^": "ё",
    "&": "Ё",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ч",
    
    "`": "ю",
    "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 vkb_KbdVariant10 = {
    "~": "Ю",
    "!": "!",    
    "@": "\"",
    "#": "#",
    "$": "?",
    "%": "%",
    "^": "\\",
    "&": "/",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ъ",
    
    "`": "ю",
    "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 vkb_KbdVariant11 = {
    "~": "Ё",
    "!": "!",    
    "@": "\"",
    "#": "#",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "ё",
    "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 vkb_KbdVariant30 = {
    "~": "Ё",
    "!": "!",    
    "@": "\"",
    "#": "№",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "ё",
    "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 vkb_KbdVariant31 = {
    "~": "+",
    "!": "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 vkb_KbdVariant32 = {
    "~": "~",
    "!": "!",    
    "@": "@",
    "#": "#",
    "$": "$",
    "%": "%",
    "^": "^",
    "&": "&",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "+",
    
    "`": "`",
    "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 vkb_KbdVariant33 = {
    "~": "Ё",
    "!": "!",    
    "@": "\"",
    "#": "№",
    "$": ";",
    "%": "%",
    "^": ":",
    "&": "?",
    "*": "*",
    "(": "(",
    ")": ")",
    "_": "_",
    "+": "Ґ",
    
    "`": "ё",
    "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 vkb_KbdVariant888 = {   // 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 vkb_Pictures = {          
    '1': 'yazhert.png',                                     
    '2': 'yawert.png',                                
    '3': 'yashert.png',                                
    '4': 'yaschert.png',                               
    '5': 'student.png',  // AATSEEL.org's Student            
    '6': 'yawert2.png',  // V. Maslov's                               
    '7': 'yashert2.png',                               
    '8': 'yashert3.png',                               
    '9': 'yazhert2.png',                               
   '10': 'yazhert3.png',                              
   '11': 'yayuertj.png',                              
   '30': 'std_ru.png',                               
   '31': 'std_rutw.png',   // Russian "typewriter"                           
   '32': 'alphabet.png',                              
   '33': 'std_ukr.png',                               
  '888': 'cyr-lat.png'
  };     
  
var vkb_Mouse30 = "Ё!\"№;%:?*()_+ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭ/|ЯЧСМИТЬБЮ,ё1234567890-=йцукенгшщзхъ\\фывапролджэ\\\\ячсмитьбю.";
var vkb_Mouse31 = "+1234567890=\\ЙЦУКЕНГШЩЗХЪ(ФЫВАПРОЛДЖЭ(|ЯЧСМИТЬБЮЁ|№-/\":,._?%!;йцукенгшщзхъ)фывапролджэ)\\ячсмитьбюё";
var vkb_Mouse32 = "~!@#$%^&*()_+АБВГДЕЁЖЗИЙК|ЛМНОПРСТУФХ||ЦЧШЩЪЫЬЭЮЯ`1234567890-=абвгдеёжзийк\\лмнопрстуфх\\\\цчшщъыьэюя";
var vkb_Mouse33 = "Ё!\"№;%:?*()_ҐЙЦУКЕНГШЩЗХЇ/ФІВАПРОЛДЖЄ/ҐЯЧСМИТЬБЮ,ё1234567890-ґйцукенгшщзхї\\фівапролджє\\ґячсмитьбю.";
var vkb_Mouse34 = "Ё!\"№;%:?*()_+ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭ/>ЯЧСМИТЬБЮ,ё1234567890-=йцукенгшщзхъ\\фывапролджэ\\<ячсмитьбю.";

var vkb_Mouse1  = "Ю!ъЪ$%ёЁ*()_ЬЯЖЕРТЫУИОПШЩЭАСДФГЧЙКЛ:\"Э|ЗХЦВБНМ<>?ю1234567890-ьяжертыуиопшщэасдфгчйкл;'э\\зхцвбнм,./";
var vkb_Mouse2  = "Ю!ъЪ$%ёЁ*()_ЬЯВЕРТЫУИОПШЩЭАСДФГЧЙКЛ:\"Э|ЗХЦЖБНМ<>?ю1234567890-ьявертыуиопшщэасдфгчйкл;'э\\зхцжбнм,./";
var vkb_Mouse3  = "Ю!ъЪ$%ёЁ*()_ЬЯШЕРТЫУИОПЖЩЭАСДФГЧЙКЛ:\"Э|ЗХЦЖБНМ<>?ю1234567890-ьяшертыуиопжщэасдфгчйкл;'э\\зхцжбнм,./";
var vkb_Mouse4  = "Ю!ъЪЬ%ёЁ*()_+ЯЩЕРТЫУИОПЖШЭАСДФГЧЙКЛ:\"Э|ЗХЦВБНМ<>?ю1234567890-=ящертыуиопжшэасдфгчйкл;ьэ\\зхцвбнм,./";
var vkb_Mouse5  = "Ё!@#\":^&*()_ЪЯШЕРТЫУИОПЮЩЭАСДФГЧЙКЛЬЖЭ|ЗХЦВБНМ<>?ё1234567890-ъяшертыуиопющэасдфгчйкльжэ\\зхцвбнм,./";
var vkb_Mouse6  = "Ю!@ъЪ%ёЁ*()_ЧЯВЕРТЫУИОПШЩЭАСДФГХЙКЛ:\"Э|ЗЬЦЖБНМ<>?ю1234567890-чявертыуиопшщэасдфгхйкл;'э\\зьцжбнм,./";
var vkb_Mouse7  = "Ё!-#$%^&*()ЭЩЯШЕРТЫУИОПЮЪ|АСДФГХЙКЛЧЖ||ЗЬЦВБНМ<>?ё1234567890эщяшертыуиопюъ\\асдфгхйклчж\\\\зьцвбнм,./";
var vkb_Mouse8  = "Ъ!\"№=%'+*()_ЩЯШЕРТЫУИОПЮЭЁАСДФГХЙКЛЧЬЁ|ЗЖЦВБНМ;:?ъ1234567890-щяшертыуиопюэёасдфгхйклчьё\\зжцвбнм,./";
var vkb_Mouse9  = "Ю!@ъЪ%ёЁ*()_ЧЯЖЕРТЫУИОПШЩЭАСДФГХЙКЛ:\"Э|ЗЬЦВБНМ<>?ю1234567890-чяжертыуиопшщэасдфгхйкл;'э\\зьцвбнм,./";
var vkb_Mouse10  = "Ю!\"#?%\\/*()_ЪЯЖЕРТЫУИОПШЩЭАСДФГХЙКЛЧЁЭ|ЗЬЦВБНМ;:Ъю1234567890-ъяжертыуиопшщэасдфгхйклчёэ\\зьцвбнм,.ъ";
var vkb_Mouse11 = "Ё!\"#;%:?*()_+ЯЮЕРТЙУИОПЫЪ|АСДФГХЖКЛЧЦ||ЗЩШВБНМЬ,Эё1234567890-=яюертйуиопыъ\\асдфгхжклчц\\\\зщшвбнмь.э";


var vkb_layoutTypeArray = {
        '1': 'vkb_Flayouts',         
        '2': 'vkb_Flayouts', 
        '3': 'vkb_Flayouts',
        '4': 'vkb_Flayouts', 
        '5': 'vkb_Flayouts', 
        '6': 'vkb_Flayouts', 
        '7': 'vkb_Flayouts', 
        '8': 'vkb_Flayouts',  
        '9': 'vkb_Flayouts', 
       '10': 'vkb_Flayouts', 
       '11': 'vkb_Flayouts',  
       '30': 'vkb_Slayouts', 
       '31': 'vkb_Slayouts', 
       '32': 'vkb_Slayouts', 
       '33': 'vkb_Slayouts'  
};      

var vkb_optionArray = {
        '1': 1,         
        '2': 2, 
        '3': 3,
        '4': 4, 
        '5': 5, 
        '6': 6, 
        '7': 7, 
        '8': 8,  
        '9': 9, 
       '10': 10, 
       '11': 11,  
       '30': 1, 
       '31': 2, 
       '32': 3, 
       '33': 4  
};      

//////////////////////////////////////////////////////////
        
function vkb_findPosX(obj)
{       
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function vkb_findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

/////////////////////////////////////////////////////////////
// Extended Tooltip Javascript:
// copyright 9th August 2002, 3rd July 2005
// by Stephen Chapman, Felgall Pty Ltd
//
// Paul G: Modified, it was no choice: z-index in IE does not work with form's selection elements,
// so if they are under my mapped image, then tooltip's text is behind Selection elements
// Had to show tooltips always at the same position related to my image, where
// there are no Selection elements on the way
var vkb_DH = 0;var vkb_an = 0;var vkb_al = 0;var vkb_ai = 0;
if (document.getElementById) {vkb_ai = 1; vkb_DH = 1;}
else
{
  if (document.all) {vkb_al = 1; vkb_DH = 1;}
  else
  {browserVersion = parseInt(navigator.appVersion);
   if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) 
   {vkb_an = 1; vkb_DH = 1;}}}
function vkb_fd(oi, wS)
{ if (vkb_ai) return wS ? document.getElementById(oi).style : document.getElementById(oi);
  if (vkb_al) return wS ? document.all[oi].style: document.all[oi]; 
  if (vkb_an) return document.layers[oi];
}
function vkb_pw() {return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? document.body.clientWidth:null;}
function vkb_mouseX(evt) {if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return null;}
function vkb_mouseY(evt) {if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return null;}
function vkb_popUp(evt,oi,elID, t,l)
{
        if (vkb_KbdVariant == '888') return; 
        var myObj=document.getElementById(elID);
        var toppos = vkb_findPosY(myObj)+ (t);
        var leftpos = vkb_findPosX(myObj)+ (l);
        
        if (vkb_DH) {var wp = vkb_pw(); ds = vkb_fd(oi,1); dm = vkb_fd(oi,0); st = ds.visibility; if (dm.offsetWidth) ew = dm.offsetWidth; else if (dm.clip.width) ew = dm.clip.width; if (st == "visible" || st == "show") { ds.visibility = "hidden"; } else {tv = toppos + 20; lv = leftpos - (ew/4); if (lv < 2) lv = 2; else if (lv + ew > wp) lv -= ew/2; if (!vkb_an) {lv += 'px';tv += 'px';} ds.left = lv; ds.top = tv; ds.visibility = "visible";}}
        // if (vkb_DH) {var wp = vkb_pw(); ds = vkb_fd(oi,1); dm = vkb_fd(oi,0); st = ds.visibility; if (dm.offsetWidth) ew = dm.offsetWidth; else if (dm.clip.width) ew = dm.clip.width; if (st == "visible" || st == "show") { ds.visibility = "hidden"; } else {tv = vkb_mouseY(evt) + 20; lv = vkb_mouseX(evt) - (ew/4); if (lv < 2) lv = 2; else if (lv + ew > wp) lv -= ew/2; if (!vkb_an) {lv += 'px';tv += 'px';} ds.left = lv; ds.top = tv; ds.visibility = "visible";}}
}
/////////////////////////////////////////////////////////////



// document.write("<div id='vkb_divMouse' style='visibility:hidden'>Virtual Keyboard</div>");

function vkb_setImageMapForMouse(variant) 
{

var mouse_HTML =
"<map name='mouse'>" +
"<area shape='rect' coords='3,3,22,24'      onclick=vkb_fromAlphabet(0,event) title=''>" +
"<area shape='rect' coords='29,2,47,24'     onclick=vkb_fromAlphabet(1,event) title=''>" +
"<area shape='rect' coords='54,2,72,23'     onclick=vkb_fromAlphabet(2,event) title=''>" +
"<area shape='rect' coords='79,2,97,24'     onclick=vkb_fromAlphabet(3,event) title=''>" +
"<area shape='rect' coords='105,2,123,25'   onclick=vkb_fromAlphabet(4,event) title=''>" +
"<area shape='rect' coords='130,3,148,24'   onclick=vkb_fromAlphabet(5,event) title=''>" +
"<area shape='rect' coords='155,3,174,25'   onclick=vkb_fromAlphabet(6,event) title=''>" +
"<area shape='rect' coords='179,2,199,24'   onclick=vkb_fromAlphabet(7,event) title=''>" +
"<area shape='rect' coords='204,1,225,25'   onclick=vkb_fromAlphabet(8,event) title=''>" +
"<area shape='rect' coords='230,1,250,25'   onclick=vkb_fromAlphabet(9,event) title=''>" +
"<area shape='rect' coords='256,3,276,25'   onclick=vkb_fromAlphabet(10,event) title=''>" +
"<area shape='rect' coords='282,3,300,24'   onclick=vkb_fromAlphabet(11,event) title=''>" +
"<area shape='rect' coords='308,4,327,24'   onclick=vkb_fromAlphabet(12,event) title=''>" +
"<area shape='rect' coords='37,30,59,53'    onclick=vkb_fromAlphabet(13,event) title=''>" +
"<area shape='rect' coords='63,30,84,52'    onclick=vkb_fromAlphabet(14,event) title=''>" +
"<area shape='rect' coords='88,29,109,53'   onclick=vkb_fromAlphabet(15,event) title=''>" +
"<area shape='rect' coords='115,30,134,52'  onclick=vkb_fromAlphabet(16,event) title=''>" +
"<area shape='rect' coords='139,30,159,52'  onclick=vkb_fromAlphabet(17,event) title=''>" +
"<area shape='rect' coords='165,31,185,52'  onclick=vkb_fromAlphabet(18,event) title=''>" +
"<area shape='rect' coords='190,30,210,52'  onclick=vkb_fromAlphabet(19,event) title=''>" +
"<area shape='rect' coords='216,30,235,52'  onclick=vkb_fromAlphabet(20,event) title=''>" +
"<area shape='rect' coords='241,30,261,52'  onclick=vkb_fromAlphabet(21,event) title=''>" +
"<area shape='rect' coords='265,30,287,53'  onclick=vkb_fromAlphabet(22,event) title=''>" +
"<area shape='rect' coords='291,31,312,52'  onclick=vkb_fromAlphabet(23,event) title=''>" +
"<area shape='rect' coords='317,31,343,52'  onclick=vkb_fromAlphabet(24,event) title=''>" +
"<area shape='rect' coords='345,31,373,52'  onclick=vkb_fromAlphabet(25,event) title=''>" +
"<area shape='rect' coords='44,57,66,81'    onclick=vkb_fromAlphabet(26,event) title=''>" +
"<area shape='rect' coords='70,57,92,81'    onclick=vkb_fromAlphabet(27,event) title=''>" +
"<area shape='rect' coords='96,58,117,81'   onclick=vkb_fromAlphabet(28,event) title=''>" +
"<area shape='rect' coords='122,58,142,81'  onclick=vkb_fromAlphabet(29,event) title=''>" +
"<area shape='rect' coords='146,58,167,81'  onclick=vkb_fromAlphabet(30,event) title=''>" +
"<area shape='rect' coords='172,58,192,81'  onclick=vkb_fromAlphabet(31,event) title=''>" +
"<area shape='rect' coords='197,58,218,81'  onclick=vkb_fromAlphabet(32,event) title=''>" +
"<area shape='rect' coords='223,58,243,80'  onclick=vkb_fromAlphabet(33,event) title=''>" +
"<area shape='rect' coords='248,58,268,81'  onclick=vkb_fromAlphabet(34,event) title=''>" +
"<area shape='rect' coords='272,58,295,81'  onclick=vkb_fromAlphabet(35,event) title=''>" +
"<area shape='rect' coords='298,58,319,81'  onclick=vkb_fromAlphabet(36,event) title=''>" +
"<area shape='rect' coords='323,59,344,81'  onclick=vkb_fromAlphabet(37,event) title=''>" +
"<area shape='rect' coords='40,86,62,109'   onclick=vkb_fromAlphabet(38,event) title=''>" +
"<area shape='rect' coords='67,87,88,109'   onclick=vkb_fromAlphabet(39,event) title=''>" +
"<area shape='rect' coords='92,86,112,109'  onclick=vkb_fromAlphabet(40,event) title=''>" +
"<area shape='rect' coords='118,87,137,109' onclick=vkb_fromAlphabet(41,event) title=''>" +
"<area shape='rect' coords='143,87,162,109' onclick=vkb_fromAlphabet(42,event) title=''>" +
"<area shape='rect' coords='168,86,189,109' onclick=vkb_fromAlphabet(43,event) title=''>" +
"<area shape='rect' coords='194,85,212,109' onclick=vkb_fromAlphabet(44,event) title=''>" +
"<area shape='rect' coords='219,86,238,109' onclick=vkb_fromAlphabet(45,event) title=''>" +
"<area shape='rect' coords='245,88,265,109' onclick=vkb_fromAlphabet(46,event) title=''>" +
"<area shape='rect' coords='270,86,289,109' onclick=vkb_fromAlphabet(47,event) title=''>" +
"<area shape='rect' coords='295,86,315,109' onclick=vkb_fromAlphabet(48,event) title=''>";

// different tooltip location for Flying Layer variant
var tmp;
if (variant < 3)
 tmp =
  "<area shape='rect' coords='349,57,378,81'  onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" title=''>" + 
  "<area shape='rect' coords='323,86,378,109' onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" title=''>" +
  "<area shape='rect' coords='3,30,31,52'     onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" title=''>" +
  "<area shape='rect' coords='4,60,37,81'     onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" title=''>" +
  "<area shape='rect' coords='5,88,33,109'    onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',100,50)\" title=''>";  
else  
 tmp =
  "<area shape='rect' coords='349,57,378,81'  onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" title=''>" + 
  "<area shape='rect' coords='323,86,378,109' onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" title=''>" +
  "<area shape='rect' coords='3,30,31,52'     onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" title=''>" +
  "<area shape='rect' coords='4,60,37,81'     onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" title=''>" +
  "<area shape='rect' coords='5,88,33,109'    onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',-100,395)\" title=''>";
  
 mouse_HTML = mouse_HTML + tmp +  "<area shape='default' nohref></map>";
 
 var mTip = (vkb_InterfaceLanguage == "E") ?
            "<div id='vkb_t1' class='vkb_tip'><SMALL>Type normally - with your regular physical <u>keyboard</u>, using either <font color='#0000FF'>Standard</font> or <NOBR><font color='#0000FF'>Phonetic</font> (homophonic)</NOBR> layout.<P>In addition, <u>mouse</u> based input also works and there upper-case symbols are typed by holding <B>Shift</B> button on the physical keyboard while clicking on symbol.</SMALL></div>"
             :
            "<div id='vkb_t1' class='vkb_tip'><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <NOBR><u>клавиатуру</u> -</NOBR> с <NOBR>ТОЙ ЖЕ</NOBR> раскладкой (расположением букв), что <u>дома</u> у Вас: <font color='#0000FF'><B>Стандартной</B></font> раскладкой или <NOBR><font color='#0000FF'><B>Фонетической</B></font> (транслитерационной).</NOBR><P>В дополнение работает и ввод <u>мышкой</u>, где заглавные буквы получаются, если щёлкать по букве, держа нажатой клавишу <B>Shift</B> на обычной клавиатуре</small></div>";
 
 mouse_HTML = mouse_HTML + mTip;

 var mDiv_mouse=document.getElementById("vkb_divMouse");
 mDiv_mouse.innerHTML = mouse_HTML;
  
}

if (vkb_Variant < 3)
{
  if (vkb_InterfaceLanguage == "E") vkb_loadJs(vkb_hobj, vkb_Path+"vkbfly_e.js");
  else                              vkb_loadJs(vkb_hobj, vkb_Path+"vkbfly.js");
}
else if (vkb_Variant < 5)
{
  if (vkb_InterfaceLanguage == "E") vkb_loadJs(vkb_hobj, vkb_Path+"vkbbox_e.js");
  else                              vkb_loadJs(vkb_hobj, vkb_Path+"vkbbox.js");
}



// vkb_loadJs(vkb_hobj, vkb_Path+"vkb.js");


  
///////////////////////////////////////////////////

/////////////////
/*
 * EventManager.js
 * by Keith Gaughan
 *
 * This allows event handlers to be registered unobtrusively, and cleans
 * them up on unload to prevent memory leaks.
 *
 * Copyright (c) Keith Gaughan, 2005.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * (CPL) which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/cpl.php
 *
 * This software is covered by a modified version of the Common Public License
 * (CPL), where Keith Gaughan is the Agreement Steward, and the licensing
 * agreement is covered by the laws of the Republic of Ireland.
 */

// For implementations that don't include the push() methods for arrays.
if (!Array.prototype.push)
{
    Array.prototype.push = function(elem)
    {
        this[this.length] = elem;
    }
}

var EventManager =
{
    _registry: null,

    Initialise: function()
    {
        if (this._registry == null)
        {
            this._registry = [];

            // Register the cleanup handler on page unload.
            EventManager.Add(window, "unload", this.CleanUp);
        }
    },

    /**
     * Registers an event and handler with the manager.
     *
     * @param  obj         Object handler will be attached to.
     * @param  type        Name of event handler responds to.
     * @param  fn          Handler function.
     * @param  useCapture  Use event capture. False by default.
     *                     If you don't understand this, ignore it.
     *
     * @return True if handler registered, else false.
     */
    Add: function(obj, type, fn, useCapture)
    {
        this.Initialise();

        // If a string was passed in, it's an id.
        if (typeof obj == "string")
            obj = document.getElementById(obj);
        if (obj == null || fn == null)
            return false;

        // Mozilla/W3C listeners?
        if (obj.addEventListener)
        {
            obj.addEventListener(type, fn, useCapture);
            this._registry.push({obj: obj, type: type, fn: fn, useCapture: useCapture});
            return true;
        }

        // IE-style listeners?
        if (obj.attachEvent && obj.attachEvent("on" + type, fn))
        {
            this._registry.push({obj: obj, type: type, fn: fn, useCapture: false});
            return true;
        }

        return false;
    },

    /**
     * Cleans up all the registered event handlers.
     */
    CleanUp: function()
    {
        for (var i = 0; i < EventManager._registry.length; i++)
        {
            with (EventManager._registry[i])
            {
                // Mozilla/W3C listeners?
                if (obj.removeEventListener)
                    obj.removeEventListener(type, fn, useCapture);
                // IE-style listeners?
                else if (obj.detachEvent)
                    obj.detachEvent("on" + type, fn);
            }
        }

        // Kill off the registry itself to get rid of the last remaining
        // references.
        EventManager._registry = null;
    }
};
//////////////////////////////////////////////////////



/* vkb.js

   Cyrillic Virtual (on-screen) keyboard - Russian and Ukrainian:  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)

  Author'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, vkb_Opera 8 and newer and with
 *      Mozilla software:
 *      Mozilla ver. 1.3 or higher, vkb_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, vkb_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.
 *
 */


vkb_JSwasLoaded = true;

var vkb_showWrongBrowserOnce=false; var vkb_MsgButtonStr; var vkb_isInitDone = false;
var vkb_PicTagLay; var vkb_PicTag;

var vkb_CyrFromKbd; 

var vkb_KbdPhysical, vkb_KbdVariantNumber, vkb_curImage, vkb_fName, vkb_WrongBr, vkb_ShowKbdVariantsMenu;
var vkb_KbdVariantNonDefault=false; // not given in .htm as parameter
var vkb_buildHTMLlater=false;
var vkb_UseVirtKbd=false; 

var vkb_txtType=0;       //   1 - <input type=text; 2 - <textarea; 3 - password
var vkb_keySwitch = "";  // vkb_Opera - F6; IE and Firefox - Esc or F12; unless vkb_txtType !=2 - then Firefox: F12 only
                         // (see http://RusWin.net/scrdoc.htm for details)

var vkb_numInputTypeTextFields=0; // >0 if some fields are <input type=text  - Firefox then: just F12
var vkb_numInputFields=0;  // one or more text typing fields


var vkb_radioSwitchKbd0, vkb_radioSwitchKbd1;
var vkb_SlayoutsItem, vkb_FlayoutsItem, vkb_LatinItem, vkb_KeyboardsItem;


function vkb_initSettings()
{
 
 if (vkb_InterfaceLanguage == "0") vkb_InterfaceLanguage = 'R'; // not pre-setup in .htm
 
 vkb_KbdPhysical = "EN";
   
 if (vkb_InterfaceLanguage == 'E')  vkb_curImage="student.png";
 else                               vkb_curImage="std_ru.png";  
   
 if (vkb_KbdVariant != "0")   //  pre-setup in .htm's list of parameters
 {
   vkb_KbdVariantNonDefault = true;     
   vkb_KbdVariantNumber = parseFloat(vkb_KbdVariant); 
   if (vkb_KbdVariantNumber > 39)
   {
       if (vkb_nonUS) 
          vkb_KbdPhysicalCalculate(vkb_KbdVariantNumber); // sets vkb_KbdPhysical and vkb_curImage  
       else // erroneously; set back 
          {vkb_KbdVariantNonDefault = false; vkb_KbdVariant = "0"; vkb_KbdVariantNumber = 0;}
   }

 }
   
   
 if (vkb_KbdVariant == "0")   // not pre-setup in .htm
 {
   if (vkb_InterfaceLanguage == 'E') vkb_KbdVariant = '5';
   else                              vkb_KbdVariant = '30'; 
 }   
 
 
 if (vkb_Variant != 1)
    vkb_CyrFromKbd = 'Off';  // until Keyboard is shown
 
 

 vkb_WrongBr=false;
 if (vkb_Br == "IE") vkb_fName="vkb_fIE";
 else if (vkb_Br == "NN") vkb_fName="vkb_fNN";
      else
      {
        vkb_WrongBr = true; vkb_fName="vkb_fOther"; 
        if (vkb_InterfaceLanguage == "E")
         vkb_MsgButtonStr = "<SMALL><input name='MsgButton' type='button' style='background-color: #FF00FF'"+
                        "onclick=window.open('"+vkb_Path+"browse_e.htm','','top=20,left=120,width=640,height=520,scrollbars=yes,resizable=yes,status=yes')"+
                        " value='Important! About your browser'></SMALL>";                                  
        else                
         vkb_MsgButtonStr = "<SMALL><input name='MsgButton' type='button' style='background-color: #FF00FF'"+
                        "onclick=window.open('"+vkb_Path+"browse_r.htm','','top=20,left=120,width=640,height=520,scrollbars=yes,resizable=yes,status=yes')"+
                        " value='Важно! Про Ваш Браузер'></SMALL>";          
      }

 vkb_ShowKbdVariantsMenu = false;
}
 
function vkb_KbdPhysicalCalculate(num)  // non-US keyboard modes
{
  if (num < 60) // Standard 
  {
    switch (num)
    {                                                                           
      case 41:   vkb_KbdPhysical = "DE"; vkb_curImage = "std_de.png"; break;
      case 42:   vkb_KbdPhysical = "SV"; vkb_curImage = "std_sv.png"; break;
      case 43:   vkb_KbdPhysical = "FR"; vkb_curImage = "std_fr.png"; break;
      case 44:   vkb_KbdPhysical = "IT"; vkb_curImage = "std_it.png"; break;
      case 45:   vkb_KbdPhysical = "ES"; vkb_curImage = "std_es.png"; break;
      case 46:   vkb_KbdPhysical = "UK"; vkb_curImage = "std_uk.png"; break;            
      case 47:   vkb_KbdPhysical = "IL"; vkb_curImage = "std_il.png"; break;
      default: break;
    }      
  }
  else 
  {
    if (num < 70) {vkb_KbdPhysical = "DE"; if (num==61) vkb_curImage="german1.png"; else vkb_curImage="german2.png";}
    else if (num < 80) {vkb_KbdPhysical = "SV"; if (num==71) vkb_curImage="swedish1.png"; else if (num==72) vkb_curImage="swedish2.png"; else vkb_curImage="swedish3.png";}
         else if (num < 90) {vkb_KbdPhysical = "FR"; vkb_curImage="french1.png";}
              else if (num < 100) {vkb_KbdPhysical = "IT"; vkb_curImage="italian1.png";}    
                   else if (num < 110) {vkb_KbdPhysical = "ES"; vkb_curImage="spanish1.png";}        
                        else if (num < 120) {vkb_KbdPhysical = "UK"; vkb_curImage="british1.png";}        
                             else if (num < 130) {vkb_KbdPhysical = "IL"; if (num==121) vkb_curImage="hebrew1.png"; else vkb_curImage="hebrew2.png";}    
  }
  
} 
        
//////////////////////////////////////////////////////////
        
        
var vkb_ListName;
        
// var vkb_KBDSymbols = "~!@#$%^&*()_+`1234567890-=QWERTYUIOP{}|qwertyuiop[]\\ASDFGHJKL:\"asdfghjkl;'ZXCVBNM<>?zxcvbnm,./";
var vkb_RUSymbols = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        
var vkb_Show_ToLatin = false;
if (typeof vkb_ToLatin != 'undefined')
{       
  if (vkb_ToLatin)  vkb_Show_ToLatin = true;
}       
if (vkb_Opera) {if (vkb_OperaVer >= 8) vkb_Br = "NN";}

if (typeof vkb_CyrOnOffInit == "undefined") vkb_CyrOnOffInit = true; // not pre-setup in .htm; use default

vkb_JSnonUSwasLoaded = false;
if (typeof vkb_nonUS != 'undefined') 
{
   if (vkb_nonUS) 
   {
      vkb_loadJs(vkb_hobj, vkb_Path+"vkbnonus.js");
      if (vkb_InterfaceLanguage == 'E') vkb_loadJs(vkb_hobj, vkb_Path+"vkbnon_e.js");
   }
}


vkb_initSettings();
vkb_setImageMapForMouse(vkb_Variant);

////////////////////////////////////////////////////////////////////////////////////////

/*          Main routine of simulating "regular system Cyrillic keyboard input"
 *
 * 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 vkb_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
*/

var vkb_dotReplacement=null;

function vkb_changeKey (evt)
{
        var targ=null;   // text input object on which event occured
        if (!evt) var evt = window.event;
        if (evt.target) targ = evt.target;
        else if (evt.srcElement) targ = evt.srcElement;
        
        var textControl = targ;        
        
        
  if (vkb_CyrFromKbd == 'Off' && vkb_KbdVariant != '888')  // regular latin editing
     return true;
  
  if (evt.ctrlKey)
     return true;
      
  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 keyChecker = eval(vkb_fName); // function name		
  var CurrentKey;

  if (keyCode)
     CurrentKey = String.fromCharCode(keyCode);
  
  var keyCheck = keyChecker(keyCode, CurrentKey);
  
  if (keyCode && window.event && !window.opera)   // IE
  {
    if (keyCheck.cancelKey)
    {
      evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
      return false;
    }
    else if (keyCheck.replaceKey)  
    {
      window.event.keyCode = keyCheck.newKeyCode;
      evt.preventDefault ? evt.preventDefault() : evt.returnValue = true;
      return true;
    }
    else
      return true;
  }
  else if (typeof textControl.setSelectionRange != 'undefined') // NN
  {
    if (keyCheck.cancelKey)
    {
      evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
      return false;
    }
    else if (keyCheck.replaceKey)
    {

      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);

      if ( vkb_Opera && (vkb_OperaVer >= 9) && (keyCode == 46 || keyCode == 35 || keyCode == 36) )
      {                                         // Del, Home and End - otherwise Opera 9 works badly
          vkb_dotReplacement = newText;
          return true;
      }
      else vkb_dotReplacement = null;

      // cancel the key event and insert the newKey for the current selection
      evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;

      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)
  {
    evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
    return false;
  }
  else
   return true;
}


function vkb_fIE (keyCode, CurrentKey) {
 
  if (vkb_KbdVariant == '888')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
         if ( vkb_txtControl.isTextEdit )
         {
             var newString = vkb_KbdVariant888[CurrentKey];
             vkb_insertAtCaret(vkb_txtControl, newString);
         }
         return { cancelKey: true };         
      }
      else
         return { cancelKey: false };
  }
  else       // Regular           
  {
   if (vkb_CyrFromKbd == 'On')
   {
       var newKeyOut = eval("vkb_KbdVariant" + vkb_KbdVariant)[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 http://Klava.RusWin.net
  // http://ourworld.compuserve.com/homepages/PaulGor/
function vkb_fNN (keyCode, CurrentKey) {

  if (vkb_KbdVariant == '888')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
          return { replaceKey: true, newKeyCode: keyCode, newKey:
                   vkb_KbdVariant888[CurrentKey] };
      }
      else
         return { cancelKey: false };
  }
  else
  {
   if (vkb_CyrFromKbd == 'On')
   { 
       var newKeyOut = eval("vkb_KbdVariant" + vkb_KbdVariant)[CurrentKey];
       if (newKeyOut)
         return { replaceKey: true, newKeyCode: keyCode, newKey: newKeyOut };
       else
         return { cancelKey: false };
   }
   else 
      return { cancelKey: false };
  } 
}

function vkb_fOther (keyCode, CurrentKey) {
 
  if (vkb_KbdVariant == '888')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
         var newString = vkb_KbdVariant888[CurrentKey];
         vkb_txtControl.value += newString;
         return { cancelKey: true };         
      }
      else
         return { cancelKey: false };
  }
  else
  {
   if (vkb_CyrFromKbd == 'On')
   {
      var newKeyOut = eval("vkb_KbdVariant" + vkb_KbdVariant)[CurrentKey];
      if (newKeyOut)
      {
         vkb_txtControl.value += newKeyOut;
         return { cancelKey: true };
      }
      else
         return { cancelKey: false };
   }
   else
      return { cancelKey: false };
  }   
}



/************ End of main, typing related code *************************************/

function vkb_Kbd_OnOff(ev)
{
   if (!ev) var ev = window.event;
   
   var mKey = vkb_ModeSwitchKeyPressed(ev);
   
   var swKeyPressed = false;
   if (vkb_Opera)
   {
     if (vkb_OperaVer < 8) {if (mKey == 27) swKeyPressed = true;}
     else {if (mKey == 117) swKeyPressed = true;}     
   }
   else
   {
     if (vkb_Ffox && vkb_numInputTypeTextFields > 0) {if (mKey == 123) swKeyPressed = true;} // just F12
     else  if (mKey == 27 || mKey == 123) swKeyPressed = true;
   } 
   
   if (swKeyPressed)
   {
      if (vkb_Variant == 1) vkb_switchMode();  
      else {if (vkb_UseVirtKbd) vkb_switchMode();}
         
      if (vkb_Br == "IE") ev.returnValue=false;
   }    
}                       
                        // 17 - Ctrl, 123 - F12, 117 - F6, ESC - 27        
                        // IE - standard behavior for TEXTAREA - 
                        // remove all text if press Esc. Can be overridden, unlike Firefox and vkb_Opera 9:
                        // Firefox does the same, but only in <input type='text' and not in <textarea          
                        // vkb_Opera - since ver 9 - Esc: a) "deselect all" b) input field looses focus   
                        // vkb_Opera 7 - can not use F6. So in vkb_Opera 7 - use Esc, then from ver 8 - F6


function vkb_ModeSwitchKeyPressed(ev)
{
  if (window.event) return window.event.keyCode
  else if (ev) return ev.which
       else return null;
}


function vkb_InputModeChanged()
{
    if (vkb_radioSwitchKbd0.checked) {
	vkb_CyrFromKbd = 'On';
    } else {
	vkb_CyrFromKbd = 'Off';
    }

    vkb_txtControl.focus();
    createCookie(vl_kbd_on_off_cookie_name, vkb_CyrFromKbd, 10 * 365);
}

function vkb_syncInputMode() {
    if (vkb_CyrFromKbd == 'Off') {
	vkb_radioSwitchKbd1.checked = true;
    } else {
	vkb_CyrFromKbd = 'On';
	vkb_radioSwitchKbd0.checked = true;  // "Off"
    }

    createCookie(vl_kbd_on_off_cookie_name, vkb_CyrFromKbd, 10 * 365);
}

function vkb_switchMode()
{
  if (vkb_CyrFromKbd == 'Off')
  {
    vkb_CyrFromKbd = 'On';
    
    vkb_radioSwitchKbd0.checked = true; // "On"
  }
  else
  {
    vkb_CyrFromKbd = 'Off';
    
    vkb_radioSwitchKbd1.checked = true;  // "Off"
  }

  createCookie(vl_kbd_on_off_cookie_name, vkb_CyrFromKbd, 10 * 365);  
  vkb_txtControl.focus();  
}

function vkb_NewKbdPic(name,picture)
{
  if (vkb_KbdVariant == "888" && vkb_InterfaceLanguage == 'E')
      picture = vkb_Path+"cyr-late.png";

  if (window.document.images) window.document.images[name].src = picture;
}

function vkb_SetVariant(sName, variant, picTagName)
{
  var pic;


  if (variant.value == "0") {variant.value = vkb_KbdVariant; return false;}
  
  variant.selected = true;  
  
  if ( vkb_KbdVariantNonDefault  && !vkb_isInitDone ) {}
  else {vkb_KbdVariant = variant.value;  }

  if (vkb_KbdPhysical != "EN") // non-US
  {
     if (typeof vkb_JSnonUSwasLoaded != 'undefined')
       if (vkb_JSnonUSwasLoaded) vkb_nonUSSetVariant(vkb_KbdVariant, picTagName);
  }
  else
  { 
     pic = vkb_Path + vkb_Pictures[vkb_KbdVariant];
     vkb_NewKbdPic(picTagName, pic);
  }   

  if (sName == "vkb_Slayouts")
  {        
     vkb_FlayoutsItem.options[0].selected = true;   
     if (vkb_Show_ToLatin)  vkb_LatinItem.options[0].selected = true;
  }        
  else if (sName == "vkb_Flayouts")
  {        
     vkb_SlayoutsItem.options[0].selected = true;   
     if (vkb_Show_ToLatin) vkb_LatinItem.options[0].selected = true;   
  }        
  else     
  {        
        // "vkb_Latin" then:
        vkb_FlayoutsItem.options[0].selected = true;
        vkb_SlayoutsItem.options[0].selected = true;
  }        

  vkb_KbdVariant = variant.value;
  createCookie(vl_kbd_cookie_name, vkb_KbdVariant, 10 * 365);
}
           
function vkb_CopyText(box, parent_box)
{          
   var txt = parent_box.value + box.value;
           
   parent_box.value = txt;
   // parent_box.focus();
}          

function vkb_saveCaretEvent(evt)
{
        var targ=null;   // text input object on which event occured
        if (!evt) var evt = window.event;
        if (evt.target) targ = evt.target;
        else if (evt.srcElement) targ = evt.srcElement;
        
        vkb_saveCaret(targ);
}
           
function vkb_saveCaret(elem)
{          
  if ( elem.isTextEdit ) 
     elem.caretPos = document.selection.createRange();
     
  if ( vkb_Opera && (vkb_OperaVer >= 9) && (vkb_dotReplacement != null) )
  {
            var oldSelectionStart = elem.selectionStart;
            var oldSelectionEnd = elem.selectionEnd;
            var selectedText = elem.value.substring(oldSelectionStart, oldSelectionEnd);
            
            var str1 = elem.value.substring(0, oldSelectionStart);
            var sym = str1.substring(str1.length - 1);

            if (sym == "." || sym == "#" || sym == "$")
            {
               elem.value = elem.value.substring(0, oldSelectionStart-1) +          
                            vkb_dotReplacement +
                            elem.value.substring(oldSelectionEnd);                
               
               elem.setSelectionRange(oldSelectionStart, oldSelectionStart);
            }
            vkb_dotReplacement = null;
  }     
}          
           
function vkb_insertAtCaret(textElement, newText)
{   
  
  if ( textElement.isTextEdit )
  { 
    if ( !textElement.caretPos )
    {
         vkb_saveCaret(textElement);       
    }
    
    var caretPos = textElement.caretPos;
    
    caretPos.text = newText;
    caretPos.select(); 
  } 
}   

function vkb_fromAlphabet(LetNumber, evt)
{
  var CurrentKey; 
  if (  vkb_KbdVariant != 888  )
  {
    var vkb_ListName;
    if (vkb_KbdVariant < 60 && vkb_KbdVariant > 40)  // non-US: std_ru layout for larger physical keyboard is the same for every language
    {
      if (vkb_KbdPhysical == "UK")       // |\ on the button in the bottom left
         vkb_ListName = vkb_Mouse30;
      else                           // <> on the button in the bottom left
         vkb_ListName = vkb_Mouse34;
    } 
    else
     vkb_ListName = eval("vkb_Mouse" + vkb_KbdVariant);
     
    var ShiftNum = 49;
        
    if (evt.shiftKey)
        CurrentKey =  vkb_ListName.charAt(LetNumber);
    else
        CurrentKey =  vkb_ListName.charAt(LetNumber+ShiftNum);

    vkb_txtControl.focus();

    if (vkb_Br == "NN")
    {
       if (typeof vkb_txtControl.setSelectionRange != 'undefined')
       {
         var oldSelectionStart = vkb_txtControl.selectionStart;
         var oldSelectionEnd = vkb_txtControl.selectionEnd;
         var selectedText = vkb_txtControl.value.substring(oldSelectionStart, oldSelectionEnd);
         var newText = CurrentKey;
         
         var scrollTop, scrollLeft;                                            
         if (vkb_txtControl.type == 'textarea' &&                                  
             typeof vkb_txtControl.scrollTop != 'undefined')                       
         {                                                                     
            scrollTop  = vkb_txtControl.scrollTop;                                 
            scrollLeft = vkb_txtControl.scrollLeft;  
         }                                                                     
         vkb_txtControl.value =                                                                                 
                  vkb_txtControl.value.substring(0, oldSelectionStart) +                                        
                  newText +                                                                                 
                  vkb_txtControl.value.substring(oldSelectionEnd);                                              
                                                                                                            
         if (typeof scrollTop != 'undefined')                                                               
         {                                                                                                  
            vkb_txtControl.scrollTop  = scrollTop;                                                              
            vkb_txtControl.scrollLeft = scrollLeft;                                                            
         }                                                                                                  
         vkb_txtControl.setSelectionRange(oldSelectionStart + newText.length,                                   
                                      oldSelectionStart + newText.length);                                  
       }
    }
    else if (vkb_Br == "IE")
         { 
            vkb_insertAtCaret(vkb_txtControl,CurrentKey);
         }
         else
            vkb_txtControl.value += CurrentKey;
   } 
}

function vkb_getOuterHTML(obj)
{
 var temp=obj.cloneNode(true);
 document.getElementById('vkb_tempDiv').appendChild(temp);
 var outer=document.getElementById('vkb_tempDiv').innerHTML;
 document.getElementById('vkb_tempDiv').innerHTML="";
 return outer;
}

if (vkb_Br == "NN" && !vkb_Opera)
{
   eval("HTMLElement.prototype.outerHTML getter = function (){return vkb_getOuterHTML(this)}");
   eval("HTMLElement.prototype.outerHTML setter = function (str){var r = this.ownerDocument.createRange(); r.setStartBefore(this); var df = r.createContextualFragment(str); this.parentNode.replaceChild(df, this);}");        
} 
       

function vkb_setCursorPosition(field, pos)
{
   if (field.createTextRange)
   {
      var range = field.createTextRange();
      range.collapse(true);
      range.moveEnd('character', pos);
      range.moveStart('character', pos);
      range.select();
   }
   else if (field.selectionEnd) {field.selectionEnd = pos;}
} 

function vkb_OnFocus(e)
{
  var txtField=null; // text input object on which event occured
  if (!e) var e = window.event;
  if (e.target) txtField = e.target;
  else if (e.srcElement) txtField = e.srcElement;
  
  vkb_txtControl = txtField;
}


function vkb_addAttributes(obj, variant)
{

  // var obj_value = "";  if (obj.value != "") obj_value = obj.value;
  
  EventManager.Add(obj, "keydown",  vkb_Kbd_OnOff,     false);
  EventManager.Add(obj, "focus",    vkb_OnFocus,       false);
  
  EventManager.Add(obj, "select",   vkb_saveCaretEvent, false);
  EventManager.Add(obj, "click",    vkb_saveCaretEvent, false);
  EventManager.Add(obj, "keyup",    vkb_saveCaretEvent, false);
  
  EventManager.Add(obj, "keypress", vkb_changeKey, false);
}

function vkb_Editable(Fld)
{ 
  var tmp1 = Fld.style.display; tmp1.toLowerCase();
  var tmp2 = Fld.style.visibility; tmp2.toLowerCase();
  
  if (tmp1 == "none") return false;
  if (tmp2 == "hidden") return false;
  if (Fld.disabled) return false;
  
  var curParent = Fld.parentNode;
  while (curParent.tagName != "BODY" && curParent.tagName != "HTML")
  {
    if (curParent.nodeType == 1)
    {
       tmp1 = curParent.style.display; tmp1.toLowerCase();
       tmp2 = curParent.style.visibility; tmp2.toLowerCase();
  
       if (tmp1 == "none") return false;
       if (tmp2 == "hidden") return false;
       if (curParent.disabled) return false;
    }
    
    curParent = curParent.parentNode;
  }  
  
  return true;
}

function vkb_Init()
{

  vkb_numInputFields = 0;
  vkb_numInputTypeTextFields = 0;
  var firstTxtNum=0, isFirstTxt=true; isFirstArea=false;
  
  var txtAreas = document.getElementsByTagName("textarea");
  var len_txtAreas = txtAreas.length; 

  var inputFields = document.getElementsByTagName("input");
  var len_inputFields = inputFields.length; 

  for (var j=0; j < len_inputFields; j++)
  {
    cur_inputField = inputFields[j];
    if ( cur_inputField.type=='text' || cur_inputField.type=='password' )
    {
      if ( vkb_Editable(cur_inputField) )
      {  
         vkb_numInputFields++; vkb_numInputTypeTextFields++;    
       
         if (isFirstTxt) {isFirstTxt=false; firstTxtNum=j;}
    
         vkb_addAttributes(cur_inputField, vkb_Variant);
      }
    }
  }

  for (var i=0; i < len_txtAreas; i++)
  {
    cur_txtArea = txtAreas[i];
    
    
    if ( vkb_Editable(cur_txtArea) )
    {
       vkb_numInputFields++;         
    
       if (isFirstTxt) {isFirstTxt=false; isFirstArea = true; firstTxtNum=i;}
    
       vkb_addAttributes(cur_txtArea, vkb_Variant);
    }   
  }

  if (vkb_numInputFields == 0) return;

  if (isFirstArea)
     vkb_txtControl = txtAreas[firstTxtNum]; 
  else   
     vkb_txtControl = inputFields[firstTxtNum]; 

  if ( vkb_numInputFields == 1 ) // just one input field 
  { 
     if (vkb_txtControl.type == "text") vkb_txtType=1;
        else if (vkb_txtControl.type == "textarea") vkb_txtType=2;
             else if (vkb_txtControl.type == "password") vkb_txtType=3;
       
     if (vkb_Opera)  vkb_keySwitch = (vkb_OperaVer < 8) ? "<B>Esc</B>" : "<B>F6</B>";
     else if (vkb_Ffox && vkb_txtType != 2) vkb_keySwitch = "<B>F12</B>"; // Firefox: <input type="text" - Esc not Ok
          else {if (vkb_InterfaceLanguage == "E") vkb_keySwitch = "<B>Esc</B> or <B>F12</B>"; else vkb_keySwitch = "<B>Esc</B> или <B>F12</B>";}
          
  }
  else // several input fields
  {
     if (vkb_numInputTypeTextFields == 0) // all fields are Textarea
     {
        if (vkb_Opera)  vkb_keySwitch = (vkb_OperaVer < 8) ? "<B>Esc</B>" : "<B>F6</B>";
        else {if (vkb_InterfaceLanguage == "E") vkb_keySwitch = "<B>Esc</B> or <B>F12</B>"; else vkb_keySwitch = "<B>Esc</B> или <B>F12</B>";}                
     }
     else  // some fields are not Textarea
     {
        if (vkb_Opera)  vkb_keySwitch = (vkb_OperaVer < 8) ? "<B>Esc</B>" : "<B>F6</B>";
        else if (vkb_Ffox) vkb_keySwitch = "<B>F12</B>"; // Firefox: <input type="text" - Esc not Ok
             else {if (vkb_InterfaceLanguage == "E") vkb_keySwitch = "<B>Esc</B> or <B>F12</B>"; else vkb_keySwitch = "<B>Esc</B> или <B>F12</B>";}        
     }
  }
  
  if (vkb_Variant == 1)
  {
           vkb_radioSwitchKbd0 = document.getElementsByName("vkb_fromKbd")[0];
           vkb_radioSwitchKbd1 = document.getElementsByName("vkb_fromKbd")[1];

     if (vkb_CyrOnOffInit) {vkb_CyrFromKbd = 'On'; }
     else                  {vkb_CyrFromKbd = 'Off'; }
  }

  vkb_syncInputMode();
}

function vkb_showKbd()
{

  
  if (!vkb_isInitDone && vkb_Variant != 1) vkb_Init();
  
  if (vkb_txtControl == null) return;      // No input fields found
  
  if (!vkb_isInitDone)
  {
     if (vkb_Variant < 3)
        vkb_setFlyHTML(vkb_Variant);  // shows "Wait.." as layout image's Alt text while HTML is being built
     else
        vkb_setBoxHTML(vkb_Variant);  // shows "Wait.." as layout image's Alt text while HTML is being built   
        
     var tImg = document.getElementById('vkb_LayKbdPic');
     tImg.alt="";
     
     if (vkb_KbdVariantNonDefault) // change selection fields
     {
        if (vkb_KbdVariant <= 39)  // US keyboard
        {
           var layType = vkb_layoutTypeArray[vkb_KbdVariant];  
           var optionNum = vkb_optionArray[vkb_KbdVariant];
        
           if (layType == 'vkb_Slayouts')
              vkb_SetVariant(layType, vkb_SlayoutsItem.options[optionNum], 'vkb_LayKbdPic');
           else   
              vkb_SetVariant(layType, vkb_FlayoutsItem.options[optionNum], 'vkb_LayKbdPic');
        }
        else
        {
           var optionKbdNum = vkb_optionKbdArrayNonUS[vkb_KbdPhysical];
           
           // Keyboard option - "FR" or "DE" or ...
           if (vkb_InterfaceLanguage == 'E')
                vkb_chgKeyboardE(vkb_KeyboardsItem, vkb_KbdPhysical, optionKbdNum, 'vkb_LayKbdPic');
           else
                vkb_chgKeyboard(vkb_KeyboardsItem, vkb_KbdPhysical, optionKbdNum, 'vkb_LayKbdPic');

           
           // Layout option:
           var layType = vkb_layoutTypeArrayNonUS[vkb_KbdVariant];  
           var optionNum = vkb_optionArrayNonUS[vkb_KbdVariant];

           if (layType == 'vkb_Slayouts') 
              vkb_SetVariant(layType, vkb_SlayoutsItem.options[optionNum], 'vkb_LayKbdPic');
           else   
              vkb_SetVariant(layType, vkb_FlayoutsItem.options[optionNum], 'vkb_LayKbdPic');           
                      
        }
     }
  }     
  
   switch (vkb_Variant)                                                        
   {                                                                           
     case 1:  
     case 2:  
            vkb_showKbdFly();
            vkb_isInitDone = true;
            break;
     case 3:  
     case 4:       
            vkb_showKbdBox();
            vkb_isInitDone = true;
            break;                                                    
     default:                                                                  
            break;                                     
   }                              
  
}

var vkb_savedCyrFromKbd;

function vkb_CyrKbdOff() {
    vkb_savedCyrFromKbd = vkb_CyrFromKbd;

    if (vkb_CyrFromKbd == 'On')
	vkb_switchMode();
}

function vkb_CyrKbdRestore() {
    if (vkb_savedCyrFromKbd == 'On')
	vkb_switchMode();
}

///////////////////////////////////////////////////////////////



/* 
   Paul Gorodyansky, author of the site
   "Cyrillic (Russian): instructions for Windows and Internet": 
   http://ourworld.compuserve.com/homepages/PaulGor/
   same as http://RusWin.net
*/
