
function verifyForm(formName,errTitle,errHeader) {

	// check for valid title
	if(typeof errTitle == 'undefined') {
		var errTitle = 'Form Submission Error';
	}
	
	// check for valid header text
	if (typeof errHeader == 'undefined') {
		var errHeader = 'The following errors were found:';
	}

	var fieldData = new Array(5);
	var alertErrors = new Array(0);
	var tempString;
	var retValue;

	// now take the rest of the arguments, and split each one to verify fields
	// argument example:    fieldName:fieldType:verificationType:error message
	for (var i = 3;i < verifyForm.arguments.length;i++) {
		
		fieldData = arguments[i].split(':');
		tempString = '';

		// if it has a conditional ifNotNull
		if (fieldData[3] == 'ifNotNull') {
			tempString = verifyField(formName,fieldData[0],fieldData[1],'notNull','.');
				if (tempString == '')	{
					tempString = verifyField(formName,fieldData[0],fieldData[1],fieldData[2],fieldData[4]);
				}	else {
					tempString = '';  //verifyField returns a period (.) if the field is null, so it does nothing
				}
		
		// or if conditional ifFieldTypeNameValue
		} else if (fieldData[3].indexOf('ifFieldTypeNameValue') >= 0) {

			var tempArgs = new Array();
			tempArgs = fieldData[3].split('.');
			var tempFieldValue = getFieldValue(formName,tempArgs[1],tempArgs[2]);
			
			if (tempFieldValue == tempArgs[3]) {
				tempString = verifyField(formName,fieldData[0],fieldData[1],fieldData[2],fieldData[4]);
			}

		// else if no conditionals
		} else {
			tempString = verifyField(formName,fieldData[0],fieldData[1],fieldData[2],fieldData[3]);
		}

		// if there was an error message from one of the above, add it to our list
		if (tempString != '') { 
			//alertErrors.length += 1;
			//alertErrors[alertErrors.length - 1] = tempString;
			alert(tempString);
			return false;
		}
	} // end for

//WILL NOT GET TO THIS NEXT IF STATEMENT
//WILL NOT GET TO THIS NEXT IF STATEMENT
//WILL NOT GET TO THIS NEXT IF STATEMENT
//WILL NOT GET TO THIS NEXT IF STATEMENT
//WILL NOT GET TO THIS NEXT IF STATEMENT
//WILL NOT GET TO THIS NEXT IF STATEMENT
	// if there are any errors, show them, and return false to block the form submit
	// this html part should really be in a separate config/strings file for easy maintenance
	if (alertErrors.length > 0) {
		var alertString = errHeader + '<ul>';
		for (var i = 0;i < alertErrors.length;i++) {
			alertString = alertString + '<li> ' + alertErrors[i];
		}
		alertString = alertString + '</ul><br>Please correct the errors and resubmit the form';
		myAlertWin.closeWin();
		myAlertWin.alert(errTitle,alertString);
		myAlertWin.win.focus();
		return false;
	} else {
		// verification passed, so return true and submit the form
		return true;
	}
}

// verify a single field arguments, from the above verifyForm
function verifyField(formName,fieldName,fieldType,verifyType,errMessage) {

	var verifyArgs = new Array();
	verifyArgs = verifyType.split('.');
	var errString = '';
	// getFieldValue is a method from the utilities file
	var valueString = getFieldValue(formName,fieldType,fieldName);
	// trim whitespace
	valueString = trimString(valueString);
	// default error message
	if (!errMessage || errMessage.length <= 0) {
		errMessage = 'Please input a valid entry for ' + fieldName + '. (You entered ' + valueString + ')';
	}

	// or special empty error message
	if (errMessage == 'noErrMsg')
		{errMessage = '';}
	
	// now verify whether the value fits the criteria
	// this could have probably been separated into a more efficient format than an endless series
	// of ifs
	
	// verify the word count
	if (verifyArgs[0] == 'words')
		{var tempWordsArray = valueString.split(' ');
		var wordsArray = new Array(0);

		for (var i = 0;i < tempWordsArray.length;i++)
			{if (tempWordsArray[i] != '' && tempWordsArray[i] != ' ') {
				wordsArray.length += 1;
				wordsArray[wordsArray.length - 1] = tempWordsArray[i];
				}
			}
		//min number of words
		if (verifyArgs[1] == 'min')
			{wordsArray.length >= verifyArgs[2]?errString = '':errString = errMessage;}

		//max number of words
		else if (verifyArgs[1] == 'max')
			{wordsArray.length <= verifyArgs[2]?errString = '':errString = errMessage;}			
		
		// must be of a minimum length
		else if (verifyArgs[1] == 'minlength')
			{valueString.length >= verifyArgs[2]?errString = '':errString = errMessage;}			
			
		// may not be over maximum length
		else if (verifyArgs[1] == 'maxlength')
			{valueString.length <= verifyArgs[2]?errString = '':errString = errMessage;}			
			
		// verify exact same as another field (for passwords)
		// other field in sameas.strFieldName
		else if (verifyArgs[1] == 'sameas'){
			//get field value again, no triming like above
			var valueString = getFieldValue(formName,fieldType,fieldName);
			var otherField = getFieldValue(formName,fieldType,verifyArgs[2]);			
			valueString == otherField ? errString = '' : errString = errMessage;			
		}
	}//if words

	// else verify email address format - works for .name, .com or .uk (4,3,2 last nodes)
	// a regular expression could also be used here, but at the time this was written older browsers were more common
	else if (verifyArgs[0] == 'email')
		{
		if (valueString.length < 6 
			||  valueString.indexOf('.') < 0 
			|| (valueString.charAt(valueString.length - 5) != '.' && valueString.charAt(valueString.length - 4) != '.' && valueString.charAt(valueString.length - 3) != '.') 
			|| valueString.indexOf('@') < 1 
			|| valueString.indexOf('@.') > -1) 
			{errString = errMessage;}
		else {errString = '';}
		}

	// verify if it's not null - once again, could have used a regular expression
	else if (verifyArgs[0] == 'notNull')
		{var valuesArray = new Array();
		valuesArray = valueString.split(' ');
		valueString = valuesArray.join('');
		valuesArray = valueString.split('.');
		valueString = valuesArray.join('');
		valuesArray = valueString.split(',');
		valueString = valuesArray.join('');
		valueString.length > 0 ? errString = '' : errString = errMessage;
		}

	else if (verifyArgs[0] == 'otherFieldNotNull'){
		// verifyArgs[1] = other fieldType, verifyArgs[2] = other fieldName
		var valueString = getFieldValue(formName,verifyArgs[1],verifyArgs[2]);
		// trim whitespace 
		valueString = trimString(valueString);
		// take out spaces, .'s nulls and ,'s and see if anything is left.
		var valuesArray = new Array();
		valuesArray = valueString.split(' ');
		valueString = valuesArray.join('');
		valuesArray = valueString.split('.');
		valueString = valuesArray.join('');
		valuesArray = valueString.split(',');
		valueString = valuesArray.join('');
		valueString.length > 0 ? errString = '' : errString = errMessage;
		}		

	// make sure it has no stopwords
	else if (verifyArgs[0] == 'notContaining')
		{valueString = valueString.toLowerCase();
		var bannedWords = new Array(0);
		for (var i = 1;i < verifyArgs.length;i++)
			{
			if (valueString.indexOf(verifyArgs[i].toLowerCase()) > -1)
				{
				bannedWords.length += 1;
				bannedWords[bannedWords.length - 1] = verifyArgs[i];
				}
			}

		if (bannedWords.length > 0)
			{errString = errMessage + 'You used the following banned words: ';
			for (var i = 0;i < bannedWords.length;i++)
				{errString = errString + ' ' + bannedWords[i] + ',';
				}
			}
		}

	// make sure it's not a certain value
	else if (verifyArgs[0] == 'not')
		{valueString.toLowerCase() != verifyArgs[1].toLowerCase() ? errString = '' : errString = errMessage;
		//alert(valueString.toLowerCase() + ' : ' + verifyArgs[1].toLowerCase() + ' : ' + errString);
		}

	// check format of zipcode
	else if (verifyArgs[0] == 'USZip')
		{var charArray = new Array;
		charArray = valueString.split(' ');
		valueString = charArray.join('');
		charArray = valueString.split('-');
		valueString = charArray.join('');
		var testString = parseInt(valueString,10);
		testString = testString.toString();

		if (valueString != testString
			|| (valueString.length != 5 && valueString.length != 9))
			{errString = errMessage;
			}
		else {errString = '';}
		}

	// and check format of phone numbers
	else if (verifyArgs[0] == 'USPhone')
		{var charArray = new Array;
		charArray = valueString.split(' ');
		valueString = charArray.join('');
		charArray = valueString.split('-');
		valueString = charArray.join('');
		charArray = valueString.split('(');
		valueString = charArray.join('');
		charArray = valueString.split(')');
		valueString = charArray.join('');
		var testString;
		valueString.length >= 10 ? testString = valueString.substring(0,10) : testString = valueString;
		testString = parseInt(testString,10);
		testString = testString.toString();

		if (testString.length != 10)
			{errString = errMessage;
			}
		else {errString = '';}
		}

	// and return error message, if any
	return errString;
}

