// 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

// Morseovka

var MorseIndexes = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",'0',"1","2","3","4","5","6","7","8","9",".",",","?","-","=",":",";","(",")","/",'"',"$","'","\n","_","@","[Error]","[Error]","[Error]","[Error]","[Wait]","[Understood]","[End of message]","[End of work]","[Starting signal]","[Invitation to transmit]","!","!","+","~","#","&","\2044");
var MorseCodes = new Array(".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","-----",".----","..---","...--","....-",".....","-....","--...","---..","----.",".-.-.-","--..--","..--..","-....-","-...-","---...","-.-.-.","-.--.","-.--.-","-..-.",".-..-.","...-..-",".----.",".-.-..","..--.-",".--.-.","......",".......","........",".........",".-...","...-.",".-.-.","...-.-","-.-.-","-.-","---.","-.-.--",".-.-.",".-...","...-.-",". ...","-..-.");

function SwapMorse()
{
   var s = document.encoder.text.value;
   var o = '';
   
   for (var i = 0; i < s.length; i ++)
   {
      var c = s.charAt(i);
      if (c == '-')
         c = '.';
      else if (c == '.')
         c = '-';
      else if (c == "\r")
         c = '';
      o += c;
   }
   
   document.encoder.text.value = o;
}

function Reverse()
{
   var s = document.encoder.text.value;
   var i = s.length - 1, o = '';
   
   while (i >= 0)
   {
      var c = s.charAt(i);
      if (c != "\r")
         o += c;
      i --;
   }
   
   document.encoder.text.value = o;
}

function getIndex(arr, str)
{
   var i = 0;
   while (arr[i])
   {
      if (arr[i] == str)
      {
         return i;
      }
      i ++;
   }
   return -1;
}

function encode(str)
{
   var addSpace = 0;
   var out = "";
   for (var i = 0; i < str.length; i ++)
   {
      var c = str.charAt(i);
      var j = getIndex(MorseIndexes, c.toUpperCase());
      if (j >= 0)
      {
         if (addSpace)
	 {
	    out += ' / ';
	 }
         out += MorseCodes[j];
	 addSpace = 1;
      }
      else
      {
         if (c.charCodeAt(0) == 10 || c.charCodeAt(0) == 13)
	 {
	    out += c;
	 }
	 else if (addSpace)
	 {
	    out += ' // ';
	 }
	 addSpace = 0;
      }
   }
   return out;
}


function decode(str)
{
   var out = "";
   var addSpace = 0;
   
   // Reformat string, trying to change odd things into dots
   // and hyphens
   tmp = "";
   for (var i = 0; i < str.length; i ++)
   {
      if (str.charCodeAt(i) < 27)
      {
         tmp += ' ' + str.charAt(i) + ' ';
      }
      else if (str.charCodeAt(i) == 8211 || str.charCodeAt(i) == 8212 ||
               str.charAt(i) == '_')
      {
         // Compensate for weird hyphens
         tmp += '-';
      }
      else if (str.charCodeAt(i) == 8226 || str.charCodeAt(i) == 8901)
      {
         // Compensate for odd dots
         tmp += '.';
      }
      else
      {
         tmp += str.charAt(i);
      }
   }
  
   str = tmp.split(' ');
   for (var i = 0; i < str.length; i ++)
   {
      var idx = getIndex(MorseCodes, str[i]);
      
      if (idx >= 0)
      {
         out += MorseIndexes[idx];
	 addSpace = 1;
      }
      else
      {
         if (str[i].charCodeAt(0) == 10 || str[i].charCodeAt(0) == 13)
	 {
	    out += str[i];
     	 }
	 else if (addSpace)
	 {
	    out += ' ';
	 }
	 addSpace = 0;
      }
   }
   return out;
}


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

   var e = document.getElementById('morse_output');
 
   if (document.encoder.text.value == '')
   {
      e.innerHTML = 'Vaši zprávu zadejte do pole výše a zde se zobrazí zašifrovaný text.';
   }
   else if (document.encoder.encdec.value * 1 == 1)
   {
      e.innerHTML = HTMLEscape(encode(document.encoder.text.value));
   }
   else
   {
      e.innerHTML = HTMLEscape(decode(document.encoder.text.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('morse_output')))
   {
      window.setTimeout('start_update()', 100);
      return;
   }
   upd();
}

function SetMorse(m)
{
   document.encoder.encdec.value = "-1";
   document.encoder.text.value = m;
   return false;
}


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

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

// Caesarova šifra

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

   if ((! document.Caesar_Loaded) || (! document.Util_Loaded) ||
       (! document.getElementById('caesar_output')))
   {
      window.setTimeout('start_update()', 100);
      return;
   }
   upd_caesar();
}


function upd_caesar()
{
   if (IsUnchanged(document.caesar_encoder.N) *
       IsUnchanged(document.caesar_encoder.caesar_text))
   {
      window.setTimeout('upd_caesar()', 100);
      return;
   }
   
   var e = document.getElementById('caesar_output');

   if (document.caesar_encoder.caesar_text.value == '')
   {
      e.innerHTML = 'Vaši zprávu zadejte do pole výše a zde se zobrazí zašifrovaný text.';
   }
   else
   {
      e.innerHTML = SwapSpaces(HTMLEscape(Caesar(1, document.caesar_encoder.caesar_text.value, 
         document.caesar_encoder.N.value * 1)));
   }
   
   window.setTimeout('upd_caesar()', 100);
}

function insert_alphabet()
{
   document.caesar_encoder.caesar_text.value = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}

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

// 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

// Čísla místo písmen

function encode_cisla(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 upd_cisla()
{
   if (IsUnchanged(document.cisla_encoder.cisla_text) *
       IsUnchanged(document.cisla_encoder.cisla_encdec) *
       IsUnchanged(document.cisla_encoder.method))
   {
      window.setTimeout('upd_cisla()', 100);
      return;
   }

   ResizeTextArea(document.cisla_encoder.cisla_text);

   var e = document.getElementById('cisla_output');
   if (document.cisla_encoder.cisla_text.value == '')
   {
      e.innerHTML = 'Vaši zprávu zadejte do pole výše a zde se zobrazí zašifrovaný text.';
   }
   else if (document.cisla_encoder.cisla_encdec.value * 1 == 1)
   {
      e.innerHTML = HTMLEscape(encode_cisla(document.cisla_encoder.cisla_text.value, 
         document.cisla_encoder.method.value));
   }
   else
   {
      e.innerHTML = HTMLEscape(decode_cisla(document.cisla_encoder.cisla_text.value, 
         document.cisla_encoder.method.value));
   }
   
   window.setTimeout('upd_cisla()', 100);
}


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

   if ((! document.Util_Loaded) ||
       (! document.getElementById('cisla_output')))
   {
      window.setTimeout('start_update_cisla()', 100);
      return;
   }
   upd_cisla();
}


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

