var undoeng=new Array();
var quote_str="";

/* Skip these strings */
//var t_skip=new Array("html", "", "code", "", "img", "", "sql", "", "quote", "(=[\"']?[^"+String.fromCharCode(92,93)+"]+)?", "email", "(=[\"']?[a-zA-Z0-9_.-]+@?[a-zA-Z0-9_.-]+[\"']?)?", "url", "(=[\"']?[^ \"'"+String.fromCharCode(92,93)+"]*[\"']?)?" );
var t_skip=new Array("html", "", "code", "", "img", "", "b", "", "q", "(=[\"']?[^"+String.fromCharCode(92,93)+"]+)?", "email", "(=[\"']?[a-zA-Z0-9_.-]+@?[a-zA-Z0-9_.-]+[\"']?)?", "url", "(=[\"']?[^ \"'"+String.fromCharCode(92,93)+"]*[\"']?)?" );

/* Keyboard table */
var f_table0="  1!2@3#4$5%6^7&8*9(0)-_=+\\|/?`~qQwWeErRtTyYuUiIoOpP[{]}\n\naAsSdDfFgGhHjJkKlL;:'\"zZxXcCvVbBnNmM,<.>";
var f_table1="  1!2\"3¹4;5%6:7?8*9(0)-_=+\\/.,¸¨éÉöÖóÓêÊåÅíÍãÃøØùÙçÇõÕúÚ\n\nôÔûÛâÂàÀïÏðÐîÎëËäÄæÆýÝÿß÷×ñÑìÌèÈòÒüÜáÁþÞ";
var f_table2="  1!2\"3¹4;5%6:7?8*9(0)-_=+\\/.,¸¨ùÙøØåÅðÐòÒéÉóÓèÈîÎïÏýÝúÚ\n\nàÀñÑäÄôÔãÃõÕæÆêÊëËþÞüÜçÇ÷×öÖâÂáÁíÍìÌÿß.,";

/* Tree character letters */
var t_table3="SCHschSch";
var w_table3="Ù  ù  Ù  ";

/* Two character letters */
var t_table2="KHYOJOZHCHJUYAJAkhyojozhchshyujuyajaKhYoYoZhChShYuJuYaJa"+"SHYU";
var w_table2="Õ ¨ ¨ Æ × Þ ß ß õ ¸ ¸ æ ÷ ø þ þ ÿ ÿ Õ ¨ ¨ Æ × Ø Þ Þ ß ß "+String.fromCharCode(848+216)+" "+String.fromCharCode(848+222)+" ";

/* One character letters */
var t_table1="ABVGDEZIJKLMNOPRSTUFHCWYXQabvgdezijklmnoprstufhxcwy'`~q";
var w_table1="ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÛÚÝàáâãäåçèéêëìíîïðñòóôõõöùûüüúý";

function translit2win(str)
{
 len=str.length;
 new_str="";
 for(i=0;i<len;i++)
 {
  if(str.substr(i).indexOf("^")==0)
  {
   end_len=str.substr(i+1).indexOf("^")+2;
   if(end_len>1)
   {
    new_str+=str.substr(i,end_len);
    i+=end_len-1;
    continue;
   }
  }

  if(str.substr(i).indexOf(":")==0)
  {
   end_len=str.substr(i+1).indexOf(":")+2;
   if(end_len>1 && str.substr(i,end_len).match("^:[a-zA-Z0-9]+:$"))
   {
    new_str+=str.substr(i,end_len);
    i+=end_len-1;
    continue;
   }
  }

  /* Check for valid ed2k:/.../ links */
  re=new RegExp("^(ed2k:"+String.fromCharCode(92,47,92,47,91,94,92,47,93,43,41),"i");
  if(newArr=str.substr(i).match(re))
  {
   new_str+=newArr[1];
   i+=newArr[1].length-1;
   continue;
  }

  /* Check for valid http|new|ftp:/.../ links */
  re=new RegExp("^((http|https|news|ftp):"+String.fromCharCode(92,47,92,47,91,92,47)+"a-zA-Z0-9%_?.:+=@-]+)","i");
  if(newArr=str.substr(i).match(re))
  {
   new_str+=newArr[1];
   i+=newArr[1].length-1;
   continue;
  }

  /* Check for simple tags */
//re=new RegExp(String.fromCharCode(94,40,92,91,92,47,63)+"(b|i|u|s|font(=[a-z0-9]+)?|size(=[0-9]+)?|color(=#?[a-z0-9]+)?)" + String.fromCharCode(92,93,41),"i");
  re=new RegExp(String.fromCharCode(94,40,92,91,92,47,63)+"(i|u|s|font(=[a-z0-9]+)?|size(=[0-9]+)?|color(=#?[a-z0-9]+)?)" + String.fromCharCode(92,93,41),"i");
  if(newArr=str.substr(i).match(re))
  {
   new_str+=newArr[1];i+=newArr[1].length-1;
   continue;
  }

  /* Check for tags, described in t_skip[] array */
  tag_skip=false;
  for(j=0;j<t_skip.length;j+=2)
  {
   re=new RegExp(String.fromCharCode(94,40,92,91)+t_skip[j]+t_skip[j+1]+String.fromCharCode(92,93,41),"i");
   if(newArr=str.substr(i).match(re))
   {
    var new_i=i+newArr[1].length;
    newArr[2]=newArr[1];
    for(z=1;z>0;z--)
    {
     re=new RegExp(String.fromCharCode(92,91,92,47) + t_skip[j] + String.fromCharCode(92,93), "i");
     if((end_pos=str.substr(new_i).search(re))>=0)
     {
      end_len=end_pos+t_skip[j].length+3;
      new_str+=str.substr(i,end_len+newArr[1].length);
      i+=end_len+newArr[1].length;
      tag_skip=true;

      ep=0;
      re=new RegExp(String.fromCharCode(92,91)+t_skip[j]+t_skip[j+1]+String.fromCharCode(92,93),"i");
      while((end_pos=str.substr(new_i+ep,end_len-ep).search(re))>=0)
      {
       z++;
       ep+=end_pos+newArr[2].length;
      }

      new_i=i;
      newArr[1]="";
     }
    }
   }
   if(tag_skip)
   {
    i--;
    break;
   }
  }
  if(tag_skip)continue;

  /* Check for valid (mailto:)email@host.com links */
  re=new RegExp("^((mailto:)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+)", "i");
  if(newArr=str.substr(i).match(re))
  {
   new_str+=newArr[1];
   i+=newArr[1].length-1;
   continue;
  }

  /* Check for 3-character letters */
/*
  if(i<len-2)
  {
   for(j=0;j<w_table3.length / 3;j++)
   {
    if(str.substr(i,3)==t_table3.substr(j*3,3))
    {
     new_str+=w_table3.substr(j*3,1);
     i++;
     tag_skip=true;
     break;
    }
   }
  }
  if(tag_skip)continue;
*/

  /* Check for 2-character letters */
  if(i<len-1)
  {
   for(j=0;j<w_table2.length / 2;j++)
   {
    if(str.substr(i,2)==t_table2.substr(j*2,2))
    {
     new_str+=w_table2.substr(j*2,1);
     i++;
     tag_skip=true;
     break;
    }
   }
  }
  if(tag_skip)continue;

  /* Convert one-character letter */
  c=str.substr(i,1);
  pos=t_table1.indexOf(c);
  if(pos<0)new_str+=c;
  else new_str+=w_table1.substr(pos,1);
 }
 if(new_str!=str)
 {
  undoeng[undoeng.length]=str;
 }
 //document.addform.message.focus();

 return new_str;
}

function untranslit() 
{
 str="";
 if(undoeng.length>1)
 {
  str=undoeng[undoeng.length-1];
  undoeng.length--;
 }
// document.addform.message.focus();
 return str;
}

function undoname()
{
 x=undoeng.length-1;
 if(x<0)
 {
  x=0;
 }
 str="Undo ("+x+")";
 return str;
}

function switch_vk(i)
{
 if (i==1)
 {
  if (document.addform.upper_chars.value==1)
  {
   document.addform.up1.value=document.addform.up2.value="shift";
   document.addform.upper_chars.value=0;
  }
  else
  {
   document.addform.up1.value=document.addform.up2.value="SHIFT";
   document.addform.upper_chars.value=1;
  }
 }
 else
 {
  if (document.addform.eng_chars.value==0)
  {
   document.addform.lng1.value=document.addform.lng2.value="RUS";
   document.addform.eng_chars.value=1;
  }
  else if (document.addform.eng_chars.value==1)
  {
   document.addform.lng1.value=document.addform.lng2.value="TRAN";
   document.addform.eng_chars.value=2;
  }
  else
  {
   document.addform.lng1.value=document.addform.lng2.value="ENG";
   document.addform.eng_chars.value=0;
  }
 }
 t=document.addform.eng_chars.value;
 d=document.addform.upper_chars.value==1?1:0;
 for(i=0;i<=98;i+=2)
 {
  if (f_table1.substr(i+d,1) == "\"" || f_table1.substr(i+d,1) == "\\")
   eval("if(document.addform.vk"+i+")document.addform.vk"+i+".value=f_table"+t+".substr(i+d,1);");
  else if (f_table1.substr(i+d,1) != "\n")
   eval("if(document.addform.vk"+i+")document.addform.vk"+i+".value=f_table"+t+".substr(i+d,1);");
 }
 document.addform.message.focus();
}

function vk(i)
{
 document.addform.message.focus();
 t=document.addform.eng_chars.value;
 d=(document.addform.upper_chars.value==1)?i+1:i;
 nT = "";
 eval("nT=f_table"+t+".substr("+d+",1);");
 if (document.addform.message.caretPos)
 {
  document.addform.message.caretPos.text += nT;
 }
 else if(document.addform.message.createTextRange)
 {
  var len = document.addform.message.selectionEnd;
  document.selection.createRange().text += nT;
  document.addform.message.selectionStart += nT.length;
 }
 else if(document.addform.message.setSelectionRange)
 {
  var len = document.addform.message.selectionEnd;
  document.addform.message.value = document.addform.message.value.substr(0, len) + nT + document.addform.message.value.substr(len);
  document.addform.message.setSelectionRange(len + nT.length, len + nT.length);
 }
 else
 {
  document.addform.message.value+=nT;
 }
}

function expDiv(id)
{
 if (document.getElementById(id).style.display)
 {
  if (document.getElementById(id).style.display == "none")
  {
   document.getElementById(id).style.display = "block";
   document.addform.vk_on.value = '1';
  }
  else
  {
   document.getElementById(id).style.display = "none";
   document.addform.vk_on.value = '0';
  }
 }
 else if (document.all[id].style.display)
 {
  if (document.all[id].style.display == "none")
  {
   document.all[id].style.display = "block";
   document.addform.vk_on.value = '1';
  }
  else
  {
   document.all[id].style.display = "none";
   document.addform.vk_on.value = '0';
  }
 }
 else if (document.layers[id].style.display)
 {
  if (document.layers[id].style.display == "none")
  {
   document.layers[id].style.display = "block";
   document.addform.vk_on.value = '1';
  }
  else
  {
   document.layers[id].style.display = "none";
   document.addform.vk_on.value = '0';
  }
 }
}

function rk(textControl, evt)
{
 if (document.addform.vk_on.value == '0')
 {
  return true;
 }

 var keyCode = void 0;
 if (evt.keyCode)
 {
  keyCode = evt.keyCode;
  if (is_op && (keyCode == 33 || keyCode == 34 || keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40))
  {
   return true;
  }
 }
 else if (evt.which)
 {
  keyCode = evt.which;
 }
 else if (evt.charCode)
 {
  keyCode = evt.charCode;
  if (evt.ctrlKey)keyCode = void 0;
 }
 var CurrentKey;
 if (keyCode)CurrentKey = String.fromCharCode(keyCode);

 var keyCheck = sr(keyCode, CurrentKey);
 if (keyCode && !is_op)
 {
  if (keyCheck.cancelKey)
  {
   return false;
  }
  else if (keyCheck.replaceKey)
  {
   evt.keyCode = keyCheck.newKeyCode;
   if (evt.preventDefault)evt.preventDefault();
   return true;
  }
  else return true;
 }
 else if (typeof textControl.setSelectionRange != 'undefined')
 {
  if (keyCheck.cancelKey)
  {
   if (evt.preventDefault)evt.preventDefault();
   return false;
  }
  else if (keyCheck.replaceKey)
  {
   // cancel the key event and insert the newKey for the current selection
   if (evt.preventDefault)evt.preventDefault();
   var oSS = textControl.selectionStart;
   var oSE = textControl.selectionEnd;
   var nT = typeof keyCheck.newKey != 'undefined' ? keyCheck.newKey : String.fromCharCode(keyCheck.newKeyCode);
   textControl.value = textControl.value.substring(0, oSS) + nT + textControl.value.substring(oSE);
   textControl.setSelectionRange(oSS + nT.length, oSS + nT.length);
   return true;
  }
  else return true;
 }
 else if (keyCheck.cancelKey)
 {
  if (evt.preventDefault)evt.preventDefault();
  return false;
 }

 return true;
}

function sr(keyCode, CurrentKey)
{
 d=f_table0.indexOf(CurrentKey);
 if (d != -1)
 {
  if (document.addform.upper_chars.value == '1')
  {
   if (d%2 == 0)d++;
   else d--;
  }

  if (document.addform.eng_chars.value == '1')
   return { replaceKey: true, newKeyCode: f_table1.substr(d,1).charCodeAt(), newKey: f_table1.substr(d,1) };
  else if (document.addform.eng_chars.value == '2')
   return { replaceKey: true, newKeyCode: f_table2.substr(d,1).charCodeAt(), newKey: f_table2.substr(d,1) };
  else
   return { replaceKey: true, newKeyCode: f_table0.substr(d,1).charCodeAt(), newKey: f_table0.substr(d,1) };
 }
 else return { cancelKey: false };
}

function set_quote(text)
{
 if (text!="" && document.selection)
 {
  document.addform.message.focus();
  document.addform.document.selection.createRange().text = "[QUOTE]"+text+"[/QUOTE]\n";
 }
 else
 {
  document.addform.message.value += "[QUOTE]"+text+"[/QUOTE]\n";
 }
}

function get_quote()
{
 if (document.getSelection)
 {
  quote_str=document.getSelection();
  quote_str=quote_str.replace(/\r\n\r\n/gi, "_doublecaret_");
  quote_str=quote_str.replace(/\r\n/gi, " ");
  while (quote_str.indexOf("  ") !=-1)
   quote_str=quote_str.replace(/  /gi, "");
  quote_str=quote_str.replace(/_doublecaret_/gi, "\r\n\r\n");
 }
 else
 {
  quote_str=document.selection.createRange().text;
 }
}