var monthsArray	= new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var daysArray 	= new Array("Su","Mo","Tu","We","Th","Fr","Sa");
var datesArray 	= new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var today		= new Date();

var curDay		= today.getDay();
var curDate		= today.getDate();
var curMonth	= today.getMonth();
var curNumDays	= datesArray[curMonth];
var curYear		= today.getFullYear();

var newDay		= curDay;
var newDate		= curDate;
var newMonth	= curMonth;
var newYear		= curYear;
var newNumDays	= curNumDays;

var selectedDate= '';
var selectedMonth= '';
var selectedYear= '';

var input		= '';
var calFrame	= '';

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent; 
		}
	}
	else if (obj.y)
	{
		curleft += obj.x;
	}
	return curleft;
}
function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent; 
		}
	}
	else if (obj.y)
	{
		curtop += obj.y;
	}
	return curtop;
}
function cal_hide()
{
	calFrame = document.getElementById('cal_frame');

	calFrame.style.visibility = 'hidden';
	calFrame.innerHTML = '';
}
function cal_show(link, inputName, moveIt)
{
	if (!(input = document.getElementById(inputName)))
		return false;
	calFrame = document.getElementById('cal_frame');

	inputValue = input.value.split('/');
	if (inputValue[1] > 0)
	{
		selectedDate = inputValue[0];
		selectedMonth = inputValue[1]-1;
		selectedYear = inputValue[2];
		newMonth = ((selectedYear-curYear)*12)+selectedMonth;
	}
	else
		newMonth = curMonth;
	
	cal_generate(newMonth);

	if (moveIt == 0)
		xPos = findPosX(link) + 0;
	else
		xPos = findPosX(link) + 130;
		
	yPos = findPosY(link) + 20;
	if (xPos + calFrame.offsetWidth > document.body.clientWidth)
		xPos = document.body.clientWidth - calFrame.offsetWidth - 50;
	if (yPos + calFrame.offsetHeight > document.body.clientHeight)
		yPos = document.body.clientHeight - calFrame.offsetHeight - 50;

	calFrame.style.left = xPos + 'px';
	calFrame.style.top = yPos + 'px';
	calFrame.style.visibility = 'visible';
}
function cal_selectDate(month, date, year)
{
	input.value = date + "/" + (month+1) + "/" + year;
	calFrame.style.visibility = 'hidden';
	calFrame.innerHTML = '';
}
function cal_makeDate(date)
{
	tempDate = new Date(newYear, newMonth, date);
	bufferD = "<td";
	if (date == selectedDate && newMonth == selectedMonth && newYear == selectedYear)
		bufferD += " class=\"active\"";
	if (date == curDate && newMonth == curMonth && newYear == curYear)
		bufferD += " style=\"font-weight: bold;\"";
	bufferD += ">";

	bufferD += "<a href='#' onclick='cal_selectDate(" + newMonth + ", " + date + ", " + newYear + "); return false;'>";
	bufferD += date;
	bufferD += "</a>";
	bufferD += "</td>\n";

	return bufferD;
}
function cal_firstDay()
{
	firstDay = new Date();
	firstDay.setDate(1);
	firstDay.setMonth(newMonth);
	firstDay.setFullYear(newYear);
	return firstDay.getDay();
}
function cal_generate(month)
{
	newMonth = month;
	buffer = '';
	calFrame = document.getElementById('cal_frame');
	calFrame.innerHTML = '';

	if (newMonth >= 12)
	{
		newMonth = month - 12;
		newYear = (curYear + parseInt(month / 12));
	}
	else if (month < 12)
	{
		newMonth = month;
		newYear = curYear;
	}

	newNumDays = datesArray[newMonth];
	isLeap	= ((newYear % 4 == 0 && (newYear % 100 != 0 || newYear % 400 == 0 )) ? 1 : 0);

	if (newMonth == 1)
		newNumDays = newNumDays + isLeap;

	dayBegin = cal_firstDay();

	buffer += "<table cellspacing=\"0\" cellpadding=\"0\" class=\"calender\">\n";
	buffer += "<thead>\n";
	buffer += "<tr>\n";
	buffer += "<td colspan=\"7\">";
	buffer += monthsArray[newMonth] + " " + newYear;
	buffer += "</td>\n";
	buffer += "</tr>\n";
	buffer += "</thead>";
	buffer += "<tr>\n";
	for (i = 0; i < daysArray.length;i++)
	{
		buffer += "<td>";
		buffer += daysArray[i];
		buffer += "</td>\n";
	}
	buffer += "</tr>";

	c = 0; // day count
	r = 0; // row count
	bufferT = ''; // temporary buffer
	for (d = 1; d <= newNumDays; d++)
	{
		if (d == 1)
		{
			for (b = 0; b < dayBegin; b++)
			{
				bufferT += "<td>&nbsp;</td>\n";
				c++;
			}
		}

		bufferT += cal_makeDate(d);

		c++; // increase day count

		if (c == 7)
		{
			c = 0; // set day count back to 0
			r++; // increase row count
			buffer += "<tr>\n";
			buffer += bufferT;
			buffer += "</tr>\n";
			bufferT = '';
		}
		if (d == newNumDays && c != 0)
		{
			for (b = c; b < 7; b++)
				bufferT += "<td>&nbsp;</td>\n";

			buffer += "<tr>\n";
			buffer += bufferT;
			buffer += "</tr>\n";
			bufferT = '';
			r++;
		}
	}
	bufferT = '';
	if (r < 6) // did we have enough rows to fill the calender
	{
		for (b = 0; b < 7; b++)
			bufferT += "<td>&nbsp;</td>\n";
		
		buffer += "<tr>\n";
		buffer += bufferT;
		buffer += "</tr>\n";
		bufferT = '';
	}

	buffer += "<tr>\n";

	prevMonth = monthsArray[(month >= 12 ? (month-1) % 12 : (month-1))];
	nextMonth = monthsArray[(month >= 11 ? (month+1) % 12 : (month+1))];
	
	buffer += "<td style=\"text-align: left;\" colspan=\"3\">";
	if (prevMonth)
		buffer += "<a href=\"#\" onclick='cal_generate(" + month + " - 1); return false;'>&lt; " + prevMonth + "</a>";
	buffer += "</td>";

	buffer += "<td style=\"text-align: right;\" colspan=\"4\"><a href=\"#\" onclick='cal_generate(" + month + " + 1); return false;'>" + nextMonth + " &gt;</a></td>";

	buffer += "</tr>\n";

	buffer += "<tfoot>\n";
	buffer += "<tr>\n";
	buffer += "<td colspan=\"7\"><a href=\"javascript:void(0);\" onclick=\"cal_hide();\">Close</a></td>";
	buffer += "</tr>\n";
	buffer += "</tfoot>\n";

	buffer += "</table>";

	calFrame.innerHTML += buffer;

}
document.write('<div id="cal_frame"></div>');
