function trim(strValue){
	var objRegExp = /^(\s*)$/;
	if(objRegExp.test(strValue)){
	   strValue = strValue.replace(objRegExp, '');
	   if(strValue.length == 0) return strValue;
	};
	objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
	if(objRegExp.test(strValue)) strValue = strValue.replace(objRegExp, '$2');
	return strValue;
};

function filter(fieldid,type){
	switch(type){
		case "string":
			var field = document.getElementById(fieldid);
			var newVal = field.value.replace(/\d/g,"");
			field.value = newVal;
		break;
		case "number":
			var field = document.getElementById(fieldid);
			var newVal = field.value.replace(/[a-zA-Z!@#$%^&*\s?'._~`:;<=>{}()|+-]/g,"");
			field.value = newVal;
		break;
		case "money":
			var field = document.getElementById(fieldid);
			var newVal = field.value.replace(/[a-zA-Z!@#$%^&*\s?'_~`:;<=>{}()|+-]/g,"");
			field.value = newVal;
		break;
	};	
};

function eraseAllReqSpanTags(){
	var span = document.getElementsByTagName("span"); 
	var re_elmName = new RegExp("_req");
	for (var i = 0; i < span.length; i++) { 
		spID = span[i].getAttribute("id"); 
		if (re_elmName.test(spID)) span[i].innerHTML="";
	};	
};

function validate(fieldid,type,required,minL,useAlerts){
	if(!fieldid){ alert("ERROR: You must specify a Field ID in your calling function. Please check your code."); return false;}
	var myField = document.getElementById(fieldid);
	if(!myField){ alert("ERROR: An input field with the ID="+fieldid+" does not exist. Please make sure that all input fields are labeled with the correct ID and that it matches the field Name. Please check your code."); return false;}
	// If useAlerts is defined, it will use alert message instead of spans
	if(!useAlerts){
		var newSpan = document.getElementById(fieldid + "_req");
		if( newSpan == null ){ 
			newSpan = document.createElement("span"); 
			newSpan.setAttribute('id',fieldid + '_req'); 
			newSpan.setAttribute('class','error'); // IE
			newSpan.setAttribute('className','error'); // FireFox 
		};
		var parent = myField.parentNode; 
		parent.insertBefore(newSpan,myField.nextSibling); 
		eraseAllReqSpanTags();
	}else{
		var required_message = useAlerts;	
	}
	if(!trim(myField.value).length && required!="no"){
		if(!useAlerts){
			newSpan.innerHTML = "(Required)";	
		}else{
			alert(required_message);
		}
		myField.focus();
		return false;
	}else if(trim(myField.value).length){ 
		if(minL && trim(myField.value).length<minL){
			if(!useAlerts){
				newSpan.innerHTML = "Must Have Atleast " + minL + " Characters";
			}else{
				alert(fieldid + " Must Have Atleast " + minL + " Characters");	
			}
			myField.focus();
			return false;
		};
		switch(type){
			case "checkbox": case "radio":
				var fieldname = document.getElementsByName(fieldid);
				var checked = -1;
				for (i=0; i<fieldname.length; i++){
					if(fieldname[i].checked) checked = i;
				};
				if(checked == -1){
					if(!useAlerts){
						newSpan.innerHTML = "(Required)";
					}else{
						alert(required_message);	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "email":
				if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid E-mail.";
					}else{
						alert("Please Enter a Valid E-mail.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "date":
				if(!(/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Date Format: [ mm/dd/yyyy ]";
					}else{
						alert("Please Enter Date Format: [ mm/dd/yyyy ].");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "zipcode":
				var USZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
				var CAZip = /^\D{1}\d{1}\D{1}\-?\d{1}\D{1}\d{1}$/;
				if(!(USZip.test(myField.value)) && !(CAZip.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid Zipcode";
					}else{
						alert("Please Enter a Valid Zipcode.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "phone":
				if(!(/(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid Phone Number";
					}else{
						alert("Please Enter a Valid Phone Number With Area Code.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "social":
				USSS = /^\d{3}\-?\d{2}\-?\d{4}$/;
				CASS = /^\d{9}$/;
				if(!(USSS.test(myField.value)) && !(CASS.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid Social Security";
					}else{
						alert("Please Enter a Valid Social Security.");	
					}	
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "ip":
				if(!(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid IP Address";
					}else{
						alert("Please Enter a Valid IP Address.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "url":
				var strURL1 = "^(https?://)?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?";
				var strURL2 = "(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]";
				var strURL3 = "{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
				var re = new RegExp(strURL1+strURL2+strURL3);
				if(!(re.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Enter Valid URL";
					}else{
						alert("Please Enter a Valid URL.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "string":
				if((/[\d]/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Invalid! Only Letters Allowed";
					}else{
						alert("Invalid! Only Letters Allowed.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "number":
				if((/\D/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Invalid! Only Numbers Allowed";
					}else{
						alert("Invalid! Only Numbers Allowed.");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			case "money":
				if((/[$]/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Please Remove The $";
					}else{
						alert("Please Remove The $.");	
					}
					myField.focus();
					return false;
				}else if((/[a-zA-Z!@#%^&*\s?'_~`:;<=>{}()|+-]/.test(myField.value))){
					if(!useAlerts){
						newSpan.innerHTML = "Invalid! Only Numbers Allowed.";
					}else{
						alert("Invalid! Only Numbers Allowed..");	
					}
					myField.focus();
					return false;
				}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
			break;
			default:
				if(!useAlerts){newSpan.innerHTML = "";}return true;
			break;
		};
	}else{if(!useAlerts){newSpan.innerHTML = "";}return true;};
};