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";
anderemeldingen["cv"] = "U heeft geen bestand geselecteerd";

var myValidator = "";
var drvooroferachter = "ervoor"; // erachter
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($(elmt).hasClass('multiCheckbox')) {
			var groupName = this.getGroupName(elmt);
			elements = $("input." + groupName);
			labels = $(elements[0]).prevAll("label");
			label = $(labels[0]);
			if(! myValidator.controleMultiCheckbox( elements )) {
				if(!myValidator.hasError(label)) myValidator.addError(elmt, label, "checkbox" );
			}else{
				terug = true;
				myValidator.removeError(label);
			}
		} else if($(elmt).hasClass("file")) {
			label = $(elmt).parent().prev();
			if(! myValidator.controleTekst( $(elmt).val(),1 ) ){
				if(!myValidator.hasError(label))
					myValidator.addError(elmt, label, "file" );
			}else{
				terug = true;
				myValidator.removeError(label);
			}
		} 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.controleMultiCheckbox = function(elements) {
		var checkedFields = 0;
		for(var i = 0; i < elements.length; i++) {
			if($(elements[i]).is(":checked")) {
				checkedFields++;
			}
		}
		return (checkedFields > 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").fadeOut(function(){$(this).remove()});
		else
			$(elmt).next("p").fadeOut(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\">"+melding+"</p>");
			$(elmt).eq(0).prev("label").prev("p").fadeIn();
		}else{
			$(elmt).after("<p style=\"display:none\">"+melding+"</p>");
			$(elmt).eq(0).next("p").fadeIn();
		}
	}
	this.issetMelding = function(elmt){
		if(drvooroferachter == "ervoor")
			return $(elmt).eq(0).prev().prev().is("p");
		else
			return $(elmt).eq(0).next().is("p");
	}


	this.hasError = function(label){
		return $(label).prev().is("p");
	}
	this.addError = function(elmt, label, type){
		elmtname = $(elmt).attr('name');
		melding = ((anderemeldingen[elmtname])?anderemeldingen[elmtname]:standaardmeldingen[type]);
		nowLabelcolor = label.css("color");
		if(labelcolor.length > 1) label.css({"color":labelcolor});

		label.before("<p style='display:none'>" + melding + "</p>");
		label.prev("p").fadeIn();
	}
	this.removeError = function(label){
		label.css({"color":nowLabelcolor});
		label.prev("p").fadeOut(function(){$(this).remove()});
	}
	this.getGroupName = function(elmt) {
		var classes = $(elmt).attr("class");
		var start = classes.indexOf("group-");
		var end = classes.indexOf(" ", start);
		if(end == -1) {
			end = classes.length;
		}
		return classes.substr(start, end - start);
	}
}
