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" ID="Table2">');
	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));
			downsecond=getNextState(down,GetEnglishButton(i,false));
			if(down.charCodeAt(0)!=downsecond.charCodeAt(0)){
				down=down+downsecond;
			}
			up=getNextState("",GetEnglishButton(i,true));
			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"§":
		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)=="")
		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;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){
			return true;
		}
	}else{
		alert("Wrong version");
		return true;
	}
	{
		evt.returnValue=false;
	}
	keyChar=String.fromCharCode(keyCode);
	if(lang==0){
		if(isValidAlphabet(keyChar)){
			if(animatekeys==true){
				AnimateButtonPress(keyChar);
			}
			var hebChar=getNextState(findLastChar(),keyChar);
			if(hebChar==keyChar){
				if(layout==0)replaceEndOfWord(findLastChar());
			}
			insertAtCaret(hebChar);
			if(evt.preventDefault){
				evt.preventDefault();
				evt.cancelBubble=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){
	if(num==0)
		SaveLayoutSelection("PHONETIC");
	else 
		SaveLayoutSelection("arabic");
		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();
}