var d = new Date();
var year = d.getFullYear();
var month = d.getMonth();

var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var daytext = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var text_yearback = "&lt;&lt; year";
var text_yearnext = "year &gt;&gt;";
var text_monthback = "&lt; mon";
var text_monthnext = "mon &gt;";
var cal_inputfield;
var cal_placer;

var nd = new Date(year,month,33);
var day = nd.getDay();

function cal_findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function cal_findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function changeMonth(mod) {
	month=parseInt(month);month+=mod;
	if(month<0){month=12+month;year--;}
	else if(month>11){month-=12;year++;}
}
function setMonth(m,y){month=m;year=y;}

function cal_checkDate(){
	var seperator = "-";
	input=document.getElementById(cal_inputfield);
	if(input.value.substr(2,1)==seperator&&input.value.substr(5,1)==seperator){
		if(input.value.substr(3,1)=="0"){month = parseInt(input.value.substr(4,1));}
		else{month=parseInt(input.value.substr(3,2));}
		month-=1;
		year=input.value.substr(6,4);
	}
}

function cal_selectDay(day) {
	var seperator = "-";
	dday=day.toString(10);if(dday.length<2){dday="0"+dday;}
	dmonth=parseInt(month)+1;dmonth=dmonth.toString(10);if(dmonth.length<2){dmonth="0"+dmonth;}
	dyear=year;
	document.getElementById(cal_inputfield).value=dday+seperator+dmonth+seperator+dyear+document.getElementById(cal_inputfield).value.substr(10);killCalendar();
}

function drawCalendar(input,placer) {
	if(input){
		cal_inputfield = input;
		if (document.getElementById(input).value != "") {
			cal_checkDate();
		}
	}
	if (placer){cal_placer=placer;}
	var days = new Array(31, ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	// Remove the old calendar
	killCalendar();
	div = document.createElement("div");
	div.setAttribute("id","calendar");
	ta = "<table class='calendar_border_outer'>";
	ta += "<tr><td class='calendar_title' align='right'>"+months[month]+" "+year+" | <a href='javascript:killCalendar();' class='calendar_link'>X</a></td></tr>";
	// Draw the back/forward switcher
	ta += "<tr><td><table border='0' width='100%'><tr>";
	ta += "<td class='calendar_td'><a href='javascript:changeMonth(-12);drawCalendar();' class='calendar_link'>"+text_yearback+"</a></td>";
	ta += "<td class='calendar_td'><a href='javascript:changeMonth(-1);drawCalendar();' class='calendar_link'>"+text_monthback+"</a></td>";
	ta += "<td class='calendar_td'><a href='javascript:changeMonth(+1);drawCalendar();' class='calendar_link'>"+text_monthnext+"</a></td>";
	ta += "<td class='calendar_td'><a href='javascript:changeMonth(+12);drawCalendar();' class='calendar_link'>"+text_yearnext+"</a></td>";
	ta += "</tr></table></td></tr>";
	
	ta += "<tr><td><table width='100%' cellpadding='0' cellspacing='0'><tr>";
	ta += "<td class='calendar_td' width='100%'><select id='cal_sel_mon' style='width:100%' onchange='setMonth(this.value,"+year+");drawCalendar();'>";
	for (m = 0; m < months.length; m++) {
		if (m == month) ta += "<option value='"+m+"' selected>"+months[m]+"</option>";
		else ta += "<option value='"+m+"'>"+months[m]+"</option>";
	}
	ta += "</select></td>";
	ta += "<td class='calendar_td' align='right'><select id='cal_sel_year' onchange='setMonth("+month+",this.value);drawCalendar();'>";
	if (year < (d.getFullYear() - 10)) yback = year; else yback = d.getFullYear() - 10;
	if (year > d.getFullYear() + 20) yend = year + 1; else yend = d.getFullYear() + 21;
	for (y = yback; y < yend; y++) {
		if (y == year) ta += "<option value='"+y+"' selected>"+y+"</option>";
		else ta += "<option value='"+y+"'>"+y+"</option>";
	}
	ta += "</select></td>";
	ta += "</tr></table></td></tr>";
		
	ta += "<tr><td><table border='0' width='100%' class='calendar_border_inner'>";
	// Draw the days
	ta += "<tr>";
	for (i = 0; i < daytext.length; i++) {
		ta += "<td class='calendar_td'>"+daytext[i].substr(0,3)+"</td>";
	}
	ta += "</tr>";
	row = 0;
	cal = new Array();
	cal[row] = new Array();
	for (i = 1; i <= days[month]; i++) {
		nd = new Date(year,month,i);
		day = nd.getDay();
		if (day == 0 && i != 1) { row++; cal[row] = new Array(); }
		cal[row][day] = i;
	}
	for (r = 0; r < cal.length; r++) {
		for (c = 0; c < 7; c++) {
			if (c == 0) { ta += "<tr>"; }
			omo =  "onmouseover='this.style.cursor=\"pointer\"; this.style.border=\"1px solid #000000\";' onmouseout='this.style.border=\"1px solid #ffffff\"' onclick='cal_selectDay("+cal[r][c]+");'";
			if (month == d.getMonth() && year == d.getFullYear() && cal[r][c] == d.getDate()) ta += "<td class='calendar_td_today' "+omo+">";
			else ta += "<td class='calendar_td_day' "+omo+">";
			if (cal[r][c] != undefined) { ta += "<div unselectable='on'>"+cal[r][c]+"</div>"; } else { ta += ""; }
			ta += "</td>";
			if (c == 6) { ta += "</tr>"; }
		}
	}
	ta += "</td></tr></table>";
	ta += "</table>";
	div.innerHTML = ta;
	document.body.appendChild(div);
	document.getElementById("calendar").className = "calendar_div";
	document.getElementById("calendar").style.zIndex = 100;
	document.getElementById("calendar").style.position = "absolute";
	document.getElementById("calendar").style.left = cal_findPosX(cal_placer) + 25;
	document.getElementById("calendar").style.top = cal_findPosY(cal_placer);
	s = document.getElementsByTagName("select");
	for (i = 0; i < s.length; i++) {
		//if (s[i].getAttribute("id") != "cal_sel_mon" && s[i].getAttribute("id") != "cal_sel_year") s[i].style.visibility = "hidden";
	}
}
function killCalendar() {
	s = document.getElementsByTagName("select");
	for (i = 0; i < s.length; i++) {
		//s[i].style.visibility = "visible";
	}
	if (document.getElementById('calendar')) document.body.removeChild(document.getElementById('calendar'));
}