function setDate(src, mn, dy, yr)
{
   var theYr;
   if ((src == null) || (src == "") || (src == 0))
   {
      return;
   }

   var dt = new Date();
   dt.setTime(src);

   mn.selectedIndex = dt.getMonth() + 1;
   dy.selectedIndex = dt.getDate();

   theYr = dt.getYear();
   if (theYr < 500)
     yr.value = theYr + 1900;
   else
     yr.value = theYr;
}

function convDate(mn, dy, yr, dest)
{
   if ((mn == -1) || (dy == 0) || (yr == "none"))
   {
      dest.value = "";
   } else
   {
     msg = checkDate(mn, dy, yr, dest.name);
     if (msg.length > 0)
       return msg;

     var dt = new Date(yr, mn, dy);
     dest.value = dt.getTime();
   }

   return "";
}

var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
function checkDate(SM, SD, SY, name)
{
  // check months with only 30 days
  if (((SM == 3) || (SM == 5) || (SM == 8) || (SM == 10)) && (SD == 31)) {
    errorMsg = "Incorrect date entered for [" + name + "]. ";
    errorMsg = errorMsg + months[SM];
    errorMsg = errorMsg + " only has 30 days."
    // alert(errorMsg);
    // return false;
	return errorMsg;
  }

  // check February on leap years (only 29 days)
  var leapyear = false;
  var i = parseInt(SY);

  if (SM == 1)
  {
    if ( (Math.floor(i/4) == (i/4)) &&
         ((Math.floor(i/100) != (i/100)) || (Math.floor(i/400) == (i/400))) )
      leapyear = true;
    else
      leapyear = false;

    if (leapyear && (SD > 29))
    {
      errorMsg = "Incorrect date entered for [" + name +
                 "]. February only has 29 days in ";
      errorMsg = errorMsg + i;
      // alert(errorMsg);
      // return false;
      return errorMsg;
    }

    if ((!leapyear) && (SD > 28))
    {
      errorMsg = "Incorrect date entered for [" + name +
                 "].  February only has 28 days in ";
      errorMsg = errorMsg + i;
      // alert(errorMsg);
      // return false;
      return errorMsg;
    }
  }

  // return true;
  return "";
}

function doDateConv(field)
{
	var nm = field.name;
	return convDate(field.form.elements[nm + "Mn"].selectedIndex - 1,
	                field.form.elements[nm + "Dy"].selectedIndex,
	                field.form.elements[nm + "Yr"].value,
	                field);
}

function doDateConvNoDay (field)
{
	var nm = field.name;
	return convDate(field.form.elements[nm + "Mn"].selectedIndex - 1,
	                field.form.elements[nm + "Dy"].value,
	                field.form.elements[nm + "Yr"].value,
	                field);
}

/* above doDateConv needs to be called first if using this method */
function dateInPast(field)
{
  if ((field.value == null) || (field.value.length <= 0))
    return "";


  // check if date is before todays date
  var dateToday = new Date();
  var dateDue = new Date();
  var originalDueDate = new Date();
  var tempDate = new Date();

  dateDue.setTime(field.value);
  tempDate.setTime(dateDue.getTime());

  tempDate.setHours(23);
  dateToday.setHours(0);

  if(tempDate.getTime()<dateToday.getTime()){

    	if(field.originalDate != null){
			originalDueDate.setTime(field.originalDate.value);

			// If date is unchanged, return with no error.
	  		if(dateDue.getTime() - originalDueDate.getTime()==0) return "";
		}

	  	errorMsg = "Incorrect " + field.name + " entered, date cannot be before today";
	  	return errorMsg;
  }

  return "";
}

