﻿/**
 * Unicode Phonetic Parser for writing in webpages
 * This script transliterate the user input and display unicode bangla characters
 * 
 * @name Ekushey Unicode Parser
 * @version 1.0 [Date 30th July, 2006]
 * @author Hasin Hayder. Visit My Homepage at http://hasin.wordpress.com
 * @license LGPL
 */
 
/**
 * This script is released under Lesser GNU Public License [LGPL] 
 * which implies that you are free to use this script in your 
 * web applications without any problem. No warranty ensured. If you like 
 * this script, Please acknowledge by keeping a link to my website 
 * http://hasin.wordpress.com in the page where you use this script. 
 */ 
/**
 * Last Modification:01/11/2008 by Sabuj Kundu (http://manchu.wordpress.com)
 */
 /**
  * Added Intellisense (27 Jan, 2008 by Hasin Hayder)
  */
  /**
  *Little modification by Sabuj Kundu to solve the dhirgho i kar and dhirgho u kar :P
  */
    /**
  *Modified to output Manchu/Sibe/Daur by Hoolulu (Baturu, http://www.daicing.com/)
  */


/* added shift intelligency by Hasin Hayder, 14th March 2008 */
/* added  accent key ( ` ) as joiner.   (By Sabuj Kundu, 17th March 2008) */
/*Fixed oi kar   (By Sabuj Kundu, 24th March 2008)*/
// Set of Characters
var activeta; //active text area
var phonetic=new Array();
var shift=false; //for intelligent shift
// phonetic bangla equivalents
//Bengali: {U+0980..U+09FF} 
//phonetic['k'] = '\u0995'; // ko


//letters
phonetic['a']='\u1820';
phonetic['e']='\u185D';
phonetic['I']='\u185F';
phonetic['i']='\u185E';
phonetic['o']='\u1823';
phonetic['u']='\u1860';
phonetic['v']='\u1861';

phonetic['b']='\u182A';
phonetic['p']='\u1866';
phonetic['m']='\u182E';
phonetic['f']='\u186B';

phonetic['d']='\u1869';
phonetic['t']='\u1868';
phonetic['n']='\u1828';
phonetic['l']='\u182F';

phonetic['g']='\u1864';
phonetic['k']='\u1863';
phonetic['h']='\u1865';

phonetic['ng']='\u1862';
phonetic['nga']=phonetic['n']+ phonetic['g']+ phonetic['a'];
phonetic['nge']=phonetic['n']+ phonetic['g']+ phonetic['e'];
phonetic['ngi']=phonetic['n']+ phonetic['g']+ phonetic['i'];
phonetic['ngo']=phonetic['n']+ phonetic['g']+ phonetic['o'];
phonetic['ngu']=phonetic['n']+ phonetic['g']+ phonetic['u'];
phonetic['ngv']=phonetic['n']+ phonetic['g']+ phonetic['v'];

phonetic['G']='\u186C';
phonetic['K']='\u183A';
phonetic['H']='\u186D';

phonetic['j']='\u186A';
phonetic['c']='\u1834';
phonetic['x']='\u1867';
phonetic['R']='\u1870';

phonetic['J']='\u1872';
phonetic['C']='\u1871';

phonetic['z']='\u186F';
phonetic['q']='\u186E';
phonetic['s']='\u1830';

phonetic['y']='\u1836';
phonetic['w']='\u1838';

phonetic['r']='\u1837';


phonetic["'"]='\u0027';

//Mf
phonetic["i'"]=phonetic['I'];
phonetic['U']=phonetic['v'];

phonetic["g'"]=phonetic['G'];
phonetic["k'"]=phonetic['K'];
phonetic["h'"]=phonetic['H'];

phonetic["r'"]=phonetic['R'];

phonetic['S']=phonetic['x'];
phonetic['Z']=phonetic['R'];

phonetic['dz']=phonetic['z'];
phonetic["ts'"]=phonetic['q'];

phonetic['tsa']=phonetic['t']+ phonetic['s']+ phonetic['a'];
phonetic['tse']=phonetic['t']+ phonetic['s']+ phonetic['e'];
phonetic['tsi']=phonetic['t']+ phonetic['s']+ phonetic['i'];
phonetic['tso']=phonetic['t']+ phonetic['s']+ phonetic['o'];
phonetic['tsu']=phonetic['t']+ phonetic['s']+ phonetic['u'];
phonetic['tsv']=phonetic['t']+ phonetic['s']+ phonetic['v'];

phonetic['ts']=phonetic['q']+ phonetic['I'];

phonetic["j'"]=phonetic['J'];
phonetic["c'"]=phonetic['C'];

phonetic["jy"]=phonetic['J']+ phonetic['i'];
phonetic["c'y"]=phonetic['C']+ phonetic['i'];
phonetic["sy"]=phonetic['s']+ phonetic['I'];


//Shift
phonetic['Q']='\u180B';
phonetic['W']='\u180C';
phonetic['E']='\u180D';
phonetic['N']=phonetic['n']+ phonetic['Q'];

//Oz
phonetic[","]='\u1808';
phonetic["."]='\u1809';

phonetic["<"]='\u002C';
phonetic[">"]='\u3002';

phonetic[";"]='\u1862';

phonetic["["]='\u3010';
phonetic["]"]='\u3011';
//phonetic['\']='\u005C';

phonetic["{"]='\u3016';
phonetic["}"]='\u3017';
phonetic["|"]='\u007C';

phonetic["-"]='\u180A';
phonetic["="]='\u200D';
phonetic["+"]='\u200C';
phonetic["/"]=phonetic['=']+ phonetic['i'];

phonetic["$"]='\u00A5';
phonetic["^"]='\u2026'+ '\u2026';

phonetic["`"]='\u0060';

//Dead Key `
phonetic['`0']='\u1810';
phonetic['`1']='\u1811';
phonetic['`2']='\u1812';
phonetic['`3']='\u1813';
phonetic['`4']='\u1814';
phonetic['`5']='\u1815';
phonetic['`6']='\u1816';
phonetic['`7']='\u1817';
phonetic['`8']='\u1818';
phonetic['`9']='\u1819';

phonetic['`i']='\u1873';
phonetic['`f']='\u1876';
phonetic['`k']='\u1874';
phonetic['`j']='\u1835';
phonetic['`J']='\u1877';
phonetic['`n']=phonetic['`']+ phonetic['n'];
phonetic['`ng']='\u1829';
phonetic['`;']='\u1829';
phonetic['`r']='\u1875';

phonetic['`,']='\u1802';
phonetic['`.']='\u1803';
phonetic['`p']='\u1805';
phonetic['`c']='\u1804';
phonetic['`e']='\u1801';
phonetic['`a']='\u1807';
phonetic['`-']='\u1806';
phonetic['`q']='\u180e';

//Dead Key |
phonetic["|,"]='\u300A';
phonetic["|."]='\u300B';
phonetic["|["]='\u3008';
phonetic["|]"]='\u3009';
phonetic["|;"]='\u003B';
//phonetic["|\"]='\u3001';

phonetic["|1"]='\u2049';
phonetic["|2"]='\u2022';
phonetic["|4"]='\u0024';
phonetic["|5"]='\u002B';
phonetic["|6"]='\u005E';
phonetic["|7"]='\u300E';
phonetic["|8"]='\u300F';
phonetic["|9"]='\u300C';
phonetic["|0"]='\u300D';

phonetic["|-"]='\u2014';
phonetic["|="]='\u003d';
phonetic["|3"]='\u2048';
phonetic["|q"]='\u3014';
phonetic["|w"]='\u3015';
phonetic["|e"]='\u3018';

phonetic["|r"]='\u3019';
phonetic["|t"]='\u301A';
phonetic["|y"]='\u301B';
phonetic["|o"]='\u00B0';
phonetic["|?"]='\u002F';


//= bug fix - aeiouvI
phonetic["=a"]=phonetic['=']+ phonetic['a'];
phonetic["a="]=phonetic['a']+ phonetic['='];
phonetic["=a="]=phonetic['=']+ phonetic['a']+ phonetic['='];

phonetic["=e"]=phonetic['=']+ phonetic['e'];
phonetic["e="]=phonetic['e']+ phonetic['='];
phonetic["=e="]=phonetic['=']+ phonetic['e']+ phonetic['='];

phonetic["=i"]=phonetic['=']+ phonetic['i'];
phonetic["i="]=phonetic['i']+ phonetic['='];
phonetic["=i="]=phonetic['=']+ phonetic['i']+ phonetic['='];

phonetic["=o"]=phonetic['=']+ phonetic['o'];
phonetic["o="]=phonetic['o']+ phonetic['='];
phonetic["=o="]=phonetic['=']+ phonetic['o']+ phonetic['='];

phonetic["=u"]=phonetic['=']+ phonetic['u'];
phonetic["u="]=phonetic['u']+ phonetic['='];
phonetic["=u="]=phonetic['=']+ phonetic['u']+ phonetic['='];

phonetic["=v"]=phonetic['=']+ phonetic['v'];
phonetic["v="]=phonetic['v']+ phonetic['='];
phonetic["=v="]=phonetic['=']+ phonetic['v']+ phonetic['='];

phonetic["=I"]=phonetic['=']+ phonetic['I'];
phonetic["I="]=phonetic['I']+ phonetic['='];
phonetic["=I="]=phonetic['=']+ phonetic['I']+ phonetic['='];

phonetic["=i'"]=phonetic['=']+ phonetic['I'];
phonetic["i'="]=phonetic['I']+ phonetic['='];
phonetic["=i'="]=phonetic['=']+ phonetic['I']+ phonetic['='];

phonetic["=U"]=phonetic['=']+ phonetic['v'];
phonetic["U="]=phonetic['v']+ phonetic['='];
phonetic["=U="]=phonetic['=']+ phonetic['v']+ phonetic['='];

//= bug fix - bpmf dtnl

phonetic["=b"]=phonetic['=']+ phonetic['b'];
phonetic["b="]=phonetic['b']+ phonetic['='];
phonetic["=b="]=phonetic['=']+ phonetic['b']+ phonetic['='];

phonetic["=p"]=phonetic['=']+ phonetic['p'];
phonetic["p="]=phonetic['p']+ phonetic['='];
phonetic["=p="]=phonetic['=']+ phonetic['p']+ phonetic['='];

phonetic["=m"]=phonetic['=']+ phonetic['m'];
phonetic["m="]=phonetic['m']+ phonetic['='];
phonetic["=m="]=phonetic['=']+ phonetic['m']+ phonetic['='];

phonetic["=f"]=phonetic['=']+ phonetic['f'];
phonetic["f="]=phonetic['f']+ phonetic['='];
phonetic["=f="]=phonetic['=']+ phonetic['f']+ phonetic['='];

phonetic["=d"]=phonetic['=']+ phonetic['d'];
phonetic["d="]=phonetic['d']+ phonetic['='];
phonetic["=d="]=phonetic['=']+ phonetic['d']+ phonetic['='];

phonetic["=t"]=phonetic['=']+ phonetic['t'];
phonetic["t="]=phonetic['t']+ phonetic['='];
phonetic["=t="]=phonetic['=']+ phonetic['t']+ phonetic['='];

phonetic["=n"]=phonetic['=']+ phonetic['n'];
phonetic["n="]=phonetic['n']+ phonetic['='];
phonetic["=n="]=phonetic['=']+ phonetic['n']+ phonetic['='];

phonetic["=l'"]=phonetic['=']+ phonetic['l'];
phonetic["l'="]=phonetic['l']+ phonetic['='];
phonetic["=l'="]=phonetic['=']+ phonetic['l']+ phonetic['='];

//= bug fix - gkh GKH

phonetic["=g"]=phonetic['=']+ phonetic['g'];
phonetic["g="]=phonetic['g']+ phonetic['='];
phonetic["=g="]=phonetic['=']+ phonetic['g']+ phonetic['='];

phonetic["=k"]=phonetic['=']+ phonetic['k'];
phonetic["k="]=phonetic['k']+ phonetic['='];
phonetic["=k="]=phonetic['=']+ phonetic['k']+ phonetic['='];

phonetic["=h"]=phonetic['=']+ phonetic['h'];
phonetic["h="]=phonetic['h']+ phonetic['='];
phonetic["=h="]=phonetic['=']+ phonetic['h']+ phonetic['='];

phonetic["=G"]=phonetic['=']+ phonetic['G'];
phonetic["G="]=phonetic['G']+ phonetic['='];
phonetic["=G="]=phonetic['=']+ phonetic['G']+ phonetic['='];

phonetic["=K"]=phonetic['=']+ phonetic['K'];
phonetic["K="]=phonetic['K']+ phonetic['='];
phonetic["=K="]=phonetic['=']+ phonetic['K']+ phonetic['='];

phonetic["=H"]=phonetic['=']+ phonetic['H'];
phonetic["H="]=phonetic['H']+ phonetic['='];
phonetic["=H="]=phonetic['=']+ phonetic['H']+ phonetic['='];

phonetic["=g'"]=phonetic['=']+ phonetic['G'];
phonetic["g'="]=phonetic['G']+ phonetic['='];
phonetic["=g'="]=phonetic['=']+ phonetic['G']+ phonetic['='];

phonetic["=k'"]=phonetic['=']+ phonetic['K'];
phonetic["k'="]=phonetic['K']+ phonetic['='];
phonetic["=k'="]=phonetic['=']+ phonetic['K']+ phonetic['='];

phonetic["=h'"]=phonetic['=']+ phonetic['H'];
phonetic["h'="]=phonetic['H']+ phonetic['='];
phonetic["=h'="]=phonetic['=']+ phonetic['H']+ phonetic['='];

//= bug fix - jcxR zqs JC

phonetic["=j"]=phonetic['=']+ phonetic['j'];
phonetic["j="]=phonetic['j']+ phonetic['='];
phonetic["=j="]=phonetic['=']+ phonetic['j']+ phonetic['='];

phonetic["=c"]=phonetic['=']+ phonetic['c'];
phonetic["c="]=phonetic['c']+ phonetic['='];
phonetic["=c="]=phonetic['=']+ phonetic['c']+ phonetic['='];

phonetic["=x"]=phonetic['=']+ phonetic['x'];
phonetic["x="]=phonetic['x']+ phonetic['='];
phonetic["=x="]=phonetic['=']+ phonetic['x']+ phonetic['='];

phonetic["=R"]=phonetic['=']+ phonetic['R'];
phonetic["R="]=phonetic['R']+ phonetic['='];
phonetic["=R="]=phonetic['=']+ phonetic['R']+ phonetic['='];

phonetic["=z"]=phonetic['=']+ phonetic['z'];
phonetic["z="]=phonetic['z']+ phonetic['='];
phonetic["=z="]=phonetic['=']+ phonetic['z']+ phonetic['='];

phonetic["=q"]=phonetic['=']+ phonetic['q'];
phonetic["q="]=phonetic['q']+ phonetic['='];
phonetic["=q="]=phonetic['=']+ phonetic['q']+ phonetic['='];

phonetic["=s"]=phonetic['=']+ phonetic['s'];
phonetic["s="]=phonetic['s']+ phonetic['='];
phonetic["=s="]=phonetic['=']+ phonetic['s']+ phonetic['='];

phonetic["=J"]=phonetic['=']+ phonetic['J'];
phonetic["J="]=phonetic['J']+ phonetic['='];
phonetic["=J="]=phonetic['=']+ phonetic['J']+ phonetic['='];

phonetic["=C"]=phonetic['=']+ phonetic['C'];
phonetic["C="]=phonetic['C']+ phonetic['='];
phonetic["=C="]=phonetic['=']+ phonetic['C']+ phonetic['='];



phonetic["=r'"]=phonetic['=']+ phonetic['r'];
phonetic["r'="]=phonetic['r']+ phonetic['='];
phonetic["=r'="]=phonetic['=']+ phonetic['r']+ phonetic['='];

phonetic["=Z"]=phonetic['=']+ phonetic['R'];
phonetic["Z="]=phonetic['R']+ phonetic['='];
phonetic["=Z="]=phonetic['=']+ phonetic['R']+ phonetic['='];

phonetic["=S"]=phonetic['=']+ phonetic['x'];
phonetic["S="]=phonetic['x']+ phonetic['='];
phonetic["=S="]=phonetic['=']+ phonetic['x']+ phonetic['='];

phonetic["=dz"]=phonetic['=']+ phonetic['z'];
phonetic["dz="]=phonetic['z']+ phonetic['='];
phonetic["=dz="]=phonetic['=']+ phonetic['z']+ phonetic['='];

phonetic["=ts'"]=phonetic['=']+ phonetic['q'];
phonetic["ts'="]=phonetic['q']+ phonetic['='];
phonetic["=ts'="]=phonetic['=']+ phonetic['q']+ phonetic['='];

phonetic["=j'"]=phonetic['=']+ phonetic['J'];
phonetic["j'="]=phonetic['J']+ phonetic['='];
phonetic["=j'="]=phonetic['=']+ phonetic['J']+ phonetic['='];

phonetic["=c'"]=phonetic['=']+ phonetic['C'];
phonetic["c'="]=phonetic['C']+ phonetic['='];
phonetic["=c'="]=phonetic['=']+ phonetic['C']+ phonetic['='];

//= bug fix - ywr

phonetic["=y"]=phonetic['=']+ phonetic['y'];
phonetic["y="]=phonetic['y']+ phonetic['='];
phonetic["=y="]=phonetic['=']+ phonetic['y']+ phonetic['='];

phonetic["=w"]=phonetic['=']+ phonetic['w'];
phonetic["w="]=phonetic['w']+ phonetic['='];
phonetic["=w="]=phonetic['=']+ phonetic['w']+ phonetic['='];

phonetic["=r"]=phonetic['=']+ phonetic['r'];
phonetic["r="]=phonetic['r']+ phonetic['='];
phonetic["=r="]=phonetic['=']+ phonetic['r']+ phonetic['='];

//= bug fix - ng

phonetic["=ng"]=phonetic['=']+ phonetic['ng'];
phonetic["ng="]=phonetic['ng']+ phonetic['='];
phonetic["=ng="]=phonetic['=']+ phonetic['ng']+ phonetic['='];

phonetic['=nga']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['a'];
phonetic['nga=']=phonetic['n']+ phonetic['g']+ phonetic['a']+ phonetic['='];
phonetic['=nga=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['a']+ phonetic['='];

phonetic['=nge']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['e'];
phonetic['nge=']=phonetic['n']+ phonetic['g']+ phonetic['e']+ phonetic['='];
phonetic['=nge=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['e']+ phonetic['='];

phonetic['=ngi']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['i'];
phonetic['ngi=']=phonetic['n']+ phonetic['g']+ phonetic['i']+ phonetic['='];
phonetic['=ngi=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['i']+ phonetic['='];

phonetic['=ngo']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['o'];
phonetic['ngo=']=phonetic['n']+ phonetic['g']+ phonetic['o']+ phonetic['='];
phonetic['=ngo=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['o']+ phonetic['='];

phonetic['=ngu']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['u'];
phonetic['ngu=']=phonetic['n']+ phonetic['g']+ phonetic['u']+ phonetic['='];
phonetic['=ngu=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['u']+ phonetic['='];

phonetic['=ngv']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['v'];
phonetic['ngv=']=phonetic['n']+ phonetic['g']+ phonetic['v']+ phonetic['='];
phonetic['=ngv=']=phonetic['=']+ phonetic['n']+ phonetic['g']+ phonetic['v']+ phonetic['='];

//= bug fix - Chinese

phonetic["=jy"]=phonetic['=']+ phonetic['J']+ phonetic['i'];
phonetic["jy="]=phonetic['J']+ phonetic['i']+ phonetic['='];
phonetic["=jy="]=phonetic['=']+ phonetic['J']+ phonetic['i']+ phonetic['='];

phonetic["=c'y"]=phonetic['=']+ phonetic['C']+ phonetic['i'];
phonetic["c'y="]=phonetic['C']+ phonetic['i']+ phonetic['='];
phonetic["=c'y="]=phonetic['=']+ phonetic['C']+ phonetic['i']+ phonetic['='];

phonetic["=sy"]=phonetic['=']+ phonetic['s']+ phonetic['I'];
phonetic["sy="]=phonetic['s']+ phonetic['I']+ phonetic['='];
phonetic["=sy="]=phonetic['=']+ phonetic['s']+ phonetic['I']+ phonetic['='];


//phonetic['vowels']='A'; //dont change this pattern
//End Set


var carry = '';  //This variable stores each keystrokes
var old_len =0; //This stores length parsed bangla charcter
var ctrlPressed=false;
var len_to_process_oi_kar=0;
var first_letter = false;
var carry2="";
isIE=document.all? 1:0;
var switched=false;

function checkKeyDown(ev)
{
	//just track the control key
	var e = (window.event) ? event.keyCode : ev.which;
	if (e=='17')
	{
		ctrlPressed = true;
	}
	else if(e==16)
	shift=true;
}

function checkKeyUp(ev)
{
	//just track the control key
	var e = (window.event) ? event.keyCode : ev.which;
	if (e=='17')
	{
		ctrlPressed = false;
		//alert(ctrlPressed);
	}

}



function parsePhonetic(evnt)
{
	// main phonetic parser
	var t = document.getElementById(activeta); // the active text area
	var e = (window.event) ? event.keyCode : evnt.which; // get the keycode

	if (e=='113')
	{
		//switch the keyboard mode
		if(ctrlPressed){
			switched = !switched;
			//alert("H"+switched);
			return true;
		}
	}

	if (switched) return true;
	
	if(ctrlPressed)
	{
		// user is pressing control, so leave the parsing
		e=0; 
	}

	if (shift)
	{
		var char_e = String.fromCharCode(e).toUpperCase(); // get the character equivalent to this keycode
		shift=false;
	}
	else
	var char_e = String.fromCharCode(e); // get the character equivalent to this keycode
	
	if(e==8 || e==32)
	{
		// if space is pressed we have to clear the carry. otherwise there will be some malformed conjunctions
		carry = " ";	
		old_len = 1;
		return;
	}

	lastcarry = carry;
	carry += "" + char_e;	 //append the current character pressed to the carry
	
/*	//the intellisense
	if ((phonetic['vowels'].indexOf(lastcarry)!=-1 && phonetic['vowels'].indexOf(char_e)!=-1) || (lastcarry==" " && phonetic['vowels'].indexOf(char_e)!=-1) )
	{
		//let's check for dhirgho i kar and dhirgho u kar :P		
		if(carry=='ii' || carry=='uu'){carry = lastcarry+char_e;}
		else
		{
			char_e = char_e.toUpperCase();
			carry = lastcarry+char_e;		
		}				
	}
	//intellisense ended
*/
	
	bangla = parsePhoneticCarry(carry); // get the combined equivalent
	tempBangla = parsePhoneticCarry(char_e); // get the single equivalent

	if (tempBangla == ".." || bangla == "..") //that means it has next sibling
	{
		return false;
	}
	//alert(carry);

/*
	if (char_e=="+" || char_e=="="||char_e=="`")
	{
		if(carry=="++" || carry=="=="||carry=="``")
		{
			// check if it is a plus/equal/accent  key/sign
			insertConjunction(char_e,old_len);
			old_len=1;
			return false;
		}	
		//otherwise this is a simple joiner
		insertAtCursor("\u09CD");old_len = 1;
		carry2=carry;
		carry=char_e;
		return false;
	}
*/	

	
	
	else if(old_len==0) //first character
	{
		// this is first time someone press a character
		insertConjunction(bangla,1);
		old_len=1;
		return false;
		
	}

/*	else if((char_e=='z' || char_e=='Z')&& carry2=="r+")//force Za-phola after Ra
	{
		//alert('yes');
		insertConjunction('\u200D'+'\u09CD'+phonetic['z'],1);
		old_len=1;	
		return false;
	} */

/*	else if(carry=="Ao")
	{
		// its a shore o
		insertConjunction(parsePhoneticCarry("ao"),old_len);
		old_len=1;
		return false;
	}
	else if (carry == "ii")
	{
		// process dirgho i kar
		//alert('dirgho i kar');
		insertConjunction(phonetic['ii'],1);
		old_len = 1;
		return false;
	}
	
	else if (carry == "oI")
	{
		//oi kar
		insertConjunction('\u09C8',old_len); //same treatment like ou kar (By manchu)
		old_len = 1; 
		return false;
	}		

	else if (char_e == "o")
	{
		old_len = 1;
		insertAtCursor('\u09CB');
		carry = "o";
		return false;
	}
	
	
	else if (carry == "oU")
	{
		// ou kar
		insertConjunction("\u09CC",old_len);
		old_len = 1;
		return false;
	}	
	*/
	
	else if((bangla == "" && tempBangla !="")) //that means it has no joint equivalent
	{
		
		// there is no joint equivalent - so show the single equivalent. 
		bangla = tempBangla;
		if (bangla=="")
		{
			// there is no available equivalent - leave as is
			carry ="";
			return;
		}
		
		else
		{
			// found one equivalent
			carry = char_e;
			insertAtCursor(bangla);
			old_len = bangla.length;
			return false;
		}
	}
	else if(bangla!="")//joint equivalent found 
	{
		// we have found some joint equivalent process it
		
		insertConjunction(bangla, old_len);
		old_len = bangla.length;
		return false;
	}
}


    function parsePhoneticCarry(code)
    {
	//this function just returns a bangla equivalent for a given keystroke
	//or a conjunction
	//just read the array - if found then return the bangla eq.
	//otherwise return a null value
        if (!phonetic[code])  //Oh my god :-( no bangla equivalent for this keystroke

        {
			return ''; //return a null value
        }
        else
        {
            return ( phonetic[code]);  //voila - we've found bangla equivalent
        }

    }


function insertAtCursor(myValue) {
	/**
	 * this function inserts a character at the current cursor position in a text area
	 * many thanks to alex king and phpMyAdmin for this cool function
	 * 
	 * This function is originally found in phpMyAdmin package and modified by Hasin Hayder to meet the requirement
	 */
	var myField = document.getElementById(activeta);
	if (document.selection) {		
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		sel.collapse(true);
		sel.select();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == 0) {
		
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		startPos = (startPos == -1 ? myField.value.length : startPos );
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
		myField.scrollTop = scrollTop;
	} else {
		var scrollTop = myField.scrollTop;
		myField.value += myValue;
		myField.focus();
		myField.scrollTop = scrollTop;
	}
}

function insertConjunction(myValue, len) {
	/**
	 * this function inserts a conjunction and removes previous single character at the current cursor position in a text area
	 * 
	 * This function is derived from the original one found in phpMyAdmin package and modified by Hasin to meet our need
	 */
	//alert(len);
	var myField = document.getElementById(activeta);
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		if (myField.value.length >= len){  // here is that first conjunction bug in IE, if you use the > operator
			sel.moveStart('character', -1*(len));   
			//sel.moveEnd('character',-1*(len-1));
		}
		sel.text = myValue;
		sel.collapse(true);
		sel.select();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == 0) {
		myField.focus();
		var startPos = myField.selectionStart-len;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		startPos = (startPos == -1 ? myField.value.length : startPos );
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
		myField.scrollTop = scrollTop;
	} else {
		var scrollTop = myField.scrollTop;
		myField.value += myValue;
		myField.focus();
		myField.scrollTop = scrollTop;
	}
	//document.getElementById("len").innerHTML = len;
}

function makePhoneticEditor(textAreaId)
{
	activeTextAreaInstance = document.getElementById(textAreaId);
	activeTextAreaInstance.onkeypress = parsePhonetic; 
	activeTextAreaInstance.onkeydown = checkKeyDown; 
	activeTextAreaInstance.onkeyup = checkKeyUp;
	activeTextAreaInstance.onfocus = function(){activeta=textAreaId;};
}
function makeVirtualEditor(textAreaId)
{
	activeTextAreaInstance = document.getElementById(textAreaId);
	activeTextAreaInstance.onfocus = function(){activeta=textAreaId;};
}
