$(function(){
  if ($("#quoteForm").length > 0) {
    $(":radio[name='declined'], :radio[name='record'], :checkbox[name='use'],:radio[name='frequency'], :radio[name='coverType']").change(function() {
      this.validated = false;
    });

    $("input:radio[name=declined]").addValidation(function(){
      if (!($(this)[0].valid = $("input:radio[name=declined]:checked").val() == "No")) {
        $(this)[0].error = "Please call 1300 655 931 during normal office hours for a quote";
      }
    });

    $("input:radio[name=record]").addValidation(function(){
      if (!($(this)[0].valid = $("input:radio[name=record]:checked").val() == "No")) {
        $(this)[0].error = "Please call 1300 655 931 during normal office hours for a quote";
      }
    });

    //set custom validation rules
    $("#cc").addValidation(function(){
      var cc = parseInt(this.value);
      if (!(this.valid = (cc >= 1 && cc <= 9999))) {
        this.error = "Value should be in range 1 to 9999.";
      }
    });

    $("#value, #accValue").addServerValidation({
      path: "road.svc/PremiumValueInRange?bike=",
      getValue: function(){
        return $("#value").val() + "&acc=" + $("#accValue").val();
      },
      handler: handleValueValidation
    });

    $("#birthDate,#startDate").addValidation(function(){
      validateAge();
    });

    $("#loadNoClaim").hide();

    $("#postcode").addServerValidation({
      path: "road.svc/IsValidPostcode?postcode="
    }).predictOzState("#state");
  }
});

function validateAge() {
  var $birthDate = $("#birthDate");
  var $startDate = $("#startDate");
  var birthDateVal = $birthDate.val().length > 0 && $.validator.isDate($birthDate.val()) ? $birthDate.val() : "";
  var startDateVal = $startDate.val().length > 0 && $.validator.isDate($startDate.val()) ? $startDate.val() : "";
  var isJltDealer = $("#isJltDealer").val() == "True"
  $.getJSON(JLTA.Site.siteRoot + "road.svc/IsValidRiderAge",
            {
              "birthDate": birthDateVal,
              "startDate": startDateVal,
              "birthDateCaller": "birthDate",
              "startDateCaller": "startDate",
              "isJltDealer": isJltDealer
            },
            function(responses) {
              for (var i = 0; i < responses.length; i++) {
                var $e = $("#" + responses[i].Caller);
                if ($e[0].valid = responses[i].Message == "") {
                  $e.clearError();
                } else {
                  $e[0].error = responses[i].Message;
                  $e.displayError();
                }
              }
              if ($birthDate[0].valid && $startDate[0].valid && birthDateVal != "" && startDateVal != "") {
                loadNcb("noClaim", birthDateVal, startDateVal);
              } else {
                clearNcb("noClaim");
              }
            });
}

function handleValueValidation(data) {
  var form = $("#" + data.Caller)[0].form;
  if (data.Message != "") {//display error
    form["value"].valid =
    form["accValue"].valid = false;
    form["accValue"].error = data.Message;
    $("#value, #accValue").displayError();
  } else {//clear errors where appropriate
    this.validated = false;
    if (form["value"].error == "") {//error for value validation is only shown on accValue so test value before clearing
      $("#value").clearError();
    }
    $("#accValue").clearError();
  }
}


