//<![CDATA[
/* $Id: lib.date.js 6 2008-12-10 09:50:48Z admin $ */
/**
 * ÁÖ¾îÁø ´ÞÀÇ ¸¶Áö¸· ³¯
 *
 * @param   object      Date Object
 *
 * @return  integer
 */
function getLastDay(dateObj)/*{{{*/
{
    return new Date(dateObj.getFullYear(), dateObj.getMonth()+1, 0).getDate();
} // end of the 'getLastDay()' function/*}}}*/


/**
 *  ³¯Â¥ ¹®ÀÚ¿­('YYYY-MM-DD', 'YYYY-MM-DD HH:II')À» ÀÔ·Â¹Þ¾Æ ³¯Â¥ °´Ã¼¸¦ µ¹·ÁÁØ´Ù.
 *
 * Notice:
 *  - [JS Usage]
 *      dateObj = getDateObj('YYYY-MM-DD')
 *      dateObj = getDateObj('YYYY-MM-DD HH:II)
 *
 * @param   string      ³¯Â¥ ¹®ÀÚ¿­('YYYY-(M)M-(D)D', 'YYYY-(M)M-(D)D (H)H:(I)I')
 *
 * @return  object      ³¯Â¥ °´Ã¼
 */
function getDateObj(i_date)/*{{{*/
{
    var r_date = new Date();
    var t_datetime = null;
    var t_date = null;
    var t_time = null;


    /* ³¯Â¥ Çü½Ä¿¡ µû¶ó Ã³¸® */
    var date_pattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/;
    var datetime_pattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}$/;

    if (date_pattern.test(i_date)) {
        t_date = String(i_date).split("-");
        r_date = new Date(Number(t_date[0]), Number(t_date[1])-1, Number(t_date[2]), 0, 0, 0);
    } else if (datetime_pattern.test(i_date)) {
        t_datetime = String(i_date).split(" ");
        t_date = String(t_datetime[0]).split("-");
        t_time = String(t_datetime[1]).split(":");
        r_date = new Date(Number(t_date[0]), Number(t_date[1])-1, Number(t_date[2]), Number(t_time[0]), Number(t_time[1]), 0);
    } else {
        return false;
    }

    return r_date;

} // end of the 'getDateObj()' function/*}}}*/


/**
 * µÎ ³¯Â¥ »çÀÌÀÇ Â÷ÀÌ(½Ã°£, ÀÏÀÚ)¸¦ ±¸ÇÑ´Ù.
 *
 * @param   object              Date °´Ã¼ (½ÃÀÛÀÏ)
 * @param   object              Date °´Ã¼ (Á¾·áÀÏ)
 * @param   string              ºñ±³´ë»ó(Y, M, D, H, I)
 *
 * @return  integer/booelan     edate < sdate: false
 *                  
 */
function getDateDiff(sd, ed, com_unit)/*{{{*/
{
    var diff = null;
    var tmp1, tmp2;
    var sdate = new Date();
    var edate = new Date();

    if (!sd || !ed) {
        return false;
    } // end if

    sdate.setTime(sd.getTime());
    edate.setTime(ed.getTime());

    com_unit = String(com_unit).toUpperCase();

    if (sdate > edate)  return false;

    switch (com_unit) {
        case "Y":   // ³âµµ
            diff = edate.getFullYear() - sdate.getFullYear();

            break;

        case "M":   // ¿ù
            tmp1 = sdate.getFullYear();
            tmp2 = edate.getFullYear();
            diff = (tmp1 == tmp2)
                    ? edate.getMonth() - sdate.getMonth()
                    : edate.getMonth() - sdate.getMonth() + (12 * (tmp2 - tmp1));

            break;

        case "D":   // ÀÏ(¹Ú¼ö)
            sdate.setHours(1,0,0);
            edate.setHours(1,0,0);

            diff = Math.floor((edate.getTime() - sdate.getTime())/(24*60*60*1000));

            break;
            
        case "H":
            //diff = Math.floor(((edate.getTime() - sdate.getTime())/(24*60*60*1000)) * 24);
            diff = Math.round(Math.floor(((edate.getTime() - sdate.getTime())/(24*60*60*1000))*24*60)/60);  //(30ºÐ ´ÜÀ§ ¹Ý¿Ã¸²)
            break;

        case "I":
            diff = Math.floor(((edate.getTime() - sdate.getTime())/(24*60*60*1000)) * 24*60);

            break;

        default:
            diff = false;
    }

    return diff;

} // end of the 'getDateDiff()' functon/*}}}*/


/**
 * ÁÖ¾îÁø ¹®ÀÚ¿­ÀÌ ³¯Â¥ Çü½Ä¿¡ ¸Â´ÂÁö È®ÀÎÇÑ´Ù.
 *
 * @param   string      ³¯Â¥ ¹®ÀÚ¿­
 *
 * @return  boolean
 */
function chkDateString(i_date)/*{{{*/
{
    var date_pattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/;
    var datetime_pattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}$/;

    return (date_pattern.test(i_date) || datetime_pattern.test(i_date))
            ? true
            : false;

} // end of the 'chkDateString()' function/*}}}*/


/**
 * ³¯Â¥ ¿¬»ê
 *
 * @param   object      Date °´Ã¼
 * @param   string      ±¸ºÐ (y:³â, m:¿ù, d:ÀÏ, h:½Ã°£)
 * @param   integer     ¿¬»êÇÒ ¼ö
 * @param   string      ¿¬»ê±âÈ£(+,- / DEFAULT: +)
 *
 * @return  object      Date °´Ã¼
 */
function operDate(src_date, op_gubun, param, op_unit)/*{{{*/
{
    var y,m, d;
    var tmp;
    var tar_date = new Date();
        tar_date.setTime(src_date.getTime());
    var tmp_date = null;
   
    op_unit = (typeof op_unit == "undefined" || op_unit != "-" ? "+" : "-");
    op_gubun = String(op_gubun).toUpperCase();

    switch (op_gubun) {
        case "Y":   param *= 31536000000;   break;      // 365*24*60*60*1000
        case "M":
            m = tar_date.getMonth();
            d = tar_date.getDate();
            tmp = (op_unit == "+" ? m+param : m-param);

            tmp_date = new Date();
            tmp_date.setTime(src_date.getTime());
            tmp_date.setMonth(tmp);

            // ¸»ÀÏ: ¿¬»êÈÄ °á°ú°ªÀÇ ¸»ÀÏÀÌ Ä¿¼­ ´ÙÀ½´Þ·Î ³Ñ¾î°¥ °æ¿ì ¸»ÀÏÀ» Ãâ·ÂÇÑ´Ù.
            if ((d == getLastDay(tar_date)) && (d != tmp_date.getDate())) {
                tmp_date.setMonth(tmp_date.getMonth()-1);
                tmp_date.setDate(getLastDay(tmp_date));
            }
            tar_date = tmp_date;
            break;
        case "D":   param *= 86400000;      break;      // 24*60*60*1000
        case "H":   param *= 3600000;       break;      // 60*60*1000
        case "I":   param *= 60000;         break;      // 60*1000
        default:    return false;
    } // end switch

    if (op_gubun != "M") {
        tar_date.setTime(op_unit == "+" ? src_date.getTime() + param : src_date.getTime() - param);
    }

    return tar_date;
} // end of the 'operDate()' function/*}}}*/


/** 
 * ³¯Â¥ Æ÷¸ä
 *
 * @param   object      Date °´Ã¼
 * @param   string      Æ÷¸ä(y:³â, m:¿ù, d:ÀÏ, h:½Ã±ä, i:ºÐ)
 *
 * @return  string
 */
function getDateFmt(src_date, fmt)/*{{{*/
{
    var tar_date = String(fmt).toLowerCase();

    var y = String(src_date.getFullYear());
    var m = String(src_date.getMonth()+1);
    var d = String(src_date.getDate());
    var h = String(src_date.getHours());
    var i = String(src_date.getMinutes());

    tar_date = tar_date.replace(RegExp("y", "g"), y);
    tar_date = tar_date.replace(RegExp("m", "g"), (m.length == 1 ? "0"+m : m));
    tar_date = tar_date.replace(RegExp("d", "g"), (d.length == 1 ? "0"+d : d));
    tar_date = tar_date.replace(RegExp("h", "g"), (h.length == 1 ? "0"+h : h));
    tar_date = tar_date.replace(RegExp("i", "g"), (i.length == 1 ? "0"+i : i));

    return tar_date;
} // end of the 'getDateFmt()' function/*}}}*/

// ]]>