/* Common Calendar from prozking@ezday.co.kr */
var __calendarEZObj__ = [];
var __calendarYear__ = [];
var __calendarMonth__ = [];
var __calendarDay__ = [];
var __calendarImgURL__ = [];
var __calendarCallbackFunc__ = [];
function EZCalendar(idPrefix,cssPrefix,appendToID,strDate,imgURL,callbackFunc)
{
    if (__calendarYear__[idPrefix+'_calendar'])
    {
        alert('duplicate calendar key!');
        return false;
    }
    this.idPrefix = idPrefix;
    this.cssPrefix = cssPrefix;
    this.appendToID = appendToID;
    this.calendarObj;
    if (strDate)
    {
        __calendarYear__[idPrefix+'_calendar'] = parseFloat(strDate.substr(0,4));
        __calendarMonth__[idPrefix+'_calendar'] = parseFloat(strDate.substr(4,2))-1;
        __calendarDay__[idPrefix+'_calendar'] = parseFloat(strDate.substr(6,2));
    }
    else
    {
        __calendarYear__[idPrefix+'_calendar'] = new Date().getFullYear();
        __calendarMonth__[idPrefix+'_calendar'] = new Date().getMonth();
        __calendarDay__[idPrefix+'_calendar'] = new Date().getDate();
    }
    __calendarImgURL__[idPrefix+'IMGURL'] = imgURL;
    __calendarCallbackFunc__[idPrefix+'_calendar'] = callbackFunc;
        
}
EZCalendar.prototype.init = function () {
    __calendarEZObj__[this.idPrefix+'_calendar'] = this;
    $('#'+this.appendToID).append('<div id="'+this.idPrefix+'calendarDiv" class="'+this.cssPrefix+'calendarDiv"></div>');
    this.calendarObj = $('#'+this.idPrefix+'calendarDiv');
    this.calendarObj.hide();
    this._drawCalendar('init');
};

EZCalendar.prototype._drawCalendar = function(strAction) {
    var idPrefix = this.idPrefix;
    var cssPrefix = this.cssPrefix;
    
    var strs = new Array();
    //strs.push('<table cellpadding="0" cellspacing="0" class="'+cssPrefix+'linksTable"><tr>');
    //strs.push('	<td align="left"><a id="'+idPrefix+'prevYear"> << </a><a id="'+idPrefix+'prevMonth"> < [이전]</a></td>');
    //strs.push('	<td align="right"><a id="'+idPrefix+'nextMonth">[다음] ></a><a id="'+idPrefix+'nextYear"> >> </a></td>');
    //strs.push('</tr></table>');
    strs.push('<table style="table-layout:fixed;" class="'+cssPrefix+'calendar" cellpadding="0" cellspacing="0" border="0" ><tr>');
    strs.push('<td colspan="7"><table class="'+cssPrefix+'calendarTitle" cellpadding="0" cellspacing="0" border="0"><tr>');
    strs.push('	<th width="30" align="center"><a id="'+idPrefix+'prevMonth"><img src="'+__calendarImgURL__[idPrefix+'IMGURL']+'/diary/date_pre.gif" alt="이전달" width="13" height="13" border="0"></a></th>');
    strs.push('<th>'+__calendarYear__[idPrefix+'_calendar']+'년'+this.getMonthName(__calendarMonth__[idPrefix+'_calendar'])+'</th>');
    strs.push('	<th width="30" align="center"><a id="'+idPrefix+'nextMonth"><img src="'+__calendarImgURL__[idPrefix+'IMGURL']+'/diary/date_next.gif" alt="다음달" width="13" height="13" border="0"></a></th>');
    strs.push('</tr></table></td><tr><td colspan="7" height="8"></td></tr><tr>');
    var weekDays = new Array('일','월','화','수','목','금','토');
    for (var j=0; j<weekDays.length; j++) {
    	strs.push('<td  class="weekDaysTitleRow">'+weekDays[j]+'</td>');
    }
    strs.push('</tr>');
    var daysInMonth = this.getDaysInMonth(__calendarYear__[idPrefix+'_calendar'], __calendarMonth__[idPrefix+'_calendar']);
    var startDay = this.getFirstDayofMonth(__calendarYear__[idPrefix+'_calendar'], __calendarMonth__[idPrefix+'_calendar']);
    var numRows = 0;
    var printDate = 1;
    if (startDay != 7) { numRows = Math.ceil(((startDay+1)+(daysInMonth))/7); }
    var noPrintDays;
    (startDay != 7) ? noPrintDays = startDay + 1 : noPrintDays = 0;
	
	var thisYear = new Date().getFullYear();
	var thisMonth = new Date().getMonth();
	var thisDay = new Date().getDate();

    for (var e = 0; e < numRows; e++) {
    	strs.push('<tr class="weekDaysRow">');
    	var isToday = false;
        for (var f = 0; f < 7; f++) {
    		if ( (printDate == thisDay) && (__calendarMonth__[idPrefix+'_calendar'] == thisMonth) && (__calendarYear__[idPrefix+'_calendar'] == thisYear) && (noPrintDays==0) ) {
    			strs.push('<td id="'+idPrefix+'today" class="weekDaysCell">');
    			isToday = true;
    		} else {
            	strs.push('<td class="weekDaysCell">');
            	isToday = false;
    		}
            if (noPrintDays == 0) {
    			if (printDate <= daysInMonth) {
    			    if (isToday)
    				    strs.push('<a id="'+ this.idPrefix +'calendarDiv_'+ printDate +'" class="todayDayCell">'+printDate+'</a>');
    				else
    				    strs.push('<a id="'+ this.idPrefix +'calendarDiv_'+ printDate +'">'+printDate+'</a>');
    			}
                printDate++;
            }
            strs.push('</td>');
            if(noPrintDays > 0) noPrintDays--;
        }
        strs.push('</tr>');
    }
    strs.push('</table>');
    this.calendarObj = $('#'+idPrefix+'calendarDiv');
    this.calendarObj.empty().append(strs.join(''));
    var aLinkObj = this.calendarObj.find('a');
    aLinkObj.mouseover( function() {
        this.parentNode.className = 'weekDaysCellOver';
    });
    aLinkObj.mouseout( function () {
        this.parentNode.className = 'weekDaysCell';
    });
    if (__calendarCallbackFunc__[idPrefix+'_calendar'])
    {
        aLinkObj.click( function () {
            __calendarDay__[idPrefix+'_calendar'] = $(this).html();
            var clickedDate = __calendarEZObj__[idPrefix+'_calendar'].formatDate(__calendarYear__[idPrefix+'_calendar'],__calendarMonth__[idPrefix+'_calendar'],__calendarDay__[idPrefix+'_calendar']);
            __calendarCallbackFunc__[idPrefix+'_calendar']('select',clickedDate[0],clickedDate[1],clickedDate[2]);
            
        });
    }
    $('#'+idPrefix+'prevMonth').unbind( "click" );
	$('#'+idPrefix+'prevMonth').click( function () {
        __calendarMonth__[idPrefix+'_calendar']--;
        if (__calendarMonth__[idPrefix+'_calendar'] < 0) {
            __calendarMonth__[idPrefix+'_calendar'] = 11;
            __calendarYear__[idPrefix+'_calendar']--;
        }
        __calendarEZObj__[idPrefix+'_calendar']._drawCalendar('prevMonth'); 
    });
    $('#'+idPrefix+'nextMonth').unbind( "click" );
	$('#'+idPrefix+'nextMonth').click( function () {
		__calendarMonth__[idPrefix+'_calendar']++;
        if (__calendarMonth__[idPrefix+'_calendar'] > 11) {
            __calendarMonth__[idPrefix+'_calendar'] = 0;
            __calendarYear__[idPrefix+'_calendar']++;
        }
        __calendarEZObj__[idPrefix+'_calendar']._drawCalendar('nextMonth'); 
    });
    $('#'+idPrefix+'prevYear').unbind( "click" );
	$('#'+idPrefix+'prevYear').click( function () {
        __calendarYear__[idPrefix+'_calendar']--;
        __calendarEZObj__[idPrefix+'_calendar']._drawCalendar('prevYear'); 
    });
    $('#'+idPrefix+'nextYear').unbind( "click" );
	$('#'+idPrefix+'nextYear').click( function () {
		__calendarYear__[idPrefix+'_calendar']++;
        __calendarEZObj__[idPrefix+'_calendar']._drawCalendar('nextYear'); 
    });    
    
    this.calendarObj.show();
    if (__calendarCallbackFunc__[idPrefix+'_calendar'])
    {
        var clickedDate = __calendarEZObj__[idPrefix+'_calendar'].formatDate(__calendarYear__[idPrefix+'_calendar'],__calendarMonth__[idPrefix+'_calendar'],1);
        __calendarCallbackFunc__[idPrefix+'_calendar'](strAction,clickedDate[0],clickedDate[1],clickedDate[2]);
    }
}
EZCalendar.prototype.getFirstDayofMonth = function(year, month) {
    return new Date(year, month, 0).getDay();
}
EZCalendar.prototype.getDaysInMonth = function(year, month) {
    return 32 - new Date(year, month, 32).getDate();
}
EZCalendar.prototype.getMonthName = function(month) {
    var monthNames = new Array('1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월');
    return monthNames[month];
}
EZCalendar.prototype.getDayName = function(day) {
    var dayNames = new Array('일요일','월요일','화요일','수요일','목요일','금요일','토요일')
    return dayNames[day];
}
EZCalendar.prototype.formatDate = function(Year, Month,Day) {
    Month++;
    if (Month <10) Month = '0'+Month;
    if (Day < 10) Day = '0'+Day;
    return [Year,Month,Day];
}