﻿/**
 * Bangla keyboard parser 
 * This script helps to type bangla in webpages 
 *
 * Many thanx to Mr. Hasin Hayder for his core script
 * Further developed for various options  by Muntasim Ahmed (ahmed2tul@gmail.com)
*/

// Set of Characters
var activeta; //active text area
var unijoy=new Array();
var unijoy3=new Array();
var unijoy4=new Array();

// unijoy bangla equivalents
unijoy['a'] = 'ৃ'; //wri kar
unijoy['A'] = 'র্'; //ref
unijoy3['a'] = 'ঋ';  //wri
unijoy['s'] = 'ু'; //u kar
unijoy['S'] = 'ূ'; //U kar
unijoy3['s'] = 'উ'; // wrossho u
unijoy['d'] = 'ি'; //i kar
unijoy['D'] = 'ী'; //I kar
unijoy3['d'] = 'ই'; //I kar
unijoy['f'] = 'া'; //a kar
unijoy['F'] = 'অ'; //shore  o
unijoy3['f'] = 'আ'; //shore  a
unijoy['g'] = '্'; //joiner
unijoy['G'] = '|'; //dari
unijoy3['g'] = '্‌'; //hashant
unijoy['h'] = 'ব'; //bo
unijoy['H'] = 'ভ'; //vo
unijoy3['h'] = 'ৰ'; //bo with diagonal
unijoy['j'] = 'ক'; //ko
unijoy['J'] = 'খ'; //kho
unijoy['k'] = 'ত'; //to
unijoy['K'] = 'থ'; //tho
unijoy['l'] = 'দ'; //do
unijoy['L'] = 'ধ'; //dho
unijoy['z'] = '্য'; //zo fola
unijoy['Z'] = '্র'; //ro fola
unijoy3['z'] = 'ৢ'; // hsnt li
unijoy['x'] = 'ো'; //o kar
unijoy['X'] = 'ৌ'; //ou kar
unijoy3['x'] = 'ৌও'; //oo
unijoy4['x'] = 'ৗ'; //???
unijoy['c'] = 'ে'; //e kar
unijoy['C'] = 'ৈ'; //oi kar
unijoy3['c'] = 'এ'; //e
unijoy4['c'] = 'ৠ'; //wri +wri kar
unijoy['v'] = 'র'; //ro
unijoy['V'] = 'ল'; //lo
unijoy3['v'] = 'ৱ'; //ro with diagonal
unijoy4['v'] = 'ৣ'; //li +li
unijoy['b'] = 'ন'; //dontnnoo no
unijoy['B'] = 'ণ'; //murdhonno no
unijoy4['b'] = 'ৄ'; //double wri
unijoy['n'] = 'স'; //dontnnoo ssho
unijoy['N'] = 'ষ'; //murdhonno sho
unijoy['m'] = 'ম'; //mo
unijoy3['.']='়'; //nukta
unijoy['M'] = 'শ'; //talobbo ssho
unijoy['q'] = 'ঙ'; //uma
unijoy['Q'] = 'ং'; //onursha
unijoy3['q'] = 'ঌ'; //li
unijoy['w'] = 'য'; //zo
unijoy['W'] = 'য়'; //ontosto
unijoy4['w'] = 'ৡ'; //li..
unijoy['e'] = 'ড'; //ddo
unijoy['E'] = 'ঢ'; //ddho
unijoy3['e'] = 'ঈ'; //dirgho e
unijoy['r'] = 'প'; //po
unijoy['R'] = 'ফ'; //fo
unijoy['t'] = 'ট'; //tto
unijoy['T'] = 'ঠ'; //ttho
unijoy['y'] = 'চ'; //cho
unijoy['Y'] = 'ছ'; //co
unijoy['u'] = 'জ'; //b jo
unijoy['U'] = 'ঝ'; //jho
unijoy3['u'] = 'ঊ'; //dirgho u
unijoy['i'] = 'হ'; //ho
unijoy['I'] = 'ঞ'; //eo
unijoy3['i'] = 'ঐ'; //oi
//unijoy4['i'] ='';
unijoy['o'] = 'গ'; //go
unijoy['O'] = 'ঘ'; //gho
unijoy3['o'] = 'ঔ'; //ou
unijoy['p'] = 'ড়'; //ddo e bindu ro
unijoy['P'] = 'ঢ়'; //ddho e bindu ro
//unijoy['\''] = 'ড়';
//unijoy['|'] = 'ঢ়'; //bishorgho
unijoy['&'] = 'ঁ'; //chondrobindu

unijoy['0']='০';
unijoy4['0']='৸';
unijoy['1']='১';
unijoy4['1']='৴';
unijoy['2']='২';
unijoy4['2']='৵';
unijoy['3']='৩';
unijoy4['3']='৶';
unijoy['4']='৪';
unijoy4['4']='|';
unijoy['$']='৳';
unijoy['5']='৫';
unijoy4['5']='৲';
unijoy['6']='৬';
unijoy['^']='÷';
unijoy['7']='৭';
unijoy4['7']='৺';
unijoy['8']='৮';
unijoy['9']='৯';
unijoy4['-']='৸';






//////////////////////////////Bangla euivalent character set for shabdik/////////////////

var shabdik=new Array();
var shabdik_v=new Array();
var shabdik_c=new Array();


// shabdik bangla equivalents
shabdik['k'] = 'ক'; // ko
shabdik['q'] = 'ক'; // ko
shabdik['Q'] = 'ক'; // ko
shabdik['oi']='ৈ'; // oi kar
shabdik['Oi']='ঐ'; // oi

shabdik['i']='ি'; // hrossho i kar
shabdik['I']='ই'; // hrossho i
shabdik['ii']='ী'; // dirgho i kar
shabdik['Ii']='ঈ'; // dirgho i
shabdik['e']='ে'; // e kar
shabdik['E'] = 'এ'; // E
shabdik['U'] = 'উ'; // hrossho u
shabdik['W'] = 'উ'; // hrossho u
shabdik['u'] = 'ু'; // hrossho u kar
shabdik['uu'] = 'ূ'; // dirgho u kar
shabdik['Uu'] = 'ঊ'; // dirgho u
shabdik['Ww'] = 'ঊ'; // dirgho u
shabdik['Oo'] = 'ঊ'; // dirgho u
shabdik['r']='র'; // ro
shabdik['a']='া'; // a kar
shabdik['Aa']='আ'; // shore a
shabdik['A']='অ'; // shore o
shabdik['s']='স'; // dontyo so
shabdik['t']='ত'; // to
shabdik['kh'] = 'খ'; // Kho ////
shabdik['n']='ন'; // dontyo no
shabdik['nH']='ণ'; // murdhonyo no
shabdik['tt']='ট'; // tto
shabdik['tH']='ঠ'; // ttho
shabdik['d']='দ'; // do
shabdik['dh']='ধ'; // dho
shabdik['b']='ব'; // bo
shabdik['v']='ভ'; // bho
shabdik['rr']='ড়';	 // doye bindu ro
shabdik['rh']='ঢ়';	 // dhoye bindu ro
shabdik['g']='গ';	// go
shabdik['gh']='ঘ';	// gho
shabdik['h']='হ';	// ho
shabdik['nY']='ঞ';	// yo
shabdik['z']='জ';	// borgio jo
shabdik['zh']='ঝ'; // jho
shabdik['jh']='ঝ'; // jho
shabdik['ch']='চ'; // cho
shabdik['c']='ছ'; // ccho
shabdik['th']='থ'; // tho
shabdik['p']='প'; // po
shabdik['f']='ফ'; // fo
shabdik['dd']='ড'; // ddo
shabdik['dH']='ঢ'; // ddho

shabdik['j']='য';  // ontoshyo zo
shabdik['y']='য়';	// ontostho yo
shabdik['Y']='য়';	// ontostho yo
shabdik['nG']='ঙ';	// Uma
shabdik['Ng']='ং';	// uniswor
shabdik['l']='ল';	// lo
shabdik['m']='ম';	// mo
shabdik['sh']='শ';	// talobyo sho
shabdik['ss']='ষ'; // mordhonyo sho
shabdik['O']='ও'; // o
shabdik['o']='ো';  //o kar
shabdik['ou']='ৌ'; // ou kar
shabdik['Ou']='ঔ'; // OU
shabdik['w']='ঔ'; // OU
shabdik['tt']='ট'; // tto
shabdik[':']='ঃ'; // bisworgo
shabdik["."] ="।"; // dari
shabdik[".."] = "়"; // fullstop
//shabdik['tX'] = 'ত্‍'; // hosonto
shabdik['tX']='ত্‍‌';
shabdik['Ny'] = 'ঁ'; // chondrobindu
shabdik['x'] ='্য'; // jo fola
shabdik['X'] ='্য'; // jo fola
shabdik['wr'] ='ৃ'; // wri kar
//End Set
///////shift key//////////
shabdik['K']='্ক';
shabdik['Kh']='্খ';
shabdik['G']='্গ';
shabdik['Gh']='্ঘ';
shabdik['NG']='্ঙ';
shabdik['Ch']='্চ';
shabdik['C']='্ছ';
shabdik['Z']='্জ';
shabdik['Zh']='্ঝ';
shabdik['Jh']='্ঝ';
shabdik['NY']='্ঞ';
shabdik['Tt']='্ট';
shabdik['TH']='্ঠ';
shabdik['Dd']='্ড';
shabdik['DH']='্ঢ';
shabdik['NH']='্ণ';
shabdik['T']='্ত';
shabdik['Th']='্থ';
shabdik['D']='্দ';
shabdik['Dh']='্ধ';
shabdik['N']='্ন';
shabdik['P']='্প';
shabdik['F']='্ফ';
shabdik['B']='্ব';
shabdik['V']='্ভ';
shabdik['M']='্ম';
shabdik['J']='্য';
shabdik['R']='্র';
shabdik['L']='্ল';
shabdik['Sh']='্শ';
shabdik['Ss']='্ষ';
shabdik['S']='্স';
shabdik['H']='্হ';
shabdik['Rr']='্ড়';
shabdik['Rh']='্ঢ়';
shabdik['`']='';
shabdik['0']='০';
shabdik['1']='১';
shabdik['2']='২';
shabdik['3']='৩';
shabdik['4']='৪';
shabdik['5']='৫';
shabdik['6']='৬';
shabdik['7']='৭';
shabdik['8']='৮';
shabdik['9']='৯';
//////////////////////set of vowel//////////
shabdik_v['o']='অ';
shabdik_v['a']='আ';
shabdik_v['i']='ই';
shabdik_v['I']='ই';
shabdik_v['Ii']='ঈ';
shabdik_v['u']='উ';
//shabdik_v['U']='ঊ';
shabdik_v['ri']='ঋ';
shabdik_v['e']='এ';
shabdik_v['oi']='ঐ';
shabdik_v['O']='ও';
shabdik_v['ou']='ঔ';
shabdik_v['Ou']='ঔ';
shabdik_v['wr']='ঋ';

///////////////////SET OF CONSONANT////////////////
shabdik_c['k']='ক';
shabdik_c['kh']='খ';
shabdik_c['g']='গ';
shabdik_c['gh']='ঘ';
//shabdik_c['nG']='ঙ';
shabdik_c['ch']='চ';
shabdik_c['c']='ছ';
shabdik_c['z']='জ';
shabdik_c['zh']='ঝ';
shabdik_c['jh']='ঝ';
//shabdik_c['nY']='ঞ';
shabdik_c['tt']='ট';
shabdik_c['tH']='ঠ';
shabdik_c['dd']='ড';
shabdik_c['dH']='ঢ';
shabdik_c['nH']='ণ';
shabdik_c['t']='ত';
shabdik_c['th']='থ';
shabdik_c['d']='দ';
shabdik_c['dh']='ধ';
shabdik_c['n']='ন';
shabdik_c['p']='প';
shabdik_c['f']='ফ';
shabdik_c['b']='ব';
shabdik_c['v']='ভ';
shabdik_c['m']='ম';
shabdik_c['j']='য';
shabdik_c['r']='র';
shabdik_c['l']='ল';
shabdik_c['sh']='শ';
shabdik_c['ss']='ষ';
shabdik_c['s']='স';
shabdik_c['h']='হ';
shabdik_c['rr']='ড়';
shabdik_c['rh']='ঢ়';
shabdik_c['x']='্য';


isIE=document.all? 1:0;

var carry = '';  //This variable stores each keystrokes
var old_len =0; //This stores length parsed bangla charcter
var len_to_process_oi_kar=0;
var first_letter = false;
var shiftMode = false; // if true the shift key is down
var ctrlMode = false; // if true the ctrl key is down
var altMode = false; // if true the alt key is down
var sac=false;
var parent_char='';
var prev_char='';   //stores previous character
var lastcarry='';
var current_char='';//////////////// delect shift,ctrl, alt key///////////////// (tutul)
var space=true;
var noEffect = false;
var prev_dis='';

function docOnKeydown(ev)
{
		
  var e = new xEvent(ev);
  switch (e.keyCode) {
    case 16:
      shiftMode = true;
      break;
    case 17:
      ctrlMode = true;
	    break;
    case 18:
      altMode = true;
	  break;

	default:
	
	if(!shiftMode && ctrlMode && !altMode){
		var char_e = String.fromCharCode(e.keyCode+32);
	//alert(char_e);
	if(char_e == 'e')
	{
	ctrlMode = false;
	keyboard = 0;
	noEffect = true;
	eng = document.getElementById('english');
	eng.checked = true;
	return false;
	//break;
	}
	else if(char_e == 'u')
	{
	ctrlMode = false;
	keyboard = 2;
	noEffect = true;
	uni = document.getElementById('unijoy');
	uni.checked = true;
	return false;
	//break;
	}
	else if (char_e == 's')
	{
	ctrlMode = false;
	keyboard = 1;
	noEffect = true;
	sab = document.getElementById('shabdik');
	sab.checked = true;
	return false;
	//break;
	}
	
	// break;
	
	}

	if(shiftMode && ctrlMode && altMode){
		var char_e = String.fromCharCode(e.keyCode+32);
	//layer3=1;
	//alert(e.keyCoe);
	if(unijoy4[char_e]){
	insertAtCursor(unijoy4[char_e]);
	carry='';
	if (navigator.appName=="Netscape")
	sac=true;
	//if(old_len==0)
	old_len=0;
	}
	//break;
		//alert('shift' + e.keyCode);
		//tmp=3;

	}


	else if (ctrlMode && altMode){
	//alert('test');
	var char_e = String.fromCharCode(e.keyCode+32);
	//layer3=1;
	if(unijoy3[char_e]){
	insertAtCursor(unijoy3[char_e]);
    carry='';
    if (navigator.appName=="Netscape")
	sac=true;
	old_len=0;

	}
	//break;

  }
  break;
  }

}



function writeEnglish(evnt)
{	
	if(noEffect)
	{
		noEffect = false;
		return false;
	}
	var myField = document.getElementById(activeta); // the active text area
	var e = (window.event) ? event.keyCode : evnt.which; // get the keycode
	var char_e = String.fromCharCode(e);
    
	//MOZILLA/NETSCAPE support
	 if (myField.selectionStart || myField.selectionStart == 0) {
     	myField.write(char_e);
    
    }
        else
        insertAtCursor(char_e);

 return false;
}
function parseunijoy(evnt)
{	
	//alert('hi');
	if(noEffect)
	{
		noEffect = false;
		return false;
	}	
	if(keyboard==1)
	{
	parseShabdik(evnt);
		return false;
	}
	else if(keyboard ==0)
	{
	writeEnglish(evnt);
		return false;
	}
	else {
	// main unijoy parser
	var t = document.getElementById(activeta); // the active text area
	var e = (window.event) ? event.keyCode : evnt.which; // get the keycode
	//checkKeyPress();
    //uniJoy();
	

	t.onkeydown=docOnKeydown;

    shiftMode=false;
    ctrlMode=false;
	altMode=false;
	if(sac)
	{
	sac=false;
	return;
	}

	var char_e = String.fromCharCode(e); // get the character equivalent to this keycode


	if(e==32 )
	{
		// if space is pressed we have to clear the carry. 
		carry = " ";
		//space=true;
		str = t.value;
		//str_length = str.length;
		//alert(str_length);
		result = str.concat(char_e);
		t.value = result;
		//alert(result);
		//old_len = 1;
		
		return false;
	}
	if( e==8)
	{
		// if backspace is pressed we have to clear the carry & ....
		carry = " ";
		//space=true;
		str = t.value;
		str_length = str.length;
		//alert(str_length);
		result = str.substr(0,str_length-1);
		t.value = result;
		//alert(result);
		//old_len = 1;
		
		return false;
	}
	lastcarry = carry;
	carry += "" + char_e;	 //append the current character pressed to the carry

	bangla = parseunijoyCarry(carry,e); // get the combined equivalent
	tempBangla = parseunijoyCarry(char_e,e); // get the single equivalent
	//document.getElementById("tb").innerHTML=tempBangla;document.getElementById("cb").innerHTML=bangla;
	//alert(t.value.length);

	 if(old_len==0) //first character
	{
		// this is first time someone press a character
		//document.getElementById("stat").innerHTML="first char";
		//t.value = bangla;
		//status = "ok";
		//prev_dis=bangla;
		insertAtCursor(bangla,1);
		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
			//document.getElementById("stat").innerHTML="No replacement";
			carry ="";
			//prev_dis='';
			return;
		}

		else
		{
			// found one equivalent
			//document.getElementById("stat").innerHTML="Normal replacement";
			carry = char_e;
			//prev_dis=bangla;
			insertAtCursor(bangla);

			old_len = bangla.length;
			return false;
		}
	}
	else if(bangla!="")//joint equivalent found
	{
		// we have found some joint equivalent process it
		//document.getElementById("stat").innerHTML="Joint Replacement";
		//alert("now joint");
		//prev_dis=bangla;
		insertAtCursor(bangla, old_len);
		old_len = bangla.length;
		return false;
	}
	
	}
}


function parseShabdik(evnt)
   {	
   	if(noEffect)
	{
		noEffect = false;
		return false;
	}
   if(keyboard==2)
	{
	parseunijoy(evnt);
	return false;
	}
	else if(keyboard ==0)
	{
	writeEnglish(evnt);
		return false;
	}
	else {
   // main shabdik parser
	var t = document.getElementById(activeta); // the active text area
	var e = (window.event) ? event.keyCode : evnt.which; // get the keycode


	var char_e = String.fromCharCode(e); // get the character equivalent to this keycode
	
	if(e==96)
	{
	carry = "";
	char_e = "";
	return ;
	}
	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;
		
		
	}

	lastcarry = carry;
	carry += "" + char_e;	 //append the current character pressed to the carry

	bangla = parseShabdikCarry(carry,e); // get the combined equivalent
	tempBangla = parseShabdikCarry(char_e,e); // get the single equivalent
	//document.getElementById("tb").innerHTML=tempBangla;document.getElementById("cb").innerHTML=bangla;
	//alert(t.value.length);


	if(old_len==0) //first character
	{
		// this is first time someone press a character
		//document.getElementById("stat").innerHTML="first char";
		//t.value = bangla;
		//status = "ok";

		insertJointAtCursor(bangla,1);
		parent_char=carry;
		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
			//document.getElementById("stat").innerHTML="No replacement";

			carry ="";
			return;
		}

		else {

			// found one equivalent
			//document.getElementById("stat").innerHTML="Normal replacement";

			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
		//document.getElementById("stat").innerHTML="Joint Replacement";
		//alert("now joint");

		insertJointAtCursor(bangla, old_len);
		parent_char=carry;
		old_len = bangla.length;
		return false;
	}

   }
   }
    function parseunijoyCarry(code,e)
    {
	//this function just returns a bangla equivalent for a given keystroke
	//or a joint one
	//just read the array - if found then return the bangla eq.
	//otherwise return a null value
        if (!unijoy[code])
        {
			if(e==92)
		return 'ত্‍';   // khondo to
		else if (e==124)
		return 'ঃ';     // bishorgho
			return ''; //return a null value
        }
        else
        {
            return ( unijoy[code]);
        }

    }

   function parseShabdikCarry(code,e)
    {
	//this function just returns a bangla equivalent for a given keystroke
	//or a joint one
	//just read the array - if found then return the bangla eq.
	//otherwise return a null value
      // alert(code);
       var len=code.length;
       current_char=code.charAt(len-1);
       var temp=lastcarry+current_char;
       if(len>1)
       {
       prev_char=code.substring(0,len-1);
       //alert(current_char);

       }



        if (!shabdik[code])  // no bangla equivalent for this keystroke

        {

         if(e<91)
			{
			 var temp= String.fromCharCode(e+32);
			var pre_val=String.fromCharCode(e);
			//insertAtCursor(shabdik[temp]);
			carry=pre_val;
			//old_len = 1;
			//return shabdik[temp];
			}
			  return '';
        }

        else
        {
      /*  if(temp.length>1 && shabdik[temp])
				return (shabdik[temp]);
		else if(temp.length>1 && shabdik_v[temp])
				return (shabdik_v[temp]);

				*/
			//alert(carry);
			if(!shabdik_c[carry]&& shabdik_c[prev_char])
			parent_char=prev_char;
			
			
			if(shabdik_v[parent_char]&& shabdik_v[code])
         			{ //alert(parent_char);
			space=false;
			return ( shabdik_v[code]);
			}
		/*	else if(!shabdik_c[parent_char]&& shabdik_v[code])
         			{ //alert(parent_char);
			space=false;
			return ( shabdik_v[code]);
			}*/
        else  if((prev_char==' '||space)&& shabdik_v[current_char])

			{
			space=false;
			return ( shabdik_v[current_char]);
			}

    /*    else if((shabdik_v[prev_char]&&shabdik_v[current_char]))
			return (shabdik_v[current_char]);
	*/
		else if(code=='wr' || code=='oi' || code=='ou')
           	 {
           	 //alert('hi');
			space=false;
			if(shabdik_c[parent_char])
			return shabdik[code];
			else
			return shabdik_v[code];

		}
		else if((shabdik_v[prev_char]&&shabdik_v[code]))

			{space=false;
			return (shabdik_v[code]);
		}

		
        else

           //if(shabdik_c[prev_char]&& shabdik_v[code])
           { //alert(parent_char);
			
			space=false;
            return ( shabdik[code]);  //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 me to meet our need
	 */
	var myField = document.getElementById(activeta);
	if (document.selection) {
		//alert("hello2");
		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 insertJointAtCursor(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 me 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;
}




