function doFocus(obj) {
	$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:392},400);
}

function doBlur(obj) {
	if (validate(obj)) {
		isGood(obj);
	}
}

function reportErr(obj, message) {
	$(obj).addClass("error").parents("label").removeClass("isgood").addClass("required").addClass("error").find(".infopop").html(message).addClass("errorpop").animate({opacity:1,left:392},400);
}

function isGood(obj) {
	$(obj).removeClass("error").removeClass("active").parents("label").addClass("isgood").removeClass("error").removeClass("active").find(".infopop").removeClass("errorpop").animate({opacity:0,left:413},400);
} 	

function validate(obj) {
	// Extend het jQuery object om Regular expression masks op te nemen die aan eigenschappen zijn toegekend
	mask = jQuery.extend({textfieldmask: /^[a-z\.\s-]{2,}$/i,usernamemask: /^[a-z0-9]{3,}$/i,streetnrmask: /^([0-9\s\-]+)([a-z0-9])*/i,phonemask: /^[0-9\(\)\+\.\s-]{10,}$/i,passwordmask: /^\w{5,}$/, emailmask:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/,companymask: /^[a-z0-9\.\s-]{2,}$/i,zipmask: /^([0-9]{4,4}?)+([a-z]){2,2}?$/i})
	// Extend het jQuery object om foutmeldingen toe te voegen die aan eigenschappen zijn toegekend
	errmsg = jQuery.extend({textfielderr:"At least two characters",usernameerr:"At least three characters",phoneerr: "Vergeet het kengetal niet",passworderr:"At least 5 characters",emailerr:"Invalid e-mail address",matcherr: "Must match",companyerr: "Minimaal 2 letters of cijfers",ziperr: "4 cijfers gevolgd door 2 letters",streetnrerr: "Minimaal 1 cijfer"});

	// 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 "fname": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "lname": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
		case "username": 	masktouse="usernamemask"; 		errtouse="usernameerr"; 	break;
		case "email": 		masktouse="emailmask"; 			errtouse="emailerr"; 		break;
		case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
		case "city": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "zip": 		masktouse="zipmask"; 			errtouse="ziperr"; 			break;
		case "street": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "streetnr": 	masktouse="streetnrmask"; 		errtouse="streetnrerr"; 	break;
		case "cityShip": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "zipShip": 	masktouse="zipmask"; 			errtouse="ziperr"; 			break;
		case "streetShip": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "streetnrShip": masktouse="streetnrmask"; 		errtouse="streetnrerr"; 	break;
		case "company": 	masktouse="companymask"; 		errtouse="companyerr"; 		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 Regular Expression 
		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 foutmelding voor beide 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 Regular Expression mislukt
			reportErr(obj,errmsg[errtouse]);
			return false; 
		}
	} 
	else {	
		// Dit is geen verplicht veld, dus hoeven we dit nergens tegen te valideren			
		return true;
	}
}