 function stripSpaces (stringInput) {
	var strTemp = "";
	stringInput = '' + stringInput;
	var splitString = stringInput.split(" ");
	for(var i = 0; i < splitString.length; i++)
		strTemp += splitString[i];
	return strTemp;
}

function validate(form,checkAge,reqAge){
	//checkAge,and reqAge are optional and only required if validating age for COPPA
	if (checkAge == null) { // if no checkAge flag passed, we will assume no age check is required
		checkAge = false;
	}
	if (reqAge == null) { // default reqAge is 13, so you can just pass the domain and age test will still be tested
		reqAge = 13;
	}
	
	var returnVal=true;
	var formEls=form.elements;
	
	var currEl,currName,currType,currVal,currField,minimum,maximum,temp;
	var errMsg="Please check the following field(s):\n\n";
	var firstErr=-1;	
	var isEmail=/^\w(\.?[\w-])*@\w(\.?[\w-])*\.[a-z]{2,6}(\.[a-z]{2})?$/i;
	var notWhitespace=/\S/;
	var hasSpaces=/\s/g;
	var requirements=new Array("req","nospace","maxlength","email");
	
	for(var i=0;i<formEls.length;i++) {
		currEl=formEls[i];
		currName=currEl.name;
		currType=currEl.type;
		currValue=currEl.value;
		if (currEl.id == undefined || currEl.id.length == 0) {
			currField=currName.indexOf("_")!=-1?currName.split("_")[0]:currName;
		} else {
			currField = currEl.id;
		}
		currField=currField.replace(/0/g," ");
		temp=0;
	
		var context=new Object;
	
		for(var j=0;j<requirements.length;j++) {
			valField = currName + "_" + requirements[j];
			if (form[valField]) {
				context[requirements[j]]=1;
			}
		}
		
	switch(currType.toLowerCase()) {
		case "text":
	  	case "textarea":
	  	case "password":
			if(context.req&&(currValue==""||!notWhitespace.test(currValue))) {
				valField = currName + "_req";
				if(firstErr<0)
					firstErr=i;
				if(form[valField].value != '') {
					errMsg+=" - " + form[valField].value + "\n";
				} else {
					errMsg+=" - The required field \""+currField+"\" was left blank.\n";
				}
				break;
			}
			if(context.nospace&&hasSpaces.test(currValue)) {
				valField = currName + "_nospace";
				if(firstErr<0)
					firstErr=i;
				if(form[valField].value != '') {
					errMsg+=" - " + form[valField].value + "\n";
				} else {
					errMsg+=" - The field \""+currField+"\" should not contain any spaces.\n";
				}
			}
			if(context.maxlength) { 
				valField = currName + "_maxlength";
				maxChars = form[valField].value;
				if(currValue.length>maxChars) {
			    	if(firstErr<0)
						firstErr=i;
					errMsg+=" - Please limit the \""+currField+"\" field to no more than "+maxChars+" characters. Currently you have entered "+currValue.length+" characters.\n";
				}
			}
			if(context.email) {
				valField = currName + "_email";
				currValue = stripSpaces(currValue);
				currEl.value = currValue;			
				if(context.email&&!isEmail.test(currValue)) {
					if(firstErr<0)
						firstErr=i;
					if(form[valField].value != '') {
						errMsg+=" - " + form[valField].value + "\n";
					} else {
					errMsg+=" - The field \""+currField+"\" does not contain a valid email address.\n";
					}
				}
			}
			break;
	 
	  	case "select-one":
			valField = currName + "_req";
			if(context.req&&!currEl.selectedIndex) {
				if(firstErr<0)
					firstErr=i;
			  	if(form[valField].value != '') {
					errMsg+=" - " + form[valField].value + "\n";
				} else {
					errMsg+=" - You must select one of the \""+currField+"\" options.\n";
				}
			}
			break;
	
	    case "radio":
	    case "checkbox":
	    case "select-multiple":	  
	    case "submit":
	    case "reset":
	    case "button":
	    case "file":
	    case "image":
	    case "hidden":
	   		break;
	  
	    default:
			alert("ERROR!!\nWe should never get here!");
			break;
		}
	}
	returnVal=firstErr<0;

	if(!returnVal) {
		alert(errMsg);
		form.elements[firstErr].focus();
	} else if (checkAge) {
		returnVal = checkage(form,reqAge); //if fails, consumer will be redirected.
	}
	
	return returnVal;
}