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;
	alert("Switch to a text field first!");
	return;
  }

  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;
}
