var _errorInputBG = "#fe9bac";
var _errorInputBorder = "1px solid red";

var _defaultInputBG = "#ffffff";
var _defaultInputBorder = "1px solid #dedede";

var _requiredBGImage = "url(http://www.holidaymanual.com/images/req.gif)";
var _defaultInputBGImage = "none";

var validationRegEx= new Array();

validationRegEx[0] = new Array();
validationRegEx[0]["filter"] = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
validationRegEx[0]["class"] = "reqEmail";

validationRegEx[1] = new Array();
validationRegEx[1]["filter"] = /^([0-9]{5})+$/;
validationRegEx[1]["class"] = "reqZip";

validationRegEx[2] = new Array();
validationRegEx[2]["filter"] = /^[2-9]{1}[0-9]{2}[2-9]{1}[0-9]{6}$/;
validationRegEx[2]["valueFilter"] = /[^0-9]/g;
validationRegEx[2]["class"] = "reqPhone";

addListener(window, 'load', formValidation);

function formValidation(){

	var requiredInputFields = getElementsByClass('req', document, 'INPUT');
	var requiredSelectFields = getElementsByClass('req', document, 'SELECT');
	var requiredErrorFields = getElementsByClass('error', document, 'INPUT');
	var requiredErrorSelect = getElementsByClass('error', document, 'SELECT');

	if(requiredInputFields){
		for (var i=0; i<requiredInputFields.length; i++){
		
			addListener(requiredInputFields[i], "keyup", checkRequiredInput);

			if(requiredInputFields[i].value != ""){
				requiredInputFields[i].style.backgroundImage = _defaultInputBGImage;
			} else{
				requiredInputFields[i].style.backgroundImage = _requiredBGImage;
			}
		}
	}

	if(requiredSelectFields){
		for (var i=0; i<requiredSelectFields.length; i++){
			addListener(requiredSelectFields[i], "change", checkRequiredSelect);
			requiredSelectFields[i].style.backgroundImage = (requiredSelectFields[i].options[requiredSelectFields[i].selectedIndex].value != "") ? _defaultInputBGImage : _requiredBGImage;
		}
	}

	if(requiredErrorFields){
		for (var i=0; i<requiredErrorFields.length; i++){
			addListener(requiredErrorFields[i], "keyup", checkErrorFields);
		}
	}

	if(requiredErrorSelect){
		for (var i=0; i<requiredErrorSelect.length; i++){
			addListener(requiredErrorSelect[i], "change", checkErrorSelect);
		}
	}	

	var regFields
	var filter;
	var classFilter;

	for (var i=0; i<validationRegEx.length; i++){

		regFields = getElementsByClass(validationRegEx[i]["class"], document, 'INPUT');	
	
		if(regFields){
			for (var j=0; j<regFields.length; j++){		
				addListener(regFields[j], "keyup", checkRegExFields);
				
				for (k in validationRegEx){

					classFilter = new RegExp("(^|\\s)"+validationRegEx[k]["class"]+"(\\s|$)");
					if ( classFilter.test(regFields[j].className)) {
						filter = validationRegEx[k]["filter"];

						compareValue = (validationRegEx[k]["valueFilter"]) ? regFields[j].value.replace(validationRegEx[k]["valueFilter"], '') : regFields[j].value; 
					}
					classFilter = false;
				}

				if(filter){
					regFields[j].style.backgroundImage = (filter.test(compareValue)) ? _defaultInputBGImage : _requiredBGImage;
					filter = false;
				}				
			}
		}
	}
}
			
function checkRequiredInput(e){
	
	var obj = e.target || window.event.srcElement;

	obj.style.backgroundImage = (obj.value != "") ? _defaultInputBGImage : _requiredBGImage;
}

function checkRequiredSelect(e){

	var obj = e.target || window.event.srcElement;

	obj.style.backgroundImage = (obj.options[obj.selectedIndex].value != "") ? _defaultInputBGImage : _requiredBGImage;
}

function checkErrorFields(e){

	var obj = e.target || window.event.srcElement;

	if (obj.value !=""){
		obj.style.backgroundColor = _defaultInputBG;
		obj.style.border = _defaultInputBorder;
	}
}

function checkErrorSelect(e){

	var obj = e.target || window.event.srcElement;

	if (obj.options[obj.selectedIndex].value != ""){
		obj.style.backgroundColor = _defaultInputBG;
		obj.style.border = _defaultInputBorder;
	}
}

function checkRegExFields(e){
	
	obj = e.target || window.event.srcElement;

	var filter;
	var classFilter;
	
	for (i in validationRegEx){
	
		classFilter = new RegExp("(^|\\s)"+validationRegEx[i]["class"]+"(\\s|$)");
		if ( classFilter.test(obj.className)) {
			filter = validationRegEx[i]["filter"];
			
			if (validationRegEx[i]["valueFilter"]){
				compareValue = obj.value.replace(validationRegEx[i]["valueFilter"], '');
			} else {
				compareValue = obj.value;
			}
		}
	}

	if(filter){
		if (filter.test(compareValue)){
			obj.style.backgroundImage = _defaultInputBGImage;			
		} else {
			obj.style.backgroundImage = _requiredBGImage;
		}
	}
}