function validateFields() {
	// grab the fields in the form and the form itself
	var name = document.getElementById('name');
	var practice = document.getElementById('practice');
	var email = document.getElementById('email');
	var telephone = document.getElementById('telephone');
	var refer = document.getElementById('refer');
	var website = document.getElementById('website');
	var partners = document.getElementById('partners');
	var staff = document.getElementById('staff');
	var audit = document.getElementById('audit');
	var member = document.getElementById('member');
	var telemarketing = document.getElementById('telemarketing');
	var growth = document.getElementById('growth');
	var optional = document.getElementById('optional');

	var whiteSpace = /^[\s]+$/;
	var okToSend = true;
	
	// Check to see if a required field is blank or null. If so, set an error message.
	if ( name.value == '' || whiteSpace.test(name.value) ) {
		setError("Please enter your name / company");
		okToSend = false;
	} else if ( practice.value == '' || whiteSpace.test(practice.value) ) {
		setError("Please enter the name of your practice");
		okToSend = false;
	} else if(!emailCheck(email.value)){
		okToSend = false;
	} else if ( telephone.value == '' || whiteSpace.test(telephone.value) ) {
		setError("Please enter your telephone number");
		okToSend = false;
	} else if ( refer.value == '' || whiteSpace.test(refer.value) ) {
		setError("Please tell us how you heard of us");
		okToSend = false;
	} else if ( website.value == '' || whiteSpace.test(website.value) ) {
		setError("Please enter your website's URL");
		okToSend = false;
	} else if ( partners.value == '' || whiteSpace.test(partners.value) ) {
		setError("Please enter the number of partners at your practice");
		okToSend = false;
	} else if ( staff.value == '' || whiteSpace.test(staff.value) ) {
		setError("Please enter the number of staff at your practice");
		okToSend = false;
	} else if ( audit.value == '' || whiteSpace.test(audit.value) ) {
		setError("Please tell us if you undertake audit work");
		okToSend = false;
	} else if ( member.value == '' || whiteSpace.test(member.value) ) {
		setError("Please supply details of any associations / networks your practice is a member of");
		okToSend = false;
	} else if ( telemarketing.value == '' || whiteSpace.test(telemarketing.value) ) {
		setError("Please tell us if you have tried telemarketing previously");
		okToSend = false;
	} else if ( growth.value == '' || whiteSpace.test(growth.value) ) {
		setError("Please tell us how soon you can attend appointments");
		okToSend = false;
	}

	// If any of the checks for required information failed, 	
	if(okToSend == true){
		sendEmail();
	}
}

function setError(message){
	document.getElementById("feedback").innerHTML=message;
}

/**
 * Sends the actual data in the form to the server via an AJAX request.
 * Change this method to extract whatever data you need to be taken from
 * the form and uploaded to the server.
**/
function sendEmail () {
	// grab the fields in the form and the form itself
	var pname = document.getElementById('name');
	var ppractice = document.getElementById('practice');
	var pemail = document.getElementById('email');
	var ptelephone = document.getElementById('telephone');
	var prefer = document.getElementById('refer');
	var pwebsite = document.getElementById('website');
	var ppartners = document.getElementById('partners');
	var pstaff = document.getElementById('staff');
	var paudit = document.getElementById('audit');
	var pmember = document.getElementById('member');
	var ptelemarketing = document.getElementById('telemarketing');
	var pgrowth = document.getElementById('growth');
	var poptional = document.getElementById('optional');

	// the page on the server that sends the email
	var page = "includes/register.php?contact=true&xml=true";
	showContactTimer(); // quickly begin the load bar
	
	// convert (&, +, =) to string equivs. Needed so URL encoded POST won't choke.
	var name = cleanString(pname.value);
	var practice = cleanString(ppractice.value);
	var email = cleanString(pemail.value);
	var telephone = cleanString(ptelephone.value);
	var refer = cleanString(prefer.value);
	var website = cleanString(pwebsite.value);
	var partners = cleanString(ppartners.value);
	var staff = cleanString(pstaff.value);
	var audit = cleanString(paudit.value);
	var member = cleanString(pmember.value);
	var telemarketing = cleanString(ptelemarketing.value);
	var growth = cleanString(pgrowth.value);
	var optional = cleanString(poptional.value);

	// create the data that is to be sent
	var data = "name="+name+
				"&practice="+practice+
				"&email="+email+
				"&telephone="+telephone+
				"&refer="+refer+
				"&website="+website+
				"&partners="+partners+
				"&staff="+staff+
				"&audit="+audit+
				"&member="+member+
				"&telemarketing="+telemarketing+
				"&growth="+growth+
				"&optional="+optional;
	// put the data into the request to be sent to the server
	loadXMLPosDoc(page,data);
}

/**
 * Cleans a string so that it can go in a string
**/
function cleanString(str){
	str = str.replace(/&/g,"**am**");
	str = str.replace(/=/g,"**eq**");
	str = str.replace(/\+/g,"**pl**");
	return str;
}

function showContactTimer () {
	var loader = document.getElementById('feedback');
	loader.innerHTML = "<img src=\"sitefiles/sending.gif\">";
	sentTimer = setTimeout("hideContactTimer()",6000);
}

function hideContactTimer () {
	var loader = document.getElementById('feedback');
	loader.innerHTML = grabPosXML("confirmation");
}

function ajaxContact() {
	var frmEl = document.getElementById('register');
	addEventForForms(frmEl, 'submit', validateFields, false);
	frmEl.onsubmit = function() { return false; }
}
addEventForForms(window, 'load',ajaxContact, false);