

function ErrorObj(retCharV){
	this.retChar = retCharV;
	this.hasError = false;
	this.errorString = "";
	this.add = erroObjAdd;
}
function erroObjAdd(errStr){
	this.hasError = true;
	this.errorString += this.retChar+errStr;
}


var monName = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

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 checkForm(form, reqBlank, reqBlankStr, malformedError, malformedErrorStr){	
	var retChar = "\n";
	if((window.navigator.platform).indexOf("Mac") >= 0){
		if(window.navigator.appName.indexOf("Microsoft Internet Explorer") >= 0){
			var myvarparamarray = form.variableparameters.value.split("\r");
		}else{
			var myvarparamarray = form.variableparameters.value.split("\n");
		}
	}else{
		var myvarparamarray = form.variableparameters.value.split("\n");
	}
	var requiredErrorObj = new ErrorObj(retChar);
	var malformedErrorObj = new ErrorObj(retChar);
	if(reqBlank){
		requiredErrorObj.add(reqBlankStr);
	}
	if(malformedError){
		malformedErrorObj.add(malformedErrorStr);
	}
	
	for(var i = 0; i < myvarparamarray.length; i++){
		var e = myvarparamarray[i];
		eval("form."+e);
	}
	
	for(var i = 0; i < form.length; i++){
		var e = form.elements[i];
		if((e.type == "text") || (e.type == "textarea") || e.type=="radio" || e.type=="select-one" || e.type=="password"){
			/*
			Radio buttons come through one at a time
			if(e.type == "radio"){
				var itemchecked = false;
				alert(e.length);
				for(x = 1; x < e.length; x++){
					if(e[x].checked){
						itemchecked = true;
					}
				}
				if(!itemchecked){
					requiredErrorObj.add(e[0].realName);
				}
			}else*/ if(e.required){
				if((e.value == null) || isblank(e.value)){
					//form.getElementById(e.realName + "_required").InnerHtml = "*";
					requiredErrorObj.add(e.realName);
					continue;
				}
			}
			if(e.date){
				if(!isblank(e.value) && !checkDate(e.value)){
					malformedErrorObj.add(e.realName+" must be a valid date format");
				}
				continue;
			}
			if(e.email){
				if(!isblank(e.value) && !checkEmail(e.value)){
					malformedErrorObj.add(e.realName+" must be a valid email format");
				}
				continue;
			}
			if(e.numeric && !isblank(e.value)){
				var v = parseFloat(e.value);
				if(isNaN(v) || (e.min != null && e.value < e.min) || (e.max != null && e.value > e.max)){
					errStr = "";
					if(e.type=="select-one"){
						errStr += "You must chose a "+e.realName;
					}else{
						errStr += e.realName + " must be a number";
						if(e.min != null){
							errStr += " that is greater than or equal to "+e.min;
						}
						if(e.max != null){
							errStr += (e.min != null)?" and":" that is";
							errStr += " less than or equal to "+e.max;
						}
					}
					malformedErrorObj.add(errStr);
				}
			}
		}
	}
	
	if(requiredErrorObj.hasError || malformedErrorObj.hasError){
		var errors = "";
		if(requiredErrorObj.hasError){
			errors += retChar+"These fields cannot be empty: "+retChar+requiredErrorObj.errorString;
		}
		if(malformedErrorObj.hasError){
			var droplines = retChar;
			if(requiredErrorObj.hasError){
				droplines += retChar;
			}
			errors += droplines+"These fields contain errors: "+retChar+malformedErrorObj.errorString;
		}
		alert(errors);
		return false;
	} else {
		return true;
	}
}
function checkEmail(emailString){
	return emailString.match(/^[\w\d\-\.]+@[\w\d\-\.]+[\.][\w]{1,4}$/);
}
function checkDate(dateString){
	var results = dateString.match(/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/);
	if(results != null){
		//10 is radix
		month = parseInt(results[1],10);
		day = parseInt(results[2],10);
		year = parseInt(results[3],10);
		if(month < 13 && month > 0 && day < 32 && day > 0 && year < 3000 && year > 0){
			if(year < 1000){
				year += (year > 29)?1900:2000;
			}
			var parsedDate = new Date(year,(month-1),day); //parsedDate months go from 0-11
			if(parsedDate.getMonth() != (month-1)){
				return false;
			}
			return true;
		}
		return false; 
	}
	return false;
}
