
var CodeBase = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@";
CodeBase +=    "~[]{}µ1234567890öÖäÄüÜß°()!%$&\€§^´`²³|/=?<>,.;:-_#+*'";
CodeBase +=    "\n\f\b\r\t\"©®±¹«»¼½¾¿¥£¢Ø‰™œÆŒ";

var hexa = "0123456789ABCDEF";
var cryptOverWert = 0;                  // Speichert Dez. wert von cryptOver
var cryptOver = ' ';                    // Speichert den Dritten Hexwert (256)
var cryptHigh = '';                     // Speichert den Zweiten Hexwert (16)
var cryptLow = '';                      // Speichert den Ersten Hexwert (1)
var zaeler = 0;                         // Zaeler fuer die Schleifen
var Crypt = '';                         // Der Encodestring
var deCrypt = '';                       // Der Decodestring
var Cryptlen = 0;                       // Laenge des Cryptes
var codewert = 0;                       // Speichert der Code Gesamtwert
var codepos = 0;                        // Position im Codestring
var codesequenz = 0;                    // Zahlenwert aus dem Code
var textsequenz = 0;                    // Zahlenwert aus dem Text
var grundcode = 0;                      // Grundwert zum Encoden
var Textlen = 0;                        // Laenge des Textes
var Codelen = 0;                        // Laenge des Codes
var fehler = 0;                         // Fehlerstatus


function encode(Text,Code) {

         zaeler=0;
         Textlen = Text.length-1;
         Codelen = Code.length-1;
         codewert = 0;
         codepos = 0;


     if (Codelen >= 7) {
         for (i=0 ; i<Codelen ; i++) { codewert = codewert + Code.charCodeAt(i); }
     if (codewert > 3500) {
         alert('ACHTUNG\nDer errechnete Codewert Ueberschreitet\ndie Obergrenze !');
         fehler = 1;
     }
         //document.write('#');
         Crypt = Crypt + '#';
         while ( zaeler<=Textlen ) {
               codesequenz = CodeBase.lastIndexOf(Code.charAt(codepos));
               textsequenz = CodeBase.lastIndexOf(Text.charAt(zaeler));
               grundcode = (codesequenz + textsequenz) + Codelen + codewert;
               if (grundcode > 4095) fehler = 1;
               if (grundcode > 255){
                  cryptOver = hexa.charAt(Math.floor(grundcode / 256));
                  grundcode = grundcode - ((hexa.lastIndexOf(cryptOver.charAt('0'))) * 256);}
               cryptHigh = hexa.charAt(Math.floor(grundcode / 16));
               cryptLow = hexa.charAt(Math.floor(grundcode % 16));
               //document.write(cryptHigh + cryptLow + cryptOver + ' ');
               Crypt = Crypt + (cryptHigh + cryptLow + cryptOver + ' ');
               cryptOver = ' '; codepos++;
               if (codepos>Codelen) codepos=0;
               zaeler++;
         }
         //document.write('#');
         Crypt = Crypt + '#';
     } else {  alert('ACHTUNG\nDer Code muss min. 8 Zeichen Umfassen !');
               fehler = 1;
     }
     if (fehler != 0) alert('FEHLER\nDer Erzeugte Code ist nicht Richtig\noder wurde abgebrochen !');
}


function decode(CryptString,Code) {

         zaeler=1;
         Codelen = Code.length -1;
         codewert = 0;
         codepos = 0;
         deCrypt = '';
         Crypt = CryptString;
         Cryptlen = Crypt.length -1;

         for (i=0 ; i<Codelen ; i++) { codewert = codewert + Code.charCodeAt(i); }

         while ( zaeler<=Cryptlen ) {
               cryptOverWert = 0;
               codesequenz = CodeBase.lastIndexOf(Code.charAt(codepos));
               cryptHigh = Crypt.charAt(zaeler);
               cryptLow = Crypt.charAt(zaeler+1);
               //cryptOver = Crypt.charAt(zaeler+2);
               if (Crypt.charAt(zaeler+2) != ' ') {
                  cryptOverWert = (hexa.lastIndexOf(Crypt.charAt(zaeler+2)) * 256);
               } else { cryptOverWert = 0;
               }
               grundcode = (((hexa.lastIndexOf(cryptHigh)*16) + hexa.lastIndexOf(cryptLow))
                           + cryptOverWert) - (codesequenz + codewert + Codelen);
               deCrypt = deCrypt + CodeBase.charAt(grundcode);
               codepos++;
               if (codepos>Codelen) codepos=0;
               zaeler = zaeler + 4;
         }
         Crypt = deCrypt;
}
