var selectedKey="";
var animatekeys = true;

function PrintKey(keynum,keywidth,keyclass, name)
{
document.write('<td id="key' + keynum + '" class="' + keyclass + '" colspan="' + keywidth + '"><span style="color:green" id="key' + keynum + 'english"></span><span id="key' + keynum + 'text">'+name+'</span></td>');
}
function PrintKeyboard()
{
document.write('<table cellspacing="1" class="keyboard">');
document.write('<tr>');
PrintKey(1,2,"dbl");
PrintKey(2,2,"dbl");
PrintKey(3,2,"dbl");
PrintKey(4,2,"dbl");
PrintKey(5,2,"dbl");
PrintKey(6,2,"dbl");
PrintKey(7,2,"dbl");
PrintKey(8,2,"dbl");
PrintKey(9,2,"dbl");
PrintKey(10,2,"dbl");
PrintKey(11,2,"dbl");
PrintKey(12,2,"dbl");
PrintKey(13,2,"dbl");
PrintKey(14,5,"act","");
document.write('</tr><tr>');
PrintKey(15,3,"act","");
PrintKey(16,2,"dbl");
PrintKey(17,2,"dbl");
PrintKey(18,2,"dbl");
PrintKey(19,2,"dbl");
PrintKey(20,2,"dbl");
PrintKey(21,2,"dbl");
PrintKey(22,2,"dbl");
PrintKey(23,2,"dbl");
PrintKey(24,2,"dbl");
PrintKey(25,2,"dbl");
PrintKey(26,2,"dbl");
PrintKey(27,2,"dbl");
PrintKey(41,2,"dbl");
PrintKey(59,2,"dbl","&nbsp;");
document.write('</tr><tr>');
PrintKey(29,4,"act","Caps");
PrintKey(30,2,"dbl");
PrintKey(31,2,"dbl");
PrintKey(32,2,"dbl");
PrintKey(33,2,"dbl");
PrintKey(34,2,"dbl");
PrintKey(35,2,"dbl");
PrintKey(36,2,"dbl");
PrintKey(37,2,"dbl");
PrintKey(38,2,"dbl");
PrintKey(39,2,"dbl");
PrintKey(40,2,"dbl");
PrintKey(28,5,"act","Enter");
document.write('</tr><tr>');
PrintKey(42,3,"act","");
PrintKey(43,2,"dbl");
PrintKey(44,2,"dbl");
PrintKey(45,2,"dbl");
PrintKey(46,2,"dbl");
PrintKey(47,2,"dbl");
PrintKey(48,2,"dbl");
PrintKey(49,2,"dbl");
PrintKey(50,2,"dbl");
PrintKey(51,2,"dbl");
PrintKey(52,2,"dbl");
PrintKey(53,8,"act","Shift");
document.write('</tr><tr>');
PrintKey(54,4,"act","Ctrl");
PrintKey(55,4,"act","Alt");
PrintKey(56,15,"act","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
PrintKey(57,4,"act","Alt");
PrintKey(58,4,"act","Ctrl");
document.write('</tr></table>');
}
function findLastChar()
{
if(document.forms['myForm'].outText.createTextRange)
{
var range=document.selection.createRange().duplicate();
range.moveStart("character",-1);
return(range.text);
}
else if(document.forms['myForm'].outText.selectionStart)
{
var startPos = document.forms['myForm'].outText.selectionStart;
var endPos = document.forms['myForm'].outText.selectionEnd;
startPos = startPos-1;
endPos = startPos+1;
return (document.forms['myForm'].outText.value).substring(startPos, endPos);
}
return"";
}
function eraseLastChar()
{
	if(document.forms['myForm'].outText.createTextRange)
	{
		var range=document.selection.createRange().duplicate();
		range.moveStart("character",-1);
		range.text="";
	}
	else
	{
		var txtarea = document.forms['myForm'].outText;
		var startPos = txtarea.selectionStart-1;
		var endPos = txtarea.selectionEnd;
		var scrollTop=txtarea.scrollTop;
		txtarea.value = txtarea.value.substring(0, startPos) + txtarea.value.substring(endPos, txtarea.value.length);
		var cPos=startPos;
		txtarea.selectionStart=cPos;
		txtarea.selectionEnd=cPos;
		txtarea.scrollTop=scrollTop;
	}
}
function insertAtCaret(text)
{
	var txtarea = document.forms['myForm'].outText;
	if(document.selection) 
	{
		var CaretPos;
		if(document.forms['myForm'].outText.createTextRange)

		{
			CaretPos = document.selection.createRange().duplicate();
			CaretPos.text = text;
		}
	}
	else if(txtarea.selectionStart || txtarea.selectionStart == '0')
	{
		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		var scrollTop=txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		if(!myText) { myText=text;}
		txtarea.value = txtarea.value.substring(0, startPos) + text +  txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();

		var cPos=startPos+text.length;
		txtarea.selectionStart=cPos;
		txtarea.selectionEnd=cPos;
		txtarea.scrollTop=scrollTop;

	} 
}
function getRef(obj)
{
if(typeof obj=="string")obj=document.getElementById(obj);
return obj;
}
function setStyle(obj,style,value)
{
obj=getRef(obj);
obj.style[style]=value;
}
function getStyle(obj,style){
if(!document.getElementById)return;
var obj=getRef(obj);
var value=obj.style[style];
if(!value)
if(document.defaultView)
value=document.defaultView.
getComputedStyle(obj,"").getPropertyValue(style);
else if(obj.currentStyle)
value=obj.currentStyle[style];
return value;
}
function setClassName(obj,className){
getRef(obj).className=className;
}
function setKeyText(keyNum,upperText,lowerText)
{
	var keyTextName="key"+keyNum+"text";
	obj=getRef(keyTextName);
	var i;
	var str;
	str=new String("");
	for(i=0;(i) < (3-upperText.length);i++)str=str.concat("&nbsp;");
	str=str.concat(upperText,"<br />",lowerText);
	for(i=0;(i) < (3-lowerText.length);i++)str=str.concat("&nbsp;");
	obj.innerHTML=str;
	var englishkey;
	if (lang == 0)
	{
		englishkey=GetEnglishButton(keyNum,false);
	}
	else
	{	
		englishkey="";
	}
	keyTextName="key"+keyNum+"english";
	obj=getRef(keyTextName);
	obj.innerHTML=englishkey;
}
function lightonKey(keyName)
{
if(selectedKey!="")lightoffKey();
setStyle(keyName,"backgroundColor","red");
selectedKey=keyName;
}
function lightoffKey()
{
if(selectedKey!="")
{
setStyle(selectedKey,"backgroundColor","#dcdcdc");
selectedKey="";
}
}
function animateKey(keyNum)
{
var keyName="key"+keyNum;
lightonKey(keyName);
setTimeout('lightoffKey()',500);
}
function AnimateControlKey(keyCode)
{
switch(keyCode)
{
case 13:animateKey(28);
break;
case 46:break;
break;
case 8:animateKey(14);
break;
}
}
function AnimateButtonPress(keyChar)
{
switch(keyChar){
case"~":
case"`":
animateKey(1);
break;
case"!":
case"1":
animateKey(2);
break;
case"@":
case"2":
animateKey(3);
break;
case"#":
case"3":
animateKey(4);
break;
case"$":
case"4":
animateKey(5);
break;
case"%":
case"5":
animateKey(6);
break;
case"^":
case"6":
animateKey(7);
break;
case"&":
case"7":
animateKey(8);
break;
case"*":
case"8":
animateKey(9);
break;
case"(":
case"9":
animateKey(10);
break;
case"0":
case")":
animateKey(11);
break;
case"-":
case"_":
animateKey(12);
break;
case"+":
case"=":
animateKey(13);
break;
case"Q":
case"q":
animateKey(16);
break;
case"W":
case"w":
animateKey(17);
break;
case"E":
case"e":
animateKey(18);
break;
case"R":
case"r":
animateKey(19);
break;
case"T":
case"t":
animateKey(20);
break;
case"Y":
case"y":
animateKey(21);
break;
case"U":
case"u":
animateKey(22);
break;
case"I":
case"i":
animateKey(23);
break;
case"O":
case"o":
animateKey(24);
break;
case"P":
case"p":
animateKey(25);
break;
case"{":
case"[":
animateKey(26);
break;
case"}":
case"]":
animateKey(27);
break;
case"A":
case"a":
animateKey(30);
break;
case"S":
case"s":
animateKey(31);
break;
case"D":
case"d":
animateKey(32);
break;
case"F":
case"f":
animateKey(33);
break;
case"G":
case"g":
animateKey(34);
break;
case"H":
case"h":
animateKey(35);
break;
case"J":
case"j":
animateKey(36);
break;
case"K":
case"k":
animateKey(37);
break;
case"L":
case"l":
animateKey(38);
break;
case";":
case":":
animateKey(39);
break;
case'"':
case"'":
animateKey(40);
break;
case"|":
case"\\":
animateKey(41);
break;
case"Z":
case"z":
animateKey(43);
break;
case"X":
case"x":
animateKey(44);
break;
case"C":
case"c":
animateKey(45);
break;
case"V":
case"v":
animateKey(46);
break;
case"B":
case"b":
animateKey(47);
break;
case"N":
case"n":
animateKey(48);
break;
case"M":
case"m":
animateKey(49);
break;
case"<":
case",":
animateKey(50);
break;
case">":
case".":
animateKey(51);
break;
case"?":
case"/":
animateKey(52);
break;
case" ":
animateKey(56);
break;
}
}

function GetEnglishButton(num, shift)
{
switch(num)
{
case 1: 
	if(shift) return "~";
	return "`";
case 2: if(shift) return "!";
	return "1";
case 3: if(shift) return '@';
	return "2";
case 4: if(shift) return "#";
	return "3";
case 5: if(shift) return "$";
	return "4";
case 6: if(shift) return "%";
	return "5";
case 7: if(shift) return "^";
	return "6";
case 8: if(shift) return "&";
	return "7";
case 9: if(shift) return "*";
	return "8";
case 10:if(shift) return "(";
	return "9";
case 11:if(shift) return ")";
	return "0";
case 12:if(shift) return "_";
	return "-";
case 13:if(shift) return "+";
	return "=";
case 13:if(shift) return "BackSp";
	return "";
case 16:if(shift) return "Q";
	return "q";
case 17:if(shift) return "W";
	return "w";
case 18:if(shift) return "E";
	return "e";
case 19:if(shift) return "R";
	return "r";
case 20:if(shift) return "T";
	return "t";
case 21:if(shift) return "Y";
	return "y";
case 22:if(shift) return "U";
	return "u";
case 23:if(shift) return "I";
	return "i";
case 24:if(shift) return "O";
	return "o";
case 25:if(shift) return "P";
	return "p";
case 26:if(shift) return "{";
	return "[";;
case 27:if(shift) return "}";
	return "]";
case 30:if(shift) return "A";
	return "a";
case 31:if(shift) return "S";
	return "s";
case 32:if(shift) return "D";
	return "d";
case 33:if(shift) return "F";
	return "f";
case 34:if(shift) return "G";
	return "g";
case 35:if(shift) return "H";
	return "h";
case 36:if(shift) return "J";
	return "j";
case 37:if(shift) return "K";
	return "k";
case 38:if(shift) return "L";
	return "l";
case 39:if(shift) return ":";
	return ";";
case 40:if(shift) return '"';
	return "'";
case 41:if(shift) return "|";
	return '\\';
case 43:if(shift) return "Z";
	return "z";
case 44:if(shift) return "X";
	return "x";
case 45:if(shift) return "C";
	return "c";
case 46:if(shift) return "V";
	return "v";
case 47:if(shift) return "B";
	return "b";
case 48:if(shift) return "N";
	return "n";
case 49:if(shift) return "M";
	return "m";
case 50:if(shift) return "<";
	return ',';
case 51:if(shift) return ">";
	return '.';
case 52:if(shift) return '?';
	return '/';	
}
return "";
}
function setEnglishKeyboardButtons()
{
var i;
for (i=1;(i) <= (52);i++)
{
	setKeyText(i,GetEnglishButton(i,true),GetEnglishButton(i,false));
}
}
function setKeyboardButtons()
{
if(lang==1)setEnglishKeyboardButtons();
else
{
	var i;
	var down;
	var downsecond;
	var up;
	for (i=1;(i) <= 52;i++)
	{
		down = getNextState("",GetEnglishButton(i,false),false);
		downsecond = getNextState(down,GetEnglishButton(i,false),false);
		if (down.charCodeAt(0) != downsecond.charCodeAt(0))
		{
			down = down + downsecond;
		}
		up = getNextState("",GetEnglishButton(i,true),false);
		setKeyText(i,up,down);
	}
}
}

function replaceEndOfWord(character)
{
var newChar=String.fromCharCode(changeEndOfWord(character.charCodeAt(0)));
if(newChar!=character)
{
eraseLastChar();
insertAtCaret(newChar);
}
}
function isVisibleChar(character)
{
switch(character)
{
case"\\":
case"a":
case"b":
case"c":
case"d":
case"e":
case"f":
case"g":
case"h":
case"i":
case"j":
case"k":
case"l":
case"m":
case"n":
case"o":
case"p":
case"q":
case"r":
case"s":
case"t":
case"u":
case"v":
case"w":
case"x":
case"y":
case"z":
case"A":
case"B":
case"C":
case"D":
case"E":
case"F":
case"G":
case"H":
case"I":
case"J":
case"K":
case"L":
case"M":
case"N":
case"O":
case"P":
case"Q":
case"R":
case"S":
case"T":
case"U":
case"V":
case"W":
case"X":
case"Y":
case"Z":
case" ":
case"1":
case"2":
case"3":
case"4":
case"5":
case"6":
case"7":
case"8":
case"9":
case"0":
case"!":
case"&#65533;":
case"$":
case"%":
case"&":
case"/":
case"(":
case")":
case"=":
case"?":
case"{":
case"}":
case"[":
case"]":
case"*":
case"-":
case"+":
case"<":
case">":
case"|":
case",":
case";":
case".":
case":":
case"-":
case"_":
case"#":
case"'":
case"~":
case"@":
case" ":
return true;
break;
}
return false;
}
function isValidAlphabet(character)
{
	if (getNextState("",character)=="",false) return false;
	return true;
}
function moveCursor()
{
	var range=document.forms['myForm'].outText.createTextRange();
	range.moveStart("character",caret);
	range.collapse(),range.select();
}
function KeyPress(evt)
{
	var keyCode;
	var keyChar;
	//alert("KeyPress");
	evt = (evt) ? evt : (window.event) ? event : null;
	if (evt)
	{
		if (window.event)
		{
			keyCode = evt.keyCode;
		}
		else
		{
			keyCode = evt.charCode;
		}
		if (evt.ctrlKey==true)
		{
			return true;
		}
		if (evt.altKey==true)
		{
			return true;
		}
		if ((keyCode==0) || (keyCode==13) || (keyCode==8))
		{
			return true;
		}
		//alert(evt.type + ': evt.keyCode: ' + evt.keyCode + '; evt.charCode: ' + evt.charCode);
	}
	else
	{
		alert("Wrong version");
		return true;
	}
	evt.returnValue=false;
	//alert(keyCode);
	keyChar=String.fromCharCode(keyCode);
	//alert(keyChar);
	if(lang==0)
	{
		if (isValidAlphabet(keyChar))
		{
			if (animatekeys==true)
			{
				AnimateButtonPress(keyChar);
			}
			var hebChar=getNextState(findLastChar(),keyChar,true);
			if (hebChar == keyChar)
			{
				if(layout==0)replaceEndOfWord(findLastChar());
			}
			insertAtCaret(hebChar);
			if (evt.preventDefault)
			{
				evt.preventDefault();
				evt.cancelBubble = true;    
			}
		}
		else
		{
			evt.returnValue=true;
		}
	}
	else if(isVisibleChar(keyChar))
	{		
		if (animatekeys==true)
		{
			AnimateButtonPress(keyChar);
		}
		if(layout==0)replaceEndOfWord(findLastChar());
		insertAtCaret(keyChar);
		if (evt.preventDefault)
		{
			evt.preventDefault();
			evt.cancelBubble = true;    
		}
	}
	else
	{
		evt.returnValue=true;
	}
	document.forms['myForm'].outText.focus();
}
function SetLang(num)
{
lang=num;
setKeyboardButtons();
}
function SetLayout(num)
{
layout=num;
setKeyboardButtons();
}
function copyTextArea()
{
document.forms['myForm'].outText.focus();
document.forms['myForm'].outText.select();
}
function resetTextArea()
{
document.forms['myForm'].intext.value=new String();
document.forms['myForm'].outtext.value=new String();
}
function is_framed()
{
	var quirksMode = (top == self);
	if (!quirksMode) location.replace('http://www.mikledet.com/email.html');
}
