
function validateForm(allfields,formname) {
	errormessage=null;
	var cutfields=allfields.split(",");
	for (x=0; x < cutfields.length; x++){
		singlefield=cutfields[x].replace(/<e>|<n>|<p>|<rn[0-9]+>|<[0-9]+>|<dob>|<c>|<u>/g,'');	
		with(eval('document.forms[formname].'+singlefield)){
			(value == '')? errormessage='Please enter your '+fieldconverter[x] : notanemptyfield=true;
			(cutfields[x].match(/<c>/g) && selectedIndex==0 && length>1)? errormessage='Please select your '+fieldconverter[x] : notaselectedfield=true;
			(cutfields[x].match(/<u>/g))? checkUserName(value) : uname=true;
			if (cutfields[x].match(/<p>/g)){
				checkInvalidChar(value,"`¬!\"£$%^&*()=+\\|,<>/?;:'##~[]{} @.-_");
				(value.match(/[^A-Za-z0-9]+/))? seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid.  It must only contain alpha-numeric characters.') : password=true;
			}			
			if (cutfields[x+1]){
				(cutfields[x].match(/<p>/g) && cutfields[x+1].match(/<p>/g))? matchpasswords(value,cutfields[x+1],formname) : passwordsmatch=true;
			}
			(cutfields[x].match(/<dob>/g))? checkdob(value) : adobfield=true;
			(cutfields[x].match(/<n>/g) && isNaN(value.replace(/ |-+/g,"")))? seterrormessage('Sorry, your '+fieldconverter[x]+' must be an number') : anumberedfield=true;
			(cutfields[x].match(/<rn[0-9]+>/g))? checkrestrictednumber(value,cutfields[x].match(/\d+/g)) : restrictednumberedfield=true;
			if (value){(value.length < cutfields[x].match(/\d+/gi) && cutfields[x].match(/<rn[0-9]+>/g) != true)? seterrormessage('Sorry, your '+fieldconverter[x]+' is shorter than the required '+cutfields[x].match(/\d+/gi)+' characters in length') : requiredmininumfieldlength=true;}			
			(cutfields[x].match(/<e>/g) && value != '')? validateemailaddress(value) : emailvalidated=true;			
			if (errormessage != null){
				alert(errormessage);
				myFieldType = type.toLowerCase();
				if (myFieldType != "hidden") {focus();}
				return false;
			}
		}			
	}	
	return true;
}
	
function seterrormessage(text){
	(errormessage)? (errormessage == null)? errormessage=text : uselasterrormessage=true : errormessage=text
}

function checkdob(jsnumber){
	currentdate=new Date();
	maxyear=currentdate.getFullYear()-17;
	(isNaN(jsnumber))? seterrormessage('Sorry, your '+fieldconverter[x]+' must be an number') : anumberedfield=true ;
	(jsnumber < 1900)? seterrormessage('Sorry, your '+fieldconverter[x]+' must be after 1900') : dobminyear=true ;
	(jsnumber > maxyear)? seterrormessage('Sorry, your '+fieldconverter[x]+' must be before '+maxyear+' to use this service') : dobmaxyear=true
}

function checkrestrictednumber(jsnumber,jslength){
	parsednumber=jsnumber.replace(/ |-+/g,"");
	(isNaN(parsednumber))? seterrormessage('Sorry, your '+fieldconverter[x]+' must be an number') : anumberedfield=true ;
	(parsednumber.length < jslength)? seterrormessage('Sorry, your '+fieldconverter[x]+' is less than the '+jslength+' digits required') : lessthanjslength=false ;
	(parsednumber.length > jslength)? seterrormessage('Sorry, your '+fieldconverter[x]+' is more than the '+jslength+' digits required') : greaterthanjslength=false
}
	
function matchpasswords(first,second,formname){
	nextsinglefield=second.replace(/<e>|<n>|<p>/g,'');
	nextsinglefield=nextsinglefield.match(/[a-z]+/gi);
	with(eval('document.forms[formname].'+nextsinglefield)){
		(value == '')? uselasterrormessage=true : uselasterrormessage=false;
		(first != value && uselasterrormessage == false)? seterrormessage('Sorry, your passwords do not match') : passwordsmatch=true
	}
}	

function validateemailaddress(emailaddress){
	checkInvalidChar(emailaddress,"¬!\"£$%^&*()=+\\|,<>/?;:##~[]{} ");
	(emailaddress.match(/\.\./))? seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid, it has a double full stop.') : address=true;
	(emailaddress.match(/^[A-Za-z0-9]+[A-Za-z0-9'\.\-_]*\@[A-Za-z0-9]+[A-Za-z0-9\.\-_]*\.+[A-Za-z0-9]+$/))? address=true : seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid');
}

function checkInvalidChar(fieldContents,invalidChar) {
	for (var i=0, output='', iChar=invalidChar;i<fieldContents.length; i++) {
		if (iChar.indexOf(fieldContents.charAt(i)) != -1) {output += fieldContents.charAt(i).replace(" ","space") + " ";}
		output = output.replace(",","comma");
  	}
	if (output){seterrormessage('The following invalid characters were found in your '+fieldconverter[x]+':\n\n'+output)}
}

function checkUserName(fieldContents) {
	checkInvalidChar(fieldContents,"`¬!\"£$%^&*()=+\\|,<>/?;:##~[]{} @.");
	(fieldContents.match(/^[a-zA-Z]+/))? address=true : seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid.  It must start with a letter.');
	(fieldContents.match(/[a-zA-Z0-9]+$/))? address=true : seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid.  It must end with an alpha-numeric character.');
	(fieldContents.match(/^[a-zA-Z]+[-\w+]*[a-zA-Z0-9]+$/))? address=true : seterrormessage('Sorry, your '+fieldconverter[x]+' is not valid.  It must only contain alpha-numeric characters, hyphens and underscores.');
}	

function chkradios(variableid,errormessage){
	if (eval(variableid) == false){
		alert(errormessage);
		return false
	}
}
