/*	Form validation 
==================================================*/
	//  Error messages to be displayed in error label
	var validationErrorMessage = new Object();
		validationErrorMessage['postal_code'] = 'Invalid code';
		validationErrorMessage['phone'] = 'XXX-XXX-XXXX';
		validationErrorMessage['email'] = 'Invalid email address';
	
	function isRequired (formField) {
		switch (formField.type) {
			case "text":
			case "textarea":
			case "select-one":
				if (formField.value) {
					return true;
				}
			return false;
			
			case "checkbox":
				return formField.checked;
				
			case "radio":
				var radios = formField.form[formField.name];
					for (var i = 0; i < radios.length; i++) {
						if (radios[i].checked) {
							return true;
						}
					}
			return false;
			
			default: 
				return true;
		}
	}
	
	function isPattern(formField, pattern) {
		var pattern = pattern; 
		var regExp = new RegExp(pattern);
		var correct = regExp.test(formField.value);
		
		return correct;
	}
	
	function isValidPostal(formField) {
		return isPattern(formField, "(^[0-9]{5}(-[0-9]{4})?$)|(^[ABCEGHJKLMNPRSTVXY][0-9][A-Z] ?[0-9][A-Z][0-9]$)");
	}
	
	function isValidEmail(formField) {
		return isPattern(formField, "^[a-zA-Z0-9._+%-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$");
	}
	
	function isValidPhone(formField) {
		return isPattern(formField, "^[0-9]{3}-[0-9]{3}-[0-9]{4}$");
	}

	function validate () {
		var validForm = true;
		
		var formFields = this.elements;
		
		for (var i = 0; i < formFields.length; i++) {
			var OK, requiredFirst = true;
			
			var required = formFields[i].getAttribute('validation');
			
			if (!required) continue;
			
			switch (formFields[i].id) {
				case "year_in_school":
				case "field_of_study":
				case "destination_of_interest":
				case "session_of_interest":
				case "state_of_institution":
				case "institution":
				case "gpa":
				case "first_name":
				case "last_name":
				case "address":
				case "city":
				case "state":
				case "country":
					OK = isRequired(formFields[i]);
				break;
				
				case "postal_code":
					OK = isRequired(formFields[i]);
					if (OK) { 
						OK = isValidPostal(formFields[i]);
						requiredFirst = false;
					}
				break;
				
				case "phone":
					OK = isRequired(formFields[i]);
					if (OK) { 
						OK = isValidPhone(formFields[i]);
						requiredFirst = false;
					}
				break;
				
				case "email":
					OK = isRequired(formFields[i]);
					if (OK) { 
						OK = isValidEmail(formFields[i]);
						requiredFirst = false;
					}
				break;
			}
			
			if (!OK) {
				var errorMessage = ""; 
				if (!requiredFirst) {
					errorMessage =  validationErrorMessage[formFields[i].id];
				}
				
				writeError(formFields[i], errorMessage);
				
				validForm = false;
			}
		}
		
		return validForm;
	}
	
/*	Error handling
==================================================*/
	function writeError(formField, message) {
		formField.className = 'errorMessage';
		formField.onfocus = removeError;

		switch (formField.id) {
			case "postal_code":
				document.popOverForm.postal_code.value = message;
			break;
			
			case "phone":
				document.popOverForm.phone.value = message;
			break;
			
			case "email":
				document.popOverForm.email.value = message;
			break;
		}
		
		formField.onfocus = removeError;
	}

	function removeError() {
		this.className = "";
		this.value = "";
		this.onfocus = null;
	}