// GregorianDate.js
// v1.0
// by, Jeffery Walker
// http://cs.oberlin.edu/~jwalker/

	//document.write("GregorianDate.js loaded<br>");

	function GregorianDate(month, day, year)
	{
		var standardDate;
		switch(arguments.length)
		{
			case 0:
				standardDate = new Date();
				break;
			case 3:
				standardDate = new Date(year, month-1, day);
				break;
			default:
				throw new Error("incorrect number of argments to new GregorianDate()");
		}
		this.year	= standardDate.getFullYear();
		this.month	= standardDate.getMonth()+1;
		this.day	= standardDate.getDate();
	}

	GregorianDate.DAYS_OF_WEEK = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
	GregorianDate.MONTHS_OF_YEAR = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	
	GregorianDate.prototype.toShortString = function()
	{
		return this.month + "/" + this.day + "/" + this.year;
	}
	GregorianDate.prototype.toLongString = function()
	{
		return this.getDayOfWeekName() + ' ' + this.getMonthName() + ' ' + this.day + ', ' + this.year;
	}

	GregorianDate.daysPast = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
	GregorianDate.daysPastInLeapYear = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
	GregorianDate.prototype.getDayOfYear = function()
	{
		var daysPast = isLeapYear(this.year) ? GregorianDate.daysPastInLeapYear : GregorianDate.daysPast;
		return this.day + daysPast[this.month-1];	
	}
	
	GregorianDate.prototype.getDayOfWeek = function()
	{
		var standardDate = new Date(this.year, this.month-1, this.day);
		return standardDate.getDay();
	}
	GregorianDate.prototype.getDayOfWeekName = function()
	{
		return GregorianDate.DAYS_OF_WEEK[this.getDayOfWeek()];
	}
	GregorianDate.prototype.getMonthName = function()
	{
		return GregorianDate.MONTHS_OF_YEAR[this.month-1];
	}
	GregorianDate.prototype.toGlobalDate = function()
	{
		var globalYear = this.year;
		var globalDayOfYear = this.getDayOfYear() + GlobalDate.CALENDAR_OFFSET - 1;  // global day count starts with 0 instead of 1
		if(globalDayOfYear > getDaysInYear(globalYear) - 1)
		{
			globalDayOfYear -= getDaysInYear(globalYear);
			globalYear += 1;
		}
		
		return new GlobalDate(globalYear, globalDayOfYear);
	}