

	// cyrillic
	function InitLanguage(text_area_id, button_id) {
		id_pho = new Array();
		id_pho[65] = "а";
		id_pho[66] = "б";
		id_pho[67] = "ц";
		id_pho[68] = "д";
		id_pho[69] = "е";
		id_pho[70] = "ф";
		id_pho[71] = "г";
		id_pho[72] = "х";
		id_pho[73] = "и";
		id_pho[74] = "й";
		id_pho[75] = "к";
		id_pho[76] = "л";
		id_pho[77] = "м";
		id_pho[78] = "н";
		id_pho[79] = "о";
		id_pho[80] = "п";
		id_pho[81] = "я";
		id_pho[82] = "р";
		id_pho[83] = "с";
		id_pho[84] = "т";
		id_pho[85] = "у";
		id_pho[86] = "ж";
		id_pho[87] = "в";
		id_pho[88] = "ь";
		id_pho[89] = "ъ";
		id_pho[90] = "з";
		id_pho[192] = "ч";
		id_pho[219] = "ш";
		id_pho[220] = "ю";
		id_pho[221] = "щ";

		id_bds = new Array();
		id_bds[59] = "м";
		id_bds[65] = "ь";
		id_bds[66] = "ф";
		id_bds[67] = "ъ";
		id_bds[68] = "а";
		id_bds[69] = "е";
		id_bds[70] = "о";
		id_bds[71] = "ж";
		id_bds[72] = "г";
		id_bds[73] = "с";
		id_bds[74] = "т";
		id_bds[75] = "н";
		id_bds[76] = "в";
		id_bds[77] = "п";
		id_bds[78] = "х";
		id_bds[79] = "д";
		id_bds[80] = "з";
		id_bds[81] = ",";
		id_bds[82] = "и";
		id_bds[83] = "я";
		id_bds[84] = "ш";
		id_bds[85] = "к";
		id_bds[86] = "э";
		id_bds[87] = "у";
		id_bds[88] = "й";
		id_bds[89] = "щ";
		id_bds[90] = "ю";
		id_bds[107] = ".";
		id_bds[188] = "р";
		id_bds[190] = "л";
		id_bds[191] = "б";
		id_bds[219] = "ц";
		id_bds[221] = ";";
		id_bds[222] = "ч";

		language_button = document.getElementById(button_id);

		if (window.opera == undefined) {
			caps_lock = false;
			id_letter = id_pho;
			language = 0;

			language_button.onclick = ChangeLanguage;
			language_button.innerHTML = "PHO";

			text_container = document.getElementById(text_area_id);
			text_container.onkeydown = KeyPressed;
			document.onkeydown = CapsLockPressed;
		}
		else {
			language_button.innerHTML = "OFF";
		}
	}

	function ChangeLanguage() {
		language = (language < 2) ? language + 1 : 0;
		switch (language) {
			case 0:
				language_button.innerHTML = "PHO";
				delete id_letter;
				id_letter = id_pho;
			break;
			case 1:
				language_button.innerHTML = "BDS";
				delete id_letter;
				id_letter = id_bds;
			break;
			case 2:
				language_button.innerHTML = "OFF";
				id_letter = new Array();
			break;
		}
	}

	function CursorPosition(text_container) {
	   	// Gecko
		if (text_container.selectionStart !== undefined) {
			return new Array(text_container.selectionStart, text_container.selectionEnd);
		}
		// IE
		else if (document.selection !== undefined) {
			var search_text = "~080~";
			var selection = document.selection.createRange();
			var selection_length = selection.text.replace(/rn/g, "n").length;

			var original_text = text_container.value.replace(/rn/g, "n");
			selection.text = search_text;
			var actual_text = tmp = text_container.value.replace(/rn/g, "n");

			for (var difference = 0; difference < original_text.length; difference++) {
				if(original_text.charAt(difference) != actual_text.charAt(difference)) break;
			}
			for (var index = 0, start = 0;
				tmp.match(search_text) && (tmp = tmp.replace(search_text, "")) && index <= difference;
				index = start + search_text.length
			) {
			    start = actual_text.indexOf(search_text, index);
			}
			return new Array(start, start + selection_length);
		}
		// all other
		else return new Array(0, 0);
	}

	function CapsLockPressed(event_param) {
		var key_event = (window.event) ? window.event : event_param;
		var key_id = key_event.keyCode;
		if (key_id == 20) {
			caps_lock = (caps_lock) ? false : true;
			return false;
		}
	}

	function KeyPressed(event_param) {
		var key_event = (window.event) ? window.event : event_param;
		var key_id = key_event.keyCode;
		var shift_key = key_event.shiftKey;
		var alt_key = key_event.altKey;
		var ctrl_key = key_event.ctrlKey;

		if (alt_key || ctrl_key || id_letter[key_id] == undefined) return;

		var text = text_container.value;

		var letter = ((shift_key && !caps_lock) || (!shift_key && caps_lock)) ? id_letter[key_id].toUpperCase() : id_letter[key_id];

		var selection = CursorPosition(text_container);
		var cursor_position = selection[0] + 1;
		var scroll_position = text_container.scrollTop;
		text_container.value = text.substring(0, selection[0]) + letter + text.substring(selection[1], text.length);
        text_container.scrollTop = scroll_position;

	   	// Gecko
	    if (text_container.selectionStart) {
	        text_container.focus();
	        text_container.setSelectionRange(cursor_position, cursor_position);
	    }
		// IE
	    else if (text_container.createTextRange) {
	        var selection = text_container.createTextRange();
	        selection.move("character", cursor_position);
	        selection.select();
		}

		return false;
	}

