/*------------------------------------------------------------------------------
 *  JavaScript framework, version 2.0
 *
 *  Date : 2006. 08. 15.
 *  Copyright 1998-2007 by Vricks Studio All right reserved.
 *  @author Jeff Yang routine@vricks.com
 *  ÀÚÁÖ ¾²ÀÌ´Â ½ºÆ®¸µ °ü·Ã prototype°ü·Ã Á¤¸®
*-------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
 *  String prototype
*-------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
 Description : ¹®ÀÚÀÇ ÁÂ, ¿ì °ø¹é Á¦°Å
 Parameters  : sCorpRegNo=XXXXXXXXXXXXX
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.trim = function() {

	return this.replace(/(^\s*)|(\s*$)/g, "");

}

/*------------------------------------------------------------------------------
 Description : ¹®ÀÚÀÇ ÁÂ °ø¹é Á¦°Å
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.ltrim = function() {

	return this.replace(/(^\s*)/, "");

}

/*------------------------------------------------------------------------------
 Description : ¹®ÀÚÀÇ ¿ì °ø¹é Á¦°Å
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.rtrim = function() {

	return this.replace(/(\s*$)/, "");

}

/*------------------------------------------------------------------------------
 Description : ¹®ÀÚ¿­ÀÇ byte ±æÀÌ ¹ÝÈ¯
 Parameters  :
 Returns     : int
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : Á¤¼öÇüÀ¸·Î º¯È¯
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.int = function() {

//	if(!isNaN(this))
//		return parseInt(this);
//	else
//		return null;

	return (!isNaN(this)) ? parseInt(this) : null

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚ¸¸ °¡Á® ¿À±â
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.num = function() {

	return (this.trim().replace(/[^0-9]/g, ""));

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚ¿¡ 3ÀÚ¸®¸¶´Ù , ¸¦ Âï¾î¼­ ¹ÝÈ¯
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.money = function() {

	var num = this.trim();

	while((/(-?[0-9]+)([0-9]{3})/).test(num)) {

		num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");

	}

	return num;

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚÀÇ ÀÚ¸®¼ö(cnt)¿¡ ¸Âµµ·Ï ¹ÝÈ¯
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : " -> &#34; ' -> &#39;·Î ¹Ù²Ù¾î¼­ ¹ÝÈ¯
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.quota = function() {

	return this.replace(/"/g, "&#34;").replace(/'/g, "&#39;");

}

/*------------------------------------------------------------------------------
 Description : ÆÄÀÏ È®ÀåÀÚ¸¸ °¡Á®¿À±â
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.ext = function() {

	return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);

}

/*------------------------------------------------------------------------------
 Description : URL¿¡¼­ ÆÄ¶ó¸ÞÅÍ Á¦°ÅÇÑ ¼ø¼öÇÑ url ¾ò±â
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.uri = function() {

	var arr = this.split("?");

	arr = arr[0].split("#");

	return arr[0];

}


/*------------------------------------------------------------------------------
 *  °¢Á¾ Ã¼Å© ÇÔ¼öµé
*-------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
 Description : Á¤±Ô½Ä¿¡ ¾²ÀÌ´Â Æ¯¼ö¹®ÀÚ¸¦ Ã£¾Æ¼­ ÀÌ½ºÄÉÀÌÇÁ ÇÑ´Ù.
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : Á¤±Ô½Ä¿¡ ¾²ÀÌ´Â Æ¯¼ö¹®ÀÚ¸¦ Ã£¾Æ¼­ ÀÌ½ºÄÉÀÌÇÁ ÇÑ´Ù.
 Parameters  :
 Returns     : string
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.remove = function(pattern) {

	return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, \"\")");

}

/*------------------------------------------------------------------------------
 Description : ÃÖ¼Ò ÃÖ´ë ±æÀÌÀÎÁö °ËÁõ
 Parameters  :
 Returns     : boolean
 Example     : str.isLength(min [,max])
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : ÃÖ¼Ò ÃÖ´ë ¹ÙÀÌÆ®ÀÎÁö °ËÁõ
 Parameters  :
 Returns     : boolean
 Example     : str.isByteLength(min [,max])
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : °ø¹éÀÌ³ª ³ÎÀÎÁö È®ÀÎ
 Parameters  :
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isBlank = function() {

	var str = this.trim();

	for(var i = 0; i < str.length; i++) {

		if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) return false;

	}

	return true;

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚ·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö ÇÐÀÎ
 Parameters  : arguments[0] : Çã¿ëÇÒ ¹®ÀÚ¼Â
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isNum = function() {

	return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ¿µ¾î¸¸ Çã¿ë
 Parameters  : arguments[0] : Ãß°¡ Çã¿ëÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isEng = function() {

	return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚ¿Í ¿µ¾î¸¸ Çã¿ë
 Parameters  : arguments[0] : Ãß°¡ Çã¿ëÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isEngNum = function() {

	return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ¼ýÀÚ¿Í ¿µ¾î¸¸ Çã¿ë
 Parameters  : arguments[0] : Ãß°¡ Çã¿ëÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isNumEng = function() {

	return this.isEngNum(arguments[0]);

}

/*------------------------------------------------------------------------------
 Description : Á¦¿Ü¹®ÀÚ Ã¼Å© TEST Áß
 Parameters  : arguments[0] : Á¦¿ÜÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isXS = function() {

	var arg = arguments[0] ? arguments[0] : "";

	return eval("(/" + arg + "$/).test(this.trim())");

}

/*------------------------------------------------------------------------------
 Description : ¾ÆÀÌµð Ã¼Å© ¿µ¾î¼Ò¹®ÀÚ¿Í ¼ýÀÚ¸¸ Ã¼Å© Ã¹±ÛÀÚ´Â ¿µ¾î·Î ½ÃÀÛ
 Parameters  : arguments[0] : Ãß°¡ Çã¿ëÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isUserId = function() {

	//return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
	return (/^[a-z]{1}[0-9a-z]+$/).test(this.remove(arguments[0])) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ÇÑ±Û Ã¼Å©
 Parameters  : arguments[0] : Ãß°¡ Çã¿ëÇÒ ¹®ÀÚµé
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isKor = function() {

	return (/^[°¡-ÆR]+$/).test(this.remove(arguments[0])) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ÁÖ¹Î¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : ÁÖ¹Î¹øÈ£ ±¸ºÐÀÚ
 Returns     : boolean
 Example     : XXXXXX-XXXXXXX
 Date        :
*-------------------------------------------------------------------------------*/
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;

}

/*------------------------------------------------------------------------------
 Description : ¿Ü±¹ÀÎ µî·Ï¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : µî·Ï¹øÈ£ ±¸ºÐÀÚ
 Returns     : boolean
 Example     : XXXXXX-XXXXXXX
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isForeign = 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 + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");

	if(jumin == null)
		return false;
	else
		jumin = jumin.toString().num().toString();

	// »ý³â¿ùÀÏ Ã¼Å©
	var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "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;

	if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) 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) + 2 == last) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : »ç¾÷ÀÚ¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : µî·Ï¹øÈ£ ±¸ºÐÀÚ
 Returns     : boolean
 Example     : XX-XXX-XXXXX
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isBiznum = function() {

	var arg = arguments[0] ? arguments[0] : "";

	var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");

	if(biznum == null) {
		return false;
	} else {
		biznum = biznum.toString().num().toString();
	}

	var sum = parseInt(biznum.charAt(0));
	var num = [0, 3, 7, 1, 3, 7, 1, 3];

	for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;

	sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);
	sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));

	return (sum % 10 == 0) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ¹ýÀÎ µî·Ï¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : µî·Ï¹øÈ£ ±¸ºÐÀÚ
 Returns     : boolean
 Example     : XXXXXX-XXXXXXX
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isCorpnum = function() {

	var arg = arguments[0] ? arguments[0] : "";

	var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");

	if(corpnum == null) {
		return false;
	} else {
		corpnum = corpnum.toString().num().toString();
	}

	var sum = 0;
	var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
	var last = parseInt(corpnum.charAt(12));

	for(var i = 0; i < 12; i++) sum += parseInt(corpnum.charAt(i)) * num[i];

	return ((10 - sum % 10) % 10 == last) ? true : false;

}

/*------------------------------------------------------------------------------
 Description : ÀÌ¸ÞÀÏÀÇ À¯È¿¼ºÀ» Ã¼Å©
 Parameters  :
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isEmail = function() {

	return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());

}

/*------------------------------------------------------------------------------
 Description : ÀüÈ­¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : ÀüÈ­¹øÈ£ ±¸ºÐÀÚ
 Returns     : boolean
 Example     :
 Date        : 2008-07-02(ÀÌ»ó¿±) - ÇÑ±¹Åë½Å(0502),µ¥ÀÌÄÞ(0505),ÇÏ³ª·ÎÅë½Å(0506) Ãß°¡
*-------------------------------------------------------------------------------*/
String.prototype.isPhone = function() {

	var arg = arguments[0] ? arguments[0] : "";

	return eval("(/(02|070|0502|0505|0506|0[3-6]{1}[1-5]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");

}

/*------------------------------------------------------------------------------
 Description : ÇÚµåÆù¹øÈ£ Ã¼Å©
 Parameters  : arguments[0] : ÇÚµåÆù ±¸ºÐÀÚ
 Returns     : boolean
 Example     :
 Date        :
*-------------------------------------------------------------------------------*/
String.prototype.isMobile = function() {

	var arg = arguments[0] ? arguments[0] : "";

	return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");

}

/*------------------------------------------------------------------------------
 Description : ¹è¿­ Áßº¹ Å°¿öµå Á¦°Å
 Parameters  : arguments[0] : ¹è¿­
 Returns     : Áßº¹Á¦°ÅµÈ ¹è¿­
 Example     :
 Date        : 2009-10-08(ÀÌ»ó¿±)
*-------------------------------------------------------------------------------*/
Array.prototype.unique = function () {
	var a = {};
	for(var i=0; i<this.length; i++) if (typeof a[this[i]] == "undefined") a[this[i]] = 1;

	this.length = 0;
	for(var i in a) this[this.length] = i;

	return this;
}