<!--
  function dateReset(date)
  { 
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(1);
    date.setMilliseconds(0);
  }

  function datePlus(date, n)
  {
    return new Date( (date.getTime()) + (Date.DAY * n) );
  }

  function arriveDate()
  { var date  = new Date(); dateReset(date);

    date.setFullYear(document.getElementById("arriveYear").value);
    date.setMonth(document.getElementById("arriveMonth").value - 1, 
                  document.getElementById("arriveDate").value);
    return date;
  }

  function departDate()
  { var date  = new Date(); dateReset(date);

    date.setFullYear(document.getElementById("departYear").value);
    date.setMonth(document.getElementById("departMonth").value - 1,
                  document.getElementById("departDate").value);
    return date;
  }

  function setArrive(date)
  {
    document.getElementById("arriveDate").value   = date.print("%d");
    document.getElementById("arriveMonth").value  = date.print("%m");
    document.getElementById("arriveYear").value   = date.print("%Y");
    document.getElementById("checkin_date").value = date.print("%m/%d/%Y");
    document.getElementById("checkin_area").innerHTML  = date.print("%m/%d/%Y");
  }

  function setDepart(date)
  {
    document.getElementById("departDate").value   = date.print("%d");
    document.getElementById("departMonth").value  = date.print("%m");
    document.getElementById("departYear").value   = date.print("%Y");
    document.getElementById("checkout_date").value= date.print("%m/%d/%Y");
    document.getElementById("checkout_area").innerHTML = date.print("%m/%d/%Y");
  }

  function computeDays()
  { var days = -1;

    if ((document.getElementById("arriveYear").value != "") && 
        (document.getElementById("departYear").value != ""))
    { var indate  = arriveDate();
      var outdate = departDate();

      days = (outdate - indate)/Date.DAY;
//      cal_signal_error("Debug.",
//        indate.print("%m/%d/%y") + "A" + outdate.print("%m/%d/%y") + "D" + 
//        days);

    }
    return Math.round(days);
  }

  function updateArrive(cal)
  {
    var date  = cal.date;   dateReset(date);
    var today = new Date(); dateReset(today);

    cal_clear_error();
    // First make sure the date is at least today
    if ((date - today) < 0)
    { date = today;
      cal_signal_error("Invalid checkin date.",
        "The checkin date must be later than today. " +
        "It has been<br>reset to today.");
    }
    // Then if departure not set, set it a day later
    if (document.getElementById("departYear").value == "")
      setDepart(datePlus(date, 1));

    setArrive(date);
 
    // If new arrival date is later than departure already set
    // then move departure down
    if (computeDays() <= 0)
    { setDepart(datePlus(date, 1));
      cal_signal_error("Checkout date reset.",
        "The checkout date must be later than the checkin date. " +
        "It has been reset.");
    }
    document.getElementById("numberOfNights").value = computeDays();
  }

  function updateDepart(cal)
  {
    var date = cal.date;    dateReset(date);
    var today = new Date(); dateReset(today);
    var tomorrow = datePlus(today, 1);
    var arrival;
    
    cal_clear_error();
    // First make sure the date is past today
    if ((date - tomorrow) < 0)
    { date = tomorrow;
      cal_signal_error("Invalid checkout date.",
        "The checkout date must be tomorrow or later. " +
        "It has been reset to tomorrow.");
    }
    // Then if arrival not set, set to one day earlier
    if (document.getElementById("arriveYear").value == "")
      setArrive(datePlus(date, -1));

    setDepart(date);
    arrival = arriveDate();

    // If departure date is now earlier than arrival date,
    // set arrival date earlier than departure date, unless
    // arrival date is already today, then depart tomorrow
    if (computeDays() <= 0)
    { if ((arrival - today) <= 0)
        setDepart(tomorrow);
      else
        setArrive(datePlus(date, -1));
      cal_signal_error("Checkin date reset",
        "The checkin date must be earlier than the checkout date. " +
        "It has been reset.");
    }
    document.getElementById("numberOfNights").value = computeDays();
  }

  function cal_clear_error()
  {
    document.getElementById("cal_short_error").innerHTML = "&nbsp";
    document.getElementById("cal_long_error").innerHTML  = "&nbsp";
  }

  function cal_signal_error(s_err, l_err)
  {
    if (s_err == "") s_err = "&nbsp";
    if (l_err == "") l_err = "&nbsp";
    if (document.getElementById("cal_short_error").innerHTML != null)
      document.getElementById("cal_short_error").innerHTML = s_err;
    if (document.getElementById("cal_long_error").innerHTML != null)
      document.getElementById("cal_long_error").innerHTML  = l_err;
  }

  function calendar_setup()
  { Calendar.setup({
      inputField     	:    "checkin_date", // id of the input field
      ifFormat       	:    "%m/%d/%Y",     // format of the input field
      displayArea    	:    "checkin_area", // ID of the display span
      daFormat       	:    "%m/%d/%Y",     // format of the displayed date
      align 		:    "Tl",           // alignment (defaults to "Bl")
      singleClick     	:    true,
      range		:    [2009, 2012],
      onUpdate		:    updateArrive
    });

    Calendar.setup({
      inputField 	:    "checkout_date",// id of the input field
      ifFormat 		:    "%m/%d/%Y",     // format of the input field
      displayArea 	:    "checkout_area",// ID of the display span
      daFormat 		:    "%m/%d/%Y",     // format of the displayed date
      align 		:    "Tl",           // alignment (defaults to "Bl")
      singleClick 	:    true,
      range		:    [2009, 2012],
      onUpdate 		:    updateDepart
    });
  }

-->
