//-------------------------------------------
// Îðèãèíàëüíûé êîä (c) Igor Iline, 2002,2003
// www.translit.ru
//-------------------------------------------

function Translit() {
    this.rus_lr2 = ('Å-å-Î-î-¨-¨-¨-¨-Æ-Æ-×-×-Ø-Ø-Ù-Ù-Ú-Ü-Ý-Ý-Þ-Þ-ß-ß-ß-ß-¸-¸-æ-÷-ø-ù-ý-þ-ÿ-ÿ').split('-');
    this.lat_lr2 = ('/E-/e-/O-/o-ÛO-Ûo-ÉO-Éo-ÇH-Çh-ÖH-Öh-ÑH-Ñh-ØH-Øh-ú'+String.fromCharCode(35)+'-ü'+String.fromCharCode(39)+'-ÉE-Ée-ÉU-Éu-ÉA-Éa-ÛA-Ûa-ûo-éo-çh-öh-ñh-øh-ée-éu-éa-ûa').split('-');
    this.rus_lr1 = ('À-Á-Â-Ã-Ä-Å-Ç-È-É-Ê-Ë-Ì-Í-Î-Ï-Ð-Ñ-Ò-Ó-Ô-Õ-Õ-Ö-Ù-Û-ß-à-á-â-ã-ä-å-ç-è-é-ê-ë-ì-í-î-ï-ð-ñ-ò-ó-ô-õ-õ-ö-ù-ú-û-ü-ü-ÿ').split('-');
    this.lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
    this.mozilla = true;
    if(document.all) this.mozilla = false;
    this.autotranslit = false;
}

Translit.prototype.translate_letter = function(textarea, e) {	
    if(!this.autotranslit) return;
    if(this.mozilla) {
        ev = e; 
    } else {
        ev = window.event;
    }
    
    var code = (this.mozilla)?ev.charCode:ev.keyCode;

    if(code == 0) return;
    if(ev.ctrlKey || ev.altKey) return;

	txt=String.fromCharCode(code);

    if(this.mozilla) {
        selstart = textarea.selectionStart;
        pretxt = textarea.value.substr(selstart-1,1);
    } else {
        // ie
        //make selection
        cursor_pos_selection = document.selection.createRange();
        //delete something is selected before
        cursor_pos_selection.text="";
        //get the previous character
        cursor_pos_selection.moveStart("character",-1);
        pretxt = cursor_pos_selection.text;
    }

	if (pretxt.length>1) {pretxt="";}
	result = this.translatesymboltocyrillic(pretxt,txt)
    if(this.mozilla) e.preventDefault(); else ev.keyCode = 0;
	//delete the previous symbol if it is exists (if the entered symbol is not the first one)
    if(this.mozilla) {
        selend = textarea.selectionEnd;
        if (pretxt!="") selstart--;
        txt = textarea.value;
        textarea.value = txt.substr(0,selstart)+result+txt.substr(selend);
        if (pretxt!="") selstart++;
        textarea.selectionStart = selstart+1;
        textarea.selectionEnd = selstart+1;
    } else {
        if (pretxt!="") { cursor_pos_selection.select(); cursor_pos_selection.collapse();}
        with(document.selection.createRange()) {text = result; collapse(); select()}
    }
	return;
}

Translit.prototype.translatesymboltocyrillic = function(pretxt,txt)
{
	var doubletxt = pretxt+txt;
	var code = txt.charCodeAt(0);
	if (!(((code>=65) && (code<=123))||(code==35)||(code==39))) return doubletxt;
	var ii;
	for (ii=0; ii<this.lat_lr2.length; ii++)
	{
		if (this.lat_lr2[ii]==doubletxt) return this.rus_lr2[ii];
	}
	for (ii=0; ii<this.lat_lr1.length; ii++)
	{
		if (this.lat_lr1[ii]==txt) return pretxt+this.rus_lr1[ii];
	}
	return doubletxt;
}
