﻿(function($){
    $.fn.formtest = function(elclickbutton,validationgroup) {
		var prevel = null;
		var settings = {
		  'validationgroup': 'formulier',
		  'dynamic': true
		};
		$(elclickbutton).click(function(){$.fn.formtest.completeform()});
		$.fn.formtest.initialize();
	}

	$.fn.formtest.initialize = function() {
	  if (typeof(Page_Validators) == "undefined") {
			return false;
	  }
		validationGroup = "";
		if(!validationGroup || validationGroup == "") {
			validationGroup = "formulier";
		}
		var prevField = null;
		var prevValid = true;
		for (i = 0;i < Page_Validators.length; i++) {
			if(eval(Page_Validators[i].id).validationGroup.toString() != validationGroup){ continue; }
			ValidatorValidate(Page_Validators[i], eval(Page_Validators[i].id).validationGroup.toString(), null);
			if((eval(Page_Validators[i].id).isvalid) && (eval(Page_Validators[i].id).controltovalidate.toString() != prevField)) {
				$.fn.formtest.correct($("#" + eval(Page_Validators[i].id).controltovalidate.toString()));
			}
			if (prevField != eval(Page_Validators[i].id).controltovalidate.toString()) {
			  el = $("#" + eval(Page_Validators[i].id).controltovalidate.toString());
			  $(el).blur(function(){$.fn.formtest.fieldtest(this);});
			  $(el).focus(function(){$.fn.formtest.currenterror(this);});
			  if($(el).closest(".regel").find(".status .notice .notice_inner").html()) {
				  if($(el).closest(".regel").find(".status .notice .notice_inner").html().length > 25) {
					  //alert($(el).closest(".regel").find(".status .notice .notice_inner").html().length);
					  $(el).closest(".regel").removeClass("message").addClass("message");
				  }
				  //alert($(el).closest(".regel .status .notice .notice_inner").html());
		    }
		    // if($(el).closest(".regel").find(".status .notice").length == 0) {
        //   $(el).closest(".regel").find(".status").append("<div class='notice'><div class='notice_inner'><div class='error></div></div></div>");
		    // } else if($(el).closest(".regel").find(".status .notice .notice_inner").length == 0) {
        //   $(el).closest(".regel").find(".status .notice").html("<div class='notice_inner'>" + $(el).closest(".regel").find(".status .notice").html() + "<div class='error></div></div>");
        // }
		  }
			if(i < Page_Validators.length) {
				prevField = eval(Page_Validators[i].id).controltovalidate.toString();
				prevValid = eval(Page_Validators[i].id).isvalid;
			}
		}
	}
  $.fn.formtest.incorrect = function(el,tekst,popup) {
    $(el).unbind("focus");
    $(el).focus(function(){$.fn.formtest.fieldtest(this);});
	  $(el).unbind("keyup");
	  $(el).bind("keyup",function(){$.fn.formtest.fieldtest(this);});
	  if(popup) {
		  $(el).closest(".regel").find(".status .notice .notice_inner .error").html(tekst);
	  }
	  $(el).closest(".regel").removeClass("currenterror").removeClass("correct").removeClass("incorrect").addClass("incorrect").addClass("currenterror");
	  if($(el).val() != '') {
		  $(el).closest(".regel").removeClass("ingevuld").addClass("ingevuld");
	  } else {
		  $(el).closest(".regel").removeClass("ingevuld");
	  }
  }
  $.fn.formtest.correct = function(el) {
	  $(el).closest(".regel").removeClass("currenterror").removeClass("correct").removeClass("incorrect").addClass("correct");
	  if($(el).val() != '') {
		  $(el).closest(".regel").removeClass("ingevuld").addClass("ingevuld");
	  } else {
		  $(el).closest(".regel").removeClass("ingevuld");
	  }
  }
  $.fn.formtest.currenterror = function(el) {
	  //$("h1").html(el.id); //+ "<br />" + $.fn.formtest.prevel.id
	  $(el).closest(".regel .message").removeClass("currentmessage").addClass("currentmessage");

	  if(el != $.fn.formtest.prevel) {
		  $($.fn.formtest.prevel).closest(".regel").removeClass("currenterror").removeClass("currentmessage");
		  $.fn.formtest.prevel = el;
	  }
  }
  $.fn.formtest.fieldtest = function(el){
	  var melding = '';
	  var fieldi = -1;
	  for (i = 0; i < Page_Validators.length; i++){
		  if(eval(Page_Validators[i].id).controltovalidate.toString() == el.id){
			  ValidatorValidate(Page_Validators[i], eval(Page_Validators[i].id).validationGroup.toString(), null);
			  if(!eval(Page_Validators[i].id).isvalid){
			    melding += eval(Page_Validators[i].id).errormessage.toString().replace(' *','') + "<br />";
			  }
			  fieldi = i;
		  } else if(fieldi >= 0) {
		    break; 
		  }
	  }
	  if(fieldi >= 0) {
		  $.fn.formtest.currenterror($("#" + eval(Page_Validators[fieldi].id).controltovalidate.toString()));
		  if(melding != '') {
			  $.fn.formtest.incorrect($("#" + eval(Page_Validators[fieldi].id).controltovalidate.toString()),melding,true);
			  return false;
		  } else {
			  $.fn.formtest.correct($("#" + eval(Page_Validators[fieldi].id).controltovalidate.toString()));
			  return true;
		  }
	  }
  }
  $.fn.formtest.completeform = function(validationGroup,elfoutmelding) {
    if (typeof(Page_Validators) == "undefined") { return true; }
    if(!validationGroup || validationGroup == "") { validationGroup = "formulier"; }

    var blnFirst = false;
    var prevField = null;
    var prevValid = true;
    var melding = '';
    for (i = 0; i < Page_Validators.length; i++) {
	    if(eval(Page_Validators[i].id).validationGroup.toString() != validationGroup) { continue; }
      if($("#" + eval(Page_Validators[i].id).controltovalidate.toString() + ":visible").length == 0) { continue; }
	    ValidatorValidate(Page_Validators[i], eval(Page_Validators[i].id).validationGroup.toString(), null);
	    if(!eval(Page_Validators[i].id).isvalid) {
	      if (prevField != eval(Page_Validators[i].id).controltovalidate.toString() || prevValid) {
          if(blnFirst == false) {
		        $.fn.formtest.incorrect($("#" + eval(Page_Validators[i].id).controltovalidate.toString()),'',false);
          }
		      melding += eval(Page_Validators[i].id).errormessage.toString().replace(' *','') + "<br />";
	      }
	      if(blnFirst == false) {
		      el = $("#" + eval(Page_Validators[i].id).controltovalidate.toString())
		      $.fn.formtest.fieldtest(el);
		      $.scrollTo(el, 100, { offset: -40, queue: false });
		      $(el).focus();
		      blnFirst = true;
	      }		  
	    } else if (eval(Page_Validators[i].id).controltovalidate.toString() != prevField) {
	      $.fn.formtest.correct($("#" + eval(Page_Validators[i].id).controltovalidate.toString()));
	    }
	    if(i < Page_Validators.length) {
        prevField = eval(Page_Validators[i].id).controltovalidate.toString();
        prevValid = eval(Page_Validators[i].id).isvalid;
	    }
    }

    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit = !Page_IsValid;
    if(blnFirst == false) {
       Page_Validators = Array();
    }
    if($(elfoutmelding).length > 0) {
      // alert('x');
      // if (!Page_IsValid) {
      //   $(elfoutmelding).html(melding);
      //   $(elfoutmelding).slideDown();
      // } else {
      //   $(elfoutmelding).slideUp();
      // }
    }
    return Page_IsValid;
	}
})(jQuery);