// Called by function validate_date if a problem is found with the day
function bad_day_msg(dt,r1)
 {
  alert("Invalid day in date - " + dt + " should be in range 1 - " + r1 + "\r\nPlease enter in form mm/dd/yyyy, e.g. 12/25/2000");
  return 0;
 }

// Function examines a date for reasonability values, an does and alert if the date is not
// valid.  The date should be in the format mm/dd/yyyy, although single digit numbers are
// permitted for month and day.  The year must be between 1990 and 2999, and the month must be
// between 1 and 12.  The day is validated according to the month (e.g. 30 days for September)
// and leap years are accounted for.
function validate_date(obj)
 {
  var what = "month";
  var month = "";
  var day = "";
  var year = "";
  strDate = new String(obj.value);
  if (strDate=="")   //if date is entirely deleted exit out
   {
   return true;
   } 
  for (i = 0;i < strDate.length;i++)
   {
    if (strDate.substr(i,1) == "/")
     {
      switch (what)
       {
        case "month" :
          what = "day";
          break;
        case "day" :
          what = "year";
          break;
        default :
          alert("Error in date (required format - mm/dd/yyyy) " + strDate);
          return false;
          break;
       }
      }
     else
      {
       digit = parseInt(strDate.substr(i,1));
       if (isNaN(digit))
        {
         alert("Invalid characters in date - " + strDate + " - must be numbers & /" + "\r\nPlease enter in form mm/dd/yyyy, e.g. 12/25/2000");
         obj.focus();
         obj.select();
         return false;
        }
       switch (what)
        {
         case "month" :
          month = month + strDate.substr(i,1);
          break;
         case "day" :
          day = day + strDate.substr(i,1);
          break;
         case "year" :
          year = year + strDate.substr(i,1);
          break;
        }
      }
   }

  if (year < 1900 || year > 2999)
   {
    alert("Invalid year in date - " + strDate + " should be in range 1900 - 2999\r\n" + "Please enter in form mm/dd/yyyy, e.g. 12/25/2000");
    obj.focus();
    obj.select();
    return false;
   }

  if (month < 1 || month > 12)
   {
    alert("Invalid month in date - " + strDate + " should be in range 1 - 12\r\n" + "Please enter in form mm/dd/yyyy, e.g. 12/25/2000");
    obj.focus();
    obj.select();
    return false;
   }

  switch (month)
   {
    case "1"  :
    case "01" :
    case "3"  :
    case "03" :
    case "5"  :
    case "05" :
    case "7"  :
    case "07" :
    case "8"  :
    case "08" :
    case "10" :
    case "12" :
     if (day < 1 || day > 31)
      {
       bad_day_msg(strDate,31);
       obj.focus();
       obj.select();
       return false;
      }
     break;

    case "2"  :
    case "02" :
     remainder = year % 4;  // modulus to determine if leap year.
     if (remainder == 0)
      {
       if (day < 1 || day > 29)
        {
         bad_day_msg(strDate,29);
         obj.focus();
         obj.select();
         return false;
        }
      }
     else
      {
       if (day < 1 || day > 28)
        {
         bad_day_msg(strDate,28);
         obj.focus();
         obj.select();
         return false;
        }
      }
     break;

    case "4"  :
    case "04" :
    case "6"  :
    case "06" :
    case "9"  :
    case "09" :
    case "11" :
     if (day < 1 || day > 30)
      {
       bad_day_msg(strDate,30);
       obj.focus();
       obj.select();
       return false;
      }
     break;
   }  //end switch
 }    //end function
 
