/*
 * ºÐ¸®ÀÚ¸¦ ÀÌ¿ëÇÏ¿© ³¯Â¥ÀÇ À¯È¿¼º Ã¼Å©
 * ¿¹) 2000.03.24 -> '.'À» ÀÌ¿ëÇÏ¿© Ã¼Å©ÇÑ´Ù.
 *@param inputDate Ã¼Å©ÇÒ ³¯Â¥
 *@param point ³â,¿ù,ÀÏ ºÐ¸®ÀÚ
 */
function dateCheck(inputDate, point){
    var dateElement = new Array(3);

    if(point != ""){
        dateElement = inputDate.split(point);
        if(inputDate.length != 10 || dateElement.length != 3){
            return false;
        }
    }else{
        dateElement[0] = inputDate.substring(0,4);
        dateElement[1] = inputDate.substring(4,6);
        dateElement[2] = inputDate.substring(6,9);
    }
    //³âµµ °Ë»ç
    if( !( 1800 <= dateElement[0] && dateElement[0] <= 4000 ) ) {
        return false;
    }

    //´Þ °Ë»ç
    if( !( 0 < dateElement[1] &&  dateElement[1] < 13  ) ) {
        return false;
    }

    // ÇØ´ç ³âµµ ¿ùÀÇ ¸¶Áö¸· ³¯
    var tempDate = new Date(dateElement[0], dateElement[1], 0);
    var endDay = tempDate.getDate();

    //ÀÏ °Ë»ç
    if( !( 0 < dateElement[2] && dateElement[2] <= endDay ) ) {
         return false;
    }

    return true;
}

/*
 * ³¯Â¥ ºñ±³
 * Á¾·áÀÏÀÌ ½ÃÀÛÀÏ º¸´Ù ÀÛÀ»¶§ false¸¦
 * Á¤»ó ±â°£ÀÏ °æ¿ì true¸¦ ¸®ÅÏÇÑ´Ù.
 * @param startDate ½ÃÀÛÀÏ
 * @param endDate Á¾·áÀÏ
 * @param point ³¯Â¥ ±¸ºÐÀÚ
 */
function dateCompare(startDate, endDate, point){
    //Á¤»ó ³¯Â¥ÀÎÁö Ã¼Å©ÇÑ´Ù.
    var startDateChk = dateCheck(startDate, point);
    if(!startDateChk){
        return false;
    }
    var endDateChk = dateCheck(endDate, point, "end");

    if(!endDateChk){
        return false;
    }

    //³â ¿ùÀÏ·Î ºÐ¸® ÇÑ´Ù.
    var start_Date = new Array(3);
    var end_Date = new Array(3);

    if(point != ""){
        start_Date = startDate.split(point);
        end_Date = endDate.split(point);
        if(start_Date.length != 3 && end_Date.length != 3){
            return false;
        }
    }else{
        start_Date[0] = startDate.substring(0,4);
        start_Date[1] = startDate.substring(4,6);
        start_Date[2] = startDate.substring(6,9);

        end_Date[0] = endDate.substring(0,4);
        end_Date[1] = endDate.substring(4,6);
        end_Date[2] = endDate.substring(6,9);
    }

    //Date °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
    var sDate = new Date(start_Date[0], start_Date[1], start_Date[2]);
    var eDate = new Date(end_Date[0], end_Date[1], end_Date[2]);

    if(sDate > eDate){
        return false;
    }

    return true;
}

/*
 * ³¯Â¥Æ÷¸Ë¿¡ ¸Â´ÂÁö °Ë»ç
 */
function isDateFormat(d) {
    var df = /[0-9]{4}-[0-9]{2}-[0-9]{2}/;
    return d.match(df);
}

/*
 * À±³â¿©ºÎ °Ë»ç
 */
function isLeaf(year) {
    var leaf = false;

    if(year % 4 == 0) {
        leaf = true;

        if(year % 100 == 0) {
            leaf = false;
        }

        if(year % 400 == 0) {
            leaf = true;
        }
    }

    return leaf;
}

/*
 * ³¯Â¥°¡ À¯È¿ÇÑÁö °Ë»ç
 */
function isValidDate(d) {
    // Æ÷¸Ë¿¡ ¾È¸ÂÀ¸¸é false¸®ÅÏ
    if(!isDateFormat(d)) {
        return false;
    }

    var month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    var dateToken = d.split('-');
    var year  = Number(dateToken[0]);
    var month = Number(dateToken[1]);
    var day   = Number(dateToken[2]);

    // ³¯Â¥°¡ 0ÀÌ¸é false
    if(day == 0) {
        return false;
    }

    var isValid = false;

    // À±³âÀÏ¶§
    if(isLeaf(year)) {
        if(month == 2) {
            if(day <= month_day[month-1] + 1) {
                isValid = true;
            }
        } else {
            if(day <= month_day[month-1]) {
                isValid = true;
            }
        }
    } else {
        if(day <= month_day[month-1]) {
            isValid = true;
        }
    }

    return isValid;
}


/**
* ³¯Â¥°ü·Ã ÀÚ¹Ù½ºÅ©¸³Æ® °øÅëÇÔ¼ö
*
* ºÐ´ÜÀ§ ÀÌÇÏ(= ÃÊ)´Â °í·ÁÇÏÁö ¾Ê¾Ò½À´Ï´Ù.
* YYYYMMDDHHMI Çü½ÄÀÇ String => 'Time'À¸·Î ÄªÇÔ
*
* ÁÖ·Î YYYYMMDD ±îÁö¸¸ ¾²ÀÎ´Ù¸é ¾Æ·¡ ÇÔ¼öµéÀ»
* YYYYMMDD Çü½ÄÀÇ String => 'Date'·Î ÇÏ¿© Àû´çÈ÷
* ¼öÁ¤ÇÏ½Ã°Å³ª ¾Æ´Ï¸é ÇÔ¼ö¸¦, ¿¹¸¦µé¾î isValidDate()Ã³·³,
* Ãß°¡ÇÏ½Ã±â ¹Ù¶ø´Ï´Ù.
*
* @version 2.0, 2001/01/28
* @author ¹ÚÁ¾Áø(JongJin Park), jongjpark@lgeds.lg.co.kr
*/


/**
* À¯È¿ÇÑ(Á¸ÀçÇÏ´Â) ¿ù(êÅ)ÀÎÁö Ã¼Å©
*/
function isValidMonth(mm) {
    var m = parseInt(mm,10);
    return (m >= 1 && m <= 12);
}

/**
* À¯È¿ÇÑ(Á¸ÀçÇÏ´Â) ÀÏ(ìí)ÀÎÁö Ã¼Å©
*/
function isValidDay(yyyy, mm, dd) {
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}

/**
* À¯È¿ÇÑ(Á¸ÀçÇÏ´Â) ½Ã(ãÁ)ÀÎÁö Ã¼Å©
*/
function isValidHour(hh) {
    var h = parseInt(hh,10);
    return (h >= 1 && h <= 24);
}

/**
* À¯È¿ÇÑ(Á¸ÀçÇÏ´Â) ºÐ(ÝÂ)ÀÎÁö Ã¼Å©
*/
function isValidMin(mi) {
    var m = parseInt(mi,10);
    return (m >= 1 && m <= 60);
}

/**
* Time Çü½ÄÀÎÁö Ã¼Å©(´À½¼ÇÑ Ã¼Å©)
*/
function isValidTimeFormat(time) {
    return (!isNaN(time) && time.length == 12);
}

/**
* À¯È¿ÇÏ´Â(Á¸ÀçÇÏ´Â) Time ÀÎÁö Ã¼Å©

* ex) var time = form.time.value; //'200102310000'
*     if (!isValidTime(time)) {
*         alert("¿Ã¹Ù¸¥ ³¯Â¥°¡ ¾Æ´Õ´Ï´Ù.");
*     }
*/
function isValidTime(time) {
    var year  = time.substring(0,4);
    var month = time.substring(4,6);
    var day   = time.substring(6,8);
    var hour  = time.substring(8,10);
    var min   = time.substring(10,12);

    if (parseInt(year,10) >= 1900  && isValidMonth(month) &&
        isValidDay(year,month,day) && isValidHour(hour)   &&
        isValidMin(min)) {
        return true;
    }
    return false;
}

/**
* Time ½ºÆ®¸µÀ» ÀÚ¹Ù½ºÅ©¸³Æ® Date °´Ã¼·Î º¯È¯
* parameter time: Time Çü½ÄÀÇ String
*/
function toTimeObject(time) { //parseTime(time)
    var year  = time.substr(0,4);
    var month = time.substr(4,2) - 1; // 1¿ù=0,12¿ù=11
    var day   = time.substr(6,2);
    var hour  = time.substr(8,2);
    var min   = time.substr(10,2);

    return new Date(year,month,day,hour,min);
}

/**
* ÀÚ¹Ù½ºÅ©¸³Æ® Date °´Ã¼¸¦ Time ½ºÆ®¸µÀ¸·Î º¯È¯
* parameter date: JavaScript Date Object
*/
function toTimeString(date) { //formatTime(date)
    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1¿ù=0,12¿ù=11ÀÌ¹Ç·Î 1 ´õÇÔ
    var day   = date.getDate();
    var hour  = date.getHours();
    var min   = date.getMinutes();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }
    if (("" + hour).length  == 1) { hour  = "0" + hour;  }
    if (("" + min).length   == 1) { min   = "0" + min;   }

    return ("" + year + month + day + hour + min)
}

/**
* TimeÀÌ ÇöÀç½Ã°¢ ÀÌÈÄ(¹Ì·¡)ÀÎÁö Ã¼Å©
*/
function isFutureTime(time) {
    return (toTimeObject(time) > new Date());
}

/**
* TimeÀÌ ÇöÀç½Ã°¢ ÀÌÀü(°ú°Å)ÀÎÁö Ã¼Å©
*/
function isPastTime(time) {
    return (toTimeObject(time) < new Date());
}

/**
* ÁÖ¾îÁø Time °ú y³â m¿ù dÀÏ h½Ã Â÷ÀÌ³ª´Â TimeÀ» ¸®ÅÏ

* ex) var time = form.time.value; //'20000101000'
*     alert(shiftTime(time,0,0,-100,0));
*     => 2000/01/01 00:00 À¸·ÎºÎÅÍ 100ÀÏ Àü Time
*/
function shiftTime(time,y,m,d,h) { //moveTime(time,y,m,d,h)
    var date = toTimeObject(time);

    date.setFullYear(date.getFullYear() + y); //y³âÀ» ´õÇÔ
    date.setMonth(date.getMonth() + m);       //m¿ùÀ» ´õÇÔ
    date.setDate(date.getDate() + d);         //dÀÏÀ» ´õÇÔ
    date.setHours(date.getHours() + h);       //h½Ã¸¦ ´õÇÔ

    return toTimeString(date);
}

/**
* µÎ TimeÀÌ ¸î °³¿ù Â÷ÀÌ³ª´ÂÁö ±¸ÇÔ

* time1ÀÌ time2º¸´Ù Å©¸é(¹Ì·¡¸é) minus(-)
*/
function getMonthInterval(time1,time2) { //measureMonthInterval(time1,time2)
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);

    var years  = date2.getFullYear() - date1.getFullYear();
    var months = date2.getMonth() - date1.getMonth();
    var days   = date2.getDate() - date1.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/**
* µÎ TimeÀÌ ¸çÄ¥ Â÷ÀÌ³ª´ÂÁö ±¸ÇÔ
* time1ÀÌ time2º¸´Ù Å©¸é(¹Ì·¡¸é) minus(-)
*/
function getDayInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var day   = 1000 * 3600 * 24; //24½Ã°£

    return parseInt((date2 - date1) / day, 10);
}

/**
* µÎ TimeÀÌ ¸î ½Ã°£ Â÷ÀÌ³ª´ÂÁö ±¸ÇÔ

* time1ÀÌ time2º¸´Ù Å©¸é(¹Ì·¡¸é) minus(-)
*/
function getHourInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var hour  = 1000 * 3600; //1½Ã°£

    return parseInt((date2 - date1) / hour, 10);
}

/**
* ÇöÀç ½Ã°¢À» Time Çü½ÄÀ¸·Î ¸®ÅÏ

*/
function getCurrentTime() {
    return toTimeString(new Date());
}

/**
* ÇöÀç ½Ã°¢°ú y³â m¿ù dÀÏ h½Ã Â÷ÀÌ³ª´Â TimeÀ» ¸®ÅÏ
*/
function getRelativeTime(y,m,d,h) {
/*
    var date = new Date();

    date.setFullYear(date.getFullYear() + y); //y³âÀ» ´õÇÔ
    date.setMonth(date.getMonth() + m);       //m¿ùÀ» ´õÇÔ
    date.setDate(date.getDate() + d);         //dÀÏÀ» ´õÇÔ
    date.setHours(date.getHours() + h);       //h½Ã¸¦ ´õÇÔ

    return toTimeString(date);
*/
    return shiftTime(getCurrentTime(),y,m,d,h);
}

/**
* ÇöÀç Ò´À» YYYYÇü½ÄÀ¸·Î ¸®ÅÏ
*/
function getYear() {
/*
    var now = new Date();
    return now.getFullYear();
*/
    return getCurrentTime().substr(0,4);
}

/**
* ÇöÀç êÅÀ» MMÇü½ÄÀ¸·Î ¸®ÅÏ
*/
function getMonth() {
/*
    var now = new Date();

    var month = now.getMonth() + 1; // 1¿ù=0,12¿ù=11ÀÌ¹Ç·Î 1 ´õÇÔ
    if (("" + month).length == 1) { month = "0" + month; }

    return month;
*/
    return getCurrentTime().substr(4,2);
}

/**
* ÇöÀç ìíÀ» DDÇü½ÄÀ¸·Î ¸®ÅÏ

*/
function getDay() {
/*
    var now = new Date();

    var day = now.getDate();
    if (("" + day).length == 1) { day = "0" + day; }

    return day;
*/
    return getCurrentTime().substr(6,2);
}

/**
 * ¿À´Ã³¯Â¥ ±¸ÇÏ±â
 */
function getToday() {
    return getYear()+getMonth()+getDay();
}

/**
* ÇöÀç ãÁ¸¦ HHÇü½ÄÀ¸·Î ¸®ÅÏ
*/
function getHour() {
/*
    var now = new Date();

    var hour = now.getHours();
    if (("" + hour).length == 1) { hour = "0" + hour; }

    return hour;
*/
    return getCurrentTime().substr(8,2);
}

/**
* ¿À´ÃÀÌ ¹«½¼ ¿äÀÏÀÌ¾ß?

* ex) alert('¿À´ÃÀº ' + getDayOfWeek() + '¿äÀÏÀÔ´Ï´Ù.');
* Æ¯Á¤ ³¯Â¥ÀÇ ¿äÀÏÀ» ±¸ÇÏ·Á¸é? => ¿©·¯ºÐÀÌ Á÷Á¢ ¸¸µé¾î º¸¼¼¿ä.
*/
function getDayOfWeek() {
    var now = new Date();

    var day = now.getDay(); //ÀÏ¿äÀÏ=0,¿ù¿äÀÏ=1,...,Åä¿äÀÏ=6
    var week = new Array('ÀÏ','¿ù','È­','¼ö','¸ñ','±Ý','Åä');

    return week[day];
}
