$(function () {
  if ($("#quoteForm").length > 0) {

    $("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").addServerValidation({
      path: "road.svc/IsValidRiderAge?date="
    });

    $("#loadNoClaim").remove();

    $("#birthDate").blur(function(){
      $.get("road.svc/LoadNCBByAge", {
        date: $(this).val()
      }, function(data){
        var s = $("#noClaim").attr({
          length: 1,
          disabled: $("NCB", data).length == 0
        })[0];
        $("NCB", data).each(function(){
          s.options[s.length] = new Option($("NCBName", this).text(), $("NCBId", this).text());
        })
      })
    }).trigger("blur");
    
    $("#postcode").addServerValidation({
      path: "road.svc/IsValidPostcode?postcode="
    }).predictOzState("#state");
  }
});

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();
  }
}
