﻿function goSearch() {
	goPage(1);
	return false;
}


function goPage(page) {
	var frm = document.getElementById("listFrm");
	frm.curPage.value = page;
	frm.action = "./list.jspx";
    frm.submit();
	return false;
}

/**
 * goDetail
 * @param {type} bbsSeq 
 */
 function goDetail(bbsSeq, secretYn) {
	var frm = document.getElementById("listFrm");
	frm.bbsSeq.value = bbsSeq;
	frm.secretYn.value = secretYn;
	frm.action = "./view.jspx";
	frm.submit();
	return false;
 }
 
 
/*-------------------------------------
기타 관련
-------------------------------------*/
/*----------------------------------------------
 * 원하는 기간의후의 날짜 가져오기
 * param : fn_setTime (pIndex, fromData, toData)
 * return :
----------------------------------------------*/
function fn_setTime(pIndex, sDate, eDate, fullDate){

    var fromData = document.getElementById(sDate);
    var toData   = document.getElementById(eDate);

    switch(pIndex){
        case '1D' :
            fn_setDate(1, fromData, toData); break;
        case '7D' :
            fn_setDate(7, fromData, toData); break;
        case '1M' :
            fn_setMonth(1, fromData, toData); break;
        case '3M' :
            fn_setMonth(3, fromData, toData); break;
        case '6M' :
            fn_setMonth(6, fromData, toData); break;
        case '1Y' :
            fn_setFullYear(1, fromData, toData); break;
        case '2Y' :
            fn_setFullYear(2, fromData, toData); break;
        case '3Y' :
            fn_setFullYear(3, fromData, toData); break;
        case '5Y' :
            fn_setFullYear(5, fromData, toData); break; 
        case 'FD' :
            fn_setFullDate(fromData, toData, fullDate); break;  
    }
}

//7일 전 날짜 구하기
function fn_setDate(pNewDd, fromData, toData){
  
    var vDate, vDate2,  vMon2, vMon, vDay2, vDay;
    vDate = new Date();
    vDate2 = new Date();
    vDate.setDate(vDate.getDate());
    vDate2.setDate(vDate.getDate()-pNewDd);
    //-- 월 <10
    if ( (vDate2.getMonth()+1) < 10 ) vMon2 = "0"+String(vDate2.getMonth()+1);
    else vMon2 =String(vDate2.getMonth()+1);
    if ( (vDate.getMonth()+1) < 10 ) vMon = "0"+String(vDate.getMonth()+1);
    else vMon =String(vDate.getMonth()+1);
    //-- 일 <10
    if ( vDate2.getDate() < 10 ) vDay2 = "0"+String(vDate2.getDate());
    else vDay2 =String(vDate2.getDate());
    if ( vDate.getDate() < 10 ) vDay = "0"+String(vDate.getDate());
    else vDay =String(vDate.getDate());
    fromData.value  = String(vDate2.getFullYear())+String(vMon2)+String(vDay2);
    toData.value    = String(vDate.getFullYear())+String(vMon)+String(vDay);
}
  
//한달전, 6개월전 날짜 구하기
function fn_setMonth(pNewmonth, fromData, toData){
  
    var vDate, vDate2, vMon2, vMon, vDay2, vDay;
    
    vDate = new Date();
    vDate2 = new Date();
    vDate.setMonth(vDate.getMonth());
    vDate2.setMonth(vDate.getMonth()-pNewmonth);
 
    //-- 월 <10
    if ( (vDate2.getMonth()+1) < 10 ) vMon2 = "0"+String(vDate2.getMonth()+1);
    else vMon2 =String(vDate2.getMonth()+1);
    if ( (vDate.getMonth()+1) < 10 ) vMon = "0"+String(vDate.getMonth()+1);
    else vMon =String(vDate.getMonth()+1);
    //-- 일 <10
    if ( vDate2.getDate() < 10 ) vDay2 = "0"+String(vDate2.getDate());
    else vDay2 =String(vDate2.getDate());
    if ( vDate.getDate() < 10 ) vDay = "0"+String(vDate.getDate());
    else vDay =String(vDate.getDate());
    fromData.value  = String(vDate2.getFullYear())+String(vMon2)+String(vDay2);
    toData.value    = String(vDate.getFullYear())+String(vMon)+String(vDay);
}

//1년전, 2년전, 3년전의 날짜 구하기
function fn_setFullYear(pNewyear, fromData, toData){
    var vDate, vDate2,  vMon2, vMon, vDay2, vDay;
    vDate = new Date();
    vDate2 = new Date();

    vDate.setFullYear(vDate.getFullYear());
    vDate2.setFullYear(vDate.getFullYear()-pNewyear);

    
    //-- 월 <10
    if ( (vDate2.getMonth()+1) < 10 ) vMon2 = "0"+String(vDate2.getMonth()+1);
    else vMon2 =String(vDate2.getMonth()+1);
    
    if ( (vDate.getMonth()+1) < 10 ) vMon = "0"+String(vDate.getMonth()+1);
    else vMon =String(vDate.getMonth()+1);
    
    //-- 일 <10
    if ( vDate2.getDate() < 10 ) vDay2 = "0"+String(vDate2.getDate());
    else vDay2 =String(vDate2.getDate());
    
    if ( vDate.getDate() < 10 ) vDay = "0"+String(vDate.getDate());
    else vDay =String(vDate.getDate());
    
    
    fromData.value  = String(vDate2.getFullYear())+String(vMon2)+String(vDay2);
    toData.value    = String(vDate.getFullYear())+String(vMon)+String(vDay);
}
function fn_setFullDate(fromData, toData, fullDate){
    var vDate, vMon, vDay;
    vDate = new Date();

    vDate.setFullYear(vDate.getFullYear());

    //-- 월 <10
    if ( (vDate.getMonth()+1) < 10 ) vMon = "0"+String(vDate.getMonth()+1);
    else vMon =String(vDate.getMonth()+1);
    if ( vDate.getDate() < 10 ) vDay = "0"+String(vDate.getDate());
    else vDay =String(vDate.getDate());
    fromData.value  = fullDate;
    toData.value    = String(vDate.getFullYear())+String(vMon)+String(vDay);    
}

function dateSet(val) {
    //날짜데이터 : 1D, 7D, 1M, 3M, 6M, 1Y..
    fn_setTime(val,'startDate','endDate');
}

/**
* Function      : 기준일로 부터 조건 타입에 따른 날짜를 계산하여 반환한다.
* @param        : bastDt        - 계산의 기준이 되는 일자
*               : type          - 계산 타입
*                                 1 : 1일,     2 : 1주일전,  3 : 1개월전, 
*                                 4 : 3개월 전, 5 : 6개월 전, 6 : 1년 전,
*                                 7 : 전일, 8 : 5일전, 9 : 20일전, 10 : 60일전
*                 frDtFieldNm   - 필드명1
*                 toDtFieldNm   - 필드명2
*                 formNm        - 폼명
* @return       : 
*/
function calcDate(bastDt, type, frDtFdNm, toDtFdNm, formNm) {
    var relativeDt = null;
    
    try { 
        if ( bastDt == null || trimmed(bastDt).length == 0 ) { 
            bastDt = today(); 
        }
       
        if ( frDtFdNm == null ) { 
            frDtFdNm = "FR_WORK_DT"; 
        }
        
        if ( toDtFdNm == null ) { 
            toDtFdNm = "TO_WORK_DT"; 
        }

        //1일
        if ( type == 1 ) { relativeDt = bastDt; }

        //1주일 전
        else if ( type == 2 ) { relativeDt = relativeDate(bastDt, -7); }

        //1개월 전
        else if ( type == 3 ) { relativeDt = relativeMonth(bastDt, -1); }

        //3개월 전
        else if ( type == 4 ) { relativeDt = relativeMonth(bastDt, -3); }

        //6개월 전
        else if ( type == 5 ) { relativeDt = relativeMonth(bastDt, -6); }

        //1년 전
        else if ( type == 6 ) { relativeDt = relativeYear(bastDt, -1); }
        
        else if(type == 7) {//전일
            relativeDt = relativeDate(bastDt, -1);
        
        } else if(type == 8) {//5일전
            relativeDt = relativeDate(bastDt, -5);
        
        } else if(type == 9) {//20일전
            relativeDt = relativeDate(bastDt, -20);
        
        } else if(type == 10) {//60일전
            relativeDt = relativeDate(bastDt, -60);
        }

        //예외발생
        else { throw "날짜 계산 타입 인수가 부적절합니다.("+type+")"; }

        if ( formNm == null ) 
        {
            document.getElementById(frDtFdNm).value = relativeDt;
            document.getElementById(toDtFdNm).value = bastDt;
        }
        else 
        {
            document.forms[formNm][frDtFdNm].value = relativeDt;
            document.forms[formNm][toDtFdNm].value = bastDt;
        }
    }
    catch (e) 
    {
        alert(e);
    }
}

/**
* Function      : 기준일의 상대적인 년도를 계산한 날짜를 구한다.
* @param        : bastDt   - 기준일
*               : n          - 상대적 년도수
* @return       : String     - 계산된 일자
*/
function relativeYear(bastDt, n) 
{
    return relativeMonth(bastDt, n*12);
}

/**
* Function      : 기준일의 상대적인 개월를 계산한 날짜를 구한다.
* @param        : bastDt   - 기준일
*               : n          - 상대적 개월수
* @return       : String     - 계산된 일자
*/
function relativeMonth(bastDt, n) 
{
    var oldDate, newLastDate;
    var oDestDate = null;

    //기준일 타입이 Date 객체
    if (typeof bastDt == "object") { oDestDate = bastDt; }
    //기준일 타입이 String 객체
    else { oDestDate = castDateType( bastDt ); }
    
    // 현재 일자를 백업해 두고 1일로 세팅한 후 상대적인 개월 계산후 다시 현재일자를 복원한다.
    // 이유) 구하는 상대일자의 년월의 마직막 일자가 현재의 일자보다 적을 경우
    //       상대일자의 마지막일자로 세팅해야 함 
    //       예> 20050731 의 한달전을 일자는 20050631(X) 가 아니고 20050630 이다.
    oldDate = oDestDate.getDate();
    oDestDate.setDate(1);

    //상대적인 개월 계산
    oDestDate.setMonth( oDestDate.getMonth() + n );
    
    //상대적인 년월의 마지막 일자와 이전 년월 일자를 비교한 후 타당한 일자를 세팅
    //예> 20050731 의 한달전을 일자는 20050631(X) 가 아니고 20050630 이다.
    var nTmp = oDestDate.getFullYear().toString();
    if ( nTmp.length == 2 ) { nTmp = "19" + nTmp; }
    newLastDate = getDaysInMonth( eval(nTmp), oDestDate.getMonth()+1 );
    if ( oldDate > newLastDate ) { oDestDate.setDate(newLastDate); }
    else { oDestDate.setDate(oldDate); }

    if ( bastDt.length == 6 ) { return castStrType( oDestDate, "yyyyMM" ); }
    else { return castStrType( oDestDate ); }
}

/**
* Function      : 기준일의 상대적인 일자를 계산한 날짜를 구한다.
* @param        : bastDt   - 기준일
*               : n          - 상대적 일자수
* @return       : String     - 계산된 일자
*/
function relativeDate(bastDt, n) 
{
    var oDestDate = null;

    //기준일 타입이 Date 객체
    if (typeof bastDt == "object") { oDestDate = bastDt; }
    //기준일 타입이 String 객체
    else { oDestDate = castDateType( bastDt ); }

    oDestDate.setDate(oDestDate.getDate() + n);

    return castStrType( oDestDate );
}

/**
* Function      : String 형식을 Date 형식으로 변환
* @param        : strDate   - String 형식의 날짜.
* @return       : Date      - 변환된 Date 형식의 객체
*/
function castDateType( strDate ) 
{
/*
    if ( !isValidDate( strDate ) ) 
    {
        dialogError("유효한 일자 형식이 아닙니다.(예:20058010)");
        return null;
    }
*/
    var dtRtn = null;

    if ( strDate.length == 6 ) { strDate += "01"; }

    //포맷을 가진 형태로 전달되었을 경우. (예 2005.01.01)
    if ( strDate.length == 10 ) 
    {
        var aDate = strDate.split( strDate.substring(4, 5) );
        dtRtn = new Date(aDate[0], eval(aDate[1])-1, aDate[2]);
    }
    //포맷이 없는 형태로 전달되었을 경우. (예 20050101)
    else if (strDate.length == 8 ) 
    {
        var year = eval(strDate.substring(0, 4));
        var month = eval(strDate.substring(4, 6));
        var date = eval(strDate.substring(6, 8));

        dtRtn = new Date(year, month-1, date);
    }
    else
    {
        throw "부적합한 날짜 형식입니다.(" + strDate + ")";
    }

    return dtRtn;
}

/**
* Function      : Date 형식을 String 형식으로 변환
* @param        : dtDate    - Date 형식의 날짜.
*               : delm      - 날짜의 포맷 구분자 (예 '.' -> 2005.08.01 )
* @return       : String    - 변환된 String 형식의 객체
*/
function castStrType( dtDate, format ) 
{
    var re = "";
    var delm = "";

    if ( format == null )  { format = "yyyyMMdd"; }

    for (var i=0; i<format.length; i++) 
    {
        var vChr = format.charAt(i);
        if ( vChr != 'y' && vChr != 'M' && vChr != 'd') 
        { 
            delm = vChr;
            break;
        }
    }

    if      ( delm == "/"     ) { re = eval("/\\" + delm + "/g"); }
    else if ( delm.length != 0) { re = eval("/" + delm + "/g"); }

    format = format.replace(re, "");

    var year = dtDate.getFullYear().toString().length == 2 ? "19" + dtDate.getFullYear() : dtDate.getFullYear();
    var month = dtDate.getMonth()+1;
    var date = dtDate.getDate();

    if (month < 10) { month = "0" + month; }
    if (date < 10) { date = "0" + date; }

    if      ( format == "yyyy"     ) { return year; }
    else if ( format == "yyyyMM"   ) { return year + delm + month; }
    else if ( format == "yyyyMMdd" ) { return year + delm + month + delm + date; }
}


/**
* Function      : 현재일을 반환한다.(클라이언트 시각)
* @param        : 
* @return       : String     - 현재일
*/
function today(delm) 
{
    if ( delm == null ) { delm = ""; }

    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth() + 1;
    var date = now.getDate()

    if ( month < 10 ) { month = "0" + month; }
    if ( date  < 10 ) { date  = "0" + date;  }

    return (year + delm + month + delm + date);
}

/**
/**
* Function      : 해당월이 몇일까지 있는지 계산한다.
*               : 13월 15일 추가.
* @param        : year      - 년도
*               : month     - 월
* @return       : days      - 일수
*/
function getDaysInMonth(year,month)
{
    var days;
    if (month==1 || month==3 || month==5 || month==7 || month==8 ||
        month==10 || month==12)  days=31;
    else if (month==4 || month==6 || month==9 || month==11) days=30;
    else if (month==2)
    {
        if (leapYear (year)==1)  days=29;
        else days=28;
    }
    else if (month==13) days=15;

    return (days);
}

/**
* Function      : 해당년이 윤년인지 검사한다.
* @param        : year      - 년도
*               : month     - 월
* @return       : 윤년이면 1, 아니면 0
*/
function leapYear (Year)
{
    if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0))
        return (1);
    else
        return (0);
}

/**
* Function      : 문자열의 앞뒤 space를 제거한다.
* @param        : value
* @return       : 앞뒤의 space가 제거된 문자열
*/
function trimmed(value)
{
    value = value.replace(/^\s+/, "");  // remove leading white spaces
    value = value.replace(/\s+$/g, ""); // remove trailing while spaces
    return value;
}
