/**
 * 電話番号チェック
 */
jQuery.validator.addMethod("phone",

    function(value, element) {

        var grp = [];
        var i = 0;
        var key = "";
        n = $(element).attr('name');
        $.each(this.groups, function(index, name){
            if(n == index) {
                key = name;
            }
        });
        $.each(this.groups, function(index, name){
            if(key == name) {
                grp[i] = index;
                i++;
            }
        });

        var g = [];
        for(i=0, len = grp.length; i < len; i++) {
            g[i] = $("[name='"+grp[i]+"']").val();
        }
        str = g.join("-");
        if(str=="--"){
            cname = element.className.split(" ");
            for(var i=0, len=cname.length; i < len; i++) {
                if(cname[i] == "required") return false;
            }
            return true;
        }
        switch (g[0]) {
        default:
            return /^0[0-9]{1,3}-[0-9]{2,4}-[0-9]{2,4}/.test(str) && str.length <= 13;
            break;
        }
    },
    "invalid format."
);


jQuery.validator.addMethod("cakeremote",
  function(value, element, param) {
    if ( this.optional(element) )
      return "dependency-mismatch";

    var previous = this.previousValue(element);

    if (!this.settings.messages[element.name] )
      this.settings.messages[element.name] = {};
    this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;

    param = typeof param == "string" && {url:param+"/"+value} || param;
    param = typeof param == "string" && param.url+"/"+value || param;

    if ( previous.old !== value ) {
      previous.old = value;
      var validator = this;
      this.startRequest(element);
      var data = {};
      data[element.name] = value;
      $.ajax($.extend(true, {
        url: param,
        mode: "abort",
        port: "validate" + element.name,
        dataType: "json",
//        data: data,
        success: function(response) {
          var valid = response === true;
          if ( valid ) {
            var submitted = validator.formSubmitted;
            validator.prepareElement(element);
            validator.formSubmitted = submitted;
            validator.successList.push(element);
            validator.showErrors();
          } else {
            var errors = {};
            errors[element.name] = previous.message = response || validator.defaultMessage( element, "cakeremote" );
            validator.showErrors(errors);
          }
          previous.valid = valid;
          validator.stopRequest(element, valid);
        }
      }, param));
      return "pending";
    } else if( this.pending[element.name] ) {
      return "pending";
    }
    return previous.valid;
  }
);


jQuery.validator.addMethod("image",
    function(value, element) {
        var suffix = '(\.png|\.jpg|\.jpeg)';
        v = $(element).val();
        if(v == "") return true;
        if(v.match(suffix) != null) return true;
        return false;
    },
    "invalid image type."
);

jQuery.validator.addMethod("naturalnum",
    function(value, element) {
      return this.optional(element) || /^[0-9]*$/.test(value);
    },
    "invalid number."
);

jQuery.validator.addMethod("commanum",
	    function(value, element) {
	      return this.optional(element) || /^(0|([1-9](\d{0,2})((,\d{3})*)))$/.test(value);
	    },
	    "invalid number."
	);
