jQuery.validator.setDefaults({
  debug: false,
  success: "valid",
  messages: {
    cust_no: {
      digits: "Ett korrekt kundnummer innehåller endast siffror"
    }
  }
});

jQuery.extend(jQuery.validator.messages, {
	required: "Obligatorisk uppgift",
	maxlength: jQuery.format("Får högst bestå av {0} tecken"),
	minlength: jQuery.format("Måste bestå av minst {0} tecken"),
	rangelength: jQuery.format("Måste vara som minst {0} och som mest {1} tecken"),
	email: "E-postadressen är felaktig",
	url: "URL-en är felaktig",
	date: "Datumet är ej giltigt",
	number: "Är ej ett giltigt tal",
	digits: "Är ej ett heltal",
	equalTo: "Felaktig",
	range: jQuery.format("Måste vara mellan {0} och {1}"),
	max: jQuery.format("Får högst vara {0}"),
	min: jQuery.format("Måste minst vara {0}"),
	creditcard: "Ogiltigt kreditkortsnummer"
});

function ssn(nr) {
	if( !nr.match(/^\d{6}\-\d{4}$/) ){ return false; }
  var result;
  $.ajax({
    async: false,
    cache: false,
    type: 'GET',
    url: "/validate/ssn",
    data: { number: nr },
    dataType: 'json',
    success: function (data) { result = data.is_ok; }
  });
  return result;
}

function phone(nr) {
  var result;
  $.ajax({
    async: false,
    cache: false,
    type: 'GET',
    url: "/validate/telephone-number",
    data: { number: nr },
    dataType: 'json',
    success: function (data) { result = data.is_ok; }
  });
  return result;
}

function areacode(nr) {
  if( !nr.match(/^\d{2,4}$/) ){ return false; }
  var result;
  $.ajax({
    async: false,
    cache: false,
    type: 'GET',
    url: "/validate/areacode",
    data: { number: nr },
    dataType: 'json',
    success: function (data) { result = data.is_ok; }
  });
  return result;
}

function entrance(str) {
  if(! str.match(/^\s?[a-zA-ZåäöÅÄÖ]\s?$/) ) { return false; }
  return true;
}

function macAddress(str) {
  if(! str.match(/^([0-9a-f][0-9a-f][:-]?){5}[0-9a-f][0-9a-f]$/i) ) { return false; }
  return true;
}

function zipcode(str) {
  if(! str.match(/^\d{3}[ ]?\d{2}$/) ) { return false; }
  return true;
}

function date(str) {
  if(! str.match(/^\d{4}-\d{2}-\d{2}$/)) { return false; }
  return true;
}

function speed(str) {
  if(! str.match(/^\d* (Mb|Kb)\/s$/)) { return false; }
  return true;
}

function password (str) {
  if(! str.match(/^\S{8,}$/)) { return false; }
  return true;
}

function unique_campaign_code (str) {
  var result;
  $.ajax({
    async: false,
    cache: false,
    type: 'GET',
    url: "/campaign/unique",
    data: { code: str },
    dataType: 'json',
    success: function (data) { result = data.is_unique; }
  });
  return result;
}

jQuery.validator.addMethod("phone", function (value, element) {
  return this.optional(element) || phone(value); },
  "Telefonnummret är ej giltigt"
);

jQuery.validator.addMethod("areacode", function (value, element) {
  return this.optional(element) || areacode(value); },
  "Riktnummret existerar inte"
);

jQuery.validator.addMethod("ssn", function (value, element) {
  return this.optional(element) || ssn(value); },
  "Anges på formatet: 'ÅÅMMDD-XXXX'"
);

jQuery.validator.addMethod("entrance", function (value, element) {
  return this.optional(element) || entrance(value); },
  "Din uppgång måste vara en bokstav"
);

jQuery.validator.addMethod("zipcode", function (value, element) {
  return this.optional(element) || zipcode(value); },
  "Anges på formatet: '123 45'"
);

jQuery.validator.addMethod("mac-address", function (value, element) {
  return this.optional(element) || macAddress(value); },
  "MAC-adressen är ej giltig"
);

jQuery.validator.addMethod("date", function (value, element) {
  return this.optional(element) || date(value); },
  "Anges på formatet: 'ÅÅÅÅ-MM-DD'"
);

jQuery.validator.addMethod("speed", function (value, element) {
  return this.optional(element) || speed(value); },
  "Anges som 'x Mb/s' eller 'x Kb/s'"
);

jQuery.validator.addMethod("password", function (value, element) {
  return this.optional(element) || password(value); },
  "Minst 8 tecken och ej blanksteg"
);

jQuery.validator.addMethod("unique_campaign_code", function (value, element) {
  return this.optional(element) || unique_campaign_code(value); },
  "Kampanjkoden är upptagen"
);

jQuery.validator.addMethod("letters", function (value, element) {
  return this.optional(element) || value.match(/^[a-zA-ZåäöÅÄÖ]+$/); },
  "Endast bokstäver"
);
