
// 	Author: Joju John	
// 	$Date: 2006-09-27 	
<!-- 	Modified: 	 -->
<!-- 	$Date: Aug 7,2007 -->

//expertmal.js

/* TO DO ----------------------------------------

convert malayalam to expert letters
and expert letters to malayalam

input : if start with % , Expert to malayalam
        else malayalam to Expert



All arrays functions start with ex_
-----------TBD--------


------------------------------------------------*/


var ex_mal_letters_expert = {
    "k" : '\u0D15', "K": '\u0D16', "i": '\u0D17', "I":'\u0D18', "U":'\u0D19',
    ";" : '\u0D1A', ":": '\u0D1B', "p": '\u0D1C', "P":'\u0D1D', "}":'\u0D1E',
    "\'" : '\u0d1f', "\"":'\u0d20', "[": '\u0d21', "{":'\u0d22', "C":'\u0d23',
    "l" : '\u0d24', "L": '\u0d25', "o": '\u0d26', "O":'\u0d27', "v":'\u0d28',
    "h" : '\u0d2a', "H": '\u0d2b', "y": '\u0d2c', "Y":'\u0d2d', "c": '\u0d2e',
    "\/" : '\u0d2f', "j": '\u0d30', "J": '\u0d31', "n":'\u0d32', "N": '\u0d33',
    "B" : '\u0d34', "b": '\u0d35', "M": '\u0d36', "<":'\u0d37', 
    "m" : '\u0d38', "u": '\u0d39',

    "D":'\u0d05', "E":'\u0d06', "F":'\u0d07', "R":'\u0d08', "G":'\u0d09', "T":'\u0d0a',
    "Z":'\u0d0e', "S":'\u0d0f', "W":'\u0d10', "~":'\u0d12', "A":'\u0d13', "Q":'\u0d14',
	"+":'\u0d0b', "=":'\u0d43', // ru 
                  "e":'\u0d3e', "f":'\u0d3f', "r":'\u0d40', "g":'\u0d41', "t":'\u0d42',
    "z":'\u0d46', "s":'\u0d47', "w":'\u0d48', "`":'\u0d4a', "a":'\u0d4b', "q":'\u0d57',
    "V":'\u0d28\u0d4d\u200d', "X":'\u0d23\u0d4d\u200d', "\*": '\u0d33\u0d4d\u200d',   //  to get space , add \u00a0'
	">":'\u0d32\u0d4d\u200d', "|":'\u0d30\u0d4d\u200d',  "x":'\u0d02', "_":'\u0d03', // n_, N_, L_, l_, r_, am, aH
    "d":'\u0d4d',
	//"0":'\u0d66',"1":'\u0d67',"2":'\u0d68',"3":'\u0d69',"4":'\u0d6a',"5":'\u0d6b',"6":'\u0d6c',"7":'\u0d6d',"8":'\u0d6e',"9":'\u0d6f',
         "0":'0',"1":'1',"2":'2',"3":'3',"4":'4',"5":'5',"6":'6',"7":'7',"8":'8',"9":'9',
    "#" : "#",  "(" : "(", ")" : ")", 
    "\\" : "",
    "\." : ".",  "," : ",", "-":'-',  
    "\?" :"?"
   
}

var ex_expert = {
    "\u0D15" : 'k', "\u0D16": 'K', "\u0D17": 'i', "\u0D18":'I', "\u0D19":'U',
    "\u0D1A" : ';', "\u0D1B": ':', "\u0D1C": 'p', "\u0D1D":'P', "\u0D1E":'}',
    "\u0d1f" : '\'', "\u0d20":'\"',"\u0d21": '[', "\u0d22":'{', "\u0d23":'C',
    "\u0d24" : 'l', "\u0d25": 'L', "\u0d26": 'o', "\u0d27":'O', "\u0d28":'v',
    "\u0d2a" : 'h', "\u0d2b": 'H', "\u0d2c": 'y', "\u0d2d":'Y', "\u0d2e":'c',
    "\u0d2f" : '\/',"\u0d30": 'j', "\u0d31": 'J', "\u0d32":'n', "\u0d33":'N',
    "\u0d34" : 'B', "\u0d35": 'b', "\u0d36": 'M', "\u0d37":'<', 
    "\u0d38" : 'm', "\u0d39": 'u',

    "\u0d05":'D', "\u0d06":'E', "\u0d07":'F', "\u0d08":'R', "\u0d09":'G', "\u0d0a":'T',
    "\u0d0e":'Z', "\u0d0f":'S', "\u0d10":'W', "\u0d12":'~', "\u0d13":'A', "\u0d14":'Q',
    "\u0d0b":'+', "\u0d43":'=', // ru 
                  "\u0d3e":'e', "\u0d3f":'f', "\u0d40":'r', "\u0d41":'g', "\u0d42":'t',
    "\u0d46":'z', "\u0d47":'s', "\u0d48":'w', "\u0d4a":'`', "\u0d4b":'a', "\u0d57":'q', "\u0d4c":'q', 
    
    ///  take special care while parsing
    "\u0d28\u0d4d\u200d":'V', "\u0d23\u0d4d\u200d":'X', "\u0d33\u0d4d\u200d": '\*',   //  to get space , add \u00a0'
    "\u0d32\u0d4d\u200d":'>', "\u0d30\u0d4d\u200d":'|',  //n_, N_, L_, l_, r_,
    
    "\u0d02":'x', "\u0d03":'_', //  am, aH
    "\u0d4d":'d',
    
    "\u200b":'',
    
    "\u0d66":'0',"\u0d67":'1',"\u0d68":'2',"\u0d69":'3',"\u0d6a":'4',"\u0d6b":'5',"\u0d6c":'6',"\u0d6d":'7',"\u0d6e":'8',"\u0d6f":'9',
    
    "0":'0',"1":'1',"2":'2',"3":'3',"4":'4',"5":'5',"6":'6',"7":'7',"8":'8',"9":'9',

    "!"  : '!', "+"  : '+', "("  : '(', ")"  : ')', 
    "\." : ".",  "," : ",", "-":'-', ";":';', "\'":'\'',"\"":'"', ":" : ':',
    "\?" :"?"
}


var ex_mal_text_out = '';

function ex_output_add(text)
{
	ex_mal_text_out += text;
}
function ex_non_mal_add(text)
{
	ex_output_add(text);
}

function ex_mal_expert_add(exmal)
{
//	ex_output_add(exmal); //debug
    ex_output_add(ex_mal_letters_expert[exmal]);
}

function ex_expert_add(exmal)
{
//	ex_output_add(exmal); //debug
     if ((exmal >='a' && exmal <='z') || (exmal >='A' && exmal <='Z')) {
        ex_output_add(exmal);
     } else {
        ex_output_add(ex_expert[exmal]);
     }
}



function covert_exp_mal(exp_text_in)
{
    ex_mal_text_out= '';
    var expert_mode = 0;
    
    var index = 0;
    var white_space_pattern = "([ \r\n\t\f\.]+)" ; /// working for space and \r
    
    var mal_chillu_pattern = "(\u0d28|\u0d23|\u0d33|\u0d32|\u0d30)(\u0d4d\u200d)?";
    
    while (exp_text_in.length >0 ) {
       index = exp_text_in.search(white_space_pattern);	  
       if(index == 0){
            re_white = new RegExp(white_space_pattern);
    	    var white_array = re_white.exec(exp_text_in);
    	    ex_non_mal_add(white_array[0]); 
    	    exp_text_in = exp_text_in.substring(white_array[0].length); 
    	    
    	    continue;
       }

       if ( exp_text_in.charAt(0) == '%') {
	   if (expert_mode == 0) { expert_mode =1; }else{ expert_mode = 0;}//toggle
	   exp_text_in = exp_text_in.substring(1,exp_text_in.length);//remove # from start
	   // ex_output_add(" #"+expert_mode+"# "); /// debugg
	   
	   continue;
       }
	   
       
       if (expert_mode == 1) {
           // parse expert to malayalam
           
   	   //get next char ; covert it; print it;
   	   var exmal= exp_text_in.charAt(0);
   	   ex_mal_expert_add(exmal);
           exp_text_in = exp_text_in.substring(1,exp_text_in.length); 
   	   continue;
   	} else {
   	   // parse malayalm to expert 
   	
   	   // /// need to parse n_ , N_ etc 
   	   
   	   index = exp_text_in.search(mal_chillu_pattern);
   	   if(index == 0){
   	       re_chillu_exp = new RegExp(mal_chillu_pattern);
   	       var chillu_exp_array = re_chillu_exp.exec(exp_text_in);
               ex_expert_add(chillu_exp_array[0]); 	
	       exp_text_in = exp_text_in.substring(chillu_exp_array[0].length);
    	       continue;
   	       
   	   }
   	   // ex_expert_add("\u0d28\u0d4d\u200d");
   	   var exmal= exp_text_in.charAt(0);
	   ex_expert_add(exmal);
	   exp_text_in = exp_text_in.substring(1,exp_text_in.length); 
   	   continue;
   	}
   	
        exp_text_in = exp_text_in.substring(1,exp_text_in.length); // prevent infinite loop 
	//	   ex_non_mal_add(" remaining :"+exp_text_in );
    }
    return ex_mal_text_out;
}


