// ppk form validation

var PPK = function() {

	var W3CDOM = document.createElement && document.getElementsByTagName;
	
	var errorMessage = "";
		
	var validationErrorMessage = {
		required : 'This field is required',
		numeric : 'This field requires a number',
		zipcode : 'This field must hold a valid zipcode',
		pattern : 'Pattern incorrect',
		email : 'Incorrect email address',
		phone : 'Incorrect phone number',
		text : 'This field requires text only'
	};
		
	var validationFunctions = {
		required : isRequired,
		pattern : isPattern,
		zipcode : isZipcode,
		numeric : isNumeric,
		email : isEmail,
		phone : isPhone,
		text : isText
	};
	
	function isRequired(formField) {
		switch (formField.type) {
			case 'text':
			case 'textarea':
			case 'select-one':
				if (formField.value)
					return true;
				return false;
			case 'radio':
				var radios = formField.form[formField.name];
				for (var i=0;i<radios.length;i++) {
					if (radios[i].checked) return true;
				}
				return false;
			case 'checkbox':				
				return formField.checked;
		}	
	}
	
	function isPattern(formField,pattern) {
		var pattern = pattern || formField.getAttribute('pattern');
		var regExp = new RegExp("^"+pattern+"$","");
		var correct = regExp.test(formField.value);
		if (!correct && formField.getAttribute('patternDesc'))
			correct = formField.getAttribute('patternDesc');
		return correct;
	}
		
	function isZipcode(formField) {
		return isPattern(formField,'\\d{5}(-\\d{4})?');
	}
	
	function isNumeric(formField) {
		return isPattern(formField,"\\d+");
	}
	
	function isEmail(formField) {
		return isPattern(formField,"\\w*@\\w*\.\\w{2,4}")
	}
	
	function isPhone(formField) {
		//var pattern="^(\\([2-9]\\d{2}\\)\\s?|[2-9]\\d{2}-)\\d{3}-\\d{4}\\s?\\W?\\w*\\s?\\w*$";
		var pattern = "^(\\([2-9]\\d{2}\\)\\s?|[2-9]\\d{2}-|1-[2-9]\\d{2}-)\\d{3}-\\d{4}\\s?\\w*\\W?\\s?\\w*$";
		return isPattern(formField,pattern);
	}
	
	function isText(formfield) {
		return isPattern(formfield,"[A-Za-z\\s,. -]+")
	}
	
	function emptyFunction() {
		return true;
	}
	
	function writeError(obj,message) {
		/*obj.parentNode.style.color = "#f00";
		obj.parentNode.style.fontWeight = "bold";*/
		$(obj).parent().addClass('error');
	}
	
	function removeError(obj) {
		/*obj.parentNode.style.color = "#000";
		obj.parentNode.style.fontWeight = "normal";*/
		$(obj).parent().removeClass('error');
	}
	
	function checkCategories() {
		return true;
		// if not necessary just return true
		if (document.getElementById("usewizard").checked === true) return true;
		// check to see that the required number of checkboxes are checked if not using wizard
		var validChecks = true;
		var category = "";
		var test = 0;
		if (document.getElementById("choosefromcategory").checked === true) {
			// check to see if any radios selected
			var radios = document.forms['orderform'].imagetype;
			for (var i=0; i<radios.length; i++) {
				if (radios[i].checked) {
					test++;
					category = radios[i].value;
				}
			}
			if (test == 0) {
				errorMessage += "Please choose a category and some themes.\n";
				validChecks = false;
			} else {
				try {
				var count = RH.themecategories[category].length;
				switch (category) {
					case 'city':
					case 'country':
					case 'theme':
						//if (RH.themecategories[category].length < 3) {
						if (count < 3) {
							errorMessage += "Please choose at least three items from the '" + category + "' category.\n";
							validChecks = false;
							//return false;
						}
						break;
					case 'state':
						//if (RH.themecategories[category].length < 2) {
						if (count < 2) {
							errorMessage += "Please choose at least two items from the '" + category + "' category.\n";
							validChecks = false;
							//return false;
						}
						break;
					case 'university':
					case 'continent':
						//if (RH.themecategories[category].length < 1) {
						if (count < 1) {					
							errorMessage += "Please choose at least one item from the '" + category + "' category.\n";
							validChecks = false;
							//return false;
						}
						break;
				}
			} catch (e) {
				console.log(e);
			} 
			}
		}
		return validChecks;				
	}
	
	// public methods
	return {

	validateForms: function() {
		var els = document.forms['orderform'].elements;
		var validForm = true;
		var validChecks = true;
		var totalValid = true;
		var firstError = null;
		errorMessage = '';
		for (var i=0;i<els.length;i++) {
			if (els[i].removeError) {
				els[i].removeError();
			}
			var req = els[i].getAttribute('validation');
			if (!req) continue;
			var reqs = req.split(' ');
			if (els[i].getAttribute('pattern')) {
				reqs[reqs.length] = 'pattern';
			}				
			for (var j=0;j<reqs.length;j++) {
				if (!validationFunctions[reqs[j]])
					validationFunctions[reqs[j]] = emptyFunction;
				var OK = (validationFunctions[reqs[j]](els[i]));
				if (OK != true) {
					//var errorMessage = OK || validationErrorMessage[reqs[j]];
					// get the label text
					var text = els[i].parentNode.firstChild.nodeValue;
					errorMessage += "You have an error in the '" + text +"' field.\n";
					writeError(els[i],errorMessage)
					validForm = false;
					if (!firstError) {
						firstError = els[i];
					}						
					break;
				} else {
					removeError(els[i]);
				}
			}			
		}
		validChecks = checkCategories();
		validForm = (validForm && validChecks);
		if (!validForm) {
			alert(errorMessage);
		}
		return validForm;
	}
		
			
	} // end public
}();

