/*
##############################################################################
# UniSarasvati Devnagari Transliterator             Version 1.0 Beta                      
# Creator: Prasad Shirgaonkar		prasad.shir@gmail.com                 
# Created 20/08/2004                   Last Modified 10/03/2007              
# This program comes on AS IS basis, without any warranty &/or support of any sort. 
# You are free to use and distribute this program freely! 
##############################################################################
*/
document.onkeydown = toggleKBMode;

document.onkeypress = eventCaptured;


//variable iexplore will be set if the browser is Internet Explorer
var iexplore = !window.opera && (window.event || document.all); 

function eventCaptured(evt)
{
//alert("eventCaptured");

    var target,event;

    if(iexplore) {  //if the browser is IE
        event = window.event;
        target = window.event.srcElement;
    }
    else { //for other browsers
        event = evt;
        target = evt.target;
    }
//alert(target)
  if(target.type!="password")
  {
	if(!(target.id=="txtemail" || target.id=="edit-recipients" || target.id=="edit-yemail" ))
	{
    convertThis(event,target);
	}
    //event handler function of specific file corresponding
    //to specific keyboard layout
  }
}



var vyanjan = ['क','ख','ग','घ','ङ','च','छ','ज','झ','ञ','ट','ठ','ड','ढ','ण','त','थ','द','ध','न','प','फ','ब','भ','म','य','र','र','ल','ळ','व','स','श','ऽ','ष','ह','क्ष','ज्ञ','ॐ']
var halanta = ['क्','ख्','ग्','घ्','ङ्','च्','छ्','ज्','झ्','ञ्','ट्','ठ्','ड्','ढ्','ण्','त्','थ्','द्','ध्','न्','प्','फ्','ब्','भ्','म्','य्','र्','र्‍','ल्','ळ्','व्','स्','श्','ऽ','ष्','ह्','क्ष्', 'ज्ञ्','ॐ']
var input = ['k','क्h','g','ग्h','~N','ch','च्h','j','ज्h','Y','T','ट्h','D','ड्h','N','t','त्h','d','द्h','n','p','प्h','b','ब्h','m','y','r','R','l','L','v','s','स्h','S','ऽh','h','x','द्Y','ऑM']
var rhasva_swar = ['ि', 'ु', 'े', 'ृ' , 'ॅ' ,'ॅ' , 'ँ' , 'ं', 'ः','ा','ी','ू','ॉ']
var rhasva_swar_input = ['i', 'u', 'e','q', 'E','_', '^', 'M', 'H','A','I','U','O' ]
var all_swar = ['ँ', 'ं', 'ः', 'अ', 'आ', 'आ', 'इ', 'ई', 'ई', 'उ', 'ऊ', 'ऋ', 'ऌ', 'ए', 'ऐ', 'ऑ', 'ओ', 'औ','ऍ']
var all_swar_input = ['^','M', 'H','a','अअ','A','i','I','इइ','u','U','Q','Lu','e','अइ','O','o','अउ','E']
var punctuation_marks =['.','!','\,','\'','\"','\?','\;','\(','\)']
var chnbin = "\u094D";
var ugar = "\u0941";
var uugar = "\u0942";

function replTxt(txt)
{
	prvlen = txt.length;


//Pre Processing

	txt = txt.replace(/B/g, "b");
	txt = txt.replace(/C/g, "ch");
	txt = txt.replace(/F/gi, "ph");
	txt = txt.replace(/G/g, "g");
	txt = txt.replace(/J/g, "j");
	txt = txt.replace(/K/g, "k");
	txt = txt.replace(/P/g, "p");
//	txt = txt.replace(/Q/g, "k");
//	txt = txt.replace(/q/g, "k");
	txt = txt.replace(/V/g, "v");
	txt = txt.replace(/W/gi, "v");
	txt = txt.replace(/X/g, "x");
	txt = txt.replace(/Z/gi, "jh");


//Actual Processing
			//phonetic string typing converts to halanta 
			for (i=0;i<input.length;i++)
			{txt = txt.replace(input[i], unescape(halanta[i]));}

			//halanta followed by 'a' converts to vyanjana
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(halanta[i]+'a', unescape(vyanjan[i]));}

			//halanta followed by 'space' converts to vyanjana
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(halanta[i]+' ', unescape(vyanjan[i]+' '));}

			//halanta followed by punctuation mark converts to vyanjana with punctuation mark
			for (i=0;i<halanta.length;i++)
				for (k=0;k<punctuation_marks.length;k++)
				{txt = txt.replace(halanta[i]+punctuation_marks[k], unescape(vyanjan[i]+punctuation_marks[k]));}


			//kaanaa
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(vyanjan[i]+'a', unescape(vyanjan[i]+'ा'));}

			//halanta followed by rhasva swar converts to vyanjana with rhasva swar
			for (i=0;i<halanta.length;i++)
				for (j=0;j<rhasva_swar.length;j++)
				{txt = txt.replace(halanta[i]+rhasva_swar_input[j], unescape(vyanjan[i]+rhasva_swar[j]));}

			//ikaarant to eekaarant 
			//for (i=0;i<halanta.length;i++)
			//{txt = txt.replace(vyanjan[i]+'ि'+'i', unescape(vyanjan[i]+'ी'));}
			{txt = txt.replace('ि'+'i', unescape('ी'));}
			{txt = txt.replace('े'+'e', unescape('ी'));}

			//ukaaraant to ookaarant 
			//for (i=0;i<halanta.length;i++)
			//{txt = txt.replace(vyanjan[i]+'ु'+'u', unescape(vyanjan[i]+'ू'));}
			{txt = txt.replace('ु'+'u', unescape('ू'));}
			{txt = txt.replace('ो'+'o', unescape('ू'));}

			//halanta followed by 'ai' converts to 'ai' kar 
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(vyanjan[i]+'i', unescape(vyanjan[i]+'ै'));}

			//okaar
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(halanta[i]+'o', unescape(vyanjan[i]+'ो'));}

			//'au' kaar
			for (i=0;i<halanta.length;i++)
			{txt = txt.replace(vyanjan[i]+'u', unescape(vyanjan[i]+'ौ'));}
			
			//logic for inputting swars as characters
			for (i=0;i<all_swar.length;i++)
			{txt = txt.replace(all_swar_input[i], unescape(all_swar[i]));}

	txt = replaceEngNums(txt);
	sPos += (txt.length -prvlen +1);
	return txt;
}


function replaceEngNums(txt)
{
	txt = txt.replace(/1/g, "\u0967");
	txt = txt.replace(/2/g, "\u0968");
	txt = txt.replace(/3/g, "\u0969");
	txt = txt.replace(/4/g, "\u096A");
	txt = txt.replace(/5/g, "\u096B");
	txt = txt.replace(/6/g, "\u096C");
	txt = txt.replace(/7/g, "\u096D");
	txt = txt.replace(/8/g, "\u096E");
	txt = txt.replace(/9/g, "\u096F");
	txt = txt.replace(/0/g, "\u0966");

	return txt;
}

//CORE PROCESSING CODE 

var isIE = document.all?true:false;
var myimg = new Image();
var sPos = 0;
var isTh = false;
var isNg = false;
var kbmode = "roman";
var pkbmode = "roman";
var SplKeys = new Array();
//var myFieldID = "edit-comment1"


// reset to english first:
				pkbmode = kbmode;
				kbmode = "roman";
			

SplKeys["ZR"] = 0;
SplKeys["BS"] = 8;
SplKeys["CR"] = 13;

function convertThis(e, tar)
{
    if (!isIE)
        Key = e.which;
    else
		Key = e.keyCode;
	Char = String.fromCharCode(Key);
//	myField = document.getElementById(id);
myField = tar;
//myField = this();
//alert(myField)
	if( isIE )
	{
		myField.caretPos = document.selection.createRange().duplicate();
		prevChar = myField.caretPos.text;
		if(prevChar.length != 0)
			document.selection.clear();
		if(myField.value.length != 0)
			myField.caretPos.moveStart('character',-1);
		prevChar = myField.caretPos.text;
		if(prevChar == chnbin)
		{
			myField.caretPos.moveStart('character',-1);
			prevChar = myField.caretPos.text;
		}
		if(prevChar == "" && myField.value.length != 0)
			prevChar = "\u000A";
		if(Key == 13)
			Char = "\u000A";
		myField.caretPos.text = getLang(prevChar,Char, 0)
		e.cancelBubble = true;
		e.returnValue = false;

	}
	else if( myField.selectionStart >= 0)
	{
		if(isSplKey(Key) ||  e.ctrlKey )
			return true;
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		txtTop = myField.scrollTop;
		if(myField.value.length == 0)
		{
			prevChar = "";
			myField.value = getLang(prevChar,Char, startPos)
		}
		else
		{
			prevChar = myField.value.substring(startPos-1,startPos);
			prevStr =  myField.value.substring(0,startPos -1);
			if(prevChar == chnbin)
			{
				prevChar = myField.value.substring(startPos-2,startPos);
				prevStr =  myField.value.substring(0,startPos - 2);
			}
			myField.value = prevStr + getLang(prevChar,Char, myField.selectionStart)
					  + myField.value.substring(endPos, myField.value.length);
		}
		myField.selectionStart = sPos ;
		myField.selectionEnd = sPos;
		if((myField.scrollHeight+4)+"px" != myField.style.height)
			myField.scrollTop = txtTop;
		e.stopPropagation();
		e.preventDefault();
	}
}

function toggleT(obj)
{
	isTh = obj.checked;
}

function toggleG(obj)
{
	isNg = obj.checked;
}

function toggleKBMode(e,obj)
{
	if(obj != null)
	{
		pkbmode = kbmode;
		kbmode = obj.value;
		if(kbmode == "typewriter")
			myimg.src = "images/tw.png";
		else
			myimg.src = "images/"+"lang"+".png";
	}
	else
	{
		if (!isIE)
	        key = e.which;
	    else
			key = window.event.keyCode;
		if (key == 123)
		{
			if(kbmode != "english")
			{
				pkbmode = kbmode;
				kbmode = "english";
				document.keybdsel.keybrd[1].checked = true;
			}
			else
			{
				kbmode = pkbmode;
				pkbmode = "english";
				document.keybdsel.keybrd[0].checked = true;
			}
		}

	}
}

function isSplKey(keynum)
{
	retVal = false;
	for(i in SplKeys)
	{
		if(keynum == SplKeys[i])
			retVal = true;
	}
	return retVal;
}

function getLang(prv, txt, sP, mod)
{
	sPos = sP;
	if(kbmode == "english")
	{
		retTxt = prv+txt;
		sPos ++;
	}
	else if(kbmode == "typewriter")
	{
		if(prv == ugar && mapLangTw(txt,sP) == uugar)
			retTxt = mapLangTw(prv+txt,sP,mod);
		else
		{
			retTxt = prv+mapLangTw(txt,sP,mod);
		}
	}
	else
	{
		if(pkbmode == "english")
		{
			retTxt = prv+replTxt(txt);
			pkbmode = "roman";
		}
		else
			retTxt = replTxt(prv+txt);
	}
	return retTxt;
}



