var map = new Array (
// LOCALIZE THIS
new Array ("~N","2329,","2329,2381,","Consonant","PreFix",""),
new Array ("z","2395,","2395,2381,","Consonant","PreFix",""),
new Array ("y","2351,","2351,2381,","Consonant","PreFix",""),
new Array ("x","2325,2381,2359,","2325,2381,2359,2381,","Consonant","PreFix",""),
new Array ("v","2357,","2357,2381,","Consonant","PreFix",""),
new Array ("u","2313,","2369,","Vowel","PostFix",""),
new Array ("th","2341,","2341,2381,","Consonant","PreFix",""),
new Array ("t","2340,","2340,2381,","Consonant","PreFix",""),
new Array ("sh","2358,","2358,2381,","Consonant","PreFix",""),
new Array ("s","2360,","2360,2381,","Consonant","PreFix",""),
new Array ("r","2352,","2352,2381,","Consonant","PreFix",""),
new Array ("q","2392,","2392,2381,","Consonant","PreFix",""),
new Array ("ph","2347,","2347,2381,","Consonant","PreFix",""),
new Array ("p","2346,","2346,2381,","Consonant","PreFix",""),
new Array ("o","2323,","2379,","Vowel","PostFix",""),
new Array ("n","2344,","2344,2381,","Consonant","PreFix",""),
new Array ("m","2350,","2350,2381,","Consonant","PreFix",""),
new Array ("l","2354,","2354,2381,","Consonant","PreFix",""),
new Array ("kh","2326,","2326,2381,","Consonant","PreFix",""),
new Array ("k","2325,","2325,2381,","Consonant","PreFix",""),
new Array ("jh","2333,","2333,2381,","Consonant","PreFix",""),
new Array ("j","2332,","2332,2381,","Consonant","PreFix",""),
new Array ("i","2311,","2367,","Vowel","PostFix",""),
new Array ("h","2361,","2361,2381,","Consonant","PreFix",""),
new Array ("gh","2328,","2328,2381,","Consonant","PreFix",""),
new Array ("g","2327,","2327,2381,","Consonant","PreFix",""),
new Array ("f","2398,","2398,2381,","Consonant","PreFix",""),
new Array ("e","2319,","2375,","Vowel","PostFix",""),
new Array ("dny","2332,2381,2334,","2332,2381,2334,2381,","Consonant","PreFix",""),
new Array ("dh","2343,","2343,2381,","Consonant","PreFix",""),
new Array ("d","2342,","2342,2381,","Consonant","PreFix",""),
new Array ("chh","2331,","2331,2381,","Consonant","PreFix",""),
new Array ("ch","2330,","2330,2381,","Consonant","PreFix",""),
new Array ("bh","2349,","2349,2381,","Consonant","PreFix",""),
new Array ("b","2348,","2348,2381,","Consonant","PreFix",""),
new Array ("au","2324,","2380,","Vowel","PostFix",""),
new Array ("ai","2320,","2376,","Vowel","PostFix",""),
new Array ("a.c.n","2309,2305,","2305,","Vowel","PostFix",""),
new Array ("a.c","2317,","2373,","Vowel","PostFix",""),
new Array ("a","2309,","","Vowel","PostFix",""),
//new Array ("_","-","-","StandAlone","None",""),
new Array ("||","2405,","2405,","Symbol","None",""),
new Array ("|","2404,","2404,","Symbol","None",""),
//new Array ("]","]","]","Symbol","None",""),
//new Array (")",")",")","Symbol","None",""),
//new Array ("[","[","[","Symbol","None",""),
//new Array ("new Array (","(","(","Symbol","None",""),
//new Array ("?","?","?","Symbol","None",""),
//new Array ("/","/","/","Symbol","None",""),
new Array (".n","2306,","2306,","Vowel","PostFix",""),
new Array (".h","2381,","2381,","Vowel","PostFix",""),
new Array (".c.n","2305,","2305,","Vowel","PostFix",""),
new Array (".c","2373,","2373,","Vowel","PostFix",""),
new Array (".a","2365,","2365,","Vowel","PostFix",""),
new Array (".Dh","2397,","2397,2381,","Consonant","PreFix",""),
new Array (".D","2396,","2396,2381,","Consonant","PreFix",""),
new Array ("Y","2334,","2334,2381,","Consonant","PreFix",""),
new Array ("U","2314,","2370,","Vowel","PostFix",""),
new Array ("Th","2336,","2336,2381,","Consonant","PreFix",""),
new Array ("T","2335,","2335,2381,","Consonant","PreFix",""),
new Array ("Sh","2359,","2359,2381,","Consonant","PreFix",""),
new Array ("R^i","2315,","2371,","Vowel","PostFix",""),
new Array ("R^I","2400,","2372,","Vowel","PostFix",""),
//new Array ("R","2352,","2352,2381,8205,","Consonant","PreFix",""),
new Array ("R","2353,","2353,2381,","Consonant","PreFix",""),
new Array ("N^","2329,","2329,2381,","Consonant","PreFix",""),
new Array ("N","2339,","2339,2381,","Consonant","PreFix",""),
new Array ("L^i","2316,","2402,","Vowel","PostFix",""),
new Array ("L^I","2401,","2403,","Vowel","PostFix",""),
new Array ("L","2355,","2355,2381,","Consonant","PreFix",""),
new Array ("Kh","2393,","2393,2381,","Consonant","PreFix",""),
new Array ("I","2312,","2368,","Vowel","PostFix",""),
new Array ("H","2307,","2307,","Vowel","PostFix",""),
new Array ("GY","2332,2381,2334,","2332,2381,2334,2381,","Consonant","PreFix",""),
new Array ("G","2394,","2394,2381,","Consonant","PreFix",""),
new Array ("Dh","2338,","2338,2381,","Consonant","PreFix",""),
new Array ("D","2337,","2337,2381,","Consonant","PreFix",""),
new Array ("A.c.n","2310,2305,","2366,2305,","Vowel","PostFix",""),
new Array ("A.c","2321,","2377,","Vowel","PostFix",""),
new Array ("AU.n","2384,","2384,","Consonant","None",""),
new Array ("A","2310,","2366,","Vowel","PostFix",""),
new Array (".s","8204,","8204,","Symbol","None",""),
new Array (".j","8205,","8205,","Consonant","None",""),
new Array (".l","814,","814,","Symbol","None",""),
new Array (".g","817,","817,","Symbol","None",""),
new Array ("9","2415,","2415,","Symbol","None",""),
new Array ("8","2414,","2414,","Symbol","None",""),
new Array ("7","2413,","2413,","Symbol","None",""),
new Array ("6","2412,","2412,","Symbol","None",""),
new Array ("5","2411,","2411,","Symbol","None",""),
new Array ("4","2410,","2410,","Symbol","None",""),
new Array ("3","2409,","2409,","Symbol","None",""),
new Array ("2","2408,","2408,","Symbol","None",""),
new Array ("1","2407,","2407,","Symbol","None",""),
new Array ("0","2406,","2406,","Symbol","None",""),
new Array ("!", "33,", "33,", "Symbol", "None", ""),
new Array ("\"", "34,", "34,", "Symbol", "None", ""),
new Array ("#", "35,", "35,", "Symbol", "None", ""),
new Array ("$", "36,", "36,", "Symbol", "None", ""),
new Array ("%", "37,", "37,", "Symbol", "None", ""),
new Array ("&", "38,", "38,", "Symbol", "None", ""),
new Array ("'", "39,", "39,", "Symbol", "None", ""),
new Array ("(", "40,", "40,", "Symbol", "None", ""),
new Array (")", "41,", "41,", "Symbol", "None", ""),
new Array ("*", "42,", "42,", "Symbol", "None", ""),
new Array ("+", "43,", "43,", "Symbol", "None", ""),
new Array (",", "44,", "44,", "Symbol", "None", ""),
new Array ("-", "45,", "45,", "Symbol", "None", ""),
new Array (".", "46,", "46,", "Symbol", "None", ""),
new Array ("/", "47,", "47,", "Symbol", "None", ""),
new Array (":","2307,","2307,","Vowel","PostFix",""),
new Array (";", "59,", "59,", "Symbol", "None", ""),
new Array ("<", "60,", "60,", "Symbol", "None", ""),
new Array ("=", "61,", "61,", "Symbol", "None", ""),
new Array (">", "62,", "62,", "Symbol", "None", ""),
new Array ("?", "63,", "63,", "Symbol", "None", ""),
new Array ("@", "64,", "64,", "Symbol", "None", ""),
new Array ("[", "91,", "91,", "Symbol", "None", ""),
new Array ("\\", "92,", "92,", "Symbol", "None", ""),
new Array ("]", "93,", "93,", "Symbol", "None", ""),
new Array ("^", "94,", "94,", "Symbol", "None", ""),
new Array ("_", "95,", "95,", "Symbol", "None", ""),
new Array ("`", "96,", "96,", "Symbol", "None", ""),
new Array ("{", "123,", "123,", "Symbol", "None", ""),
new Array ("}", "125,", "125,", "Symbol", "None", ""),
new Array ("~", "126,", "126,", "Symbol", "None", "")



//new Array ( "_MAPEND" )
// END OF MATERIAL TO LOCALIZE
);

var maplen = map.length;


var MAPENG = 0;
var MAPCOMP = 1;
var MAPHALF = 2;
var MAPGROUP = 3;
var MAPSIDE = 4;
var MAPSPACER = 5;

var rafpending = 0;
var found = 0;
var origword = "";
var appendstr ="";
var mapready = 0;
var mapeng = "";
var mapcomp = "";
var maphalf = "";
var mapgroup = "";
var mapside = "";
var mapspacer = "";
var lastmapeng = "";
var lastmapcomp = "";
var lastmaphalf = "";
var lastmapgroup = "";
var lastmapside = "";
var lastmapspacer = "";
var retstring = "";
var pendcons = "";
var dquot = 0;
var squot = 0;
var conslen=0;

var lastDevString = "";
var lastRomString = "";
var currDevWord = "";
var currpos = 0;




var isUnicode = true;



function translitword (inword)
{
 var transword ="";
    origword = standardize (inword );
    rafpending = 0;

    while ( origword != "" )
    {
      found = 0;

      if ( rafpending >= 2 )
      {
	origword = ".r"+origword;
	rafpending = 0;
      }

      get_map();

      if ( found != 1 )
      {
	origword = origword.substring(1);
      }
      else
      {
	process_map();

	if ( rafpending != 2 )
	{
	  origword = origword.substring( mapeng.length);
	}
      }

      if ( mapready == 1 )
      {
	transword += retstring;
	mapready = 0;
	flush_last();

      }
      if ( ( origword.length ) == 0 )
      {
	if ( rafpending != 0 )
	{
	  origword = ".r";
	}
      }
    }
    transword += pendcons;
    flush_last();
    wipe_last_map();
    if (transword.length == 0 )
    {
       transword = " ";
    }
	//alert(transword);
    return transword;
}

function get_map ()
{
  found = 0;

  for (i = 0; i < maplen; i++)
  {
    if (startsWith( origword, map[i][MAPENG]) )
    {
      found = 1;
      mapeng = map[i][MAPENG];
      mapcomp = map[i][MAPCOMP];
      maphalf = map[i][MAPHALF];
      mapgroup   = map[i][MAPGROUP];
      mapside   = map[i][MAPSIDE];
      mapspacer = map[i][MAPSPACER];

      found = 1;
      break;
    }
  }
}

function flush_last ()
{
   appendstr ="";
   pendcons = "";
}

function keep_last_map ()
{
   lastmapeng = mapeng;
   lastmapcomp = mapcomp;
   lastmaphalf = maphalf;
   lastmapgroup = mapgroup;
   lastmapside = mapside;
   lastmapspacer = mapspacer;
}

function wipe_last_map ()
{
   lastmapeng = "";
   lastmapcomp = "";
   lastmaphalf = "";
   lastmapgroup = "";
   lastmapside = "";
   lastmapspacer = "";
}


function process_map ()
{
  var rquot = "";
  var choplastlen = 0;
  var lastconlen = 0;


  if (startsWith( mapgroup, "Dquote" ))
  {
    if ( dquot == 0 )
    {
      rquot = maphalf;
      dquot = 1;
    }
    else
    {
      rquot = lastmapspacer+mapcomp;
      dquot = 0;
    }
    retstring = pendcons+rquot;
    flush_last ();
    wipe_last_map ();
    mapready = 1;
  }

  else if (startsWith (mapgroup, "Squote"))
  {
    if ( squot == 0 )
    {
      rquot = maphalf;
      squot = 1;
    }
    else
    {
      rquot = lastmapspacer+mapcomp;
      squot = 0;
    }
    retstring = pendcons+rquot;
    flush_last();
    wipe_last_map();
    mapready = 1;
  }

  else if (startsWith ( mapgroup, "Symbol"))
  {
    if ( rafpending == 1 )
    {
       rafpending = 2;
    }
    else
    {
    retstring = pendcons+lastmapspacer+mapcomp;
    flush_last();
    wipe_last_map();
    mapready = 1;
    }

  }

  else if (startsWith ( mapgroup, "StandAlone"))
  {
    if ( lastmapeng == "r" && !isUnicode )
    {
      if ( rafpending == 0 )
      {
	rafpending = 3;
	flush_last();
      }
    }
    retstring = pendcons+lastmapspacer+mapcomp;
    flush_last();
    wipe_last_map();
    mapready = 1;
  }
  else if (startsWith( mapgroup, "Consonant"))
  {
    if ( lastmapeng == "r" && !isUnicode )
    {
      if ( rafpending == 0 )
      {
	rafpending = 1;
	flush_last();
      }
    }

    if ( pendcons.length == 0 )
    {
      pendcons += mapcomp;
      keep_last_map();
    }
    else
    {
       choplastlen = lastmapcomp.length;
       lastconlen = pendcons.length;
       pendcons = pendcons.substring ( 0, lastconlen-choplastlen);
       pendcons += lastmaphalf+mapcomp;
       keep_last_map();
    }
    if ( origword == mapeng )
    {
      origword += "a";
    }

  }
  else if (startsWith( mapgroup, "Vowel"))
  {

    if ( rafpending == 1 )
    {
       rafpending = 2;
    }
    else
    {

      if ( pendcons.length == 0 )
      {
	retstring = mapcomp;
      }
      else if ( startsWith ( mapside, "APre1In"))
      {
	 retstring = maphalf.substring(0,1)
                     +pendcons
                     +maphalf.substring(1)
                     +lastmapspacer;
	 flush_last();
      }
      else if ( startsWith ( mapside, "In1Post"))
      {
         conslen = pendcons.length;
         if ( conslen > 1)
         {
	    retstring = pendcons.substring(0,conslen-1)
                        +maphalf.substring(0,1)
                        +pendcons.substring(conslen-1)
                        +lastmapspacer
                        +maphalf.substring(1);
         }
         else
         {
	    retstring = pendcons
                        +maphalf.substring(0,1)
                        +lastmapspacer
                        +maphalf.substring(1);
         }
	 flush_last();
      }
      else if ( startsWith( mapside, "Pre"))
      {
	 retstring = maphalf+pendcons+lastmapspacer;
	 flush_last();
      }
      else if ( startsWith( mapside, "In" ))
      {
	 retstring = pendcons+maphalf+lastmapspacer;
	 flush_last();
      }
      else if ( startsWith( mapside, "Post"))
      {
	 retstring = pendcons+lastmapspacer+maphalf;
	 flush_last();
      }
      else
      {
	 retstring = pendcons+lastmapspacer+maphalf;
	 flush_last();
      }
      mapready = 1;
      wipe_last_map();
    }
  }
}

function standardize ( instring)
{
   var strbuf = "";
   var i = 0;
   var inlen = instring.length;
   while ( i < inlen )
   {
   var iadd = 1;
   var srchStr = instring.substring ( i );
      if ( startsWith (srchStr,"M") )
      { iadd = 1; strbuf += ".n"; }
      else if ( startsWith (srchStr,".N") )
      { iadd = 2; strbuf += ".c.n"; }
      else if ( startsWith (srchStr,"E") )
      { iadd = 1; strbuf += "a.c"; }
      else if ( startsWith (srchStr,"O") )
      { iadd = 1; strbuf += "A.c"; }
      else if ( startsWith (srchStr,"eee") )
      { iadd = 3; strbuf += "eI"; }
      else if ( startsWith (srchStr,"ii") )
      { iadd = 2; strbuf += "I"; }
      else if ( startsWith (srchStr,"ee") )
      { iadd = 2; strbuf += "I"; }
      else if ( startsWith (srchStr,"ooo") )
      { iadd = 3; strbuf += "oU"; }
      else if ( startsWith (srchStr,"uu") )
      { iadd = 2; strbuf += "U"; }
      else if ( startsWith (srchStr,"oo") )
      { iadd = 2; strbuf += "U"; }
      else if ( startsWith (srchStr,"aaa") )
      { iadd = 3; strbuf += "Aa"; }
      else if ( startsWith (srchStr,"aa") )
      { iadd = 2; strbuf += "A"; }
      else if ( startsWith (srchStr,"Ru") )
      { iadd = 2; strbuf += "R^i"; }
      else if ( startsWith (srchStr,"Ri") )
      { iadd = 2; strbuf += "R^i"; }
      else if ( startsWith (srchStr,"shh") )
      { iadd = 3; strbuf += "Sh"; }
      else
      { iadd = 1; strbuf += instring.substring (i, i+iadd); }
      i += iadd;
   }
   return strbuf;
}

function startsWith ( srcStr, findStr )
{
if ( srcStr.substring(0, findStr.length) == findStr )
{
return true;
}
return false;
}
