// Die folgende Funktion fügt vor dem String s den String p ein (eventuell mehrfach) um eine Gesamtlänge von len zu erreichen
// Falls p nicht Länge 1 hat kann der Ergebnisstring eventuell länger sein als "len".
function prependstr(p, s, len)   {
//       ==========
  var mystr = s;
  while (mystr.length < len) mystr = p + mystr;
  return mystr;
} // prependstr

// Die folgende Funktion gibt das Datum d in der Form "28.Dezember 2003" zurück (Sprache l = "de") oder "December,28th 2003" (l = "en") oder "28a de decembro 2003" (l="eo").
// Aufrufbeispiel: s = formatDate(document.lastModified, "de");

function formatDate(d, l)   {
//       ==========

  var j = d.getYear();

  if (j < 50) j += 2000; else if (j < 200) j += 1900;

  switch (l)   {
  case "de":
    var Monat = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    var s = d.getDate()  + ". " + Monat[d.getMonth()] + " " + j;
  break;
  case "en":
    var Monat = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var t = d.getDate();
    var r;
    switch (t) {
    case 1: r = "st"; break;
    case 2: r = "nd"; break;
    case 3: r = "rd"; break;
    default: r = "th"; break;
    }
    var s = Monat[d.getMonth()] + "," + t  + r + " " + j;
  break;
  case "eo":
    var Monat = new Array("januaro","februaro","marto","aprilo","majo","junio","julio","augusto","septembro","oktobro","novembro","decembro");
    var s = d.getDate()  + "-a de " + Monat[d.getMonth()] + " " + j;
  break;
  case "-":
    var s = j + "-" + prependstr("0",((d.getMonth()+1)+""),2) + "-" + prependstr("0",(d.getDate()+""),2);
  break;
  }
  s += " " + d.getHours() + ":" + prependstr("0",(d.getMinutes()+""),2); // Uhrzeit angeben

  return s;
} // formatDate

// folgende Funktionen ungetestet übernommen aus gf_java.htm: (ah, 2006-04-17)

/* Die folgende Funktion gibt den größten gemeinsamen Teiler
      von zwei ganzen Zahlen 'a' und 'b' zurück.
  */
function ggT(a, b)
//       ===
  {
    var t   // Zwischenspeicher
      ;

    while (b > 0)   {
      t = a % b;
      a = b;
      b = t;
    } /* while */

    return a;
  } /* ggT */
 
  
/* Die folgende Funktion gibt 'a'^'exp' (mod 'n') zurck.
 */
function powermod (a, exp, n)
//       ========
  {
     var p = 1 // (bisherige) Potenz
      ,  Q = a // quadrierte Werte
      ;

    while (exp > 0)   {
      if (0 < (exp & 1))    p = (p * Q) % n;
      if (0 < (exp >>= 1))  Q = (Q * Q) % n;
    }

    return p;

  } /* powermod */

