// Functions for data validation
// Author: Brian Ford
// Date:   Jan. 23, 2001
// updated June 13, 2007

function checkMonthLength(mm,dd, alrt)
{
  var months = new Array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
    if (alrt) {alert (months[mm] + " has only 30 days.");}
    return false;
  } else if (dd > 31) {
    if (alrt) {alert(months[mm] + " has only 31 days.");}
    return false;
  }
  return true;
}

function checkLeapMonth(mm, dd, yyyy, alrt)
{
  if (yyyy % 4 > 0 && dd > 28) {
    if (alrt) {alert("February of " + yyyy + " has only 28 days.");}
    return false;
  } else if (dd > 29) {
    if (alrt) {alert("February of " + yyyy + " has only 29 days.");}
    return false;
  }
  return true;
}

function checkDate(fld1, emptyok, alrt) {
	var strDate = fld1.value;

if (emptyok && strDate.length==0) {
		return true;
	}
  // convert hyphen delimiters to slashes
  while (strDate.indexOf("-") != -1) {
    strDate = strDate.replace(/-/ig, "/");
  }
  // check for two delimiters
  var delim1 = strDate.indexOf("/");
  var delim2 = strDate.lastIndexOf("/");
  if (delim1 != -1 && delim1 == delim2) {
    if (alrt) {
			alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
		}
    return false;
  }
  
  if (delim1 != -1) {
    // delimiters
    var mm = parseInt(strDate.substring(0,delim1), 10);
    var dd = parseInt(strDate.substring(delim1 + 1, delim2), 10);
    var yyyy = parseInt(strDate.substring(delim2 + 1, strDate.length), 10);
  } else {
    // no delimiters
    var mm = parseInt(strDate.substring(0,2), 10);
    var dd = parseInt(strDate.substring(2, 4), 10);
    var yyyy = parseInt(strDate.substring(4, strDate.length), 10);
  }
  
  if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) {
    if (alrt) {
      alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
    }
    return false;
  }

  if (mm < 1 || mm > 12) {
    if (alrt) alert("Month must be from 1 to 12");
    return false;
  }
  
  if (dd < 1 || dd > 31) {
    if (alrt) alert("Day must be from 1 to 31");
    return false;
  }

  if (yyyy < 100) {
    if (yyyy >= 30) {
      yyyy += 1900
    } else {
      yyyy += 2000
    }
  }
  
  if (yyyy >= 100 && yyyy<1800) {
    if (alrt) alert("Century must be 1800 or greater");
    return false;
  }
  
  if (!checkMonthLength(mm,dd, alrt)) {
    return false;
  }
  if (mm == 2) {
    if (!checkLeapMonth(mm, dd, yyyy, alrt)) {
      return false;
    }
  }
	
  strDate = mm + "/" + dd + "/" + yyyy;
  fld1.value = strDate;

// Don't allow future dates
	var now = new Date();
	var then = new Date();
	then.setTime(Date.parse(strDate));
	if (then > now) {
		if (alrt) alert("This is a future date");
		return false;
	}
	
	return true;
}

function checkFutureDate(fld1, emptyok, alrt) {
	// 6/8/2005 - BKF
	var strDate = fld1.value;
	if (emptyok && strDate.length==0) {
		return true;
	}

  // convert hyphen delimiters to slashes
  while (strDate.indexOf("-") != -1) {
    strDate = strDate.replace(/-/ig, "/");
  }
  // check for two delimiters
  var delim1 = strDate.indexOf("/");
  var delim2 = strDate.lastIndexOf("/");
  if (delim1 != -1 && delim1 == delim2) {
    if (alrt) {
      alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
    }
    return false;
  }
  
  if (delim1 != -1) {
    // delimiters
    var mm = parseInt(strDate.substring(0,delim1), 10);
    var dd = parseInt(strDate.substring(delim1 + 1, delim2), 10);
    var yyyy = parseInt(strDate.substring(delim2 + 1, strDate.length), 10);
  } else {
    // no delimiters
    var mm = parseInt(strDate.substring(0,2), 10);
    var dd = parseInt(strDate.substring(2, 4), 10);
    var yyyy = parseInt(strDate.substring(4, strDate.length), 10);
  }
  
  if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) {
    if (alrt) {
      alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
    }
    return false;
  }

  if (mm < 1 || mm > 12) {
    if (alrt) alert("Month must be from 1 to 12");
    return false;
  }
  
  if (dd < 1 || dd > 31) {
    if (alrt) alert("Day must be from 1 to 31");
    return false;
  }

  if (yyyy < 100) {
    if (yyyy >= 30) {
      yyyy += 1900
    } else {
      yyyy += 2000
    }
  }
  
  if (yyyy >= 100 && yyyy<1800) {
		if (alrt) alert("Century must be 1800 or greater");
    return false;
  }
  
  if (!checkMonthLength(mm,dd, alrt)) {
    return false;
  }
  if (mm == 2) {
    if (!checkLeapMonth(mm, dd, yyyy, alrt)) {
      return false;
    }
  }
	strDate = mm + "/" + dd + "/" + yyyy;
  fld1.value = strDate;

// Don't allow past dates
	var now = new Date();
	var then = new Date();
	
	then.setTime(Date.parse(strDate));
	now.setHours(0);
	now.setMinutes(0);
	now.setSeconds(0);
	now.setMilliseconds(0);
	if (then < now) {
		if (alrt) alert("This date is past");
		return false;
	}
	
	return true;
}

function checkDate2(fld1, emptyok, alrt, pastok, futureok) {
	// 6/8/2005 - BKF
	var strDate = fld1.value;
	if (emptyok && strDate.length==0) {
		return true;
	}
  // convert hyphen delimiters to slashes
  while (strDate.indexOf("-") != -1) {
    strDate = strDate.replace(/-/ig, "/");
  }
  // check for two delimiters
  var delim1 = strDate.indexOf("/");
  var delim2 = strDate.lastIndexOf("/");
  if (delim1 != -1 && delim1 == delim2) {
    if (alrt) {
      alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
    }
    return false;
  }
  
  if (delim1 != -1) {
    // delimiters
    var mm = parseInt(strDate.substring(0,delim1), 10);
    var dd = parseInt(strDate.substring(delim1 + 1, delim2), 10);
    var yyyy = parseInt(strDate.substring(delim2 + 1, strDate.length), 10);
  } else {
    // no delimiters
    var mm = parseInt(strDate.substring(0,2), 10);
    var dd = parseInt(strDate.substring(2, 4), 10);
    var yyyy = parseInt(strDate.substring(4, strDate.length), 10);
  }
  
  if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) {
    if (alrt) {
      alert("Enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If month or date data is not available, enter \'01\' in the appropriate location.)");
    }
    return false;
  }

  if (mm < 1 || mm > 12) {
    if (alrt) alert("Month must be from 1 to 12");
    return false;
  }
  
  if (dd < 1 || dd > 31) {
    if (alrt) alert("Day must be from 1 to 31");
    return false;
  }

  if (yyyy < 100) {
    if (yyyy >= 30) {
      yyyy += 1900
    } else {
      yyyy += 2000
    }
  }
  
  if (yyyy >= 100 && yyyy<1800) {
    if (alrt) alert("Century must be 1800 or greater");
    return false;
  }
  
  if (!checkMonthLength(mm,dd, alrt)) {
    return false;
  }
  if (mm == 2) {
    if (!checkLeapMonth(mm, dd, yyyy, alrt)) {
      return false;
    }
  }
	strDate = mm + "/" + dd + "/" + yyyy;
  fld1.value = strDate;

// Don't allow past dates
	var now = new Date();
	var then = new Date();
	
	then.setTime(Date.parse(strDate));
	now.setHours(0);
	now.setMinutes(0);
	now.setSeconds(0);
	now.setMilliseconds(0);
	if (!pastok) {
		if (then < now) {
			if (alrt) alert("This date is past");
			return false;
		}
	}
	if (!futureok) {
		if (then > now) {
			if (alrt) alert("This date is future");
			return false;
		}
	}
	
	return true;
}

function checkPhoneNum(fld1, emptyok, alrt) {
  var strPhone = fld1.value;        

	if (emptyok && strPhone.length==0) {
		return true;
	}
  
	// Replace dots and parentheses
	strPhone = strPhone.replace(/\./ig,"-");
	strPhone = strPhone.replace(/\(/ig,"");
	strPhone = strPhone.replace(/\) |\)/ig,"-");
	fld1.value = strPhone;

	// area code is optional, extensions can be included
	var re = /^(\d{3}\-)?(\d{3}\-\d{4})/;

  if (strPhone.length == 0) {
    if (alrt) {
      alert("Please enter phone number.");
    }
    return false;
  }
  if (!re.test(strPhone)) {
    if (alrt) {
      alert("Use one of the following Phone Number formats:\n\n- 321-123-1234\n- 321-123-1234 x567\n- 123-1234\n- 123-1234 x567");
    }
    return false;
  }
  return true;
}

function checkInt(elm, emptyok, alrt){
  
	if (emptyok && elm.value.length==0) {
		return true;
	}
  if (elm.value == "") {
    if (alrt) alert("Integer value required");
    return false;
  }
  for (var i = 0; i < elm.value.length; i++) {
    if (elm.value.charAt(i) < "0" || elm.value.charAt(i) >  "9") {
      if (alrt) alert("Integer value required");
      return false;
    }
  }
  return true;
}
