

//Set the color of the field titles when they are ok
var okTextColor = "#333333";

//Set the color of the field titles when there is an error
var errorTextColor = "#FF0000";


//	["fieldName", "field Label(s) to highlight (comma sepparated for multiple)", "validation(s) to make (comma sepparated for multiple)"]
//	custom regular expressions can be sent with c-/regEx/ where /regEx is the regular expression to test against.
// 	common identifiers are listed below:
//		! = Check for Empty
//		i = Integers 
//		@ = email address format validation
//		cc = credit card number format validation


var contactFormCriteria  = new Array();
contactFormCriteria.push(["element_1_1","name_label,element_1_1_label","!"]);
contactFormCriteria.push(["element_1_2","name_label,element_1_2_label","!"]);
contactFormCriteria.push(["element_2","email_label","@"]);
contactFormCriteria.push(["element_4_1","element_4_label,element_4_1_label","c-\\d{3}"]);
contactFormCriteria.push(["element_4_2","element_4_label,element_4_2_label","c-\\d{3}"]);
contactFormCriteria.push(["element_4_3","element_4_label,element_4_3_label","c-\\d{4}"]);
contactFormCriteria.push(["element_3","comment_label","!"]);


//regular expressions:
var reNumber = /\b\d+\b/;
var reEmail = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var reZip = /^\d{5}([\-]\d{4})?$/;
var reCc = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;
var reCvv = /(?!000)\d{3,4}$/;

var regExRefference = new Array();
//["identifier", function ref]
regExRefference.push(["i", reNumber]);
regExRefference.push(["@", reEmail]);
regExRefference.push(["zip", reZip]);
regExRefference.push(["cc", reCc]);
regExRefference.push(["cvv", reCvv]);

function checkForm(theForm,fieldsCheckArray, onCompleteFunction){
	
	document.getElementById("errorDiv").style.display = "none";
	resetTitleStyles(fieldsCheckArray);
	
	var errorFound = false;
	
	for(var elementNumber=0; elementNumber < fieldsCheckArray.length; elementNumber++){
	
		var markField = false;
		var tempField = theForm[fieldsCheckArray[elementNumber][0]];
		var tempFieldValue = theForm[fieldsCheckArray[elementNumber][0]].value;
		var tempFieldType = theForm[fieldsCheckArray[elementNumber][0]].type;
	
		validationArray = fieldsCheckArray[elementNumber][2].split(",");
		for(var identifier=0; identifier < validationArray.length ;identifier ++){

				//check for custom
				if(validationArray[identifier].indexOf("c-") == 0){
					var tempRegEx = new RegExp(validationArray[identifier].replace("c-", ""));
					if(!tempRegEx.test(tempFieldValue)) markField = true;
				}else if(validationArray[identifier] == "!"){
					switch(tempFieldType){
						case 'text':
						case "textarea":
							if(tempFieldValue == "") markField = true;
							break;
						case 'checkbox':
							if(!tempField.checked) markField = true;
							break;
					}
				}else{
					for(var regEx=0; regEx < regExRefference.length; regEx ++){
						if(validationArray[identifier] == regExRefference[regEx][0]){
							if(!regExRefference[regEx][1].test(tempFieldValue)) markField = true;
							break;
						}
					}
				}
		}
		
		if(markField){
			var fieldsToMarkArray = fieldsCheckArray[elementNumber][1].split(",");
			for(var errorField = 0; errorField < fieldsToMarkArray.length; errorField++){
				markError(fieldsToMarkArray[errorField]);
			}
			errorFound = true;
		}
	}

	if(errorFound){
		document.getElementById("errorDiv").style.display = "block";
		document.location.href="#formTop";
		if(onCompleteFunction) onCompleteFunction(false);
		return;
	}else{
		//alert('Successful form check!');
		if(onCompleteFunction) onCompleteFunction(true);
		theForm.submit();
	}
}

function resetTitleStyles(fieldsCheckArray){
	for(var elementId = 0; elementId < fieldsCheckArray.length; elementId++){
			var fieldsToMarkArray = fieldsCheckArray[elementId][1].split(",");
			for(var errorField = 0; errorField < fieldsToMarkArray.length; errorField++){
				var theElement = fieldsToMarkArray[errorField];
				document.getElementById(theElement).style.color = okTextColor;
			}
	}
}

function markError(element){
	document.getElementById(element).style.color = errorTextColor;
}

function hideSumbitButton(submit, loading, display){
	document.getElementById(submit).blur();
	document.getElementById(submit).style.display = "none";
	if(!display) display = "inline";
	if(loading) document.getElementById(loading).style.display = display;
}

