/* 
The Doctor's Inn Bed and Breakfast
Date & Calendar Functions
(c) 2005 Sobcon, Inc.
*/

function show_calendar(str_target, str_datetime) {

	var calendarTitle = "The Doctor's Inn";

	var monthNamesArray = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	var dayNamesArray = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
	var weekStartDay = 0; // day week starts from (normally 0 or 1)
	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));  //Date provided for calendar start
	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()-weekStartDay)%7);
	var dt_lastday = new Date(dt_next_month); dt_lastday.setDate(0);

	// html generation
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"<title>Calendar</title>\n"+

		"<style type=\"text/css\">\n"+
		/* Entire Calendar Border, Font */
		"table#calendar {border: 1px solid gray; font-family: Tahoma, Verdana, Arial, serif;}"+
		/* Entire Calendar Anchors (Links) */
		"table#calendar a {text-decoration: none; }"+
		/* Calendar Title */
		"table#calendar tr#title td {background-color: maroon; border-bottom: 1px solid gray; color: white; font-size: 12px; text-align: center;}"+
		"table#calendar tr#title a {color: white;}"+
		/* Calendar Footer */
		"table#calendar tr#footer td {background-color: maroon; border-top: 1px solid gray; color: white; font-size: 12px; text-align: center;}"+
		/* Calendar Day Titles */
		"table#calendar tr#days td {text-align: center; font-size: 12px;}"+
		/* Calendar Days */
		"table#calendar a {display: block; margin: 0;}"+
		"table#calendar a:link {color: black;}"+
		"table#calendar a:visited {color: maroon;}"+
		"table#calendar a:hover {background-color: #FFFFCC;}"+
		/* Weekends */
		"table#calendar td.sun, table#calendar td.sat {background-color: #DEEEDE;}"+
		/* Not this month */
		"table#calendar a.other {color: #AAAAAA;}"+
		"table#calendar td.other {background-color: #EFEFEF;}"+
		"</style>\n"+

		"</head>\n"+
		"<body>\n"+
			"<table id=\"calendar\" cellspacing=\"0\" cellpadding=\"5\" border=\"0\" height=\"100%\" width=\"100%\">\n"+
				"<tr id=\"title\">\n"+
					"<td>"+
					"<a href=\"javascript:window.opener.show_calendar('"+str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\" alt=\"Previous Month\">"+
					//"<img src=../../thedoctorsinn/scripts//%22images/prev.gif/%22 width=\"16\" height=\"16\" border=\"0\" alt=\"Previous Month\"></a></td>\n"+
					"<<</a></td>\n"+
					"<td colspan=\"5\">"+monthNamesArray[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</td>\n"+
					"<td id=\"nextmonth\">"+
					"<a href=\"javascript:window.opener.show_calendar('"+str_target+"', '"+dt2dtstr(dt_next_month)+"');\" alt=\"Next Month\">"+
					//"<img src=../../thedoctorsinn/scripts//%22images/next.gif/%22 width=\"16\" height=\"16\" border=\"0\" alt=\"Next Month\"></a></td>\n"+
					">></a></td>\n"+
					"</tr>\n" 
					);

	var dt_current_day = new Date(dt_firstday);

	// print weekdays titles
	str_buffer += "<tr id=\"days\">\n";

	for (var n=0; n<7; n++)
		str_buffer += "	<td class=\"" + dayNamesArray[(weekStartDay+n)%7].toLowerCase() + "\">"+dayNamesArray[(weekStartDay+n)%7]+"</td>\n";

	// print calendar table
	str_buffer += "</tr>\n";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() || dt_current_day.getMonth() == dt_firstday.getMonth()) {

		// print row heder
		str_buffer += "<tr id=\"days\">\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
			if (dt_current_day.getMonth() == dt_datetime.getMonth()) {
				// print days of current month
				str_buffer += "	<td class=\"" + dayNamesArray[n_current_wday].toLowerCase() + "\">";
				str_buffer += "<a href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">";
				}
			else {
				// print days of other months
				str_buffer += "	<td class=\"other\">";
				str_buffer += "<a class=\"other\" href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">";
				}
			str_buffer += dt_current_day.getDate()+"</a></td>\n";
			dt_current_day.setDate(dt_current_day.getDate()+1);
			}
		// print row footer
		str_buffer += "</tr>\n";
		}
	// print calendar footer
	str_buffer += "<tr id=\"footer\"><td colspan=\"7\">" + calendarTitle + "</td></tr>"+
		"</table>\n" +
		"</body>\n" +
		"</html>\n";

	var vWinCal = window.open("","Calendar","width=250,height=250,status=no,resizable=yes");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

// date parsing and formatting routimes
function str2dt (str_datetime) {
	<!-- var re_date = /^(\d+)\-(\d+)\-(\d+)\s+$/; -->
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.exec(str_datetime)) return alert("Invalid Date Format: "+ "  " + str_datetime);
	var datevar = str_datetime.split("/");
	return (new Date (datevar[2],datevar[0]-1,datevar[1]));
}

function dt2dtstr (dt_datetime) {
	return (new String (
		dt_datetime.getMonth()+1) +"/"+dt_datetime.getDate()+"/"+dt_datetime.getFullYear());
}