/*Additional methods for jquery validate plugin (jquery_validate.js)*/
jQuery.validator.addMethod("nowhitespace", function(value, element) {
  return this.optional(element) || /^\S+$/i.test(value);
}, "No white space please.");

jQuery.validator.addMethod("nobackslash", function(value, element) {
  return this.optional(element) || /\\/i.test(value);
}, "No backslashes please.");

jQuery.validator.addMethod("alphanumeric", function(value, element) {
  return this.optional(element) || /^\w+$/i.test(value);
}, "Letters, numbers or underscores only please.");  

jQuery.validator.addMethod("alphanumericspace", function(value, element) {
  return this.optional(element) || /^[\w\ ]+$/.test(value);
}, "Letters, numbers, spaces or underscores only please.");

jQuery.validator.addMethod("lettersonly", function(value, element) {
  return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please.");

jQuery.validator.addMethod("passwordcheck", function(value, element) {
  return this.optional(element) || value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value);
}, "Your password must be at least 6 characters long and contain at least one letter and one number.");

/*Check if value is already in use*/
jQuery.validator.addMethod("unique", function(value, element, aUsed){
  if(this.optional(element)) { return true;}
  var sTestValue = value.toLowerCase();
  for (i=0;i<aUsed.length;i++) {
    if(sTestValue == aUsed[i].toLowerCase()) {
      return false;
    }
  }
  return true;
}, "The chosen value is already in use, please try another.");

/*Check if value is already in use but exclude current value*/
jQuery.validator.addMethod("uniquecurrent", function(value, element, aUsed){
  if(this.optional(element)) { return true;}
  var sTestValue = value.toLowerCase();
  for (i=0;i<aUsed.length;i++) {
    if(sTestValue == aUsed[i].toLowerCase()) {
      return false;
    }
    else if(sTestValue == sCurrent.toLowerCase()) {
      return true;
    }
  }
  return true;
}, "The chosen value is already in use, please try another.");
