var datePicker = {};
datePicker.hiddenTimer = null;
datePicker.display = false;
datePicker.targetObj = null;
datePicker.calendar = function()
{	
	this.format;

	this.rows = 6;
	this.cols = 7;
	this.cells;

	this.selectedYear;
	this.selectedMonth;
	this.selectedDay;

	this.currentDateObj = new Date();
	this.currentYear = this.currentDateObj.getFullYear();
	this.currentMonth = this.currentDateObj.getMonth();
	this.currentDay = this.currentDateObj.getDate();
	this.today = this.currentDateObj.getFullYear() + "-" + this.currentDateObj.getMonth() + "-" + this.currentDateObj.getDate();
}

datePicker.calendar.prototype = {
	setCellDate : function (year,month,day)
	{	
		this.selectedYear = year;
		this.selectedMonth = month;
		this.selectedDay = day;
		
		//alert(year+"-"+month+"-"+day);

		dateObj = new Date(this.selectedYear,this.selectedMonth,this.selectedDay);

		this.cells = new Array(this.rows);
		for (var i = 0; i < this.rows; i++ ) {
			this.cells[i] = new Array(this.cols);
		}

		var rowIdx = 0;
		var latDay = this.lastDay(this.selectedYear,this.selectedMonth);

		for (var i = 1; i <= latDay; i++ ) 
		{
			dateObj.setDate(i);
			var weekDay = dateObj.getDay();
			var colIdx = weekDay;
			
			this.cells[rowIdx][colIdx] = dateObj.getDate();

			if(weekDay == 6)
			{
				rowIdx++;
			}
		}
	},
	updateTable : function ()
	{
		var thisObj = this;
		for(var x = 0 ; x < this.rows ; x++)
		{
			for(var y = 0 ; y < this.cols ; y++)
			{
				var cellIdx = (x * 7) + y;
				var calCellObj = $("cal_cell"+cellIdx);
				if(y == 0)
				{
					calCellObj.className = "minical01_line03";
				}
				else if (y == 6)
				{
					calCellObj.className = "minical01_line0202";
				}
				else 
				{
					calCellObj.className = "minical01_line02";
				}

				if ( typeof this.cells[x][y] != "undefined" ) {
					
					if(this.cells[x][y] == this.selectedDay)
					{
						calCellObj.className = "minical01_line04";
					}
					
					calCellObj.innerHTML = this.cells[x][y];
					calCellObj.style.cursor = "pointer";
					calCellObj.onclick = function()
					{
						thisObj.setCellDate(thisObj.selectedYear,thisObj.selectedMonth,this.innerHTML);
						thisObj.updateTable();
						thisObj.inputDate();

						if(typeof(calUserFunc) != "undefined")
						{
							calUserFunc(datePicker);
						}

						thisObj.hiddenCalendar();
					}
				}
				else {

					calCellObj.innerHTML = "&nbsp";
					calCellObj.style.cursor = "";
					calCellObj.onclick = "";
					
				}
			}
		}
		var calMonthObj = $("cal_month");
		var selectedMonth = this.selectedMonth + 1;
		calMonthObj.innerHTML = selectedMonth < 10 ? "0" + selectedMonth : selectedMonth;
		
		var calDateObj = $("cal_date");
		calDateObj.innerHTML = this.selectedYear + "." + (selectedMonth < 10 ? "0" + selectedMonth : selectedMonth) + "." + (this.selectedDay < 10 ? "0" + this.selectedDay : this.selectedDay);
	},
	goNextMonth : function () {

		var date = new Date(this.selectedYear,this.selectedMonth,1);
		date.setMonth(date.getMonth() + 1);
		//alert(date.getYear() + "-" + date.getMonth()+ "-" +date.getDate());
		this.setCellDate(date.getFullYear(),date.getMonth(),1);
	},
	goPrevMonth : function () {
		var date = new Date(this.selectedYear,this.selectedMonth,1);
		date.setMonth(date.getMonth() - 1);
		this.setCellDate(date.getFullYear(),date.getMonth(),1);
	},
	goToDay : function () {
		var date = new Date();
		this.setCellDate(date.getFullYear(),date.getMonth(),date.getDate());
	},
	inputDate : function () 
	{
		var selectedMonth = this.selectedMonth + 1;
		datePicker.targetObj.value = this.selectedYear + this.format + (selectedMonth < 10 ? "0" + selectedMonth : selectedMonth) + this.format + (this.selectedDay < 10 ? "0" + this.selectedDay : this.selectedDay);
	},
	init : function(obj,format,year,month,day)
	{
		datePicker.targetObj = obj;

		this.format = format;
		this.showCalendar(obj);
		this.setCellDate(year,month,day);
		this.updateTable();
		this.inputDate();
	},
	showCalendar : function(obj)
	{		
		var objdiv = $("dpdiv");

		x = this.getClientLeft(obj);
		y = this.getClientTop(obj);
		x = document.body.scrollLeft + x;	// 
		y = document.body.scrollTop + y;
		
		var objtop = datePicker.targetObj.getBoundingClientRect().top;
		var scrolltop = 0;
		/*
		if( $('divLayerBody') != null ) {
			clientheight = $('divLayerBody').clientHeight;
			scrolltop = $('divLayerBody').scrollTop;
			//clientheight -= document.body.clientHeight;
		} else {
			clientheight = document.body.clientHeight;
			scrolltop = document.body.scrollTop;
		}
		
		//alert($('divLayerBody').clientHeight+","+this.targetObj.getBoundingClientRect().top);
		//alert(clientheight+","+objtop+","+scrolltop);
		//alert(objdiv.id);
		//alert("divHeight:"+ $('dpdiv').offsetHeight);
		
		var divheight = 155;
		if( objtop-divheight < clientheight/2 ) {
			// �ϴܿ� ��ġ
			alert("�ϴ�");
			y = objtop + scrolltop + 19;
		} else {
			// ��ܿ� ��ġ
			//y = objtop - scrolltop - 155;
			y = objtop - 
		}
		*/
		//var divHeight = $('divLayerBody').getHeight();
		if( $("divLayerBody") != null ) {
			var divHeight = 155;
			var divWidth = $("divLayerBody").getWidth();
			var clientHeight = $("divLayerBody").clientHeight;
			var scrollTop = $("divLayerBody").scrollTop;
		} else {
			var divHeight = 155;
			var divWidth = objdiv.width;
			var clientHeight = document.body.clientHeight;
			var scrollTop = document.body.scrollTop;
		}
		var r = datePicker.targetObj.getBoundingClientRect();
		var posx = r.left - 10;
		var posy = r.top;
		
		//alert(r.top+","+divHeight+","+clientHeight+","+$('divLayerBody').scrollTop);

		if( r.top-divHeight < clientHeight/2 ) {
			// �ϴܿ� ��ġ
			y += 24;
		} else {
			// ��ܿ� ��ġ
			y -= divHeight;
		}

	/*
		if( (document.body.clientHeight-this.getClientTop(obj)) < objdiv.style.height.replace(/px/g,'') ) 
		{
			y = this.getClientTop(obj) - objdiv.style.height.replace(/px/g,'') + document.body.scrollTop;
		} 
		else 
		{
			y += 19;
		}
	*/		
		/*
		objdiv.style.pixelTop	= y;
		objdiv.style.pixelLeft	= x;
		objdiv.style.display = 'block';

		var offset = obj.cumulativeOffset();
			
			$("pop_menu").style.display = "block";
			$("pop_menu").setStyle({
				'top':(parseInt(offset[1]) - 10)+"px",
				'left':(parseInt(offset[0]) + 153)+"px"
			});
*/
		/*
		var offset = obj.cumulativeOffset();
			
		$("pop_menu").style.display = "block";
		$("pop_menu").setStyle({
			'top':(parseInt(offset[1]) - 10)+"px",
			'left':(parseInt(offset[0]) + 153)+"px"
		});
*/
		objdiv.setStyle({
			'top':y+"px",
			'left':x+"px",
			'display':'block'
		});
		
		datePicker.display = true;
	},
	getClientLeft : function(obj)
	{
		var r = obj.getBoundingClientRect();
		return r.left;
	},
	getClientTop : function(obj)
	{
		var r = obj.getBoundingClientRect();
		return r.top;
	},
	hiddenCalendar : function()
	{
		var objdiv = $("dpdiv");
		objdiv.style.display = 'none';
		datePicker.display = false;
	},
	lastDay : function(year,month)
	{
		 var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31);
		 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
			  monthDays[1] = 29;
		 var nDays = monthDays[month];
		 return nDays;
	}
};

function Calendar(obj,format) {
	
	if(obj.value.length == 8)
	{
		var setDay = new Date(obj.value.substring(0,4), obj.value.substring(4,6)-1, obj.value.substring(6,8));
	} 
	else if (obj.value.length == 10)
	{
		var setDay = new Date(obj.value.substring(0,4), obj.value.substring(5,7)-1, obj.value.substring(8,10));
	} 
	else 
	{
		var setDay = new Date();
	}	
	datePicker.objCalendar.init(obj,format,setDay.getFullYear(),setDay.getMonth(),setDay.getDate());
}

datePicker.objCalendar = new datePicker.calendar();
datePicker.html = new Array();
datePicker.html.push("<div id=dpdiv style='display:none;position: absolute;z-index:12002;'>");
datePicker.html.push("<table width='223' border='0' cellspacing='0' cellpadding='0' style='height:150px'>");
datePicker.html.push("<tr>");
datePicker.html.push("    <td class='td_minical_01'>");
datePicker.html.push("        <table width='100%' border='0' cellspacing='0' cellpadding='0'>");
datePicker.html.push("        <tr>");
datePicker.html.push("            <td width='71' valign='top'>");
datePicker.html.push("                <table border='0' cellspacing='0' cellpadding='0'>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td><img src='/images/calendar/mini_calendar_02.gif' width='10' height='9' border='0' id='cal_prev' style='cursor:pointer'></td>");
datePicker.html.push("                    <td width='42' align='center' style='padding:5px 2px 5px 0;text-align:center;'><span class='sch02' id='cal_month'></span></td>");
datePicker.html.push("                    <td><img src='/images/calendar/mini_calendar_03.gif' width='10' height='9' border='0' id='cal_next' style='cursor:pointer'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td colspan='3' class='td_minical_02' id='cal_date'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                </table>");
datePicker.html.push("                <table width='62' border='0' cellpadding='0' cellspacing='0'>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td class='td_minical_04'><img src='/images/calendar/mini_calendar_13.gif' width='30' height='17' border='0' id='cal_today' style='cursor:pointer'></td>");
datePicker.html.push("                    <td class='td_minical_0402'><img src='/images/calendar/mini_calendar_14.gif' width='30' height='17' border='0' id='cal_close' style='cursor:pointer'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                </table>");
datePicker.html.push("            </td>");
datePicker.html.push("            <td class='td_minical_03'>");
datePicker.html.push("                <table border='0' cellspacing='0' cellpadding='0' class='minical01' id='cal_table'>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_04.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_05.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_06.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_07.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_08.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_09.gif' width='17' height='17'></td>");
datePicker.html.push("                    <td class='minical01_line01'><img src='/images/calendar/mini_calendar_10.gif' width='17' height='17'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell0'></td>");
datePicker.html.push("                    <td id='cal_cell1'></td>");
datePicker.html.push("                    <td id='cal_cell2'></td>");
datePicker.html.push("                    <td id='cal_cell3'></td>");
datePicker.html.push("                    <td id='cal_cell4'></td>");
datePicker.html.push("                    <td id='cal_cell5'></td>");
datePicker.html.push("                    <td id='cal_cell6''></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell7'></td>");
datePicker.html.push("                    <td id='cal_cell8'></td>");
datePicker.html.push("                    <td id='cal_cell9'></td>");
datePicker.html.push("                    <td id='cal_cell10'></td>");
datePicker.html.push("                    <td id='cal_cell11'></td>");
datePicker.html.push("                    <td id='cal_cell12'></td>");
datePicker.html.push("                    <td id='cal_cell13''></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell14'></td>");
datePicker.html.push("                    <td id='cal_cell15'></td>");
datePicker.html.push("                    <td id='cal_cell16'></td>");
datePicker.html.push("                    <td id='cal_cell17'></td>");
datePicker.html.push("                    <td id='cal_cell18'></td>");
datePicker.html.push("                    <td id='cal_cell19'></td>");
datePicker.html.push("                    <td id='cal_cell20''></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell21'></td>");
datePicker.html.push("                    <td id='cal_cell22'></td>");
datePicker.html.push("                    <td id='cal_cell23'></td>");
datePicker.html.push("                    <td id='cal_cell24'></td>");
datePicker.html.push("                    <td id='cal_cell25'></td>");
datePicker.html.push("                    <td id='cal_cell26'></td>");
datePicker.html.push("                    <td id='cal_cell27''></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell28'></td>");
datePicker.html.push("                    <td id='cal_cell29'></td>");
datePicker.html.push("                    <td id='cal_cell30'></td>");
datePicker.html.push("                    <td id='cal_cell31'></td>");
datePicker.html.push("                    <td id='cal_cell32'></td>");
datePicker.html.push("                    <td id='cal_cell33'></td>");
datePicker.html.push("                    <td id='cal_cell34'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                <tr>");
datePicker.html.push("                    <td id='cal_cell35'></td>");
datePicker.html.push("                    <td id='cal_cell36'></td>");
datePicker.html.push("                    <td id='cal_cell37'></td>");
datePicker.html.push("                    <td id='cal_cell38'></td>");
datePicker.html.push("                    <td id='cal_cell39'></td>");
datePicker.html.push("                    <td id='cal_cell40'></td>");
datePicker.html.push("                    <td id='cal_cell41'></td>");
datePicker.html.push("                </tr>");
datePicker.html.push("                </table>");
datePicker.html.push("            </td>");
datePicker.html.push("        </tr>");
datePicker.html.push("        </table>");
datePicker.html.push("    </td>");
datePicker.html.push("</tr>");
datePicker.html.push("</table>");
datePicker.html.push("</div>");

document.write(datePicker.html.join(""));
Event.observe(document.body,"click",function(event){
	try
	{
		var element = Event.element(event);
		switch(element.readAttribute("id")){
			case "cal_prev":
				datePicker.objCalendar.goPrevMonth();
				datePicker.objCalendar.updateTable();
				break;
			case "cal_next":
				datePicker.objCalendar.goNextMonth();
				datePicker.objCalendar.updateTable();
				break;
			case "cal_today":
				datePicker.objCalendar.goToDay();
				datePicker.objCalendar.updateTable();
				break;
			case "cal_close":
				datePicker.objCalendar.hiddenCalendar();
				break;
			case "cal_table":
				datePicker.objCalendar.hiddenCalendar();
				break;
			default:				
				if(datePicker.display == true){						
					var focused = false;				
					if(element != datePicker.targetObj && element.readAttribute("name") != "img_calendar"){
						for(var node = element; node ; node = node.parentNode){								
							if(node.nodeName == "BODY"){
								break;
							}
							if(Element.readAttribute(node,"id") == "dpdiv"){
								focused = true;
								break;
							}
						}
						if(focused == false){
							datePicker.objCalendar.hiddenCalendar();
						}
					}
				}
				break;
		}
	}
	catch (e)
	{
	}
});

