<?php
error_reporting(E_ALL);

class Calendar {
 var $day, $month, $year, $days_in_month, $month_name; 
 
 function Calendar(){
  $this->day           = $this->setDay();
  $this->month         = $this->setMonth();
  $this->year          = $this->setYear();
  $this->days_in_month = $this->daysInMonth();
 }
 
 function setDay(){
  if(isset($_GET['day']) && intval($_GET['day']) >= 1 && intval($_GET['day']) <= 31)
   return intval($_GET['day']);
  else
   return date("j");
 }
 
 function setMonth(){
  if(isset($_GET['month']) && intval($_GET['month']) >= 1 && intval($_GET['month']) <= 12)
   return intval($_GET['month']);
  else
   return date("n");
 }
 
 function setYear(){
  if(isset($_GET['year']) && intval($_GET['year']) >= 2000 && intval($_GET['year']) <= 2010)
   return intval($_GET['year']);
  else
   return date("Y");
 }
 
 function daysInMonth(){
  $daysInMonth = date("t", mktime(0, 0, 0, $this->month, 1, $this->year));
  
  if($this->day > $daysInMonth)
   doError("There are not ".$this->day." days in this month.");
  else
   return $daysInMonth;
 }
 
 function monthMenu(){
  $months = array("Select Month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  $menu   = "<select name=\"month\" id=\"month\">\n";
  
  $this->month_name = $months[$this->month];
  
  foreach($months as $num => $month){
   $selected = ($num == $this->month) ? ' selected="selected"' : null;
   $menu .= " <option value=\"$num\"$selected>$month</option>\n"; 
  }
  
  $menu  .= "</select>\n";
  return $menu;
 }
 
 function dayMenu(){
  $menu  = "<select name=\"day\" id=\"day\">\n";
  $menu .= " <option value=\"0\">Day</option>\n";
  
  for($day=1;$day<=31;$day++){
   $selected = ($day == $this->day) ? ' selected="selected"' : null;
   $menu .= " <option value=\"$day\"$selected>$day</option>\n";
  }
  
  $menu .= "</select>\n";
  return $menu;
 }
 
 function yearMenu(){
  $menu  = "<select name=\"year\" id=\"year\">\n";
  $menu .= " <option value=\"0\">Year</option>\n";
  
  for($year=2000;$year<=2010;$year++){
   $selected = ($year == $this->year) ? ' selected="selected"' : null;
   $menu .= " <option value=\"$year\"$selected>$year</option>\n";
  }
  
  $menu .= "</select>\n";
  return $menu;
 }
 
 function buildMenu(){
  $monthMenu = $this->monthMenu();
  $dayMenu   = $this->dayMenu();
  $yearMenu  = $this->yearMenu();

echo <<<MENU
   <form method="get" action="{$_SERVER['PHP_SELF']}">
    $monthMenu
    $dayMenu
    $yearMenu
    <input type="submit" value="Go!" /><br />&nbsp;
   </form>
MENU;
 }
 
 function todaysAgenda(){
  $year  = $this->year;
  $month = ($this->month < 10) ? "0".$this->month : $this->month;
  $day   = ($this->day < 10) ? "0".$this->day : $this->day;
  $today = $year.$month.$day;
  
  $agenda = array();
  $agenda[20071029] = "My 19th Birthday";
  $agenda[20071225] = "Christmas";
  $agenda[20070101] = "Happy New Year";
  $agenda[20070302] = "Present to Class";
  
  return isset($agenda[$today]) ? $agenda[$today] : 'No Agenda';
 }
 
 function buildCalendar(){
  $todays_agenda = $this->todaysAgenda();
 
echo <<<CALENDAR
<table cellspacing="0" style="border: 1px solid #000">
 <tr>
  <td align="center" colspan="7" style="font-size: 18pt; font-weight: bold; padding: 20px; border-bottom: 1px solid #000">$this->month_name $this->year</td>
  <td valign="top" rowspan="8" style="padding: 20px; background: #EEE">
   <b>Agenda for $this->month_name $this->day</b><br /><br />
   $todays_agenda
  </td>
 </tr>
 <tr>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Sunday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Monday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Tuesday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Wednesday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Thursday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Friday</td>
  <td valign="top" style="width: 80px; background: #99C; font-weight: bold; text-align: center; padding: 5px; border: 1px solid #000">Saturday</td>
 </tr>
CALENDAR;
 
 
 $firstDay = date("N", mktime(0, 0, 0, $this->month, 1, $this->year));
 $firstDay = ($firstDay == 7) ? 0 : $firstDay;
 $dayNum   = 0;
 
 if($firstDay != 0){
  echo " <tr>\n";
  for($day=0;$day<$firstDay;$day++){
   $dayNum++;
   $month = date("F", mktime(0, 0, 0, $this->month-1, $this->day, $this->year));
   echo "  <td width='80' height='80' align='right' valign='top' style='font-size: 10pt; border: 1px solid #000; padding: 5px; background: #DDD'><b>$month</b></td>\n";
  }
 }
 
 for($day=1;$day<=$this->days_in_month;$day++){
  $dayNum++;
  $bgcolour = ($day == $this->day) ? '#FAB' : '#FFF';
  echo "<td width='80' height='80' align='right' valign='top' style='border: 1px solid #000; padding: 5px; background: $bgcolour'><b>".$day."</b></td>\n";
  
  if($dayNum % 7 == 0){
   echo " </tr>\n <tr>\n";
  }
 }
 
 $days_left = 7-($dayNum % 7);
 if($days_left > 0 && $days_left < 7){
  for($day=0;$day<$days_left;$day++){
   $dayNum++;
   $month = date("F", mktime(0, 0, 0, $this->month+1, $this->day, $this->year));
   echo "  <td width='80' height='80' align='right' valign='top' style='font-size: 10pt; border: 1px solid #000; padding: 5px; background: #DDD'><b>$month</b></td>\n";
  }
 }
 
echo <<<END
 </tr>
</table>
END;
 }
}

/******************************************************/

function doError($error){
 echo "<h3 style=\"color: #900\">$error</h3>";
 die();
}

function printReadable($array){
 echo "<pre>\n";
 print_r($array);
 echo "</pre>\n";
}

echo <<<END
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>uglyCALENDER</title>
 <style type="text/css">
  body, th, td {
   font-family: Arial;
  }
 </style>
</head>
<body>
END;

$calendar = new Calendar;
$calendar->buildMenu();
$calendar->buildCalendar();
//printReadable($calendar);

echo <<<END
</body>
</html>
END;
?>