/**
 * ÄíÅ° Ã³¸®¿¡ °ü·ÃµÈ ÀÚ¹Ù½ºÅ©¸³Æ®
 *
 * @version	2003-12-16
 * @author	namjinpark
 * @constructor
 */
function CookieUtil() {
	this.getCookie = getCookie_CookieUtil;
	this.setCookie = setCookie_CookieUtil;
	this.deleteCookie = deleteCookie_CookieUtil;
	this.getTodayExpires = getTodayExpires_CookieUtil;
	this.addCookie = addCookie_CookieUtil;
	this.removeCookie = removeCookie_CookieUtil;
	this.hasValue = hasValue_CookieUtil;
	this.addDateCookie = addDateCookie_CookieUtil;
	this.getDateCookie = getDateCookie_CookieUtil;
	this.hasDateValue = hasDateValue_CookieUtil;
}

/**
 * pm_sName¿¡ ÇØ´çÇÏ´Â ÄíÅ° °ªÀ» ¾ò´Â´Ù.
 *@param	pm_sName	ÄíÅ°ÀÇ Å°
 */
function getCookie_CookieUtil (pm_sName) {  
	var arg = pm_sName + "=";  
	var alen = arg.length;  
	var clen = document.cookie.length;  
	var i = 0;  
	while (i < clen) {    
		var j = i + alen;    
		if (document.cookie.substring(i, j) == arg)      
		return getCookieValue_CookieUtil (j);    
		i = document.cookie.indexOf(" ", i) + 1;    
		if (i == 0) break;   
	}//while  
	return null;
}

/**
 * offset À» ±âÁØÀ¸·Î ÄíÅ°ÀÇ °ªÀ» ¾ò´Â´Ù.
 *@param	offset	ÀÎµ¦½º
 *@return	ÄíÅ°ÀÇ °ª
 */
function getCookieValue_CookieUtil (offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

/**
 * ÄíÅ°¿¡ name Å°¿¡ ´ëÇØ¼­ value ¸¦ ¼³Á¤ÇÑ´Ù. <BR>
 * Ãß°¡ ÆÄ¶ó¹ÌÅÍ¿¡´Â expires(Date °´Ã¼), path(String), domain(String), secure(boolean) ÀÌ ÀÖ´Ù.
 *@param	name	ÄíÅ° Å°
 *@param	value	ÄíÅ° °ª
 */
function setCookie_CookieUtil (name, value) {  
	var argv = this.setCookie.arguments;  
	var argc = this.setCookie.arguments.length;  
	var expires = (argc > 2) ? argv[2] : null;  
	var path = (argc > 3) ? argv[3] : null;  
	var domain = (argc > 4) ? argv[4] : null;  
	var secure = (argc > 5) ? argv[5] : false;  
	document.cookie = name + "=" + escape (value) + 
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
		((path == null) ? "" : ("; path=" + path)) +  
		((domain == null) ? "" : ("; domain=" + domain)) +    
		((secure == true) ? "; secure" : "");
}

/**
 * name Å°¿¡ ´ëÇÑ °ªÀ» ÄíÅ°¿¡¼­ »èÁ¦ÇÑ´Ù. <BR>
 * expires ¿¡ ÇöÀç ½Ã°£À» ¼³Á¤ÇÑ´Ù.
 *@param	name	ÄíÅ° Å°
 */
function deleteCookie_CookieUtil (name) {  
	var exp = new Date();  
	exp.setTime (exp.getTime() - 1);  
	var cval = this.getCookie (name);  
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

/**
 * ¿À´Ã³¯Â¥·Î expires °¡ ¼³Á¤µÉ ¼ö ÀÖ´Â Date °´Ã¼¸¦ ¾ò´Â´Ù.<BR>
 *@return	¿À´Ã³¯Â¥·Î expires °¡ ¼³Á¤µÉ ¼ö ÀÖ´Â Date °´Ã¼
 */
function getTodayExpires_CookieUtil () {
	var lm_oDate = new Date();
	lm_oDate.setDate(lm_oDate.getDate() + 1);
	lm_oDate.setHours(0);
	lm_oDate.setMinutes(0);
	lm_oDate.setSeconds(0);
	return lm_oDate;
}

/**
 * Æ¯Á¤ ÀÏ¼ö µÚ¿¡ expires °¡ ¼³Á¤µÉ ¼ö ÀÖ´Â Date °´Ã¼¸¦ ¾ò´Â´Ù.<BR>
 *@param	ÀÏ¼ö
 *@return	Æ¯Á¤ ÀÏ¼ö ÈÄ¿¡ expires °¡ ¼³Á¤µÉ ¼ö ÀÖ´Â Date °´Ã¼
 */
function getDateExpires_CookieUtil (pm_iDay) {
	var lm_oDate = new Date();
	lm_oDate.setDate(lm_oDate.getDate() + pm_iDay);
	lm_oDate.setHours(0);
	lm_oDate.setMinutes(0);
	lm_oDate.setSeconds(0);
	return lm_oDate;
}

/**
 * ÄíÅ°¿¡ name Å°¿¡ ´ëÇØ¼­ value ¸¦ ¼³Á¤ÇÑ´Ù. <BR>
 * ±âÁ¸¿¡ °ªÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â °ªÀ» ¼³Á¤ÇÏ°í Á¸ÀçÇÏ´Â °æ¿ì¿¡´Â "," ·Î ¿¬°áÇÏ¿© ¼³Á¤ÇÑ´Ù. 
 * Ãß°¡ ÆÄ¶ó¹ÌÅÍ¿¡´Â expires(Date °´Ã¼), path(String), domain(String), secure(boolean) ÀÌ ÀÖ´Ù.
 *@param	name	ÄíÅ° Å°
 *@param	value	ÄíÅ° °ª
 */
function addCookie_CookieUtil (name, value) {
	var argv = this.addCookie.arguments;  
	var argc = this.addCookie.arguments.length;  
	var expires = (argc > 2) ? argv[2] : null;  
	var path = (argc > 3) ? argv[3] : null;  
	var domain = (argc > 4) ? argv[4] : null;  
	var secure = (argc > 5) ? argv[5] : false;  
	
	var lm_sValue = this.getCookie(name);
	if(lm_sValue == null) {
		this.setCookie(name, value, expires, path, domain, secure);	
	} else {
		this.setCookie(name, lm_sValue+","+value, expires, path, domain, secure);	
	} 
}

/**
 * ÄíÅ°¿¡ name Å°¿¡ ´ëÇØ¼­ value °¡ Á¸ÀçÇÏ´Â °æ¿ì ÇØ´ç value¸¦ »èÁ¦ÇÑ´Ù. <BR>
 * Ãß°¡ ÆÄ¶ó¹ÌÅÍ¿¡´Â expires(Date °´Ã¼), path(String), domain(String), secure(boolean) ÀÌ ÀÖ´Ù.
 *@param	name	ÄíÅ° Å°
 *@param	value	ÄíÅ° °ª
 */
function removeCookie_CookieUtil (name, value) {
	var argv = this.removeCookie.arguments;  
	var argc = this.removeCookie.arguments.length;  
	var expires = (argc > 2) ? argv[2] : null;  
	var path = (argc > 3) ? argv[3] : null;  
	var domain = (argc > 4) ? argv[4] : null;  
	var secure = (argc > 5) ? argv[5] : false;  
	
	var lm_sValue = this.getCookie(name);
	if(lm_sValue != null) {
		var lm_sValueTokens = lm_sValue.split(",");
		var lm_sNewValue = "";
		for(var i=0; i < lm_sValueTokens.length; i++) {
			if(lm_sValueTokens[i] == value) continue;
			if(lm_sNewValue != "") lm_sNewValue += ",";
			lm_sNewValue += lm_sValueTokens[i];
		}
		this.setCookie(name, lm_sNewValue, expires, path, domain, secure);	
	}
}

/**
 * ÄíÅ°¿¡ name Å°¿¡ ´ëÇØ¼­ yyyyMMdd:value ÇüÅÂ¸¦ ¼³Á¤ÇÑ´Ù. <BR>
 * ±âÁ¸¿¡ °ªÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â °ªÀ» ¼³Á¤ÇÏ°í Á¸ÀçÇÏ´Â °æ¿ì¿¡´Â "," ·Î ¿¬°áÇÏ¿© ¼³Á¤ÇÑ´Ù. 
 * Ãß°¡ ÆÄ¶ó¹ÌÅÍ¿¡´Â expires(Date °´Ã¼), path(String), domain(String), secure(boolean) ÀÌ ÀÖ´Ù.
 *@param	name			ÄíÅ° Å°
 *@param	value			ÄíÅ° °ª
 *@param	pm_iAllowDate	Çã¿ëÀÏ ¼ö(¿À´Ã ³¯Â¥¸¦ ±âÁØÀ¸·Î ÇØ¼­ ÀÌÀü¿¡ ¼³Á¤µÈ °ª Áß¿¡¼­ Çã¿ëµÇ´Â
 *							ÃÖ´ëÀÏ¼ö) ¸¸¾à ÀÌ °ªÀÌ 2·Î ¼³Á¤µÇ¾î ÀÖ°í ¿À´Ã ³¯Â¥°¡ "20040324"ÀÌ¸é
 *							2ÀÏÀü "20040322" ±îÁö´Â Çã¿ëµÇ¸ç ±× ÀÌÀü ¼³Á¤ ³»¿ªÀº »èÁ¦µÈ´Ù.
 */
function addDateCookie_CookieUtil (name, value, pm_iAllowDate) {
	var argv = this.addDateCookie.arguments;  
	var argc = this.addDateCookie.arguments.length;  
	var expires = (argc > 3) ? argv[3] : null;  
	var path = (argc > 4) ? argv[4] : null;  
	var domain = (argc > 5) ? argv[5] : null;  
	var secure = (argc > 6) ? argv[6] : false;  
	
	var lm_oToday = new Date();
	var lm_sDateString = getDateString_CookieUtil(lm_oToday.getYear(), lm_oToday.getMonth()+1, lm_oToday.getDate());
	var lm_sDateValue = lm_sDateString + ":" + value;
	var lm_sValue = this.getCookie(name);
	if(lm_sValue == null) {
		this.setCookie(name, lm_sDateValue, expires, path, domain, secure);	
	} else {
		var lm_sDateValues = lm_sValue.split(",");
		var lm_sUpdateDateValue = "";
		for(var i=0; i < lm_sDateValues.length; i++) {
			var lm_sTemp = lm_sDateValues[i].split(":");				
			var lm_iDateDiff = dateDiff_CookieUtil(lm_sDateString, lm_sTemp[0]);
			if(lm_iDateDiff <= pm_iAllowDate) {
				if(lm_sUpdateDateValue != "") lm_sUpdateDateValue += ",";
				lm_sUpdateDateValue += lm_sDateValues[i];
			}
		}//for i
		this.setCookie(name, lm_sUpdateDateValue+","+lm_sDateValue, expires, path, domain, secure);	
	}//if
}

/**
 * ÄíÅ°¿¡ pm_sName Å°¿¡ ´ëÇØ¼­ yyyyMMdd:value ÇüÅÂ¸¦ ¼³Á¤µÈ ÇØ´çÇÏ´Â ÄíÅ° °ªÀ» ¾ò´Â´Ù.
 *@param	pm_sName	ÄíÅ°ÀÇ Å°
 *@param	pm_iAllowDate	Çã¿ëÀÏ ¼ö(¿À´Ã ³¯Â¥¸¦ ±âÁØÀ¸·Î ÇØ¼­ ÀÌÀü¿¡ ¼³Á¤µÈ °ª Áß¿¡¼­ Çã¿ëµÇ´Â
 *							ÃÖ´ëÀÏ¼ö) ¸¸¾à ÀÌ °ªÀÌ 2·Î ¼³Á¤µÇ¾î ÀÖ°í ¿À´Ã ³¯Â¥°¡ "20040324"ÀÌ¸é
 *							2ÀÏÀü "20040322" ±îÁö´Â Çã¿ëµÇ¸ç ±× ÀÌÀü ¼³Á¤ ³»¿ªÀº »èÁ¦µÈ´Ù.
 */
function getDateCookie_CookieUtil (pm_sName, pm_iAllowDate) {  
	var lm_sValue = this.getCookie(pm_sName);
	if(lm_sValue == null) return null;

	var lm_oToday = new Date();
	var lm_sDateString = getDateString_CookieUtil(lm_oToday.getYear(), lm_oToday.getMonth()+1, lm_oToday.getDate());
		
	var lm_sDateValues = lm_sValue.split(",");
	var lm_sUpdateDateValue = "";
	for(var i=0; i < lm_sDateValues.length; i++) {
		var lm_sTemp = lm_sDateValues[i].split(":");				
		var lm_iDateDiff = dateDiff_CookieUtil(lm_sDateString, lm_sTemp[0]);
		if(lm_iDateDiff <= pm_iAllowDate) {
			if(lm_sUpdateDateValue != "") lm_sUpdateDateValue += ",";
			lm_sUpdateDateValue += lm_sTemp[1];
		}
	}//for i
	
	return lm_sUpdateDateValue;
}



/**
 * yyyyMMdd ÇüÅÂÀÇ ¹®ÀÚ¿­ pm_sDateString1 °ú pm_sDateString2 ³¯Â¥ Â÷ÀÌ¸¦ ±¸ÇÑ´Ù.
 *@param	pm_sDateString1	yyyyMMdd ÇüÅÂÀÇ ¹®ÀÚ¿­1
 *@param	pm_sDateString2	yyyyMMdd ÇüÅÂÀÇ ¹®ÀÚ¿­2 
 *@return	pm_sDateString1 ³¯Â¥ - pm_sDateString2 ³¯Â¥ ÀÇ Â÷ÀÌ (ÀÏ¼ö)
 */
function dateDiff_CookieUtil(pm_sDateString1, pm_sDateString2) {
	var lm_oDateInts1 = getDateInt_CookieUtil(pm_sDateString1);
	var lm_oDateInts2 = getDateInt_CookieUtil(pm_sDateString2);
	
	var lm_oDate1 = new Date(lm_oDateInts1[0], lm_oDateInts1[1]-1, lm_oDateInts1[2]);
	var lm_oDate2 = new Date(lm_oDateInts2[0], lm_oDateInts2[1]-1, lm_oDateInts2[2]);
	
	return (lm_oDate1 - lm_oDate2) / (24 * 60 * 60 * 1000);
}


/**
 * ÀÔ·ÂµÈ ³â, ¿ù, ÀÏ °ªÀ» yyyyMMdd ÇüÅÂ·Î ¹ÝÈ¯ÇÑ´Ù.
 *@param	year	³âµµ
 *@param	month	´Þ
 *@param	day		ÀÏ
 */
function getDateString_CookieUtil(pm_iYear, pm_iMonth, pm_iDay) {
	var year = parseInt(pm_iYear);
	var month = parseInt(pm_iMonth);
	var day = parseInt(pm_iDay);
	var lm_sRet = "" + year +
		          (month < 10 ? "0" + month : month) +
				  (day < 10 ? "0" + day : day);
	return lm_sRet;
}

/**
 * yyyyMMdd ÇüÅÂÀÇ ¹®ÀÚ¿­À» ³â, ¿ù, ÀÏÀÇ ¹è¿­·Î ¹ÝÈ¯ÇÑ´Ù.
 *@param	pm_sDateString	yyyyMMdd ÇüÅÂÀÇ ¹®ÀÚ¿­
 *@return	Å©±â°¡ 3ÀÎ ¹è¿­ [³â, ¿ù, ÀÏ]
 */
function getDateInt_CookieUtil(pm_sDateString) {
	var lm_sYear = pm_sDateString.substr(0, 4);
	var lm_sMonth = pm_sDateString.substr(4, 2);
	var lm_sDay = pm_sDateString.substr(6, 2);
	var lm_oArray = [parseInt(lm_sYear), parseInt(lm_sMonth, 10), parseInt(lm_sDay, 10)];
	return lm_oArray;
}


/**
 * ÄíÅ°¿¡ name Å°¿¡ ¼³Á¤µÈ °ª¿¡ value °ªÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÑ´Ù. <BR>
 *@param	name	ÄíÅ° Å°
 *@param	value	ÄíÅ° °ª
 */
function hasValue_CookieUtil (name, value) {
	var lm_sValue = this.getCookie(name);	
	if(lm_sValue == null) return false;
	var lm_sValueList = lm_sValue.split(",");
	for(var i=0; i < lm_sValueList.length; i++) {
		if(lm_sValueList[i] == value) return true;
	}
	return false;
}

/**
 * yyyyMMdd:value ÇüÅÂ¸¦ ¼³Á¤µÈ ÇØ´çÇÏ´Â ÄíÅ° °ª¿¡¼­ name Å°¿¡ ¼³Á¤µÈ °ª¿¡ value °ªÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÑ´Ù. <BR>
 *@param	name	ÄíÅ° Å°
 *@param	value	ÄíÅ° °ª
 */
function hasDateValue_CookieUtil (name, value) {
	var lm_sValue = this.getCookie(name);	
	if(lm_sValue == null) return false;
	var lm_sValueList = lm_sValue.split(",");
	for(var i=0; i < lm_sValueList.length; i++) {
		var lm_sTemp = lm_sValueList[i].split(":");
		if(lm_sTemp[1] == value) return true;
	}
	return false;
}