var weekend = [0,6];

var gNow = new Date();
var sgMonth, sgDay, sgYear;
var ggWinCal;
isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;

Calendar.Months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];

// Non-Leap year Month days..
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Leap year Month days..
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
	if ((p_month == null) && (p_year == null))	return;

	if (p_WinCal == null)
		this.gWinCal = ggWinCal;
	else
		this.gWinCal = p_WinCal;
	
	if (p_month == null) {
		this.gMonthName = null;
		this.gMonth = null;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}

	this.gYear = p_year;
	this.gFormat = p_format;
	this.gReturnItem = p_item;
}

Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo];
}

function Calendar_get_daysofmonth(monthNo, p_year) {
	/* 
	Check for leap year ..
	1.Years evenly divisible by four are normally leap years, except for... 
	2.Years also evenly divisible by 100 are not leap years, except for... 
	3.Years also evenly divisible by 400 are leap years. 
	*/
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return Calendar.DOMonth[monthNo];
	
		return Calendar.lDOMonth[monthNo];
	} else
		return Calendar.DOMonth[monthNo];
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/* 
	Will return an 1-D array with 1st element being the calculated month 
	and second being the calculated year 
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();
	
	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}
	
	return ret_arr;
}

function Calendar_print() {
	ggWinCal.print();
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/* 
	Will return an 1-D array with 1st element being the calculated month 
	and second being the calculated year 
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();
	
	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}
	
	return ret_arr;
}

new Calendar();

Calendar.prototype.show = function() {
	var out;
	this.gWinCal.document.open();

	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
	var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];

	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
	var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];

	// Setup the page...
	this.wwrite("<html>");
	this.wwrite("<style>");
	this.wwrite("a:link    { " +
					"font-size: 10pt; " +
					"color: #000000; " +
					"font-weight: normal; " +
					"text-decoration: none; " +
					"}");
	this.wwrite("a:visited { " +
					"font-size: 10pt; " +
					"color: #000000; " +
					"font-weight: normal; " +
					"text-decoration: none; " +
					"}");
	this.wwrite("a:hover   { " +
					"font-size: 10pt; " +
					"color: #1042ad; " +
					"font-weight: normal; " +
					"text-decoration: underline; " +
					"}");
	this.wwrite(".cal_hdr  { " +
					"font-size: 9pt; " +
					"color: darkgreen; " +
					"font-weight: bold; " +
					"}");
	this.wwrite(".cal_we  { " +
					"background-color: #e0e0e0; " +
					"}");
	this.wwrite(".cal_start_dt  { " +
					"color: darkgreen; " +
					"font-weight: bold; " +
					"}");
	this.wwrite(".cal_accent  { " +
					"color: red;     " +
					"font-weight: bold; " +
					"}");
	this.wwrite("</style>");

	this.wwrite("<head><title>EZRosters - Pick a Date</title></head>");
	this.wwrite("<body>");

	this.wwrite("<table width=100% border=1><tr>");

	this.wwrite("<td align=center><a href=\"javascript:window.opener.Build(" +
						"'" + this.gReturnItem + "'," +
						"'" + this.gMonth + "'," +
						"'" + (parseInt(this.gYear)-1) + "'," +
						"'" + this.gFormat + "')\"" +
						" title='Previous Year'><<</a></td>");
	this.wwrite("<td align=center><a href=\"javascript:window.opener.Build(" +
						"'" + this.gReturnItem + "'," +
						"'" + prevMM + "'," +
						"'" + prevYYYY + "'," +
						"'" + this.gFormat + "')\"" +
						" title='Previous Month'><</a></td>");
	this.wwrite("<td colspan=3 align=center class=cal_hdr>" + this.gMonthName + " " + this.gYear + "</td>");
	this.wwrite("<td align=center><a href=\"javascript:window.opener.Build(" +
						"'" + this.gReturnItem + "'," +
						"'" + nextMM + "'," +
						"'" + nextYYYY + "'," +
						"'" + this.gFormat + "')\"" +
						" title='Next Month'>></a></td>");
	this.wwrite("<td align=center><a href=\"javascript:window.opener.Build(" +
						"'" + this.gReturnItem + "'," +
						"'" + this.gMonth + "'," +
						"'" + (parseInt(this.gYear)+1) + "'," +
						"'" + this.gFormat + "')\"" +
						" title='Next Year'>>></a></td>");
	this.wwrite("</tr><tr class=cal_hdr>");

	this.wwrite("<td align=center width=14%>Mon</td>" +
				"<td align=center width=14%>Tue</td>" +
				"<td align=center width=14%>Wed</td>" +
				"<td align=center width=14%>Thu</td>" +
				"<td align=center width=14%>Fri</td>" +
				"<td align=center width=14%>Sat</td>" +
				"<td align=center width=14%>Sun</td>" +
				"</tr>");

	this.cal_data();

	this.wwrite("</table>");
	this.wwrite("<script language=javascript>");
	this.wwrite("function doit(dt) {");
	this.wwrite("	self.opener.document." + this.gReturnItem + ".value = dt;");
	this.wwrite("	try {");
	this.wwrite("		self.opener.chgs = 1;");
	this.wwrite("	}");
	this.wwrite("	catch(er) {");
	this.wwrite("		;");
	this.wwrite("	}");
	this.wwrite("	try {");
	this.wwrite("		self.opener.document." + this.gReturnItem + ".onchange();");
	this.wwrite("	}");
	this.wwrite("	catch(er) {");
	this.wwrite("		;");
	this.wwrite("	}");
	this.wwrite("	window.open('close.html','_self');");
	this.wwrite("}");
	this.wwrite("</script>");
	this.wwrite("</body>");
	this.wwrite("</html>");
	this.gWinCal.document.close();
}

Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	var i, j;

	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);

	var vFirstDay = vDate.getDay();
	var vLastDay = Calendar.get_daysofmonth(this.gMonth, this.gYear);

	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();
/*
 * Pad the start of the month.
 */
	this.wwrite("<tr>");

	if (vFirstDay == 0) {
		for (i = 1; i <= 6; i++)
			this.wwrite("<td class=cal_we>&nbsp;</td>");
	}
	else if (vFirstDay > 1) {
		for (i = 1; i < vFirstDay; i++)
			this.wwrite("<td class=cal_we>&nbsp;</td>");
	}
/*
 * Do the weeks.
 */
	for (i = 1; i <= vLastDay; i++) {
		vDate.setMonth(this.gMonth);
		vDate.setYear(this.gYear);
		vDate.setDate(i);
		j = vDate.getDay();

		if ((j == 1) && (vFirstDay != 1))
			this.wwrite("<tr>");

		if ((j == 0) || (j == 6))
			this.wwrite("<td align=center class=cal_we>");
		else
			this.wwrite("<td align=center>");

		this.wwrite("<a href='javascript:doit(\"" + this.format_data(i) + "\")'>");

		if ((i == vNowDay) && (this.gMonth == vNowMonth) && (this.gYear == vNowYear))
			this.wwrite("<font class=cal_accent>" + i + "</font>");
		else if ((sgDay == i) && (sgMonth == this.gMonth) && (sgYear == this.gYear))
			this.wwrite("<font class=cal_start_dt>" + i + "</font>");
		else
			this.wwrite(i);
		this.wwrite("</a></td>");

		if (j == 0)
			this.wwrite("</tr>");
	}
/*
 * Pad the end of the month if necessary.
 */
	vDate.setMonth(this.gMonth);
	vDate.setYear(this.gYear);
	vDate.setDate(vLastDay);
	j = vDate.getDay();

	if (j != 0) {
		for (i = j; i < 7; i++)
			this.wwrite("<td class=cal_we>&nbsp;</td>");
		this.wwrite("</tr>");
	}
/*
 * Return.
 */
	return;
}

Calendar.prototype.wwrite = function(wtext) {
	this.gWinCal.document.writeln(wtext);
}

Calendar.prototype.format_data = function(p_day) {
	var vData;
	var vMonth = 1 + this.gMonth;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
	var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
	var vY4 = new String(this.gYear);
	var vY2 = new String(this.gYear.substr(2,2));
	var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;

	switch (this.gFormat) {
		case "MM\/DD\/YYYY" :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
			break;
		case "MM\/DD\/YY" :
			vData = vMonth + "\/" + vDD + "\/" + vY2;
			break;
		case "MM-DD-YYYY" :
			vData = vMonth + "-" + vDD + "-" + vY4;
			break;
		case "MM-DD-YY" :
			vData = vMonth + "-" + vDD + "-" + vY2;
			break;

		case "DD\/MON\/YYYY" :
			vData = vDD + "\/" + vMon + "\/" + vY4;
			break;
		case "DD\/MON\/YY" :
			vData = vDD + "\/" + vMon + "\/" + vY2;
			break;
		case "DD-MON-YYYY" :
			vData = vDD + "-" + vMon + "-" + vY4;
			break;
		case "DD-MON-YY" :
			vData = vDD + "-" + vMon + "-" + vY2;
			break;

		case "DD\/MONTH\/YYYY" :
			vData = vDD + "\/" + vFMon + "\/" + vY4;
			break;
		case "DD\/MONTH\/YY" :
			vData = vDD + "\/" + vFMon + "\/" + vY2;
			break;
		case "DD-MONTH-YYYY" :
			vData = vDD + "-" + vFMon + "-" + vY4;
			break;
		case "DD-MONTH-YY" :
			vData = vDD + "-" + vFMon + "-" + vY2;
			break;

		case "DD\/MM\/YYYY" :
			vData = vDD + "\/" + vMonth + "\/" + vY4;
			break;
		case "DD\/MM\/YY" :
			vData = vDD + "\/" + vMonth + "\/" + vY2;
			break;
		case "DD-MM-YYYY" :
			vData = vDD + "-" + vMonth + "-" + vY4;
			break;
		case "DD-MM-YY" :
			vData = vDD + "-" + vMonth + "-" + vY2;
			break;

		default :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
	}
	return vData;
}

function Build(p_item, p_month, p_year, p_format) {
	var p_WinCal = ggWinCal;
	gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);

	// Customize your Calendar here..
	gCal.gBGColor="white";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
	gCal.gHeaderColor="darkgreen";

	// Choose appropriate show function
	gCal.show();
}

function set_cal_today(fname, dt) {
	fname.value = dt;
	try {
		self.chgs = 1;
	}
	catch(er) {
	}
	try {
		fname.onchange();
	}
	catch(er) {
	}
}
/*
 * Args:
 *	1 = Default Date
 *	2 = date format
 */
function show_calendar() {
	gMonth = "";
	gDay = "";
	gYear = "";

	p_item = arguments[0];
	if (arguments[1] == null) {
		p_month = new String(gNow.getMonth().toString());
		p_year = new String(gNow.getFullYear().toString());
		sgDay = 1;
	}
	else {
		var tmp = "";
		var d1 = arguments[1];
		dt1 = new Date();
		tmp = d1.split("\/");
		dt1.setTime(Date.parse(d1));
		if ((dt1.toLocaleString() == "NaN") ||
			(tmp[0] != (dt1.getMonth() + 1))) {
			p_month = new String(gNow.getMonth().toString());
			p_year = new String(gNow.getFullYear().toString());
			sgDay = gNow.getDate();
		}
		else {
			p_month = new String(dt1.getMonth().toString());
			p_year = new String(dt1.getFullYear().toString());
			sgDay = dt1.getDate();
		}
	}
	sgMonth = p_month.toString();
	sgYear = p_year.toString();

	if (arguments[2] == null)
		p_format = "MM/DD/YYYY";
	else
		p_format = arguments[3];

	calTop = (screen.height/2)-220;
	calLeft = (screen.width/2)-280;

	vWinCal = window.open("", "Calendar", 
		"width=280,height=220,status=no,resizable=no,top=" + calTop + ",left=" + calLeft);
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format);
}

