#!/usr/local/bin/perl
use CGI qw(:standard);
use Image::Magick;
#use Fcntl ':flock';

#use Image::IPTCInfo;
#http://multipart-mixed.com/photo/iptc.html
use strict;


my $cgi = new CGI;
my %parameters;
my $key;
my $val;

#generic loop counters
my $x;
my $y;

print "Content-type: text/html\n\n";

# Set defaults for some variables in case of indefinition in rc and CGI
$parameters{'page'} = 1;
$parameters{'columns'} = 4;
$parameters{'picturesperpage'} = 16;
#$parameters{'picture'} = "";
$parameters{'snowname'} = 0;
$parameters{'baseurl'} = "/~eem/";
$parameters{'basedir'} = "/home/eem/public_html/";
$parameters{'url'} = "/~eem/cgi-bin/photoalbum.cgi";
$parameters{'header'} = "";
$parameters{'footer'} = "";
$parameters{'private'} = 'false';
$parameters{'enableusertracking'} = 'false';

my $saveparameters = "";
my @saveparameters = qw(picturesperpage columns showname private);

open (RCFILE,".photoalbumrc") or print ".photoalbumrc not found, using defaults unless specified.\n";
while (<RCFILE>)
{
	chomp;
	($key,$val) = split(/=/,$_);
	$parameters{$key} = $val;
}
close (RCFILE);

my @params = $cgi->param;
foreach $key (@params)
{
	$parameters{$key} = $cgi->param($key);
	
	if ($key eq 'picturesperpage')
	{
		$parameters{$key} = 50 if ($parameters{$key} > 50);
		$parameters{$key} = 9 if ($parameters{$key} < 9);
	}
	if ($key eq 'columns')
	{
		$parameters{$key} = 10 if ($parameters{$key} > 10);
		$parameters{$key} = 3 if ($parameters{$key} < 3);
	}
	
	if ($key eq 'private')
	{
		if ($parameters{$key} eq 'true') {
			$parameters{'graphicsdir'} = $parameters{'privategraphicsdir'};
		}
	}

	for($x=0;$x<@saveparameters;$x++)
	{
		$saveparameters .= "&$key=$parameters{$key}" if ($key eq $saveparameters[$x])
	}
	
}

if (defined $parameters{'offline'})
{
	print "$saveparameters\n";
	exit;
}

appendSlash('basedir','graphicsdir');
my $directory = $parameters{'basedir'}.$parameters{'graphicsdir'};
my $graphicsurl = $parameters{'baseurl'}.$parameters{'graphicsdir'};
chdir($directory);

# Change this line to whatever type of graphic you want to display.
my @thefiles = sort (<*.jpg>, <*.JPG>, <*.gif>, <*.GIF>, <*.png>, <*.PNG>, <*.tif*>, <*.TIF*>);

my $picturenumber = $parameters{'picture'};
my $currentpicturename = $thefiles[$picturenumber];
my $previouspicture = $picturenumber > 0 ? $picturenumber-1 : -1;
my $nextpicture = $picturenumber < @thefiles-1 ? $picturenumber+1 : -1;

# Print the header document
if (open(my $header, $parameters{'basedir'}.$parameters{'htmldir'}.$parameters{'headerfile'})) {
    while (my $line = readline($header)) {
       print $line;
    }

    close($header);
}

# Print newpage() script
print "<SCRIPT LANGUAGE='JavaScript'>\n";
print "<!--\n";
print "function newpage()\n";
print "{\n";
print "	var choose = eval(document.picturelist.picture.selectedIndex);\n";

if ($parameters{'private'} eq 'true') {
print "	location=\"$parameters{'baseurl'}cgi-bin/photoalbum.cgi?private=true&picture=\" + choose + \"\"\;\n";
}
else {
print "	location=\"$parameters{'baseurl'}cgi-bin/photoalbum.cgi?picture=\" + choose + \"\";\n";
}

print "}\n";
print "//-->\n";
print "</SCRIPT>\n";


if (defined($parameters{'picture'}) and $picturenumber != -1)
{
	print "<title>$currentpicturename</title>\n";
	print "<center>\n";

	print "<table border=0 cellpadding=3 cellspacing=1 width=655 height=60>\n";	

	print "<tr><td align=center bgcolor=#999999 width=100% height=1><b><font size=3 face=\"arial\">\n";
	print "$currentpicturename";
	print "</font></b></td></tr>\n";

	print "<tr><td align=center bgcolor=#990033 colspan=4>\n";

	print "Index: ";
	for($x=0;$x<@thefiles / $parameters{'picturesperpage'};$x++)
	{
		$y = $x+1;
		print "<a href=\"$parameters{'url'}?page=$y$saveparameters\">$y</a> ";
	}
	
	print "<br>\n";
	
	print "<form name=\"picturelist\">\n";
	print "<a href=\"$parameters{'url'}?picture=$previouspicture$saveparameters\">PREV</a> | " 
		if $previouspicture != -1;
	print "<select name=\"picture\" onChange=\"newpage();\">\n";
	for ($x=0;$x<@thefiles;$x++)
	{
		print "<option ";
		print "selected" if $x == $parameters{'picture'};
		print " value=\"$x\">$thefiles[$x]";
	}
	print "\n</select>";
	print " | <a href=\"$parameters{'url'}?picture=$nextpicture$saveparameters\">NEXT</a>" 
		if $nextpicture != -1;
	print "</form>\n";
	
	print "<font size=-2>To obtain a high quality image, please contact the team with the file name.</font>\n";

	print "</td></tr>\n";

	# Find dimentions of graphic
        my $image = Image::Magick->new;
        $image->Read ( "$parameters{'basedir'}$parameters{'graphicsdir'}$currentpicturename" );

        my $width = $image->Get ( 'width' );
        my $height = $image->Get ( 'height' );
	my $comment = "";
        undef $image;

	# Scale to default size
	while ($width > $parameters{'maximagewidth'}) {
	   $width *= .90;
	   $height *= .90;
	}

	print "<tr><td align=center>\n";
	print "<img src=\"$graphicsurl$currentpicturename\" alt=\"$comment\" border=0 width=$width height=$height><br>\n";

	print "</tr></td>\n";
	print "</table>";

	print "<font size=-2 face=\"Arial Narrow\">This page Copyright 2000 Jon Yurek.  Modified by Eric Millbrandt 2002.<br></font>\n";

	# Print the footer document
	if (open(my $footer, 
		$parameters{'basedir'}.$parameters{'htmldir'}.$parameters{'footerfile'})) {
	    while (my $line = readline($footer)) {
	       print $line;
	    }

	    close($footer);
	}

#	if ($parameters{'enableusertracking'} eq 'true') {
#		open(LOG, ">> $parameters{'basedir'}$parameters{'usertrackingfile'}");
#		locklog();
#		print LOG localtime." $ENV{'REMOTE_ADDR'} $ENV{'REMOTE_HOST'} $ENV{'REQUEST_URI'} $ENV{'HTTP_REFERER'}\n";
#		unlocklog();
#		close (LOG);
#	}
	exit;
}

print "<title>$parameters{'title'} - Index Page $parameters{'page'}</title></head>\n";
print "<body text=$parameters{'textcolor'} bgcolor=$parameters{'bgcolor'}>";

print "<center><table border=0 width=";
print 50+$parameters{'columns'}*110;
print ">\n";

print "<tr><td colspan=$parameters{'columns'}>\n";
print "<table border=0 cellpadding=3 cellspacing=1 width=100% height=60>\n";
print "<tr><td bgcolor=#999999 height=1><b><font size=3 face=\"arial\">\n";

print "<center>These are ".@thefiles." pictures collected by the WPI Ski Team.</center>";
print "</font></b></td></tr>\n";

print "<tr><td bgcolor=#990033 colspan=$parameters{'columns'}>\n";
print "<center>";
print "<a href=\"$parameters{'url'}?page=".($parameters{'page'}-1)."$saveparameters\">PREV</a> | " 
		if $parameters{'page'}-1 > 0;
print "Page ";
for($x=0;$x<@thefiles / $parameters{'picturesperpage'};$x++)
{
	$y = $x+1;
	print "<a href=\"$parameters{'url'}?page=$y$saveparameters\">$y</a> ";
}
print " | <a href=\"$parameters{'url'}?page=".($parameters{'page'}+1)."$saveparameters\">NEXT</a>" 
		if $parameters{'page'}+0 < @thefiles / $parameters{'picturesperpage'};  
print "<br>\n";

print "<form name=\"picturelist\">\n";
print "<select name=\"picture\" onChange=\"newpage();\">\n";
for ($x=0;$x<@thefiles;$x++)
{
    print "<option ";
    print "selected" if (exists $parameters{'picture'} and $x == $parameters{'picture'});
    print " value=\"$x\">$thefiles[$x]";
}
print "\n</select>";
print "</form>\n";


print "<form action=\"$parameters{'url'}\" method=\"GET\"\">\n";
print "Pictures Per Page: <select name=\"picturesperpage\" size=1>\n";
for ($x=5;$x<41;$x++)
{
	print "<option value=\"$x\"";
	print " selected" if $x == $parameters{'picturesperpage'};
	print ">$x";
}
print "\n</select>\n";
print "Columns: <select name=\"columns\">\n";
for ($x=2;$x<9;$x++)
{
	print "<option value=\"$x\"";
	print " selected" if $x == $parameters{'columns'};
	print ">$x";
}
print "\n</select>\n";
print "<br><input name=\"showname\" type=checkbox value=\"true\"";
print " checked" if $parameters{'showname'} eq "true";
print ">Show File Names\n";

if ($parameters{'private'} eq 'true') {
	print "<input name=\"private\" type=hidden value=\"true\">\n";
}

print "<input name=\"submit\" type=submit value=\"Change\">\n";
print "<br><br><font size=-2>Click on any picture to get a larger version. Or, select one from the popup list above.";
print "</form>\n";
print "</center>";
print "</td></tr>\n";

print "</td></tr></table>";
print "\&nbsp;";

my $total;
my $picturename;
my $thumbnailname;
my $startpicture = ($parameters{'page'}-1) * $parameters{'picturesperpage'};

$total = $startpicture;
for ($x=0;$x<$parameters{'picturesperpage'} / $parameters{'columns'};$x++)
{
	print "<tr>\n";
	for ($y=0;$y<$parameters{'columns'};$y++)
	{
		next if $total - $startpicture >= $parameters{'picturesperpage'};
		next if $total >= @thefiles;
		print "<td>\n";
		$picturename = $thefiles[$total];
		print "<a href=\"$parameters{'url'}?picture=$total$saveparameters\">";
		substr($picturename,-4,4) = "_t.jpg";
		print "<center>";
		print "<img border=0 src=\"".$graphicsurl.".thumbnails/$picturename\">";
		print "<br><font size=-1>$thefiles[$total]</font></a></center>" if $parameters{'showname'} eq "true";
		print "<br>\n</td>\n";
		$total++;
	} # $y for
	print "</tr>\n";
} # $x for
print "</table>\n";
print "<font size=-2 face=\"Arial Narrow\">This page Copyright 2000 Jon Yurek.  Modified by Eric Millbrandt 2002.<br></font>\n";
print "</center>";

# Print the footer document
if (open(my $footer, $parameters{'basedir'}.$parameters{'htmldir'}.$parameters{'footerfile'})) {
    while (my $line = readline($footer)) {
       print $line;
    }

    close($footer);
}

exit;

#if ($parameters{'enableusertracking'} eq 'true') {
#	open(LOG, ">> $parameters{'basedir'}$parameters{'usertrackingfile'}");
#	locklog();
#	print LOG localtime." $ENV{'REMOTE_ADDR'} $ENV{'REMOTE_HOST'} $ENV{'REQUEST_URI'} $ENV{'HTTP_REFERER'}\n";
#	unlocklog();
#	close (LOG);
#}

sub appendSlash
{
	my $dir;
	foreach $dir (@_)
	{
		if ($parameters{$dir} !~ m#/$#)
		{
			$parameters{$dir} = $parameters{$dir}."/";
		}
	}
}
