// JavaScript Document

$(function(){
		// Vangt elk formulierelement
		$("label[title]").each(function(){
			$(this).append("<div class=\"infopop\">");	
			titletext = $(this).attr("title");
			$(this).removeAttr("title");
			$(".infopop",this).css({opacity:0}).html(titletext);
			$("input",this).focus(function(){
				// Mouseover
				doFocus(this);
			}).blur(function(){
				// MouseOut
				doBlur(this);
			});
			$("textarea",this).focus(function(){
				// Mouseover
				doFocus(this);
			}).blur(function(){
				// MouseOut
				doBlur(this);
			});
		});
	});

	function doFocus(obj) {
		$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:387},395);
	}
	
	function doBlur(obj) {
		if (validate(obj)) {
			isGood(obj);
		}
	}
	
	function reportErr(obj, message) {
		$(obj).addClass("error").parents("label").removeClass("isgood").addClass("imageerror").addClass("error").find(".infopop").html(message).addClass("errorpop").animate({opacity:1,left:387},395);
	}
	
	function isGood(obj) {
		$(obj).removeClass("error").removeClass("errmsg").removeClass("active").parents("label").addClass("isgood").removeClass("error").removeClass("errmsg").removeClass("active").find(".infopop").removeClass("errorpop").removeClass("errmsg").removeClass("errmsg").animate({opacity:0,left:408},395);
	} 	

	function validate(obj) {
		// Extend het jQuery object om reguliere expressie masks op te nemen die aan eigenschappen zijn toegekend
		mask = jQuery.extend({
			textfieldmask: /^[a-z0-9\.\s-]{1,}$/i,
			phonemask: /^[0-9\(\)\+\.\s-]{8,}$/i,
			passwordmask: /^\w{5,}$/, 
			emailmask:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/});
		
		// Extend het jQuery object om foutmeldingen toe te voegen die aan eigenschappen zijn toegekend
		errmsg = jQuery.extend({
			textfielderr:"Minimaal 5 letters",
			phoneerr: "Vergeet het kengetal niet",
			passworderr:"Minimaal 5 karakters",
			emailerr:"Ongeldig adres",
			matcherr: "Moet overeenkomen"});
	
		// Stel variabelen in die de details bevatten van welk masker we gaan gebruiken en of dit veld overeen moet komen met een ander veld
		var masktouse = null;
		var mustmatch = null;
		// Bepaal tegen welk mask-type we gaan valideren
		switch(obj.name) {
			case "naam": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
			case "email": 		masktouse="emailmask"; 			errtouse="emailerr"; 		break;
			case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
			case "website": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
			case "onderwerp": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
			case "bericht": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
			case "password": 	masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="verpassword"; 	break;
			case "verpassword": masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="password"; 		break;
		}
		// Controleer of het element een verplicht veld is, voordat we er tegen gaan valideren
		if($(obj).parents("label").hasClass("required") && masktouse) {
			// Stel een snelle manier in om het object dat we valideren te bereiken
			pointer = $(obj);
			// Test de waarde van het veld tegen de reguliere expressie
			if (mask[masktouse].test(pointer.val())) {
				// Het veld is succesvol gevalideerd!
				
				// Kijk of het veld overeen moet komen met een ander veld binnen het formulier
				if (mustmatch) {
					// Het moet overeenkomen, dus pak het object waarmee het overeen moet komen 
					matchobj = $("#"+mustmatch);
					if (matchobj.val()!='' && matchobj.val()!=pointer.val()) {
						// De velden komen niet overeen, dus laat een error voor beiden zien 
						reportErr(obj,errmsg["matcherr"]);	
						reportErr(matchobj,errmsg["matcherr"]);
					}
					else {
						// Of de velden komen overeen, of het veld is nog niet afgerond
						// Als het andere veld afgerond is roep je de isGood-functie om de foutmeldingen te verwijderen
						if (matchobj.val()!='') { isGood(matchobj);}
						return true;
					}
				}
				else {
					// Er hoeft niets gechecked te worden, dus return true - validatie gelukt!
					return true;
				} 
			}
			else { 
				// De validatie van dit veld met een reguliere expressie mislukt
				reportErr(obj,errmsg[errtouse]);
				return false; 
			}
		} 
		else {	
			// Dit is geen verplicht veld, dus hoeven we dit nergens tegen te valideren			
			return true;
		}
	}
