// vkb_one.js - setup file; loads only when Keyboard button/link is clicked very first time

/*
   Cyrillic Virtual (on-screen) keyboard - Russian and Ukrainian: Layouts/images, mouse code
   Paul Gorodyansky
  
   Original: http://Klava.WinRus.com (http://WinRus.com/onklava.htm)
  
   Text below is in Cyrillic(Windows-1251) encoding
   Текст данного файла - в кодировке Cyrillic(Windows)
*/   



//////////////////////////////////////////////////////////
          
                   // 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_KbdVariant29 = {   // 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': 'vkb_zh.png',                                     
    '2': 'vkb_w.png',                                
    '3': 'vkb_sh.png',                                
    '4': 'vkb_sch.png',                               
    '5': 'vkb_stud.png',  // AATSEEL.org's Student            
    '6': 'vkb_w2.png',  // V. Maslov's                               
    '7': 'vkb_sh2.png',                               
    '8': 'vkb_sh3.png',                               
    '9': 'vkb_zh2.png',                               
   '10': 'vkb_zh3.png',                              
   '11': 'vkb_yu.png',                              
   '12': 'vkb_zhu.png',                              
   
   '29': 'vkb_lat.png',                               
   
   '30': 'vkb_ru.png',                               
   '31': 'vkb_rutw.png',   // Russian "typewriter"                           
   '32': 'vkb_alph.png',                              
   '33': 'vkb_ukr.png'
  };     

var vkb_layoutTypeArrayNonUS = {
'41':  'vkb_Slayouts',
'61':  'vkb_Flayouts',
'62':  'vkb_Flayouts',
'42':  'vkb_Slayouts', 
'71':  'vkb_Flayouts',
'72':  'vkb_Flayouts',
'73':  'vkb_Flayouts',
'43':  'vkb_Slayouts',
'81':  'vkb_Flayouts',
'44':  'vkb_Slayouts',
'91':  'vkb_Flayouts',
'45':  'vkb_Slayouts',
'101': 'vkb_Flayouts',
'46':  'vkb_Slayouts',
'111': 'vkb_Flayouts',
'112': 'vkb_Flayouts',
'47':  'vkb_Slayouts',
'121': 'vkb_Flayouts',
'122': 'vkb_Flayouts'
};     

var vkb_optionArrayNonUS = {        
'41':  1,
'61':  1,
'62':  2,
'42':  1,
'71':  1,
'72':  2,
'73':  3,
'43':  1,
'81':  1,
'44':  1,
'91':  1,
'45':  1,
'101': 1,
'46':  1,
'111': 1,
'112': 2,
'47':  1,
'121': 1,
'122': 2
};


var vkb_optionKbdArrayNonUS = {        
'DE':  1,
'SV':  2,
'FR':  3,
'IT':  4,
'ES':  5,
'IL':  6,
'UK':  7
};

  
var vkb_Mouse30 = "Ё!\"№;%:?*()_+ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭ/|ЯЧСМИТЬБЮ,ё1234567890-=йцукенгшщзхъ\\фывапролджэ\\\\ячсмитьбю.";
var vkb_Mouse31 = "+1234567890=\\ЙЦУКЕНГШЩЗХЪ(ФЫВАПРОЛДЖЭ(|ЯЧСМИТЬБЮЁ|№-/\":,._?%!;йцукенгшщзхъ)фывапролджэ)\\ячсмитьбюё";
var vkb_Mouse32 = "~!@#$%^&*()_+АБВГДЕЁЖЗИЙК|ЛМНОПРСТУФХ||ЦЧШЩЪЫЬЭЮЯ`1234567890-=абвгдеёжзийк\\лмнопрстуфх\\\\цчшщъыьэюя";
var vkb_Mouse33 = "Ё!\"№;%:?*()_ҐЙЦУКЕНГШЩЗХЇ/ФІВАПРОЛДЖЄ/ҐЯЧСМИТЬБЮ,ё1234567890-ґйцукенгшщзхї\\фівапролджє\\ґячсмитьбю.";
var vkb_Mouse34 = "Ё!\"№;%:?*()_+ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭ/>ЯЧСМИТЬБЮ,ё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',  
       '12': 'vkb_Flayouts',         
       
       '29': 'vkb_Latin',         
       
       '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,  
       '12': 12,         
       
       '29': 1,
       
       '30': 1, 
       '31': 2, 
       '32': 3, 
       '33': 4  
};      

//////////////////////////////////////////////////////////
        

/////////////////////////////////////////////////////////////

function vkb_tipFix(mode)
{
  var mTipDiv = document.getElementById("vkb_t1");      
  if (mode) mTipDiv.style.display =  ""; 
  else      mTipDiv.style.display = "none";
}

function vkb_setImageMapForMouse(variant) 
{
  var mouse_HTML =
"<map name='mouse'>" +
"<area shape='rect' coords='1,1,18,18'      onclick=vkb_fromAlphabet(0,event) title=''>" +
"<area shape='rect' coords='23,1,40,18'     onclick=vkb_fromAlphabet(1,event) title=''>" +
"<area shape='rect' coords='44,1,60,18'     onclick=vkb_fromAlphabet(2,event) title=''>" +
"<area shape='rect' coords='64,1,81,18'     onclick=vkb_fromAlphabet(3,event) title=''>" +
"<area shape='rect' coords='84,1,102,18'    onclick=vkb_fromAlphabet(4,event) title=''>" +
"<area shape='rect' coords='105,1,124,18'   onclick=vkb_fromAlphabet(5,event) title=''>" +
"<area shape='rect' coords='127,1,144,18'   onclick=vkb_fromAlphabet(6,event) title=''>" +
"<area shape='rect' coords='147,1,165,18'   onclick=vkb_fromAlphabet(7,event) title=''>" +
"<area shape='rect' coords='168,1,186,18'   onclick=vkb_fromAlphabet(8,event) title=''>" +
"<area shape='rect' coords='188,1,206,18'   onclick=vkb_fromAlphabet(9,event) title=''>" +
"<area shape='rect' coords='210,1,227,18'   onclick=vkb_fromAlphabet(10,event) title=''>" +
"<area shape='rect' coords='231,1,248,18'   onclick=vkb_fromAlphabet(11,event) title=''>" +
"<area shape='rect' coords='253,1,270,18'   onclick=vkb_fromAlphabet(12,event) title=''>" +
"<area shape='rect' coords='25,21,41,37'    onclick=vkb_fromAlphabet(13,event) title=''>" +
"<area shape='rect' coords='47,21,64,37'    onclick=vkb_fromAlphabet(14,event) title=''>" +
"<area shape='rect' coords='67,21,84,37'    onclick=vkb_fromAlphabet(15,event) title=''>" +
"<area shape='rect' coords='87,21,105,37'   onclick=vkb_fromAlphabet(16,event) title=''>" +
"<area shape='rect' coords='109,21,125,37'  onclick=vkb_fromAlphabet(17,event) title=''>" +
"<area shape='rect' coords='130,21,147,37'  onclick=vkb_fromAlphabet(18,event) title=''>" +
"<area shape='rect' coords='150,21,167,37'  onclick=vkb_fromAlphabet(19,event) title=''>" +
"<area shape='rect' coords='172,21,189,37'  onclick=vkb_fromAlphabet(20,event) title=''>" +
"<area shape='rect' coords='192,21,209,37'  onclick=vkb_fromAlphabet(21,event) title=''>" +
"<area shape='rect' coords='213,21,230,37'  onclick=vkb_fromAlphabet(22,event) title=''>" +
"<area shape='rect' coords='234,21,251,37'  onclick=vkb_fromAlphabet(23,event) title=''>" +
"<area shape='rect' coords='253,21,271,37'  onclick=vkb_fromAlphabet(24,event) title=''>" +
"<area shape='rect' coords='275,21,297,37'  onclick=vkb_fromAlphabet(250,event) title=''>" +
"<area shape='rect' coords='30,40,48,57'    onclick=vkb_fromAlphabet(26,event) title=''>" +
"<area shape='rect' coords='52,40,69,57'    onclick=vkb_fromAlphabet(27,event) title=''>" +
"<area shape='rect' coords='72,40,90,57'    onclick=vkb_fromAlphabet(28,event) title=''>" +
"<area shape='rect' coords='94,40,110,57'   onclick=vkb_fromAlphabet(29,event) title=''>" +
"<area shape='rect' coords='114,40,131,57'  onclick=vkb_fromAlphabet(30,event) title=''>" +
"<area shape='rect' coords='135,40,151,57'  onclick=vkb_fromAlphabet(31,event) title=''>" +
"<area shape='rect' coords='156,40,172,57'  onclick=vkb_fromAlphabet(32,event) title=''>" +
"<area shape='rect' coords='176,40,194,57'  onclick=vkb_fromAlphabet(33,event) title=''>" +
"<area shape='rect' coords='198,40,214,57'  onclick=vkb_fromAlphabet(34,event) title=''>" +
"<area shape='rect' coords='218,40,236,57'  onclick=vkb_fromAlphabet(35,event) title=''>" +
"<area shape='rect' coords='238,40,256,57'  onclick=vkb_fromAlphabet(36,event) title=''>" +
"<area shape='rect' coords='260,40,276,57'  onclick=vkb_fromAlphabet(370,event) title=''>" +
"<area shape='rect' coords='29,61,52,77'    onclick=vkb_fromAlphabet(380,event) title=''>" +
"<area shape='rect' coords='54,60,71,77'    onclick=vkb_fromAlphabet(39,event) title=''>" +
"<area shape='rect' coords='73,60,93,77'    onclick=vkb_fromAlphabet(40,event) title=''>" +
"<area shape='rect' coords='96,60,114,77'   onclick=vkb_fromAlphabet(41,event) title=''>" +
"<area shape='rect' coords='116,60,135,77'  onclick=vkb_fromAlphabet(42,event) title=''>" +
"<area shape='rect' coords='138,60,155,77'  onclick=vkb_fromAlphabet(43,event) title=''>" +
"<area shape='rect' coords='158,60,176,77'  onclick=vkb_fromAlphabet(44,event) title=''>" +
"<area shape='rect' coords='179,60,196,77'  onclick=vkb_fromAlphabet(45,event) title=''>" +
"<area shape='rect' coords='200,60,218,77'  onclick=vkb_fromAlphabet(46,event) title=''>" +
"<area shape='rect' coords='221,60,238,77'  onclick=vkb_fromAlphabet(47,event) title=''>" +
"<area shape='rect' coords='242,60,260,77'  onclick=vkb_fromAlphabet(48,event) title=''>" +
"<area shape='rect' coords='273,1,299,18'   onclick=vkb_fromAlphabet(701,event) title=''>" +
"<area shape='rect' coords='1,21,21,37'     onclick=vkb_fromAlphabet(702,event) title=''>" +
"<area shape='rect' coords='277,37,298,57'  onclick=vkb_fromAlphabet(603,event) title=''>" +
"<area shape='rect' coords='67,79,206,92'   onclick=vkb_fromAlphabet(604,event) title=''>" +
"<area shape='rect' coords='2,62,29,77'     onclick=vkb_fromAlphabet(705,event) title=''>" +
"<area shape='rect' coords='263,61,298,78'  onclick=vkb_fromAlphabet(705,event) title=''>" +
"<area shape='rect' coords='2,41,27,56'     onclick=vkb_fromAlphabet(706,event) title=''>";

var vkb_tipProc;
if (vkb_Show_Help)
{
  /*
  if (vkb_Opera && vkb_OperaVer >= 9 && vkb_Fix)
    vkb_tipProc =
      "<area shape='rect' coords='212,81,298,92'  onMouseOver=\"vkb_tipFix(1);\" onMouseOut=\"vkb_tipFix(0);\" title=''>";   
  else
    vkb_tipProc = 
      "<area shape='rect' coords='212,81,298,92'  onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',vkb_HelpPos1,vkb_HelpPos2);\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',vkb_HelpPos1,vkb_HelpPos2);\" title=''>";   
  */
  
  vkb_tipProc = 
    "<area shape='rect' coords='212,81,298,92'  onMouseOver=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',vkb_HelpPos1,vkb_HelpPos2);\" onMouseOut=\"vkb_popUp(event,'vkb_t1','vkb_LayKbdPic',vkb_HelpPos1,vkb_HelpPos2);\" title='http://Help.WinRus.com'>";   
  
  if (vkb_Fix)
  {
    if (vkb_Br == "IE" && !vkb_Opera) {}
    else vkb_tipProc = "<area shape='rect' coords='212,81,298,92' title='http://Help.WinRus.com'>";           
  }

}
else
  vkb_tipProc = "<area shape='rect' coords='212,81,298,92' title='http://Help.WinRus.com'>";   

  
mouse_HTML = mouse_HTML + vkb_tipProc;
  
 mouse_HTML = mouse_HTML +  "<area shape='default' nohref></map>";

 var vkb_tipClass = "vkb_tip";
 
 // if (vkb_Opera && vkb_OperaVer >= 9 && vkb_Fix) vkb_tipClass = "vkb_tipF";
  
var vkb_HelpTextE =  "<P  align=left><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 (when <NOBR>А-А, Б-B, Д-D, Ф-F, К-K,...</NOBR>)<P  align=left>In addition, <u>mouse</u> based input also works (bit it's less handy).</SMALL></P>";


            // "<P><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <NOBR><u>клавиатуру</u> -</NOBR><P>с <NOBR>ТОЙ ЖЕ</NOBR> <B>раскладкой</B> (расположением букв), что <u>дома</u> у Вас: <font color='#0000FF'><B>Стандартной</B></font> раскладкой или <font color='#0000FF'><B>Фонетической</B></font>/транслитерационной (когда <NOBR>А-А, Б-B, Д-D, Ф-F, К-K,...</NOBR>)<BR>Меню <B>раскладок</B> - под картинкой текущей.<P>В дополнение к <B>обычному</B> (то есть <B>клавиатурному</B>) работает и ввод <u>мышкой</u> (но это не так удобно).</small></P></div>";
            // <P><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <NOBR><u>клавиатуру</u> -</NOBR><P> с <NOBR>ТОЙ ЖЕ</NOBR> <NOBR><B>раскладкой</B> (расположением букв),</NOBR> что <u>дома</u> у Вас: <font color='#0000FF'><B>Стандартной</B></font> раскладкой или <font color='#0000FF'><B>Фонетической</B></font>/транслитерационной (когда <NOBR>A-А, Б-B, Д-D, Ф-F, К-K,...</NOBR>)<BR>Меню <B>раскладок</B> - под картинкой текущей.<P>В дополнение к <B>обычному</B> (то есть <B>клавиатурному</B>) работает и ввод <u>мышкой</u> (но это не так удобно), где заглавные буквы получаются, если щёлкать по букве, держа нажатой клавишу <B>Shift</B> на обычной клавиатуре.</small></P>
var vkb_HelpTextR;

if (vkb_nothing) vkb_HelpTextR =   
  "<P align=left><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <u>клавиатуру</u>.<P align=left>В дополнение к <B>обычному</B> (то есть <B>клавиатурному</B>) работает и ввод <u>мышкой</u> (но это не так удобно).</small></P>";
else if (!vkb_Show_Phonetic)  vkb_HelpTextR =
     "<P  align=left><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <NOBR><u>клавиатуру</u> -</NOBR><P align=left>с ТОЙ ЖЕ <B>раскладкой</B> (расположением букв), что <u>дома</u> у Вас.<BR>Меню <B>раскладок</B> - под картинкой текущей.<P  align=left>В дополнение к <B>обычному</B> (то есть <B>клавиатурному</B>) работает и ввод <u>мышкой</u> (но это не так удобно).</small></P>";
     else vkb_HelpTextR =
        "<P  align=left><small><U>Как дома</U>: ввод<B>и</B>те, используя обычную (а не нарисованную)  <NOBR><u>клавиатуру</u> -</NOBR><P align=left>с ТОЙ ЖЕ <B>раскладкой</B> (расположением букв), что <u>дома</u> у Вас<B>:</B>&nbsp; <font color='#0000FF'><B>Стандартной</B></font> раскладкой или <font color='#0000FF'><B>Фонетической</B></font>/транслитерационной (когда <NOBR>А-А, Б-B, Д-D, Ф-F, К-K,...</NOBR>)<BR>Меню <B>раскладок</B> - под картинкой текущей.<P  align=left>В дополнение к <B>обычному</B> (то есть <B>клавиатурному</B>) работает и ввод <u>мышкой</u> (но это не так удобно).</small></P>";

  var mTip = (vkb_InterfaceLanguage == "E") ?
            "<div id='vkb_t1' class='" + vkb_tipClass + "'>" + vkb_HelpTextE + "</div>"
             :
            "<div id='vkb_t1' class='" + vkb_tipClass + "'>" + vkb_HelpTextR + "</div>";
            
 
 mouse_HTML = mouse_HTML + mTip;

 var mDiv_mouse=document.getElementById("vkb_divMouse");
 mDiv_mouse.innerHTML = mouse_HTML;
}

  
///////////////////////////////////////////////////

// Privacy filters on proxies http://www.jibbering.com/faq/faq_notes/cookies.html


function vkb_Get_Cookie(name)
{
    if(typeof document.cookie == "string")
    {
        var start = document.cookie.indexOf(name+"=");
        var len = start+name.length+1;
        if ((!start)&& (name != document.cookie.substring(0,name.length)))
            return null;

        if (start == -1) return null;
        var end = document.cookie.indexOf(";",len);
        if (end == -1) end = document.cookie.length;
        return unescape(document.cookie.substring(len,end));
        
    }
    else
    {
        /* document.cookie is not a string so return an
           empty string. When tested this will type-convert to
           boolean false (accurately) giving the impression that
           client-side cookies are not available on this system:-
        */
      return "";
    }
}

function vkb_Set_Cookie(name,value,expires,path,domain,secure)
{
    if(typeof document.cookie == "string")
    {
       var tmp_new = name + "=" +escape(value) +
            ( (expires) ? ";expires=" + expires.toGMTString() : "") +
            ( (path) ? ";path=" + path : "") +
            ( (domain) ? ";domain=" + domain : "") +
            ( (secure) ? ";secure" : "");
            
      document.cookie = tmp_new;
    }//else document.cookie is not a string so do not write to it.
}

function vkb_Delete_Cookie(name,path,domain)
{
    if (vkb_Get_Cookie(name)) 
       document.cookie = name + "=" +
       ( (path) ? ";path=" + path : "") +
       ( (domain) ? ";domain=" + domain : "") +
       ";expires=Thu, 01-Jan-70 00:00:01 GMT";
    
}

// IntelligentCookie http://irt.org/articles/js064/index.htm

var vkb_expires_date = new Date;     // Create a Date object, with today's information
var vkb_oneyear = 31536000000;       // number of milliseconds in one year
vkb_expires_date.setTime(vkb_expires_date.getTime() + vkb_oneyear);

function vkb_storeMasterCookie()
{
    if (!vkb_Get_Cookie('vkb_MasterCookie'))
        vkb_Set_Cookie('vkb_MasterCookie','MasterCookie');
}

function vkb_storeIntelligentCookie(name,value)
{
    if (vkb_Get_Cookie('vkb_MasterCookie'))
    {
        var IntelligentCookie = vkb_Get_Cookie(name);
        if ((!IntelligentCookie) || (IntelligentCookie != value))
        {
            vkb_Set_Cookie(name,value,vkb_expires_date);
            var IntelligentCookie = vkb_Get_Cookie(name);
            if ((!IntelligentCookie) || (IntelligentCookie != value))
                vkb_Delete_Cookie('vkb_MasterCookie');
        }
    }
}

vkb_JScookieWasLoaded = true;



/////////////////
/*
 * 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;
    }
};
//////////////////////////////////////////////////////

function vkb_initSettings()
{
 vkb_KbdPhysical = "EN";
   
 // cookie?  
 var vkb_UseCookie=false; var tmpKbdVariant;
 
 if (vkb_JScookieWasLoaded) vkb_storeMasterCookie();
 
 tmpKbdVariant = vkb_Get_Cookie(vkb_cookieName); 
 if (tmpKbdVariant !=null && tmpKbdVariant !="")
 {
    vkb_UseCookie = vkb_verifyKbdVariant(tmpKbdVariant);  // returns  false if erroneous
                                                          // otherwise sets vkb_KbdVariantNumber,
                                                          // vkb_curImage, vkb_KbdPhysical
    if (vkb_UseCookie)
    {
         vkb_KbdVariantNonDefault = true;
         vkb_KbdVariant = tmpKbdVariant;
    }
    else
        vkb_KbdVariantNumber = 0; // was erroneous
        
 } // end check cookie
 
 if (!vkb_UseCookie) // then check if KbdVariant was given as parameter
 {
   if (vkb_KbdVariant != "0")   //  pre-setup in .htm's list of parameters
   {
     vkb_KbdVariantNonDefault = vkb_verifyKbdVariant(vkb_KbdVariant);// returns  false if erroneous
                                                                     // otherwise sets vkb_KbdVariantNumber,
                                                                     // vkb_curImage, vkb_KbdPhysical

     if (!vkb_KbdVariantNonDefault) // erroneous; set back 
        {vkb_KbdVariant = "0"; vkb_KbdVariantNumber = 0;}
   }
 }  // no cookie
   
   
 if (vkb_KbdVariant == "0")   // not pre-setup in .htm and no cookie
 {
   if (vkb_InterfaceLanguage == 'E')
   {
      if (vkb_Phonetic) {vkb_KbdVariant = '5'; vkb_curImage="vkb_stud.png";}
      else              {vkb_KbdVariant = '30'; vkb_curImage="vkb_ru.png";}
   }
   else                 {vkb_KbdVariant = '30'; vkb_curImage="vkb_ru.png";}
 }   

 
 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_verifyKbdVariant(KbdVariant)  // sets vkb_KbdVariantNonDefault to false if erroneous
{
   var tmp_KbdVariantNonDefault = true;
   vkb_KbdVariantNumber = parseFloat(KbdVariant); 
   var vkb_tmpNum; 
   
   if (vkb_KbdVariantNumber > 39)
   {
       vkb_tmpNum = vkb_layoutTypeArrayNonUS[KbdVariant];
       if (typeof vkb_tmpNum == 'undefined') tmp_KbdVariantNonDefault = false; // erroneous; set back 
       else
       {
        if (!vkb_nonUS) tmp_KbdVariantNonDefault = false;
        else
        {
          if (!vkb_Phonetic && vkb_tmpNum == 'vkb_Flayouts') tmp_KbdVariantNonDefault = false;
               
          vkb_KbdPhysicalCalculate(vkb_KbdVariantNumber); // sets vkb_KbdPhysical and vkb_curImage  
        }
       }
   }
   else
   {
     if (!vkb_Phonetic && vkb_KbdVariantNumber < 29)  tmp_KbdVariantNonDefault = false;
     else
     {  
       if (vkb_KbdVariantNumber == 29 && !vkb_Show_ToLatin) tmp_KbdVariantNonDefault = false;
       else
       {
         vkb_tmpNum = vkb_Pictures[KbdVariant];
         if (typeof vkb_tmpNum == 'undefined') tmp_KbdVariantNonDefault = false; // erroneous; set back 
         else vkb_curImage = vkb_tmpNum;
       }
     }
   }
   
   return tmp_KbdVariantNonDefault;
}
 
 
function vkb_KbdPhysicalCalculate(num)  // non-US keyboard modes
{
  if (num < 60) // Standard 
  {
    switch (num)
    {                                                                           
      case 41:   vkb_KbdPhysical = "DE"; vkb_curImage = "vkb_de.png"; break;
      case 42:   vkb_KbdPhysical = "SV"; vkb_curImage = "vkb_sv.png"; break;
      case 43:   vkb_KbdPhysical = "FR"; vkb_curImage = "vkb_fr.png"; break;
      case 44:   vkb_KbdPhysical = "IT"; vkb_curImage = "vkb_it.png"; break;
      case 45:   vkb_KbdPhysical = "ES"; vkb_curImage = "vkb_es.png"; break;
      case 46:   vkb_KbdPhysical = "UK"; vkb_curImage = "vkb_uk.png"; break;            
      case 47:   vkb_KbdPhysical = "IL"; vkb_curImage = "vkb_il.png"; break;
      default: break;
    }      
  }
  else 
  {
    if (num < 70) {vkb_KbdPhysical = "DE"; if (num==61) vkb_curImage="vkb_ger1.png"; else vkb_curImage="vkb_ger2.png";}
    else if (num < 80) {vkb_KbdPhysical = "SV"; if (num==71) vkb_curImage="vkb_swe1.png"; else if (num==72) vkb_curImage="vkb_swe2.png"; else vkb_curImage="vkb_swe3.png";}
         else if (num < 90) {vkb_KbdPhysical = "FR"; vkb_curImage="vkb_fre1.png";}
              else if (num < 100) {vkb_KbdPhysical = "IT"; vkb_curImage="vkb_ita1.png";}    
                   else if (num < 110) {vkb_KbdPhysical = "ES"; vkb_curImage="vkb_spa1.png";}        
                        else if (num < 120) {vkb_KbdPhysical = "UK"; if (num==111) vkb_curImage="vkb_bri1.png"; else vkb_curImage="vkb_briu.png";}        
                             else if (num < 130) {vkb_KbdPhysical = "IL"; if (num==121) vkb_curImage="vkb_heb1.png"; else vkb_curImage="vkb_heb2.png";}    
  }
  
} 
        
//////////////////////////////////////////////////////////
        
        
var vkb_ListName, isShift=false, isCaps=false;
        
// var vkb_KBDSymbols = "~!@#$%^&*()_+`1234567890-=QWERTYUIOP{}|qwertyuiop[]\\ASDFGHJKL:\"asdfghjkl;'ZXCVBNM<>?zxcvbnm,./";
var vkb_RUSymbols = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        
var vkb_nothing = false;
if (typeof vkb_ShowMenus != 'undefined')
{       
  if (!vkb_ShowMenus)  vkb_nothing = true;
}       
        
var vkb_Show_ToLatin = false;
if (typeof vkb_ToLatin != 'undefined')
{       
  if (vkb_ToLatin)  vkb_Show_ToLatin = true;
}       

var vkb_Show_Help = true;
if (typeof vkb_Help != 'undefined')
{       
  if (!vkb_Help)  vkb_Show_Help = false;
}       

var vkb_Show_Phonetic = true;
if (typeof vkb_Phonetic != 'undefined')
{       
  if (!vkb_Phonetic)  vkb_Show_Phonetic = false;
}       


var vkb_Show_LayoutsButton = true;
if (typeof vkb_Layouts != 'undefined')
{       
  if (!vkb_Layouts)
  {
   vkb_Show_LayoutsButton = false; vkb_Show_Phonetic = false; vkb_Show_ToLatin = false; vkb_nonUS = false;
  }
}       

var vkb_Show_Copyright = true;
if (typeof vkb_Copyright != 'undefined')
{       
  if (!vkb_Copyright)  vkb_Show_Copyright = false;
}       

if (vkb_Opera) {if (vkb_OperaVer >= 8) vkb_Br = "NN";}



vkb_OnlyFromList = true;
if (typeof vkb_List == "undefined") vkb_OnlyFromList = false; // not pre-setup in .htm; all text fields
else
{
  vkb_List = ',' + vkb_List + ',';    
  vkb_List = vkb_List.toLowerCase(); 
}

var vkb_txtControlMouseOnly = null;

if (vkb_nothing)
{
  vkb_Show_LayoutsButton = false; vkb_Show_Phonetic = false; vkb_Show_ToLatin = false; vkb_nonUS = false;
}

vkb_JSnonUSwasLoaded = false;
if (typeof vkb_nonUS != 'undefined') 
{
   if (vkb_nonUS) 
   {
      var vkb_hobj = document.getElementsByTagName('head')[0]; 
      vkb_loadJs(vkb_hobj, vkb_Path+"vkbnonus.js");
      
      vkb_JSnonUS_PhoneticWasLoaded = false;
      if (vkb_Phonetic) vkb_loadJs(vkb_hobj, vkb_Path+"vkbnphon.js");
      
      if (vkb_InterfaceLanguage == 'E') vkb_loadJs(vkb_hobj, vkb_Path+"vkbnon_e.js");
   }
}
else vkb_nonUS = false;

if (vkb_Show_LayoutsButton)
{
   if (!vkb_Show_ToLatin && !vkb_Show_Phonetic && !vkb_nonUS)
       vkb_Show_LayoutsButton = false;
}

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;
var vkb_singleSwitchKey=false;

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 != '29')  // 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 == '29')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
         if ( vkb_txtControl.isTextEdit )
         {
             var newString = vkb_KbdVariant29[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://WinRus.com http://Klava.WinRus.com
  // http://WinRus.com/
function vkb_fNN (keyCode, CurrentKey) {

  if (vkb_KbdVariant == '29')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
          return { replaceKey: true, newKeyCode: keyCode, newKey:
                   vkb_KbdVariant29[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 == '29')  // To Translit
  {
      if (vkb_RUSymbols.indexOf(CurrentKey) != -1)
      {
         var newString = vkb_KbdVariant29[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_switchMode()
{ 
  if (vkb_CyrFromKbd == 'Off')
  {
    vkb_CyrFromKbd = 'On';
    
    if (!vkb_var1NoRadio) vkb_radioSwitchKbd0.checked = true; // "On"
    if (vkb_BakuRu) vkb_mSpanF12.innerHTML = "<b>[РУССКИЙ]</b> F12 - выкл.";
  }
  else
  {
    vkb_CyrFromKbd = 'Off';
    
    if (!vkb_var1NoRadio) vkb_radioSwitchKbd1.checked = true;  // "Off"
    if (vkb_BakuRu) vkb_mSpanF12.innerHTML = "F12 - включить";
  }
  
  vkb_txtControl.focus();  
}

function vkb_NewKbdPic(name,picture)
{
  if (vkb_KbdVariant == "29" && vkb_InterfaceLanguage == 'E')
      picture = vkb_Path+"vkb_late.png";

  if (window.document.images)
  {
     window.document.images[name].src = picture;
     
     // new working layout - clear Caps and Shift things:
     window.document.images['vkb_light'].src = vkb_Path+ 'vkb_none.png';
     isCaps=false; isShift=false;
  }
}

function vkb_SetVariant(sName, variant, picTagName)
{
  var pic;
  if (variant.value == "0") {variant.value = vkb_KbdVariant; vkb_txtControl.focus(); return false;}
  
  variant.selected = true;  
  
  if ( vkb_KbdVariantNonDefault  && !vkb_isInitDone ) {}
  else {vkb_KbdVariant = variant.value;  vkb_txtControl.focus();}

  if (vkb_KbdPhysical != "EN") // non-US
  {
     if (typeof vkb_JSnonUSwasLoaded != 'undefined')
       if (vkb_JSnonUSwasLoaded)
       {
         vkb_nonUSSetVariant(vkb_KbdVariant, picTagName);
         // vkb_storeIntelligentCookie(vkb_cookieName,vkb_KbdVariant);
         // do it in the function itself
       }
  }
  else
  {  
     pic = vkb_Path + vkb_Pictures[vkb_KbdVariant]; 
     vkb_NewKbdPic(picTagName, pic);
     vkb_storeIntelligentCookie(vkb_cookieName,vkb_KbdVariant);
  }   

  if (sName == "vkb_Slayouts")
  {        
     if (vkb_Show_Phonetic) 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:
        if (vkb_Show_Phonetic) vkb_FlayoutsItem.options[0].selected = true;
        vkb_SlayoutsItem.options[0].selected = true;
  }        
           
}
          
           
           
function vkb_CopyText(box, parent_box)
{          
   var txt = parent_box.value + box.value;
           
   parent_box.value = txt;
   // parent_box.focus();
}          

function vkb_CopyToClipBoard(myText){
// based on example at http://www.webdeveloper.com/forum/showpost.php?p=344728&postcount=10
	if (window.clipboardData)
	{
  
           window.clipboardData.setData("Text", myText);
           
        }
	else if (window.netscape){
		netscape.security.PrivilegeManager.enablePrivilege  ('UniversalXPConnect');

		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard  );
		if (!clip) return false;

		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return false;

		trans.addDataFlavor('text/unicode');

		var str = new Object();
		var len = new Object();

		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);   
		var copytext=myText;   
		str.data=copytext;   
		trans.setTransferData("text/unicode",str,copytext.length*2);   
		var clipid=Components.interfaces.nsIClipboard;

		if (!clip) return false;   
		clip.setData(trans,null,clipid.kGlobalClipboard);

	}

	return false;
}




function isCursorAtEnd(txtArea, caret_pos)
{
  var len = txtArea.value.length; 
  var pos = -1; 

  var range_obj = txtArea.createTextRange();
  
  range_obj.moveToBookmark(caret_pos.getBookmark());
  range_obj.moveEnd('character',len);
  pos = len - range_obj.text.length; 
 
  if (pos  == len) return true;
  else return false;
} 



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;
    
    
    if (newText=="$Del$" || newText=="$Bs$")
    {
      var isEnd = false;
      if (!caretPos.text)
      {
        if (newText=="$Bs$") caretPos.moveStart ("character", -1);
        else
        {
          
          if (textElement.type == "textarea")
             if ( isCursorAtEnd(textElement,caretPos) ) isEnd=true;
             
          if (!isEnd) caretPos.moveEnd ("character", 1); 
        }
      }  
      
      if (!isEnd) {caretPos.text = "";  caretPos.collapse(false);}
      
    }
    else
        caretPos.text = newText;
        
    caretPos.select(); 
  } 
}   

function vkb_fromAlphabet(LetNumber, evt)
{
  
 var CurrentKey; 
 
 var toUse = true;
 if ( vkb_KbdVariant == '29' ) toUse = false;
 else
 { 
  if (vkb_OnlyFromList)
  {
    if (vkb_txtControlMouseOnly == null) toUse = false;
    else
    {   
     var curName = ',' + vkb_txtControlMouseOnly.name + ',';   
     curName = curName.toLowerCase();
     
     if (vkb_List.indexOf(curName) == -1)
     {
         toUse = false;    vkb_txtControlMouseOnly.focus();   
     }
    }
  }
 }

 if (toUse)
 {
    
  var isDel=false, isBs=false; 
  
  if (LetNumber ==250) {if (vkb_KbdPhysical == "EN") LetNumber = 25; else LetNumber = 603;}  
  else if (LetNumber ==370) {if (vkb_KbdPhysical != "EN") LetNumber =37; else LetNumber =603;}  
  else if (LetNumber ==380) {if (vkb_KbdPhysical != "EN") LetNumber =38; else LetNumber =705;}  
  
  if (LetNumber== 701) isBs=true;
  else if (LetNumber== 702) isDel=true;
  else if (LetNumber== 603) CurrentKey = "\n";
  else if (LetNumber== 604) CurrentKey = " ";
  else if (LetNumber== 705)   // Shift was clicked
       {
        if (!isShift)
        {
         isShift=true;  
         if (isCaps) {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_both.png';}
         else        {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_shif.png';} 
        } 
        else
        {
         isShift=false;  
         if (isCaps) {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_caps.png';}
         else        {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_none.png';}                 
        }
       }
  else if (LetNumber== 706)  // Caps was clicked
       {
         isCaps = !isCaps;
         if (isCaps) {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_caps.png';}
         else        {if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+ 'vkb_none.png';}
       }
  else // regular
  {
    
    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)  // Shift on physical keyboard is pressed
    {
        if (isCaps) CurrentKey =  vkb_ListName.charAt(LetNumber+ShiftNum);  // lowercase once
        else CurrentKey =  vkb_ListName.charAt(LetNumber);
    }
    else  // may be Shift or Caps on an image was clicked
    {
        if (isCaps)
        {
          if (isShift)  // lowercase once
          {
             CurrentKey =  vkb_ListName.charAt(LetNumber+ShiftNum);
             isShift = false;   
             // No Shift anymore; just Caps not both:
             if (window.document.images) window.document.images['vkb_light'].src = vkb_Path+'vkb_caps.png';
          }      
          else CurrentKey =  vkb_ListName.charAt(LetNumber);
        }
        else
        {
          if(isShift)
          {
           CurrentKey =  vkb_ListName.charAt(LetNumber);
           isShift = false;  
           if (window.document.images) window.document.images['vkb_light'].src =  vkb_Path+'vkb_none.png'; 
          }
          else CurrentKey =  vkb_ListName.charAt(LetNumber+ShiftNum);
        }  // no Caps
    }

  } // regular symbol, not Del, Bs, Enter, Space, Shift, Caps 
    

   
    
  vkb_txtControl.focus(); 

 
   if ( LetNumber < 705 )
   {
    
        
    if ( LetNumber > 700) CurrentKey == "";  //  Bs or Del    
    
    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;  
         }              
                                                                

         if (isDel)
         {

               if (oldSelectionEnd - oldSelectionStart > 0)
                   vkb_txtControl.value =                                                                                 
                     vkb_txtControl.value.substring(0, oldSelectionStart) +                                        
                     vkb_txtControl.value.substring(oldSelectionEnd);            
               else
               {
                  var t=vkb_txtControl.value.substring(0, oldSelectionEnd);
                  if (vkb_txtControl.value.length - t.length > 0)
                  {
                      vkb_txtControl.value =                                                                                 
                         vkb_txtControl.value.substring(0, oldSelectionStart) +                                        
                         vkb_txtControl.value.substring(oldSelectionEnd+1);            
                  }  
                }
         }
         else if (isBs)
         {
           
             if (oldSelectionEnd - oldSelectionStart > 0)
               vkb_txtControl.value =                                                                                 
                  vkb_txtControl.value.substring(0, oldSelectionStart) +                                        
                  vkb_txtControl.value.substring(oldSelectionEnd);                                 
             else
             {
                var t=vkb_txtControl.value.substring(0, oldSelectionStart);
                if (t.length > 0)
                {
                 vkb_txtControl.value =                                                                                 
                    vkb_txtControl.value.substring(0, oldSelectionStart-1) +                                        
                    vkb_txtControl.value.substring(oldSelectionEnd);                    
                }
             }
           
         }
         else
         {
            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;                                                            
         }                                                                                                  

         if (isDel)
           vkb_txtControl.setSelectionRange(oldSelectionStart, oldSelectionStart);                     
         else if (isBs)
         {  
          if (oldSelectionEnd - oldSelectionStart > 0)
             vkb_txtControl.setSelectionRange(oldSelectionStart, oldSelectionStart);                     
          else
             vkb_txtControl.setSelectionRange(oldSelectionStart -1, oldSelectionStart -1);                     
         }
         else
            vkb_txtControl.setSelectionRange(oldSelectionStart + newText.length,                                   
                                              oldSelectionStart + newText.length);                                  
                                              
       }
    }
    else if (vkb_Br == "IE")
         { 
            
            if (isBs) vkb_insertAtCaret(vkb_txtControl,"$Bs$");
            else if(isDel) vkb_insertAtCaret(vkb_txtControl,"$Del$");
            else
              vkb_insertAtCaret(vkb_txtControl,CurrentKey);
         }
         else
         {
            if (isBs) vkb_txtControl.value = vkb_txtControl.value.substring(0, vkb_txtControl.value.length - 1);
            else if (isDel) {}
            else vkb_txtControl.value += CurrentKey;
         }
    } // not shift or caps     
  
  } // not 33, not toUse
}

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;
  
  
  var toUse = true;
  if (vkb_OnlyFromList)
  {
     var curName = ',' + txtField.name + ',';   
     curName = curName.toLowerCase();
     if (vkb_List.indexOf(curName) == -1) toUse = false;       
  }
  if (toUse)  vkb_txtControl = txtField;

  vkb_txtControlMouseOnly = txtField;
}

function vkb_addAttributes(obj, variant)
{

  // var obj_value = "";  if (obj.value != "") obj_value = obj.value;
  
  if (!vkb_MouseOnly)
  
  if (!vkb_BakuRu)  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; 
  
  var shortFlag = false;
  var longNumber = -1;
  var toUse;
  for (var i=0; i < len_txtAreas; i++)
  {
   cur_txtArea = txtAreas[i];  toUse = true;
    
   if (vkb_OnlyFromList)
   {
     var curName = ',' + cur_txtArea.name + ',';   
     curName = curName.toLowerCase();
     
     if (vkb_List.indexOf(curName) == -1) toUse = false;       
   }
    
   if (toUse)
   { 
    if ( vkb_Editable(cur_txtArea) )
    {
       if (cur_txtArea.cols > 30 && longNumber < 0) longNumber = i;
       
       vkb_numInputFields++;         
    
       if (isFirstTxt)
       {
        if (cur_txtArea.cols < 20) shortFlag = true;
        isFirstTxt=false; isFirstArea = true; firstTxtNum=i;
       }
    
       vkb_addAttributes(cur_txtArea, vkb_Variant);
    }   
   } // toUse
   else EventManager.Add(cur_txtArea, "focus",    vkb_OnFocus,       false); // just onfocus()
  }
  
  if (shortFlag) // choose another Text Area - if any - as 1st field 
  {
    if (longNumber > -1) firstTxtNum=longNumber;
  }

  for (var j=0; j < len_inputFields; j++)
  {
   cur_inputField = inputFields[j]; toUse = true;
   
   if (vkb_OnlyFromList)
   {
     var curName = ',' + cur_inputField.name + ',';   
     curName = curName.toLowerCase();
     
     if (vkb_List.indexOf(curName) == -1) toUse = false;       
   }
   
   if (toUse)
   { 
    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);
      }
    }
   }  // toUse
   else EventManager.Add(cur_inputField, "focus",    vkb_OnFocus,       false); // just onfocus()
  }

  if (vkb_numInputFields == 0) return;
  
  if (isFirstArea)
     vkb_txtControl = txtAreas[firstTxtNum]; 
  else   
     vkb_txtControl = inputFields[firstTxtNum]; 

  if ( vkb_numInputFields == 1 ) // just one input field 
  { 
     vkb_txtControl.focus(); 
     
     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;
     
     vkb_singleSwitchKey=true;  
     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 {vkb_singleSwitchKey=false; 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
     {
        vkb_singleSwitchKey=true;
        if (vkb_Opera)  vkb_keySwitch = (vkb_OperaVer < 8) ? "<B>Esc</B>" : "<B>F6</B>";
        else {vkb_singleSwitchKey=false; 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
     {
        vkb_singleSwitchKey=true;
        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 {vkb_singleSwitchKey=false; 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];
     if (vkb_radioSwitchKbd0 == null) vkb_var1NoRadio = true;
     else
       vkb_radioSwitchKbd1 = document.getElementsByName("vkb_fromKbd")[1];
     
     
     if (vkb_CyrOnOffInit) {vkb_CyrFromKbd = 'On'; if (!vkb_var1NoRadio) vkb_radioSwitchKbd0.checked=true;}
     else                  {vkb_CyrFromKbd = 'Off'; if (!vkb_var1NoRadio) vkb_radioSwitchKbd1.checked=true;}
  }
  
}


function vkb_showKbd()
{
  if (!vkb_isInitDone)
  {
     if (vkb_Variant == 1 || vkb_InitShow) {} else 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_MouseOnly)
     {
       if (vkb_Variant != 1)
       {
        var mDivKeyb=document.getElementById('vkb_keyb'); 
        mDivKeyb.style.display='';
       }
     }

     if (vkb_KbdVariantNonDefault) // change selection fields
     {
        if (vkb_KbdVariant <= 39)  // US keyboard
        {
          var layType = vkb_layoutTypeArray[vkb_KbdVariant];  // Standard or Phonetic or Latin
          
          var optionNum = vkb_optionArray[vkb_KbdVariant];
        
          if (!vkb_nothing)
          { 
           if (layType == 'vkb_Slayouts')
              vkb_SetVariant(layType, vkb_SlayoutsItem.options[optionNum], 'vkb_LayKbdPic');
           else if (layType == 'vkb_Flayouts')  
                   vkb_SetVariant(layType, vkb_FlayoutsItem.options[optionNum], 'vkb_LayKbdPic');
           else vkb_SetVariant(layType, vkb_LatinItem.options[optionNum], 'vkb_LayKbdPic');
          }
          else
          {
               var pic = vkb_Path + vkb_Pictures[vkb_KbdVariant]; 
               vkb_NewKbdPic('vkb_LayKbdPic', pic);    
          }
        }
        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;                                     
   }                              
  
}

// Load .js 

var vkb_hobj = document.getElementsByTagName('head')[0]; 

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 { if ( !vkb_InitShow )       vkb_loadJs(vkb_hobj, vkb_Path+"vkbbox.js"); }
}

if (vkb_Variant == 1 || vkb_InitShow) vkb_1st=false;  // vkb_one.js has already been loaded

//
