#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use Image::Size;

# Variablen definieren
#
# In der untersten Ebene der Bilddateien liegen folgende Dateien:
# img.css:
#   Hier stehen die Stylesheet-Formatdefinitionen für das Bilder-Frame
# thumbs.css:
#   Hier stehen die Stylesheet-Formatdefinitionen für das Thumbnail-Frame
# basis_pfad:
#   Hier steht das Basisverzeichnis, in das der Pfeil Uebersicht
#   (Mitte) verzweigt.
#
# Es wird  je ein Verzeichnis 
#   "img" mit den durchnummerierten Bildern 
#   "thumbs" mit den Vorschaubildern und
#   "html" für Kommentare über (_pre) oder unter (_post) den Bildern erwartet.

# Hier wird in das cgi-bin Verzeichnis gewechselt, damit der korrekte Pfad zugrunde liegt 
my $AKTUELLES_CGI_VERZEICHNIS = $ENV{'SCRIPT_FILENAME'}; # Aktuellen Pfad aus der Position des Scriptes auslesen
$AKTUELLES_CGI_VERZEICHNIS=~ s/bilder.pl//;		 # und um den Script-Dateinamen kürzen
chdir $AKTUELLES_CGI_VERZEICHNIS;			 # Verzeichnis wechseln

# Übergabestring des Webservers auslesen, Syntax checken und in seine Bestandteile auflösen
my $Daten = $ENV{'QUERY_STRING'};
die "Good Bye\n" unless ($Daten =~ m/^[a-zA-Z0-9\/_-]+&[0-9]+$/);
my ($PFAD, $AKTUELLES_BILD) = split(/&/, $Daten); # Die beiden Teile werden in die Variablen $PFAD und $AKTUELLES_BILD geschrieben

# Pfad zu den Dokumenten der Homepage
my $BASE_URL="../fotos/".$PFAD."/";

open(BASIS_PFAD,$BASE_URL."basis_pfad");	# Basisverzeichnis Pfeil Uebersicht lesen
chomp (my $BASIS_PFAD = <BASIS_PFAD>);		# und in den Skalar $BASIS_PFAD schreiben
close(BASIS_PFAD);

# Verzeichnis "img" mit den Bildern auslesen
opendir (IMG,$BASE_URL."img");
my @IMG = grep !/^\./, readdir IMG;	# Inhalt in das Array schreiben (ohne .*-Dateien)
@IMG = sort(@IMG);		# Alphabetisch sortieren
closedir (IMG);

# Original-Groesse des aktuellen Bildes bestimmen
(my $imgW, my $imgH) = imgsize($BASE_URL."img/".$IMG[$AKTUELLES_BILD]);

# Webseite

print "Content-type: text/html \n\n";
print "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>\n";
print "<html>\n<head>\n";
print "<title>$PFAD</title>\n";		# Titel = Pfad
print "<meta name='author' content='Norbert P&auml;tzold'>\n<meta http-equiv='content-type' content='text/html; charset=ISO-8859-1'>\n";
# stylesheet einlesen
print "<link rel='stylesheet' type='text/css' href='".$BASE_URL."img.css'>\n";
print "</head>\n\n";

# Testing
#print "AKTUELLES_CGI_VERZEICHNIS: ".$AKTUELLES_CGI_VERZEICHNIS."<br>";
#print "BASE_URL: ".$BASE_URL."<br><br>";
#print "SCRIPT_NAME: ".$ENV{'SCRIPT_NAME'}."<br>";
#print "SCRIPT_FILENAME: ".$ENV{'SCRIPT_FILENAME'}."<br>";
#print "PATH_INFO: ".$ENV{'PATH_INFO'}."<br>";
#print "PATH_TRANSLATED: ".$ENV{'PATH_TRANSLATED'}."<br>";
#print "\$Daten: ".$Daten."<br>";
#print "QUERY_STRING: ".$ENV{'QUERY_STRING'}."<br>";
#print "REQUEST_URI: ".$ENV{'REQUEST_URI'}."<br>";
#print "DOCUMENT_ROOT: ".$ENV{'DOCUMENT_ROOT'}."<br>";
#print "HTTP_REFERER: ".$ENV{'HTTP_REFERER'}."<br>";
#print `dir /w`;
#print "Aktuelles Bild: ".$AKTUELLES_BILD."<br>";
#print "\@IMG -> ";print join " ", (@IMG,"<br>"); # gibt alle Werte mit " " getrennt von @IMG aus
#print "\$IMG[0] -> ".$IMG[0]."<br>";
#print "\$IMG[$#IMG] -> ".$IMG[$#IMG];
#
# # End Testing

print "<body>\n<div align='center'>\n";

# Aktuelle Groesse des Browserfensters bestimmen
print "<script language='JavaScript' type='text/javascript'>\n";
print "<!--\n";
print "var browserW = 630, browserH = 460;\n";    # Defaultwert, falls nichts zurueck kommt
print "if (parseInt(navigator.appVersion)>3) {\n";
print "  if (navigator.appName=='Netscape') {\n";
print "    browserW = window.innerWidth;\n";
print "    browserH = window.innerHeight;\n";
print "  }\n";
print "  if (navigator.appName.indexOf('Microsoft')!=-1) {\n";
print "    browserW = document.body.offsetWidth;\n";
print "    browserH = document.body.offsetHeight;\n";
print "  }\n";
print "}\n";
# For Debugging
# Groesse des aktuellen Browser-Fensters anzeigen
# print "document.write(";
# print " '<font color=red>Aktuelle Fensterbreite (browserW): '+browserW+'<br>' +'Aktuelle Fensterh&ouml;he (browserH): '+browserH+'<br></font>'"
# print " )\n";
print "//-->\n";
print "</script>\n";

# For Debugging
# Reale-Groesse des aktuellen Bildes anzeigen
# print "Aktuelles Bild: $IMG[$AKTUELLES_BILD]<br>";
# print "<font color=red>\n";
# print "Reale Bildbreite (\$imgW): $imgW<br>\n";
# print "Reale Bildh&ouml;he  (\$imgH): $imgH<br>\n";
# print "</font>\n";

print "<table border='0' cellpadding='0' cellspacing='2' width='200'>\n";
print "<tr>\n";

# Pfeil zurueck (Links)
print "<td width='80' align='center'>";
if ($AKTUELLES_BILD > 0) {		# Wenn die aktuelle Bildnummer groesser als die des ersten Bildes im Array ist,
   print "<a href='";			# dann wird Pfeil ZURUECK eingefügt
   print $ENV{'SCRIPT_NAME'}."?";	# HTTP-Pfad dieses Scriptes
   print $PFAD."&amp;";
   print $AKTUELLES_BILD-1;		# Parameter auf das vorige Bild setzen
   print "'>";
   print "<img src='/img/navi/pfeil_previous.gif' border='0' alt='Zur&uuml;ck'>";
   print "</a>";
}
print "</td>\n";

# Pfeil Uebersicht (Mitte)
print "<td width='80' align='center'>";
print "<a href='";
print $BASIS_PFAD;
print "' target='_top'>";
print "<img src='/img/navi/pfeil_home.gif' border='0' alt='Home'>";
print "</a>";
print "</td>\n";

# Pfeil vor (Rechts)
print "<td width='80' align='center'>";
if ($AKTUELLES_BILD < $#IMG) {		# Wenn die aktuelle Bildnummer kleiner als die des letzten Bildes im Array ist,
   print "<a href='";			# dann wird Pfeil VORWÄRTS eingefuegt.
   print $ENV{'SCRIPT_NAME'}."?";	# HTTP-Pfad dieses Scriptes
   print $PFAD."&amp;";
   print $AKTUELLES_BILD+1;		# Parameter auf das nächste Bild setzen
   print "'>";
   print "<img src='/img/navi/pfeil_next.gif' border='0' alt='Weiter'>";
   print "</a>";
}
   print "</td>\n";

print "</tr>\n";
print "</table>\n";

# Zusatztext vor dem Bild
if ( -e $BASE_URL."html/".$IMG[$AKTUELLES_BILD]."_pre.html") {          # Test, ob Datei existiert
  open(ZUSATZTEXT,$BASE_URL."html/".$IMG[$AKTUELLES_BILD]."_pre.html"); # Zusatztext aus der aktuellen xya.html-Datei lesen.
  my @Zeilen = <ZUSATZTEXT>;
  close(ZUSATZTEXT);
  print "<p class='c2'>\n";
  print @Zeilen;
  print "</p>\n";
}

# Bild entsprechen der Groesse des Browserfensters skalieren und einfuegen
print "<script language='JavaScript' type='text/javascript'>\n";
print "<!--\n";
# Bestimmen, welche Orientierung das Bild hat
print "if ( $imgW / $imgH > 1 ) {\n";
# -- Querformat (Landscape) --
# Browserfenster ist mindestens 36 Pixel breiter als das Originalbild
print "  if ( browserW > $imgW+36 ) {\n";
print "  var displayW = $imgW, displayH = $imgH;\n";
print "  } else {\n";
print "  var displayW = browserW-36, displayH = displayW*($imgH/$imgW);\n";
print "  }\n";
print "  } else {\n";
# -- Hochformat (Portrait) --
print "  if ( browserH > $imgH+46 ) {\n";
print "  var displayW = $imgW, displayH = $imgH;\n";
print "  } else {\n";
print "  var displayH = browserH-46, displayW = displayH*($imgW/$imgH);\n";
print "  }\n";
print "}\n";
print "document.write('<img src=$BASE_URL'+'img/$IMG[$AKTUELLES_BILD] width=\"'+displayW+'\" height=\"'+displayH+'\" border=\"0\" alt=\"$IMG[$AKTUELLES_BILD]\">');\n";
# For Debugging
# Groesse des Bildes nach der Umrechnung
# print "document.write(";
# print "'<font color=red><br>Angezeigte Bildbreite (displayW): '+displayW+'<br>' +'Angezeigte Bildh&ouml;he (displayH): '+displayH+'<br></font>'";
# print " )\n";
print "//-->\n";
print "</script>\n";

# Falls JAVASCRIPT aus ist, Bild trotzdem einfuegen
print "<noscript>";
print "<img src='";
print $BASE_URL."img/";		# Pfad zu den Bildern
print $IMG[$AKTUELLES_BILD];	# Aktuelles Bild einfügen
print "' border='0' alt='";
print $IMG[$AKTUELLES_BILD];	# alt-Tag auf die Bildnamen setzen
print "'>";
print "</noscript>\n";

#Bildnamen einfuegen
print "<p class='c1'>\n<font size='-1'>$IMG[$AKTUELLES_BILD]</font>\n</p>\n";

# Zusatztext nach dem Bild
if ( -e $BASE_URL."html/".$IMG[$AKTUELLES_BILD]."_post.html") {          # Test, ob Datei existiert
  open(ZUSATZTEXT,$BASE_URL."html/".$IMG[$AKTUELLES_BILD]."_post.html"); # Zusatztext aus der aktuellen xyb.html-Datei lesen.
  my @Zeilen = <ZUSATZTEXT>;
  close(ZUSATZTEXT);
  print "<p class='c3'>\n";
  print @Zeilen;
  print "</p>\n";
}

print "</div>\n";		# Abschluß <div align='center'>

# Falls das naechste/vorige Bild existieren, laden wir sie schon mal in den
# Cache des Browsers, in dem sie als 0 Pixel grosses Image eingefuegt werden
#   (-e findet auch '..' -> daher -f für normale Datei)
if ( -f $BASE_URL."img/".$IMG[$AKTUELLES_BILD+1]) {
  print "<img src='$BASE_URL"."img/"."$IMG[$AKTUELLES_BILD+1]' alt='$IMG[$AKTUELLES_BILD+1]' border='0' width='0'>\n";
}
if ( -f $BASE_URL."img/".$IMG[$AKTUELLES_BILD-1]) {
  print "<img src='$BASE_URL"."img/"."$IMG[$AKTUELLES_BILD-1]' alt='$IMG[$AKTUELLES_BILD-1]' border='0' width='0'>\n";
}

print "</body>\n\n</html>"
