#!/usr/local/bin/perl

use Prediction;
use CGI qw/:standard/;

$Debug = 0;

if ($Debug) {
  print header;
  print start_html("Debugging CGI");
  print h1("Debugging CGI Starting...");
}

# URL you want to redirect to after submitting a prediction
$TableURL = "http://www.malone.org/Malone2.0/Prediction.shtml";

# HTML Table updated with predictions after submitted
$TableOutputFileName = "/home/www/public_html/Malone2.0/PredictionTable.html";

if (param) {
  @Predictions = (&param("Owner"),
                  &param("BoyName"), &param("GirlName"), &param("Sex"),
                  &param("Month"), &param("Day"), 
                  &param("Hour"), &param("Minute"), &param("AMPM"),
                  &param("Pounds"), &param("Ounces"),
                  &param("Length"));
  if (param("ID")) {
    &Prediction::Modify(&param("ID"),
                        @Predictions);
  } else {
    &Prediction::Add(@Predictions);
  }

  open(TABLEOUT,">$TableOutputFileName");
  &GenerateTable();
  close(TABLEOUT);

  print &redirect(-location=>"$TableURL");

} else {
  print header;
  print start_html("Baby Malone 2.0 Predictions Form");
  print "<body background=/~jdmalone/starbk.gif>\n";
  print "<center>\n";
  print h1("Baby Malone 2.0 Predictions Form");
  print "\n";

  $PathInfo = $ENV{"PATH_INFO"};
  if ($PathInfo =~ /^\/([\d]+)\/*/) {
    $ID = $1;
    &GenerateForm(&Prediction::GetInfo($ID));
  } else {
    &GenerateForm();
  }
  print "</center>\n";
}

sub PrintEnv {
  for $key (keys %ENV) {
    print "$key: ".$ENV{$key}."<br>\n";
  }
}

sub GenerateTable {
  my($ID) = ();
  print TABLEOUT "<table border=1 cellpadding=2>\n";
  print TABLEOUT "<tr>\n";
  print TABLEOUT "<td>\n";
  print TABLEOUT "<td>Boy's Name\n";
  print TABLEOUT "<td>Girl's Name\n";
  print TABLEOUT "<td>Sex\n";
  print TABLEOUT "<td>Birth Date\n";
  print TABLEOUT "<td>Birth Time\n";
  print TABLEOUT "<td>Weight\n";
  print TABLEOUT "<td>Length\n";
  print TABLEOUT "</tr>\n";

  for $ID (&Prediction::AllIDsByOwner) {
    &GenerateRow(&Prediction::GetInfo($ID));
  }

  print TABLEOUT "</table>\n";
}

sub GenerateRow {
  my ($ID, $Owner, $BoyName, $GirlName, $Sex, $Month, $Day,
      $Hour, $Minute, $AMPM, $Pounds, $Ounces, $Length) = @_;

  $ModifyBaseUrl = "http://www.malone.org/cgi-bin/baby/Prediction.cgi";

  print TABLEOUT "<tr>\n";
  print TABLEOUT "<td>\n";
  print TABLEOUT "<a href=$ModifyBaseUrl/$ID/>$Owner</a>\n";
  print TABLEOUT "<td>\n";
  print TABLEOUT &GenerateNameLinks($BoyName,"B");
  print TABLEOUT "<td>\n";
  print TABLEOUT &GenerateNameLinks($GirlName,"G");
  print TABLEOUT "<td>\n";
  print TABLEOUT "$Sex\n";
  print TABLEOUT "<td>\n";
  print TABLEOUT "<a href=".&GenerateDateURL($Month,$Day).">\n";
  print TABLEOUT "$Month $Day, 2001</a>\n";
  print TABLEOUT "<td>\n";
  print TABLEOUT "$Hour:$Minute $AMPM\n";
  print TABLEOUT "<td>\n";
  if ($Pounds) {
    print TABLEOUT "$Pounds Pounds";
  }
  if ($Ounces) {
    print TABLEOUT ", $Ounces Ounces";
  }
  print TABLEOUT "\n";
  print TABLEOUT "<td>\n";
  if ($Length) {
    print TABLEOUT "$Length Inches\n";
  }
  print TABLEOUT "</tr>\n";
}

sub GenerateDateURL {
  my ($WordMonth, $Day) = @_;
  my ($URL) = "http://www.historychannel.com/cgi-bin/today_relocate.cgi?";
  my ($TempMonth, $Month) = ();
  my (@Months) = ("January", "February", "March", "April", "May", "June",
                  "July", "August", "September", "October", "November",
                  "December");

  while ($TempMonth = shift(@Months)) {
    $Month++;
    if ($TempMonth eq $WordMonth) {
      last;
    }
  }

  $URL .= "month=";
  if ($Month < 10) {
    $URL .= "0";
  } 
  $URL .= $Month;

  $URL .= "&day=";
  if ($Day < 10) {
    $URL .= "0";
  } 
  $URL .= $Day;

  return $URL;
}

sub GenerateNameLinks {
  my ($Name, $Sex) = @_;
  my (@Names) = split(/\s+/,$Name);
  my ($BaseNameURL) = "http://tools.oxygen.com/babynamer/TypeASearch.cfm?Gender=$Sex&Unique=1&TellMeAbout=";
  my ($ReturnLinks) = ("");

  for $Name (@Names) {
    $ReturnLinks .= "<a href=$BaseNameURL$Name>$Name</a>\n";
  }

  return $ReturnLinks;
}

sub GenerateForm {
  my ($ID, $Owner, $BoyName, $GirlName, $Sex, $Month, $Day,
      $Hour, $Minute, $AMPM, $Pounds, $Ounces, $Length) = @_;

  if (!($ID)) {
    $Month = "July";
    $Day = 22;
    $Hour = 12;
    $Minute = 0;
    $AMPM = "PM";
    $Sex = "Boy";
  }

# Set this so that no radio button is selected by default
  if (!($Sex)) {
    $Sex = "-";
  }

  print "\n";
  print &startform();
  print "\n";
  print "\n";

  print &hidden(-name=>"ID",
                -default=>[$ID]);
  print "\n";
  print "\n";

  print "<table border=1 cellpadding=10>\n";
  print "<tr>\n";
  print "<td align=right>\n";
  print "Your name:\n";
  print "<td align=left>\n";
  print &textfield(-name=>"Owner",
                   -default=>$Owner);
  print "\n";
  print "\n";

  print "<tr>\n";
  print "<td align=right>\n";
  print "Boy name:\n";
  print "<td align=left>\n";
  print &textfield(-name=>"BoyName",
                   -default=>$BoyName);
  print "\n";
  print "\n";

  print "<tr>\n";
  print "<td align=right>\n";
  print "Girl name:\n";
  print "<td align=left>\n";
  print &textfield(-name=>"GirlName",
                   -default=>$GirlName);
  print "\n";
  print "\n";

  print "<tr>\n";
  print "<td align=right>\n";
  print "Sex:\n";
  print "<td align=left>\n";
  print &radio_group(-name=>"Sex",
                     -values=>["Boy"],
                     -default=>$Sex,
                     -nolabels=>"Yes");
  print " Boy\n";
  print "<br>\n";

  print &radio_group(-name=>"Sex",
                     -values=>["Girl"],
                     -default=>$Sex,
                     -nolabels=>"Yes");
  print " Girl\n";
  print "\n";


  @Months = ("June","July","August");
  @Days = ();
  for my $Count (1..31) {
    push(@Days,$Count);
  }

  print "<tr>\n";
  print "<td align=right>\n";
  print "Birth Date:\n";
  print "<td align=left>\n";
  print &popup_menu(-name=>"Month",
                    -values=>\@Months,
                    -default=>$Month);
  print "\n";

  print &popup_menu(-name=>"Day",
                    -values=>\@Days,
                    -default=>$Day);
  print "\n";
  print ", 2001\n";
  print "\n";


  @Hours = ();
  for my $Count (1..12) {
    push(@Hours,$Count);
  }

  @Minutes = ();
  for my $Count (0..59) {
    if ($Count < 10) {
      push(@Minutes,"0".$Count);
    } else {
      push(@Minutes,$Count);
    }
  }

  print "<tr>\n";
  print "<td align=right>\n";
  print "Birth Time:\n";
  print "<td align=left>\n";
  print &popup_menu(-name=>"Hour",
                    -values=>\@Hours,
                    -default=>$Hour);
  print "\n";

  print &popup_menu(-name=>"Minute",
                    -values=>\@Minutes,
                    -default=>$Minute);
  print "\n";

  print &popup_menu(-name=>"AMPM",
                    -values=>["AM","PM"],
                    -default=>$AMPM);
  print "\n";
  print "\n";

  print "<tr>\n";
  print "<td align=right>\n";
  print "Weight:\n";
  print "<td align=left>\n";
  print &textfield(-name=>"Pounds",
                   -size=>3,
                   -maxlength=>2,
                   -default=>$Pounds);
  print " Pounds, \n";

  print &textfield(-name=>"Ounces",
                   -size=>3,
                   -maxlength=>2,
                   -default=>$Ounces);
  print " Ounces\n";
  print "\n";

  print "<tr>\n";
  print "<td align=right>\n";
  print "Length:\n";
  print "<td align=left>\n";
  print &textfield(-name=>"Length",
                   -size=>6,
                   -maxlength=>5,
                   -default=>$Length);
  print " Inches\n";
  print "\n";

  print "<tr>\n";
  print "<td align=center colspan=2>\n";
  print &submit(-name=>"Submit",
                -label=>"Submit Predictions");
  print "\n";

  print "</table>\n";
  print "\n";
  
  print &endform();
}

