////////////////////////////////////////////////////////////////////////////////
//
//  Скрипт:    Perekod
//  Версия:    1.1
//  Дата:      30 сентября 2005
//  Автор:     Chiezo
//  E-mail:    chiezo@onego.ru
//
//  Описание:  Перекодирует текст из латиницы в кириллицу, и наоборот.
//             
//             
////////////////////////////////////////////////////////////////////////////////

// Глобальные переменные:

Cyr = new String("АБЦДЕФГХИЙКЛМНОПЩРСТУВЩХЫЗ      абцдефгхийклмнопщрстувщхыз");
Lat = new String("A B V G D E ZhZ I J K L M N O P R S T U F X C ChShW ~ Y \' E\'YuYaa b v g d e zhz i j k l m n o p r s t u f x c chshw   y \' e\'yuya");

Buf = new String();	// Выделение памяти для текстовых буферов
Wbuf = new String();

var IE = false;		// Определение типа браузера
if (document.all) IE = true;

var allowErase = true;

//------------------------------------------------------------------------------

function perekod(elem)
{
	var cyr;
	var code;

        alert(elem);

        if (elem == undefined) 
            elem = 'body';

	Buf = document.getElementById(elem).value;
	Wbuf = "";
	cyr = false;

	if (IE){				// Определение кодировки
		if (Buf.search("[А-я]") != -1) cyr = true;	// IE поддерживает быстрый поиск символов кириллицы
	}
	else{
		for (var i = 0; i < Buf.length; i++)
		{
			code = Buf.charCodeAt(i);
			if (code < 0) code += 256;
			if (code > 127) cyr = true;
		}
	}
	if (cyr) c();		// Перекодирование в латиницу
	else l();			// Перекодирование в кириллицу

	document.getElementById(elem).value = Wbuf;	// Вывод текста

	document.getElementById('recode').blur();
}
//------------------------------------------------------------------------------

function c()	// Перекодирование в латиницу:
{
	var src;
	var dest;
	var code;

	for (var i = 0; i < Buf.length; i++)
	{
		src = Buf.charAt(i);
		code = Buf.charCodeAt(i);
		dest = src;								// Остальные символы не перекодируются

		if (code < 0) code += 1104;				// Netscape возвращает отрицательные значения для кириллицы
		if ((code > 1024) && (code < 1106)){	// Перекодируются только символы кириллицы
			if (Lat.charAt((code - 1040) * 2) != " "){		// Перекод!
				dest = Lat.charAt((code - 1040) * 2);
				}
			if (Lat.charAt((code - 1040) * 2 + 1) != " "){	// Двойные символы
				Wbuf = Wbuf + dest;
				dest = Lat.charAt((code - 1040) * 2 + 1);
			}
		}
		switch (src){							// Символы за пределами таблицы
			case "Ё": dest = "Yo"; break;
			case "ё": dest = "yo"; break;
			case "ь": dest = "\'"; break;
			case "ъ": dest = "~"; break;
			case "№": dest = "#"; break;
		}
		Wbuf = Wbuf + dest;					// Составление нового текста
	}
}
//------------------------------------------------------------------------------

function l()	// Перекодирование в кириллицу:
{
	var src1;
	var src2;
	var dest;
	var code;

	for (var i = 0; i < Buf.length; i++)
	{
		src1 = Buf.charAt(i);
		src2 = Buf.charAt(i + 1);
		code = Buf.charCodeAt(i);
		dest = src1;

		if ((code < 128) && (code > 0)){			// Перекодируются только латинские символы
			if (Cyr.charAt(code - 65) != " "){		// Перекод!
				dest = Cyr.charAt(code - 65);
			}
			if (code < 65) dest = src1;
			switch (src1){									// Символы за пределами таблицы
				case "\'": dest = "ь"; break;
				case "~": dest = "ъ"; break;
				case "#": dest = "№"; break;
				case "Y":
					switch (src2){							// Двойные символы
						case "u": dest = "Ю"; i++; break;
						case "o": dest = "Ё"; i++; break;
						case "a": dest = "Я"; i++; break;
					}
					break;
				case "y":
					switch (src2){
						case "u": dest = "ю"; i++; break;
						case "o": dest = "ё"; i++; break;
						case "a": dest = "я"; i++; break;
					}
					break;
				case "Z": if (src2 == "h"){dest = "Ж"; i++;} break;
				case "z": if (src2 == "h"){dest = "ж"; i++;} break;
				case "C": if (src2 == "h"){dest = "Ч"; i++;} break;
				case "c": if (src2 == "h"){dest = "ч"; i++;} break;
				case "S": if (src2 == "h"){dest = "Ш"; i++;} break;
				case "s": if (src2 == "h"){dest = "ш"; i++;} break;
				case "E": if (src2 == "\'"){dest = "Э"; i++;} break;
				case "e": if (src2 == "\'"){dest = "э"; i++;} break;
			}
		}
		Wbuf = Wbuf + dest;				// Составление нового текста
	}
}
//------------------------------------------------------------------------------

function erase(elem)
{
        if (elem == undefined) 
            elem = 'body';

	document.getElementById('recode').blur();
	document.getElementById(elem).focus();
	if (document.getElementById(elem).value == "") return;
	if (!allowErase) if (!confirm("Вы действительно хотите стереть весь текст?")) return;
	document.getElementById(elem).value = "";
	allowErase = false;
}