function jj_email(value) {
	return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
}

function jj_url(value) {
	return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
}

function jj_date(value) {
	return !/Invalid|NaN/.test(new Date(value));
}

function jj_dateISO(value) {
	return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
}

function jj_number(value) {
	return /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
}

function jj_creditcard(value) {
	if (/[^0-9 -]+/.test(value))
		return false;
	var nCheck = 0, nDigit = 0, bEven = false;
	value = value.replace(/\D/g, "");

	for (var n = value.length - 1; n >= 0; n--) {
		var cDigit = value.charAt(n);
		var nDigit = parseInt(cDigit, 10);
		if (bEven) {
			if ((nDigit *= 2) > 9) nDigit -= 9;
		}
		nCheck += nDigit;
		bEven = !bEven;
	}
	return (nCheck % 10) == 0;
}

function jj_accept(value, param) {
	param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
	return value.match(new RegExp(".(" + param + ")$", "i"));
}

function jj_equalTo(value, value2) {
	return value == value2 ? true : false;
}

function jj_range(value, minv, maxv) {
	return ( value >= minv && value <= maxv );
}

function jj_max(value, param) {
	return value <= param;
}

function jj_min(value, param) {
	return value >= param;
}

function jj_rangelength(value, minlength, maxlength) {
	var length = $.trim(value).length;
	return ( length >= minlength && length <= maxlength );
}

function jj_minlength(value, param) {
	return $.trim(value).length >= param;
}

function jj_maxlength(value, param) {
	return $.trim(value).length <= param;
}

function jj_required(value) {
	return $.trim(value).length > 0;
}

	function isValidJuminNo(juminno) {
	  if(juminno=="" || juminno==null || juminno.length!=13) return false;
	  
	  var jumin1 = juminno.substr(0,6);
	  var jumin2 = juminno.substr(6,7);
	  var yy     = jumin1.substr(0,2);        // 년도
	  var mm     = jumin1.substr(2,2);        // 월
	  var dd     = jumin1.substr(4,2);        // 일
	  var genda  = jumin2.substr(0,1);        // 성별
	  var msg, ss, cc;
	 
	  // 숫자가 아닌 것을 입력한 경우
	  if (!isNumeric(jumin1)) return false;
	  
	  // 길이가 6이 아닌 경우
	  if (jumin1.length != 6) return false;
	  
	  // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
	  if (yy < "00" || yy > "99" || mm < "01" || mm > "12" || dd < "01" || dd > "31") return false;
	  
	  // 숫자가 아닌 것을 입력한 경우
	  if (!isNumeric(jumin2)) return false;
	 
	  // 길이가 7이 아닌 경우
	  if (jumin2.length != 7) return false;
	  
	  // 성별부분이 1 ~ 4 가 아닌 경우 외국인 5~8
	  if (genda < "1" || genda > "8") return false;
	 
	  // 연도 계산 - 1 또는 2: 1900년대 (5, 6 외국인), 3 또는 4: 2000년대 (7, 8 외국인)
	  cc = (genda == "1" || genda == "2" || genda == "5" || genda == "6") ? "19" : "20";
	  // 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
	  if (isValidDate(cc+yy+mm+dd) == false) return false;
	  
	  // Check Digit 검사
	  if (!isSSN(jumin1, jumin2)) return false;
	 
	  return true;
	}

	function isValidJuminNo2(juminno) {
		  if(juminno=="" || juminno==null || juminno.length!=13) {alert("1");return false};
		  
		  var jumin1 = juminno.substr(0,6);
		  var jumin2 = juminno.substr(6,7);
		  var yy     = jumin1.substr(0,2);        // 년도
		  var mm     = jumin1.substr(2,2);        // 월
		  var dd     = jumin1.substr(4,2);        // 일
		  var genda  = jumin2.substr(0,1);        // 성별
		  var msg, ss, cc;
		 
		  // 숫자가 아닌 것을 입력한 경우
		  if (!isNumeric(jumin1)) {alert("2");return false};
		  
		  // 길이가 6이 아닌 경우
		  if (jumin1.length != 6) {alert("3");return false};
		  
		  // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
		  if (yy < "00" || yy > "99" || mm < "01" || mm > "12" || dd < "01" || dd > "31") {alert("4");return false;}
		  
		  // 숫자가 아닌 것을 입력한 경우
		  if (!isNumeric(jumin2)) {alert("5");return false;}
		 
		  // 길이가 7이 아닌 경우
		  if (jumin2.length != 7) {alert("6");return false;}
		  
		  // 성별부분이 1 ~ 4 가 아닌 경우 외국인 5~8
		  if (genda < "1" || genda > "8") {alert("7");return false;}
		 
		  // 연도 계산 - 1 또는 2: 1900년대 (5, 6 외국인), 3 또는 4: 2000년대 (7, 8 외국인)
		  cc = (genda == "1" || genda == "2" || genda == "5" || genda == "6") ? "19" : "20";
		  // 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
		  if (isValidDate(cc+yy+mm+dd) == false) {alert("8");return false;}
		  
		  // Check Digit 검사
		  if (!isSSN(jumin1, jumin2)) {alert("9");return false;}
		 
		  return true;
		}
	
	function isValidDate(iDate) {
	  if( iDate.length != 8 ) return false;
	   
	  oDate = new Date();
	  oDate.setFullYear(iDate.substring(0, 4));
	  oDate.setMonth(parseInt(iDate.substring(4, 6)) - 1);
	  oDate.setDate(iDate.substring(6));
	 
	  if( oDate.getFullYear()     != iDate.substring(0, 4) 
	      || oDate.getMonth() + 1 != iDate.substring(4, 6) 
	      || oDate.getDate()      != iDate.substring(6) ){
	     
	    return false;
	  }
	    
	  return true;
	}
	 
	 
	 
	function isNumeric(s) { 
	  for (i=0; i<s.length; i++) { 
	    c = s.substr(i, 1); 
	    if (c < "0" || c > "9") return false; 
	  } 
	  return true; 
	}
	 
	 
	 
	function isSSN(s1, s2) {
	  n = 2;
	  sum = 0;
	  for (i=0; i<s1.length; i++)
	    sum += parseInt(s1.substr(i, 1)) * n++;
	  for (i=0; i<s2.length-1; i++) {
	    sum += parseInt(s2.substr(i, 1)) * n++;
	    if (n == 10) n = 2;
	  }
	  
	  c = 11 - sum % 11;
	  if (c == 11) c = 1;
	  if (c == 10) c = 0;
	  if (c != parseInt(s2.substr(6, 1))) return false;
	  else return true;
	}





