window.onload = init;

function init()
{
  shortcut.add("Ctrl+Shift+A", function() { lat2cyr(); });
  shortcut.add("Ctrl+Enter", function() { document.forms.postform.submit(); });
  shortcut.add("Alt+Enter", function() { document.forms.postform.submit(); });
}

var focusedItem = null;
function setFocusedItem(item)
{
  focusedItem = item;
}
function getFocusedItem()
{
  return focusedItem;
}

/* in place detransliterator */
function lat2cyr()
{
  var txtarea = getFocusedItem();
  if ( !txtarea )
    txtarea = document.postform.body;
  var isSelection = true;

  // IE
  if (document.selection && !is_gecko)
  {
    var theSelection = document.selection.createRange().text;
    
    if (!theSelection)
    {
      theSelection = txtarea.value;
      isSelection = false;
    }
    txtarea.focus();
    
    subst = detransliterate(theSelection);
    
    if (!isSelection)
      txtarea.value = subst;
    else
    {
      r = document.selection.createRange();
      r.text = subst;
      r.select();
    }
  
  } // Mozilla
  else if (txtarea.selectionStart || txtarea.selectionStart == '0')
  {
    var startPos = txtarea.selectionStart;
    var endPos   = txtarea.selectionEnd;
    var scrollTop = txtarea.scrollTop;
    
    var myText = txtarea.value.substring(startPos, endPos);
    if (!myText)
    {
      myText = txtarea.value;
      isSelection = false;
    }
      
    subst = detransliterate(myText);
    
    if (isSelection)
      txtarea.value = txtarea.value.substring(0, startPos) + subst +
                      txtarea.value.substring(endPos, txtarea.value.length);
    else
      txtarea.value = subst;

    txtarea.focus();

  // All others
  }
  else
  {
    var copy_alertText = alertText;
    var re1 = new RegExp("\\$1","g");
    var re2 = new RegExp("\\$2","g");
    
    copy_alertText = copy_alertText.replace(re1,sampleText);
    copy_alertText = copy_alertText.replace(re2,tagOpen+sampleText+tagClose);
    
    var text;
    
    if (sampleText)
      text = prompt(copy_alertText);
    else
      text="";
    
    if (!text)
      text = sampleText;
    text = tagOpen + text + tagClose;
    
    // append to the end
    txtarea.value += "\n" + text;

    // in Safari this causes scrolling
    if(!is_safari)
      txtarea.focus();
  }
  
  // reposition cursor if possible
  if (txtarea.createTextRange)
    txtarea.caretPos = document.selection.createRange().duplicate();
}

var suff_map = new Array();
    suff_map[" et"] = " эт";
    suff_map["oeto"] = "оэто";
    suff_map["Et"] = "Эт";
    suff_map["ETO"] = "ЭТО";
    suff_map["tsya"] = "тся";
    suff_map["TSYA"] = "ТСЯ";
    suff_map["tsja"] = "тся";
    suff_map["TSJA"] = "ТСЯ";
    suff_map["`e"] = "э";
    suff_map["`E"] = "Э";
    suff_map["yo"] = "ё";
    suff_map["jo"] = "ё";
    suff_map["YO"] = "Ё";
    suff_map["JO"] = "Ё";
    suff_map["Yo"] = "Ё";
    suff_map["Jo"] = "Ё";
    suff_map["yu"] = "ю";
    suff_map["ju"] = "ю";
    suff_map["YU"] = "Ю";
    suff_map["JU"] = "Ю";
    suff_map["Yu"] = "Ю";
    suff_map["Ju"] = "Ю";
    suff_map["ya"] = "я";
    suff_map["ja"] = "я";
    suff_map["YA"] = "Я";
    suff_map["JA"] = "Я";
    suff_map["Ya"] = "Я";
    suff_map["Ja"] = "Я";
    suff_map["ay"] = "ай";
    suff_map["ey"] = "ей";
    suff_map["iy"] = "ий";
    suff_map["oy"] = "ой";
    suff_map["uy"] = "уй";
    suff_map["yy"] = "ый";
    suff_map["AY"] = "АЙ";
    suff_map["EY"] = "ЕЙ";
    suff_map["IY"] = "ИЙ";
    suff_map["OY"] = "ОЙ";
    suff_map["UY"] = "УЙ";
    suff_map["YY"] = "ЫЙ";
    suff_map["Ay"] = "Ай";
    suff_map["Ey"] = "Ей";
    suff_map["Iy"] = "Ий";
    suff_map["Oy"] = "Ой";
    suff_map["Uy"] = "Уй";
    suff_map["Yy"] = "Ый";
    suff_map["yey"] = "ей";
    suff_map["YEY"] = "ЕЙ";
    suff_map["Yey"] = "Ей";
    suff_map["aya"] = "ая";
    suff_map["aye"] = "ае";
    suff_map["ayo"] = "аё";
    suff_map["ayu"] = "аю";
    suff_map["AYA"] = "АЯ";
    suff_map["AYE"] = "АЕ";
    suff_map["AYO"] = "АЁ";
    suff_map["AYU"] = "АЮ";
    suff_map["Aya"] = "Ая";
    suff_map["Aye"] = "Ае";
    suff_map["Ayo"] = "Аё";
    suff_map["Ayu"] = "Аю";
    suff_map["eya"] = "ея";
    suff_map["eye"] = "ее";
    suff_map["eyo"] = "её";
    suff_map["eyu"] = "ею";
    suff_map["EYA"] = "ЕЯ";
    suff_map["EYE"] = "ЕЕ";
    suff_map["EYO"] = "ЕЁ";
    suff_map["EYU"] = "ЕЮ";
    suff_map["Eya"] = "Ея";
    suff_map["Eye"] = "Ее";
    suff_map["Eyo"] = "Её";
    suff_map["Eyu"] = "Ею";
    suff_map["iya"] = "ия";
    suff_map["iye"] = "ие";
    suff_map["iyo"] = "иё";
    suff_map["iyu"] = "ию";
    suff_map["IYA"] = "ИЯ";
    suff_map["IYE"] = "ИЕ";
    suff_map["IYO"] = "ИЁ";
    suff_map["IYU"] = "ИЮ";
    suff_map["Iya"] = "Ия";
    suff_map["Iye"] = "Ие";
    suff_map["Iyo"] = "Иё";
    suff_map["Iyu"] = "Ию";
    suff_map["oya"] = "оя";
    suff_map["oye"] = "ое";
    suff_map["oyo"] = "оё";
    suff_map["oyu"] = "ою";
    suff_map["OYA"] = "ОЯ";
    suff_map["OYE"] = "ОЕ";
    suff_map["OYO"] = "ОЁ";
    suff_map["OYU"] = "ОЮ";
    suff_map["Oya"] = "Оя";
    suff_map["Oye"] = "Ое";
    suff_map["Oyo"] = "Оё";
    suff_map["Oyu"] = "Ою";
    suff_map["mnyi"] = "мный";
    suff_map["uya"] = "уя";
    suff_map["uye"] = "уе";
    suff_map["uyo"] = "уё";
    suff_map["uyu"] = "ую";
    suff_map["UYA"] = "УЯ";
    suff_map["UYE"] = "УЕ";
    suff_map["UYO"] = "УЁ";
    suff_map["UYU"] = "УЮ";
    suff_map["Uya"] = "Уя";
    suff_map["Uye"] = "Уе";
    suff_map["Uyo"] = "Уё";
    suff_map["Uyu"] = "Ую";
    suff_map["yya"] = "ыя";
    suff_map["yye"] = "ые";
    suff_map["yyo"] = "ыё";
    suff_map["yyu"] = "ыю";
    suff_map["YYA"] = "ЫЯ";
    suff_map["YYE"] = "ЫЕ";
    suff_map["YYO"] = "ЫЁ";
    suff_map["YYU"] = "ЫЮ";
    suff_map["Yya"] = "Ыя";
    suff_map["Yye"] = "Ые";
    suff_map["Yyo"] = "Ыё";
    suff_map["Yyu"] = "Ыю";
    suff_map["ajon"] = "айон";
    suff_map["AJON"] = "АЙОН";
    suff_map["ajor"] = "айор";
    suff_map["AJOR"] = "АЙОР";
    suff_map["ayon"] = "айон";
    suff_map["AYON"] = "АЙОН";
    suff_map["ayor"] = "айор";
    suff_map["AYOR"] = "АЙОР";
    suff_map["jork"] = "йорк";
    suff_map["JORK"] = "ЙОРК";
    suff_map["Jork"] = "Йорк";
    suff_map["york"] = "йорк";
    suff_map["YORK"] = "ЙОРК";
    suff_map["York"] = "Йорк";
    suff_map["zh"] = "ж";
    suff_map["ZH"] = "Ж";
    suff_map["Zh"] = "Ж";
    suff_map["z~h"] = "зх";
    suff_map["Z~H"] = "ЗХ";
    suff_map["Z~h"] = "Зх";
    suff_map["kh"] = "х";
    suff_map["KH"] = "Х";
    suff_map["Kh"] = "Х";
    suff_map["k~h"] = "кх";
    suff_map["K~H"] = "КХ";
    suff_map["K~h"] = "Кх";    
    suff_map["t~s"] = "тс";
    suff_map["T~S"] = "ТС";
    suff_map["T~s"] = "Тс";
    suff_map["t~sh"] = "тш";
    suff_map["T~SH"] = "ТШ";
    suff_map["T~sh"] = "Тш";
    suff_map["t~sch"] = "тщ";
    suff_map["T~SCH"] = "ТЩ";
    suff_map["T~sch"] = "Тщ";    
    suff_map["tsyuda"] = "тсюда";
    suff_map["TSYUDA"] = "ТСЮДА";
    suff_map["tst"] = "тст";
    suff_map["TST"] = "ТСТ";
    suff_map["ts"] = "ц";
    suff_map["TS"] = "Ц";
    suff_map["Ts"] = "Ц";
    suff_map["dets"] = "детс";
    suff_map["DETS"] = "ДЕТС";
    suff_map["Dets"] = "Детс";
    suff_map["sovetsk"] = "советск";
    suff_map["SOVETSK"] = "СОВЕТСК";
    suff_map["Sovetsk"] = "Советск";
    suff_map["piratsk"] = "пиратск";
    suff_map["PIRATSK"] = "ПИРАТСК";
    suff_map["Piratsk"] = "Пиратск";
    suff_map["odets"] = "одец";
    suff_map["ODETS"] = "ОДЕЦ";
    suff_map["tsh"] = "тш";
    suff_map["TSH"] = "ТШ";
    suff_map["Tsh"] = "Тш";
    suff_map["tsch"] = "тщ";
    suff_map["TSCH"] = "ТЩ";
    suff_map["Tsch"] = "Тщ";
    suff_map["tshch"] = "тщ";
    suff_map["TSHCH"] = "ТЩ";
    suff_map["Tshch"] = "Тщ";
    suff_map["sch"] = "щ";
    suff_map["Sch"] = "Щ";
    suff_map["SCH"] = "Щ";
    suff_map["shch"] = "щ";
    suff_map["Shch"] = "Щ";
    suff_map["SHCH"] = "Щ";
    suff_map["ch"] = "ч";
    suff_map["CH"] = "Ч";
    suff_map["Ch"] = "Ч";
    suff_map["c~h"] = "цх";
    suff_map["C~H"] = "ЦХ";
    suff_map["C~h"] = "Цх";
    suff_map["sh"] = "ш";
    suff_map["SH"] = "Ш";
    suff_map["Sh"] = "Ш";
    suff_map["s~h"] = "сх";
    suff_map["S~H"] = "СХ";
    suff_map["S~h"] = "Сх";
    suff_map["shem"] = "схем";
    suff_map["SHEM"] = "СХЕМ";
    suff_map["Shem"] = "Схем";
    suff_map["shod"] = "сход";
    suff_map["SHOD"] = "СХОД";
    suff_map["Shod"] = "Сход";
    suff_map["shozh"] = "схож";
    suff_map["SHOZH"] = "СХОЖ";
    suff_map["Shozh"] = "Схож";
    suff_map["shola"] = "схола";
    suff_map["SHOLA"] = "СХОЛА";
    suff_map["Shola"] = "Схола";
    suff_map["voshit"] = "восхит";
    suff_map["Voshit"] = "Восхит";
    suff_map["VOSHIT"] = "ВОСХИТ";
    suff_map["voshisch"] = "восхищ";
    suff_map["Voshisch"] = "Восхищ";
    suff_map["VOSHISCH"] = "ВОСХИЩ";    
    suff_map["s~ch"] = "сч";
    suff_map["S~CH"] = "СЧ";
    suff_map["S~ch"] = "Сч";
    suff_map["ischerp"] = "исчерп";
    suff_map["ISCHERP"] = "ИСЧЕРП";
    suff_map["Ischerp"] = "Исчерп";
    suff_map["ischet"] = "ищет";
    suff_map["ISCHET"] = "ИЩЕТ";
    suff_map["Ischet"] = "Ищет";
    suff_map["schast"] = "счаст";
    suff_map["SCHAST"] = "СЧАСТ";
    suff_map["Schast"] = "Счаст";
    suff_map["schita"] = "счита";
    suff_map["SCHITA"] = "СЧИТА";
    suff_map["Schita"] = "Счита";
    suff_map["schityv"] = "считыв";
    suff_map["SCHITYV"] = "СЧИТЫВ";
    suff_map["Schityv"] = "Считыв";
    suff_map["schita"] = "щита";
    suff_map["SCHITA"] = "ЩИТА";
    suff_map["schet"] = "счет";
    suff_map["SCHET"] = "СЧЕТ";
    suff_map["Schet"] = "Счет";
    suff_map["schyot"] = "счёт";
    suff_map["SCHYOT"] = "СЧЁТ";
    suff_map["Schyot"] = "Счёт";
    suff_map["schetk"] = "щетк";
    suff_map["SCHETK"] = "ЩЕТК";
    suff_map["Schetk"] = "Щетк";
    suff_map["schyotk"] = "щётк";
    suff_map["SCHYOTK"] = "ЩЁТК";
    suff_map["Schyotk"] = "Щётк";
    suff_map["schetochn"] = "щеточн";
    suff_map["SCHETOCHN"] = "ЩЕТОЧН";
    suff_map["Schetochn"] = "Щеточн";
    suff_map["schyotochn"] = "щёточн";
    suff_map["SCHYOTOCHN"] = "ЩЁТОЧН";
    suff_map["Schyotochn"] = "Щёточн";
    suff_map["schetin"] = "щетин";
    suff_map["SCHETIN"] = "ЩЕТИН";
    suff_map["Schetin"] = "Щетин";
    suff_map["ischez"] = "исчез";
    suff_map["ISCHEZ"] = "ИСЧЕЗ";
    suff_map["Исчез"] = "Ischez";
    suff_map["plesch"] = "плещ";
    suff_map["PLESCH"] = "ПЛЕЩ";
    suff_map["Plesch"] = "Плещ";    
    suff_map["''"] = "ъ";
    suff_map["'u"] = "ью";
    suff_map["'U"] = "ЬЮ";
    suff_map["'a"] = "ья";
    suff_map["'A"] = "ЬЯ";
    suff_map["'ye"] = "ье";
    suff_map["'YE"] = "ЬЕ";
    suff_map["uu"] = "ую";
    suff_map["UU"] = "УЮ";
    suff_map["v'e"] = "въе";
    suff_map["V'E"] = "ВЪЕ";
    suff_map["V'e"] = "Въе";
    suff_map["z'e"] = "зъе";
    suff_map["Z'E"] = "ЗЪЕ";
    suff_map["z'yo"] = "зъё";
    suff_map["Z'YO"] = "ЗЪЁ";
    suff_map["ob'"] = "объ";
    suff_map["z'ya"] = "зъя";
    suff_map["Z'YA"] = "ЗЪЯ";
    suff_map["vyed"] = "выед";
    suff_map["VYED"] = "ВЫЕД";
    suff_map["Vyed"] = "Выед";
    suff_map["vyez"] = "выез";
    suff_map["VYEZ"] = "ВЫЕЗ";
    suff_map["Vyez"] = "Выез";
    suff_map["vyem"] = "выем";
    suff_map["VYEM"] = "ВЫЕМ";
    suff_map["Vyem"] = "Выем";
    suff_map["vyes"] = "выес";
    suff_map["VYES"] = "ВЫЕС";
    suff_map["Vyes"] = "Выес";
    suff_map["vyeh"] = "выех";
    suff_map["VYEH"] = "ВЫЕХ";
    suff_map["Vyeh"] = "Выех";
    suff_map["vyekh"] = "выех";
    suff_map["VYEKH"] = "ВЫЕХ";
    suff_map["Vyekh"] = "Выех";
    suff_map["vyud"] = "выуд";
    suff_map["VYUD"] = "ВЫУД";
    suff_map["Vyud"] = "Выуд";
    suff_map["vyuch"] = "выуч";
    suff_map["VYUCH"] = "ВЫУЧ";
    suff_map["Vyuch"] = "Выуч";
    suff_map["vyuzh"] = "выуж";
    suff_map["VYUZH"] = "ВЫУЖ";
    suff_map["Vyuzh"] = "Выуж";

var char_map = new Array();
    char_map["a"] = "а";
    char_map["b"] = "б";
    char_map["c"] = "ц";
    char_map["d"] = "д";
    char_map["e"] = "е";
    char_map["f"] = "ф";
    char_map["g"] = "г";
    char_map["h"] = "х";
    char_map["i"] = "и";
    char_map["j"] = "й";
    char_map["k"] = "к";
    char_map["l"] = "л";
    char_map["m"] = "м";
    char_map["n"] = "н";
    char_map["o"] = "о";
    char_map["p"] = "п";
    char_map["q"] = "я";
    char_map["r"] = "р";
    char_map["s"] = "с";
    char_map["t"] = "т";
    char_map["u"] = "у";
    char_map["v"] = "в";
    char_map["w"] = "в";
    char_map["x"] = "х";
    char_map["y"] = "ы";
    char_map["z"] = "з";
    char_map["A"] = "А";
    char_map["B"] = "Б";
    char_map["C"] = "Ц";
    char_map["D"] = "Д";
    char_map["E"] = "Е";
    char_map["F"] = "Ф";
    char_map["G"] = "Г";
    char_map["H"] = "Х";
    char_map["I"] = "И";
    char_map["J"] = "Й";
    char_map["K"] = "К";
    char_map["L"] = "Л";
    char_map["M"] = "М";
    char_map["N"] = "Н";
    char_map["O"] = "О";
    char_map["P"] = "П";
    char_map["Q"] = "Я";
    char_map["R"] = "Р";
    char_map["S"] = "С";
    char_map["T"] = "Т";
    char_map["U"] = "У";
    char_map["V"] = "В";
    char_map["W"] = "В";
    char_map["X"] = "Х";
    char_map["Y"] = "Ы";
    char_map["Z"] = "З";
    suff_map["'"] = "ь";

function detransliterate(text)
{
  var newtext = text;  
  
  for (var k in suff_map) {
    var reg = new RegExp(k, "g");
    newtext = newtext.replace(reg, suff_map[k]);
  }
  
  for (var k in char_map) {
    var reg = new RegExp(k, "g");
    newtext = newtext.replace(reg, char_map[k]);
  }
    
  return newtext;
}
