var PersianKey = [
	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x06AF,
	0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
	0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
	0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
	0x0040, 0x064E, 0x0625, 0x0698, 0x0650, 0x064D, 0x0651, 0x06C0,
	0x0622, 0x005d, 0x0640, 0x00AB, 0x00BB, 0x0621, 0x0623, 0x005B,
	0x005C, 0x064B, 0x0000, 0x064F, 0x060C, 0x002C, 0x0624, 0x064C,
	0x064A, 0x061B, 0x0629, 0x062C, 0x067E, 0x0686, 0x005E, 0x005F,
	0x00F7, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
	0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x0626, 0x062F, 0x062E,
	0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
	0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x00D7
];

var PersianKB = true;

function SwitchLanguage(e)
{
	if (window.event)
		e = window.event;
	if (e.ctrlKey && e.altKey)
	{
		if (PersianKB)
			SwitchToEnglish();
		else
			SwitchToPersian();
		try
		{
			e.preventDefault();
		}
		catch (err) {}
		return false;
		}
	return true;
}

function SwitchToPersian(obj)
{
	PersianKB = true;
	if (obj)
	{
		obj.style.direction = "rtl";
		obj.style.textAlign = "right";
		obj.focus();
	}
}

function SwitchToEnglish(obj)
{
	PersianKB = false;
	if (obj)
	{
		obj.style.direction = "ltr";
		obj.style.textAlign = "left";
		obj.focus();
	}
}

function ConvertToPersian(e)
{
	var obj, key;
	if (window.event)
	{
		e = window.event;
		obj = e.srcElement;
		key = e.keyCode;
	}
	else
	{
		obj = e.target;
		key = e.charCode;
	}

	if (e.bubbles==false)
		return true;

	if (key < 0x0020 || key > 0x007F || e.ctrlKey || e.altKey || e.metaKey)
		return true;

	if (PersianKB)
	{
		var newkey;
		if (key == 0x0020 && e.shiftKey)
			newkey = 0x200C;
		else
			newkey = PersianKey[key - 0x0020];

		if (newkey == key)
			return true;

		try
		{
			var ev=document.createEvent("KeyEvents");
			ev.initKeyEvent("keypress", false, true, document.defaultView, false, false, false, false, 0, newkey);
			obj.dispatchEvent(ev);
			e.preventDefault();
		}
		catch(err)
		{
			try
			{
				e.keyCode = newkey;
			}
			catch(err)
			{
				try
				{
					InsertString(obj, String.fromCharCode(newkey));
					e.preventDefault();
				}
				catch(err)
				{
					obj.value += String.fromCharCode(newkey);
					e.preventDefault();
				}
			}
		}
	}
	return true;
}

function InsertString(obj, txt)
{
	var start = obj.selectionStart;
	var end = obj.selectionEnd;
	var scrollTop = obj.scrollTop;
	var scrollLeft = obj.scrollLeft;

	obj.value = obj.value.slice(0,start) + txt + obj.value.slice(end);
	var pos = start + txt.length;
	obj.selectionStart = pos;
	obj.selectionEnd = pos;
	obj.scrollTop = scrollTop;
	obj.scrollLeft = scrollLeft;
	obj.focus();
}
