// FORM VALIDATION
// http://juicystudio.com/article/generic-form-validation.php
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//

function checkForm(objForm) {
	var arClasss;
	var arClass;
	var bValid;
	var errMessage;
	var errFlag;
	var sp;
	var x;
	var i;
	var objField;
	var objFields = objForm.getElementsByTagName('*');
	
	resetMessages();
	
	for (i = 0, objField; objField = objFields[i]; i++) {
		// Check for fields with the class 'error' and reset them for another round of validation
		objField.className=objField.className.replace("errorField", "formField");
		
		// Allow for multiple values being assigned to the class attribute
		arClasss = objField.className.split(' ');
		for (x = 0, arClasss; arClass = arClasss[x]; x++) {
			switch (arClass) {
				case 'required' :
				bValid = isRequired(objField.value.replace(/^\s*|\s*$/g, ''));
				errMessage = 'this field is required';
				break;
				case 'number' :
				bValid = isNumber(objField.value);
				errMessage = 'please enter a number';
				break;
				case 'phone' :
				bValid = isPhone(objField.value);
				errMessage = 'please enter a valid phone number';
				break;
				case 'email' :
				bValid = isEmail(objField.value);
				errMessage = 'Please enter a valid email address';
				break;
				case 'creditCard' :
				bValid = isCreditCard(objField.value);
				errMessage = 'please enter a valid credit card number';
				break;
				default:
				bValid = true;
			}
			// if an error has been detected, take action
			if (bValid == false) {
				addErr(objField,errMessage);
				errFlag = true;
			}
		}
	}
	// if there are errors, do not submit the form
	if (errFlag == true) {
		return false;
	} else {
		return true;
	}
}

function resetMessages() {
	var div;
	var divs;
	var span;
	var spans;
	
	divs = document.getElementsByTagName('div');
	for (i = 0, div; div = divs[i]; i++) {
		if (div.className == 'error') {
			// not the best, find something else
			div.className = "";
		}
	}
	
	spans = document.getElementsByTagName('span');
	for (i = 0, span; span = spans[i]; i++) {
		if (span.className == 'error') {
			// not the best, find something else
			span.style.display = "none";
		}
	}
}

function addErr(o,message) {
	var sp;
	
	o.className=o.className.replace("formFieldFocus", "errorField");
	o.className=o.className.replace("formField", "errorField");
	sp = document.createElement('span');
	sp.className = 'error';
	sp.appendChild(document.createTextNode(message));
	o.parentNode.appendChild(sp);
	o.parentNode.className="error";
}

// VALIDATION FUNCTIONS

function isRequired(strValue) {
	return (strValue != '');
}

function isNumber(strValue) {
	return (!isNaN(strValue) && strValue != '');
}

function isPhone(strValue) {
	var objRE = /^[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}$/;
	return (strValue != '' && objRE.test(strValue));
}

function isEmail(strValue) {
	var objRE = /^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}$/;
	return (strValue != '' && objRE.test(strValue));
}

function isCreditCard(strValue) {
	var objRE = /(\d{6}[-\s]?\d{12})|(\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})/;
	return (strValue != '' && objRE.test(strValue));
}