/*****************************************************************

   Adapded for invision power board by DaLiV (daliv at apollo lv)
   2005. november 17.
   based on

   www.translit.ru JavaScript source code
   http://www.translit.ru
   Copyright (c): 2002-2005 Igor Ilin (Èãîðü Èëüèí)   

   * This program is distributed in the hope that it will
   * be useful, but WITHOUT ANY WARRANTY; without even the
   * implied warranty of MERCHANTABILITY or FITNESS FOR A
   * PARTICULAR PURPOSE.
   
   Description: the JavaScript code performs the transliteration and supports the virtual keyboard functionality on the user's browser side. The code you see on your screen is the result of server side JavaScript source code combing for the particular user's browser, such as Intenet Explore, Mozilla Firefox, Opera and others.
  
  
  onkeypress="translate_letter(event);" 
  fastreplyarea

  
  ******************************************************************/

var language = 2;
var prelanguage = 2;
var processhtmltags = 0;
var processbbcodetags = 0;

function TranslitCreateCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function TranslitReadCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function TranslitEraseCookie(name)
{
	createCookie(name,"",-1);
}

function setfoc() 
{
        document.REPLIER.Post.focus();
        return false;
}

function highlightall()
{
        document.REPLIER.Post.focus(); 
        document.REPLIER.Post.select(); 
        return false;
}

var lat = ('/E_/e_/O_/o_Øh_Éo_Çh_Öh_Ñh_Ée_Éu_Éa_Ûo_Ûu_Ûa_ØH_ÉO_ÇH_ÖH_ÑH_ÉE_ÉU_ÉA_ÛO_ÛU_ÛA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_X_C_ú#_Y_ü\'_H_W_Q_øh_éo_çh_öh_ñh_ée_éu_éa_ûo_ûa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'_h_w_q_'+String.fromCharCode(220)+'_'+String.fromCharCode(214)+'_'+String.fromCharCode(196)+'_'+String.fromCharCode(252)+'_'+String.fromCharCode(246)+'_'+String.fromCharCode(228)).split('_');
var rus = ('E_e_O_o_Ù_¨_Æ_×_Ø_Ý_Þ_ß_¨_Þ_ß_Ù_¨_Æ_×_Ø_Ý_Þ_ß_¨_Þ_ß_À_Á_Â_Ã_Ä_Å_Ç_È_É_Ê_Ë_Ì_Í_Î_Ï_Ð_Ñ_Ò_Ó_Ô_Õ_Ö_Ú_Û_Ü_Õ_Ù_ß_ù_¸_æ_÷_ø_ý_þ_ÿ_¸_ÿ_à_á_â_ã_ä_å_ç_è_é_ê_ë_ì_í_î_ï_ð_ñ_ò_ó_ô_õ_ö_ú_û_ü_õ_ù_ÿ_Þ_¨_Ý_þ_¸_ý').split('_');
var rus2 = ('Ù_¨_Æ_×_Ø_Ý_Þ_ß_À_Á_Â_Ã_Ä_Å_Ç_È_É_Ê_Ë_Ì_Í_Î_Ï_Ð_Ñ_Ò_Ó_Ô_Õ_Ö_Ú_Û_Ü_ù_¸_æ_÷_ø_ý_þ_ÿ_à_á_â_ã_ä_å_ç_è_é_ê_ë_ì_í_î_ï_ð_ñ_ò_ó_ô_õ_ö_ú_û_ü').split('_');
var lat2 = ('Shh_Jo_Zh_Ch_Sh_Je_Ju_Ja_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_H_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'').split('_');

var maxtransliterationlength = 3;
var textareafontsize = 14; // warning: the value is also defined in the css-file !!!
var textreafontwidth = 7; // the width of the text is supposed to be 7 !!!

function addchar(result)
{
        setfoc(); 
        var tt = window.document.REPLIER.Post; 
        var p1 = tt.selectionStart;
        tt.value = tt.value.substring(0, p1)+result+tt.value.substring(tt.selectionEnd);
        tt.setSelectionRange(p1+result.length,p1+result.length); 
        return false;
}

function setfoc_end()
{
        setfoc(); 
        var tt = window.document.REPLIER.Post; 
        tt.setSelectionRange(tt.value.length,tt.value.length); 
        return false;
}

function setlangpicture()
{
        document.ruslat.src = swoff_src;
}

function changelanguage()
{
        if (language==2) {
                language=1;
                document.images['ruslat'].src = "pict/swlat.gif";
        }
        else if (language==1) {
                language=0;
                document.images['ruslat'].src = "pict/swrus.gif"; 
        } else {
                language=2;
                document.images['ruslat'].src = "pict/swoff.gif"; 
		}
        setfoc();
        return false;
}

function setlat()
{
        language=1; 
        document.images['ruslat'].src = swlat_src; 
        setfoc(); 
        return false;
}

function setrus()
{
		language=0;
        document.images['ruslat'].src = swrus_src; 
        setfoc(); 
        return false;
}

function setoff()
{
        document.images['ruslat'].src = swoff_src; 
        setfoc(); 
        return false;
}

function AkeyIsDown(evnt)
{
        var code = 0; 
        code = evnt.keyCode;
        if ((code==13)&&(evnt.altKey)) {
                document.forms.searchform.target='_top';shortcut_service('gosetup'); 
                evnt.preventDefault();
        }
        if ((code==13)&&(evnt.ctrlKey)) {
                document.forms.searchform.target='_top';shortcut_service('gosetup'); 
                evnt.preventDefault();
        }
        if (code==27) {
                changelanguage(); 
                evnt.preventDefault();
        }
        return false;
}

function translate_letter(evnt)
{
        var code = void 0;
        var code = evnt.charCode ? evnt.charCode : void 0;
        if (!evnt.which)
        {
                return true;
        }
        var txt = String.fromCharCode(code);
        if (processhtmltags&&(txt=='<')) {
                prelanguage=language; setlat();
        }
        if (processhtmltags&&(txt=='>')) {
                if(prelanguage=1) setlat(); else if(prelanguage=2) setoff; else setrus();
        }
        if (processbbcodetags&&(txt=='[')) {
                prelanguage=language; setlat();
        }
        if (processbbcodetags&&(txt==']')) 
        {
                if(prelanguage=1) setlat(); else if(prelanguage=2) setoff; else setrus();
        }
        if (code&&code>33&&(!(evnt.ctrlKey||evnt.altKey)))
        {
                if (evnt.preventDefault)
                {
                        evnt.preventDefault();
                }
                txt = String.fromCharCode(code);
                tt = window.document.REPLIER.Post;
                var pretxt = tt.value.substring(0, tt.selectionStart);
                var result = "";
                var pXpix = tt.scrollTop;
                var pYpix = tt.scrollLeft;
                if (language==1)
                {
                        result = pretxt+translatesymboltolatin(txt);  // to latin
                }
                else if (language==0)
                {
                        result = translatesymboltocyrillic(pretxt+txt); // to cyrillic
                }
				else
				{
                        result = pretxt+txt;  // none
				}
                var therest = tt.value.substr(tt.selectionEnd);
                tt.value = result+therest;
                tt.setSelectionRange(result.length,result.length);
                var vv = therest.search(/[\n\s]/);
                var r = laststringlength(result)*(textreafontwidth+1)-pYpix-tt.clientWidth/2;
                var dd = Math.abs(2*r)<tt.clientWidth?0:r-tt.clientWidth/2*(r>0?1:-1);
                tt.scrollLeft = pYpix+dd+(dd==0?0:(dd>0)?2:-textreafontwidth-1);
                r = (nofstrings(result+(vv==-1?therest:therest.substring(0, vv)),tt.clientWidth, textreafontwidth)-0.5)*(textareafontsize+3)-pXpix-tt.clientHeight/2;
                tt.scrollTop = pXpix+(Math.abs(2*r)<(tt.clientHeight-textareafontsize-3)?0:r-(tt.clientHeight-textareafontsize-3)/2*(r>0?1:-1));                
                setfoc();
        }
        return false;
}

function translatesymboltocyrillic(txt)
{
        var pos = 0;
        for (var ii=0; ii<lat.length; ii++)
        {
                pos = txt.length>lat[ii].length?(txt.length-lat[ii].length):0;
                if (lat[ii]==txt.substr(pos,txt.length-pos)) {
                        return txt.substr(0,txt.length-lat[ii].length)+rus[ii];
                }
        }
        return txt;
}

function translatesymboltolatin(symb)
{
        for (var ii=0;ii<rus2.length;ii++)
        {
                if (rus2[ii]==symb)
                return lat2[ii];
        }
        return symb;
}

function translateAlltoCyrillic()
{
        var inloop=1;
        var tt = window.document.REPLIER.Post; 
        var p1 = tt.selectionStart; 
        var p2 = tt.selectionEnd;
        var preval = ""; 
        var postval="";
        if (p1==p2) {txt = tt.value;}
        else
        {
                preval = tt.value.substring(0, p1);
                txt = tt.value.substring(p1,p2);
                postval = tt.value.substring(p2);
        }
        var txtnew = "";
        if ((!processhtmltags)&&(!processbbcodetags))
        {
                txtnew = translateStringtoCyrillic(txt);        
        }
        else
        {
                var htt1,pbb1,t1,t2,txt1,txt2,tag_open,tag_close;
                var noinputtag=0;
                if (processhtmltags) {tag_open="<";tag_close=">";}
                if (processbbcodetags) {tag_open="[";tag_close="]";}
                while(inloop)
                {
                        if (processhtmltags&&processbbcodetags)
                        {
                                htt1 = txt.indexOf("<");
                                pbb1 = txt.indexOf("[");
                                if (pbb1==htt1) {noinputtag=1}
                                if (pbb1==-1) {pbb1=txt.length;}
                                if (htt1==-1) {htt1=txt.length;}                
                                if (htt1<pbb1) {t1=htt1; tag_close=">";} else {t1=pbb1; tag_close="]";}
                        }
                        else
                        {
                                t1 = txt.indexOf(tag_open);
                                if (t1==-1) noinputtag=1;
                        }
                        if (noinputtag) {inloop=0;t1=txt.length;t2=txt.length;}
                        else
                        {
                                txt2=txt.substring(t1,txt.length);
                                t2=txt2.indexOf(tag_close);
                                //if (t2==-1) {t2=txt.length; inloop=0;} else {t2=t2+t1+1};
                                if (t2==-1) {t2=t1+1} else {t2=t2+t1+1};
                        }
                        txt1 = txt.substring(0,t1);
                        txt2 = txt.substring(t1,t2);
                        txt = txt.substring(t2,txt.length);
                        txtnew = txtnew+translateStringtoCyrillic(txt1)+txt2;                   
                }
        }
        tt.value = preval+txtnew+postval;
        if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
        tt.focus();
        return false;
}

function translateStringtoCyrillic(thestringlat)
{
        var symbb,fromm,howmuch,thestringcyr="";
        for (kk=0;kk<thestringlat.length;kk++)
        {
                howmuch = thestringcyr.length>maxtransliterationlength?maxtransliterationlength:thestringcyr.length;
                fromm = thestringcyr.length-howmuch;
                symbbb = thestringlat.substr(kk,1);
                symbbb = translatesymboltocyrillic(thestringcyr.substr(fromm,howmuch)+symbbb);
                thestringcyr = thestringcyr.substr(0,fromm)+symbbb;             
        }
        return thestringcyr;
}

function translateAlltoLatin()
{
        tt = window.document.REPLIER.Post; 
        p1 = tt.selectionStart; p2 = tt.selectionEnd;
        var preval = ""; var postval="";
        if (p1==p2) {txt = tt.value;}
        else
        {
                preval = tt.value.substring(0, p1);
                txt = tt.value.substring(p1,p2);
                postval = tt.value.substring(p2);
        }
        txtnew="";
        var symb = "";
        for (kk=0;kk<txt.length;kk++)
        {
                symb = translatesymboltolatin(txt.substr(kk,1));
                txtnew = txtnew.substr(0,txtnew.length) + symb;
        }
        tt.value = preval+txtnew+postval;
        if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
        tt.focus();
        return false;
}

function gettextareaval(thetextarea)
{
        with (thetextarea)
        {
                if (selectionStart==selectionEnd) return value; 
                return value.substring(selectionStart,selectionEnd);
        }
}

function btcvalue(thetextarea)
{
        return thetextarea.value.substring(0,thetextarea.selectionEnd);
}

function Cleartrans()
{
        var textinputform = window.document.REPLIER.Post; 
        var p1 = textinputform.selectionStart; 
        var p2 = textinputform.selectionEnd; 
        if (p1==p2) {
                textinputform.value="";
        } else {
                textinputform.value = textinputform.value.substring(0, p1)+textinputform.value.substring(p2);
        } 
        textinputform.focus(); 
        textinputform.setSelectionRange(p1,p1);
        return false;
}

if (document.images) {
        var swrus_src = "pict/swrus.gif";
        var swlat_src = "pict/swlat.gif";
        var swoff_src = "pict/swoff.gif";
}

function nofstrings(thetext, txtareawidthpix, symbolwidth)
{
        var maxstrlengthallowed = Math.floor(txtareawidthpix/(symbolwidth+1))+1;
        var tt, pp, ppp, tuntil, ii;
        var t2 = thetext.split("\n");
        var s = t2.length;
        for (ii=0; ii<t2.length; ii++)
        {
                tt=t2[ii]+" ";
                pp = 0;
                tuntil = maxstrlengthallowed;
                while(tt.indexOf(" ",pp)!=-1)
                {
                        ppp = pp;
                        pp = tt.indexOf(" ",pp)+1;
                        if (pp>tuntil&&pp-ppp-1)
                        {
                                tuntil = ppp+maxstrlengthallowed;
                                if (pp<tuntil) 
                                {
                                        pp = ppp;
                                }
                                s++;
                        }       
                }               
        }
        return s;
}

function laststringlength(thetext)
{
        var t = thetext.replace(/\n/g," ");
        return thetext.replace(/\n/g," ").length-thetext.replace(/\n/g," ").lastIndexOf(" ")-1;
}

var undotext = new Array('');
var undodepth = 10;

function common_string(s1,s2)
{
        var count1 = 0;
        while((s1.charAt(count1) == s2.charAt(count1))&&(count1 < s1.length)&&(count1 < s2.length))
        {
                count1++;
        }
        var count2 = 0;
        while((s1.charAt(s1.length-count2-1) == s2.charAt(s2.length-count2-1))&&(count2 < s1.length-count1)&&(count2 < s2.length-count1))
        {
                count2++;
        }
        return s1.substring(0,s1.length-count2);
}

