validationFields = new Array();

// this will add a maxlength to any textarea
// ex. <textarea name="test" id="test" maxlength="5">test</textarea>
// this will only allow you to type 5 characters in the textarea
function processRequiredFields(){
	var inputs = document.getElementsByTagName("input");
	for(var x = 0; x < inputs.length; x++){
		if(inputs[x].getAttribute('required') && inputs[x].getAttribute('message')){
			validationFields[validationFields.length] = {name: inputs[x].getAttribute('name'), comparisonType: "length", comparisonOperator: ">", comparisonValue: "0", errorMessage: inputs[x].getAttribute('message')};
		}
		if(inputs[x].getAttribute('fieldType') && inputs[x].getAttribute('fieldTypeMessage')){
			validationFields[validationFields.length] = {name: inputs[x].getAttribute('name'), comparisonType: "type", comparisonOperator: "=", comparisonValue: "email", errorMessage: inputs[x].getAttribute('fieldTypeMessage')};
		}
	}
}

// this attaches an event to the page, it will work in mozilla and ie
try{
	attachEvent('onload', processRequiredFields);
}catch(theErr1){
	try{
		addEventListener('load', processRequiredFields, false);
	}catch(theErr2){
	}
}

function onlyPress(typeOfCharacters){
	var keyCode = document.all ? event.keyCode : event.which;
	var keyChar = String.fromCharCode(keyCode);

	switch (typeOfCharacters){
		case "alpha":
			if (!keyChar.match(/[a-zA-Z]/)) {
				return(false);
			}
			break;
		case "integer":
			if (!keyChar.match(/[0-9]/)) {
				return(false);
			}
			break;
		case "float":
			if (!keyChar.match(/[0-9|\.]/)) {
				return(false);
			}
			break;
		case "usphone":
			if (!keyChar.match(/[0-9|\-]/)) {
				return(false);
			}
			break;
		case "ssn":
			if (!keyChar.match(/[0-9|\-]/)) {
				return(false);
			}
			break;
		case "date":
			if (!keyChar.match(/[0-9|\/]/)) {
				return(false);
			}
			break;
		case "special":
			if (keyChar.match(/[a-zA-Z]/) || keyChar.match(/[0-9]/) || keyChar.match(/[\"\'\[\]]/)) {
				return(false);
			}
			break;
	}
}

function trim(theString){
   	if(typeof theString == 'string'){
		return theString.replace(/^\s*|\s*$/g,"");
	}
}

function validateField(field, type, validator, message){
	var fieldValue = trim(field.value);
	if(fieldValue.length > 0){
		switch (type){
			case "RegEx":
				if(!validator.test(fieldValue)){
					alert(message);
					field.focus();
					return false;
				}
				break;
			case "Type":
				switch (type){
					case "EMAIL":
						if(!emailCheck(fieldValue)){
							alert(message);
							field.focus();
							return false;
						}
						break;
				}	
				break;
		}
	}
	return true;
}

function validateForm(){
	var fieldCheck;
	var formField;
	var comparisonFormField;
	var blnCheck;
	var errorMessage = "";
	var tBackgroundColor = "#efefef";
	var tBorderColor = "#cc0000";
	var theFocus;
	for (var key in validationFields) {
		fieldCheck = validationFields[key];
		formField = document.getElementById(fieldCheck["name"]);
		try{
			formField.style.backgroundColor = "";
			formField.style.borderColor = "";
		}catch(theError){
		}
	}
	for (var key in validationFields) {
		fieldCheck = validationFields[key];
		formField = document.getElementById(fieldCheck["name"]);
		try{
			try{
				formField.focus()
			}catch(theError){
			}
			if (fieldCheck["comparisonType"] != "type" && fieldCheck["comparisonType"] != "field") {
				if(fieldCheck["comparisonType"].length > 0){
					blnCheck = eval("trim(formField.value)." + fieldCheck["comparisonType"] + fieldCheck["comparisonOperator"] + fieldCheck["comparisonValue"]);
				}else{
					blnCheck = eval("trim(formField.value)" + fieldCheck["comparisonOperator"] + fieldCheck["comparisonValue"]);
				}
				if (!blnCheck) {
					if(errorMessage == ""){ theFocus = formField }
					errorMessage = errorMessage + "\n" + fieldCheck["errorMessage"];
					formField.style.backgroundColor = tBackgroundColor;
					formField.style.borderColor = tBorderColor;
				}
			} else if (fieldCheck["comparisonType"] != "type" && fieldCheck["comparisonType"] == "field") {
				comparisonFormField = document.getElementById(fieldCheck["comparisonValue"]);
				comparisonFormField.style.backgroundColor = "";
				comparisonFormField.style.borderColor = "";
				if (formField.value != comparisonFormField.value) {
					if(errorMessage == ""){ theFocus = formField }
					errorMessage = errorMessage + "\n" + fieldCheck["errorMessage"];
					formField.style.backgroundColor = tBackgroundColor;
					formField.style.borderColor = tBorderColor;
					comparisonFormField.style.backgroundColor = tBackgroundColor;
					comparisonFormField.style.borderColor = tBorderColor;
				}
			} else {
				switch (fieldCheck["comparisonValue"]) {
					case "datediff":
						date1 = new Date(document.getElementById(fieldCheck["date1"]).value);
						date2 = new Date(document.getElementById(fieldCheck["date2"]).value);
						if (formField.value.length > 0 && !eval("date1 " + fieldCheck["comparisonOperator"] + " date2")) {
							if(errorMessage == ""){ theFocus = formField }
							errorMessage += "\n" + fieldCheck["errorMessage"];
							formField.style.backgroundColor = tBackgroundColor;
							formField.style.borderColor = tBorderColor;
						}
						break;
					case "email":
						if (formField.value.length > 0 && !formField.value.match(/^([\w_\.\-])+\@(([\w\-])+\.)+([\w]{2,4})+$/)) {
							if(errorMessage == ""){ theFocus = formField }
							errorMessage += "\n" + fieldCheck["errorMessage"];
							formField.style.backgroundColor = tBackgroundColor;
							formField.style.borderColor = tBorderColor;
						}
						break;
					case "usphone":
						if (formField.value.length > 0 && !formField.value.match(/^\d{3}-\d{3}-\d{4}$/)) {
							if(errorMessage == ""){ theFocus = formField }
							errorMessage += "\n" + fieldCheck["errorMessage"];
							formField.style.backgroundColor = tBackgroundColor;
							formField.style.borderColor = tBorderColor;
						}
						break;
					case "usdate":
						if(formField.value.length > 0){
							arrDate = formField.value.split('/');
		
							if ((arrDate[0] < 1 || arrDate[0] > 12) || (arrDate[1] < 1 || arrDate[1] > 31) || (arrDate[2] < 1900 || arrDate[2] > 2100)) {
								if(errorMessage == ""){ theFocus = formField }
								errorMessage += "\n" + fieldCheck["errorMessage"];
								formField.style.backgroundColor = tBackgroundColor;
								formField.style.borderColor = tBorderColor;
							}
						}
						break;
					case "eurodate":
						arrDate = formField.value.split('/');
						if(formField.value.length > 0){
							if ((arrDate[1] < 1 || arrDate[1] > 12) || (arrDate[0] < 1 || arrDate[0] > 31) || (arrDate[2] < 1900 || arrDate[2] > 2100)) {
								if(errorMessage == ""){ theFocus = formField }
								errorMessage += "\n" + fieldCheck["errorMessage"];
								formField.style.backgroundColor = tBackgroundColor;
								formField.style.borderColor = tBorderColor;
							}
						}
						break;
					case "ssn":
						if (formField.value.length > 0 && !formField.value.match(/^\d{3}-\d{2}-\d{4}$/)) {
							if(errorMessage == ""){ theFocus = formField }
							errorMessage += "\n" + fieldCheck["errorMessage"];
							formField.style.backgroundColor = tBackgroundColor;
							formField.style.borderColor = tBorderColor;
						}
						break;
				}
			}
		}catch(theErr){
		}
	}

	if (errorMessage) {
		try{
			theFocus.focus();
		}catch(theError){
		}
		alert(errorMessage);
		return(false);
	}else{
		return(true);
	}
}
