gaulYearLengths = new Array (0,384,354,384,354,355);
gaulMonthLengths = new Array (0,30,29,30,29,30,30,29,30,29,29,30,29);
gaulMonthNames = new Array ("Ciallos", "Samoni", "Dumannos", "Rivros",
			"Anagantios", "Ogroni", "Cutios", "Giamoni",
			"Semivisonna", "Equos", "Elembivos", "Edrinios", "Cantlos", "Ciallos");
gaulDayNames = new Array ("Disol", "Dilun", "Dimers", "Dimerker", "Diriau", "Digwener", "Disadorn"); 

gaulEpoch = new Date(1999,9,10,2);
daysSinceGaulEpoch = 0;
gaulYearCount = 1;
gaulYearLength = 0;
gaulDayCount = 0;
gaulDayNum = 0;
gaulTestDate = new Date();
gaulTestDate.setHours(12);
gaulYearStartDateValue = Date.parse(gaulEpoch);
newDate = new Date();
gaulYearStartDate = new Date(gaulYearStartDateValue);
gaulDayOfWeek = gaulTestDate.getDay();

gaulMonthCount = 0;
gaulMonthNum = 0;
gaulMonthStartDate = new Date();
gaulMonthStartDateValue = Date.parse(gaulYearStartDate);

setGaulYear();
setGaulMonth();

function setGaulYear()
{
	this.daysSinceGaulEpoch = Math.floor(gaulTestDate.valueOf()/864e5) - Math.floor(gaulEpoch.valueOf()/864e5);
	j = 1;
	gaulDayCount = gaulYearLengths[j];
	gaulYearLength = gaulYearLengths[j];
	while (daysSinceGaulEpoch >= gaulDayCount)
	{
		gaulYearCount++;
		j = (gaulYearCount % 5);
		if (j == 0) {j = 5;}
		gaulYearStartDateValue += (gaulYearLength*24*60*60*1000);
		gaulYearStartDate = new Date(gaulYearStartDateValue);
		gaulYearLength = gaulYearLengths[j];
		if (gaulYearCount % 28 == 0) { gaulYearLength = 354; }
		if (gaulYearCount % 898 == 0) { gaulYearLength = 384; }
		gaulDayCount += gaulYearLength;
	}
}

function setGaulMonth()
{
	gaulMonthsInYear = 12;
	if (gaulYearCount % 5 == 1) 
	{	 
		gaulMonthsInYear = 13; 
		gaulMonthNames[1] = "Ciallos";
		gaulMonthNames[2] = "Samoni";
		gaulMonthNames[3] = "Dumannos";
		gaulMonthNames[4] = "Rivros";
		gaulMonthNames[5] = "Anagantios";
		gaulMonthNames[6] = "Ogronios";
		gaulMonthNames[7] = "Cutios";
		gaulMonthNames[8] = "Giamoni";
		gaulMonthNames[9] = "Semivisonna";
		gaulMonthNames[10] = "Equos";
		gaulMonthNames[11] = "Elembivos";
		gaulMonthNames[12] = "Edrinios";
		gaulMonthNames[13] = "Cantlos";
		gaulMonthLengths[1] = 30;
		gaulMonthLengths[2] = 30;
		gaulMonthLengths[3] = 29;
		gaulMonthLengths[4] = 30;
		gaulMonthLengths[5] = 29;
		gaulMonthLengths[6] = 30;
		gaulMonthLengths[7] = 30;
		gaulMonthLengths[8] = 29;
		gaulMonthLengths[9] = 30;
		gaulMonthLengths[10] = 29;
		gaulMonthLengths[11] = 29;
		gaulMonthLengths[12] = 30;
		gaulMonthLengths[13] = 29;
	}
	if (gaulYearCount % 5 == 3)
	{
		gaulMonthsInYear = 13;
		gaulMonthNames[7] = "Ciallos";
		gaulMonthNames[8] = "Giamoni";
		gaulMonthNames[9] = "Semivisonna";
		gaulMonthNames[10] = "Equos";
		gaulMonthNames[11] = "Elembivos";
		gaulMonthNames[12] = "Edrinios";
		gaulMonthNames[13] = "Cantlos";
		gaulMonthLengths[7] = 30;
		gaulMonthLengths[8] = 29;
		gaulMonthLengths[9] = 30;
		gaulMonthLengths[10] = 29;
		gaulMonthLengths[11] = 29;
		gaulMonthLengths[12] = 30;
		gaulMonthLengths[13] = 29;
	}
	if (gaulYearCount % 5 == 0) { gaulMonthLengths[9] = 30; }
	gaulDayCount = gaulMonthLengths[1]
	gaulMonthCount = 1;
	j = 1;
	daysSinceGaulYearStart = Math.floor(gaulTestDate.valueOf()/864e5) - Math.floor(gaulYearStartDate.valueOf()/864e5) + 1;
	gaulDayNum = daysSinceGaulYearStart;
	gaulMonthStartDateValue = Date.parse(gaulYearStartDate);
	while (daysSinceGaulYearStart > gaulDayCount)
	{
		gaulMonthCount++;
		gaulMonthStartDateValue += (gaulMonthLengths[j]*24*60*60*1000);
		gaulMonthStartDate = new Date(gaulMonthStartDateValue);
		j++;
		gaulDayCount += gaulMonthLengths[j];
		gaulDayNum = Math.floor(gaulTestDate.valueOf()/864e5) - Math.floor(gaulMonthStartDate.valueOf()/864e5) + 1;
	}
}

function getGaulDayName()
{
	getGaulDayName = gaulDayNames[gaulDayOfWeek];
	return getGaulDayName;
}

function getGaulDate()
{
	getGaulDate = gaulDayNum;
	return getGaulDate;
}

function getGaulMonthName()
{
	getGaulMonthName = gaulMonthNames[gaulMonthCount];
	return getGaulMonthName;
}

function getGaulYear()
{
	getGaulYear = gaulYearCount;
	return getGaulYear;
}

function getGaulFullDate()
{
	getGaulFullDate = getGaulDate() + ' ' + getGaulMonthName() + ', NCC ' + getGaulYear();
	return getGaulFullDate;
}
