function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function clearInnerHTML(obj) {
	// so long as obj has children, remove them
	while(obj.firstChild) obj.removeChild(obj.firstChild);
}

function clearFeedback(obj) {
	//clear anything that isn't an input, textarea or label
	for (var i=0;i<obj.childNodes.length;i++) {
		if (obj.childNodes[i].nodeType == 1) {
			var tagName = obj.childNodes[i].tagName.toLowerCase();
			if ((tagName != 'input') && (tagName != 'textarea') && (tagName != 'label')) { 
				obj.removeChild(obj.childNodes[i]);
			}
		}
	}
}

function validateForm() {
	
	var formInputs = new Array();
	var formTextAreas = new Array();
	var formErrors = new Array();
	var errorCount = 0;
	var regEx = "";
	var currentFeedbackElem = null;
	var currentParentElem = null;
	
	//first get all elements from the form and put them into arrays
	formInputs = this.getElementsByTagName('input');
	formTextAreas = this.getElementsByTagName('textarea');
	
	//Loop through the elements and validate them depending on their class attribute
	for (var i=0;i<formInputs.length;i++)
	{
	
		formErrors[i] = "";
		
		//First check to see if this is a required field
		if (formInputs[i].className.indexOf("required") >= 0) {
			if (trim(formInputs[i].value) == "") {
				formErrors[i] = 'This field is required';
			}
		}
		
		//If required check is ok check to see if the className contains any of the specified datatypes to validate
		if (formErrors[i] == "") {
			if (formInputs[i].className.indexOf("email") >= 0) {
				regEx = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
				if (!regEx.test(trim(formInputs[i].value))) {
					formErrors[i] = 'Please enter a valid e-mail address';
				}
			} else if (formInputs[i].className.indexOf("tel_no") >= 0) {
				regEx = /^\+?[0-9 ()-]+[0-9]$/;
				if (!regEx.test(trim(formInputs[i].value))) {
					formErrors[i] = 'Please enter a valid telephone number';
				}
			} else if (formInputs[i].className.indexOf("postcode") >= 0) {
				regEx = /^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/;
				if (!regEx.test(trim(formInputs[i].value))) {
					formErrors[i] = 'Please enter a valid UK Postcode (eg: A11 1AA)';
				}
			} else if (formInputs[i].className.indexOf("date") >= 0) {
				regEx = /^(0[1-9]|[12][0-9]|3[01])[-](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[-](19|20)\d\d$/i;
				if (!regEx.test(trim(formInputs[i].value))) {
					formErrors[i] = 'Please enter a valid Date';
				}
			}
		}
		
		if (formErrors[i] != "") {
			errorCount++;
			formInputs[i].style.backgroundColor = "#F7C997";
			currentParentElem = formInputs[i].parentNode;
			clearFeedback(currentParentElem);
			currentFeedbackElem = document.createElement('p');
			currentFeedbackElem.appendChild(document.createTextNode(formErrors[i]));
			currentFeedbackElem.className = "form_error";
			currentParentElem.appendChild(currentFeedbackElem);	
		} else {
			formInputs[i].style.backgroundColor = "";
			currentParentElem = formInputs[i].parentNode;
			clearFeedback(currentParentElem);
		}
		
	}
	
	return(errorCount == 0);
	
}


function init_contactpage() {
	if (document.getElementById) {
		document.getElementById('contact_form').onsubmit = validateForm;
	}
}
