// Global variables
i = 0;
initial = true;
diacritic = "";
srcText = "";
len = 0;
imageDoc = null;
ns4 = (document.layers)? true : false;
ie4 = (document.all)? true : false;

// Create the image table
imageTable = new Array();
imageTable['a'] = "az";
imageTable['A'] = "az";
imageTable['b'] = "buki";
imageTable['v'] = "vedi";
imageTable['g'] = "glagol";
imageTable['d'] = "dobro";
imageTable['e'] = "est";
imageTable['E'] = "est-2";
imageTable['Z'] = "zelo";
imageTable['z'] = "zemlja";
imageTable['g'] = "glagol";
imageTable['i'] = "izhe";
imageTable['I'] = "i";
imageTable['k'] = "kakw";
imageTable['K'] = "kakw";
imageTable['l'] = "ljudi";
imageTable['m'] = "myslete";
imageTable['n'] = "nash";
imageTable['o'] = "on-2";
imageTable['O'] = "on";
imageTable['w'] = "omega";
imageTable['p'] = "pokoj";
imageTable['P'] = "pokoj";
imageTable['r'] = "rcy";
imageTable['s'] = "slovo";
imageTable['S'] = "slovo";
imageTable['t'] = "tverdo";
imageTable['u'] = "uk-2";
imageTable['U'] = "uk";
imageTable['f'] = "fert";
imageTable['x'] = "xer";
imageTable['c'] = "cy";
imageTable['"'] = "jer-hard";
imageTable['y'] = "jery";
imageTable['Y'] = "jery";
imageTable['\''] = "jer-soft";
imageTable['F'] = "fita";
imageTable['V'] = "izhica";
imageTable[':'] = "dvoetochie";
imageTable['.'] = "tochka";
imageTable['('] = "open-vmjestitelnyj";
imageTable[')'] = "close-vmjestitelnyj";
imageTable[';'] = "voprositelnyj";
imageTable[','] = "zapjataja";
imageTable['!'] = "udivitelnyj";
imageTable['-'] = "dash";

function imageWrite(image)
{
   var text;

   text = '<img src="/slavonic/alphabet/images/'+image+diacritic+'.gif" ' +
           'align="middle">';
   srcText += '&lt;img src="/slavonic/alphabet/images/' + image + 
              diacritic + '.gif" align="middle"&gt;';
   layerWrite(imageDoc, text);
}

function layerWrite(doc, text)
{
   if (ns4)
      doc.write(text);
   else if (ie4)
   {
      if (doc.innerHTML || doc.innerHTML == "")
         doc.innerHTML += text;
      else
         doc.write(text);
   }
   else
      document.write(text);
}

function check_initial()
{
   if (initial)
   {
      switch (diacritic)
      {
      case "-oksia":
	 diacritic = "-iso";
	 break;
      case "-varia":
	 diacritic = "-apostrof";
	 break;
      case "-kamora":
	 alert("Kamora not allowed in initial position.");
	 break;
      default:
	 diacritic = "-zvatelco";
	 break;
      }
      return true;
   }
   return false;
}

function check_simple_letters(s)
{
   c = s.charAt(i);
   switch (c)
   {
   case 'a':
   case 'E':
   case 'I':
   case 'O':
   case 'U':
   case 'y':
   case 'V':
      check_initial();
      imageWrite(imageTable[c]);
      i++;
      return true;
      break;
   case 'b':
   case 'v':
   case 'g':
   case 'd':
   case 'Z':
   case 'K':
   case 'l':
   case 'm':
   case 'n':
   case 'P':
   case 'r':
   case 'S':
   case 't':
   case 'f':
   case 'x':
   case 'F':
   case '"':
   case '\'':
      imageWrite(imageTable[c]);
      i++;
      return true;
      break;
   case 'e':
      if (check_initial())
	 imageWrite("est-2");
      else
	 imageWrite("est");
      i++;
      return true;
      break;
   case 'o':
      if (check_initial())
	 imageWrite("on");
      else
	 imageWrite("on-2");
      i++;
      return true;
      break;
   case 'u':
      if (check_initial())
	 imageWrite("uk");
      else
	 imageWrite("uk-2");
      i++;
      return true;
      break;
   default:
      return false;
      break;
   }
}

function is_vowel(s)
{
   switch(s.charAt(i))
   {
   case 'a':
   case 'e':
   case 'E':
   case 'i':
   case 'I':
   case 'j':
   case 'o':
   case 'O':
   case 'u':
   case 'U':
   case 'y':
   case 'w':
   case '/':  // Note that accents can only occur before a vowel.  If the
   case '`':  // user enters an accent before a consonant, then the word is
   case '\\': // invalid anyway, and I don't care if I get that case wrong.
   case '^':
      return true;
      break;
   default:
      return false;
      break;
   }
}

function check_punctuation(s)
{
   c = s.charAt(i);
   switch (c)
   {
   case ',':
   case '.':
   case ':':
   case '(':
   case ')':
   case ';':
   case '!':
      imageWrite(imageTable[c]);
      i++;
      initial = true;
      return true;
      break;
   case '-':
      imageWrite(imageTable[c]);
      i++;
      return true;
      break;
   default:
      return false;
   }
}

function check_zemlja(s)
{
   if (s.charAt(i) == 'z')
   {
      i++;
      if (i >= len)
	 imageWrite("zemlja");
      else
      {
	 if (s.charAt(i) == 'h')
	 {
	    imageWrite("zhivete");
            i++;
         }
         else
	 imageWrite("zemlja");
      }
      return true;
   }
   else
      return false;
}

function check_i(s)
{
   if (s.charAt(i) == 'i')
   {
      i++;
      check_initial();
      if (i >= len)
	 imageWrite("izhe");
      else if (is_vowel(s))
	 imageWrite(imageTable['I']);
      else
	 imageWrite("izhe");
      return true;
   }
   else
      return false;
}

function check_j(s)
{
   if (s.charAt(i) == 'j')
   {
      i++;
      check_initial();
      if (i >= len)
         imageWrite("izhe-kratkaja");
      else
      {
         switch (s.charAt(i))
         {
         case 'e':
            imageWrite("jat");
            i++;
            break;
         case 'u':
            imageWrite("ju");
            i++;
            break;
         case 'a':
	    if (initial)
	    {
	       if (i+1 >= len && diacritic == "-apostrof")
		  imageWrite("jus-malyj"); // handle pl. acc. pers. pronouns
	       else
		  imageWrite("ja");
	    }
	    else
	       imageWrite("jus-malyj");
            i++;
            break;
         default:
            imageWrite("izhe-kratkaja");
            break;
         }
      }
      return true;
   }
   else
      return false;
}

function check_kakw(s)
{
   if (s.charAt(i) == 'k')
   {
      i++;
      if (i >= len)
	 imageWrite("kakw");
      else
      {
	 if (s.charAt(i) == 's')
	 {
	    i++;
            if (i >= len)
	       imageWrite("ksi");
	    else
	    {
	       if (s.charAt(i) == 'j')
	       {
                  i++;
		  if (i >= len)
		  {
		     imageWrite("ksi");
		     imageWrite("izhe-kratkaja");
		  }
		  else
		  {
		     if (s.charAt(i) == 'a')
		     {
		        i++;
			if (i >= len)
			{
			   imageWrite("kakw");
			   imageWrite("slovo");
			   imageWrite("jus-malyj");
			}
			else
			{
			   imageWrite("ksi");
			   imageWrite("jus-malyj");
			}
		     }
		     else
		     {
		        imageWrite("ksi");
			i--;
		     }
		  }
	       }
	       else
		 imageWrite("ksi");
	    }
         }
         else
	 imageWrite("kakw");
      }
      return true;
   }
   else
     return false;
}

function check_w(s)
{
   if (s.charAt(i) == 'w')
   {
      i++;
      if (i >= len)
      {
	 check_initial();
         imageWrite("omega");
      }
      else
      {
         c = s.charAt(i);
         if (c == 't')
         {
            i++
            if (initial)
               imageWrite("wt");
            else
            {
               imageWrite("omega");
               diacritic = "";
               imageWrite("tverdo");
            }
         }
         else
	 {
	    check_initial();
            imageWrite("omega");
	 }
      }
      return true;
   }
   else
      return false;
}

function check_pokoj(s)
{
   if (s.charAt(i) == 'p')
   {
      i++;
      if (i >= len)
	 imageWrite("pokoj");
      else
      {
	 if (s.charAt(i) == 's')
	 {
	    imageWrite("psi");
            i++;
         }
         else
	 imageWrite("pokoj");
      }
      return true;
   }
   else
      return false;
}

function check_slovo(s)
{
   if (s.charAt(i) == 's')
   {
      i++;
      if (i >= len)
	 imageWrite("slovo");
      else
      {
	 if (s.charAt(i) == 'h')
	 {
	    i++;
            if (i >= len)
	       imageWrite("sha");
	    else
	    {
	       if (s.charAt(i) == 'c')
	       {
                  i++;
		  if (i >= len)
		  {
		     imageWrite("sha");
		     imageWrite("cy");
		  }
		  else
		  {
		     if (s.charAt(i) == 'h')
		     {
			imageWrite("shcha");
			i++;
		     }
		     else
		     {
		        imageWrite("sha");
			imageWrite("cy");
		     }
		  }
	       }
	       else
		 imageWrite("sha");
	    }
         }
         else
	 imageWrite("slovo");
      }
      return true;
   }
   else
      return false;
}

function check_cy(s)
{
   if (s.charAt(i) == 'c')
   {
      i++;
      if (i >= len)
	 imageWrite("cy");
      else
      {
	 if (s.charAt(i) == 'h')
	 {
	    imageWrite("cherv");
            i++;
         }
         else
	 imageWrite("cy");
      }
      return true;
   }
   else
      return false;
}

function untransliterate_sa(s, layer)
{
   if (ns4)
      return untransliterate(s, document.layers[layer].document, true);
   else if (ie4)
      return untransliterate(s, document.all[layer], true);
   else
      return untransliterate(s, document, true);
}


function untransliterate(s, doc, standalone)
{
   if (standalone)
   {
      if (ns4)
	 doc.open();
      else if (ie4)
	 doc.innerHTML = "";
   }

   len = s.length;
   i = 0;
   diacritic = "";
   srcText = "";
   initial = true;
   imageDoc = doc;

   while (i < len)
   {
      if (check_simple_letters(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_i(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_w(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_j(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_zemlja(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_cy(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_pokoj(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_slovo(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (check_kakw(s))
      {
	 initial = false;
         diacritic = "";
      }
      else if (s.charAt(i) == '=')
      {
	 i++;
	 initial = false;
      }
      else if (s.charAt(i) == '/')
      {
	 i++;
         diacritic = "-oksia";
      }
      else if (s.charAt(i) == '`' || s.charAt(i) == '\\')
      {
	 i++;
         diacritic = "-varia";
      }
      else if (s.charAt(i) == '^')
      {
	 i++;
         diacritic = "-kamora";
      }
      else if (s.charAt(i) == ' ')
      {
	 i++;
	 imageWrite("space");
	 initial = true;
      }
      else if (check_punctuation(s))
      {
	 diacritic = "";
      }
      else
	 i++; // It's an unrecognized character; ignore it.
   }

   if (standalone && document.untransliterator.showSource.checked)
   {
      layerWrite(doc, "<p>");
      layerWrite(doc, "<hr>");
      layerWrite(doc, srcText);
   }
   if (standalone && ns4)
   {
      doc.close();
   }
   return false;
}
