function validate(x,type,length){
	var value = x.value;
	// A switch statement to determine what kind of validation to do, text or number etc
	switch(type)
	{
	
	case "text":
		if(isText(value) && !isNumber(value) && value.length <= length){
			informUser("correct",x.id);
		}else{
			informUser("error",x.id);
		}
	break
	case "textarea":
		//Different validation as we allow whitespace and punctuation
		if(isAlpha(value) && value.length <= length){
			informUser("correct",x.id);
		}else{
			informUser("error",x.id);
		}
	break
	case "password":
		//Compare the 2 password fields, and store the result in the password field for submission.
		if(isAlpha(value) && value.length >= length && document.getElementById('password1').value == value){
			informUser("correct",'password');
			document.getElementById('password').value = value;
		}else{
			informUser("error",'password');
			document.getElementById('password').value = '';
		}
		

	break
	case "email":
		value = value.split(" ").join("")
		if(isEmail(value) && value.length <= length){
			informUser("correct",x.id);
			
		}else{
			informUser("error",x.id);
			
		}
		x.value = value;
	break
	case "postcode":
		//Check for UK syntax (Letter Letter Number Number Number Letter Letter
		//Put it in uppercase
		value = value.toUpperCase();
		//Check for spaces, and if none, chuck one in
		if(value.split(" ").length == 1){
			//Get the start of string, and the last 3, then add the space
			var start, end;
			//adjust depending on length
			if(value.length >= 7){
				start = value.slice(0,4);
			}else{
				start = value.slice(0,3);
			}
			end = value.slice(-3);
			value = start + ' ' + end;
		}
		if(isPostcode(value) && value.length <= length){
			informUser("correct",x.id);
			
		}else{
			informUser("error",x.id);
		}
		
		x.value = value;
	break
	case "number":
		//Remove spaces
		value = value.split(" ").join("")
			
		if(!isText(value) && isNumber(value) && value.length <= length){
			informUser("correct",x.id);
			
		}else{
			informUser("error",x.id);
		}
		
		x.value = value;
	break
	case "checkbox":
		//count checkboxes ticked
		document.getElementById('interestsi').value = 0;
		var cboxes = document.getElementsByName('interests');
		for (var i=0; i<cboxes.length; i++){
		
			var cbox = cboxes[i];
			if(cbox.checked == true){
				document.getElementById('interestsi').value += 1;
			}

		}
		if(document.getElementById('interestsi').value >= length){
			informUser("correct","interests");
			
		}else{
			informUser("error","interests");
		}

	break
	}
	
	//Take off that glow
	x.className = '';
	//old password1 can't do it on it's own
	document.getElementById('password1').className = '';
}
function informUser(type,name){
	var img;
	//Check if an image informing the user of the result of validation is present
	if(document.getElementById("img"+name) == null){
		//Create the img
		img = document.createElement("img");
		//set the id (to change it later)
		img.id="img"+name;
		//set the source
		img.src = "./images/"+type+".png";
		//add the image to the form
		document.getElementById("div"+name).appendChild(img);
		
	}else{
		//get the element
		img = document.getElementById("img"+name);
		//change the source
		img.src = "./images/"+type+".png";
	}
	//Set hidden field to error for safety
	if(type == "error"){
		document.getElementById('error').value = "true";
	}
}

function isText(input){
	//check for one or more a-z or A-Z  throughout
	return /^[a-zA-Z]+$/.test(input);
}
function isNumber(input){
	//check for one or more 0-9  throughout
	return /^[0-9]+$/.test(input);
}
function isAlpha(input){
	//check for alpha only, allow newlines, commas etc
	return /^[a-zA-Z_0-9]/.test(input);
}
function isPostcode(input){
	//check for LETTER (1 or more) NUMBER (1 or more) SPACE NUMBER LETTER LETTER
	return /[A-Z]{1,2}\d{1,2} \d[A-Z]{2}/.test(input);
}
function isEmail(input){
	//valid email. first letter or number then any alpha-numeric followed by @ followed by either a sub-domain or domain (min 3 letters) then the domain
	return /^[a-zA-Z_0-9]+[\w\-\.\+\/]*\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/.test(input);
}
function submitform(form){
	//reset error
	document.getElementById('error').value = "false";
	//Get all fields
	var fields = document.getElementById("frmregister");
	//Loop them
	for (var i=0; i<fields.elements.length; i++){
		//check if they validate
		var field = fields.elements[i];
		if(field.getAttribute("onblur")){
			//validate them (using the function onblur)
			field.onblur();
		}
    }
	if(document.getElementById('error').value == "false"){
		document.getElementById(form).submit()
	}
}
function init(){
	//Get all fields
	var fields = document.getElementById("frmregister");
	//Loop them
	for (var i=0; i<fields.elements.length; i++){
		//check if they validate
		var field = fields.elements[i];
		field.onfocus = function () {this.className = 'highlighted';}

    }
}
