var datePicker_val = {};

Date.prototype.getTimezone = function() {
    return this.toString().replace(
        /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
        /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
}

Date.prototype.getGMTOffset = function() {
    return (this.getTimezoneOffset() > 0 ? "-" : "+")
        + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
}

Date.prototype.getDayOfYear = function() {
    var num = 0;
    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
    for (var i = 0; i < this.getMonth(); ++i) {
        num += Date.daysInMonth[i];
    }
    return num + this.getDate() - 1;
}

Date.prototype.getWeekOfYear = function() {
    var now = this.getDayOfYear() + (4 - this.getDay());
    var jan1 = new Date(this.getFullYear(), 0, 1);
    var then = (7 - jan1.getDay() + 4);
    document.write(then);
    return String.leftPad(((now - then) / 7) + 1, 2, "0");
}

Date.prototype.isLeapYear = function() {
    var year = this.getFullYear();
    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
}

Date.prototype.getFirstDayOfMonth = function() {
    var day = (this.getDay() - (this.getDate() - 1)) % 7;
    return (day < 0) ? (day + 7) : day;
}

Date.prototype.getLastDayOfMonth = function() {
	this.getDaysInMonth();
    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
    return (day < 0) ? (day + 7) : day;
}

Date.prototype.getDaysInMonth = function() {
    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
    return Date.daysInMonth[this.getMonth()];
}

Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];

function dateDel(inputBoxId)
{
	var oInput = document.getElementById(inputBoxId);
	oInput.value = "";
}

function datePicker(imgObj, inputBoxId, imageDir)
{
	if (typeof imgObj=='undefined') { return; }
	var oInput = document.getElementById(inputBoxId);
	if (typeof datePicker_val.imgObj!='undefined' && datePicker_val.imgObj==imgObj) {
		with (document.getElementById('div_datePicker').style) {
			display = 'none';
			visibility = 'hidden';
		}
		datePicker_val = {};
		return;
	}
	if (oInput==null) { return; }
	var oDiv = document.getElementById('div_datePicker');
	if (oDiv==null) {
		var oDiv = document.createElement('DIV');
		oDiv.id = 'div_datePicker';
		oDiv.className = 'select-free';
		with(oDiv.style) {
			display = 'none';
			width = '210px';
			visibility = 'hidden';
			position = 'absolute';
			height = '400px';
		}
		document.body.appendChild(oDiv);
	}
	var pos = getAbsolutePosition(imgObj);
	//210Àº div Å©±âÀÌ°í -10 ÇØÁØ°Ç °¡ÀåÀÚ¸®¿¡ ³Ê¹« ºÙ¾î ÀÖ¾î¼­
	if ((pos[1]+210)>document.body.clientWidth) { pos[1] = document.body.clientWidth - 210 - 10; }
	with (oDiv.style) {
		top = pos[0] + imgObj.offsetHeight;
		left = pos[1];
	}
	datePicker_val.inputBoxId = inputBoxId;
	datePicker_val.imageDir = imageDir;
	datePicker_val.imgObj = imgObj;
	if (oInput.value=='') {
		datePicker_val.selDate = new Date();
	} else {
		var tmpDate = oInput.value.substr(0, 10);
		if (tmpDate.match(/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/)) {
			datePicker_val.selDate = new Date(parseInt(oInput.value.substr(0,4), 10), parseInt(oInput.value.substr(5,2), 10)-1, parseInt(oInput.value.substr(8,2), 10));
		} else {
			datePicker_val.selDate = new Date();
		}
	}
	datePicker_val.calDate = datePicker_val.selDate;
	datePicker_drawHtml();
}

function datePicker_drawHtml()
{
	var oDiv = document.getElementById('div_datePicker');
	oDiv.innerHTML = datePicker_html();
	var pos = getAbsolutePosition(datePicker_val.imgObj);
	with (oDiv.style) {
		display = 'block';
		width = oDiv.offsetWidth;
		height = oDiv.offsetHeight;
		visibility = 'visible';
	}
}

//Æ÷Áö¼Ç Àâ±â
function getAbsolutePosition(obj) {
    var result = [0, 0];
    while (obj != null) {
        result[0] += obj.offsetTop;
        result[1] += obj.offsetLeft;
        obj = obj.offsetParent;
    }
    return result;
}

function datePicker_zeroFill(dateStr)
{
	dateStr = dateStr + '';
	dateStr = (dateStr.length<2) ? ('0' + dateStr):dateStr;
	return dateStr;
}

function datePicker_chgYear(mode)
{
	var year = datePicker_val.calDate.getFullYear();
	if (mode===1) {
		year++;
	} else {
		year--;
	}
	datePicker_val.calDate = new Date(year, datePicker_val.calDate.getMonth(), 1);
	datePicker_drawHtml();
}
	
function datePicker_chgMonth(mode)
{
	var month = datePicker_val.calDate.getMonth();
	if (mode===1) {
		month++;
	} else {
		month--;
	}
	//¿ùÀÌ º¯°æµÇ¸é 1·Î ÇÑ´Ù.
	datePicker_val.calDate = new Date(datePicker_val.calDate.getFullYear(), month, 1);
	datePicker_drawHtml();
}

function datePicker_selDate(selYear, selMonth, selDay)
{
	document.getElementById(datePicker_val.inputBoxId).value = selYear + '-' + datePicker_zeroFill(selMonth) + '-' + datePicker_zeroFill(selDay);
	with (document.getElementById('div_datePicker').style) {
		visibility = 'hidden';
		display = 'none';
	}
	datePicker_val = {};
}

function datePicker_hide()
{
	with (document.getElementById('div_datePicker').style) {
		visibility = 'hidden';
		display = 'none';
	}
	datePicker_val = {};
}



//³¯Â¥ Ãâ·Â
function datePicker_html()
{
	var calYear = datePicker_val.calDate.getFullYear();
	var calMonth = datePicker_val.calDate.getMonth() + 1;
	var calDay = datePicker_val.calDate.getDate();
	var calDate = new Date(calYear, calMonth-1, calDay);
	var html = new Array();
	html.push('<table width="100%" height="170" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff;">');
	html.push('<tr><td height="3" bgcolor="#4F6FD6" colspan="2"></td></tr>');
	html.push('<tr height="26" bgcolor="#7090E3" align="center">');
	html.push('<td width="100">');
	html.push('    <table width="61" height="19" cellspacing="0" cellpadding="0" border="0" background="'+ datePicker_val.imageDir +'/calender/y_bg.gif">');
	html.push('    <tr>');
	html.push('    <td width="45"class="calender_WN">'+ calYear +'</td>');
	html.push('    <td><img src="'+ datePicker_val.imageDir +'/calender/bt_up.gif" onclick="datePicker_chgYear(1);" style="cursor:pointer"><br><img src="'+ datePicker_val.imageDir +'/calender/bt_down.gif" onclick="datePicker_chgYear(0);" style="cursor:pointer"></td>');
	html.push('    </tr>');
	html.push('    </table>');
	html.push('</td>');
	html.push('<td width="70" align="left">');
	html.push('	<div onclick="datePicker_hide()" style="cursor:pointer;float:right; margin:3px 0 0 0;"><img src="'+ datePicker_val.imageDir +'/icon/delete.gif" border="0" align="absmiddle"></div>');
	html.push('    <table width="46" height="19" cellspacing="0" cellpadding="0" border="0" background="'+ datePicker_val.imageDir +'/calender/m_bg.gif">');
	html.push('    <tr>');
	html.push('    <td width="30"class="calender_WN">'+ datePicker_zeroFill(calMonth) +'</td>');
	html.push('    <td><img src="'+ datePicker_val.imageDir +'/calender/bt_up.gif" onclick="datePicker_chgMonth(1);" style="cursor:pointer"><br><img src="'+ datePicker_val.imageDir +'/calender/bt_down.gif" onclick="datePicker_chgMonth(0);" style="cursor:pointer"></td>');
	html.push('    </tr>');
	html.push('    </table>');
	html.push('</td>');
	html.push('</tr>');
	html.push('<tr><td height="1" colspan="2"></td></tr>');
	html.push('<tr>');
	html.push('<td height="120" valign="top" colspan="2">');
	html.push('    <table width="100%" cellspacing="1" cellpadding="0" border="0" bgcolor="#DADADA">');
	html.push('    <tr height="20" valign="top" bgcolor="#F1F5FF">');
	html.push('    <td width="30" class="calender_D">Sun</td>');
	html.push('    <td width="30" class="calender_D">Mon</td>');
	html.push('    <td width="30" class="calender_D">Tue</td>');
	html.push('    <td width="30" class="calender_D">Wed</td>');
	html.push('    <td width="30" class="calender_D">Thu</td>');
	html.push('    <td width="30" class="calender_D">Fri</td>');
	html.push('    <td width="30" class="calender_D">Sat</td>');
	html.push('    </tr>');
    var firstDay = calDate.getFirstDayOfMonth();
    var lastDay = calDate.getLastDayOfMonth();
	var i = (firstDay * -1) + 1;
	var DaysInMonth = calDate.getDaysInMonth();
	var j=0;
	//³â,¿ù,ÀÏÀÌ °°À» °æ¿ì¿¡¸¸ bgcolor ÁØ´Ù..
	var selectable = false;
	if (    datePicker_val.selDate.getFullYear()==datePicker_val.calDate.getFullYear()
		 && datePicker_val.selDate.getMonth()==datePicker_val.calDate.getMonth()
		 && datePicker_val.selDate.getDate()==datePicker_val.calDate.getDate()
		) { selectable = true; }
	while (i<=DaysInMonth) {
		if (j%7==0) { html.push('<tr height="24" valign="top" bgcolor="#FFFFF0">'); }
		if (i<1) {
			html.push('<td class="calender_N">&nbsp;</td>');
		} else {
			html.push('<td class="'+ ((j%7)==0 ? 'calender_or':'calender_N') +'"'+ ((selectable===true && calDay==i)? 'bgcolor="#FEE271"':'') +' style="cursor:pointer;" onclick="datePicker_selDate('+ calYear +', '+ calMonth +', '+ i +');">' + i + '</td>');
		}
		if (j%7==6) { html.push('</tr>'); }
		i++;
		j++;
	}
    if (lastDay != 6) {
		for (var i=0,s=6-lastDay;i<s;i++) { html.push("<td class='calender_N'>&nbsp;</td>"); }
	    html.push("</tr>");
	}
    html.push("</table>");
    html.push("<!--[if lte IE 6.5]><iframe></iframe><![endif]-->");
	//window.clipboardData.setData('text', lastDay + "\r\n" + html.join("\r\n"));
	return html.join("\r\n");
}
