//desc: valideren van formulieren
//param:
//	type: mailformv1 | nbform_unsubscribe
//	formId: id van <form>
PT.Sites.Linders.FormValidate = function(type, formId) {
	var meClass = this;
	this.Type = type;
	this.FormId = formId;

	PT.Sites.General.RegisterEvent(window, "load", function() { meClass.Initialize(); });
}

PT.Sites.Linders.FormValidate.prototype.Initialize = function() {
	var meClass = this;
	// formulier zoeken en onsubmit toekennen
	var form = get$(this.FormId);
	if (form) {
		form.onsubmit = function() { return meClass.FormSubmit(); }

		// alle <input> zoeken
		var inputs = form.getElementsByTagName("input");
		this.AssignOnblur(inputs);

		// alle <textarea> zoeken
		var textareas = form.getElementsByTagName("textarea");
		this.AssignOnblur(textareas);

		if (this.Type == "inlogform") {
			// alle <select> zoeken
			var selects = form.getElementsByTagName("select");
			this.AssignOnblur(selects);
		}

		if (this.Type == "nbform_unsubscribe") {
			this.UncheckAllGroups();
		}
	}
}

PT.Sites.Linders.FormValidate.prototype.UncheckAllGroups = function() {
	var form = get$(this.FormId);
	if (form) {
		var inputsdiv = form.getElementsByTagName('div');
		for (var j = 0; j < inputsdiv.length; j++) {
			if (inputsdiv[j].className == "inputgroups") {
				var inputs = inputsdiv[j].getElementsByTagName('input');
				for (var i = 0; i < inputs.length; i++) {
					if (inputs[i].className == 'bezoeker') {
						inputs[i].checked = false;
					}
				}				
			}
		}
	}
}

PT.Sites.Linders.FormValidate.prototype.AssignOnblur = function(inputs) {
	var meClass = this;
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].onblur) { // wel onblur op element
			var s = "";
			s = inputs[i].onblur + "";
			var isPostcode = (s.indexOf("postcode") > -1);
			var hasControle = (s.indexOf("controle") > -1);
			var hasEmail = (s.indexOf("'email'") > -1);
			var hasSelect = (s.indexOf("'select'") > -1);
			var isRequired = (s.indexOf("true);") > -1);
			if (isPostcode) {
				inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "postcode", isRequired); }
				inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "postcode", isRequired); }
			} else if (hasControle) {
				inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "controle", isRequired); }
				inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "controle", isRequired); }
			} else if (hasEmail) {
				inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "email", isRequired); }
				inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "email", isRequired); }
			} else if (hasSelect) {
				inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "select", isRequired); }
				inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "select", isRequired); }
			} else {
				inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "text", isRequired); }
				inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "text", isRequired); }				
			}
		}
	}
}

PT.Sites.Linders.FormValidate.prototype.ExecuteOnblur = function(inputs) {
	var labels = "";
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].onblur) {
			var isValid = inputs[i].ptValidate(inputs[i])
			if (!isValid) {
				labels = labels + this.GetLabel(inputs[i].id, get$(this.FormId)) + ", ";
			}
		}
	}
	return labels;
}

//desc: submitten van formulier vanuit javascript
//example:
//	PT.Instances.PeerForm = new PT.Sites.Linders.FormValidate("mailformv1", "contactform");
//	PT.Instances.PeerForm.SubmitForm();
PT.Sites.Linders.FormValidate.prototype.SubmitForm = function() {
	var form = get$(this.FormId);
	if (form) { form.submit(); }
}

//desc: controleren of formulier goed is ingevuld
//return: true als alles goed is, false als alles fout is
PT.Sites.Linders.FormValidate.prototype.FormSubmit = function() {
	if (get$('land_sturen')) {
	    get$('land_sturen').value = get$('land').value;
	}
	var form = get$(this.FormId);
	if (form) {
		// alle <input> zoeken
		var inputs = form.getElementsByTagName("input");
		var labels = this.ExecuteOnblur(inputs);

		// alle <textarea> zoeken
		var textareas = form.getElementsByTagName("textarea");
		labels = labels + this.ExecuteOnblur(textareas);
		
		if (this.Type == "inlogform") {
			// alle <select> zoeken
			var selects = form.getElementsByTagName("select");
			labels = labels + this.ExecuteOnblur(selects);
		}
	}

	if (labels != "") {
		if (labels.split(", ").length > 2) {
			alert("U heeft de velden " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld.");
		}
		else {
			alert("U heeft het veld " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld.");
		}
	}

	return (labels == "");
}

PT.Sites.Linders.FormValidate.prototype.GetLabel = function(id, formRoot) {
	if (formRoot) {
		var labels = formRoot.getElementsByTagName('label');
		for (var i = 0; i < labels.length; i++) {
			if (labels[i].htmlFor == id) {
				return labels[i].innerHTML;
			}
		}
	}
}

PT.Sites.Linders.FormValidate.prototype.SetBorder = function(obj, error) {
	if (obj) {
		if (error) {
			obj.style.border = "1px #ff0000 solid";
		} else {
			obj.style.border = "1px #A7A6AA solid";
		}
	}
}

//desc: controleert het obj (input of textarea) en geeft deze een rode border als het fout is of weer de normale kleur.
//return: true als waarde goed is, false als er een invoerfout is
//nb: als geen object dan resultaat true
PT.Sites.Linders.FormValidate.prototype.ValidateInput = function(obj, type, required) {
	if (!obj) { obj = PT.Sites.General.EventSrv(obj); }
	if (!obj) { return true; }

	if (this.Type == "inlogform") {

	}


	var validate_result = true;
	if (required) {
		if (obj.tagName == 'SELECT') {
			if (obj.getElementsByTagName("option")[0].innerHTML == 'Kies bedrijfssoort') {
				obj.style.color = "#ff0000";
				validate_result = false;
			}
			else if (obj.id != 'land') {
				obj.style.color = "#888888";
				var form = get$(this.FormId);
				var originalAction = get$(this.FormId).action;
				if (obj.selectedIndex < 1) {
					if (window.location.href == 'http://' + window.location.host + '/registreren.html') {
						form.action = 'http://www.linderskwekerijen.nl/register_send.html';
					}
					else {
						form.action = 'http://www.linderskwekerijen.nl/assortiment.html';
					}
				}
				else {
					form.action = originalAction;
				}
			}
		}
		else {
			if (type == "postcode") {
				if (!obj.value) {
					this.SetBorder(obj, true);
					validate_result = false;
				} else {
					switch (document.getElementById("land").selectedIndex) {
						case 0:
							if (!/^[1-9]{1}[0-9]{3} ?[A-Za-z]{2}$/.test(obj.value)) {
								this.SetBorder(obj, true);
								validate_result = false;
							} else {
								this.SetBorder(obj, false);
							}
							break;
						case 1:
							if (!/^([A-Za-z]{1}(\s|\-)?[1-9]{1}[0-9]{3})|([1-9]{1}[0-9]{3})$/.test(obj.value)) {
								this.SetBorder(obj, true);
								validate_result = false;
							} else {
								this.SetBorder(obj, false);
							}
							break;
						case 2:
							if (!/^([A-Za-z]{1}(\s|\-)?[1-9]{1}[0-9]{4})|([1-9]{1}[0-9]{4})$/.test(obj.value)) {
								this.SetBorder(obj, true);
								validate_result = false;
							} else {
								this.SetBorder(obj, false);
							}
							break;
					}
				}
			}
			else if (type == "controle") {
				if (get$("wachtwoord").value != '') { //alleen als wachtwoord ingevuld is, is verplicht
					if (!obj.value) {
						this.SetBorder(obj, true);
						validate_result = false;
					}
					else if (obj.value != get$("wachtwoord").value) { // als niet overeenkomt, is fout
						this.SetBorder(obj, true);
						validate_result = false;
					}
					else {
						this.SetBorder(obj, false);
					}
				}
				else if (obj.value) {
					this.SetBorder(obj, true);
					validate_result = false;
				}
			}
			else if (!obj.value) {
				this.SetBorder(obj, true);
				validate_result = false;
			}
			else {
				this.SetBorder(obj, false);
			}
		}
	}

	if ((type == "email") && (validate_result == true)) {
		obj.value = obj.value.Trim();
		if ((PT.Sites.General.IsValidEmail(obj.value)) || (obj.value == "")) {
			this.SetBorder(obj, false);
		} else {
			this.SetBorder(obj, true);
			validate_result = false;
		}
	}

	return validate_result;
}
