///////////////////////////////////////////////////////////////////////////
// birthdays.js
// Functions for calculating and printing upcoming birthdays
// Michael Moyer
//
//
///////////////////////////////////////////////////////////////////////////

var daysNotice = 30;	// An integer between 0 and 365

var bdays = new Array(
	"Mom$1/2/1948",
	"Beabout$1/7/1977",
	"Dad$2/4/1948",
	"Rob$2/6/1978",
	"Lisa$2/8/1980",
	"Nikki$3/3/1978",
	"Eyal$3/8/1976",
	"John$4/13/1977",
	"Greg$4/20/1977",
	"Larry$4/29/1977",
	"Joe$4/29/1977",
	"Andy$5/2/1977",
	"Chas$6/25/1977",
	"Felicia$7/13/1978",
	"James$7/13/1977",
	"Lauren K$8/5/1977",
	"Stanger$8/9/1977",
	"Heather$9/13/1978",
	"Liam$11/23/1975",
	"Nori$12/5/1978",
	"Lauren M$12/9/1975",
	"Anita$12/13/1980"
);

var numBdays = 0;
var today = new Date();
var bdaysString = "";

///////////////////////////////////////////////////////////////////////////
function getDifference (bday, today) {
	return ((bday.getTime() - today.getTime()) / 86400000);
}

///////////////////////////////////////////////////////////////////////////
function getAge (d1, d2) {
	var d3 = new Date((d1.getTime() - d2.getTime()));
	return d3.getFullYear() - 1970 + 1;
}

///////////////////////////////////////////////////////////////////////////
function getNextBday (bday) {
	var today = new Date();
	var nextBday = new Date(bday.getFullYear(), bday.getMonth(), bday.getDate());

	if (bday.getMonth() > today.getMonth()) {
		nextBday.setFullYear(today.getFullYear());
	}
	else if (bday.getMonth() < today.getMonth()) {
		nextBday.setFullYear(today.getFullYear() + 1);
	}
	else if (bday.getMonth() == today.getMonth()) {
		if (bday.getDate() >= today.getDate()) {
			nextBday.setFullYear(today.getFullYear());
		}
		else if (bday.getDate() < today.getDate()) {
			nextBday.setFullYear(today.getFullYear() + 1);
		}
	}
	return nextBday;
}

///////////////////////////////////////////////////////////////////////////
function writeBirthdays (i1, i2) {
	for (i=i1; i<i2; i++) {
		var bdaysSplit = bdays[i].split("$");
		var name = bdaysSplit[0];
		var bday = bdaysSplit[1];

		bday = new Date(bday);

		var age = getAge(today, bday);
		var daysDifference = getDifference(getNextBday(bday), today);

		if (daysDifference < daysNotice & daysDifference > -1) {
			bdaysString += "<LI>" + name + " turns "+ age +" on ";
			bdaysString += (bday.getMonth() + 1) + "/" + bday.getDate() + ".<BR>";
			numBdays++;
		}
	}
}

///////////////////////////////////////////////////////////////////////////
function birthdays() {
	var nextBdayIndex = 400;
	var nextBday = new Date(today.getFullYear() + 1);
	
	for (i=0; i<bdays.length; i++) {
	// Determine what index to start at (ie. the next birthday)
		var bdaysSplit = bdays[i].split("$");
		var name = bdaysSplit[0];
		var bday = bdaysSplit[1];
		
		bday = new Date(bday);
		
		if (getDifference(getNextBday(bday), today) < getDifference(getNextBday(nextBday), today)) {
			nextBdayIndex = i;
			nextBday = bday;
		}
	}

	writeBirthdays (nextBdayIndex, bdays.length);
	writeBirthdays (0, nextBdayIndex);
	
	if (numBdays == 0)
		bdaysString = "<LI>None<BR>";
		
	return bdaysString;
}

