var today = new Date();
var m = today.getMonth();
var y = today.getFullYear();

var weekday = new Array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday");
var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

function click_date( tableCell )
{
	if(typeof window.onDateClicked == 'function')
	{
		var sd, parentTable, y, m, d;
		parentTable = tableCell.parentNode.parentNode.parentNode;
		y = parentTable.id.substr(1,4);
		sd = y + "-";
		m = parseInt(parentTable.id.substr(5)) + 1;
		if (m<10) sd += "0";
		sd += m + "-";
		d = parseInt(tableCell.innerHTML);
		if (d<10) sd += "0";
		sd += d;
		onDateClicked( sd );
	}
}

function fill_calendar( id, m, y )
{
	var r, c;
	var mon = new Date(0);
	mon.setUTCFullYear(y);
	mon.setUTCMonth(m);
	mon.setUTCDate(1);
	var wd = mon.getDay();
	for (r=2; r<=7; r++)
	{
		for (c=0; c<=6; c++)
		{
			d = mon.getDate();
			if ((d == 1) && ((c != wd-1) && !((c == 6) && (wd == 0))))
			{
				document.getElementById(id).rows[r].cells[c].innerHTML = "&nbsp;";
				document.getElementById(id).rows[r].cells[c].style.backgroundColor = "#EFEFEF";
			}
			else if (mon.getMonth() != m)
			{
				document.getElementById(id).rows[r].cells[c].innerHTML = "&nbsp;";
				document.getElementById(id).rows[r].cells[c].style.backgroundColor = "#EFEFEF";
			}
			else
			{
				document.getElementById(id).rows[r].cells[c].innerHTML = d;
				document.getElementById(id).rows[r].cells[c].className = "empty";
				document.getElementById(id).rows[r].cells[c].onclick = function () {click_date(this)};
				mon.setDate(d+1);
			}
		}
	}
}

function draw_month( m, y )
{
	var r, c;
	var id = 'm' + y + m;
    document.write("<table id='" + id + "' border='1' cellpadding='0' cellspacing='0'>");
    document.write("<tr>");
    document.write("  <th colspan='7'>" + months[m] + " " + y);
    document.write("</tr>");
    document.write("<tr>");
    document.write("  <th>Mo<th>Tu<th>We<th>Th<th>Fr<th>Sa<th>Su");
    document.write("</tr>");
    for (r=1; r<=6; r++)
	{
    	document.write("<tr>");
    	for (c=0; c<=6; c++)
		{
			document.write("<td align='center' width='25' height='15'>-</td>");
		}
		document.write("</tr>");
    }
	if (y < 999) y += 1900;
    document.write("</table>");
    fill_calendar( id, m, y );
}

function col( d )
{
	var c = d.getDay() - 1;
	if (c < 0)
		c += 7;
	return c;
}

function row( d )
{
	var first = new Date(d);
	first.setDate(1);
	var n = d.getDate() + col(first) - 1;
	var r = Math.floor(n / 7) + 2;
	return r;	
}

var show_arriving = "";
var show_departing = "";

function show_availability( y, m, sDays )
{
	var aDays = sDays.split(",");
	var i=0;
	while (i <= aDays.length)
	{
		if (show_arriving == "")
		{
			if (aDays[i] == "1")
				show_arriving = y + "-" + m + "-" + (i+1);
		}
		else
		{
			if (aDays[i] == "0")
			{
				show_departing = y + "-" + m + "-" + (i+1);
				show_range( show_arriving, show_departing, "booked" );
				show_arriving = "";
			}
		}
		i++;
	}
}

function show_range( arriving, departing, intype )
{
	var type = intype;
	if (type == 'offer')
		type = 'special';

	var date_part;

	date_part = arriving.split('-');
	var d1 = new Date(0);
	d1.setUTCFullYear(date_part[0]);
	d1.setUTCMonth(date_part[1]-1);
	d1.setUTCDate(date_part[2]);
	d1.setUTCHours(12,0,0,0);
		
	date_part = departing.split('-');
	var d2 = new Date(0);
	d2.setUTCFullYear(date_part[0]);
	d2.setUTCMonth(date_part[1]-1);
	d2.setUTCDate(date_part[2]);
	d2.setUTCHours(12,0,0,0);

	var thisday = new Date(d1);
	var chk = 0;
	while (thisday <= d2)
	{
		thisday.setUTCHours(12,0,0,0);
		var id = 'm' + thisday.getUTCFullYear() + thisday.getUTCMonth()
		var cal = document.getElementById(id);
		if (cal)
		{
			var r = row(thisday);
			var c = col(thisday);
			var cell = cal.rows[r].cells[c];
			if (Number(thisday) == Number(d1))
			{
			    if(cell.className.indexOf("booked") == -1)
					cell.className = cell.className.charAt(0) + type;
				//else no change
			}
			else if (Number(thisday) == Number(d2))
			{
				if(cell.className.charAt(0) == "b" || cell.className.charAt(0) == type.charAt(0))
				{
					// no change
				}
				else if(cell.className == "special" || cell.className == "reserved" || cell.className == "empty")
				{
					cell.className = type.charAt(0) + cell.className;
				}
				else
				{
					cell.className = type.charAt(0) + cell.className.substr(1);
				}
			}
			else if (cell.className == "booked")
			{
				// no change
			}
			else if (cell.className.charAt(0) == "b")
			{
				cell.className = "b" + type;
			}
			else if (cell.className.indexOf("booked") == 1)
			{
				cell.className = type.charAt(0) + "booked";
			}
			else
			{
				cell.className = type;
			}
		}
		++chk;
		thisday.setDate(thisday.getDate()+1);
		if (chk==370) { alert('loop error in show_range("' + arriving + '","' + departing + '","' + intype + '")'); break; }
	}
	
}

function draw_next_month()
{
	document.write("<td>");
	draw_month(m++,y);
	document.write("</td>");
	if (m>11)
	{
		m = 0;
		y++;
	}
}

function draw_key()
{
	document.write("<tr>");

	document.write("<td align='center'>");
	document.write("<table border='1' cellpadding='0' cellspacing='0'>");
	document.write("<tr><td align='center' width='25' class='special'>1</td></tr>");
	document.write("</table>");
	document.write("Special Offers Available");
	document.write("</td>");

	document.write("<td align='center'>");
	document.write("<table border='1' cellpadding='0' cellspacing='0'>");
	document.write("<tr><td align='center' width='25' class='reserved'>1</td></tr>");
	document.write("</table>");
	document.write("Dates Reserved");
	document.write("</td>");

	document.write("<td align='center'>");
	document.write("<table border='1' cellpadding='0' cellspacing='0'>");
	document.write("<tr><td align='center' width='25' class='booked'>1</td></tr>");
	document.write("</table>");
	document.write("Booked - Not Available");
	document.write("</td>");

	document.write("</tr>");
}

function draw_calendar( nMonths, perRow )
{
	var count = 0;
	document.write("<table>");
	draw_key();
	var startRow = true;
	while (count < nMonths)
	{
		if (startRow)
		{
			document.write("<tr>");
			startRow = false;
		}
		draw_next_month();
		count++;
		if (count % perRow == 0)
		{
			document.write("</tr>");
			startRow = true;
		}
	}
	if (!startRow)
		document.write("</tr>");
	document.write("</table>");
}
