
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var calendars = new Array();

function calNextMonth(divId)
{
	calendars["cal"+divId].nextMonth();
}

function calPreviousMonth(divId)
{
	calendars["cal"+divId].previousMonth();
}

function Calendar(objDate, divId, jsSelDateFunc)
{
	this.js = jsSelDateFunc;
	this.html = "";
	this.divId = divId;
	this.initStartDate = initStartDate;
	this.startDate = new Date();
	this.nextMonth = nextMonth;
	this.previousMonth = previousMonth;
	this.draw = draw;
	this.drawRows = drawRows;
	this.drawRow = drawRow;
	this.drawCell = drawCell;
	
	this.selectedDate = new Date();
	this.selectedDate.setDate(objDate.getDate());
	this.selectedDate.setMonth(objDate.getMonth());
	this.selectedDate.setFullYear(objDate.getFullYear());
	this.selectedDate.setHours(0,0,0,0);
	
	this.initStartDate();
	calendars["cal"+divId] = this;
}
function nextMonth()
{
	//this.startDate.setDate(1);
	this.startDate.setMonth(this.startDate.getMonth()+1);
	this.draw();
}
function previousMonth()
{
	//this.startDate.setDate(1);
	this.startDate.setMonth(this.startDate.getMonth()-1);
	this.draw();
}
function initStartDate()
{
	this.startDate.setDate(1);
	this.startDate.setMonth(this.selectedDate.getMonth());
	this.startDate.setFullYear(this.selectedDate.getFullYear());
	this.startDate.setHours(0,0,0,0);
}
function draw()
{
	this.html = "<table cellpadding=0 cellspacing=1 border=0 width=147 bgcolor=#EEEEEE>";
	this.html += "<tr>";
	this.html += "<td align='left'><a href=\"javascript:calPreviousMonth('"+this.divId+"');\">&lt;</a></td>";
	this.html += "<td colspan='5' align='center'>"+months[this.startDate.getMonth()]+" "+this.startDate.getFullYear()+"</td>";
	this.html += "<td align='right'><a href=\"javascript:calNextMonth('"+this.divId+"');\">&gt;</a></td>";
	this.html += "</tr>";
	this.html += "<tr><td align=\"center\">S</td><td align=\"center\">M</td><td align=\"center\">T</td><td align=\"center\">W</td><td align=\"center\">T</td><td align=\"center\">F</td><td align=\"center\">S</td></tr>";
	this.drawRows();		
	this.html += "</table>";

	var objDiv = document.getElementById(this.divId);
	objDiv.innerHTML = this.html;
}

function drawRows()
{
	var endDate = new Date();
	endDate.setDate(1);
	endDate.setFullYear(this.startDate.getFullYear());
	endDate.setMonth(this.startDate.getMonth()+1);
	endDate.setHours(0,0,0,0);
	
	var sd = new Date();
	sd.setDate(1);
	sd.setMonth(this.startDate.getMonth());
	sd.setFullYear(this.startDate.getFullYear());
	sd.setHours(0,0,0,0);
	var flag = true;
	do
	{
		flag = this.drawRow(sd, endDate);
	}
	while( flag );
}

function drawRow(sd, endDate)
{
	var flag = true;
	var endCell = 0;
	this.html += "<tr>";
	for( var i=0; i<sd.getDay(); i++ )
	{
		this.drawCell(null);
	}
	for( var i=sd.getDay(); i<7; i++ )
	{
		this.drawCell(sd);
		sd.setDate(sd.getDate()+1);
		if( sd.getMonth() == endDate.getMonth() )
		{
			flag = false;
			endCell = i+1;
			break;
		}
	}
	if( !flag )
	{
		for( var i=endCell; i<7; i++ )
		{
			this.drawCell(null);
		}
	}
	this.html += "</tr>";
	return flag;
}

function drawCell(date)
{
	this.html += "<td width=20 align=center";
	if( date != null && date.toString() == this.selectedDate.toString() )
		this.html += " bgcolor=#EEEEEE>";
	else
		this.html += " bgcolor=#FFFFFF>";
	if( date != null )
		this.html += "<a href=\"javascript:"+this.js+"('"+(date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear()+"','"+this.divId+"');\">"+date.getDate()+"</a>";
	else
		this.html += "&nbsp;";
	this.html += "</td>";
}