﻿(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 elFirst = null;
    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) {
          $.fn.formtest.incorrect($("#" + eval(Page_Validators[i].id).controltovalidate.toString()), '', false);
          melding += eval(Page_Validators[i].id).errormessage.toString().replace(' *', '') + "<br />";
        }
        el = $("#" + eval(Page_Validators[i].id).controltovalidate.toString())
        $.fn.formtest.currenterror(el);
        if (!elFirst) {
          elFirst = $(el);
        }
        //$(el).focus();
      } 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;
      }
    }
    if (elFirst) {
      $.scrollTo(elFirst, 100, { offset: -40, queue: false });
      $(elFirst).focus();
    }

    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit = !Page_IsValid;
    if (!elFirst) {
      Page_Validators = Array();
    }
    if ($(elfoutmelding).length > 0) {
      // alert('x');
      // if (!Page_IsValid) {
      //   $(elfoutmelding).html(melding);
      //   $(elfoutmelding).slideDown();
      // } else {
      //   $(elfoutmelding).slideUp();
      // }
    }
    return Page_IsValid;
  }
})(jQuery);