
//tag lines on forms:

/*---------------------
required fields:

	function getRequiredFields() {
		return new Array(
			"Email", "Password", "etc.."
		);
	}
NOTE: id's of form elements must match array
*/

/*---------------------
required GROUPs (where at least ONE is required:

	function getRequiredGroupFields() {
		return new Array(
			["Email", "Phone"]
		);
	}
*/

/*---------------------
confirm fields:
	function getConfirmationFields() {
		return new Array(
			"Email", "Password"
		);
	}
WHERE confiming element id's MUST be (in above example) "Email Confirmation", "Password Confirmation" etc..
*/

/*---------------------
state fields: 
	function getStateFields() {
		return new Array( "Billing State", "Shipping State" );
	}
*/

	function validate() {
		if ( 
			!validateRequiredFields() || 
			!validateConfirmationFields() || 
			!validateRequiredGroupFields() || 
			!validateStateFields()
		) {
			return false;
		}
		return true;
	}


	function validateRequiredFields() {
		try {
			var fields = getRequiredFields();
		} catch ( e ) {
			return true;
		}
		for ( i=0; i<fields.length; i++ ) {
			try {
				var field = document.getElementById( fields[i] );
			} catch ( e ) {
				alert( "*" + fields[i] + "* field not found!" );
				return false;
			}
			if ( field.value == "" ) {
				alert( "Please complete the *" + fields[i] + "* field before proceeding." );
				field.focus();
				return false;
			}
		}
		return true;
	}

	function validateRequiredGroupFields() {
		try {
			var fields = getRequiredGroupFields();
		} catch ( e ) {
			return true;
		}
		for ( i=0; i<fields.length; i++ ) {
			var thisComboValid = false;
			for ( n=0; n<fields[i].length; n++ ) {
				var field;
				try {
					field = document.getElementById( fields[i][n] );
				} catch ( e ) {
					alert( "*" + fields[i][n] + "* field not found!" );
					return false;
				}
				if ( field.value != "" ) {
					thisComboValid = true;
					break;
				}
			}
			if ( !thisComboValid ) {
				var message = "Please complete at least one of the following fields:\n";
				for ( n=0; n<fields[i].length; n++ ) {
					if ( n>0 ) { message += ","; }
					message += " *" + fields[i][n] + "*";
				}
				alert( message );
				return false;
			}
		}
		return true;
	}

	function validateConfirmationFields() {
		try {
			fields = getConfirmationFields();
		} catch ( e ) {
			return true;
		}
		for ( i=0; i<fields.length; i++ ) {
			var field;
			try {
				field = document.getElementById( fields[i] );
			} catch ( e ) {
				alert( "*" + fields[i] + "* field not found!" );
				return false;
			}
			if ( field.value != document.getElementById( fields[i] + " Confirmation" ).value ) {
				alert( "Please check your information,\nyour " + fields[i] + " fields didn't match." );
				field.focus();
				field.select();
				return false;
			}
		}
		return true;
	}

	function getStateNames() {
		return new Array(
			"Alabama", "Alaska", "American Samoa", "Arizona ", "Arkansas", "California ", 
			"Colorado ", "Connecticut", "Delaware", "District of Columbia", 
			"Federated States of Micronesia", "Florida", "Georgia", "Guam ", "Hawaii", 
			"Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", 
			"Maine", "Marshall islands", "Maryland", "Massachusetts", "Michigan", "Minnesota", 
			"Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", 
			"New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", 
			"Northern Mariana Islands", "Ohio", "Oklahoma", "Oregon", "Palau", 
			"Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", 
			"Tennessee", "Texas", "Utah", "Vermont", "Virgin Islands", "Virginia ", "Washington", 
			"West Virginia", "Wisconsin", "Wyoming", "*Any"
		);
	}
	
	function getStateAbbreviations() {
		return new Array(
			"AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", 
			"GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", 
			"MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", 
			"MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", 
			"VT", "VI", "VA", "WA", "WV", "WI", "WY", "*ANY"
		);
	}

	function validateStateFields() {
		try {
			fields = getStateFields();
		} catch ( e ) {
			return true;
		}
		for ( i=0; i<fields.length; i++ ) {
			var field;
			try {
				field = document.getElementById( fields[i] );
			} catch ( e ) {
				alert( "*" + fields[i] + "* field not found!" );
				return false;
			}
			var stateNames = getStateNames();
			var stateAbv = getStateAbbreviations();
			var stateValid = false;
			for ( n=0; n<stateNames.length; n++ ) {
				var value = field.value.toLowerCase();
				if ( value == stateNames[n].toLowerCase() || value == stateAbv[n].toLowerCase() ) {
					field.value = stateAbv[n];
					stateValid = true;
					break;
				}
			}
			if ( !stateValid ) {
				alert( "Sorry, we couldn't validate your state.\nPlease check your information." );
				field.select();
				return false;
			}
		}
		return true;
	}

