
//© e fusion pvt ltd www.sinharaja.com
//all rights reserved
//Concept Design & Development: Niranjan Meegammana, Tusitha Randunuge
//Language Assistance Asrof,Arthief, 
//User Implementation Saliya Randunuge,Chulani Padmasanka, Chami, Chamara, Mithila, Hasika
//Asistance : Dr. Gihan, Wasantha Deshapriya
//Testing : Ranjan Dhanasuriya, Arthif, e fusion
//efusion Unikeyboad is a constantly developing online Sinhala,Tamil Unicode tool that can help web based 
//Sinhala, Tamil content manupulation convinient and easy.
//Development Version - Not yet Released Officiall
//References info.lk, fonts.lk, kaputa.com, sinhalaunicode.org

var xx=InsertJScript('http://gov2.ikadiya.com/ef_tools/','efusion_fix_uni_v1.')

var keymaps = new Array();
var Ctrl_on=false;
var Alt_on=false;
var Shift_on=false;
var xbrowser=0;
var lastKeyDown=0;

if (document.all){ // ie
	xbrowser=0;
}
else if (document.layers){ //ns
	xbrowser=1;
}
else if (document.getElementById&&!document.all){
	xbrowser=2;
}



for (i=0; i<128; i++) {
	keymaps[i]=String.fromCharCode(i+3458);
}

//for (i=0; i<128; i++) {
//	document.write(keymaps[i]);
//}

//ZWJ=8205
//ZWNJ=8204 not assigned
//ZWS=8204+8203
//rya = 3530
var keys = new Array();
var keypairs = new Array();
var keysplits= new Array();
var nn ;
var Myxlang=1;
var activeTextBox="document.formx.text1";
xxxx=efillKeys(Myxlang);



function efillKeys(Myxlang) {

switch (Myxlang)
  {
    case 1: {  //KS
	//3551 gayanukithta 
	//3459 visargaya bindu deka
	//3491-(skan) dha
	//3492 - (kompa) Ngha 
	//3463 - (daiva) Ngha2 

	keys[0]="`<>3535,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>0";
	keys[1]="q<>3503,w<>3501,e<>3473,r<>3515,t<>3495,y<>3514,u<>3467,i<>3465,o<>3476,p<>3508,[<>3540,]<>3538";
	keys[2]="a<>3461,s<>3523,d<>3497,f<>3526,g<>3484,h<>3524,j<>3490,k<>3482,l<>3517,\;<>8205,\'<>0";
	keys[3]="z<>3463,x<>3511,c<>3488,v<>3520,b<>3510,n<>3505,m<>3512,\,<>0,.<>0,/<>0,\\<>3530";
	keys[4]="~<>3458,!<>0,@<>3545,#<>3536,$<>3537,\%<>0,^<>3544,\&<>3530<>8205<>3514,8<>0,9<>0,0<>0,_<>3550,+<>0";
	keys[5]="Q<>3507,W<>3502,E<>3474,R<>3482<>3530<>8205<>3522,T<>3496,Y<>3530<>8205<>3515,U<>3468,I<>3466,O<>3477,P<>3509,{<>3542,}<>3539";
	keys[6]="A<>3462,S<>3522,D<>3500,F<>3504,G<>3487,H<>3546,J<>3458,K<>3483,L<>3525,:<>0,\"<>0";
	keys[7]="Z<>3464,X<>3521,C<>3489,V<>3498,B<>3513,N<>3499,M<>3485,<<>3548,><>3549,|<>3547,?<>0";
    break ;
    }
	
    case 2: { //KT
	//2946 anuswaraya uda biduwa
	//2947 visargaya thith thuna
    keys[0]="`<>3006,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>0";
	keys[1]="q<>2980,w<>2980,e<>2958,r<>2992,t<>2975,y<>2991,u<>2953,i<>2951,o<>2962,p<>2986,[<>3009,]<>3007";
	keys[2]="a<>2949,s<>3000,d<>2975,f<>2993,g<>2965,h<>3001,j<>2972,k<>2965,l<>2994,\;<>3009,\'<>0";
	keys[3]="z<>2974,x<>2985,c<>2970,v<>2997,b<>2986,n<>2984,m<>2990,\,<>0,.<>0,/<>0,\\<>3021";
	keys[4]="~<>2946,!<>0,@<>3014,#<>3015,$<>3016,\%<>0,^<>0,\&<>2960,*<>0,(<>0,)<>0,_<>3020,+<>0";
	keys[5]="Q<>2975<>3007,W<>2975<>3008,E<>2959,R<>2965<>3021<>2999,T<>2975<>3010,Y<>0,U<>2954,I<>2952,O<>2963,P<>3009,{<>3010,}<>3008";
	keys[6]="A<>2950,S<>2999,D<>2975<>3009,F<>2993<>3009,G<>3052,H<>3015,J<>3031,K<>2995,L<>2996,:<>0,\"<>0";
	keys[7]="Z<>2969,X<>3000<>3021<>2992<>3008,C<>2970<>3010,V<>2996<>3010,B<>2990<>3010,N<>2979,M<>2990<>3008,<<>3018,><>3019,|<>2947,?<>0";
    break;
     
    }

    case 3: { //English
    keys[0]="`<>0,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>0";
	keys[1]="q<>0,w<>0,e<>0,r<>0,t<>0,y<>0,u<>0,i<>0,o<>0,p<>0,[<>0,]<>0";
	keys[2]="a<>0,s<>0,d<>0,f<>0,g<>0,h<>0,j<>0,k<>0,l<>0,\;<>0,\'<>0";
	keys[3]="z<>0,x<>0,c<>0,v<>0,b<>0,n<>0,m<>0,\,<>0,.<>0,/<>0,\\<>0";
	keys[4]="~<>0,!<>0,@<>0,#<>0,$<>0,\%<>0,^<>0,\&<>0,*<>0,(<>0,)<>0,_<>0,+<>0";
	keys[5]="Q<>0,W<>0,E<>0,R<>0,T<>0,Y<>0,U<>0,I<>0,O<>0,P<>0,{<>0,}<>0";
	keys[6]="A<>0,S<>0,D<>0,F<>0,G<>0,H<>0,J<>0,K<>0,L<>0,:<>0,\"<>0";
	keys[7]="Z<>0,X<>0<>0,C<>0,V<>0,B<>0,N<>0,M<>0,<<>0,><>0,?<>0";
     break
    }   
   
    case 4: { //Wijesekera Official Sinhala

	keys[0]="`<>3515<>8205<>3530,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>0";
	keys[1]="q<>2969,w<>2993,e<>3536,r<>3515,t<>3473,y<>3524,u<>3512,i<>3523,o<>3503,p<>3488,[<>3493,]<>59";
	keys[2]="a<>3530,s<>3538,d<>3535,f<>3545,g<>3495,h<>3514,j<>3520,k<>3505,l<>3482,\;<>3501,\'<>46";
	keys[3]="z<>39,x<>3511,c<>3490,v<>3497,b<>3465,n<>3510,m<>3508,\,<>3517,.<>3484,/<>0,\\<>0";

	keys[4]="~<>3515<>3530,!<>0,@<>0,#<>0,$<>0,\%<>0,^<>0,\&<>0,*<>0,(<>0,)<>0,_<>0,+<>0";
	keys[5]="Q<>3542,W<>3467,E<>3537,R<>3469,T<>3476,Y<>3521,U<>3485,I<>3522,O<>3504,P<>3489,{<>3493,}<>58";
	keys[6]="A<>3571,S<>3539,D<>3544,F<>3526,G<>3496,H<>3530<>8205<>3514,J<>3525<>3540,K<>3499,L<>3502,:<>0,\"<>3517";
	keys[7]="Z<>34,X<>2950,C<>3491,V<>3498,B<>3466,N<>3511,M<>3509,<<>3525,><>3485,?<>0,|<>0";

     break
    }   
    
   case 5: { //Bamini T
   keys[0]="`<>3001,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>3000<>3021<>2992<>3008";
	keys[1]="q<>2969,w<>2992,e<>2984,r<>2970,t<>2997,y<>2994,u<>2992,i<>3016,o<>2996,p<>3007,[<>2972,]<>3000";
	keys[2]="a<>2991,s<>2995,d<>2985,f<>2965,g<>2986,h<>3006,j<>2980,k<>2990,l<>2975,\;<>3021,\'<>0";
	keys[3]="z<>2979,x<>2962,c<>2953,v<>2958,b<>2975<>3007,n<>3014,m<>2949,\,<>2951,.<>0,/<>2947,\\<>2999";

	keys[4]="~<>0,!<>0,@<>0,#2970<>3010,$<>3016,\%<>0,^<>0,\&<>2960,*<>0,(<>0,)<>0,_<>2947,+<>0";
	keys[5]="Q<>2974,W<>2993<>3009,E<>2984<>3009,R<>2970<>3009,T<>2997<>3009,Y<>2994<>3009,U<>2992<>3009,I<>2960,O<>2996<>3009,P<>3008,{<>3009,}<>3010";
	keys[6]="A<>2991<>3009,S<>2995<>3009,D<>2985<>3009,F<>2965<>3009,G<>2986<>3009,H<>2992<>3021,J<>2980<>3009,K<>2990<>3009,L<>2975<>3009,:<>0,\"<>0";
	keys[7]="Z<>2979<>3009,X<>2963,C<>2954,V<>2959,B<>2975<>3008,N<>3015,M<>2950,<<>2952,><>2951,?<>0";
    break;     
    }

    case 6: { //Sinhala .Apple Mac

	keys[0]="`<>3530<>8205,1<>0,2<>0,3<>0,4<>0,5<>0,6<>0,7<>0,8<>0,9<>0,0<>0,-<>0,=<>0";
	keys[1]="q<>3540,w<>3461,e<>3536,r<>3515,t<>3473,y<>3524,u<>3512,i<>3523,o<>3503,p<>3488,[<>3493,]<>59";
	keys[2]="a<>3530,s<>3538,d<>3535,f<>3545,g<>3495,h<>3514,j<>3520,k<>3505,l<>3482,\;<>3501,\'<>46";
	keys[3]="z<>3530,x<>3511,c<>3490,v<>3497,b<>3465,n<>3510,m<>3508,\,<>3517,.<>3484,/<>0,\\<>0";

	keys[4]="~<>3486,!<>0,@<>0,#<>0,$<>0,\%<>3530<>8205<>3515,^<>0,\&<>0,*<>0,(<>0,)<>0,_<>3515<>8205<>3530,+<>0";
	keys[5]="Q<>3542,W<>3467,E<>3537,R<>3469,T<>3476,Y<>3521,U<>3485,I<>3522,O<>3504,P<>3489,{<>3493,}<>58";
	keys[6]="A<>3571,S<>3539,D<>3544,F<>3526,G<>3496,H<>3530<>8205<>3514,J<>3525<>3540,K<>3499,L<>3502,:<>0,\"<>3517";
	keys[7]="Z<>0,X<>2950,C<>3491,V<>3498,B<>3466,N<>3511,M<>3509,<<>3525,><>3485,?<>0,|<>3487";
     break
    }   

    default: { 
     break 
     }
  }

var ktype=0;

for (i=0; i<keys.length; i++) {
	keypairs[i]=keys[i].split(",");
	for (j=0; j < keypairs[i].length; j++) {
		//alert(keypairs[i][j]);
		keysplits=keypairs[i][j].split("<>");
		ktype=keysplits.length;
		
		if (keysplits.length > 0){
				nn=keysplits[0];
				xval = nn.charCodeAt(0)
				if (xval > 0) {
					keymaps[xval]=String.fromCharCode(keysplits[1]);
					for (k=2; k < keysplits.length; k++) {
						keymaps[xval]=keymaps[xval]+String.fromCharCode(keysplits[k]);						
					} // for
				}	
				else {
					keymaps[xval]=String.fromCharCode(0);
				}
				//document.write (keymap[xval]);
				//document.write (xval);			
				//document.write ("<br>");

		} // end if simple type
	}	
}	


}

function efUcode(e,textbox){
//var Key = window.event.keyCode;
//etype=event.type;
//Alt_on=event.altKey;
//alert(Ctrl_on+Alt_on+Shift_on);


var inKey=e.charCode? e.charCode : e.keyCode;

//var inKey=event.keyCode;
if (e.ctrlKey==true) { return};
//if (inKey==88) { return}; //'Ctrl+C'  = 'Ctrl';
//if (inKey==67) { return}; //'Ctrl+V'  = 'Ctrl';
//if (inKey==86) { return}; //'Ctrl+V'  = 'Ctrl';

if (inKey==8 || inKey==13){ return } //if the key isn't the backspace key (which we should allow)
if (inKey >=48 && inKey < 57) { return}; //if not a number
if (inKey >=40 && inKey < 46) { return}; //if not a number

//if (inKey >=60 && inKey < 64) { return}; //if not a number

if (inKey >=32 && inKey < 35) { return}; //if not a number
if (inKey ==27) { document.getElementById("subMenu").style.visibility = 'hidden'; return false;}; //if Escape

outKey=keymaps[inKey];

if (outKey == String.fromCharCode(0)) {
return
}
xxxx=insert(activeTextBox,outKey);
//document.formx.text1.value=document.formx.text1.value+outKey;
return false;
}

function setFocusx(textbox,xlang){
document.oncontextmenu = showMenu;
//xxs=drawSubMenu();
activeTextBox=textbox;
activeTextBox.focus()
}

function inputx(xn) {
var outKey= String.fromCharCode(xn);
xxxx=insert(activeTextBox,outKey);
//document.formx.text1.value=document.formx.text1.value+outKey;

}

function chLang(xn) {
Myxlang=xn;
xxxx=efillKeys(Myxlang);
activeTextBox.focus();
//textfield.focus();

}

function insert (textfield,outStr) 
{
   eval("insertAtCursor(textfield,outStr)");
   textfield.focus();
}

function insertAtCursor(myField, myValue)
{
  //IE support
  if (document.selection)
  {
      myField.focus();
      sel = document.selection.createRange();
      sel.text = myValue;
      sel.select();
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0')
  {
      var startPos = myField.selectionStart;
      var endPos = myField.selectionEnd;
      var newEndPos = startPos + myValue.length;
      myField.value = myField.value.substring(0, startPos)
                      + myValue 
                      + myField.value.substring(endPos, myField.value.length);
      myField.setSelectionRange(newEndPos, newEndPos);
  }
  else 
  {
      var newEndPos = myField.value.length + myValue.length;
      myField.value += myValue;
      myField.setSelectionRange(newEndPos, newEndPos);
  }
}



function PopUpKBD(whatURL) {      
        open( whatURL ,"_abc","toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=500,height=350");
}

function uniCopy() {
activeTextBox.focus();
activeTextBox.select();
therange=activeTextBox.createTextRange();
therange.execCommand("Copy");
}

function efuniKit(xlang) {
	Myxlang=xlang;
	xxxx=efillKeys(xlang);
	//document.oncontextmenu = showMenu;
	xxs=drawSubMenu();
}

function drawSubMenu () {

var xchk = new Array();
xchk[1]="";
xchk[2]="";
xchk[3]="";
xchk[4]="";
xchk[5]="";
xchk[6]="";
xchk[Myxlang]="checked";

var SubMenuStr="<DIV ID=\"subMenu\"  style=\"position:absolute;visibility:hidden;z-index:1000\"><table bgcolor=FFFFFF border=0><tr bgcolor=#DBDBDB><td align=center>E fusion~UniWriter 2006 www.sinharaja.com</td><td align=center><a href=\"#\"  onClick=\"uniCopy()\">Cp</a> - <a href=\"#\" onClick=\"hidesubMenu()\">X</a></td></tr><tr bgcolor=#FFFFCC><td colspan=2><a href=\"#\" onClick=\"hidesubMenu()\">[X]</a>&nbsp;";
//var SubMenuStr="<DIV ID=\"subMenu\"  style=\"position:absolute;visibility:hidden;zIndex:1000\"><table bgcolor=FFFFFF border=0><tr bgcolor=#DBDBDB><td align=center>E fusion~UniWriter 2006 www.sinharaja.com</td><td align=center><a href=\"#\"  onClick=\"uniCopy()\">Cp</a> - <a href=\"#\" onClick=\"hidesubMenu()\">[X]</a>";

var unistr="3493|3492|3491|3572|3570|3551|3475|3478|3469|3470|3459|3471|3472|169|171|187|174|";
unistr=unistr + "2946|2947|3018|3019|3020|3031|";
unistr=unistr + "164|167|8224|163|165|190|";
unistr=unistr + "188|189|176|177|178|179|215|247|916|937|945|946|947|948|949|952|955|956|960|961|968|8596|8592|8593|8594|8595|8734|8719|8730|8721|8747|";
unistr=unistr + "9834|9835|8775|8776|9824|9827|9829|9830|9786|9787|9788|9792|9794";
unilist=unistr.split("|");

for (j=0; j < unilist.length; j++) {
	SubMenuStr=SubMenuStr + "<a href=\"#\" class=\"ukit1\"  onClick=\"inputx(" + unilist[j] + ")\">&#" + unilist[j] + ";</a>&nbsp;" 
	if (j==16) { SubMenuStr=SubMenuStr + "</br>"; }
	if (j==32) { SubMenuStr=SubMenuStr + "</br>"; }
	if (j==58) { SubMenuStr=SubMenuStr + "</br>"; }
}

SubMenuStr=SubMenuStr +"</td></tr>";
SubMenuStr=SubMenuStr + "<tr><td colspan=2 nowrap bgcolor=#F8E2C7><input type=\"radio\" value=1 onClick=\"chLang(1)\" name=\"xlang\" " + xchk[1] + "><a href=\"javascript:PopUpKBD(&#39;http://kaputa.com/uniwriter/kaputa2006u.gif&#39;)\">Kaputa</a> " +  
"<input type=\"radio\" value=\"2\" onClick=\"chLang(2)\" name=\"xlang\" " + xchk[2] + "><a href=\"javascript:PopUpKBD(&#39;http://kaputa.com/uniwriter/kakam2006u.jpg&#39;)\">Kakam</a> " + 
"<input type=\"radio\" value=\"3\" onClick=\"chLang(3)\" name=\"xlang\" " + xchk[3] + ">" + 
"<a href=\"javascript:PopUpKBD(&#39;/ef_tools/wijey2004.gif&#39;)\">Eng</a> " + 
"<input type=\"radio\" value=\"4\" onClick=\"chLang(4)\" name=\"xlang\" " + xchk[4] + "><a href=\"javascript:PopUpKBD(&#39;http://kaputa.com/uniwriter/wijesekara.gif&#39;)\">Wije</a>" + 
"<input type=\"radio\" value=\"5\" onClick=\"chLang(5)\" name=\"xlang\" " + xchk[5] + "><a href=\"javascript:PopUpKBD(&#39;http://kaputa.com/uniwriter/reng2006u.jpg&#39;)\">Reng</a>&nbsp;" + 
"<input type=\"radio\" value=\"6\" onClick=\"chLang(6)\" name=\"xlang\" " + xchk[6] + "><a href=\"javascript:PopUpKBD(&#39;http://kaputa.com/uniwriter/apple.gif&#39;)\">Apple</a>&nbsp;" + 
" : <a href=\"#\" onClick=\"FixUniText()\">Fix</a>" +
"</td></tr></table></DIV>";

document.write(SubMenuStr); 
}


function hidesubMenu () {
var sM=document.getElementById("subMenu");
sM.style.visibility = 'hidden';
document.oncontextmenu="";
}

function showMenu () {
var sM;


if (xbrowser==0) {	
	sM=document.getElementById("subMenu");
	sM.style.pixelLeft = event.clientX-150;
	sM.style.pixelTop = event.clientY;
	sM.style.visibility = 'visible';			
}
else {
	sM=document.getElementById("subMenu");	
	sM.style.pixelLeft = window.clientY-150;
	sM.style.pixelTop = window.clientY;
	sM.style.visibility = 'visible';
}
	
	return false;
}    

function InsertJScript(xxurl,xxjs) {
var gScr='<scr'+ 'ipt type="text' +'/java' +'script"';
gScr=gScr+'  src="'+xxurl+ xxjs +'js">';
gScr=gScr+'</scr'+'ipt>';
document.write(gScr); 
//alert(gScr);
}

function error(msg, filename, line) {
  	msgx = "File: " + filename + "\nLine: " + line + "\nError: " + msg + "\n\n";
	alert(msgx);
}

window.onerror = error;


