// This code was written by Tyler Akins and placed in the public domain.
// Feel free to use this code if you so desire.
// It would be nice if you left this header intact.  http://rumkin.com


function encode(str, meth)
{
   var lett = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   var out = "";
   var addHyphen = 0;
   
   var pad = meth.charAt(1) * 1;
   var hyph = meth.charAt(3) * 1;
   
   for (var i = 0; i < str.length; i ++)
   {
      c = str.charAt(i);
      j = lett.indexOf(c.toUpperCase()) + 1;
      if (j < 10 && pad)
      {
         j = "0" + j;
      }
      if (j * 1 > 0)
      {
         if (addHyphen && hyph)
	 {
	    out = out + '-';
	 }
         out = out + j;
	 addHyphen = 1;
      }
      else
      {
         if (addHyphen)
	 {
	    if (c.charCodeAt(0) == 10 || c.charCodeAt(0) == 13)
	    {
	       out += c;
	    }
	    else
	    {
	       out += ' ';
	    }
	 }
	 addHyphen = 0;
      }
   }

   return out;
}


function decode(str, meth)
{
   var lett = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   var num = '0123456789';
   var out = "";
   var was_letter = 0;
   
   var pad = meth.charAt(1) * 1;
   var hyph = meth.charAt(3) * 1;
   
   for (var i = 0; i < str.length; i ++)
   {
      c = str.charAt(i);
      j = num.indexOf(c);
      if (j < 0)
      {
         if (! was_letter || ! hyph || c != "-")
	 {
	    out += c;
	 }
	 was_letter = 0;
      }
      else
      {
         // Do a number lookahead
	 was_letter = j;
	 if (str.length > i + 1)
	 {
	    j = num.indexOf(str.charAt(i + 1));
	    if (j >= 0)
	    {
	       i ++;
	       was_letter = (was_letter * 10) + j;
	    }
	 }
	 if (was_letter >= 1 && was_letter <= 26)
	 {
	    out += lett.charAt(was_letter - 1);
	 }
	 else
	 {
	    out += was_letter;
	    was_letter = 0;
	 }
      }
   }
   
   return out;
}


function upd()
{
   if (IsUnchanged(document.encoder.text) *
       IsUnchanged(document.encoder.encdec) *
       IsUnchanged(document.encoder.method))
   {
      window.setTimeout('upd()', 100);
      return;
   }

   ResizeTextArea(document.encoder.text);

   var e = document.getElementById('output');
   if (document.encoder.text.value == '')
   {
      e.innerHTML = 'Type in a message to see the results!';
   }
   else if (document.encoder.encdec.value * 1 == 1)
   {
      e.innerHTML = HTMLEscape(encode(document.encoder.text.value, 
         document.encoder.method.value));
   }
   else
   {
      e.innerHTML = HTMLEscape(decode(document.encoder.text.value, 
         document.encoder.method.value));
   }
   
   window.setTimeout('upd()', 100);
}


function start_update()
{
   if (! document.getElementById)
   {
      alert('Sorry, you need a newer browser.');
      return;
   }

   if ((! document.Util_Loaded) ||
       (! document.getElementById('output')))
   {
      window.setTimeout('start_update()', 100);
      return;
   }
   upd();
}


window.setTimeout('start_update()', 100);
