/*
 * 개발자 : 임정구, imskya@dreamwiz.com
 * 개발일 : 2005-11-14
 * 수정자 : 양태규 2007말, 이경석 2008.09
 * prototype-1.6.0.2.js
 */

    var objCalendar=null;
    var objCalTarget=null;

    function ViewCalendar( event, obj_target, ys, ye )
    {
        if( objCalendar == null )
        {
            $$( "BODY" )[ 0 ].insert(
                {
                    bottom : "<div id=\"iCalendar\" style=\"display:none;position:absolute;z-index:99;width:140px;height:160px;border:0;background:#ffffff;\"></div>"
                }
            );
            objCalendar = $( "iCalendar" );
        }

        if( Element.visible( objCalendar ) )
        {
            Element.hide( objCalendar );
        }
        else
        {
            var obj_button = Event.element( event );
            var pos_obj = Position.cumulativeOffset( obj_button );

            $( "iCalendar" ).style.left = pos_obj[ 0 ] + "px";
            $( "iCalendar" ).style.top  = ( pos_obj[ 1 ] + obj_button.getHeight() ) + "px";

            Element.show( objCalendar );

            //선택된 날짜 적용될 object
            objCalTarget = obj_target;

            //변수 계산
            CalcVariables(obj_target,ys,ye);

            //달력 출력
            WriteCalendar();
        }
    }

    function ChangeDate(){
        //변수 재계산
        ReCalcVariables();

        //달력 출력
        WriteCalendar();
    }

    function GoToday(){
        intYear=intTodayYear;
        intMonth=intTodayMonth;
        intDay=intTodayDay;

        // 해당월 1일의 요일계산, 일요일이 0
        dtFirst=new Date(intYear,intMonth-1,1)
        intFirstDate=dtFirst.getDay();

        // 해당월의 마지막날 계산
        intLastDay=GetLastDay(intYear,intMonth);

        //달력 출력
        WriteCalendar();
    }

    function ReCalcVariables(){
        intYear=parseInt( $("yy_iCalendar").value,10);
        intMonth=parseInt( $("mm_iCalendar").value,10);

        // 해당월 1일의 요일계산, 일요일이 0
        dtFirst=new Date(intYear,intMonth-1,1)
        intFirstDate=dtFirst.getDay();

        // 해당월의 마지막날 계산
        intLastDay=GetLastDay(intYear,intMonth);

        //해당월이 30일까지인 경우 이전에 지정되었던 날짜가 31일이면 이를 30일로 수정
        if(intDay>intLastDay) intDay=intLastDay;
    }

    var intYear,intMonth,intDay;
    var intYearStart=1900;
    var intYearEnd=2100;
    var intFirstDate=0;
    var intLastDay=0;
    var strToday=""; //오늘 표시에 쓸 날자 생성
    var intTodayYear,intTodayMonth,intTodayDay;

    function CalcVariables(target,ys,ye){
        today=new Date();

        intTodayYear=today.getFullYear();
        intTodayMonth=today.getMonth()+1;
        intTodayDay=today.getDate();

        strYear=intTodayYear.toString();
        strMonth=(intTodayMonth<10 ? "0"+intTodayMonth.toString() : intTodayMonth.toString());
        strDay=(intTodayDay<10 ? "0"+intTodayDay.toString() : intTodayDay.toString());

        strToday=strYear+"-"+strMonth+"-"+strDay;

        // 날짜 계산
        if(/^\d{4}-\d{2}-\d{2}$/.test(target.value)){
            arr=target.value.split(/-/g);

            intYear=parseInt(arr[0],10);
            intMonth=parseInt(arr[1],10);
            intDay=parseInt(arr[2],10);
        }else{
            intYear=intTodayYear;
            intMonth=intTodayMonth;
            intDay=intTodayDay;
        }

        // select 에서 시작년월
        if(/^\d+$/.test(ys)) intYearStart=parseInt(ys,10);
        if(/^\d+$/.test(ye)) intYearEnd=parseInt(ye,10);

        // 해당월 1일의 요일계산, 일요일이 0
        dtFirst=new Date(intYear,intMonth-1,1)
        intFirstDate=dtFirst.getDay();

        // 해당월의 마지막날 계산
        intLastDay=GetLastDay(intYear,intMonth);
    }

    function GetLastDay(year,month){
        arrDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

        intReturn=arrDays[month-1];

        if(month==2 && IsLeapYear(year)) intReturn++;

        return intReturn;
    }

    function IsLeapYear(year){
        return ((year%4==0) && ((year%10!=0) || (year%400==0)));
    }

    function WriteCalendar(){

str="<div class='calendar_wrapper'>"

+"<a href='#' class='cw_close' onclick='hideCalendar( objCalendar ); return false;'>x</a>"

+"<div class='cw_title'>"

+"<select class='cw_year' id='yy_iCalendar' onchange='ChangeDate();'>"

    for(i=intYearStart;i<=intYearEnd;i++){
        if(i==intYear) strSelected="selected";
        else strSelected="";
        str+="<option value='"+i.toString()+"'"+strSelected+">"+i.toString()+"</option>"
    }
str+="</select>년&nbsp;"

+"<select class='cw_month' id='mm_iCalendar' onchange='ChangeDate();'>"

    for(i=1;i<=12;i++){
        if(i==intMonth) strSelected="selected";
        else strSelected="";

        if(i<10) strMonth="0"+i.toString();
        else strMonth=i.toString();

        str+="<option value='"+strMonth+"'"+strSelected+">"+strMonth+"</option>"
    }

str+="</select>월 <input class='cw_reset' type='button' value='초기화' onclick='clearDate_Cal();' />"
+"</div>"
+"<table >"
+"<thead>"
+"<tr>"
+"<th><span class='cw_sun'>SUN</span></th>"
+"<th>MON</th>"
+"<th>TUE</th>"
+"<th>WED</th>"
+"<th>THU</th>"
+"<th>FRI</th>"
+"<th><span class='cw_sat'>SAT</span></th>"
+"</tr>"
+"</thead>"
+"<tbody>"
+"<tr>"

    // 시작일까지 빈 공간 남기기
    for(i=0;i<intFirstDate;i++){
        str+="<td>&nbsp;</td>"
    }

    // 7일 마다 <tr>과 </tr>을 넣기 위해
    intDateCount=intFirstDate;

    for(i=1;i<=intLastDay;i++){
        if(intDateCount>1 && intDateCount%7==0){
            str+="<tr>";
        }

        strDay=i.toString();

        if(i==intDay){
            strDay="<span class='cw_today'>"+strDay+"</span>";
        }

        if(intDateCount%7==6){
            strDay="<span class='cw_sat'>"+strDay+"</span>";
        }

        if(intDateCount%7==0){
            strDay="<span class='cw_sun'>"+strDay+"</span>";
        }
str+="<td onmouseover=\"this.backgroundColor='#fffdf0';\""
+" onmouseout=\"this.backgroundColor='#fff';\"><a href='javascript:ApplyDate("+i.toString()+");'>"+strDay+"</a></td>";

        intDateCount++;

        if(intDateCount%7==0){
            str+="</tr>";
        }
    }

    if(intDateCount%7!=0){
        while(intDateCount%7!=0){
            str+="<td>&nbsp;</td>";
            intDateCount++;
        }
        str+="</tr>"
    }

str+="<!--tr>"
+"<td colspan=\"7\"><a"
+" href=\"javascript:GoToday();\">오늘 "+strToday+"</a></td>"
+"</tr-->"
+"</tbody>"
+"</table>"
+"</div>";

        objCalendar.update( str );
    }

    function ApplyDate(day){
        strYear=intYear.toString();
        strMonth=(intMonth<10 ? "0"+intMonth.toString() : intMonth.toString());
        strDay=(day<10 ? "0"+day.toString() : day.toString());

        strToday=strYear+"-"+strMonth+"-"+strDay;

        objCalTarget.value=strToday;

        // iframe 감추기
        Element.hide( objCalendar );
    }

    function ResizeWindow(){
        objBody=iCalendar.document.body;

        intHeight=objBody.scrollHeight+(objBody.offsetHeight-objBody.clientHeight);
        intWidth=objBody.scrollWidth+(objBody.offsetWidth-objBody.clientWidth);

        iCalendar.window.resizeTo(intWidth,intHeight);
    }

    function clearDate_Cal()
    {
         objCalTarget.value="";
    }

    function hideCalendar( obj )
    {
        Element.hide( obj );
    }