
var LONG_FORMAT = 0;
var SHORT_FORMAT = 1;

var LongMonthNames = new Array(	"January", "February", "March", 
				"April", "May", "June", 
				"July", "August", "September", 
				"October", "November", "December");

var ShortMonthNames = new Array(	"Jan", "Feb", "Mar", 
					"Apr", "May", "Jun", 
					"Jul", "Aug", "Sep", 
					"Oct", "Nov", "Dec");

var LONGER_MONTH = function (year) { return 31; }
var SHORTER_MONTH = function (year) { return 30; }
var FEBRURARY_MONTH = function (year) { return ( year % 4 == 0 && year % 100 != 0 ? 29 : 28); }


var MonthLengths = new Array( 	LONGER_MONTH,	FEBRURARY_MONTH,	LONGER_MONTH,
				SHORTER_MONTH,	LONGER_MONTH,		SHORTER_MONTH,
				LONGER_MONTH,	LONGER_MONTH,		SHORTER_MONTH,
				LONGER_MONTH,	SHORTER_MONTH,		LONGER_MONTH);


var LongDayNames = new Array( 	"Sunday", "Monday", "Tuesday", "Wednesday",
				"Thursday", "Friday", "Saturday");

var ShortDayNames = new Array( 	"Sun", "Mon", "Tue", "Wed",
				"Thu", "Fri", "Sat");


function formatDate(date, format)
{
   var monthnumber = date.getMonth();
   var monthname   = (format === LONG_FORMAT ? LongMonthNames[monthnumber] : ShortMonthNames[monthNumber]);
   var monthday    = date.getDate();
   var year        = date.getYear();
   if(year < 2000) { year = year + 1900; }
   var dateString = monthname +
                    ' ' +
                    monthday +
                    ', ' +
                    year;
   return dateString;
} // function formatDate(date, format)

function DateFormat(date, format)
{
   var monthnumber = date.getMonth();
   var month = monthnumber+1;
   var monthday    = date.getDate();
   var year        = date.getFullYear();
   var weekday	   = date.getDay();

   if (year < 2000) year += 1900;
	
   var formatted_date = format;

   formatted_date = formatted_date.replace(/\%a/, ShortDayNames[weekday]);
   formatted_date = formatted_date.replace(/\%A/, LongDayNames[weekday]);
   formatted_date = formatted_date.replace(/\%b/, ShortMonthNames[monthnumber]);
   formatted_date = formatted_date.replace(/\%h/, ShortMonthNames[monthnumber]);
   formatted_date = formatted_date.replace(/\%B/, LongMonthNames[monthnumber]);
   formatted_date = formatted_date.replace(/\%D/, padzero(month) + "/" + padzero(monthday) + padzero(year % 100));
   formatted_date = formatted_date.replace(/\%d/, padzero(monthday));
   formatted_date = formatted_date.replace(/\%e/, monthday);
   formatted_date = formatted_date.replace(/\%L/, month);
   formatted_date = formatted_date.replace(/\%m/, padzero(month));
   formatted_date = formatted_date.replace(/\%n/, "\\n");
   formatted_date = formatted_date.replace(/\%t/, "\\t");
   formatted_date = formatted_date.replace(/\%y/, padzero(year % 100));
   formatted_date = formatted_date.replace(/\%Y/, year);

   return formatted_date;
}

function padzero(value)
{
	return (value < 10 ? "0" : "") + value;
}

function parseMySQLDate(date)
{
	var year = date.substr(0,4);
	var month = date.substr(5,2);
	var day = date.substr(8,2);

	return parseDate(year, month, day);
}

function parseMMDDYYYY(date)
{
	var day_plus = 0, year_plus = 0;
	var month = date.substr(0,2);

	if (date.substr(2,1) == "/")
	{
		day_plus++;
	}

	if (date.substr(4+day_plus, 1) == "/")
	{
		year_plus++;
	}

	var day = date.substr(2+day_plus, 2);

	var year = date.substr(4+day_plus+year_plus, 4);

	return parseDate(year, month, day);
}

function parseDate(year, month, day)
{
	var DATE = new Date();

	DATE.setDate(day);
	DATE.setMonth(month-1);
	DATE.setFullYear(year);

	DATE.setHours(0);
	DATE.setMinutes(0);
	DATE.setSeconds(0);

	return DATE;
}

function Days_in_Month(year, month)
{
	return MonthLengths[month-1](year);
}

function AddDays_MySQLDate(MySQLDate, add)
{
	return AddDays_Date(parseMySQLDate(MySQLDate), add);
}

function AddDays_Date(date, add)
{
	return AddDays(date.getFullYear(), date.getMonth()+1, date.getDate(), add);
}

function AddDays(year, month, day, add)
{
	year = parseInt(year);
	month = parseInt(month);
	day = parseInt(day);

	day += add;

	while (day > Days_in_Month(year, month))
	{
		day -= Days_in_Month(year, month);
		month++;
		if (month == 13)
		{
			month = 1;
			year++;
		}
	}

	while (day <= 0)
	{
		month--;
		day += Days_in_Month(year, month);

		if (month == 0)
		{
			year--;
			month = 12;
		}
	}

	return parseDate(year, month, day);
}
