
/*
checknum - percent field - validate that field is numeric and has a value between 0.00 and 99.99
*/
/*
function checknum(objNum) {
	var fltNum;
	var strNum;
	var strNum = objNum.value;
	fltNum = parseFloat(strNum);
	if (isNaN(fltNum)){
		objNum.select();
		alert("Please enter a numeric value between 0.00 and 99.99")
		objNum.focus();
		return false;
	}
	if ((fltNum < 0) || (fltNum >= 100)){
		objNum.select();
		alert("Please enter a numeric value between 0.00 and 99.99")
		objNum.focus();
		return false;
	}
	return true;
}
*/

/*
checkmonth - check for valid month and year in Credit Card Expiration Date
*/
/*
function checkMMYY(objName, MMorYY) {
	var fltNum;
	var strNum;
	var strMsg;
	var intLow;
	var intHi;
	if (MMorYY == "M"){
		strMsg = "Please enter a valid month between '01' and '12'"
		intLow = 1
		intHi = 12
	}
	if (MMorYY == "Y"){
		strMsg = "Please enter a valid year greater than '02'"
		intLow = 3
		intHi = 99
	}
	var strNum = objName.value;
	fltNum = parseInt(strNum,10);
	if (isNaN(fltNum)){
		alert(strMsg)
		objName.select();
		objName.focus();
		return false;
	}
	if ((fltNum < intLow) || (fltNum > intHi)){
		alert(strMsg)
		objName.select();
		objName.focus();
		return false;
	}
	return true;
}
*/

/*
checkdate - check that date is valid and in correct format
*/
function checkdate(objName) {
	var datefield = objName;
	if (chkdate(objName) == false) {
		datefield.select();
		alert("Please enter a valid date in the 'mm/dd/yyyy' format")
		datefield.focus();
		return false;
	}
	else {
		return true;
	}
}

function chkdate(objName) {
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intDay;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var err = 0;

strDate = datefield.value;
if (strDate.length < 1) {
	return false;
}

if (strDate.indexOf("/") != -1) {
	strDateArray = strDate.split("/")
	if (strDateArray.length != 3) {
		err = 1;
		return false;
	}
	else {
		strMonth = strDateArray[0];
		strDay = strDateArray[1];
		strYear = strDateArray[2];
	}
	booFound = true;
}

if (booFound == false) {
	return false;
}

if ((strYear.length == 3) || (strYear.length > 4)){
	err = 11;
	return false;
}

if (strYear.length == 2) {
	if (parseInt(strYear,10) <= 49){
		strYear = '20' + strYear;
	}
	else {
		strYear = '19' + strYear;
	}
}

if (strYear.length == 1) {
	//strYear = '200' + strYear;
	return false;
}

if (strMonth.length == 1) {
	strMonth = '0' + strMonth
}

if (strDay.length == 1) {
	strDay = '0' + strDay
}

intDay = parseInt(strDay, 10);
if (isNaN(intDay)) {
	err = 2;
	return false;
}

intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
	err = 3;
	return false;
}

intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
	err = 4;
	return false;
}

if (intMonth>12 || intMonth<1) {
	err = 5;
	return false;
}

if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31 || intDay < 1)) {
	err = 6;
	return false;
}

if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30 || intDay < 1)) {
	err = 7;
	return false;
}
if (intMonth == 2) {
	if (intDay < 1) {
		err = 8;
		return false;
	}
	if (LeapYear(intYear) == true) {
		if (intDay > 29) {
			err = 9;
			return false;
		}
	}
	else {
		if (intDay > 28) {
			err = 10;
			return false;
		}
	}
}
datefield.value = strMonth + "/" + strDay+"/" + strYear;
return true;
}

function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) {
			return true;
		}
	}
	else {
		if ((intYear % 4) == 0) {
			return true;
		}
	}
return false;
}

function doDateCheck(from, to) {
	alert(from.value);
	alert(to.value);
	/*
	if (Date.parse(from.value) <= Date.parse(to.value)) {
		alert ("Dates OK")
		return true;
	}
	else {
		alert("TO date must be later than the FROM date for auto loan effective dates.")
		return false;
	}
	*/
}

//Validate required fields on form
/*
function CheckRequired(form)
{
	var CoName = form.FirmName.value;  
	var DelName = form.Delegate.value;
	var msg = "";
	var msg_end = " is a required field.  Please enter a value."
	if ((CoName == null) || (CoName.length == 0))
	{
		msg = "Firm Name" + msg_end
	}
	if ((DelName == null) || (DelName.length == 0))
	{
		if (msg != "")
		{
			msg = msg + "\nDelegate" + msg_end
		}
		else
		{
			msg = "Delegate" + msg_end
		}
	}
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}
*/
//Validate Agency Selection on form
function ValidateAgencySelect(form){
	var msg = "";
	
	if (form.AgencyID.value == 0){
		msg = "Please select an Agency for Client Delete";
	}
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}

//Validate report dates
function ValidateReportDates(form){
	alert("Validate");
	
	if (chkdate(form.StartDt) == false){
		if (msg != ""){
			msg = msg + "\n\nPlease enter a valid Start date in the 'mm/dd/yyyy' format"
		}else{
			msg = "Please enter a valid Start date in the 'mm/dd/yyyy' format"
		}
	}
	
	if (chkdate(form.EndDt) == false){
		if (msg != ""){
			msg = msg + "\n\nPlease enter a valid End date in the 'mm/dd/yyyy' format"
		}else{
			msg = "Please enter a valid End date in the 'mm/dd/yyyy' format"
		}
	}
	
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}

//Validate required fields on form
function ValidateIntakeEdit(form)
{
	var AgeObj = form.Age;
	var GenderObj = form.GenderID;
	var REIDObj = form.REID;
	var DCFHistIDObj = form.DCFHistID;
	var LivSitIntakeIDObj = form.LivSitIntakeID;
	var HowHearIDObj = form.HowHearID;
	
	var msg = "";
	var msg_begin = "Please select a value for ";
	
	if ((AgeObj.value == null) || (AgeObj.length == 0) || (AgeObj.value <= 0)){
		msg = "Please enter a valid value for Age";
	}
	if (GenderObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Gender";
		}
		else{
			msg = msg_begin + "Gender";
		}
	}
	if (REIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Race/Ethnicity";
		}
		else{
			msg = msg_begin + "Race/Ethnicity";
		}
	}
	if (DCFHistIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "DCF History";
		}
		else{
			msg = msg_begin + "DCF History";
		}
	}
	if (LivSitIntakeIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Living Situation";
		}
		else{
			msg = msg_begin + "Living Situation";
		}
	}
	if (HowHearIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "How Did Youth Hear About Us";
		}
		else{
			msg = msg_begin + "How Did Youth Hear About Us";
		}
	}
	
	if (chkdate(form.DateIntake) == false){
		if (msg != ""){
			msg = msg + "\n\nPlease enter a valid date in the 'mm/dd/yyyy' format";
		}
		else{
			msg = "Please enter a valid date in the 'mm/dd/yyyy' format";
		}
	}

	if ((form.DateClosing.value) != "00/00/0000"){
		if (Date.parse(form.DateIntake.value) > Date.parse(form.DateClosing.value)){
			if (msg != ""){
				msg = msg + "\n\nIntake Date (" + form.DateIntake.value + ") cannot be after Closing Date (" + form.DateClosing.value + ")";
			}
			else{
				msg = "Intake Date (" + form.DateIntake.value + ") cannot be after Closing Date (" + form.DateClosing.value + ")";
			}
		}
	}
	
	
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}


//Validate required fields on form
function ValidateClientNew(form)
{
	//var AgeObj = form.Age;
	var GenderObj = form.GenderID;
	var REIDObj = form.REID;
	var DCFHistIDObj = form.DCFHistID;
	var LivSitIntakeIDObj = form.LivSitIntakeID;
	var HowHearIDObj = form.HowHearID;
	var ClientKeyVal = form.ClientKey.value;
	
	var msg = "";
	var msg_begin = "Please select a value for ";
	
	if ((ClientKeyVal == null) || (ClientKeyVal.length == 0)){
		msg = "Please enter a value for Client Identifier";
	}
	/*
	if ((AgeObj.value == null) || (AgeObj.length == 0) || (AgeObj.value <= 0)){
		if (msg != ""){
			msg = msg + "\nPlease enter a valid value for Age";
		}
		else{
			msg = "Please enter a valid value for Age";
		}
	}
	*/
	if (GenderObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Gender";
		}
		else{
			msg = msg_begin + "Gender";
		}
	}
	if (REIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Race/Ethnicity";
		}
		else{
			msg = msg_begin + "Race/Ethnicity";
		}
	}
	if (DCFHistIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "DCF History";
		}
		else{
			msg = msg_begin + "DCF History";
		}
	}
	if (LivSitIntakeIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Living Situation";
		}
		else{
			msg = msg_begin + "Living Situation";
		}
	}
	if (form.HowLongID.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "How Long In Living Situation";
		}
		else{
			msg = msg_begin + "How Long In Living Situation";
		}
	}
	if (HowHearIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "How Did Youth Hear About Us";
		}
		else{
			msg = msg_begin + "How Did Youth Hear About Us";
		}
	}
	
	if (chkdate(form.DateIntake) == false){
		if (msg != ""){
			msg = msg + "\n\nPlease enter a valid Intake Date in the 'mm/dd/yyyy' format"
		}
		else{
			msg = "Please enter a valid Intake Date in the 'mm/dd/yyyy' format"
		}
	}
	if (chkdate(form.DateOfBirth) == false){
		if (msg != ""){
			msg = msg + "\n\nPlease enter a valid Date Of Birth in the 'mm/dd/yyyy' format"
		}
		else{
			msg = "Please enter a valid Date Of Birth in the 'mm/dd/yyyy' format"
		}
	}
	
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}


//Validate required fields on form
function ValidateClosingData(form)
{
	var ExitedToObj = form.LivSitExitID;
	var EduStatObj = form.EduStatID;
	var DCFInvolveIDObj = form.DCFInvolveID;
	
	var msg = "";
	var msg_begin = "Please select a value for ";
	
	if (ExitedToObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Exited To";
		}
		else{
			msg = msg_begin + "Exited To";
		}
	}
	if (EduStatObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Education Status";
		}
		else{
			msg = msg_begin + "Education Status";
		}
	}
	if (DCFInvolveIDObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "DCF Involvement";
		}
		else{
			msg = msg_begin + "DCF Involvement";
		}
	}
	
	if ((form.DateClosing.value) != "00/00/0000"){
		if (Date.parse(form.DateIntake.value) > Date.parse(form.DateClosing.value)){
			if (msg != ""){
				msg = msg + "\n\nClosing Date (" + form.DateClosing.value + ") cannot be earlier than Intake Date (" + form.DateIntake.value + ")";
			}
			else{
				msg = "Closing Date (" + form.DateClosing.value + ") cannot be earlier than Intake Date (" + form.DateIntake.value + ")";
			}
		}
		if (chkdate(form.DateClosing) == false){
			if (msg != ""){
				msg = msg + "\n\nPlease enter a valid date in the 'mm/dd/yyyy' format"
			}
			else{
				msg = "Please enter a valid date in the 'mm/dd/yyyy' format"
			}
		}
	}
	
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}


//Validate required fields on form
function ValidateAssetNew(form)
{
	var ClientKeyObj = form.ClientKey;
	
	var msg = "";
	var msg_begin = "Please select a value for ";
	
	if (ClientKeyObj.value == "0"){
		if (msg != ""){
			msg = msg + "\n" + msg_begin + "Client Key";
		}
		else{
			msg = msg_begin + "Client Key";
		}
	}
	
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}

/*
function ValidateIntakeEdit(form){
	alert("Step 1");
	var x = form.GenderID.value;
	alert("Step 2");
}
*/
//KCA-31Jan03-Validate required fields on Event Registration form
//KCA-26Feb2004-Add Phone Number as a required field
function CheckRequiredEvntReg(form)
{
	var CoName = form.Firm.value;  
	var DelName = form.Name.value;
	var PhoneNum = form.Phone.value;
	var msg = "";
	var msg_end = " is a required field.  Please enter a value."
	if ((CoName == null) || (CoName.length == 0))
	{
		msg = "Firm" + msg_end
	}
	if ((DelName == null) || (DelName.length == 0))
	{
		if (msg != "")
		{
			msg = msg + "\nName" + msg_end
		}
		else
		{
			msg = "Name" + msg_end
		}
	}
	if ((PhoneNum == null) || (PhoneNum.length == 0))
	{
		if (msg != "")
		{
			msg = msg + "\nPhone" + msg_end
		}
		else
		{
			msg = "Phone" + msg_end
		}
	}
	if (msg != "")
	{
		alert(msg)
		return false
	}
	return true
}


// Form Field Validation Functions:
//
// isValidExpDate(formField,fieldLabel,required)
//   -- checks for date in the format MM/YY or MM/YYYY against the current date
// isValidCreditCardNumber(formField,ccType,fieldLabel,required)
//   -- checks for valid credit card format using the Luhn check and known digits about various cards
//

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	
	return result;
}


function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;
	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

//KCA-21Jan03-Change error messages for my own use
//KCA-21Jan03-Just return if field is empty in case user needs to leave the field
//KCA-31Mar03-Add radix arg of 10 to parseInt calls so that it's not fooled by leading zero
//				into thinking the number is octal, e.g. 09/04
function isValidExpDate(formField,fieldLabel,required)
{
	var result = true;
	var formValue = formField.value;
	
	//KCA-21Jan03-if string is empty just return
 	if (isEmpty(formValue)) return true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result && (formField.value.length>0))
 	{
 		var elems = formValue.split("/");
 		
 		result = (elems.length == 2); // should be two components
 		var expired = false;
 		
 		if (result)
 		{
 			var month = parseInt(elems[0], 10);
 			var year = parseInt(elems[1], 10);
 			
			//KCA-21Jan03-Allow user to enter single digit year
 			//if (elems[1].length == 2)
 			if (elems[1].length <= 2)
 				year += 2000;
 			
 			var now = new Date();
 			
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
 			
			//KCA-21Jan03-Allow user to enter single digit year
			//result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
			//		 allDigits(elems[1]) && ((elems[1].length == 2) || (elems[1].length == 4));
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && ((elems[1].length == 1) || (elems[1].length == 2) || (elems[1].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format MM/YY');
			formField.focus();
			formField.select();
		}
		else if (expired)
		{
 			result = false;
 			alert('This expiration date is in the past. Please re-enter.');
			formField.focus();
			formField.select();
		}
	} 
	
	return result;
}

function isValidCreditCardNumber(formField,ccType,fieldLabel,required)
{
	var result = true;
 	var ccNum = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
 
  	if (result && (formField.value.length>0))
 	{ 
 		if (!allDigits(ccNum))
 		{
 			alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.');
			formField.focus();
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				alert('Please enter a valid card number for the "' + fieldLabel +'" field.');
				formField.focus();
				result = false;
			}	
		} 

	} 
	
	return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
    
  return result;
}



function GetRadioValue(rArray)
{
	for (var i=0;i<rArray.length;i++)
	{
		if (rArray[i].checked)
			return rArray[i].value;
	}
	
	return null;
}


function validateCCNum(cardType,cardNum)
{
	var result = false;
	cardType = cardType.toUpperCase();
	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType)
	{
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
	}
	return result;
}

function validCCForm(ccTypeField,ccNumField,ccExpField)
{
	var result = isValidCreditCardNumber(ccNumField,ccTypeField.value,"Credit Card Number",true) &&
		isValidExpDate(ccExpField,"Expiration Date",true);
	return result;
}

