jQuery.validator.addMethod("validate", function(value, element, params) {
	var previous = this.previousValue(element);
	if ( previous.old !== value ) {
		previous.old = value;
	    var validator = this;
		this.startRequest(element);
	    if( params.data == undefined ) {
	        params.data = {};
	    }
	    params.data[element.name] = value;
	    $.post(params.url, params.data, function(response) {
	        if (response.result){
	        	validator.stopRequest(element, true); 
	        	previous.valid = true; 
	        } else {
	            var errors = {};
	            errors[element.name] = response.errorMessage;
	            validator.showErrors(errors);
	            previous.valid = false; 
	        }
	    }, 'json');
	    return "pending";
	} else if( this.pending[element.name] ) {
		return "pending";
	}
	return previous.valid;
}, '');

jQuery.aa = {
    /**
     * @func replaceAll(value,value,value) return value
     * @brief 문자열 치환
     */
    replaceAll : function(val,str,change) {
      return val.split(str).join(change);
    },
    /**
     * @func isEmpty(value) return boolean
     * @brief 빈값 여부 확인
     */
    isEmpty : function(val) {
      var is_type = typeof val;

      if(val == null || val == 'undefined' || typeof val == 'undefined') { return true; }
      else if(is_type == 'string') {
        val = this.replaceAll(val,/\s+/g,'');
        if(val == '') { return true; }
      }

      return false;
    },
    /**
     * input type
     */
    isEmptyText : function(element, message) {
      if( this.isEmpty(element.val()) ) {
    	  alert(message);
    	  element.focus();
    	  return true;
      }

      return false;
    },
    /**
     * @func isRegnum(value) return boolean
     * @brief 대한민국 주민등록번호가 올바른지 판단한다.
     */
    isRegnum : function(val) {
       val = val.replace(/[^0-9]+/g,'');

       var count = 1;
       var total = 0;

       for (var i =0; i < 12; i++) {
           if (count > 8) {
             count = 1;
             count++;
           } else {
             count++;
           }

           total +=parseInt(val.charAt(i))*count;
       }

       var mod = total%11;
       var check = 11 - mod;

       if (check == 10) { check = 0; }
       if (check == 11) { check = 1; }

       if (check == parseInt(val.charAt(12))) { return true; }
       else { return false; }
     },
    /**
     * @func isCount(min|max,number,value) return boolean
     * @brief 문자열 최대 길이와 최소길이를 판단한다.
     */
     isCount : function(mode,num,val) {
       val = new String(val); 
       var len_val = val.length;

       if((len_val < num && mode == 'min_length') || (len_val > num && mode == 'max_length')) { return false; }
       else { return true; }
     },
     /**
      * 앵커 값을 반환
      */
     getAnchor:function(s) {
		var anchorRegExp = new RegExp(/#(.*)$/);
		var a = s.match(anchorRegExp);
		return (a && a[1]) ? a = a[1] : "";
     }
}