﻿var validateRequired = [];
var validateCompare = [];
var validateRegEx = [];
var validateEmptyOrRegEx = [];
var extraValidationFuncs = [];
var origBorderStyle = ""; 
var errorMessageElementID = "ACMSInvalidFieldsError";


function validateAndSubmit(submitAction){
    var errorMessageElement = document.getElementById(errorMessageElementID);
	resetInvalidFields();
	if(errorMessageElement)
	    errorMessageElement.style.display = "none";
	if(validateFields())
		submitAction.call();
		//eval((""+submitAction+"").replace(/[/]/g,""));
	else if(errorMessageElement)
	    errorMessageElement.style.display = "block";
	
}
function validateFields(){
	var isValid = true;
	if(validateRequired != null){
		for (var i=0;i<validateRequired.length; i++){
			if(!validateRequiredField(validateRequired[i])){
				indicateInvalidField(validateRequired[i]);
				isValid = false;
			}
		}
	}
	if(validateCompare != null){
		for (var i=0;i<validateCompare.length; i++){
			if(!validateCompareFields(validateCompare[i][0], validateCompare[i][1])){
				indicateInvalidField(validateCompare[i][0]);
				indicateInvalidField(validateCompare[i][1]);
				isValid = false;
			}
		}
	}
	if(validateEmptyOrRegEx != null){
		for (var i=0;i<validateEmptyOrRegEx.length; i++){
			if(validateRequiredField(validateEmptyOrRegEx[i][0]) && !validateFieldRegEx(validateEmptyOrRegEx[i][0], validateEmptyOrRegEx[i][1])){
				indicateInvalidField(validateEmptyOrRegEx[i][0]);
				isValid = false;
			}
		}
	}
	if(validateRegEx != null){
		for (var i=0;i<validateRegEx.length; i++){
			if(!validateFieldRegEx(validateRegEx[i][0], validateRegEx[i][1])){
				indicateInvalidField(validateRegEx[i][0]);
				isValid = false;
			}
		}
	}
	if(extraValidationFuncs != null){
		for (var i=0;i<extraValidationFuncs.length; i++){
			if(!extraValidationFuncs[i][1].call(extraValidationFuncs[i][0])){
				indicateInvalidField(extraValidationFuncs[i][0]);
				isValid = false;
			}
		}
	}
	return isValid;			
}
function validateRequiredField(fieldID){
	return (document.getElementById(fieldID).value != "")
}
function validateCompareFields(fieldID1, fieldID2){
	if(document.getElementById(fieldID1).value && document.getElementById(fieldID2).value)
		return (document.getElementById(fieldID1).value == document.getElementById(fieldID2).value);			
	return false;
}
function validateFieldRegEx(fieldID, regEx){
	return (new RegExp(regEx).test(document.getElementById(fieldID).value));
}
function resetInvalidFields(){
	if(validateRequired != null){
		for (var i=0;i<validateRequired.length; i++){
			document.getElementById(validateRequired[i]).style.border = origBorderStyle;
		}
	}
	if(validateCompare != null){
		for (var i=0;i<validateCompare.length; i++){
			document.getElementById(validateCompare[i][0]).style.border = origBorderStyle;
			document.getElementById(validateCompare[i][1]).style.border = origBorderStyle;
		}
	}
	if(validateRegEx != null){
		for (var i=0;i<validateRegEx.length; i++){
			document.getElementById(validateRegEx[i][0]).style.border = origBorderStyle;
		}
	}
	if(extraValidationFuncs != null){
		for (var i=0;i<extraValidationFuncs.length; i++){
			document.getElementById(extraValidationFuncs[i][0]).style.border = origBorderStyle;
		}
	}
}
function indicateInvalidField(fieldID){
	document.getElementById(fieldID).style.border = "red solid 1px";
}