var month_short = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var day_init = Array("S","M","T","W","R","F","S");
var day_name = Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var month_name = Array("January","February","March","April","May","June","July","August","September","October","November","December");
var month_len = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function GetDaysInMonth(year, month)
{
	if (month == 2) {
		if (year % 400 == 0) return 29;
		else if (year % 100 == 0) return 28;
		else if (year % 4 == 0) return 29;
		else return 28;
	} else {
		return month_len[month-1];
	}
}

function CalendarSelect(year, month, day, target, id)
{
	var targetObj = document.getElementById(target);
	var calObj = document.getElementById(id);
	
	targetObj.value = year+"-"+(month<10?"0":"")+month+"-"+(day<10?"0":"")+day;
	if (targetObj.onchange) targetObj.onchange();
	calObj.style.display = "none";
}

function CloseCalendar(id)
{
	var cal = document.getElementById(id);
	cal.style.display = "none";
}

function PopulateCalendar(year, month, day, target, id, highlight)
{
	var parentObj = document.getElementById(id);
	parentObj.innerHTML = "";
	
	var tmpObj, titleBar;
	
	var p_year, p_month;
	var n_year, n_month;
	
	var x;
	
	p_year = year;
	p_month = month-1;
	while (p_month<1) {
		p_month += 12;
		p_year--;
	}
	
	n_year = year;
	n_month = month+1;
	while (n_month>12) {
		n_month -= 12;
		n_year++;
	}
	
	titleBar = document.createElement("DIV");
	titleBar.className = "PopupCalendarTitlebar";
	titleBar.innerHTML = "<a href=\"javascript: CloseCalendar('"+id+"');\" class=\"PopupCalendarTitlebarClose\">X</a>Calendar";
	parentObj.appendChild(titleBar);
	
	tmpObj = document.createElement("A");
	tmpObj.className = "PopupCalPrevious";
	tmpObj.href="javascript: PopulateCalendar("+p_year+","+p_month+",1,'"+target+"','"+id+"', 0);";
	tmpObj.innerHTML = "&lt;&lt;";
	parentObj.appendChild(tmpObj);
	
	tmpObj = document.createElement("DIV");
	tmpObj.className = "PopupCalTitle";
	tmpObj.innerHTML = month_short[month-1]+" "+year;
	parentObj.appendChild(tmpObj);
	
	tmpObj = document.createElement("A");
	tmpObj.className = "PopupCalNext";
	tmpObj.href="javascript: PopulateCalendar("+n_year+","+n_month+",1,'"+target+"','"+id+"', 0);";
	tmpObj.innerHTML = "&gt;&gt;";
	parentObj.appendChild(tmpObj);
	
	// output weekdays
	for (x=0;x<7;x++) {
		tmpObj = document.createElement("DIV");
		tmpObj.className = "PopupCalText";
		tmpObj.innerHTML = day_init[x];
		parentObj.appendChild(tmpObj);
	}
	
	var tmpDate = new Date();
	var today = 0;
	if ((tmpDate.getFullYear()==year)&&(tmpDate.getMonth()==(month-1))) {
		today = tmpDate.getDate();
	}
	
	tmpDate.setFullYear(year, month-1, 1);
	var thisDay = tmpDate.getDay();
	
	for (x=0;x<thisDay;x++) {
		tmpObj = document.createElement("DIV");
		tmpObj.className = "PopupCalText";
		tmpObj.innerHTML=" ";
		parentObj.appendChild(tmpObj);
	}
	
	var MonthLen = GetDaysInMonth(year, month);
	for (x=0;x<MonthLen;x++) {
		tmpObj = document.createElement("A");
		if ((x+1)==highlight) tmpObj.className = "PopupCalHighlight";
		else if ((x+1)==today) tmpObj.className = "PopupCalToday";
		else tmpObj.className = "PopupCalText";
		tmpObj.href="javascript: CalendarSelect("+year+","+month+","+(x+1)+",'"+target+"','"+id+"');";
		tmpObj.innerHTML=(x+1);
		parentObj.appendChild(tmpObj);
	}
	
	parentObj.style.display = "block";
}

function UpdateCal(obj, CalID)
{
	if (obj.value && obj.value != "") {
		var d = obj.value.split("-");
		
		var tmpDate = new Date();
		d[0] = parseInt(d[0]);
		if (d[1].charAt(0)=="0") d[1]=d[1].charAt(1);
		d[1] = parseInt(d[1]);
		if (d[2].charAt(0)=="0") d[2]=d[2].charAt(1);
		d[2] = parseInt(d[2]);
		tmpDate.setFullYear(d[0],d[1]-1, d[2]);
		var thisDay = tmpDate.getDay();
		var display = obj.parentNode.getElementsByTagName("SPAN");
		display[0].innerHTML = day_name[thisDay]+", "+month_name[d[1]-1]+" "+d[2]+" "+d[0];
		display = obj.parentNode.getElementsByTagName("A");
		display[0].href="javascript: PopulateCalendar("+d[0]+","+d[1]+","+d[2]+",'"+obj.id+"','"+CalID+"',"+d[2]+");";
	}
}

