function formValidator() {
	
	this.formFields = new Array;
	
	this.formFieldsElementId = new Array;
	
	this.addFormField = addFormField;
	
	this.validateFormValue = validateFormValue;
	
	this.validateEmailAddress = validateEmailAddress;
	
	this.validationFields = new Array;
	
	this.validateForm = validateForm;
	
	this.formErrors = new Array;
	
	this.setFormError = setFormError;
}


function addFormField(documentObject,elementId,label,validationType,isRequired) {
	
	var index = this.formFields.length;
	
	this.formFields[index] = new Array;
	
	this.formFieldsElementId[elementId] = index;
	
	//var elementObject = getEnclosedDocumentObject(documentObject,elementId);

	this.formFields[index]['elementId'] = elementId;
	
	this.formFields[index]['label'] = label;
	
	this.formFields[index]['documentObject'] = documentObject;
	
	this.formFields[index]['validationType'] = validationType;
	
	this.formFields[index]['isRequired'] = isRequired;
}


function validateForm() {
	
	var errorCount = 0;
	
	this.formErrors = new Array;
	
	for (var i = 0; i < this.formFields.length; i++) {
	
		var formFieldObject = getEnclosedDocumentObject(this.formFields[i]['documentObject'],
														this.formFields[i]['elementId']);
	
		var formFieldValue = formFieldObject.value;
		
		if (this.formFields[i]['isRequired']) {
		
			if (formFieldValue.length < 1) {
				//alert('got required errors');
				
				var requiredErrorMessage = 'This information is required. Please enter it and try again.';
				this.setFormError(this.formFields[i]['elementId'],'required',requiredErrorMessage,'add');
				
				errorCount++;
				
				// required error so no more checking
				continue;
			} 
		}
		
		if (this.formFields[i]['validationType']) {
		
			var validateResult = this.validateFormValue(this.formFields[i]['validationType'],formFieldValue);
			
			if (validateResult) {
				//alert(validateResult);
				this.setFormError(this.formFields[i]['elementId'],
									this.formFields[i]['validationType'],
									validateResult,
									'add');
				
				errorCount++;
			}
		}
	}
	
	if (errorCount == 0) {

		return false;
	
	} else {

		return this.formErrors;
	}
}

// action means add/delete
function setFormError(elementId,errorType,errorMessage) {
		
	var formErrorsLength = this.formErrors.length;
	
	if (this.formErrors[formErrorsLength] == undefined) {
	
		this.formErrors[formErrorsLength] = new Array;
	}
	
	this.formErrors[formErrorsLength]['elementId'] = elementId;
	
	this.formErrors[formErrorsLength]['errorType'] = errorType;
	
	this.formErrors[formErrorsLength]['errorMessage'] = errorMessage;
	
}



function validateFormValue(validationType,value) {
	
	switch (validationType) {
	
		case "email":
		
			return this.validateEmailAddress(value);
			break;
		
		case "text":
		
			return false;
			break;
	}
}


function validateText(value) {

	return true;
}

function validateEmailAddress(emailAddress) {

	var warning = false;
	
    if (-1 == emailAddress.indexOf("@")) { 
       warning = "Your email address must have an '@'."; 
       return warning; 
    }
    
    if (-1 != emailAddress.indexOf(",")) { 
       warning = "Your email address must not have a ',' in it"; 
       return warning; 
    }
    
    if (-1 != emailAddress.indexOf("#")) { 
       warning = "Your email address must not have an '#' in it."; 
       return warning; 
    }
    
    if (-1 != emailAddress.indexOf("!")) { 
       warning = "Your email address must not have an '!' in it."; 
       return warning; 
    }
    
    if(-1 != emailAddress.indexOf(" ")) { 
       warning = "Your email address must not have a space in it."; 
       return warning; 
    }
    
    if(emailAddress.length == (emailAddress.indexOf("@")+1) ) { 
      warning = "Your email address must have a domain name after the '@'."; 
      return warning; 
    }
    
    return warning;
}
