//Validates the date string by ensuring that the value is a date in mm/dd/yy or mm/dd/yyyy format
//The date is further verified to have a valid month/day pair
//If an error is detected 
function ValidateDate(dateString, fieldName)
{
  var dateArray = dateString.split('/');
  var maxDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if(dateArray.length != 3)
  {
    alert("The date in the " + fieldName + " field is currently invalid. Please enter a valid date in MM/DD/YYYY format.");
    return false;
  }
  
  var month = parseInt(dateArray[0], 10);
  if(isNaN(month) || month > 12 || month < 1)
  {
    alert("You have entered an invalid month in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY format.");
    return false;
  }
  
  var year = parseInt(dateArray[2], 10);
  if(isNaN(year) || (dateArray[2].length != 2 && dateArray[2].length != 4))
  {
    alert("You have entered an invalid day in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY format.");
    return false;
  }
  
  var day = parseInt(dateArray[1], 10);
  if(isNaN(day) ||day < 1 || day > maxDays[month-1])
  {
    if(!(month == 2 && day == 29 && year%4 == 0))
    {
      alert("You have entered an invalid day in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY format.");
      return false;
    }
  }
  return true;
}

function ValidateDateTime(dateString, fieldName)
{
  var splitPattern = /[\/ :]/;
  var dateArray = dateString.split(splitPattern,6);
  var maxDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if(dateArray.length != 6)
  {
    alert("The date in the " + fieldName + " field is currently invalid. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
    return false;
  }
  
  var month = parseInt(dateArray[0], 10);
  if(isNaN(month) || month > 12 || month < 1)
  {
    alert("You have entered an invalid month in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
    return false;
  }
  
  var year = parseInt(dateArray[2], 10);
  if(isNaN(year) || (dateArray[2].length != 2 && dateArray[2].length != 4))
  {
    alert("You have entered an invalid day in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
    return false;
  }
  
  var day = parseInt(dateArray[1], 10);
  if(isNaN(day) ||day < 1 || day > maxDays[month-1])
  {
    if(!(month == 2 && day == 29 && year%4 == 0))
    {
      alert("You have entered an invalid day in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
      return false;
    }
  }
  
  var hour = parseInt(dateArray[3], 10);
  if(isNaN(hour) ||hour < 0 || hour > 23)
  {
      alert("You have entered an invalid hour in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
      return false;
  }
  
  var min = parseInt(dateArray[4], 10);
  if(isNaN(min) ||min < 0 || min > 59)
  {
      alert("You have entered an invalid minute in the " + fieldName + " field. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
      return false;
  }

  var ampm = dateArray[5];
  if(ampm != "AM" && ampm != "PM")
  {
      alert("The AM/PM field in the " + fieldName + " field is invalid. Please enter a valid date in MM/DD/YYYY HH:MM AM|PM format.");
      return false;
  }

  return true;
}

//Simply validate the date string, don't alert if there's a problem
function ValidateDateNoAlert(dateString)
{
  var dateArray = dateString.split('/');
  var maxDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if(dateArray.length != 3)
  {
    return false;
  }
  
  var month = parseInt(dateArray[0], 10);
  if(isNaN(month) || month > 12 || month < 1)
  {
    return false;
  }
  
  var year = parseInt(dateArray[2], 10);
  if(isNaN(year) || (dateArray[2].length != 2 && dateArray[2].length != 4))
  {
    return false;
  }
  
  var day = parseInt(dateArray[1], 10);
  if(isNaN(day) ||day < 1 || day > maxDays[month-1])
  {
    if(!(month == 2 && day == 29 && year%4 ==0))
    {
      return false;
    }
  }
  return true;
}

//Compares the date in the dateString (string eg 11/07/2007) to the date in the date object startDate
//Returns true if dateString >= startDate
function DateGreaterThan(dateString, startDate)
{
  var date = dateString.split("/");
  var inputDate = new Date();
  inputDate.setFullYear(parseInt(date[2], 10), parseInt(date[0], 10) -1, parseInt(date[1], 10));
  return inputDate >= startDate;
}

//Compares the date in the dateString (string eg 11/07/2007) to the date in the date object endDate
//Returns true if dateString <= endDate
function DateLessThan(dateString, endDate)
{
  var date = dateString.split("/");
  var inputDate = new Date();
  inputDate.setFullYear(parseInt(date[2], 10), parseInt(date[0], 10) -1, parseInt(date[1], 10));
  return inputDate <= endDate;
}

//Function that gives you the date as a string (mm/dd/yyyy) when given a date variable
function getDateStringFromDate(date)
{
  var month = date.getMonth() + 1;
  var dateStr = month < 10 ? "0" + month + "/" : month + "/";
  dateStr += date.getDate() < 10 ? "0" + date.getDate() + "/" : date.getDate() + "/";
  dateStr += date.getFullYear();
  return dateStr;
}