function validateForm(thisform){
	var isvalid=true;
	var x = 0;
	var array = document.getElementsByTagName("input");
	var array2 = new Array(0,0);
	var array3= document.getElementsByTagName("textarea");
	var array4= new Array(0);
	array2.length = array.length;
	array4.length = array3.length;
	var i = 0;
	for(x=0; x<array.length; x++){
		if(array[x].id){
			array2[i] = array[x];
			i++;
		}
	}
	array2.length = i;
	i=0;
	for(x=0; x<array3.length; x++){
		if(array3[x].id){
			array4[i] = array3[x];
			i++;
		}
	}
	array4.length = i;
	for(x=0; x<array2.length; x++){
		if(array2[x])
			if(!validateField(array2[x])){
				showError(array2[x],"errorI" + x);
				isvalid=false;
			}
			else clearError(array2[x],"errorI" + x);
		}
	for(x=0; x<array4.length; x++){
		if(array4[x]){
			if(!validateField(array4[x])){
				showLiveError(array4[x],"errorT" + x);
				isvalid=false;
			}
			else clearError(array4[x],"errorT" + x);
		}
	}
		return isvalid;
}

function validateLive(element){
	var x=0;
	var array= document.getElementsByTagName("input");
	var array2= new Array(0);
	var array3= document.getElementsByTagName("textarea");
	var array4= new Array(0);
	array2.length = array.length;
	array4.length = array3.length;
	var i = 0;
	for(x=0; x<array.length; x++){
		if(array[x].id){
			array2[i] = array[x];
			i++;
		}
	}
	array2.length = i;
	i=0;
	for(x=0; x<array3.length; x++){
		if(array3[x].id){
			array4[i] = array3[x];
			i++;
		}
	}
	array4.length = i;
	for(x=0; x<array2.length; x++){
		if(array2[x]){
			if(array2[x].id == element.id){
				if(!validateField(array2[x])){
					showLiveError(array2[x],"errorI" + x);
				}
				else clearError(array2[x],"errorI" + x);
			break;
			}
		}
	}
	for(x=0; x<array4.length; x++){
		if(array4[x]){
			if(array4[x].id == element.id){
				if(!validateField(array4[x])){
					showLiveError(array4[x],"errorT" + x);
				}
				else clearError(array4[x],"errorT" + x);
			break;
			}
		}
	}
}

function showLiveError(input,elementId){
	element = document.getElementById(elementId);
	if(element){
		element.style.visibility="visible";
		input.style.backgroundColor="#FFBBBB";
		input.style.border="1px solid red";
	}
}

function showError(input,elementId){
	element = document.getElementById(elementId);
	if(element){
		element.style.visibility="visible";
		input.style.backgroundColor="#FFBBBB";
		input.style.border="1px solid red";
		input.focus();
	}
}

function clearError(input,elementId){
	element = document.getElementById(elementId);
	if(element){
		element.style.visibility="hidden";
		input.style.backgroundColor="";
		input.style.border="1px solid #444444";
	}
}

function validateField(element){
	if(element.id && element.id.length > 0){
		//R0 = generic required field
		elementid = element.id;
		elementid = elementid.toString();
		var length = elementid.length;
		var validatecode = element.id.toString().substr(length-2,2);
		switch(validatecode) {
		case "R0": return required(element);
		case "R1": return numeric(element);
		case "R2": return alpha(element);
		case "R3": return alphanumeric(element);
		case "R4": return email(element);
		case "R5": return url(element);
		case "R6": return phone(element);
		case "R7": return state(element);
		case "R8": return zip(element);
		case "R9": return hex(element);
		case "RA": return rgb(element);
		case "RB": return money(element);
		case "RC": return selection(element);
		case "N0": return notrequired(element);
		case "N1": return nrnumeric(element);
		case "N2": return nralpha(element);
		case "N3": return nralphanumeric(element);
		case "N4": return nremail(element);
		case "N5": return nrurl(element);
		case "N6": return nrphone(element);
		case "N7": return nrstate(element);
		case "N8": return nrzip(element);
		case "N9": return nrhex(element);
		case "NA": return nrrgb(element);
		case "NB": return nrmoney(element);
		default: return notrequired(element);
		}
	}
	else return true;
}

function notrequired(element){
	regex = /(^[a-zA-Z\d\.\, \'\-#\\\/\?\r\n]*$)/;
	return regex.test(element.value);
}

function required(element){
	regex = /(^[a-zA-Z\d\.\, \'\-#\\\/\?\r\n]+$)/;
	return regex.test(element.value);
}

function numeric(element){
	regex = /^[\d\n]+$/;
	return regex.test(element.value);
}

function nrnumeric(element){
	regex = /^[\d\n]*$/;
	return regex.test(element.value);
}

function alpha(element){
	regex = /^[a-zA-Z \n]+$/;
	return regex.test(element.value);
}

function nralpha(element){
	regex = /^[a-zA-Z \n]*$/;
	return regex.test(element.value);
}

function alphanumeric(element){
	regex = /^[a-zA-Z\d \n]+$/;
	return regex.test(element.value);
}

function nralphanumeric(element){
	regex = /^[a-zA-Z\d \n]*$/;
	return regex.test(element.value);
}

function selection(element){
	return element.checked;
}

function email(element){
	regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	return regex.test(element.value);
}

function nremail(element){
	regex = /(^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$)|(^$)/;
	return regex.test(element.value);
}

function url(element){
	regex = /^((ftp)|(https?)):\/\/(\S+)(:[0-9]+)?(\/|\/([a-zA-Z#!:.?+=&%@!\-\/]))?$/;
	return regex.test(element.value);
}

function nrurl(element){
	regex = /(^((ftp)|(https?)):\/\/(\S+)(:[0-9]+)?(\/|\/([a-zA-Z#!:.?+=&%@!\-\/]))?$)|(^$)/;
	return regex.test(element.value);
}

function phone(element){
	regex = /(^(\d-)?\d{3}\-\d{3}\-\d{4}$)|(^\d{10}$)|(^[\d ]{7,14}$)/;
	return regex.test(element.value);
}

function nrphone(element){
	regex = /(^(\d-)?\d{3}\-\d{3}\-\d{4}$)|(^\d{10}$)|(^[\d ]{7,14}$)|(^$)/;
	return regex.test(element.value);
}

function state(element){
	return alpha(element);
}

function nrstate(element){
	return nralpha(element);
}

function zip(element){
	regex = /^[a-zA-Z\d\- ]{1,16}$/;
	return regex.test(element.value);
}

function nrzip(element){
	regex = /(^[a-zA-Z\d\- ]{1,16}$)|(^$)/;
	return regex.test(element.value);
}

function hex(element){
	regex = /^((0x)|(\$))[a-fA-F\d]+$/;
	return regex.test(element.value);
}

function nrhex(element){
	regex = /(^((0x)|(\$))[a-fA-F\d]+$)|(^$)/;
	return regex.test(element.value);
}

function rgb(element){
	regex = /(^\#[a-fA-F\d]{3}$)|(^\#[a-fA-F\d]{6}$)/;
	return regex.test(element.value);
}

function nrrgb(element){
	regex = /(^\#[a-fA-F\d]{3}$)|(^\#[a-fA-F\d]{6}$)|(^$)/;
	return regex.test(element.value);
}

function money(element){
	regex = /(^\$[\d,]+.[\d]{0,2}$)|(^€[\d.]+,[\d]{0,2}$)|(^£[\d.]+,[\d]{0,2}$)|(^¥[\d,.]+[,.]+[\d]{0,2}$)/;
	return regex.test(element.value);
}

function nrmoney(element){
	regex = /(^\$[\d,]+.[\d]{0,2}$)|(^€[\d.]+,[\d]{0,2}$)|(^£[\d.]+,[\d]{0,2}$)|(^¥[\d,.]+[,.]+[\d]{0,2}$)|(^$)/;
	return regex.test(element.value);
}