/*
 * Software is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied.
 *
 * The Initial Developer of a code related to English / Russian transformation is SoftCorporation LLC.
 * Usage of this code allowed only with reference to SoftCorporation LLC.
 * which means including on a page which uses this code (or modified code) 
 * the visible and clickable link to: http://www.softcorporation.com/products/cyrillic
 * Copyright (C) 2000-2006 SoftCorporation LLC. All Rights Reserved.
 */

var truekey  =  "`qwertyuiop[]\\asdfghjkl;'zxcvbnm,./~@#$^&QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?-*+=_|1234567890";
var enkey = new Array('A','a','B','b','V','v','G','g','D','d','E','e','Yo','yo','Zh','zh','Z','z','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Ch','ch','Sh','sh','W','w','~','`','Y','y','"','\'','Je','je','Ju','ju','Ja','ja');
var rukey = new Array(1040,1072,1041,1073,1042,1074,1043,1075,1044,1076,1045,1077,1025,1105,1046,1078,1047,1079,1048,1080,1049,1081,1050,1082,1051,1083,1052,1084,1053,1085,1054,1086,1055,1087,1056,1088,1057,1089,1058,1090,1059,1091,1060,1092,1061,1093,1062,1094,1063,1095,1064,1096,1065,1097,1066,1098,1067,1099,1068,1100,1069,1101,1070,1102,1071,1103);

var lang = 'ru';
var layout = '1';
var capsLock = false;
var shift = false;
var br = "";
var emailText= "";
var lastch = "";
var lastch2 = false;

if (navigator.appName.indexOf("Microsoft")!=-1 && !window.opera) 
	br = "IE"

function getkey(evt)
{
	if (window.event)
		return window.event.keyCode
	else
		return (evt.keyCode || evt.which || evt.charCode);
}

function getCharKey(evt)
{
	if (window.event)
		if (window.opera)
			return evt.which || evt.charCode;	  
		else
			return window.event.keyCode
	return evt.charCode || evt.which;
}

function processEvt(evt,formid,langid,textid,linkid)
{
	var se = false;
	if (getkey(evt) == 123) // F12
	{
		chgLang(langid,textid);
		se = true;
	}
	else if (getkey(evt) == 13 && (evt.altKey || evt.ctrlKey)) // alt+enter
	{
		document.getElementById(linkid).click();
		se = true;
	}

	if (se)
	{
		if (evt.preventDefault) 
			evt.preventDefault();

		if (evt.stopPropagation) 
			evt.stopPropagation();
		evt.cancelBubble = true;
		return false;
	}
	return true;
}

function translate(fld, evt)
{
	var key = getCharKey(evt);
	var chr = String.fromCharCode(key);
	if (lang == 'ru' && !evt.altKey && !evt.ctrlKey && truekey.indexOf(chr)>=0)
	{
		var cf = trans(key);

		if (chr && window.event && !window.opera)
		{
			if(lastch2)
			{
				backAtCursor(fld);
				window.event.keyCode = cf;
				lastch2 = false;
			}
			else
				window.event.keyCode = cf;
		}
		else
		{
			if (evt.preventDefault) 
				evt.preventDefault();

			if(lastch2)
			{
				backAtCursor(fld);
//				fld.value=fld.value.substr(0,(fld.value.length-1));
				lastch2 = false;
			}
			var fss = fld.selectionStart;
			var fse = fld.selectionEnd;
			fld.value = fld.value.substring(0, fss) + String.fromCharCode(cf) + fld.value.substring(fse);
			fld.setSelectionRange(fss + 1, fss + 1);
			return false;
		}
	}
	return true;
}

function trans(key)
{
	if(lastch)
	{
		var symb = String.fromCharCode(lastch)+String.fromCharCode(key);
		for (var ii=0;ii<enkey.length;ii++)
		{
			if (enkey[ii]==symb)
			{
				key = rukey[ii];
				lastch = "";
				lastch2 = true;
				return key;
				break;
			}
		}
	}

	lastch = key;
//	var i = String.fromCharCode(key);
	var symb = String.fromCharCode(key);
	for (var i=0;i<enkey.length;i++)
	{
		if (enkey[i]==symb)
		{
			key = rukey[i];
			return key;
			break;
		}
	}
	return key;
//	alert(key);
}

function chgLang(langid,textid)
{
	if (lang == 'en')
	{
		lang = 'ru';
		if(langid)
			document.getElementById(langid).innerHTML = "ru";
	}
	else
	{
		lang = 'en';
		if(langid)
			document.getElementById(langid).innerHTML = "en";
	}
	document.getElementById(textid).focus();
}

function insertAtCursor(fld, val)
{
	fld.focus();
	if (document.selection)
	{
		var sel = document.selection.createRange();
		sel.text = val;
	}
	else if (fld.selectionStart || fld.selectionStart == '0') 
	{
		var fss = fld.selectionStart;
		var fse = fld.selectionEnd;
		fld.value = fld.value.substring(0, fss) + val + fld.value.substring(fse);
		fld.setSelectionRange(fss + 1, fss + 1);
	}
	else
		fld.value += val;
}

function backAtCursor(fld)
{
	fld.focus();
	if (document.selection)
	{
		sel = document.selection.createRange();
		if(sel.text.length > 0)
			sel.text='';
		else
		{
			sel.moveStart('character',-1);
			sel.text='';
		}
		sel.select();
	}
	else if (fld.selectionStart || fld.selectionStart == '0') 
	{
		var fss = fld.selectionStart;
		var fse = fld.selectionEnd;
		fld.value = fld.value.substring(0, fss-1) + fld.value.substring(fse);
		fld.selectionStart = fss-1;
		fld.selectionEnd = fss-1;
	}
	else
		fld.value=fld.value.substr(0,(fld.value.length-1));
}

function getUpCase(chr)
{
	var out = chr;
	switch (chr) 
	{
		case "`" : out="~"; break;
		case "1" : out="!"; break;
		case "2" : out="@"; break;
		case "3" : out="#"; break;
		case "4" : out="$"; break;
		case "5" : out="%"; break;
		case "6" : out="^"; break;
		case "7" : out="&"; break;
		case "8" : out="*"; break;
		case "9" : out="("; break;
		case "0" : out=")"; break;
		case "-" : out="_"; break;
		case "=" : out="+"; break;
		case ";" : out=":"; break;
		case "[" : out="{"; break;
		case "]" : out="}"; break;
		case "," : out="<"; break;
		case "." : out=">"; break;
		case "'" : out='"'; break;
		case "/" : out="?"; break;
		case "\\" : out="|"; break;	
		default :  out = chr.toUpperCase();
	}
	return out;
}
/*
//UTF-8 Support
function utf8(wide) 
{
	var c, s;
	var enc = "";
	var i = 0;
	while(i<wide.length) 
	{
		c= wide.charCodeAt(i++);
    // handle UTF-16 surrogates
		if (c>=0xDC00 && c<0xE000)
			continue;
		if (c>=0xD800 && c<0xDC00) 
		{
			if (i>=wide.length)
				continue;

			s= wide.charCodeAt(i++);

			if (s<0xDC00 || c>=0xDE00)
				continue;

			c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
		}
    // output value
		if (c<0x80)
			enc += String.fromCharCode(c);
		else if (c<0x800)
			enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
		else if (c<0x10000)
			enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
		else
			enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
	}
	return enc;
}

var hexchars = "0123456789ABCDEF";

function toHex(n) 
{
  return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}

var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function encodeURIComponentNew(s) 
{
	var s = utf8(s);
	var c;
	var enc = "";
	for (var i= 0; i<s.length; i++) 
	{
		if (okURIchars.indexOf(s.charAt(i))==-1)
			enc += "%"+toHex(s.charCodeAt(i));
		else
			enc += s.charAt(i);
	}
	 return enc;
}
*/

