function initFromDate(FORM, year, month, day)
{
    var days, i, j;
    days = new Date(new Date(year, month, 1)-86400000).getDate();

    FORM.p_from_date.length = 0;
    for (i=0, j; i < days; i++)
    {
        j = i+1;
        FORM.p_from_date.options[i] = new Option(j, j);
    }
    FORM.p_from_date.options[day-1].selected = true;
}

function initToDate(FORM, year, month, day)
{
    var days, i, j;
    days = new Date(new Date(year, month, 1)-86400000).getDate();

    FORM.p_to_date.length = 0;
    for (i=0, j; i < days; i++)
    {
        j = i+1;
        FORM.p_to_date.options[i] = new Option(j, j);
    }
    FORM.p_to_date.options[day-1].selected = true;
}


function setFromDate(FORM, from_year, from_month, from_day)
{
  FORM.p_from_year.value = from_year;
  FORM.p_from_month.options[from_month-1].selected = true;
  FORM.p_from_date.options[from_day-1].selected = true;
}

function setToDate(FORM, to_year, to_month, to_day)
{
  FORM.p_to_year.value = to_year;
  FORM.p_to_month.options[to_month-1].selected = true;
  FORM.p_to_date.options[to_day-1].selected = true;
}

function changeFromDate(FORM)
{
	var YEAR=FORM.p_from_year.options[FORM.p_from_year.selectedIndex].value;
	var MONTH=FORM.p_from_month.options[FORM.p_from_month.selectedIndex].value;
    var DAY = FORM.p_from_date.options[FORM.p_from_date.selectedIndex].value;

	var daysInMonth=new Date(new Date(YEAR,MONTH,1)-86400000).getDate();
    
	for(var i=FORM.p_from_date.length-1; i>=0; i--)
    {
        FORM.p_from_date.options[i]=null;
    }

	for(var j=0; j<daysInMonth; j++)
    {
		var k=j+1;
		FORM.p_from_date.options[j]=new Option(k);
 		FORM.p_from_date.options[j].value=k;
	}

    if(DAY <= daysInMonth)
    {
        FORM.p_from_date.options[DAY-1].selected = true;
    }
    else
    {
        FORM.p_from_date.options[daysInMonth-1].selected = true;
    }
}

function changeToDate(FORM)
{
	var YEAR=FORM.p_to_year.options[FORM.p_to_year.selectedIndex].value;
	var MONTH=FORM.p_to_month.options[FORM.p_to_month.selectedIndex].value;
    var DAY = FORM.p_to_date.options[FORM.p_to_date.selectedIndex].value;

	var daysInMonth=new Date(new Date(YEAR,MONTH,1)-86400000).getDate();

	for(var i=FORM.p_to_date.length-1; i>=0; i--)
    {
        FORM.p_to_date.options[i]=null;
    }

	for(var j=0; j<daysInMonth; j++)
    {
		var k=j+1;
		FORM.p_to_date.options[j]=new Option(k);
 		FORM.p_to_date.options[j].value=k;
	}

    if(DAY <= daysInMonth)
    {
        FORM.p_to_date.options[DAY-1].selected = true;
    }
    else
    {
        FORM.p_to_date.options[daysInMonth-1].selected = true;
    }
}

function getStdDT()
{
    var date = new Date();
    var current_year = date.getFullYear();
    var current_month = date.getMonth();
    var current_day = date.getDate();

    current_month = (current_month < 9 ? '0'+(current_month+2) : current_month+2);
    current_day = (current_day < 9 ? '0'+(current_day) : current_day);

    var today = current_year.toString() + current_month.toString() + current_day.toString();
    return today;
}



/*****************************
 * Date 처리 유틸 메서드
 ****************************/

CalendarUtil = function() {}

/*
 * Date타입과 format을 입력받아 해당 format으로 String을 변환하여 반환한다.
 * (현재 년(y)월(M)일(d)의 형식만 구현됨)
 */
CalendarUtil.formatDate = function(date, format) {
	if(!date || !format) {
		alert("Date Format ERROR!!!!");
		return "";
	}

	var rtnStr = format;

	var lYear = date.getYear()+(Browser.isIE()?0:1900);
	var sYear = lYear.toString().substring(2,4);
	var sMonth = date.getMonth()+1;
	var lMonth = sMonth;
	if(sMonth<10)
		lMonth = "0" + sMonth;
	var sDay = date.getDate();
	var lDay = sDay;
	if(sDay<10)
		lDay = "0" + sDay;

	if(rtnStr.toLowerCase().indexOf("yyyy")>=0) {
		rtnStr = rtnStr.replaceAll("yyyy", lYear);
	}
	if(rtnStr.toLowerCase().indexOf("yy")>=0) {
		rtnStr = rtnStr.replaceAll("yy", sYear);
	}
	if(rtnStr.indexOf("MM")>=0) {
		rtnStr = rtnStr.replaceAll("MM", lMonth);
	}
	if(rtnStr.indexOf("M")>=0) {
		rtnStr = rtnStr.replaceAll("M", sMonth);
	}
	if(rtnStr.toLowerCase().indexOf("dd")>=0) {
		rtnStr = rtnStr.replaceAll("dd", lDay);
	}
	if(rtnStr.toLowerCase().indexOf("d")>=0) {
		rtnStr = rtnStr.replaceAll("d", sDay);
	}
	
	return rtnStr;
}

/*
 * String 타입의 문자열을 format에 맞추어 Date 타입으로 변환하여 반환한다.
 * (현재 년도(yyyy), 월(MM), 일(dd)의 형식만 지원한다.)
 */
CalendarUtil.stringToDate = function(dateStr, format) {
	if(!dateStr || !format) {
		alert("Date Format ERROR!!!!");
		return null;
	}

	try
	{
		var lYearIdx = format.toLowerCase().indexOf("yyyy");
		var lMonthIdx = format.indexOf("MM");
		var lDayIdx = format.toLowerCase().indexOf("dd");

		if(lYearIdx<0 || lMonthIdx<0 || lDayIdx<0) {
			alert("Date Format ERROR!!!!");
			return null;
		}
		var year = dateStr.substring(lYearIdx, lYearIdx+4);
		var month = dateStr.substring(lMonthIdx, lMonthIdx+2);
		var day = dateStr.substring(lDayIdx, lDayIdx+2);

		var rtnDate = new Date(year, month-1, day);

		return rtnDate;
		
	}
	catch (e)
	{
		alert("Date Format ERROR!!!!");
		return null;
	}
}

/*
 * 입력된 날자의 달중 첫번째 날자 Date를 반환한다.
 */
CalendarUtil.getFirstOfMonth = function(date) {
	if(!date) {
		alert("Date Format ERROR!!!!");
		return "";
	}
	var rtnDate = new Date(date.getYear()+(Browser.isIE()?0:1900), date.getMonth(), 1);
	return rtnDate;
}
/*
 * 입력된 날자의 달중 마지막 날자 Date를 반환한다.
 */
CalendarUtil.getLastOfMonth = function(date) {
	if(!date) {
		alert("Date Format ERROR!!!!");
		return "";
	}

	/*
	 Day가 포함된 달의 마지막날을 돌려줌 
	 (1) 그 달의 첫날을 구하여 
	 (2) 32일을 더한다 -> 반드시 다음달에 속하는 날이 됨 
	 (3) 다시 첫날을 구함 -> 다음달의 1일 
	 (4) 1일을 뺀다. -> 이달의 마지막 날.. 
	*/
	var firstDate = CalendarUtil.getFirstOfMonth(date);
	firstDate.setDate(firstDate.getDate()+32);
	var rtnDate = CalendarUtil.getFirstOfMonth(firstDate);
	rtnDate.setDate(rtnDate.getDate()-1);
	return rtnDate;
}

/*
 * 해당 주의 nWeek 번째 주의 Date 타입을 반환한다.
 * (1:월요일~7:일요일)
 */
CalendarUtil.getNthOfWeek = function(nWeek, date) {
	if(!date) {
		alert("Date Format ERROR!!!!");
		return "";
	}
	var currWeekDay = date.getDay();
	var rtnDate = new Date(date.getYear()+(Browser.isIE()?0:1900), date.getMonth(), date.getDate());
	rtnDate.setDate(rtnDate.getDate() - currWeekDay + nWeek);
	return rtnDate;
}



/*
 * 날자선택하는 양식의 html을 반환한다.
 * divId : 달력이 표시될 DIV명
 * clickMethod : 날자 클릭시 선택날자를 넘길메서드 포인터
 *               yyyyMMdd의 형식으로 파라미터로 전달한다.
 * defaultDate : 기본년월 (yyyyMM 형식)
 * format : 반환할 날자정보의 포맷 (예, yyyy-MM-dd) 기본값은 yyyyMMdd 형식
 */
function viewCalendarInDiv(divId, clickMethodName, defaultDate, format) {
	try
	{
		if(!$(divId))
			return;
		var defaultRtnFormat = "yyyyMMdd";
		if(format)
			defaultRtnFormat = format;

		var startDate = CalendarUtil.getFirstOfMonth(new Date());
		var currDate = new Date();

		if(defaultDate) {
			if(defaultDate.length != 6 || !isNumeric(defaultDate))
				return;

			startDate.setYear(defaultDate.substring(0,4));
			startDate.setMonth(defaultDate.substring(4,6)-1);
		}
		
		var endDate = CalendarUtil.getLastOfMonth(startDate);
		var dateGap = ((endDate - startDate)/1000/60/60/24);
		var startWeekDay = startDate.getDay();
		var weekCount = 6;
		if(startDate.getMonth()==1 && startWeekDay==0)
			weekCount = 5;

		var lastYear = new Date(startDate.getYear()-1, startDate.getMonth(), startDate.getDate());
		var nextYear = new Date(startDate.getYear()+1, startDate.getMonth(), startDate.getDate());
		var lastMonth = new Date(startDate.getYear(), startDate.getMonth()-1, startDate.getDate());
		var nextMonth = new Date(startDate.getYear(), startDate.getMonth()+1, startDate.getDate());
		/*
		var htmlText = "<table width='188' border='0' cellpadding='0' cellspacing='1' bgcolor='#666666'> " +
						"	<tr> "+
						"		<td align='center' valign='top' bgcolor='#FFFFFF'><table width='154' border='0' cellspacing='0' cellpadding='0'> " +
						"		  <tr> "+
						"			<td height='27' align='center'><a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(lastYear, 'yyyyMM')+"','"+defaultRtnFormat+"');\"> &lt; </a><span class='font14'>"+(startDate.getYear()+(Browser.isIE()?0:1900))+"년</span><a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(nextYear, 'yyyyMM')+"','"+defaultRtnFormat+"');\"> &gt; </a><a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(lastMonth, 'yyyyMM')+"','"+defaultRtnFormat+"');\"> &lt; </a><span class='font14'>"+(startDate.getMonth()+1)+"월</span><a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(nextMonth, 'yyyyMM')+"','"+defaultRtnFormat+"');\"> &gt; </a></td> " +
						"		  </tr> " +
						"		  <tr> " +
						"			<td height='150' valign='top'><table width='154' border='0' cellpadding='0' cellspacing='1' bgcolor='#999999'> " +
						"				<tr> " +
						"				  <td valign='top' bgcolor='#FFFFFF'><table width='152' height='150' border='0' cellpadding='0' cellspacing='0'> " +
						"					  <tr> " +
						"						<td height='24' align='center' bgcolor='#999999' class='fontfws02'><b> "+CalendarUtil.formatDate(currDate, 'yyyy년 MM월 dd일')+"</b> </td> " +
						"					  </tr> " +
						"					  <tr> " +
						"						<td align='center' valign='top'><table width='140' border='0' cellspacing='0' cellpadding='0'> " +
						"							<tr> " +
						"							  <td width='20' height='27' align='center' class='font16'>일</td> " +
						"							  <td width='20' height='27' align='center' class='font03'>월</td> " +
						"							  <td width='20' height='27' align='center' class='font03'>화</td> " +
						"							  <td width='20' height='27' align='center' class='font03'>수</td> " +
						"							  <td width='20' height='27' align='center' class='font03'>목</td> " +
						"							  <td width='20' height='27' align='center' class='font03'>금</td> " +
						"							  <td width='20' height='27' align='center' class='font17'>토</td> " +
						"							</tr> ";
		var validationFg = false;
		var dayCount = 0;
		var tempDate = new Date(Date.parse(startDate));
		
		for(var i=0; i < weekCount; i++) {
			if(dayCount>dateGap)
				break;
	
			htmlText += "<tr>";
			for(var j=0; j<7; j++) {
				if(!validationFg && j==startWeekDay)
					validationFg = true;
				if(!validationFg || dayCount>dateGap) {
					htmlText += "<td width='20' height='18' align='center'>&nbsp;</td>";
					continue;
				}
				dayCount++;
				htmlText += "<td width='20' height='18' align='center'>";
	
				if(clickMethodName!=null) {
					htmlText += "<a href=\"javascript:$('"+divId+"').innerHTML='';"+clickMethodName+"('"+CalendarUtil.formatDate(tempDate, defaultRtnFormat)+"');\"";
				} else {
					htmlText += "<span ";
				}
	
				if(startDate.getYear()==currDate.getYear() && startDate.getMonth()==currDate.getMonth() && dayCount == currDate.getDate())
					htmlText += " class='font18' ";
				else if(j==0)
					htmlText += " class='font16' ";
				htmlText += ">"+dayCount+"</td>";
	
				tempDate.setDate(tempDate.getDate() + 1);
			}
			htmlText += "</tr>";
		}
		htmlText +=			"						  </table></td> " +
							"					  </tr> " +
							"					</table></td> " +
							"				</tr> " +
							"			  </table></td> " +
							"		  </tr> " +
							"		  <tr> " +
							"			<td height='15'></td> " +
							"		  </tr> " +
							"		</table></td> " +
							"	</tr> " +
							"	<tr bgcolor='white'><td align='right'>[<a href=\"javascript:$('"+divId+"').innerHTML='';void(0);\">닫기</a>]</td></tr>" + 
							" </table> ";

		$(divId).innerHTML = htmlText;
		*/

		var htmlText = "<div class='calendar_top' onMouseOut=\"this.style.display='none';\" onMouseMove=\"this.style.display='block';\" onMouseOn=\"this.style.display='block';\"><div class='calendar_bottom'>" + 
						"	<a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(lastMonth, 'yyyyMM')+"','"+defaultRtnFormat+"');\"><img src='http://www.enclean.com/img/img/cmt/dealer/ico_arrow_left01.gif' alt='이전달' /></a>" + 
						"	<strong>"+(startDate.getYear()+(Browser.isIE()?0:1900))+"."+(startDate.getMonth()+1)+"</strong>" + 
						"	<a href=\"javascript:viewCalendarInDiv('"+divId+"','"+clickMethodName+"','"+CalendarUtil.formatDate(nextMonth, 'yyyyMM')+"','"+defaultRtnFormat+"');\"><img src='http://www.enclean.com/img/img/cmt/dealer/ico_arrow_right01.gif' alt='다음달' /></a>	" + 
						"	<table class='calendar_table tm10'>" + 
						"		<tr>" + 
						"			<th>일</th><th>월</th><th>화</th><th>수</th><th>목</th><th>금</th><th>토</th>" + 
						"		</tr>";
		
		var validationFg = false;
		var dayCount = 0;
		var tempDate = new Date(Date.parse(startDate));
		
		for(var i=0; i < weekCount; i++) {
			if(dayCount>dateGap)
				break;
				
			htmlText += "<tr>";
	
			for(var j=0; j<7; j++) {
				if(!validationFg && j==startWeekDay)
					validationFg = true;
				if(!validationFg || dayCount>dateGap) {
					htmlText += "<td></td>";
					continue;
				}
				dayCount++;
				switch(j) {
					case 0 : htmlText += "<td class='sun'>"; break;
					case 6 : htmlText += "<td class='Satur'>";break;
					default : htmlText += "<td>";break;
				}
				
				htmlText += "<a href=\"javascript:$('"+divId+"').innerHTML='';"+clickMethodName+"('"+CalendarUtil.formatDate(tempDate, defaultRtnFormat)+"');\">";
		
				if(startDate.getYear()==currDate.getYear() && startDate.getMonth()==currDate.getMonth() && dayCount == currDate.getDate())
					htmlText += "<strong>"+dayCount+"</strong>";
				else
					htmlText += dayCount;
				htmlText += "</td>";
	
				tempDate.setDate(tempDate.getDate() + 1);
			}
			htmlText += "</tr>";
		}
		htmlText +=		"</table> "+
							"</div></div>"

		$(divId).innerHTML = htmlText;
	}
	catch (e)
	{
		alert(e.message);
		return;
	}
}