#!/usr/local/gnu/bin/perl

require "./veranstaltungen.ph";

# Dateinamen für HTML-Dateien
$FILE_DE_RECENT   = "veranstalt/aktuell.php";
$FILE_DE_ROOM     = "veranstalt/raum.php";
$FILE_DE_DOZENTEN = "veranstalt/dozenten.php";
$FILE_DE_SEMESTER = "veranstalt/semester.php";
$FILE_DE_THEMEN   = "veranstalt/themen.php";
$FILE_DE_SEARCH   = "veranstalt/vorlesungen.php";
$FILE_EN_RECENT   = "veranstalt/aktuellE.php";
$FILE_EN_ROOM     = "veranstalt/raumE.php";
$FILE_EN_DOZENTEN = "veranstalt/dozentenE.php";
$FILE_EN_SEMESTER = "veranstalt/semesterE.php";
$FILE_EN_THEMEN   = "veranstalt/themenE.php";
$FILE_EN_SEARCH   = "veranstalt/vorlesungenE.php";

$URL_DE_RECENT    = "aktuell.php";
$URL_DE_ROOM      = "raum.php";
$URL_DE_DOZENTEN  = "dozenten.php";
$URL_DE_SEMESTER  = "semester.php";
$URL_DE_THEMEN    = "themen.php";
$URL_DE_SEARCH    = "/Search/vorlesungen.php.de";
$URL_EN_RECENT    = "aktuellE.php";
$URL_EN_ROOM      = "raumE.php";
$URL_EN_DOZENTEN  = "dozentenE.php";
$URL_EN_SEMESTER  = "semesterE.php";
$URL_EN_THEMEN    = "themenE.php";
$URL_EN_SEARCH    = "/Search/vorlesungen.php.en";

print "Content-Type: text/html\n";
print "\n";
print "<HTML><HEAD><TITLE>Neue Startseiten erzeugen</TITLE></HEAD>\n";
print "<BODY>\n";
print "<H1>Neue Startseiten erzeugen</H1>\n";

#
# Rechnernamen in den Seiten auf einen einheitlichen
#   Stand bringen (analog zu HTDIG-Datenbank!)
#
sub changeServerAliases {
  my $line = $_[0];
  $line =~ s/vorlesungen.uni-osnabrueck.de/vorlesungen.uos.de/g;
  $line =~ s/informatik.uni-osnabrueck.de/inf.uos.de/g;
  $line =~ s/informatik.uos.de/inf.uos.de/g;
  return $line;
}

#
# Ausgabe Text oder Link auf Seite
#
sub printLink {
  my $prefix  = $_[0];
  my $desc    = $_[1];
  my $postfix = $_[2];
  my $type    = $_[3];
  my $visible = $_[4];
  my $trenner = $_[5];

  if ($type eq $visible) {
    $tag = $desc;
  } else {
    $tag = $prefix . $desc . $postfix;
  }
  if ($trenner) {
    print FILE "$tag | ";
  } else {
    print FILE "$tag";
  }
}

#
# Ausgabe des Standard-HTML-Kopfes
#
sub printHTMLHeaderDE {
  my $title  = $_[0];
  my $thisis = $_[1];
  my $head   = $_[2];

  my $actlist = "";
  my $alllist = "";

  print FILE "<?PHP\n  include(\"/home/www/php/template.inc\");\n",
	     "  startPage(\"de\", \"$title\");\n?>\n\n";
  print FILE "</p>\n<small>[ ";
  printLink("<a href=\"$URL_DE_RECENT\">","Aktuelle und geplante","</a>","RECENT",$thisis,1);
  printLink("<a href=\"$URL_DE_ROOM\">","Aktuelle mit Raumbelegungen","</a>","ROOM",$thisis,1);
  printLink("<a href=\"$URL_DE_DOZENTEN\">","Alle nach Dozenten","</a>","DOZENTEN",$thisis,1);
  printLink("<a href=\"$URL_DE_SEMESTER\">","Alle nach Semester","</a>","SEMESTER",$thisis,1);
  printLink("<a href=\"$URL_DE_THEMEN\">","Alle nach Themen","</a>","THEMEN",$thisis,0);
  print FILE " ]</small><hr>\n";
  print FILE "<p>$head\n" if($head ne "");
  print FILE "<p>\n";
}
sub printHTMLHeaderEN {
  my $title  = $_[0];
  my $thisis = $_[1];
  my $head   = $_[2];

  my $actlist = "";
  my $alllist = "";

  print FILE "<?PHP\n  include(\"/home/www/php/template.inc\");\n",
	     "  startPage(\"en\", \"$title\");\n?>\n\n";
  print FILE "</p>\n<small>[ ";
  printLink("<a href=\"$URL_DE_RECENT\">","Actual and planned (german)","</a>","RECENT",$thisis,1);
  printLink("<a href=\"$URL_DE_ROOM\">","Actual with rooms (german)","</a>","ROOM",$thisis,1);
  printLink("<a href=\"$URL_DE_DOZENTEN\">","All sorted by lecturer (german)","</a>","DOZENTEN",$thisis,1);
  printLink("<a href=\"$URL_DE_SEMESTER\">","All sorted by term (german)","</a>","SEMESTER",$thisis,1);
  printLink("<a href=\"$URL_DE_THEMEN\">","All sorted by topic (german)","</a>","THEMEN",$thisis,0);
  print FILE " ]</small><hr>\n";
  print FILE "<p>$head\n" if($head ne "");
  print FILE "<p>\n";
}

#
# Ausgabe des Standard-HTML-Fusses
#
sub printHTMLFooterDE {
  my $thisis = $_[0];

  print FILE "<hr>\n<small>[ ";
  printLink("<a href=\"$URL_DE_RECENT\">","Aktuelle und geplante","</a>","RECENT",$thisis,1);
  printLink("<a href=\"$URL_DE_ROOM\">","Aktuelle mit Raumbelegungen","</a>","ROOM",$thisis,1);
  printLink("<a href=\"$URL_DE_DOZENTEN\">","Alle nach Dozenten","</a>","DOZENTEN",$thisis,1);
  printLink("<a href=\"$URL_DE_SEMESTER\">","Alle nach Semester","</a>","SEMESTER",$thisis,1);
  printLink("<a href=\"$URL_DE_THEMEN\">","Alle nach Themen","</a>","THEMEN",$thisis,0);
  print FILE " ]</small>\n";
  print FILE "<?PHP endPage(1, 1); ?>\n";
}
sub printHTMLFooterEN {
  my $thisis = $_[0];

  print FILE "<hr>\n<small>[ ";
  printLink("<a href=\"$URL_DE_RECENT\">","Actual and planned (german)","</a>","RECENT",$thisis,1);
  printLink("<a href=\"$URL_DE_ROOM\">","Actual with rooms (german)","</a>","ROOM",$thisis,1);
  printLink("<a href=\"$URL_DE_DOZENTEN\">","All sorted by lecturer (german)","</a>","DOZENTEN",$thisis,1);
  printLink("<a href=\"$URL_DE_SEMESTER\">","All sorted by term (german)","</a>","SEMESTER",$thisis,1);
  printLink("<a href=\"$URL_DE_THEMEN\">","All sorted by topic (german)","</a>","THEMEN",$thisis,0);
  print FILE " ]</small>\n";
  print FILE "<?PHP endPage(1, 1); ?>\n";
}

#
# erzeugt eine Liste von Links zu URLs zu einer Veranstaltung
#
sub getUrlList {
  my $idx  = $_[0];
  my $doz  = $_[1];
  my $urls = "";

  if (($doz eq "") || ($doz eq $DOZENT_KUERZEL[$idx])) {
    if ($URL[$idx] ne "") {
      $urls .= " (<a href=\"$URL[$idx]\">$TYP[$idx]</a>)";
    }
    if ($URL_E[$idx] ne "") {
      $urls .= " (<a href=\"$URL_E[$idx]\">$TYP[$idx], engl.</a>)";
    }
  }
  if (($doz eq "") || ($doz eq $UEBUNG_KUERZEL[$idx])) {
    if ($UEBUNG_URL[$idx] ne "") {
      $urls .= " (<a href=\"$UEBUNG_URL[$idx]\">&Uuml;bung</a>)";
    }
    if ($UEBUNG_URL_E[$idx] ne "") {
      $urls .= " (<a href=\"$UEBUNG_URL_E[$idx]\">&Uuml;bung, engl.</a>)";
    }
  }
  if ($urls eq "") {
    return " keine Online-Version verf&uuml;gbar";
  }
  return &changeServerAliases($urls);
}

#
# Ausgabe der aktuellen Veranstaltungen mit Raumbelegung
#
sub printRecentRooms {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Semester");

  if (!open(FILE, ">$FILENM")) {
   print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
   exit;
  }

  $head  = "<h2>Aktuelle Veranstaltungen mit Raumbelegungen</h2>\n";
  printHTMLHeaderDE("Veranstaltungen im Institut f&uuml;r Informatik - aktuelle Veranstaltungen","ROOM",$head);

  my $sem = "";
  my $typ = "";
  my $lClose = "";
  for (my $i=0 ; $i<=$last ; ++$i) {
    my $idx = $INDEX[$i];

    # nur aktuelles und nächstes Semester zulassen
    next if ( ($SEMESTER[$idx] ne $ACT_SEMESTER) &&
              ($SEMESTER[$idx] ne $NEXT_SEMESTER));
    if ($sem ne $SEMESTER[$idx]){
      if ($SEMESTER[$idx] eq $ACT_SEMESTER) {
        $typ = "";
        print FILE "$lClose</dl>\n"; $lClose="";
        print FILE "<hr><h3><a name=aktuell> Veranstaltungen im aktuellen Semester ($SEMESTER[$idx])</a></h3>\n";
      } else {
        print FILE "<h3><a name=next> Veranstaltungen im n&auml;chsten Semester ($SEMESTER[$idx])</a></h3>\n";
      }
      print FILE "<dl>\n";
    }
    if ($typ ne $STUDIUM[$idx]) {
      print FILE "$lClose\n"; $lClose="</ul>";
      print FILE "<dd><h3>$STUDIUM[$idx]en</h3>\n";
      print FILE "<ul>\n";
    }
    $sem   = $SEMESTER[$idx];
    $typ   = $STUDIUM[$idx];

    print FILE "<li>$NAME[$idx] -", &getUrlList($idx,""), "\n";

    $rooms = "";
    $rooms .= "<tr><td>Raum ($TYP[$idx])</td><td>&nbsp;&nbsp;$RAUM[$idx]</td></tr>\n" if($RAUM[$idx] ne "");
    $rooms .= "<tr><td>Zeit ($TYP[$idx])</td><td>&nbsp;&nbsp;$ZEIT[$idx]</td></tr>\n" if($ZEIT[$idx] ne "");
    $rooms .= "<tr><td>Raum (&Uuml;bung)</td><td>&nbsp;&nbsp;$UEBUNG_RAUM[$idx]</td></tr>\n" if($UEBUNG_RAUM[$idx] ne "");
    $rooms .= "<tr><td>Zeit (&Uuml;bung)</td><td>&nbsp;&nbsp;$UEBUNG_ZEIT[$idx]</td></tr>\n" if($UEBUNG_ZEIT[$idx] ne "");

    if ($rooms ne "") {
      print FILE "<dl><dd><table cellpadding=0 cellspacing=0>\n$rooms\n</table></dd></dl><p>\n";
    } else {
      print FILE "<dl><dd>keine Rauminformationen verf&uuml;gbar</dd></dl><p>\n";
    }
  }

  print FILE "$lClose\n";
  print FILE "</dl>\n";

  printHTMLFooterDE("ROOM");

  close FILE;
}

#
# Ausgabe der aktuellen Veranstaltungen
#
sub printRecent {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Semester");

  if (!open(FILE, ">$FILENM")) {
   print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
   exit;
  }

  $head = "<h2>Aktuelle Veranstaltungen</h2>\n";
  printHTMLHeaderDE("Veranstaltungen im Institut f&uuml;r Informatik - aktuelle Veranstaltungen","RECENT",$head);

  my $sem = "";
  my $typ = "";
  my $lClose = "";
  for (my $i=0 ; $i<=$last ; ++$i) {
    my $idx = $INDEX[$i];

    # nur aktuelles und nächstes Semester zulassen
    next if ( ($SEMESTER[$idx] ne $ACT_SEMESTER) &&
              ($SEMESTER[$idx] ne $NEXT_SEMESTER));
    if ($sem ne $SEMESTER[$idx]){
      if ($SEMESTER[$idx] eq $ACT_SEMESTER) {
        $typ = "";
        print FILE "$lClose</dl>\n"; $lClose="";
        print FILE "<h3><a name=aktuell> Veranstaltungen im aktuellen Semester ($SEMESTER[$idx])</a></h3>\n";
      } else {
        print FILE "<h3><a name=next> Veranstaltungen im n&auml;chsten Semester ($SEMESTER[$idx])</a></h3>\n";
      }
      print FILE "<dl>\n";
    }
    if ($typ ne $STUDIUM[$idx]) {
      print FILE "$lClose\n"; $lClose="</ul>";
      print FILE "<dd><h3>$STUDIUM[$idx]en</h3>\n";
      print FILE "<ul>\n";
    }
    $sem   = $SEMESTER[$idx];
    $typ   = $STUDIUM[$idx];

    print FILE "<li>$NAME[$idx] -", &getUrlList($idx,""), "\n";
  }

  print FILE "$lClose\n";
  print FILE "</dl>\n";
  print FILE "\n";

  printHTMLFooterDE("RECENT");

  close FILE;
}

#
# erzeugt eine Suchseite fuer alle Veranstaltungen (deutsch)
#
sub printSearchDE {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Semester");

  if (!open(FILE, ">$FILENM")) {
   print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
   exit;
  }

  print FILE "<?PHP\n  include(\"/home/www/php/template.inc\");\n",
	     "  startPage(\"de\", \"Stichwortsuche\");\n?>\n\n";
  print FILE "<blockquote>\n";
  print FILE "<form method=\"post\" action=\"/cgi-bin/htsearch\">\n";
  print FILE "  <input type=hidden name=config value=\"online.de\">\n";
  print FILE "  <input type=hidden name=exclude value=\"\">\n";
  print FILE "  <input type=hidden name=search_results_header value=\"/home/www/pub/Search/Header/vorlesungen.html.de\">\n";
  print FILE "  <input type=hidden name=search_results_footer value=\"/home/www/pub/Search/Footer/vorlesungen.html.de\">\n";
  print FILE "  <input type=hidden name=nothing_found_file    value=\"/home/www/pub/Search/Nothing/vorlesungen.html.de\">\n";
  print FILE "  <input type=hidden name=syntax_error_file     value=\"/home/www/pub/Search/Syntax/vorlesungen.html.de\">\n";
  print FILE "  <table>\n";
  print FILE "  <tr><td> Suchen nach: </td><td colspan=3>\n";
  print FILE "    <input type=\"text\" size=\"40\" name=\"words\" value=\"\">\n";
  print FILE "    <input type=\"submit\" value=\"Suche starten\">\n";
  print FILE "  </td></tr>\n";
  print FILE "<!-- erst, wenn Verzeichnisstruktur umgestellt wurde\n";
  print FILE "  <tr><td> Suchen in: </td><td colspan=3>\n";
  print FILE "  <select name=\"restrict\">\n";
  print FILE "    <option value=\"\" selected>allen Dokumenten</option>\n";
  print FILE "    <option value=\"/papers/\">allen Ver&ouml;ffentlichungen</option>\n";
  print FILE "    <option value=\"/lectures/\">allen Veranstaltungen</option>\n";
  print FILE "  </select>\n";
  print FILE "    <input type=\"submit\" value=\"Suche starten\">\n";
  print FILE "  </td></tr>\n";
  print FILE "-->\n";
  print FILE "  <tr><td colspan=4><hr></td></tr>\n";
  print FILE "  <tr><td> Treffer: </td><td>\n";
  print FILE "    <select name=method>\n";
  print FILE "    <option value=and>alle W&ouml;rter kommen vor\n";
  print FILE "    <option value=or>mind. ein Wort kommt vor\n";
  print FILE "    </select>\n";
  print FILE "  </td><td> Suchmethode: </td><td>\n";
  print FILE "    <select name=search_algorithm>\n";
  print FILE "    <option value=\"exact: 1\">exakt (schnell)\n";
  print FILE "    <option value=\"exact: 1 substring: 0.5\">Teilwort (langsam)\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td> Trefferanzeige: </td><td>\n";
  print FILE "    <select name=format>\n";
  print FILE "    <option value=builtin-long>mit Details\n";
  print FILE "    <option value=builtin-short>nur Titel\n";
  print FILE "    </select>\n";
  print FILE "  </td><td> Treffer/Seite: </td><td>\n";
  print FILE "    <select name=matchesperpage>\n";
  print FILE "    <option value=10>10\n";
  print FILE "    <option value=25>25\n";
  print FILE "    <option value=50>50\n";
  print FILE "    <option value=100>100\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td> Sortieren nach: </td><td>\n";
  print FILE "    <select name=sort>\n";
  print FILE "    <option value=score>Trefferquote\n";
  print FILE "    <option value=time>Zeit\n";
  print FILE "    <option value=title>Titel\n";
  print FILE "    <option value=revscore>Trefferquote (r&uuml;ckw&auml;rts)\n";
  print FILE "    <option value=revtime>Zeit (r&uuml;ckw&auml;rts)\n";
  print FILE "    <option value=revtitle>Titel (r&uuml;ckw&auml;rts)\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td colspan=4><hr></td></tr>\n";
  print FILE "  <tr><td colspan=4>\n";
  print FILE "    <dl><dt>Suche in folgenden Veranstaltungen (Mehrfachauswahl m&ouml;glich):</dt></dl>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td colspan=4>\n";
  print FILE "  <select name=\"restrict\" size=10 multiple>\n";

  sub forceLocal {
    my $url = &changeServerAliases($_[0]);

    return $url if ($url =~ /inf.uos.de/);
    return $url if ($url =~ /vorlesungen.uos.de/);
    return "";
  }

  $selected = "selected";
  for (my $i=0 ; $i<=$last ; ++$i) {
    $idx = $INDEX[$i];
    $nm  = $NAME[$idx];
    $sem = $SEMESTER[$idx];
    $typ = $TYP[$idx];

    $v_url_d = forceLocal($URL[$idx]);
    $v_url_e = forceLocal($URL_E[$idx]);
    $u_url_d = forceLocal($UEBUNG_URL[$idx]);
    $u_url_e = forceLocal($UEBUNG_URL_E[$idx]);

    if ($v_url_d ne "") {
      print FILE "    <option $selected value=\"$v_url_d\">$sem - $nm, $typ</option>\n";
      $selected = "";
    }
    if (($v_url_e ne "") && ($v_url_e ne $v_url_d)) {
      print FILE "    <option $selected value=\"$v_url_e\">$sem - $nm, $typ (englisch)</option>\n";
      $selected = "";
    }
    if (($u_url_d ne "") && ($u_url_d ne $v_url_d)) {
      print FILE "    <option $selected value=\"$u_url_d\">$sem - $nm, &Uuml;bung</option>\n";
      $selected = "";
    }
    if (($u_url_e ne "") && ($u_url_e ne $v_url_e)) {
      print FILE "    <option $selected value=\"$u_url_d\">$sem - $nm, &Uuml;bung (englisch)</option>\n";
      $selected = "";
    }
  }

  print FILE "  </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  </table>\n";
  print FILE "</form>\n";
  print FILE "</blockquote>\n";
  print FILE "<hr>\n";
  print FILE "Die Suchfunktion wurde mit <a href=\"http://www.htdig.org\">ht://Dig</a> erstellt.\n\n";
  print FILE "<?PHP endPage(1, 1); ?>\n";

  close FILE;
}

#
# erzeugt eine Suchseite fuer alle Veranstaltungen (englisch)
#
sub printSearchEN {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Semester");

  if (!open(FILE, ">$FILENM")) {
   print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
   exit;
  }

  print FILE "<?PHP\n  include(\"/home/www/php/template.inc\");\n",
	     "  startPage(\"en\", \"Search\");\n?>\n\n";
  print FILE "<blockquote>\n";
  print FILE "<form method=\"post\" action=\"/cgi-bin/htsearch\">\n";
  print FILE "  <input type=hidden name=config value=\"online.en\">\n";
  print FILE "  <input type=hidden name=exclude value=\"\">\n";
  print FILE "  <input type=hidden name=search_results_header value=\"/home/www/pub/Search/Header/vorlesungen.html.en\">\n";
  print FILE "  <input type=hidden name=search_results_footer value=\"/home/www/pub/Search/Footer/vorlesungen.html.en\">\n";
  print FILE "  <input type=hidden name=nothing_found_file    value=\"/home/www/pub/Search/Nothing/vorlesungen.html.en\">\n";
  print FILE "  <input type=hidden name=syntax_error_file     value=\"/home/www/pub/Search/Syntax/vorlesungen.html.en\">\n";
  print FILE "  <table>\n";
  print FILE "  <tr><td> Search for: </td><td colspan=3>\n";
  print FILE "    <input type=\"text\" size=\"40\" name=\"words\" value=\"\">\n";
  print FILE "    <input type=\"submit\" value=\"Start search\">\n";
  print FILE "  </td></tr>\n";
  print FILE "<!-- erst, wenn Verzeichnisstruktur umgestellt wurde\n";
  print FILE "  <tr><td> Search in: </td><td colspan=3>\n";
  print FILE "  <select name=\"restrict\">\n";
  print FILE "    <option value=\"\" selected>all documents</option>\n";
  print FILE "    <option value=\"/papers/\">all papers</option>\n";
  print FILE "    <option value=\"/lectures/\">all lectures</option>\n";
  print FILE "  </select>\n";
  print FILE "    <input type=\"submit\" value=\"Start search\">\n";
  print FILE "  </td></tr>\n";
  print FILE "-->\n";
  print FILE "  <tr><td colspan=4><hr></td></tr>\n";
  print FILE "  <tr><td> Page contains: </td><td>\n";
  print FILE "    <select name=method>\n";
  print FILE "    <option value=and>all the words\n";
  print FILE "    <option value=or>any of the words\n";
  print FILE "    </select>\n";
  print FILE "  </td><td> Search Algorithm: </td><td>\n";
  print FILE "    <select name=search_algorithm>\n";
  print FILE "    <option value=\"exact: 1\">exact (fast)\n";
  print FILE "    <option value=\"exact: 1 substring: 0.5\">substring (slow)\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td> Show Hits: </td><td>\n";
  print FILE "    <select name=format>\n";
  print FILE "    <option value=builtin-long>with description\n";
  print FILE "    <option value=builtin-short>only the title\n";
  print FILE "    </select>\n";
  print FILE "  </td><td> Hits/Page: </td><td>\n";
  print FILE "    <select name=matchesperpage>\n";
  print FILE "    <option value=10>10\n";
  print FILE "    <option value=25>25\n";
  print FILE "    <option value=50>50\n";
  print FILE "    <option value=100>100\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td> Sort by: </td><td>\n";
  print FILE "    <select name=sort>\n";
  print FILE "    <option value=score>Score\n";
  print FILE "    <option value=time>Time\n";
  print FILE "    <option value=title>Title\n";
  print FILE "    <option value=revscore>Score (reverse)\n";
  print FILE "    <option value=revtime>Time (reverse)\n";
  print FILE "    <option value=revtitle>Title (reverse)\n";
  print FILE "    </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td colspan=4><hr></td></tr>\n";
  print FILE "  <tr><td colspan=4>\n";
  print FILE "    <dl><dt>Search in the following courses (multiselect possible):</dt></dl>\n";
  print FILE "  </td></tr>\n";
  print FILE "  <tr><td colspan=4>\n";
  print FILE "  <select name=\"restrict\" size=10 multiple>\n";

  sub forceLocal {
    my $url = &changeServerAliases($_[0]);

    return $url if ($url =~ /inf.uos.de/);
    return $url if ($url =~ /vorlesungen.uos.de/);
    return "";
  }

  $selected = "selected";
  for (my $i=0 ; $i<=$last ; ++$i) {
    $idx = $INDEX[$i];
    $nm  = $NAME[$idx];
    $sem = $SEMESTER[$idx];
    $typ = $TYP_TO_EN{$TYP[$idx]};

    $v_url_d = forceLocal($URL[$idx]);
    $v_url_e = forceLocal($URL_E[$idx]);
    $u_url_d = forceLocal($UEBUNG_URL[$idx]);
    $u_url_e = forceLocal($UEBUNG_URL_E[$idx]);

    if ($v_url_d ne "") {
      print FILE "    <option $selected value=\"$v_url_d\">$sem - $nm, $typ (german)</option>\n";
      $selected = "";
    }
    if (($v_url_e ne "") && ($v_url_e ne $v_url_d)) {
      print FILE "    <option $selected value=\"$v_url_e\">$sem - $nm, $typ</option>\n";
      $selected = "";
    }
    if (($u_url_d ne "") && ($u_url_d ne $v_url_d)) {
      print FILE "    <option $selected value=\"$u_url_d\">$sem - $nm, &Uuml;bung (german)</option>\n";
      $selected = "";
    }
    if (($u_url_e ne "") && ($u_url_e ne $v_url_e)) {
      print FILE "    <option $selected value=\"$u_url_d\">$sem - $nm, &Uuml;bung</option>\n";
      $selected = "";
    }
  }

  print FILE "  </select>\n";
  print FILE "  </td></tr>\n";
  print FILE "  </table>\n";
  print FILE "</form>\n";
  print FILE "</blockquote>\n";
  print FILE "<hr>\n";
  print FILE "Powered by <a href=\"http://www.htdig.org\">ht://Dig</a>.\n\n";
  print FILE "<?PHP endPage(1, 1); ?>\n";

  close FILE;
}

#
# Ausgabe nach Semestern sortiert
#
sub printSemesterSorted {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Semester");

  if (!open(FILE, ">$FILENM")) {
    print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
    exit;
  }

  $head = "<h2>Alle Veranstaltungen (nach Semester)</h2>\n";
  printHTMLHeaderDE("Veranstaltungen im Institut f&uuml;r Informatik - sortiert nach Semester","SEMESTER",$head);

  my $sem = "";
  my $lClose = "";
  for (my $i=0 ; $i<=$last ; ++$i) {
    my $idx = $INDEX[$i];
    if ($sem ne $SEMESTER[$idx]){
      print FILE "$lClose\n"; $lClose="</ul>";
      print FILE "<h3><a name=\"$SEMESTER[$idx]\">Veranstaltungen $SEMESTER[$idx]</a></h3>\n";
      print FILE "<ul>\n";
    }
    $sem = $SEMESTER[$idx];
    print FILE "<li>$NAME[$idx] -", &getUrlList($idx,""), "\n";
  }
  print FILE "$lClose\n";
  print FILE "\n";

  printHTMLFooterDE("SEMESTER");

  close FILE;
}

#
# Ausgabe nach Dozenten sortiert
#
sub printDozentSorted {
  my $FILENM = $_[0];

  # Mehrfach-Dozenten auflösen, indem Veranstaltung
  #  mehrfach kopiert wird ==> danach ist die
  #  Datenbank redundant und muß neu gelesen werden
  for (my $i=0 ; $i<=$last ; ++$i) {
    if ($DOZENT_KUERZEL[$i] =~ / /) {
      @MANY = split(/ /, $DOZENT_KUERZEL[$i]);
      $DOZENT_KUERZEL[$i] = shift @MANY;
      foreach $doz (@MANY) {
        ++$last;
        $DOZENT_KUERZEL[$last] = $doz;
        $NAME[$last]           = $NAME[$i];
        $STUDIUM[$last]        = $STUDIUM[$i];
        $THEMA[$last]          = $THEMA[$i];
        $TYP[$last]            = $TYP[$i];
        $BESCHREIBUNG[$last]   = $BESCHREIBUNG[$i];
        $SEMESTER[$last]       = $SEMESTER[$i];
        $SEMESTER_SW[$last]    = $SEMESTER_SW[$i];
        $SEMESTER_YEAR[$last]  = $SEMESTER_YEAR[$i];
        $URL[$last]            = $URL[$i];
        $URL_E[$last]          = $URL_E[$i];
        $UEBUNG_KUERZEL[$last] = $UEBUNG_KUERZEL[$i];
        $UEBUNG_URL[$last]     = $UEBUNG_URL[$i];
        $UEBUNG_URL_E[$last]   = $UEBUNG_URL_E[$i];
      }
    }
  }
  for (my $i=0 ; $i<=$last ; ++$i) {
    if ($UEBUNG_KUERZEL[$i] =~ / /) {
      @MANY = split(/ /, $UEBUNG_KUERZEL[$i]);
      $UEBUNG_KUERZEL[$i] = shift @MANY;
      foreach $doz (@MANY) {
        ++$last;
        $DOZENT_KUERZEL[$last] = $DOZENT_KUERZEL[$i];
        $NAME[$last]           = $NAME[$i];
        $STUDIUM[$last]        = $STUDIUM[$i];
        $THEMA[$last]          = $THEMA[$i];
        $TYP[$last]            = $TYP[$i];
        $BESCHREIBUNG[$last]   = $BESCHREIBUNG[$i];
        $SEMESTER[$last]       = $SEMESTER[$i];
        $SEMESTER_SW[$last]    = $SEMESTER_SW[$i];
        $SEMESTER_YEAR[$last]  = $SEMESTER_YEAR[$i];
        $URL[$last]            = $URL[$i];
        $URL_E[$last]          = $URL_E[$i];
        $UEBUNG_KUERZEL[$last] = $doz;
        $UEBUNG_URL[$last]     = $UEBUNG_URL[$i];
        $UEBUNG_URL_E[$last]   = $UEBUNG_URL_E[$i];
      }
    }
  }

  my @INDEX = sortDatabase("Dozent");

  if (!open(FILE, ">$FILENM")) {
    print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
    exit;
  }

  $head = "<h2>Alle Veranstaltungen (nach Dozenten)</h2>\n";
  printHTMLHeaderDE("Veranstaltungen im Institut f&uuml;r Informatik - sortiert nach Dozenten","DOZENTEN",$head);

  # Veranstaltungen und Übungen aller Dozenten sammeln
  my $doz = "";
  my %list = ();
  for (my $i=0 ; $i<=$last ; ++$i) {
    my $idx = $INDEX[$i];
    $doz = $DOZENT_KUERZEL[$idx];
    $ueb = $UEBUNG_KUERZEL[$idx];
    $list{$doz} .= "<li>$NAME[$idx] ($SEMESTER[$idx]) -".&getUrlList($idx,$doz)."\n";
    if ($doz ne $ueb) {
      $list{$ueb} .= "<li>$NAME[$idx] ($SEMESTER[$idx]) -".&getUrlList($idx,$ueb)."\n";
    }
  }

  # Sortierte Liste der Dozenten erzeugen
  sub _dozSort {
    my $key_a = join(' ', $DOZENTTYP{$a}, reverse split(' ', $DOZENT{$a}));
    my $key_b = join(' ', $DOZENTTYP{$b}, reverse split(' ', $DOZENT{$b}));

    return $key_a cmp $key_b;
  }
  my @DOZKEYS = sort _dozSort keys %DOZENT;

  # Dozenten sortiert ausgeben
  foreach $key (@DOZKEYS) {
    print FILE "<h3><a name=\"$key\">Dozent: $DOZENT{$key}</a></h3>\n";
    print FILE "<ul>\n";
    @tmp = split(/\n/, $list{$key});
    print FILE join("\n",@tmp);
    print FILE "</ul>\n";
  }
  print FILE "\n";

  printHTMLFooterDE("DOZENTEN");

  close FILE;
}

#
# Ausgabe nach Themen sortiert
#
sub printThemaSorted {
  my $FILENM = $_[0];
  my @INDEX = sortDatabase("Thema");

  if (!open(FILE, ">$FILENM")) {
    print "Fehler: Kann Datei $FILENM nicht beschreiben ...\n";
    exit;
  }

  $head = "<h2>Alle Veranstaltungen (nach Themen)</h2>\n";
  printHTMLHeaderDE("Veranstaltungen im Institut f&uuml;r Informatik - sortiert nach Themen","THEMEN",$head);

  my $std = "";
  my $thm = "kdjfhv";
  my $lClose='';
  my $lClose2='';
  for (my $i=0 ; $i<=$last ; ++$i) {
    my $idx = $INDEX[$i];
    if ($std ne $STUDIUM[$idx]) {
      print FILE "$lClose$lClose2\n"; $lClose="</ul>"; $lClose2="";
      print FILE "<h3>$STUDIUM[$idx]en</h3><ul>\n";
      $thm = "kdjfhv";
    }
    if ($thm ne $THEMA[$idx]){
      if ($THEMA[$idx] eq "") {
        print FILE "$lClose2\n"; $lClose2="</ul>";
        print FILE "<li><h3>kein Thema angegeben</h3>\n";
        print FILE "<ul>\n";
      } else {
        print FILE "$lClose2\n"; $lClose2="</ul>";
        print FILE "<li><h3><a name=\"$THEMA[$idx]\">Thema: $THEMA[$idx]</a></h3>\n";
        print FILE "<ul>\n";
      }
    }
    $std = $STUDIUM[$idx];
    $thm = $THEMA[$idx];
    print FILE "<li>$NAME[$idx] ($SEMESTER[$idx]) -", &getUrlList($idx,""), "\n";
  }

  print FILE "$lClose$lClose2\n";
  print FILE "\n";

  printHTMLFooterDE("THEMEN");

  close FILE;
}

# Datenbank einlesen
readDatabase("veranstaltungen.db","HTML");

# Datenbank fuer Suchseite der Veranstaltungen ausgeben
printSearchDE $FILE_DE_SEARCH;
printSearchEN $FILE_EN_SEARCH;

# Datenbank für aktuelles und nächstes Semester ausgeben
printRecent $FILE_DE_RECENT;

# Datenbank für aktuelles und nächstes Semester ausgeben (mit Raumbelegung)
printRecentRooms $FILE_DE_ROOM;

# Datenbank nach Semestern sortiert ausgeben
printSemesterSorted $FILE_DE_SEMESTER;

# Datenbank nach Themen sortiert ausgeben
printThemaSorted $FILE_DE_THEMEN;

# Datenbank nach Dozenten sortiert ausgeben
#    (verändert die Datenbank, daher als letztes
#     oder Neueinlesen der Datenbank)
printDozentSorted $FILE_DE_DOZENTEN;
#readDatabase("veranstaltungen.db","HTML");

print "Es wurden folgende Seiten neu erzeugt:\n";
print "<UL>\n";
print "  <LI>Veranstaltungs-Suche (<A HREF=\"$FILE_DE_SEARCH\">deutsch</A>, <A HREF=\"$FILE_EN_SEARCH\">englisch</A>)\n";
print "  <LI><A HREF=\"$FILE_DE_RECENT\">Aktuelle Veranstaltungen</A>\n";
print "  <LI><A HREF=\"$FILE_DE_ROOM\">Aktuelle Veranstaltungen mit Raumbelegung</A>\n";
print "  <LI><A HREF=\"$FILE_DE_DOZENTEN\">Veranstaltungen sortiert nach Dozenten</A>\n";
print "  <LI><A HREF=\"$FILE_DE_THEMEN\">Veranstaltungen sortiert nach Themen</A>\n";
print "  <LI><A HREF=\"$FILE_DE_SEMESTER\">Veranstaltungen sortiert nach Semestern</A>\n";
print "</UL>\n";
print "<P>Die Seiten werden lokal generiert, die offiziellen\n";
print "Seiten werden nicht ersetzt. Dies sient dazu, da&szlig; die\n";
print "erzeugten Seiten hier zuerst gesichtet werden k&ouml;nnen.\n";
print "Ist alles in Ordnung, sollten die Seiten mit den unten stehenden\n";
print "Link an die offiziellen Stellen kopiert werden.\n";
print "<P><CENTER>\n";
print "<A HREF=\"makeOnline.cgi\"><H3>Ver&ouml;ffentlichen der Seiten</H3></A>\n";
print "</CENTER><P>\n";
print "<P>Zur&uuml;ck zur <A HREF=\"./\">Administrationsseite</A>\n";
print "</BODY></HTML>\n";

