//desc: valideren van formulieren
//param:
//	type: mailformv1 | nbform_unsubscribe
//	formId: id van <form>
PT.Sites.General.FormValidate = function(type, formId) {
	var meClass = this;
	this.Type = type;
	this.FormId = formId;
	this.minCheckedGroups = 1;
	meClass.Initialize();
}

PT.Sites.General.FormValidate.prototype.Initialize = function() {
	var meClass = this;
	// formulier zoeken en onsubmit toekennen
	var form = document.getElementById(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 == "nbform_unsubscribe") {
			if ($('afmelden')) {
				$('afmelden').onmouseup = function() { meClass.UncheckAllGroups(); }
			}
		}
	}
}

PT.Sites.General.FormValidate.prototype.UncheckAllGroups = function() {
	var form = $(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;
					}
				}
			}
		}
		form.submit();
	}
}

PT.Sites.General.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 hasEmail = (s.indexOf("'email'") > -1);
			var isRequired = (s.indexOf("true") > -1);
			if(isRequired==true){
				if (hasEmail) {
					inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "email", true); }
					inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "email", true); }
				} else {
					inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "text", true); }
					inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "text", true); }
				}
			}
			else{
				if (hasEmail) {
					inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "email", false); }
					inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "email", false); }
				} else {
					inputs[i].ptValidate = function(obj) { return meClass.ValidateInput(obj, "text", false); }
					inputs[i].onblur = function(e) { return meClass.ValidateInput(PT.Sites.General.EventSrv(e), "text", false); }
				}
			}
		}
	}
}

PT.Sites.General.FormValidate.prototype.ExecuteOnblur = function(inputs) {
	var labels = "";
	
	//normale inputs
	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, $(this.FormId)) + ", ";
			}
		}	
	}
	return labels;
}

//desc: submitten van formulier vanuit javascript
//example:
//	PT.Instances.PeerForm = new PT.Sites.General.FormValidate("mailformv1", "contactform");
//	PT.Instances.PeerForm.SubmitForm();
PT.Sites.General.FormValidate.prototype.SubmitForm = function() {
	var form = $(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.General.FormValidate.prototype.FormSubmit = function() {
	var form = document.getElementById(this.FormId);
	var ret = true;
	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);

		//checkboxes
		var checkitems = 0;
		if(this.Type=="nbform_unsubscribe"){
			for(var i=0; i<inputs.length; i++){
				if(inputs[i].type=="checkbox" && inputs[i].id.indexOf('group_')!=-1){
					if(inputs[i].checked==true){ //"checked"?
						checkitems++;
					}
				}
			}
		}
		else{
			checkitems=this.minCheckedGroups;
		}
	}

	if (labels != "" && checkitems>=this.minCheckedGroups) {
		if (labels.split(", ").length > 2) {
			if(PT.Settings.Language=="eng"){
				alert("The fields " + labels.substring(0, (labels.length - 2)) + " weren't filled in correctly.");
			}
			else{
				alert("U heeft de velden " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld.");
			}
		}
		else {
			if(PT.Settings.Language=="eng"){
				alert("The field " + labels.substring(0, (labels.length - 2)) + " wasn't filled in correctly.");
			}
			else{
				alert("U heeft het veld " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld.");
			}
		}
		ret = false;
	}
	else if(labels == "" && checkitems<this.minCheckedGroups){
		if((this.minCheckedGroups-1)>=1){var a = this.minCheckedGroups-1}else{var a = 1}
		if(PT.Settings.Language=="eng"){
			alert("You have to fill in at least "+a+" group(s).");
		}
		else{
			alert("U moet minimaal "+a+" groep(en) selecteren.");
		}
		ret = false;
	}
	else if(labels != "" && checkitems<this.minCheckedGroups){
		if((this.minCheckedGroups-1)>=1){var a = this.minCheckedGroups-1}else{var a = 1}
		if (labels.split(", ").length > 2) {
			if(PT.Settings.Language=="eng"){
				alert("The fields " + labels.substring(0, (labels.length - 2)) + " weren't filled in correctly and you have to fill in at least "+a+" group(s).");
			}
			else{
				alert("U heeft de velden " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld en U moet minimaal "+a+" groep(en) selecteren.");
			}
		}
		else {
			if(PT.Settings.Language=="eng"){
				alert("The field " + labels.substring(0, (labels.length - 2)) + " wasn't filled in correctly. and you have to fill in at least "+a+" group(s).");
			}
			else{
				alert("U heeft het veld " + labels.substring(0, (labels.length - 2)) + " niet correct ingevuld en U moet minimaal "+a+" groep(en) selecteren.");
			}
		}
		ret = false;
	}
	return ret;
}

PT.Sites.General.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.General.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.General.FormValidate.prototype.ValidateInput = function(obj, type, required) {
	if (!obj) { obj = PT.Sites.General.EventSrv(obj); }
	if (!obj) { return true; }
	var validate_result = true;
	if (required) {
		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;
}