function emailValidation(entered, origText) {
	var alertSpan = entered.nextSibling.nextSibling;
	var oldText = alertSpan.childNodes[0];

	with (entered) {
		if (value==null || value=='') {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(origText);
			return false;
		} else {
			var emailFilter=/^.+@.+\..{2,3}$/;
			var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/;

			if (!(emailFilter.test(value))) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('Please enter a valid e-mail address.'));
				return false;
			}

			if (value.match(illegalChars)) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('The email address contains illegal characters.'));
				return false;
			} else {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode(''));
				return true;
			}
		}
	}
}


function phoneValidation(entered, origText) {
	var alertSpan = entered.nextSibling.nextSibling;
	var oldText = alertSpan.childNodes[0];

	with (entered) {
		if (value==null || value=='') {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(origText);
			return false;
		} else {
			var stripped = value.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters
			if (isNaN(parseInt(stripped))) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('Phone number contains illegal characters.'));
				return false;
			}

			if (stripped.length < 10) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('Phone number must contain at least ten (10) digits.'));
				return false;
			} else {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode(''));
				return true;
			}
		}
	}
}


function ssnValidation(entered, origText) {
	var alertSpan = entered.nextSibling.nextSibling;
	var oldText = alertSpan.childNodes[0];

	with (entered) {
		if (value==null || value=='') {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(origText);
			return false;
		} else {
			var stripped = value.replace(/[\-\ ]/g, ''); //strip out acceptable non-numeric characters

			if (isNaN(parseInt(stripped))) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('SSN contains illegal characters.'));
				return false;
			}

			if (stripped.length != 9) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('SSN must contain nine (9) digits.'));
				return false;
			} else {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode(''));
				return true;
			}
		}
	}
}


function zipValidation(entered, origText) {
	var alertSpan = entered.nextSibling.nextSibling;
	var oldText = alertSpan.childNodes[0];

	with (entered) {
		if (value==null || value=='') {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(origText);
			return false;
		} else {
			var stripped = value.replace(/[\-\ ]/g, ''); //strip out acceptable non-numeric characters

			if (isNaN(parseInt(stripped))) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('Zip code contains illegal characters.'));
				return false;
			}

			if (stripped.length < 5) {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode('Zip code must contain at least five (5) digits.'));
				return false;
			} else {
				alertSpan.removeChild(oldText);
				alertSpan.appendChild(document.createTextNode(''));
				return true;
			}
		}
	}
}


function emptyValidation(entered, origText) {
	var alertSpan = entered.nextSibling.nextSibling;
	var oldText = alertSpan.childNodes[0];

	with (entered) {
		if (value==null || value=='') {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(origText);
			return false;
		}
		else {
			alertSpan.removeChild(oldText);
			alertSpan.appendChild(document.createTextNode(''));
			return true;
		}
	}
}


function submitStatus(input, enableSubmit) {
	var reqInputs = new Array();
	var reqIndex = 0;
	for (i=0; i<input.form.elements.length; i++) {
		//if (input.form.elements[i].getAttribute('class') == 'required') {
		if (hasClass(input.form.elements[i], 'required') && input.form.elements[i].tagName == 'input') {
			if (input.form.elements[i].getAttribute('id').match('email')) {
				if (emailValidation(input.form.elements[i], origText[input.form.elements[i].getAttribute('id')])) {
					enableSubmit = true;
				} else {
					enableSubmit = false;
					break;
				}
			}
			if (input.form.elements[i].getAttribute('id').match('phone')) {
				if (phoneValidation(input.form.elements[i], origText[input.form.elements[i].getAttribute('id')])) {
					enableSubmit = true;
				} else {
					enableSubmit = false;
					break;
				}
			}
			if (input.form.elements[i].getAttribute('id').match('ssn')) {
				if (ssnValidation(input.form.elements[i], origText[input.form.elements[i].getAttribute('id')])) {
					enableSubmit = true;
				} else {
					enableSubmit = false;
					break;
				}
			}
			if (input.form.elements[i].getAttribute('id').match('zip')) {
				if (zipValidation(input.form.elements[i], origText[input.form.elements[i].getAttribute('id')])) {
					enableSubmit = true;
				} else {
					enableSubmit = false;
					break;
				}
			} else {
				if (emptyValidation(input.form.elements[i], origText[input.form.elements[i].getAttribute('id')])) {
					enableSubmit = true;
				} else {
					enableSubmit = false;
					break;
				}
			}
		}
	}
	for (i=0; i<input.form.elements.length; i++) {
		if (input.form.elements[i].getAttribute('type') == 'submit') {
			if (enableSubmit) {
				input.form.elements[i].disabled = false;
				input.form.elements[i].style.opacity = '100'; //CSS3 property (Firefox)
				input.form.elements[i].style.filter = 'alpha(opacity=100)'; //IE6 only
				input.form.elements[i].style.cursor = 'pointer';
			} else {
				input.form.elements[i].disabled = true;
				input.form.elements[i].style.opacity = '.25'; //CSS3 property (Firefox)
				input.form.elements[i].style.filter = 'alpha(opacity=25)'; //IE6 only
				input.form.elements[i].style.cursor = 'default';
			}
		}
	}
}


var origText = new Array();

function getFormData() {
	var reqInputs = new Array();
	
	var inputs = document.getElementsByTagName('input');

	for (i=0; i<inputs.length; i++) {
		//if (inputs[i].getAttribute('class') == 'required') {
		if (hasClass(inputs[i], 'required')) {
			reqInputs[i] = inputs[i];

			if (reqInputs[i].nextSibling.nextSibling.childNodes[0]) {
				origText[reqInputs[i].getAttribute('id')] = reqInputs[i].nextSibling.nextSibling.childNodes[0];
				reqInputs[i].setAttribute('autocomplete', 'off'); //Mozilla 'selectedIndex' JavaScript console error workaround

				if (reqInputs[i].getAttribute('id').match('email')) {
					reqInputs[i].onkeyup = function() {
						submitStatus(this, emailValidation(this, origText[this.getAttribute('id')]));
					}
				} else if (reqInputs[i].getAttribute('id').match('phone')) {
					reqInputs[i].onkeyup = function() {
						submitStatus(this, phoneValidation(this, origText[this.getAttribute('id')]));
					}
				} else if (reqInputs[i].getAttribute('id').match('ssn')) {
					reqInputs[i].onkeyup = function() {
						submitStatus(this, ssnValidation(this, origText[this.getAttribute('id')]));
					}
				} else if (reqInputs[i].getAttribute('id').match('zip')) {
					reqInputs[i].onkeyup = function() {
						submitStatus(this, zipValidation(this, origText[this.getAttribute('id')]));
					}
				} else {
					reqInputs[i].onkeyup = function() {
						submitStatus(this, emptyValidation(this, origText[this.getAttribute('id')]));
					}
				}
			}
			for (i2=0; i2<reqInputs[i].form.elements.length; i2++) {
				if (reqInputs[i].form.elements[i2].getAttribute('type') == 'submit') {
					reqInputs[i].form.elements[i2].disabled = true;
					reqInputs[i].form.elements[i2].style.opacity = '.25'; //CSS3 property (Firefox)
					reqInputs[i].form.elements[i2].style.filter = 'alpha(opacity=25)'; //IE6 only
					reqInputs[i].form.elements[i2].style.cursor = 'default';
				}
			}
		}
	}
}

addLoadEvent(getFormData);