#!/usr/local/bin/perl5 -w

$file = "shavercam.jpg";
$max_age = 3 * 60;
$cycle = 30;
$offline_cycle = 2 * 60 * 60;

sub head {
    print "<HTML>
<HEAD>
 <META HTTP-EQUIV=\"Refresh\" CONTENT=\"45\">
 <TITLE>shavercam</TITLE>
 <SCRIPT LANGUAGE=\"JavaScript\">
 <!--
  logo_img=null;
  function whack_image(img) { }
  function unwhack_image(img) { }
 //-->
 </SCRIPT>

 <SCRIPT LANGUAGE=\"JavaScript1.1\">
  <!--
   function whack_image_name(img, i) {
    return img.src.substring(0, img.src.length - 5) + i +
	   img.src.substring(img.src.length - 4);
   }
   function whack_image(img)   { img.src = whack_image_name(img, \"2\"); }
   function unwhack_image(img) { img.src = whack_image_name(img, \"1\"); }
  //-->
 </SCRIPT>
</HEAD>
<BODY BGCOLOR=\"#000000\" TEXT=\"#FFFFFF\"
      LINK=\"#FFFFFF\" VLINK=\"#FFFFFF\" ALINK=\"#FF0000\">

<CENTER>
<BR>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
 <TR>
  <TH ALIGN=CENTER>
   <FONT SIZE=\"+3\"><B>shavercam</B></FONT>
   <FONT SIZE=\"-1\"><BR>
    I'm probably having as much fun as it seems.
   </FONT>
  </TH>
 </TR>
 <TR>
  ";
}

sub tail {
    print "
 </TR>
 <TR>
  <TD ALIGN=CENTER>
   <BR>
   <!-- A HREF=\"./\"
    onMouseOver=\"/*whack_image(logo_img)*/\"
    onMouseOut=\"/*unwhack_image(logo_img)*/\"
    ><IMG NAME=\"logo_img\" HSPACE=0 VSPACE=0 BORDER=0 WIDTH=60 HEIGHT=60
    SRC=\"compass1.gif\" ALT=\"[ up ]\"></A -->
  </TD>
 </TR>
</TABLE>

<SCRIPT LANGUAGE=\"JavaScript1.1\">
 <!--
//  with(document) {
//    whacked_logo_img = new Image(logo_img.width, logo_img.height);
//    whacked_logo_img.src = whack_image_name(logo_img, \"2\");
//  }
 //-->
</SCRIPT>
";
}


sub online_p {
    my $now = time;
    my $file_time = (stat($file))[9];
    if ($file_time <= 0 || $file_time + $max_age < $now ) {
	return 0;
    } else {
	return 1;
    }
}

sub online {
    print "<TD><IMG SRC=\"index.cgi?image\" BORDER=2></TD>";
}

sub offline {
    print "<TD HEIGHT=150 ALIGN=CENTER VALIGN=MIDDLE>";
    print "<FONT SIZE=\"+3\"><B>Error: </B>camera is offline.</B>";
    print "</TD>\n";
}

sub html {
    print "Content-Type: text/html\n";
    if (online_p) {
	print "Refresh: $cycle\n";
	print "\n";
	head;
	online;
	tail;
    } else {
	print "Refresh: $offline_cycle\n";
	print "\n";
	head;
	offline;
	tail;
    }
}

sub image {
    my $now = time;
    my $file_time = (stat($file))[9];
    my $file_length = (stat($file))[7];
    my $exp_time = $file_time;		    # netscape 4.x sucks!
    my $type = "image/jpeg";

    if ($file_time > 0) {
	print "Last-Modified: " . fmt_time($file_time) . "\n";
    }
    if ( $exp_time > 0 ) {
	print "Expires: " . fmt_time($exp_time) . "\n";
    }
    if ( $exp_time <= $now ) {
	print "Pragma: no-cache\n";
    }

    print "Content-Length: $file_length\n";
    print "Content-Type: $type\n";
    print "\n";
    open(IN, "<$file");
    while (<IN>) { print; }
    close (IN);
}

sub fmt_time {
    my ($time) = @_;
    my @t = gmtime($time);
    my ($sec, $min, $hour, $mday, $mon, $year,$wday) = @t;
    my @days = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
    my @months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun",
		  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
    $year += 1900;
    $wday = $days[$wday];
    $mon = $months[$mon];
    return sprintf("%s, %2d %s %d %02d:%02d:%02d GMT",
		   $wday, $mday, $mon, $year, $hour, $min, $sec);
}

sub main {

    if ( $ENV{QUERY_STRING} && $ENV{QUERY_STRING} eq "image" ) {
	image;
    } else {
	html;
    }
}

main;
exit (0);
