function validate(form){
	// this string will tell you everything
	// about the input types once you uncomment
	// it.  
	var inputInfo = "STARTING :";
	var valid = false;
	for(var i = 0; i < form.length; i++){
		var obj = form.elements[i];
		inputInfo += "\n\tNAME:" + obj.name + "|VALUE:" + obj.value + "{" + obj.type+"}";
		if(obj.type == "text"){
			valid = text(obj);
			
		}else if(obj.type == "textarea"){
			valid = text(obj);
			
		}else if(obj.type == "password"){
			valid = text(obj);
			
		}else if(obj.type == "checkbox"){
			valid = check(obj);
			
		}else if(obj.type == "radio"){
			valid = radio(obj);
			
		}else if(obj.type == "select-one"){
			valid = select(obj);
			
		}else if(obj.type == "hidden"){
			valid = true;
			
		}else if(obj.type == "submit"){
			valid = true;
			
		}else if(obj.type == "button"){
			valid = true;
			
		}else if(obj.type == undefined){
			//alert("input type not recognised!");
			valid = true;
		}else{
			alert(inputInfo);
		}
		if(!valid){
			//alert(inputInfo);
			return false;
		}
	}
	//alert(inputInfo);
	return valid;
}


/*****************************/
/*********defaults************/
//These functions check what type is defined in the name
function avRequired(name){
	if(name.search("rq_") == -1){
		return false;
	}else{
		//alert("rq_");
		return true;
	}
}
function avEmail(name){
	if(name.search("email_") == -1){
		return false;
	}else{
		return true;
	}
}
function avNumber(name){
	if(name.search("num_") == -1){
		return false;
	}else{
		//alert("num_");
		return true;
	}
}
function avNumberAmount(name){
	//alert("num amount : " + name);
	patt = /[0-9]+/;
	var afterNum = name.indexOf("num") + 3;		//index after 'num'
	var amount = 0;								//the amount of digits
	var goOn = true;
	var returnAmount = 0;						//returns the amount of digits specified
	var i = 0;
	do{
		i++;									//add to the 'afterNum' to get the substring
		amount = 0 + Number(name.substring(afterNum,afterNum+i));
		if(patt.test(amount)){					//regural expression test for number
			returnAmount = amount;				//update return value
		}else{
			goOn = false;						// else, stop doWhile
		}
	}while(goOn);
	if(returnAmount > 0){
		return true;
	}else{
		//alert("Digit Amount = " + returnAmount);
		//alert("Incorrect amount of digits!");
		return false;
	}
}
function avUseDefaultFunction(name){
	if(name.search("func_") == -1){
		return false;
	}else{
		return true;
	}
}
/*********VALIDATORS********/
//These functions check the object value for the correct data
function avValidEmail(object){
	emailpat = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
	if(emailpat.test(object.value)){
		//alert("Valid email");
		return true;
	}else{
		alert("Invalid Email Address, please retry.");
		object.focus();
		return false;
	}
}
function avValidNumber(object){
	patt = /[0-9]+/;
	if(patt.test(object.value)){
		return true;
	}else{
		object.focus();
		alert("Please provide number value");
		return false;
	}
}
function avValidNumberAmount(object){
	patt = /[0-9]+/;
	var afterNum = (object.name).indexOf("num") + 3;		//index after 'num'
	var amount = 0;								//the amount of digits
	var goOn = true;
	var returnAmount = 0;						//returns the amount of digits specified
	var i = 0;
	do{
		i++;									//add to the 'afterNum' to get the substring
		amount = 0 + Number((object.name).substring(afterNum,afterNum+i));
		if(patt.test(amount)){					//regural expression test for number
			returnAmount = amount;				//update return value
		}else{
			goOn = false;						// else, stop doWhile
		}
	}while(goOn);
	if((object.value).length == returnAmount){	//if the amount digits specified is the same as the length of the value
		return true;
	}else{
		object.focus();
		alert("Incorrect amount of digits, please provide " + returnAmount + " digits");
		return false;
	}
}

/*********defaults************/
/*****************************/



function text(object){
	/*var re = new RegExp(window.prompt("Please input a regex.","yes|yeah"),"g");
	alert(re);*/
	var rq = avRequired(object.name);
	var defunc = avUseDefaultFunction(object.name);
	var email = avEmail(object.name);
	var num = avNumber(object.name);
	var numAmount = avNumberAmount(object.name);
	//alert("NAME : " + object.name + "\nrq : " + rq + "\nfedunc : " + defunc + "\nemail : " + email + "\nnum : " + num + "\nnumAmount : " + numAmount);
	if(rq){
		if(object.value == ""){
			alert("Please complete all required fields.");
			object.focus();
			return false;
		}else{
			if(defunc){
				return astrix(object);
			}else{
				if(email){
					return avValidEmail(object);
				}else if(num){
					return avValidNumber(object);
				}else if(numAmount){
					return avValidNumberAmount(object);
				}else{
					return true;
				}
			}
		}
	}else{
		if(object.value == ""){
			return true;
		}
		if(defunc){
			return astrix(object);
		}else{
			if(email){
				return avValidEmail(object);
			}else if(num){
				return avValidNumber(object);
			}else if(numAmount){
				return avValidNumberAmount(object);
			}else{
				return true;
			}
		}
	}
}

function check(object){
	var rq = avRequired(object.name);
	var defunc = avUseDefaultFunction(object.name);
	if(rq){
		if(!object.checked){
			object.focus();
			alert(object.name + " not selected!");
			return false;
		}else{
			if(defunc){
				return astrix(object);
			}else{
				return true;
			}
		}
	}else{
		return true;
	}
}

function radio(object){
	return true;
}

function select(object){
	var name = object.name
	var defunc = avUseDefaultFunction(object.name);
	if(avRequired(name)){
		var indexRq = name.indexOf("rq_") + 3;
		var tempSubstring = name.substring(indexRq,name.length);
		var dedOption =  tempSubstring.substring(0,tempSubstring.indexOf("_"));
		if(object.value == dedOption){
			alert(tempSubstring.substring((tempSubstring.indexOf("_")+1),tempSubstring.length) + " not selected!");
			object.focus();
			return false;
		}else{
			if(defunc){
				return astrix(object);
			}else{
				return true;
			}
		}
	}else{
		if(defunc){
			return astrix(object);
		}else{
			return true;
		}
	}
}


