var standaardmeldingen = new Array();
standaardmeldingen["email"] = "Er is geen (juist) e-mailadres ingevuld";
standaardmeldingen["text"] = "Er is geen tekst ingevuld";
standaardmeldingen["phone"] = "Er is geen telefoonnummer ingevuld";
standaardmeldingen["radio"] = "U heeft geen optie aangeklikt";
standaardmeldingen["checkbox"] = "U heeft geen optie aangeklikt";
standaardmeldingen["date"] = "U heeft geen datum ingevuld";
standaardmeldingen["number"] = "U heeft geen nummer ingevuld";
standaardmeldingen["textarea"] = "U heeft geen tekst ingevuld";
standaardmeldingen["select"] = "U heeft geen optie geselecteerd";

var anderemeldingen = new Array();
anderemeldingen["geslacht"] = "U heeft geen geslacht ingevinkt";

var myValidator = "";
var drvooroferachter = "erachter"; //ervoor 
var labelcolor = "red"; // alle kleuren mogelijk
var nowLabelcolor = ""; // Leeg laten

$(document).ready(function(){
	myValidator = new validator();
	myValidator.start();	
	$("input.required, select.required, textarea.required").blur(function(){
		myValidator.controle( "",$(this) );
	});
});
function validator(){
	this.velden = new Array();
	this.fouten = 0;
	this.start = function(){
		i = 0;
		$("form").each(function(){
			if($(this).attr('id') == ''){
				i++;
				$(this).attr('id', 'form'+i);
			}
			$(this).submit(function(){ return myValidator.controle($(this).attr('id')) });
		});
	}
	this.controle = function(form, veld){
		if(veld){
			return myValidator.controlFieldByType(veld);
		}else{
			terug1 = true;
			$("#"+form+" input, #"+form+" select, #"+form+" textarea").each(function(){
				if($(this).hasClass('required') && $(this).attr('name') != ""){
					if(! myValidator.controlFieldByType(this) ){
						terug1 = false;
					}
				}
			});
			return terug1;
		}
	}
	this.controlFieldByType = function(elmt){
		terug = false;
		if($(elmt).hasClass('email')){
			if(! myValidator.controleEmail( $(elmt).val() ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "email" ); 
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('radio')){
			if(! myValidator.controleRadio( $(elmt).attr('name') ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "radio" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('checkbox')){
			if(! myValidator.controleCheckbox( $(elmt).attr('name') ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "checkbox" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('phone')){
			if(! myValidator.controleTelefoon( $(elmt).val() ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "phone" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('date')){
			if(! myValidator.controleDatum( $(elmt).val() ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "date" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('number')){
			if(! myValidator.controleNumber( $(elmt).val() ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "number" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('textarea')){
			if(! myValidator.controleTekst( $(elmt).val(),1 ) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "textarea" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else if($(elmt).hasClass('select')){
			if(! myValidator.controleSelect(elmt) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "select" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}else{
			if(! myValidator.controleTekst( $(elmt).val(),1 ) ){
				if(!myValidator.issetMelding(elmt))
					myValidator.printTekst( elmt, "text" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		}
		return terug;
	}
	this.controleEmail = function(value){
		ctest = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		return ctest.test(value);
	}
	this.controleTelefoon = function(value){
		ctest = /^[0-9\.\-\+\s]{8,13}$/;
		return ctest.test(value);
	}
	this.controleDatum = function(value){
		ctest = /^([0-9]{2,4})-([0-9]{2})-([0-9]{2,4})$/;
		return ctest.test(value);
	}
	this.controleWachtwoord = function(value){
		ctest = /^[a-zA-Z0-9]\w{5,20}$/;
		return ctest.test(value);
	}
	this.controleSelect = function(elmt){
		selectedItems = 0;
		$(elmt).children("option").each(function(){
			if( $(this).attr('selected') && $(this).val() != "" ) selectedItems++;
		});
		return (selectedItems > 0);
	}
	this.controleRadio = function(named){
		checked = 0;
		$("input[name="+named+"]:checked").each(function(){ checked++; });
		return (checked > 0);
	}
	this.controleTekst = function(value, slength){
		return (value.length > slength);
	}
	this.controleCheckbox = function(named){
		checked = 0;
		$("input[name="+named+"]:checked").each(function(){ checked++; });
		return (checked > 0);
	}
	this.controleNumber = function(value){
		ctest = /^([0-9]+)$/;
		return ctest.test(value);
	}
	this.deleteTekst = function(elmt){
		$(elmt).prev("label").css({"color":nowLabelcolor});
		if(drvooroferachter == "ervoor")
			$(elmt).eq(0).prev("label").prev("p").slideUp("slow", function(){ $(this).remove() });
		else
			$(elmt).next("p").slideUp("slow", function(){ $(this).remove() });
	}
	this.printTekst = function(elmt, type){
		elmtname = $(elmt).attr('name');
		melding = ((anderemeldingen[elmtname])?anderemeldingen[elmtname]:standaardmeldingen[type]);
		nowLabelcolor = $(elmt).prev("label").css("color");
		if(labelcolor.length > 1) $(elmt).prev("label").css({"color":labelcolor});
		if(drvooroferachter == "ervoor"){
			$(elmt).eq(0).prev("label").before("<p style=\"display:none\" class=\"valp\">"+melding+"</p>");
			$(elmt).eq(0).prev("label").prev("p").slideDown("slow");
		}else{
			$(elmt).after("<p style=\"display:none\" class=\"valp\">"+melding+"</p>");
			$(elmt).eq(0).next("p").fadeIn("slow");
		}
	}
	this.issetMelding = function(elmt){
		if(drvooroferachter == "ervoor")
			return $(elmt).eq(0).prev().prev().is("p");
		else
			return $(elmt).eq(0).next().is("p");
	}
}
