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";
standaardmeldingen["partner"] =		"U heeft geen geldig partnernummer ingevoerd";

var anderemeldingen =				new Array();
anderemeldingen["geslacht"] =		"U heeft geen geslacht ingevinkt";

var myValidator =					"";
var drvooroferachter =				"erachter"; // 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));
	});
	$(".radiobutton").live("click", function(){
		myValidator.controle("", $(this).next());
	});
});

function positionOverlay(){
	topMargin = ($(window).height() - $("#overlay-wrapper").outerHeight()) / 2;
	leftMargin = ($(window).width() - $("#overlay-wrapper").outerWidth()) / 2;
	$("#overlay-wrapper").css({"margin-left":leftMargin, "margin-top":topMargin});
}
function closeOverlay(){
	$("body #overlay-shadow, body #overlay-wrapper").remove();
}
function setOverlay(text){
	$("body").append('<div id="overlay-shadow"></div><div id="overlay-wrapper"><div id="overlay"><p>'+text+'</p></div><div id="sluiten">sluiten</div></div>');
	$("#overlay-shadow, #overlay-wrapper #sluiten").click(function(){
		closeOverlay();
	});
	$(window).scrollTo($('.valp'),1000);
	positionOverlay();
}

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;
					}
				}
			});
			if(terug1==false && $("#"+form).hasClass("enquete")){
				setOverlay("Niet alle velden zijn (goed) ingevuld.");
			}
			return terug1;
		}
		footerposition();
	}
	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, "radio")) myValidator.printTekst( elmt, "radio" );
			}else{
				terug = true;
				myValidator.deleteTekst( elmt, "radio" );
			}
		}else if($(elmt).hasClass('checkbox')){
			if(! myValidator.controleCheckbox( $(elmt).attr('class').replace("required checkbox ","").replace(" input_checkbox","") ) ){
				if(!myValidator.issetMelding( elmt, "checkbox" )) myValidator.printTekst( elmt, "checkbox" );
			}else{
				terug = true;
				myValidator.deleteTekst( elmt, "checkbox" );
			}
		}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('partnerValidation')){
			if(! myValidator.controlePartner($(elmt).val()) ){
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst( elmt, "partner" );
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		} else if($(elmt).hasClass('strongPassword')){
			if(! myValidator.controleSelect(elmt) ) {
				if(!myValidator.issetMelding(elmt)) myValidator.printTekst(elmt, "strongPassword");
			
			}else{
				terug = true;
				myValidator.deleteTekst(elmt);
			}
		} else{
			if(! myValidator.controleTekst( $(elmt).val(),0 ) ){
				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."+named+":checked").each(function(){ checked++; });
		return (checked > 0);
	}
	this.controleNumber = function(value){
		ctest = /^([0-9]+)$/;
		return ctest.test(value);
	}
	this.controlePartner = function(value){
		var result = true;
		if(value != "") {
			var response = $.ajax({
				url: "/includes/ajax/partnerValidation.php",
				data: "partner=" + value,
				async: false
			}).responseText;
			result = (response == "true");
		}
		return result;
	}
	this.deleteTekst = function(elmt, type){
		$(elmt).prev("label").css({"color":nowLabelcolor});
		if(drvooroferachter == "ervoor"){
			$(elmt).eq(0).prev("label").prev("p").slideUp("slow", function(){ $(this).remove() });
		}else{
				if(type=="checkbox" || type=="radio"){
					if(type=="checkbox"){
						className = $(elmt).attr("class").replace("required "+type+" ","").replace(" input_"+type,"");
						$("."+className).next().next("p").slideUp("slow", function(){ $(this).remove() });
					}else{
						nameName = $(elmt).attr("name");
						$("input[name="+nameName+"]").next().next("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{
			if(type=="checkbox" || type=="radio"){
				$(elmt).next().after("<p style=\"display:none\" class=\"valp\">"+melding+"</p>");
				$(elmt).next().next("p.valp").slideDown("slow");
			}else{
				$(elmt).after("<p style=\"display:none\" class=\"valp\">"+melding+"</p>");
				$(elmt).eq(0).next("p").slideDown("slow");
			}
		}
	}
	this.issetMelding = function(elmt, type){
		if(drvooroferachter == "ervoor")
			return $(elmt).eq(0).prev().prev().is("p");
		else
			if(type=="checkbox" || type=="radio"){
				return $(elmt).eq(0).next().next().is("p");
			}else{
				return $(elmt).eq(0).next().is("p");
			}
	}
}
