var trapsubmit = 0;

function ValidateForm(formObj,curDate) {
	//curDate is the server date set via PHP
	var msg = "Please provide the following information: \r\n\r\n";
	var isValid = true;
	
	// is user 18+?
	// check for long form
	if(formObj.elements["fld_birthmonth"]) {
		var dob = new Date(formObj.elements["fld_birthyear"].value +"/"+ formObj.elements["fld_birthmonth"].value +"/"+ formObj.elements["fld_birthday"].value);
		dob.setFullYear(dob.getFullYear() +18); 
		isOver18 = (dob <= curDate) ? true : false;
	}
	//check for short form
	else if(formObj.elements["fld_isover18"]) {
		isOver18 = (formObj.elements["fld_isover18"].checked) ? true : false;
	}
	
	//continue processing only if user is 18+
	if(!isOver18) {
		alert("You must be at least 18 to submit this form.");
		isValid = false;
		return isValid;
	} else {
		//validate required fields
		if(isWhitespace(formObj.elements["fld_firstname"].value)) {
			msg += "- First Name\r\n"; isValid = false;
		}
		if(isWhitespace(formObj.elements["fld_lastname"].value)) {
			msg += "- Last Name\r\n"; isValid = false;
		}
		if(formObj.elements["fld_zip"]) { // long form only
			if(!isWhitespace(formObj.elements["fld_zip"].value)) {
				if(!isValidZip(formObj.elements["fld_zip"].value)) {
					msg += "- Zip Code (like 12345 or 12345-1234)\r\n"; isValid = false;
				}
			}
		}
		if(!isValidEmail(formObj.elements["fld_email"].value)) {
			msg += "- Email Address as xxxxxx@xxxx.xxxx\r\n"; isValid = false;
		}
		
		//BEGIN validation for short form phone number
		if(formObj.elements["fld_phonepref1"]) {
			if(!isValidPhone(formObj.elements["fld_phonepref1"].value,formObj.elements["fld_phonepref2"].value,formObj.elements["fld_phonepref3"].value)) {
				msg += "- Preferred Telephone (U.S. numbers only)\r\n"; isValid = false;
			}
			if(!isWhitespace( formObj.elements["fld_phonepref4"].value)) {
				if(!isValidPhoneExt( formObj.elements["fld_phonepref4"].value)) {
					msg += "- Preferred Telephone Extension (numbers only)\r\n"; isValid = false;
				}
			}
			if(!isPhoneTypeChecked(formObj.elements["fld_phonepreftype"])) {
				msg += "- Preferred Telephone type (Home, Work or Mobile)\r\n"; isValid = false;
			}
		}
		//END validation for short form phone number
		
		// BEGIN validation for long form phone number
		if(formObj.elements["fld_phonehome1"]) { //long form only - assume if this field is present then so are all the others
			isEmptyHomePhone = false;
			isEmptyWorkPhone = false;
			isEmptyMobilePhone = false;
			if(isWhitespace(formObj.elements["fld_phonehome1"].value) && isWhitespace(formObj.elements["fld_phonehome2"].value) && isWhitespace(formObj.elements["fld_phonehome3"].value)) { 
				isEmptyHomePhone = true;
			}
			if(isWhitespace(formObj.elements["fld_phonework1"].value) && isWhitespace(formObj.elements["fld_phonework2"].value) && isWhitespace(formObj.elements["fld_phonework3"].value)) { 
				isEmptyWorkPhone = true;
			}
			if(isWhitespace(formObj.elements["fld_phonemobile1"].value) && isWhitespace(formObj.elements["fld_phonemobile2"].value) && isWhitespace(formObj.elements["fld_phonemobile3"].value)) {
				isEmptyMobilePhone = true;
			}

			if(isEmptyHomePhone && isEmptyWorkPhone && isEmptyMobilePhone) { 
				msg += "- At least 1 U.S. telephone number\r\n"; isValid = false;
			}
			if (!isEmptyHomePhone){
				if(!isValidPhone(formObj.elements["fld_phonehome1"].value,formObj.elements["fld_phonehome2"].value,formObj.elements["fld_phonehome3"].value)) {
					msg += "- Home Telephone (U.S. numbers only)\r\n"; isValid = false;
				}
			}
			if (!isEmptyWorkPhone) {
				if(!isValidPhone(formObj.elements["fld_phonework1"].value,formObj.elements["fld_phonework2"].value,formObj.elements["fld_phonework3"].value)) {
					msg += "- Work Telephone (U.S. numbers only)\r\n"; isValid = false;
				}
				if(!isWhitespace( formObj.elements["fld_phonework4"].value)) {
					if(!isValidPhoneExt( formObj.elements["fld_phonework4"].value)) {
						msg += "- WorkTelephone Extension (numbers only)\r\n"; isValid = false;
					}
				}
			}
			if (!isEmptyMobilePhone) {
				if(!isValidPhone(formObj.elements["fld_phonemobile1"].value,formObj.elements["fld_phonemobile2"].value,formObj.elements["fld_phonemobile3"].value)) {
					msg += "- Mobile Telephone (U.S. numbers only)\r\n"; isValid = false;
				}
			}
			if(!isPhoneTypeChecked(formObj.elements["fld_phonepreftype"])) {
				if (!isEmptyHomePhone && isEmptyWorkPhone && isEmptyMobilePhone) {
					formObj.elements["fld_phonepreftype"][0].checked = true;
				} else if (isEmptyHomePhone && !isEmptyWorkPhone && isEmptyMobilePhone) {
					formObj.elements["fld_phonepreftype"][1].checked = true;
				} else if (isEmptyHomePhone && isEmptyWorkPhone && !isEmptyMobilePhone) {
					formObj.elements["fld_phonepreftype"][2].checked = true;
				} else {
					msg += "- Which telephone number is preferred? (Home, Work or Mobile)\r\n"; isValid = false;
				}
			} else {
				if (formObj.elements["fld_phonepreftype"][0].checked && isEmptyHomePhone) {
					msg += "- Your home telephone is checked as preferred, but no home phone is entered\r\n"; isValid = false;
				}
				if (formObj.elements["fld_phonepreftype"][1].checked && isEmptyWorkPhone) {
					msg += "- Your work telephone is checked as preferred, but no work phone is entered\r\n"; isValid = false;
				}
				if (formObj.elements["fld_phonepreftype"][2].checked && isEmptyMobilePhone) {
					msg += "- Your mobile telephone is checked as preferred, but no mobile phone is entered\r\n"; isValid = false;
				}
			}
		}
		// END validation for long form phone number 
		if(formObj.elements["fld_timetocall"]) {
			if(formObj.elements["fld_timetocall"].selectedIndex == 0) {
				msg += "- Best Time to Call\r\n"; isValid = false;
			}
		}
		if(formObj.elements["fld_lawsuittype"]) { // long form only
			if(formObj.elements["fld_lawsuittype"].selectedIndex == 0) {
				msg += "- Type of Lawsuit\r\n"; isValid = false;
			}
		}
		if(formObj.elements["fld_advanceamount"]) { // long form only
			if(formObj.elements["fld_advanceamount"].selectedIndex == 0) {
				msg += "- Amount of Advance Requested\r\n"; isValid = false;
			}
		}
		if(formObj.elements["fld_attorneyname"]) { // long form only
			if(isWhitespace(formObj.elements["fld_attorneyname"].value)) {
				msg += "- Name of Attorney/Law Firm\r\n"; isValid = false;
			}
		}
		if(formObj.elements["fld_attorneyphone1"]) { // long form only
			if(!isWhitespace( formObj.elements["fld_attorneyphone1"].value) || !isWhitespace( formObj.elements["fld_attorneyphone2"].value) || !isWhitespace( formObj.elements["fld_attorneyphone3"].value) || !isWhitespace( formObj.elements["fld_attorneyphone4"].value)) {
				if(!isValidPhone(formObj.elements["fld_attorneyphone1"].value,formObj.elements["fld_attorneyphone2"].value,formObj.elements["fld_attorneyphone3"].value)) {
					msg += "- Attorney/Law Firm Telephone (10 digits)\r\n"; isValid = false;
				}
				if(!isWhitespace( formObj.elements["fld_attorneyphone4"].value)) {
					if(!isValidPhoneExt( formObj.elements["fld_attorneyphone4"].value)) {
						msg += "- Attorney/Law Firm Telephone Extension (numbers only)\r\n"; isValid 
= false;
					}
				}
			}
		}
		if(formObj.elements["fld_birthday"]) { // long form only
			if(!isValidDay(formObj.elements["fld_birthday"].value)) {
				msg += "- Day of Birth (1-31)\r\n"; isValid = false;
			}
		}
		if(formObj.elements["fld_birthyear"]) { // long form only
			if(!isValidYear(formObj.elements["fld_birthyear"].value)) {
				msg += "- Year of Birth (4 digits beginning with 19)\r\n"; isValid = false;
			}
		}
		
		//prevent multiple submissions
		if(isValid) trapsubmit++;
		if(trapsubmit > 1) {
			msg = "You have already submitted the form.";
			isValid = false;
		}
		
		if(!isValid) alert(msg);
		return isValid;
	}
}

//// SUPPORTING FUNCTIONS ////

function MoveNextField(what,maxchar,nextFldID) {
	if (what.value.length > (maxchar-1))
		document.getElementById(nextFldID).focus();
}

function isEmpty(s) {   
	return ((s == null) || (s.length == 0))
}

var whitespace = " \t\n\r";

function isWhitespace(s) {   
	var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++) {   
         var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function isValidEmail(emailFldVal)
{
	var emailPattern = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
	if (emailFldVal.search(emailPattern) != -1) return true;
	else return false;
}

function isValidPhone(val1,val2,val3) {
	var fullphonenum = val1+val2+val3;
	//don't allow 0 to start area code or exchange
	var pattern = /^[1-9]{1}\d{2}[1-9]{1}\d{6}$/;
	if (fullphonenum.search(pattern) != -1) return true;
	else return false;
}

function isValidPhoneExt(fldVal) {
	var pattern = /^\d/;
	if (fldVal.search(pattern) == -1) return false;
	else return true;
}

function isPhoneTypeChecked(arrRadio){
	var optchecked = false;
	for (i=0; i<arrRadio.length;i++) {
		if (arrRadio[i].checked) optchecked = true;
	}
	if (!optchecked) return false;
	else return true;
}

function isValidZip(zipFldVal) {
	var zipPattern1 = /^\d{5}$/;
	var zipPattern2 = /^\d{5}[-]{1}\d{4}$/;
	if (zipFldVal.length == 5) {
		if (zipFldVal.search(zipPattern1) == -1) return false;
		else return true;
	} else if (zipFldVal.length == 10){ 
		if(zipFldVal.search(zipPattern2) == -1) return false;
		else return true
	} else return false;
}

function isValidDay(fldVal){
	if(fldVal<1 || fldVal > 31) return false;
	else return true;
}

function isValidYear(fldVal){
	var pattern = /^[1]{1}[9]{1}\d{2}$/;
	if(fldVal.search(pattern) == -1) return false;
	else return true;
}
