//Error Object To set required and format errors from check();
function Error(){
	this.haveErr = false;
	this.errorStr = "";
	this.retChar = "\n";
	this.add = function(errStr) {
		this.haveErr = true;
		this.errorStr += this.retChar+errStr;
	}
}

// returns true if a string contains only whitespace characters
function isblank(s){
	for(var i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if((c != ' ') && (c != '\n') && (c != '')){
			return false;
		}
	}
	return true;
}


function check(f,haveReqError, reqErrorStr,haveFrmtError, frmtErrorStr){
	var requiredErr = new Error();
	//set previous errors passed to function
	if(haveReqError){
		requiredErr.add(reqErrorStr);
	}
	var formatErr = new Error();
	if(haveFrmtError){
		formatErr.add(frmtErrorStr);
	}
	if((window.navigator.platform).indexOf("Mac") >= 0){
		if(window.navigator.appName.indexOf("Microsoft Internet Explorer") >= 0){
			var myvarparamarray = f.variableparameters.value.split("\r");
		}else{
			var myvarparamarray = f.variableparameters.value.split("\n");
		}
	}else{
		var myvarparamarray = f.variableparameters.value.split("\n");
	}
	for(var i = 0; i < myvarparamarray.length; i++){
		var e = myvarparamarray[i];
		eval("f."+e);
	}	
	for(var i = 0; i < f.length; i++){
		var e = f.elements[i];
		
		if((e.type == "text") || (e.type == "textarea") || e.type=="radio" || e.type=="select-one" || e.type=="password"){
			e.value = e.value.replace(/^\s*(.+?)\s*$/,"$1");
			if(!isblank(e.value)){
				if(e.numeric){
					var v = parseFloat(e.value);
					if(isNaN(v) || (e.min != null && e.value < e.min) || (e.max != null && e.value > e.max)){
						errors = "";
						errors_bool = true;
						if(e.type=="select-one"){
							errors += "You must chose a "+e.realName;
						}else{
							errors += e.realName + " must be a number";
							if(e.min != null){
								errors += " that is greater than "+e.min;
							}
							if(e.max != null){
								if(e.min != null){
									errors += " and less than "+e.max;
								}else{
									errors += " that is less than "+e.max;
								}
							}
						}
						formatErr.add(errors);
					}
				}
				if(e.date && !checkDate(e.value)){
					formatErr.add(e.realName + " must be a valid date format");
				}
				if(e.email && !checkEmail(e.value)){
					formatErr.add(e.realName + " must be a valid email format");
				}
			}else if(e.required){
				requiredErr.add(e.realName);
			}
		}
	}
	if(formatErr.haveErr || requiredErr.haveErr){
		var errors_msg = "";
		if(requiredErr.haveErr){
			errors_msg = "\nThe following fields cannot be blank:"+requiredErr.errorStr;
			errors_msg += "\n";
		}
		if(formatErr.haveErr){
			errors_msg += "\nThe following fields contain an error:"+formatErr.errorStr;
		}
		alert(errors_msg);
		return false;
	}else{
		return true;
	}
}

//returns a date object with date represented by the date string or false if can't make a date object with it
//had to do it this way because Date.parse needs a 4 digit year, which we were not requiring
function checkDate(dateString){
	//10 is added to parseInt to make number base 10
	var results = dateString.match(/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/);
	if(results != null){
		if(parseInt(results[1],10) < 13 && parseInt(results[1],10) > 0 && parseInt(results[2],10) < 32 && parseInt(results[2],10) > 0 && parseInt(results[3],10) < 3000 && parseInt(results[3],10) > 0){
			var centuryToAdd;
			if(parseInt(results[3],10) < 1000){
				if(parseInt(results[3],10) > 29){
					centuryToAdd = 1900;
				}else{
					centuryToAdd = 2000;
				}
			}else{
				centuryToAdd = 0;
			}
			var parsedDate = new Date(Date.parse(parseInt(results[1],10)+"/"+parseInt(results[2],10)+"/"+(parseInt(results[3],10)+centuryToAdd)));
			//check to see if a date like 2/31/03 was entered, javascript changes it to 4/3/03 instead of giving an error
			if(parsedDate.getMonth()+1 != parseInt(results[1],10)){
				return false;
			}else{
				return Date.parse(parseInt(results[1],10)+"/"+parseInt(results[2],10)+"/"+(parseInt(results[3],10)+centuryToAdd));
			}
		}else{
			return false; 
		}
	}else{
		return false;
	}
}
function checkEmail(emailString){
	var pattern = /^[\w\d\-\.\']+@[\w\d\-\.\']+[\.][\w]{1,4}$/;
	return pattern.test(emailString);
}
			