function agentform(form) {
	var overall = true;
	
	var fsubject = document.getElementById("fsubject").value;
	var fsubjectvalid = fsubject.length>0;
	if (!fsubjectvalid) errorMessage("fsubjectv","Please choose an enquiry type.");
	else errorMessage("fsubjectv","");
	overall = overall && fsubjectvalid;
	
	if (fsubject=="Refund Request" || fsubject=="Customer Query") {
		var fname = document.getElementById("fname").value;
		var fnamevalid = !empty(fname);
		if (!fnamevalid) errorMessage("fnamev","This is a required field.");
		else errorMessage("fnamev","");

		var femail = document.getElementById("femail").value;
		var fnoemail = document.getElementById("fnoemail").checked;
		var femailvalid = fnoemail || (!empty(femail) && email(femail));
		if (!femailvalid) errorMessage("femailv","Please enter a valid email address, or check the box below.");
		else errorMessage("femailv","");

		var fconfirm = document.getElementById("fconfirm").value;
		var fconfirmvalid = femail==fconfirm;
		if (!fconfirmvalid) errorMessage("fconfirmv","Your confirmation email does not match your first email, please try again.");
		else errorMessage("fconfirmv","");

		var fphone = document.getElementById("fphone").value;
		var fphonevalid = !fnoemail || !empty(fphone);
		if (!fphonevalid) errorMessage("fphonev","You must enter a valid phone number.");
		else errorMessage("fphonev","");
		
		overall = overall && fnamevalid && femailvalid && fconfirmvalid && fphonevalid;
		if (fsubject=="Refund Request") {
			var freqtype = "";
			for (var i=0; i<form.freqtype.length; i++) {
				if (form.freqtype[i].checked) freqtype=form.freqtype[i].value;
			}
			var freqtypevalid = !empty(freqtype);
			if (!freqtypevalid) errorMessage("freqtypev","Please choose a request type.");
			else errorMessage("freqtypev","");

			var fbank1 = document.getElementById("fbank1").value;
			var fbank2 = document.getElementById("fbank2").value;
			var fbank3 = document.getElementById("fbank3").value;
			var fbank4 = document.getElementById("fbank4").value;
			var fnobank = document.getElementById("fnobank").checked;
			var fbankvalid = fnobank || (!empty(fbank1) && !empty(fbank2) && !empty(fbank3) && !empty(fbank4));
			if (!fbankvalid) errorMessage("fbankv","Please enter a valid NZ bank account number, or check the box below.");
			else errorMessage("fbankv","");		
			
			overall = overall && freqtypevalid && fbankvalid;
		}
		
		/* check references */
		
		var firstinvalidref = -1;
		var firstinvalidrefn = -1;
		var nonempty = 0;
		
		if (firstinvalidref==-1)
		for (var i=1; i<=5 && firstinvalidrefn==-1; i++) {
			var nextref=[];
			var isempty=true;
			for (var j=1; j<=3; j++) {
				var nextpart = document.getElementById("freferencen"+j+i).value;
				if (nextpart.length>0) isempty=false;
				nextref[j-1]=nextpart;
			}		
			var nextrefvalid = isempty || (nextref[0].length==7 && nextref[1].length==4 && nextref[2].length==6);
			if (!isempty) nonempty++;
			if (!nextrefvalid) firstinvalidrefn = i;
		}
		if (nonempty>5) {
			errorMessage("freferencev","Please enter up to 5 booking references only in total.");
			overall=false;
		}
		else if (firstinvalidref!=-1) {
			errorMessage("freferencev","Please ensure the "+getnumber(firstinvalidref)+" old-format reference number is entered correctly.");
			overall=false;
		} else if (firstinvalidrefn!=-1) {
			errorMessage("freferencev","Please ensure the "+getnumber(firstinvalidrefn)+" new-format reference number is entered correctly.");
			overall=false;
		} else {
			errorMessage("freferencev","");
		}
	}
	
	if (fsubject=="Agent discounted Travel on nakedbus.com") {
		var discfrom = document.getElementById("fdiscfrom").value;
		if (empty(discfrom)) {
			errorMessage("fdiscfromv","Please enter the location you wish to travel from.");
			overall=false;
		} else errorMessage("fdiscfromv","");
		
		var discto = document.getElementById("fdiscto").value;
		if (empty(discto)) {
			errorMessage("fdisctov","Please enter the location you wish to travel to.");
			overall=false;
		} else errorMessage("fdisctov","");
		
		var discdate = document.getElementById("fdiscdate").value;
		var discreturn = document.getElementById("fdiscreturn").value;
		if (discreturn<discdate) {
			errorMessage("fdiscreturnv","Return date cannot be earlier than departure date.");
			overall=false;
		} else errorMessage("fdiscreturnv","");
	}
	
	return overall;
}
function getnumber(num) {
	if (num==1) return "first";
	if (num==2) return "second";
	if (num==3) return "third";
	if (num==4) return "fourth";
	if (num==5) return "fifth";
}
function empty(element) {
	return element==null || element.length==0;
}
function errorMessage(element, message) {
	element = document.getElementById(element);
	if (element) {
		element.innerHTML=message;
	}
}
function email(element) {
	var result = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(element);
	return result;
}

function swap(id,yes) {
	var theEl = document.getElementById(id);
	if (theEl) {
	if (yes) theEl.style.display='block';
	else theEl.style.display='none';
	}
}

function enquiry(id) {
	swap('showcustinfo',id=='Refund Request' || id=='Customer Query');
	swap('showreqtype',id=='Refund Request');
	swap('showbank',id=='Refund Request');
	swap('showdiscount',id=='Agent discounted Travel on nakedbus.com');
	swap('showdetails',id!='Agent discounted Travel on nakedbus.com');
}
