/* 



how to use document....

Include this file in any form page, and before fields that you want to check, place a hidden field...

example:

<input type = "Hidden" name="First Name" value="mandatory_text">

<input type="text" name="firstName" value="" size="20" maxlength="40">



then at the bottom of the page place this value for an image:

<input type = "image" src="../../_images/modify_button_link.gif" name="modifybutton" border = 0 onclick="return checkDocument();">



This will call the function....

*/



function validateForm(formName) {

	for(var i = 0; i < formName.elements.length; i++) {

		//Check for mandatory text fields

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Text") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter " + formName.elements[i].name + ".");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Mandatory SSN

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_SSN") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter " + formName.elements[i].name + ".");

				formName.elements[i+1].focus();

				return false;

			}

			if(!checkSSN(formName.elements[i+1].value)) {

				alert("Please enter a valid Social Security Number. \n\n (ex. xxx-xx-xxxx)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Optional SSN

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_SSN") {

			if(!checkSSN(formName.elements[i+1].value)) {

				alert("Please enter a valid Social Security Number. \n\n (ex. xxx-xx-xxxx)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Mandatory Email

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Email") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

			if(!checkEmail(formName.elements[i+1].value)) {

				alert("Please enter a valid email address.");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Optional Email

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_Email") {

			if(!checkEmail(formName.elements[i+1].value)) {

				alert("Please enter a valid email address.");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Mandatory Zip

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Zip") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter " + formName.elements[i].name);

				formName.elements[i+1].focus();

				return false;

			}

			if(!checkZip(formName.elements[i+1].value)) {

				alert("Please enter a valid Zip Code. \n\n (ex. xxxxx or xxxxx-xxxx)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Optional Zip

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_Zip") {

			if(!checkZip(formName.elements[i+1].value)) {

				alert("Please enter a valid Zip Code. \n\n (ex. xxxxx or xxxxx-xxxx)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Mandatory Phone

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Phone") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

			if(!checkPhone(formName.elements[i+1].value)) {

				alert("Please enter a valid " + formName.elements[i].name + ". \n\n (ex. xxx-555-1212)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Optional Phone

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_Phone") {

			if(!checkPhone(formName.elements[i+1].value)) {

				alert("Please enter a valid " + formName.elements[i].name + ". \n\n (ex. xxx-555-1212)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//This checks for a mandatory date in mm/dd/yyyy format

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Date") {

			if(formName.elements[i+1].value.length < 1) {

				alert("Please enter a " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

			if(!checkDate(formName.elements[i+1].value)) {

				alert("Please enter a valid date for " + formName.elements[i].name + ". \n\n (ex. mm/dd/yyyy)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//This checks for a optional date in mm/dd/yyyy format

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_Date") {

			if(!checkDate(formName.elements[i+1].value)) {

				alert("Please enter a valid date for " + formName.elements[i].name + ". \n\n (ex. mm/dd/yyyy)");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Check that a user has actually selected something from a drop down list

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Select") {

			if(formName.elements[i+1].options.selectedIndex < 1) {

				alert("Please select " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Check that a user has actually selected something from a multi select list

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_MultiSelect") {

			//alert(formName.elements[i+1].options.selectedIndex);

			if(formName.elements[i+1].options.selectedIndex < 0) {

				alert("Please select " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

		}

		

		//Check that a user has actually selected something from a list of radio buttons

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Radio") {

			var radioName = formName.elements[i+1].name;

			var j = i+1;

			var radioSelected = false;

			while(formName.elements[j].name == radioName) {

				//alert(formName.elements[j].checked);

				if(formName.elements[j].checked) 

					radioSelected = true;

				j += 1;

			}

			//if(formName.elements[i+1]. < 1) {

			if(!radioSelected) {

				alert("You must select " + formName.elements[i].name  + ".");

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Check a text field for a mandatory number

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_num") {

			if(formName.elements[i+1].value.length < 1 || isNaN(formName.elements[i+1].value) || formName.elements[i+1].value < 0) {

				alert("You must enter a number greater than or equal to zero for " + formName.elements[i].name);

				formName.elements[i+1].focus();

				return false;

			}

		}

		//Check a text field for an optional number

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_num") {

			if(formName.elements[i+1].value.length > 0) {

				var str1 = formName.elements[i+1].value;

				newNum = str1.replace(/,/g, "");

				if(isNaN(newNum)) {

					alert("You must enter a number for " + formName.elements[i].name  + ".");

					formName.elements[i+1].focus();

					return false;

				} else {

					formName.elements[i+1].value = newNum;

				}

			} else {

				formName.elements[i+1].value = "0.00";

			}

		}

		//This checks if From Date is greater than To Date

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "date_compare") {

			if(!DateCompare(formName.elements[i-3].value, formName.elements[i-1].value)) {

				alert("The From Date must be less than the To Date.");

				formName.elements[i-1].focus();

				return false;

			}

		}

		// This tests for size of field on textboxes so that they are not greater than 2500 characters

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "mandatory_Textarea") {

			if(formName.elements[i+1].value.length < 1) {

				alert(formName.elements[i].name  + " cannot be blank.");

				formName.elements[i+1].focus();

				return false;

			}

			if(formName.elements[i+1].value.length > 2000) {

				alert("You can only enter " + formName.elements[i].name + " that are no more than 2000 characters long(including spaces)\nYou entered " + formName.elements[i+1].value.length + " characters(including spaces) ! " );		

				formName.elements[i+1].focus();

				return false;

			}

		}

		

		// This tests for size of field on textboxes so that they are not greater than 2500 characters

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "long_Textarea") {

			if(formName.elements[i+1].value.length < 1) {

				alert(formName.elements[i].name  + " cannot be blank.");

				formName.elements[i+1].focus();

				return false;

			}

			if(formName.elements[i+1].value.length > 3500) {

				alert("You can only enter " + formName.elements[i].name + " that are no more than 3500 characters long(including spaces)\nYou entered " + formName.elements[i+1].value.length + " characters(including spaces) ! " );		

				formName.elements[i+1].focus();

				return false;

			}

		}

		// This tests for size of field on textboxes so that they are not greater than 2500 characters

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "optional_textarea") {

			if(formName.elements[i+1].value.length > 1200) {

				alert("You can only enter " + formName.elements[i].name + " that are no more than 1200 characters long(including spaces)\nYou entered " + formName.elements[i+1].value.length + " characters(including spaces) ! " );		

				formName.elements[i+1].focus();

				return false;

			}

		}

		//This checks if From Date is greater than To Date

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "date_compare") {

			if(!DateCompare(formName.elements[i-3].value, formName.elements[i-1].value)) {

				alert("The From Date must be less than the To Date");

				formName.elements[i-1].focus();

				return false;

			}

		}

		//This checks that one number isn't bigger then another

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "number_compare") {

			if(formName.elements[i-3].value > formName.elements[i-1].value) {

				alert("The Max value must be greater then the Min value.");

				formName.elements[i-1].focus();

				return false;

			}

		}

		//This makes sure confirm password is the same as password

		if(formName.elements[i].type == "hidden" && formName.elements[i].value == "confirm_password") {

			if(formName.elements[i+1].value != formName.elements[i-1].value) {

				alert(formName.elements[i+1].value + "The password and confirm password are not the same. Please fix and try again." + formName.elements[i-1].value);

				formName.elements[i-1].focus();

				return false;

			}

		}

	}

	return true;

}





/// Functions /////////////////////////





function checkZip(zip) {

    if (zip.length == 0)

        return true;

		

    if (zip.length != 5 && zip.length != 10)

        return false;



	// make sure first 5 digits are a valid integer

	if (zip.charAt(0) == "-" || zip.charAt(0) == "+")

        return false;



	if (isNaN(zip.substring(0,5)))

		return false;



	if (zip.length == 5)

		return true;

	

	// make sure



	// check if separator is either a'-' or ' '

	if (zip.charAt(5) != "-" && zip.charAt(5) != " ")

        return false;



	// check if last 4 digits are a valid integer

	if (zip.charAt(6) == "-" || zip.charAt(6) == "+")

        return false;



	if(isNaN(zip.substring(6,10)))

		return false;

		

	return true;

}





	

function checkEmail(str){

	if(str.length == 0) {

		return true;

	}

	//var filter="/^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i";

	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;

	if (filter.test(str)) {

		return true;

	} else {

		return false;

	}

}



function checkPhone(str) {

    if (str.length == 0)

        return true;

		

    if (str.length != 12) 

        return false;



	// check if first 3 characters represent a valid area code

    if (isNaN(str.substring(0,3))) {

		return false;

	} else 	if (!numberRange((eval(str.substring(0,3))), 100, 1000)) {

		return false;

	}



	// check if area code/exchange separator is either a'-' or ' '

	if (str.charAt(3) != "-" && str.charAt(3) != " ")

        return false



	// check if  characters 5 - 7 represent a valid exchange

    if (isNaN(str.substring(4,7)))

		return false;

    else

	if (!numberRange((eval(str.substring(4,7))), 100, 1000))

		return false;



	// check if exchange/number separator is either a'-' or ' '

	if (str.charAt(7) != "-" && object_value.charAt(7) != " ")

        return false;



	// make sure last for digits are a valid integer

	if (isNaN(str.substring(8,12)))

		return false

	

	return true

}



function checkSSN(ssn) {

	var white_space = " -+.";

	var ssc_string="";

	var check_char;



    if (ssn.length == 0)

        return true;



    if (ssn.length != 11)

        return false;



	// make sure white space is valid

	if (ssn.charAt(3) != "-" && ssn.charAt(3) != " ")

        return false;



	if (ssn.charAt(6) != "-" && ssn.charAt(6) != " ")

        return false;



	if (isNaN(ssn.substring(0,3))) 

		return false;

	

	

	if (isNaN(ssn.substring(4,6))) 

		return false;

	

	

	if (isNaN(ssn.substring(7,11))) 

		return false;

	

	

	return true;



}



function checkDate(val)  {

    //Returns true if value is a date format or is NULL

    //otherwise returns false	



    if (val.length == 0)

        return true;



	if (val.length != 10)

        return false;

		

    //Returns true if value is a date in the mm/dd/yyyy format

	isplit = val.indexOf('/');



	if (isplit == -1 || isplit == val.length)

		return false;



    sMonth = val.substring(0, isplit);



	if (sMonth.length == 0)

        return false;



	isplit = val.indexOf('/', isplit + 1);



	if (isplit == -1 || (isplit + 1 ) == val.length)

		return false;



    sDay = val.substring((sMonth.length + 1), isplit);



	if (sDay.length == 0)

        return false;



	sYear = val.substring(isplit + 1);



	var theDate = new Date();

	var theYear = theDate.getYear();

	if(theYear < 1000) 

		theYear+=1900;

	var theDay=theDate.getDay();

	var theMonth=theDate.getMonth();

	

	if (isNaN(sMonth)) //check month

		return false;

	else if (!numberRange(sMonth, 1, 12)) //check month

		return false;

	else if (isNaN(sYear)) //check year

		return false;

	else if (!numberRange(sYear, 1850, 2050)) //check year

		return false;

	else if (isNaN(sDay)) //check day

		return false;

	else if (!checkDay(sYear, sMonth, sDay)) // check day

		return false;

	else 

		return true;

		

}



function checkDay(checkYear, checkMonth, checkDay) {



	maxDay = 31;



	if (checkMonth == 4 || checkMonth == 6 ||

			checkMonth == 9 || checkMonth == 11)

		maxDay = 30;

	else

	if (checkMonth == 2)

	{

		if (checkYear % 4 > 0)

			maxDay =28;

		else if (checkYear % 100 == 0 && checkYear % 400 > 0)

			maxDay = 28;

		else

			maxDay = 29;

	}



	return numberRange(checkDay, 1, maxDay); //check day

}





function numberRange(num, min_value, max_value) {

    // check minimum

    if (min_value != null)

	{

        if (num < min_value)

		return false;

	}



    // check maximum

    if (max_value != null)

	{

	if (num > max_value)

		return false;

	}

	

    //All tests passed, so...

    return true;

}







