/*  JavaScript String object library, version 1.0.0
 *  (c) 2006-2007 MinHo, Park
 *
 *  string.lib is freely distributable under the terms of an MIT-style license.
 *  For details, see the CherryNet web site: http://www.cherrynet.co.kr/dev/
 *
/*----------------------------------------------------------------------------*/

//----------------------------------------------------------------------------
// 문자의 좌,우 공백을 제거한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.trim = function(){
    return this.replace(/(^\s*)|(\s*$)/gi, "");
}

//----------------------------------------------------------------------------
// 문자의 좌측 공백을 제거한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.ltrim = function() {
	return this.replace(/(^\s*)/, "");
}

//----------------------------------------------------------------------------
// 문자의 우측 공백을 제거한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.rtrim = function() {
	return this.replace(/(\s*$)/, "");
}

//----------------------------------------------------------------------------
// 문자의 좌,우 공백을 제거한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.replaceAll = function(str1, str2) {
    var temp_str = "";
    if (this.trim() != "" && str1 != str2) {
        temp_str = this.trim();
        while (temp_str.indexOf(str1) > -1){
            temp_str = temp_str.replace(str1, str2);
        }
    }
    return temp_str;
}

//----------------------------------------------------------------------------
// 문자의 시작글자를 비교한다.
// @return : boolean
//----------------------------------------------------------------------------
String.prototype.startwith = function(strWord) {
	if(typeof strWord=="string") {
		if(strWord=="") return false;
		if(this.toUpperCase().indexOf(strWord.toUpperCase())==0) return true;
	}

	return false;
}

//----------------------------------------------------------------------------
// 문자의 Byte 길이를 반환한다.
// @return : integer
//----------------------------------------------------------------------------
String.prototype.byte = function() {
	var cnt = 0;
	for (var i = 0; i < this.length; i++) {
		if (this.charCodeAt(i) > 127)
			cnt += 2;
		else
			cnt++;
	}
	return cnt;
}

//-----------------------------------------------------------------------------
// 이메일의 유효성을 체크한다.
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isEmail = function() {
	return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}
String.prototype.isEMail = function() {
	return this.isEmail();
}


//----------------------------------------------------------------------------
// 주민번호를 체크한다.- arguments[0] : 주민번호 구분자
// XXXXXX-XXXXXXX
// @return : boolean
//----------------------------------------------------------------------------
String.prototype.isJumin = function() {
	var arg = arguments[0] ? arguments[0] : "";
	var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");
	if(jumin == null) {
		return false;
	} else {
		jumin = jumin.toString().num().toString();
	}
	// 생년월일 체크
	var birthYY = (parseInt(jumin.charAt(6)) == (1 ||2)) ? "19" : "20";
	birthYY += jumin.substr(0, 2);
	var birthMM = jumin.substr(2, 2) - 1;
	var birthDD = jumin.substr(4, 2);
	var birthDay = new Date(birthYY, birthMM, birthDD);
	if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
		return false;
	}
	var sum = 0;
	var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
	var last = parseInt(jumin.charAt(12));
	for(var i = 0; i < 12; i++) {
		sum += parseInt(jumin.charAt(i)) * num[i];
	}

	return ((11 - sum % 11) % 10 == last) ? true : false;
}

//----------------------------------------------------------------------------
// 숫자만 가져온다.
// @return : string
//----------------------------------------------------------------------------
String.prototype.num = function() {
	return (this.trim().replace(/[^0-9]/g, ""));
}

//----------------------------------------------------------------------------
// 숫자로 구성되어 있는지 학인
// arguments[0] : 허용할 문자셋
// @return : boolean
//----------------------------------------------------------------------------
String.prototype.isNumber = function() {
	return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;
}

//----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.remove = function(pattern) {
	return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, \"\")");
}

//----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.meta = function() {
	var str = this;
	var result = ""
	for(var i = 0; i < str.length; i++) {
		if((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) {
			result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1");
		} else {
			result += str.charAt(i);
		}
	}
	return result;
}

//----------------------------------------------------------------------------
// 잘못 입력된 URL을 보정한다.
// @return : String
//----------------------------------------------------------------------------
String.prototype.rightURL = function() {
	var str = this;
	//url이 www.이 아닌 wwww. 또는 wwwww.으로 시작할경우
	if( str.startwith("wwww.") )  str = "www" + str.substring(4);
	if( str.startwith("wwwww.") )  str = "www" + str.substring(5);
	if( str.startwith("wwwwww.") )  str = "www" + str.substring(6);
	if( str.startwith("http://wwww.") )  str = "http://www" + str.substring(11);
	if( str.startwith("http://wwwww.") )  str = "http://www" + str.substring(12);
	if( str.startwith("http://wwwwww.") )  str = "http://www" + str.substring(13);
	if( str.startwith("ttp:") )  str = "http" + str.substring(3);
	if( str.startwith("htp:") )  str = "http" + str.substring(3);
	if( str.startwith("http/") )  str = "http:" + str.substring(4);
	if( str.startwith("http:/w") )  str = "http://" + str.substring(6);
	if( str.startwith("http:w") )  str = "http://" + str.substring(5);
	if( str.startwith("http:///") )  str = "http:/" + str.substring(7);

	return str;
}

//-----------------------------------------------------------------------------
// 최소 최대 길이인지 검증
// str.isLength(min [,max])
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isLength = function() {
	var min = arguments[0];
	var max = arguments[1] ? arguments[1] : null;
	var success = true;
	if(this.length < min) {
		success = false;
	}
	if(max && this.length > max) {
		success = false;
	}
	return success;
}

//-----------------------------------------------------------------------------
// 최소 최대 바이트인지 검증
// str.isByteLength(min [,max])
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isByteLength = function() {
	var min = arguments[0];
	var max = arguments[1] ? arguments[1] : null;
	var success = true;
	if(this.byte() < min) {
		success = false;
	}
	if(max && this.byte() > max) {
		success = false;
	}
	return success;
}

//-----------------------------------------------------------------------------
// 숫자의 자리수(cnt)에 맞도록 반환
// @return : String
//-----------------------------------------------------------------------------
String.prototype.digits = function(cnt) {
    var digit = "";
    if (this.length < cnt) {
        for(var i = 0; i < cnt - this.length; i++) {
            digit += "0";
        }
    }
    return digit + this;
}
/*
   48     //-----------------------------------------------------------------------------
   49     // 정수형으로 변환
  50     // @return : String
   51     //-----------------------------------------------------------------------------
   52     String.prototype.int = function() {
   53         if(!isNaN(this)) {
   54             return parseInt(this);
   55         }
   56         else {
   57             return null;
   58         }
   59     }

   67     //-----------------------------------------------------------------------------
   68     // 숫자에 3자리마다 , 를 찍어서 반환
   69     // @return : String
   70     //-----------------------------------------------------------------------------
   71     String.prototype.money = function() {
   72         var num = this.trim();
   73         while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
   74             num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
   75         }
   76         return num;
   77     }

   91     //-----------------------------------------------------------------------------
   92     // " -> &#34; ' -> &#39;로 바꾸어서 반환
   93     // @return : String
   94     //-----------------------------------------------------------------------------
   95     String.prototype.quota = function() {
   96         return this.replace(/"/g, "&#34;").replace(/'/g, "&#39;");
   97     }
   98     //-----------------------------------------------------------------------------
   99     // 파일 확장자만 가져오기
  100     // @return : String
  101     //-----------------------------------------------------------------------------
  102     String.prototype.ext = function() {
  103         return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);
  104     }
  105     //-----------------------------------------------------------------------------
  106     // URL에서 파라메터 제거한 순수한 url 얻기
  107     // @return : String
  108     //-----------------------------------------------------------------------------
  109     String.prototype.uri = function() {
  110         var arr = this.split("?");
  111         arr = arr[0].split("#");
  112         return arr[0];
  113     }
  114

 116  *  각종 체크 함수들




 176     //-----------------------------------------------------------------------------
  177     // 공백이나 널인지 확인
  178     // @return : boolean
  179     //-----------------------------------------------------------------------------
  180     String.prototype.isBlank = function() {
  181         var str = this.trim();
  182         for(var i = 0; i < str.length; i++) {
  183             if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) {
  184                 return false;
  185             }
  186         }
  187         return true;
  188     }

  197     //-----------------------------------------------------------------------------
  198     // 영어만 허용 - arguments[0] : 추가 허용할 문자들
  199     // @return : boolean
  200     //-----------------------------------------------------------------------------
  201     String.prototype.isEng = function() {
  202         return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
  203     }
  204     //-----------------------------------------------------------------------------
  205     // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들

  206     // @return : boolean

  207     //-----------------------------------------------------------------------------

  208     String.prototype.isEngNum = function() {

  209         return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;

  210     }

  211     //-----------------------------------------------------------------------------

  212     // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들

  213     // @return : boolean

  214     //-----------------------------------------------------------------------------

  215     String.prototype.isNumEng = function() {

  216         return this.isEngNum(arguments[0]);

  217     }

  218     //-----------------------------------------------------------------------------

  219     // 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작 - arguments[0] : 추가 허용할 문자들

  220     // @return : boolean

  221     //-----------------------------------------------------------------------------

  222     String.prototype.isUserid = function() {

  223         return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;

  224     }

  225     //-----------------------------------------------------------------------------

  226     // 한글 체크 - arguments[0] : 추가 허용할 문자들

  227     // @return : boolean

  228     //-----------------------------------------------------------------------------

  229     String.prototype.isKor = function() {

  230         return (/^[가-힣]+$/).test(this.remove(arguments[0])) ? true : false;

  231     }



  263     //-----------------------------------------------------------------------------

  264     // 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자

  265     // XXXXXX-XXXXXXX

  266     // @return : boolean

  267     //-----------------------------------------------------------------------------

  268     String.prototype.isForeign = function() {

  269         var arg = arguments[0] ? arguments[0] : "";

  270         var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");

  271         if(jumin == null) {

  272             return false;

  273         }

  274         else {

  275             jumin = jumin.toString().num().toString();

  276         }

  277         // 생년월일 체크

  278         var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";

  279         birthYY += jumin.substr(0, 2);

  280         var birthMM = jumin.substr(2, 2) - 1;

  281         var birthDD = jumin.substr(4, 2);

  282         var birthDay = new Date(birthYY, birthMM, birthDD);

  283         if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {

  284             return false;

  285         }

  286         if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {

  287             return false;

  288         }

  289         var sum = 0;

  290         var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]

  291         var last = parseInt(jumin.charAt(12));

  292         for(var i = 0; i < 12; i++) {

  293             sum += parseInt(jumin.charAt(i)) * num[i];

  294         }

  295         return (((11 - sum % 11) % 10) + 2 == last) ? true : false;

  296     }

  297     //-----------------------------------------------------------------------------

  298     // 사업자번호 체크 - arguments[0] : 등록번호 구분자

  299     // XX-XXX-XXXXX

  300     // @return : boolean

  301     //-----------------------------------------------------------------------------

  302     String.prototype.isBiznum = function() {

  303         var arg = arguments[0] ? arguments[0] : "";

  304         var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");

  305         if(biznum == null) {

  306             return false;

  307         }

  308         else {

  309             biznum = biznum.toString().num().toString();

  310         }

  311         var sum = parseInt(biznum.charAt(0));

  312         var num = [0, 3, 7, 1, 3, 7, 1, 3];

  313         for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;

  314         sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);

  315         sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));

  316         return (sum % 10 == 0) ? true : false;

  317     }

  318     //-----------------------------------------------------------------------------

  319     // 법인 등록번호 체크 - arguments[0] : 등록번호 구분자

  320     // XXXXXX-XXXXXXX

  321     // @return : boolean

  322     //-----------------------------------------------------------------------------

  323     String.prototype.isCorpnum = function() {

  324         var arg = arguments[0] ? arguments[0] : "";

  325         var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");

  326         if(corpnum == null) {

  327             return false;

  328         }

  329         else {

  330             corpnum = corpnum.toString().num().toString();

  331         }

  332         var sum = 0;

  333         var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

  334         var last = parseInt(corpnum.charAt(12));

  335         for(var i = 0; i < 12; i++) {

  336             sum += parseInt(corpnum.charAt(i)) * num[i];

  337         }

  338         return ((10 - sum % 10) % 10 == last) ? true : false;

  339     }

  347     //-----------------------------------------------------------------------------

  348     // 전화번호 체크 - arguments[0] : 전화번호 구분자

  349     // @return : boolean

  350     //-----------------------------------------------------------------------------

  351     String.prototype.isPhone = function() {

  352         var arg = arguments[0] ? arguments[0] : "";

  353         return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");

  354     }

  355     //-----------------------------------------------------------------------------

  356     // 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자

  357     // @return : boolean

  358     //-----------------------------------------------------------------------------

  359     String.prototype.isMobile = function() {

  360         var arg = arguments[0] ? arguments[0] : "";

  361         return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");

  362     }
*/


// User Function
function getDiffDayFromStrDate(date1, date2) {
	var startDate = stringToDate(date1);
	var	endDate = stringToDate(date2);
	var diff = endDate.getTime() - startDate.getTime();
	var days = Math.floor(diff/(1000*60*60*24));

	return days;
}

function stringToDate(sDate) {
	var date;
	var nYear = 0;
	var nMonth = 8;
	var nDay = 0;
	if(sDate.length==8) {
		nYear = parseInt(sDate.substr(0,4),10);
		nMonth = parseInt(sDate.substr(4,2),10);
		nDay = parseInt(sDate.substr(6,2),10);
	} else if(sDate.length==10) {
		var arrDate = sDate.split("-");
		if(arrDate.length==3) {
			nYear = parseInt(arrDate[0],10);
			nMonth = parseInt(arrDate[1],10);
			nDay = parseInt(arrDate[2],10);
		}
	}
	date = new Date(nYear, nMonth - 1, nDay);

	return date;
}
