function vGetElementsByClassName(rootNode, className) {
	var children = rootNode.getElementsByTagName('*');
	var elements = [], child, pattern = new RegExp('(^|\\s)' + className + '(\\s|$)');
	for (var i = 0, length = children.length; i < length; i++) {
		child = children[i];
		var elementClassName = child.className;
		if (elementClassName.length == 0) continue;
		if (elementClassName == className || elementClassName.match(pattern))
			elements.push(child);
	}
	return elements;
}

function vGetInputElements(rootNode, inputType) {
	var children = rootNode.getElementsByTagName('input');
	var elements = [], child, pattern = new RegExp('(^|\\s)'+inputType+'(\\s|$)');
	for (var i = 0, length = children.length; i < length; i++) {
		child = children[i];
		var elementType = child.type;
		if (elementType.length == 0) continue;
		if (elementType == inputType || elementType.match(pattern))
			elements.push(child);
	}
	return elements;
}
document.formatPhone = function() {
	var phoneField = document.getElementsByName('phone');
	if(phoneField.length < 1)return false;
		else phoneField=phoneField[0];
	
	phoneField.value=phoneField.value.replace(/[^0-9]/g, "");
	if (phoneField.value.length==10)
		return true;
	
	fieldError(phoneField);
	return false;
}

function validateForm(that) {
	var success = true;
	var onlyReq = vGetElementsByClassName(that.form, 'required');
	for (i=0;i<onlyReq.length;i++) {
		if (onlyReq[i].nodeName.toLowerCase() == 'input' || onlyReq[i].nodeName.toLowerCase() == 'select' ||
		 onlyReq[i].nodeName.toLowerCase() == 'textarea')
		{
			if (onlyReq[i].value == '' && onlyReq[i].type != 'hidden') {
				fieldError(onlyReq[i]);
				success = false;
			} else {
				fieldPass(onlyReq[i]);
			}
		}
	}
	var onlyNum = vGetElementsByClassName(that.form, 'numeric');
	for (i=0;i<onlyNum.length;i++) {
		if (onlyNum[i].value != '' && parseInt(onlyNum[i].value) == onlyNum[i].value && onlyReq[i].type != 'hidden') {
			fieldPass(onlyNum[i]);
		} else {
			fieldError(onlyNum[i]);
			success = false;
		}
	}
	var onlyRadio = vGetInputElements(that.form, 'radio'), radioNames = [];
	for (i=0;i<onlyRadio.length;i++) {
		if (onlyRadio[i].className.match(/(^|s)required(s|$)/)) {
			radioNames[onlyRadio[i].name] |= onlyRadio[i].checked;
		}
	}
	for (inputName in radioNames) {
		radioInputs = document.getElementsByName(inputName);
		if (!radioNames[inputName]) {
			for (i=0;i<radioInputs.length;i++) {
				fieldError(radioInputs[i].parentNode);
				success = false;
			}
		} else {
			for (i=0;i<radioInputs.length;i++) {
				fieldPass(radioInputs[i].parentNode);
			}
		}
	}
	var onlyCheckbox = vGetInputElements(that.form, 'checkbox'), checkboxNames = [];
	for (i=0;i<onlyCheckbox.length;i++) {
		if (onlyCheckbox[i].className.match(/(^|s)required(s|$)/)) {
			checkboxNames[onlyCheckbox[i].name] |= onlyCheckbox[i].checked;
		}
	}
	for (inputName in checkboxNames) {
		radioInputs = document.getElementsByName(inputName);
		if (!checkboxNames[inputName]) {
			for (i=0;i<radioInputs.length;i++) {
				fieldError(radioInputs[i].parentNode);
				success = false;
			}
		} else {
			for (i=0;i<radioInputs.length;i++) {
				fieldPass(radioInputs[i].parentNode);
			}
		}
	}
//    if(!document.formatPhone())
//		success=false;
	if (!success) {
		alert('Please complete all required fields');
	}
	return success;
}
function fieldPass(that) {
	that.className = that.className.replace(/(^|s)error(s|$)/g,' ');
}
function fieldError(that) {
	that.className += ' error';
}