﻿var target; 																        // 호출한 Object의 저장
var stime;
var lname = "calendar_pop";
var CLMinYear = 2000;
var Action = "";

//document.write("<div id='minical2' oncontextmenu='return false' ondragstart='return false' onselectstart='return false' style='background:#ffffff; margin:5; padding:5;margin-top:2;border-top:1 solid buttonshadow;border-left: 1 solid buttonshadow;border-right: 1 solid buttonshadow;border-bottom:1 solid buttonshadow;width:164px;height:170px;display:none;position:absolute; z-index:99;BORDER-top: #d9d9d9 1px solid;BORDER-RIGHT: #d9d9d9 1px solid;BORDER-LEFT: #d9d9d9 1px solid;BORDER-BOTTOM: #d9d9d9 1px solid; left: 8px;'></div>");

function Calendar_LayerAction(obj, x, y, act) {												// jucke
    Calendar_Layer(obj, x, y);
    Action = act;
}


function Calendar_Layer(obj, x, y) {												// jucke
    var now = obj.value.split("-");

    target = obj; 														            // Object 저장;
    var left = getposOffset(target, "left");

    //x = (document.layers) ? loc.pageX : event.clientX;
    //y = (document.layers) ? loc.pageY : event.clientY;



    if (document.layers) {
        layer = document.layers[lname];
    }
    else if (document.all) {
        layer = document.all[lname];
    }
    else {
        layer = document.getElementById(lname);
    }

    if (document.layers) {
        layer.visibility = (layer.visibility == 'hide') ? 'show' : 'hide';
        if (layer.visibility == 'hide') {
            return;
        }
    }
    else if (document.all) {
        layer.style.visibility = (layer.style.visibility == 'hidden' || layer.style.visibility == '') ? 'visible' : 'hidden';
        if (layer.style.visibility == 'hidden') {
            return;
        }
    }
    else {
        layer.style.visibility = (layer.style.visibility == 'hidden' || layer.style.visibility == '') ? 'visible' : 'hidden';
        if (layer.style.visibility == 'hidden') {
            return;
        }
    }

    if (now.length == 3) {														    // 정확한지 검사
        Show_cal(now[0], now[1], now[2]); 										    // 넘어온 값을 년월일로 분리
    }
    else {
        now = new Date();
        Show_cal(now.getFullYear(), now.getMonth() + 1, now.getDate()); 		    // 현재 년/월/일을 설정하여 넘김.
    }
}

function doOver(e) {
    var el; 																// 마우스가 칼렌다 위에 있으면
    var evt = e ? e : window.event;
    if (evt.srcElement) {
        el = evt.srcElement;
    }
    else {
        el = evt.target;
    }
    cal_Day = el.title;

    if (cal_Day.length > 7) {													// 날자 값이 있으면.
        el.style.borderTopColor = el.style.borderLeftColor = "buttonshadow";    //buttonhighlight
        el.style.borderRightColor = el.style.borderBottomColor = "buttonshadow";
    }
    window.clearTimeout(stime); 												// Clear
}

function doClick(e) {															// 날자를 선택하였을 경우
    var evt = e ? e : window.event;
    if (evt.srcElement) {
        cal_Day = evt.srcElement.title;
        evt.srcElement.style.borderColor = "red";
    }
    else {
        cal_Day = evt.target.title;
        evt.target.style.borderColor = "red";
    }

    if (cal_Day.length > 7) {													// 날자 값이있으면
        target.value = cal_Day													// 값 설정
    }

    // action이 있는경우 실행
    if (Action == "goDetailSearch")
        goDetailSearch();
    else if (Action == "goPaoinSearch")
        goPaoinSearch();

    // 화면에서 지움
    if (document.layers) {
        layer = document.layers[lname];
    }
    else if (document.all) {
        layer = document.all[lname];
    }
    else {
        layer = document.getElementById(lname);
    }

    if (document.layers) {
        layer.visibility = 'hide';
    }
    else if (document.all) {
        layer.style.visibility = 'hidden';
    }
    else {
        layer.style.visibility = 'hidden';
    }
}

function doClose(e) {
    // 화면에서 지움
    if (document.layers) {
        layer = document.layers[lname];
    }
    else if (document.all) {
        layer = document.all[lname];
    }
    else {
        layer = document.getElementById(lname);
    }

    if (document.layers) {
        layer.visibility = 'hide';
    }
    else if (document.all) {
        layer.style.visibility = 'hidden';
    }
    else {
        layer.style.visibility = 'hidden';
    }
}

function doOut(e) {
    var el;
    var evt = e ? e : window.event;
    if (evt.srcElement) {
        el = evt.srcElement;
        cal_Day = el.title;
    }
    else {
        el = evt.target;
        cal_Day = el.title;
    }

    if (cal_Day.length > 7) {
        el.style.borderColor = "white";
    }
    //stime=window.setTimeout("minical2.style.display='none';", 200);
}

function day(d) {																// 2자리 숫자료 변경
    var str = new String();

    if (parseInt(d) < 10) {
        str = "0" + parseInt(d);
    } else {
        str = "" + parseInt(d);
    }
    return str;
}

function Show_cal(sYear, sMonth, sDay) {
    var Months_day = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    var Weekday_name = new Array("일", "월", "화", "수", "목", "금", "토");
    var intThisYear = new Number(), intThisMonth = new Number(), intThisDay = new Number();
    document.getElementById(lname).innerHTML = "";
    datToday = new Date(); 												// 현재 날자 설정

    intThisYear = parseFloat(sYear);
    intThisMonth = parseFloat(sMonth);
    intThisDay = parseFloat(sDay);

    if (intThisYear == 0) intThisYear = datToday.getFullYear(); 			// 값이 없을 경우
    if (intThisMonth == 0) intThisMonth = parseInt(datToday.getMonth()) + 1; // 월 값은 실제값 보다 -1 한 값이 돼돌려 진다.
    if (intThisDay == 0) intThisDay = datToday.getDate();

    switch (intThisMonth) {
        case 1:
            intPrevYear = intThisYear - 1;
            intPrevMonth = 12;
            intNextYear = intThisYear;
            intNextMonth = 2;
            break;
        case 12:
            intPrevYear = intThisYear;
            intPrevMonth = 11;
            intNextYear = intThisYear + 1;
            intNextMonth = 1;
            break;
        default:
            intPrevYear = intThisYear;
            intPrevMonth = parseInt(intThisMonth) - 1;
            intNextYear = intThisYear;
            intNextMonth = parseInt(intThisMonth) + 1;
            break;
    }

    NowThisYear = datToday.getFullYear(); 									// 현재 년
    NowThisMonth = datToday.getMonth() + 1; 									// 현재 월
    NowThisDay = datToday.getDate(); 										// 현재 일

    datFirstDay = new Date(intThisYear, intThisMonth - 1, 1); 					// 현재 달의 1일로 날자 객체 생성(월은 0부터 11까지의 정수(1월부터 12월))
    intFirstWeekday = datFirstDay.getDay(); 									// 현재 달 1일의 요일을 구함 (0:일요일, 1:월요일)

    intSecondWeekday = intFirstWeekday;
    intThirdWeekday = intFirstWeekday;

    datThisDay = new Date(intThisYear, intThisMonth, intThisDay); 			// 넘어온 값의 날자 생성
    intThisWeekday = datThisDay.getDay(); 									// 넘어온 날자의 주 요일

    varThisWeekday = Weekday_name[intThisWeekday]; 							// 현재 요일 저장

    intPrintDay = 1																// 달의 시작 일자
    secondPrintDay = 1
    thirdPrintDay = 1

    Stop_Flag = 0

    if ((intThisYear % 4) == 0) {													// 4년마다 1번이면 (사로나누어 떨어지면)
        if ((intThisYear % 100) == 0) {
            if ((intThisYear % 400) == 0) {
                Months_day[2] = 29;
            }
        } else {
            Months_day[2] = 29;
        }
    }
    intLastDay = Months_day[intThisMonth]; 									    // 마지막 일자 구함
    Stop_flag = 0
    Cal_HTML = "<div class=\"selector\">"
               + "    <p>"
               + "         <img src=\"../images/comm/btn_calendar_prev.gif\" alt=\"이전달\" onclick='Show_cal(" + intPrevYear + "," + intPrevMonth + ",1);' style=\"cursor:pointer\"/>&nbsp;"
               + get_Yearinfo(intThisYear, intThisMonth, intThisDay) + " 년 " + get_Monthinfo(intThisYear, intThisMonth, intThisDay) + " 월 "
               + "         &nbsp;<img src=\"../images/comm/btn_calendar_next.gif\" alt=\"다음달\" onclick='Show_cal(" + intNextYear + "," + intNextMonth + ",1);' style=\"cursor:pointer\" />"
			   + "	</p>"
               + " </div>";

    Cal_HTML += "<div class=\"calendar\">"
             + "<table onmouseover=doOver2(event); onmouseout=doOut2(event); class=\"cal\">"
             + "<thead>"
             + "<tr>"
             + "   <th class=\"sun\">일</th>"
             + "   <th class=\"mon\">월</th>"
             + "   <th class=\"tue\">화</th>"
             + "   <th class=\"wed\">수</th>"
             + "   <th class=\"thu\">목</th>"
             + "   <th class=\"fri\">금</th>"
             + "   <th class=\"sat\">토</th>"
             + "</tr>"
             + "</thead>"
             + "<tbody>"


    var rowCount = 0; // rowCount < 6 이면 한 주 밑에 더 그림
    for (intLoopWeek = 1; intLoopWeek < 7; intLoopWeek++) {						// 주단위 루프 시작, 최대 6주
        Cal_HTML += "<tr>"
        for (intLoopDay = 1; intLoopDay <= 7; intLoopDay++) {					// 요일단위 루프 시작, 일요일 부터
            if (intThirdWeekday > 0) {											// 첫주 시작일이 1보다 크면
                Cal_HTML += "<td onclick=doClick(event);>";
                intThirdWeekday--;
            }
            else {
                if (thirdPrintDay > intLastDay) {								// 입력 날짝 월말보다 크다면
                    Cal_HTML += "<td onclick=doClick(event);>";
                }
                else {														// 입력날짜가 현재월에 해당 되면
                    Cal_HTML += "<td onclick=doClick(event); title=" + intThisYear + "-" + day2(intThisMonth).toString() + "-" + day2(thirdPrintDay).toString();


                    switch (intLoopDay) {
                        case 1:
                            Cal_HTML += " class=\"sun"
                            break;
                        case 2:
                            Cal_HTML += " class=\"mon"
                            break;
                        case 3:
                            Cal_HTML += " class=\"tue"
                            break;
                        case 4:
                            Cal_HTML += " class=\"wed"
                            break;
                        case 5:
                            Cal_HTML += " class=\"thu"
                            break;
                        case 6:
                            Cal_HTML += " class=\"fri"
                            break;
                        case 7:
                            Cal_HTML += " class=\"sat"
                            break;
                    }



                    if (intThisYear == NowThisYear && intThisMonth == NowThisMonth && thirdPrintDay == intThisDay) {
                        Cal_HTML += " selected";
                    }



                    if (intThisYear == sYear && intThisMonth == sMonth && thirdPrintDay == sDay) {
                        Cal_HTML += " selected";
                    }

                    Cal_HTML += "\" ";
                    Cal_HTML += ">" + thirdPrintDay;

                }
                thirdPrintDay++;

                if (thirdPrintDay > intLastDay) {								// 만약 날짜 값이 월말 값보다 크면 루프문 탈출
                    Stop_Flag = 1;
                }
            }
            Cal_HTML += "</td>";
        }

        Cal_HTML += "</tr>";
        rowCount++;

        if (Stop_Flag == 1)
            break;
    }

    // 5 주 칼렌다의 경우 아래에 한 줄을 더 채운다 
    var addRowCount = 6 - rowCount
    for (var i = 0; i < addRowCount; i++) {
        Cal_HTML += " <tr>";
        Cal_HTML += "    <td class=\"sun\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"mon\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"tue\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"wed\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"thu\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"fri\" >&nbsp;</td>";
        Cal_HTML += "    <td class=\"sat\" >&nbsp;</td>";
        Cal_HTML += "</tr>";

    }

    Cal_HTML += "</tbody>";
    Cal_HTML += "</table>";
    Cal_HTML += "</div>";
    Cal_HTML += "<div class=\"btnclose\"><a href=\"javascript:doClose()\"><img src=\"../images/comm/btn_calendar_close.gif\" alt=\"달력숨김\" /></a></div>";

    document.getElementById(lname).innerHTML = Cal_HTML;
}

function get_Yearinfo(year, month, day) {											// 년 정보를 콤보 박스로 표시
    now = new Date();

    //var min = parseInt(now.getFullYear()) - 2;
    var min = CLMinYear;
    var max = parseInt(now.getFullYear());
    var i = new Number();
    var str = new String();

    str = "<SELECT onChange='Show_cal(this.value," + month + "," + day + ");' onmouseover='doOver(event);' class='calSelectbox' align=absmiddle>";
    for (i = min; i <= max; i++) {
        if (i == parseInt(year)) {
            str += "<OPTION VALUE=" + i + " selected onmouseover=doOver(event);>" + i + "</OPTION>";
        } else {
            str += "<OPTION VALUE=" + i + " onmouseover=doOver(event);>" + i + "</OPTION>";
        }
    }
    str += "</SELECT>";
    return str;
}

function get_Monthinfo(year, month, day) {										// 월 정보를 콤보 박스로 표시
    var i = new Number();
    var str = new String();

    str = "<SELECT onChange='Show_cal(" + year + ",this.value," + day + ");' onmouseover=doOver(event); class='calSelectbox' align=absmiddle>";
    for (i = 1; i <= 12; i++) {
        if (i == parseInt(month)) {
            str += "<OPTION VALUE=" + i + " selected onmouseover=doOver(event);>" + i + "</OPTION>";
        } else {
            str += "<OPTION VALUE=" + i + " onmouseover=doOver(event);>" + i + "</OPTION>";
        }
    }
    str += "</SELECT>";
    return str;
}

/*---------------------------------------------------------------------------------------------------
-- 콤보박스 날자 생성
-----------------------------------------------------------------------------------------------------*/


function getDays(y, m) {
    // y -> 년도 , m -> 월
    // 윤달을 계산( 2월)
    var yun = 28;
    if (((y % 4) == 0) && ((y % 100) != 0) || ((y % 400) == 0)) {
        yun = 29;
    }

    days = new Array(31, yun, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    return days[m - 1]; // 월은 1 부터 시작하지만 배열은 0 부터 시작이므로
}

function makeDays(y, m, listBox) {
    // 해당 년의 해당월의 날짜수가 몇일 인지 구한다.
    days = getDays(y, m);
    // 변수 days에는 해당 월의 날짜수가 들어간다..
    //	alert( " y : " + y + " / m : " + m );
    for (var i = 1; i < days + 1; i++) {
        var myItem = new Option(i, i); // 각 날짜 항목을 만듬
        listBox.options[i - 1] = myItem; // 날짜 항목을 리스트 박스에 추가
        listBox.options.length = days; // 리스트 항목의 수를 제한 하는 것..
    }
}

function getposOffset(what, offsettype) {
    var totaloffset = (offsettype == "left") ? what.offsetLeft : what.offsetTop;
    var parentEl = what.offsetParent;
    while (parentEl != null) {
        totaloffset = (offsettype == "left") ? totaloffset + parentEl.offsetLeft : totaloffset + parentEl.offsetTop;
        parentEl = parentEl.offsetParent;
    }
    return totaloffset;
}




