nodate = [new Date(2009, 8, 15), new Date(2009, 8, 17)];
//any date not to be used, NOTE that months = 0…11, thus 1=february, etc.

function show_calendar(str_datetime, realred) {
	var arr_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	var n_weekstart = 0; //day week starts from (normally 0 or 1)
	var dt_mintime = new Date(); //date to grey out below	
	var dt_datetime = (str_datetime == null || str_datetime =="") ?  new Date() : str2dt(str_datetime);
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday = new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	
	var str_buffer = new String ("<html><head><title>Calendar</title></head>\n");
	if (navigator.userAgent.indexOf("MSIE") != -1) str_buffer += "<body>"; //IE does not know blur
	else str_buffer += "<body onBlur=\"window.close()\">";
	str_buffer += "<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr bgcolor=\"#6190af\"><td><a href=\"javascript:window.opener.show_calendar('"+ dt2dtstr(dt_prev_month)+"', 0);\"><<</a></td>\n"+
		"	<td align=\"center\" colspan=\"5\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td align=\"right\"><a href=\"javascript:window.opener.show_calendar('"+dt2dtstr(dt_next_month)+"', 0);\">>></a></td></tr>\n";
	var dt_current_day = new Date(dt_firstday);
	str_buffer += "<tr>\n";
	for (var n=0; n<7; n++)
		str_buffer += "	<td bgcolor=\"#256895\"><font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+week_days[(n_weekstart+n)%7]+"</font></td>\n";
	str_buffer += "</tr>\n";
	var anyholiday= 0; //no holiday this month
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
			str_buffer += "<tr>\n";
			for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				if (realred==1 && dt_current_day.getDate() == dt_datetime.getDate() && dt_current_day.getMonth() == dt_datetime.getMonth() && dt_current_day.getYear() == dt_datetime.getYear())
					str_buffer += "	<td bgcolor=\"pink\" align=\"right\">";
				else
					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";
				if (dt_current_day.getMonth() == dt_datetime.getMonth() && (dt_current_day.getYear() > dt_mintime.getYear() || (dt_current_day.getYear() == dt_mintime.getYear() && dt_current_day.getMonth() > dt_mintime.getMonth() || (dt_current_day.getMonth() == dt_mintime.getMonth() && dt_current_day.getDate() > dt_mintime.getDate())))) { //normal days
					var holiday= 0;// no holiday today
					for (var noday in nodate)
						if (dt_current_day.getDate() == nodate[noday].getDate() && dt_current_day.getMonth() == nodate[noday].getMonth() && dt_current_day.getYear() == nodate[noday].getYear()) { holiday= 1; anyholiday= 1; }
					if (holiday == 1) //holidays
						str_buffer += "<font color=\"lightgrey\" face=\"tahoma, verdana\" size=\"2\">"+dt_current_day.getDate()+"</font></td>\n";
					else
						str_buffer += "<a href=\"javascript:window.opener.document.forms.booker.yourdate.value='"+dt2dtstr(dt_current_day)+"'; window.close();\"><font color=\"black\" face=\"tahoma, verdana\" size=\"2\">"+dt_current_day.getDate()+"</font></a></td>\n"; }
				else //surrounding months or past tense
					str_buffer += "<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">"+dt_current_day.getDate()+"</font></td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1); }
		str_buffer += "</tr>\n"; }
	str_buffer += "</table>";
	if (anyholiday == 1) str_buffer += "<p><font size=\"2\" color=\"lightgrey\">closed on lightgrey dates</font></p>";
	str_buffer += "</body></html>\n";
	var vWinCal = window.open("", "Calendar", "width=200,height=240,status=no,resizable=yes,top=100,left=300");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close(); }

function str2dt (str_datetime) {
	var re_date = /^(\d+)\-(\d+)\-(\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1)); }
	
function dt2dtstr (dt_datetime) {
	return (new String (dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear())); }
	
var result= "";
function filldates() {
	for (var oneday in nodate)
		result += dt2dtstr(nodate[oneday])+"\n";
	return result; }
