
function showCalendar (state)
{
  if (state == "on") {
    // set initially to current month and year
    var today = new Date();
    var year = today.getYear();
    if (year < 1000) year = year+1900; //browsers differ on return from getYear()
    setCalendar(today.getMonth(), year);
    document.getElementById("calendar").style.visibility = "visible";
  }
  else
    document.getElementById("calendar").style.visibility = "hidden";
}
var calNumDays = [31,28,31,30,31,30,31,31,30,31,30,31];
var calMonths = ["January","February","March","April","May","June","July","August","September","October","November","December"];
function isLeapYear (year)
{
  // good enough for next hundred years
  if (year%4 == 0) return true;
  else return false;
}
function setCalendar (month, year)
{
  // remember that months are zero-based numbered (e.g., January is month 0)
  var date = new Date();
  date.setYear(year);
  date.setMonth(month);
  date.setDate(1);

  var numDays = calNumDays[month];
  if (month == 1 && isLeapYear(year)) numDays++;
  var firstDOW = date.getDay();

  // set month header
  var prevMonth = (month > 0 ? month-1 : 11);
  var nextMonth = (month < 11 ? month+1 : 0);
  var prevYear = (prevMonth < 11 ? year : year-1);
  var nextYear = (nextMonth > 0 ? year : year+1);
  var hdrStr = "<a href=\"javascript:setCalendar("+prevMonth+","+prevYear+")\">&lt;</a>&nbsp;&nbsp;"+calMonths[month]+" "+year+"&nbsp;&nbsp;<a href=\"javascript:setCalendar("+nextMonth+","+nextYear+")\">&gt;</a>"
  document.getElementById("calMonthHdr").innerHTML = hdrStr;

  // set calendar content
  var dayCounter = 1;
  for (var i = 0; i < 6; i++) {
    for (var j = 0; j < 7; j++) {
      if ((i == 0 && j < firstDOW) || (dayCounter > numDays))
        document.getElementById("cal"+i+j).innerHTML = "&nbsp;";
      else {
        document.getElementById("cal"+i+j).innerHTML = "<a href=\"javascript:dateSelected("+year+","+month+","+dayCounter+")\">"+dayCounter+"</a>";
        if (dayCounter <= numDays)
          dayCounter++;
      }
    }
  }
}
var dateOptions = ["No Specific Date:anytime","Today:today","Tomorrow:tomorrow","This Weekend:weekend","Next 7 Days:next7"];
function dateSelected (year, month, day)
{
  // rewrite the date selection list
  var dateList = document.getElementById("dateList");
  dateList.options.length = 0;
  var selectedDate = ""+year+leftPad(month+1,2)+leftPad(day,2); //increment zero-based month
  var displayDate = ""+(month+1)+"/"+day+"/"+year;
  dateList.options[0] = new Option(displayDate, selectedDate, false, false);
  var k=1;
  for (i in dateOptions) {
    parts = dateOptions[i].split(":");
    dateList.options[k] = new Option(parts[0], parts[1], false, false);
    k++;
  }
  // hide the calendar
  document.getElementById("calendar").style.visibility = "hidden";
}
function leftPad (num, size)
{
  var topad = ""+num;
  if (topad.length < size) return "0"+topad;
  else return topad;
}
