var monthDays	= new Array(new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),	// non-leap year
						    new Array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)	// leap year
						   );
var dayName		= new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var monthName	= new Array("invalid", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function LeapYear(year)
//******************************************************************************
//  Function
//	Determines is a year is a leap year.
//  Parameters:
//	year >= 1582
//  Returns:
//      null on error; true is year is leap year; false is year is not a leap
//	year.
//******************************************************************************
	{
	if (year < 1582)
		return null;
	return year %4 == 00 && year % 100 != 0 || year % 400 == 0;
	}

function DayOfWeek(year, month, day)
//******************************************************************************
//  Function
//	    Calculates day of week based on the Gregorian calendar, which started on
//		Friday 15 October 1582.
//  Parameters:
//		year >= 1582
//		month, 1 = January, 2 = February, 3 = March, ... 12 = December
//		day
//  Returns:
//      -1 on error, day of week 0 = Sunday, 1 = Monday, ... 6 = Saturday
//******************************************************************************
	{
	// check parameters

	if (year < 1582)
		return -1;
	if (year == 1582 && month < 10)
		return -1;
	if (year == 1582 && month == 10 && day < 15)
		return - 1;
	if (month < 1 || month > 12)
		return -1;
	if (day < 1 || day > monthDays[LeapYear(year) ? 1 : 0][month])
		return - 1;

	// adjust

	if ((month = month - 2) < 1)
		{
		month += 12;
		year--;
		}

	century = Math.floor(year / 100);
	year = year % 100;

	// calculate

	if ((dayOfWeek = (day + Math.floor(2.6 * month - 0.2) - 2 * century + year + Math.floor(year / 4) + Math.floor(century / 4)) % 7) < 0)
		dayOfWeek += 7;
	return dayOfWeek
	}

