/*
 * DateTime.js : ³¯Â¥ °ü·Ã À¯¿ë ÇÔ¼ö ¸ðÀ½
 * 
 * Version 1.0
 * 
 * Created  : 2006/08/30  °³¹ßÀÚ
 * Updated  : 2006/08/30  °³¹ßÀÚ
 */


//
// ÀÔ·ÂÇÑ ³â, ¿ù, ÀÏ Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î »õ·Î¿î Date °³Ã¼¸¦ »ý¼ºÇÏ¿© ¸®ÅÏÇÑ´Ù.
// ¸¸¾à ¿Ã¹Ù¸£Áö ¸øÇÑ ³â, ¿ù, ÀÏ Á¤º¸°¡ ÀÔ·ÂµÇ¾ú´Ù¸é NaN ÀÌ ¸®ÅÏµÈ´Ù.
function dt_GetDate(strYear, strMonth, strDay)
{
    nYear  = parseInt(strYear,  10);
    nMonth = parseInt(strMonth, 10);
    nDay   = parseInt(strDay,   10);
    
    var objDate = new Date(nYear, nMonth - 1, nDay);
    if (objDate.getFullYear() != nYear || objDate.getMonth() != (nMonth - 1) || objDate.getDate() != nDay)
        return NaN;

    return objDate;
}

//
// ÀÔ·ÂÇÑ ³¯Â¥ ¹®ÀÚ¿­À» 
//     YYYY-MM-DD, YYYY/MM/DD, YYYY.MM.DD, YYYY MM DD, YYYYMMDD 
// Çü½ÄÀ¸·Î º¯È¯ÇÏ¿© ¸®ÅÏÇÑ´Ù. ÀÔ·ÂÇÒ ¶§µµ ¿ª½Ã
//     YYYY-MM-DD, YYYY/MM/DD, YYYY.MM.DD, YYYY MM DD, YYYYMMDD 
// Çü½ÄÀ¸·Î ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù.
//
// 1. YYYYMMDD Çü½ÄÀ¸·Î ¸®ÅÏ               -> var strDate = dt_ParseDate("2004-01-01");
// 2. ÁöÁ¤ÇÑ ±¸ºÐÀÚ¸¦ »ç¿ëÇÑ Çü½ÄÀ¸·Î ¸®ÅÏ -> var strDate = dt_ParseDate("2004-01-01", "-");
function dt_ParseDate(strDate)
{
    var strSeparator = "";
    
    var objDate = null;
    var aryDate = null;
    var nMonth  = 0;
    var nDay    = 0;

    strDate = Trim(strDate.toString()).replace(/[^0-9\-\.\s\/]*/g, "");

    if (strDate.indexOf("-") > -1)
        aryDate = strDate.split(/\-/g);
    else if (strDate.indexOf(".") > -1)
        aryDate = strDate.split(/\./g);
    else if (strDate.match(/\s/) != null)
        aryDate = strDate.split(/\s/g);    
    else if (strDate.match(/\//) != null)
        aryDate = strDate.split(/\//g);    

    if (aryDate != null && aryDate.length == 3)
        objDate = dt_GetDate(aryDate[0], aryDate[1], aryDate[2]);
    else
    {
        if (strDate.length == 8)
            objDate = dt_GetDate(strDate.substr(0, 4), strDate.substr(4, 2), strDate.substr(6, 2));
        else
            objDate = NaN;
    }
    
    if (isNaN(objDate)) return "";
    if (arguments[1] != null) strSeparator = Trim(arguments[1].toString());
    
    nMonth = objDate.getMonth() + 1;
    nDay   = objDate.getDate();
    
    return objDate.getFullYear() + strSeparator + (nMonth < 10 ? "0" + nMonth : nMonth) + strSeparator + (nDay < 10 ? "0" + nDay : nDay);
}

//
// ÀÔ·ÂÇÑ ³â¿ù ¹®ÀÚ¿­À» 
//     YYYY-MM, YYYY/MM, YYYY.MM, YYYY MM, YYYYMM 
// Çü½ÄÀ¸·Î º¯È¯ÇÏ¿© ¸®ÅÏÇÑ´Ù. ÀÔ·ÂÇÒ ¶§µµ ¿ª½Ã
//     YYYY-MM, YYYY/MM, YYYY.MM, YYYY MM, YYYYMM 
// Çü½ÄÀ¸·Î ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù.
//
// 1. YYYYMM Çü½ÄÀ¸·Î ¸®ÅÏ                 -> var strMonth = dt_ParseMonth("2004-01");
// 2. ÁöÁ¤ÇÑ ±¸ºÐÀÚ¸¦ »ç¿ëÇÑ Çü½ÄÀ¸·Î ¸®ÅÏ -> var strMonth = dt_ParseMonth("2004-01", "-");
function dt_ParseMonth(strDate)
{
    var strSeparator = "";
    
    var objDate = null;
    var aryDate = null;
    var nMonth  = 0;
    var nDay    = 0;
        
    strDate = Trim(strDate.toString()).replace(/[^0-9\-\.\s\/]*/g, "");
    
    if (strDate.indexOf("-") > -1)
        aryDate = strDate.split(/\-/g);
    else if (strDate.indexOf(".") > -1)
        aryDate = strDate.split(/\./g);
    else if (strDate.match(/\s/) != null)
        aryDate = strDate.split(/\s/g);    
    else if (strDate.match(/\//) != null)
        aryDate = strDate.split(/\//g);    
    
    if (aryDate != null && aryDate.length == 2)
        objDate = dt_GetDate(aryDate[0], aryDate[1], 1);
    else
    {
        if (strDate.length == 6)
            objDate = dt_GetDate(strDate.substr(0, 4), strDate.substr(4, 2), 1);
        else
            objDate = NaN;
    }
    
    if (isNaN(objDate)) return "";
    if (arguments[1] != null) strSeparator = Trim(arguments[1].toString());
    
    nMonth = objDate.getMonth() + 1;
    
    return objDate.getFullYear() + strSeparator + (nMonth < 10 ? "0" + nMonth : nMonth);
}

//
// ÀÔ·ÂÇÑ ½Ã, ºÐ Á¤º¸¸¦ HHMM ¶Ç´Â HH:MM Çü½ÄÀ¸·Î ¸®ÅÏÇÑ´Ù.
function dt_GetTime(strHour, strMins, useColon)
{
    var nHour = parseInt(strHour, 10);
    var nMins = parseInt(strMins, 10);
    
    if (isNaN(nHour) || nHour < 0 || nHour > 23) nHour = 0;
    if (isNaN(nMins) || nMins < 0 || nMins > 60) nMins = 0;
    
    return (nHour < 10 ? "0" + nHour : nHour) + (useColon ? ":" : "") + (nMins < 10 ? "0" + nMins : nMins)
}

//
// ÀÔ·ÂÇÑ ½Ã, ºÐ Á¤º¸¸¦ HHMM ¶Ç´Â HH:MM Çü½ÄÀ¸·Î ¸®ÅÏÇÑ´Ù.
function dt_ParseTime(strTime, useColon)
{
    var aryTime = strTime.split(/\:/g);
    
    if (aryTime.length > 1)
    {
        return dt_GetTime(aryTime[0], aryTime[1], useColon);
    }
    else 
    {
        var strTimeSource = Trim(aryTime[0]) + "      ";
        return dt_GetTime(strTimeSource.substr(0, 2), strTimeSource.substr(2, 4), useColon);
    }
}

//
// ÀÔ·ÂÇÑ Date °³Ã¼¿¡ ¹®ÀÚ¿­·Î ÀÔ·ÂÇÑ ½Ã, ºÐ, ÃÊ Á¤º¸¸¦ Ãß°¡ ¼³Á¤ÇÑ´Ù. ½Ã, ºÐ, 
// ÃÊ Á¤º¸´Â HHMMSS ¶Ç´Â HH:MM:SS ¿Í °°Àº Çü½ÄÀ¸·Î ÀÔ·ÂÇÒ ¼ö ÀÖÀ¸¸ç ÃÊ ºÎºÐÀ» 
// »ý·«ÇÒ ¼ö ÀÖ´Ù.
function dt_SetTime(objDate, strHHMMSS)
{
	var aryHHMMSS = strHHMMSS.split(':');
    var nValue    = 0;
    
	if (aryHHMMSS.length >= 2) 
    {
		nValue = parseInt(aryHHMMSS[0], 10);
        if (!isNaN(nValue)) objDate.setHours(nValue);
            
		nValue = parseInt(aryHHMMSS[1], 10);
        if (!isNaN(nValue)) objDate.setMinutes(nValue);
            
		if (aryHHMMSS.length > 2) 
        {
			nValue = parseInt(aryHHMMSS[2], 10);
			if (!isNaN(nValue)) objDate.setSeconds(nValue);
		}
	}
	else 
    {
		nValue = parseInt(strHHMMSS.substr(0, 2), 10);
		if (!isNaN(nValue)) objDate.setHours(nValue);
        
		nValue = parseInt(strHHMMSS.substr(2, 2), 10);
		if (!isNaN(nValue)) objDate.setMinutes(nValue);
        
		nValue = parseInt(strHHMMSS.substr(4, 2), 10);
		if (!isNaN(nValue)) objDate.setSeconds(nValue);
	}
    
	return objDate;
}

//
// ÀÔ·ÂÇÑ Date °³Ã¼¿¡¼­ ³¯Â¥¸¦ »Ì¾Æ¼­ Ãâ·ÂÇÑ´Ù.
// ÀÔ·Â : new Date(2005, 1, 5), "±¸ºÐÀÚ"
// Ãâ·Â : "2005-01-05"
//        ±¸ºÐÀÚ°¡ ÀÖÀ» °æ¿ì ÇØ´ç ±¸ºÐÀÚ·Î Ä¡È¯ÇÔ "2005-01-05" => "2005.01.05"
function dt_GetStringDate(objDate)
{
  var DateYear  = objDate.getFullYear();
  var DateMonth = objDate.getMonth() + 1;
  var DateDay   = objDate.getDate();

  var strMonth, strDay;
  var Separator = "-";
  
  if (arguments[1] != null)
    Separator = Trim(arguments[1].toString());

  if (DateMonth < 10)
    strMonth  = Separator + "0" + DateMonth;
  else
    strMonth  = Separator + DateMonth;

  if (DateDay < 10)
    strDay  = Separator + "0" + DateDay;
  else
    strDay  = Separator + DateDay;
    
  var ReturnValue  = DateYear + strMonth + strDay;
    
	return ReturnValue
}

//
// ±× ´ÞÀÇ ¸¶Áö¸· ³¯Â¥¸¦ °¡Á®¿À±â
//
function dt_GetLastDayEachMonth(yyyy, mm)
{
  var lastDay = new Date(yyyy, mm, 0);
	return lastDay;
}

//
// ¹®ÀÚ¿­·Î ³¯Â¥°¡ ¿À¸é Date °´Ã¼·Î ³Ñ°ÜÁØ´Ù.
// ÀÔ·Â : "", ".", "." ÀÇ ±¸ºÐÀÚ·Î µÈ ¹®ÀÚ¿­ ³¯Â¥.
// Ãâ·Â : Date °´Ã¼
function dt_GetDateObjectFromStringDate(strDate)
{
    var strSeparator = "";
    
    var objDate = null;
    var aryDate = null;

    strDate = Trim(strDate.toString()).replace(/[^0-9\-\.\s\/]*/g, "");

    if (strDate.indexOf("-") > -1)
        aryDate = strDate.split(/\-/g);
    else if (strDate.indexOf(".") > -1)
        aryDate = strDate.split(/\./g);
    else if (strDate.match(/\s/) != null)
        aryDate = strDate.split(/\s/g);    
    else if (strDate.match(/\//) != null)
        aryDate = strDate.split(/\//g);    

    if (aryDate != null && aryDate.length == 3)
        objDate = dt_GetDate(aryDate[0], aryDate[1], aryDate[2]);
    else
    {
        if (strDate.length == 8)
            objDate = dt_GetDate(strDate.substr(0, 4), strDate.substr(4, 2), strDate.substr(6, 2));
        else
            objDate = NaN;
    }

    return objDate;
}

//
// ¹®ÀÚ¿­ ¹®ÀÚ¿­·Î ³¯Â¥°¡ ¿À¸é Date °´Ã¼·Î ³Ñ°ÜÁØ´Ù.
// ÀÔ·Â : objDate  - ±âÁØÀÌ µÇ´Â ³¯Â¥ °´Ã¼
//        intDay   - Ãß°¡µÉ ÀÏ¼ö, À½¼öÀÏ °æ¿ì »­
//        outType  - "1" ¹®ÀÚ¿­³¯Â¥(ex:20060101), "2" Date°´Ã¼
// Ãâ·Â : outTypeÀÌ 1 °æ¿ì ´õÇØÁø ³¯Â¥ÀÇ ¹®ÀÚ¿­ ³¯Â¥, 2 ÀÏ °æ¿ì Date °´Ã¼
function dt_GetAddDateByDay(objDate, intDay, outType)
{
  var addDate = new Date(objDate.getYear(), objDate.getMonth(), objDate.getDate() + intDay);

  if (outType == "1")
    return dt_GetStringDate(addDate, "");
  else
    return addDate;
}

//
// µðºñ·ÎºÎÅÍ ³¯Â¥¿Í ½Ã°£À» °¡Á®¿Â´Ù.
// ÀÔ·Â : gubun     - "1":³¯Â¥¸¸(ex.20060101), "2":½Ã°£¸¸(ex.100101), "3":µÑ´Ù(ex.20060101100101), "4":·ÎÅ¸ÀÓ(ex.2006-01-01 12:12:12.234)
function dt_GetDbDateAndTime(gubun)
{
  var returnValue = af_ExecutePageCallForCommon("getdbdatetime");
  if (returnValue == null) return "";

  var dbDate  = returnValue[0].db_date;
  var dbTime  = st_Replace(returnValue[0].db_time, ":", "");
  
  if (gubun == "1")
    return dbDate;
  else if (gubun == "2")
    return dbTime;
  else if (gubun == "3")
    return dbDate + dbTime;
  else if (gubun == "4")
    return returnValue[0].dt_row_datetime
  else
    return dbDate + dbTime;
} 