// Various functions to figure ages in specific and generally,
// and to convert numbers to words.

function getAge( yyyy, mm, dd )
{
	// Compute numeric age, in whole years
	var days = new Date();
	var cur_month_day = days.getDate();
	var cur_month = 1+days.getMonth();
	var cur_year = days.getFullYear();
	var age = cur_year - yyyy;
	if ( cur_month < mm
			|| ( cur_month == mm && cur_month_day < dd ) )
		age--;

	return age;
}


function getPreciseAge( yyyy, mm, dd )
{
	// Compute numeric age, in years, and with decimals
	var now = new Date();
	var then = new Date();
	then.setFullYear( yyyy, mm-1, dd );
	var millis = now.getTime() - then.getTime();
	var msPerYear = 1000*60*60*24*365.25;
	var age = millis / msPerYear;
	return age;
}


function getFuzzyAge( yyyy, mm, dd )
{
	// Get numeric age first
	var age = getPreciseAge( yyyy, mm, dd );
	var ageword = '';

	// We're gonna fudge and round up if my birthday is a month or less away
	if ( age - Math.floor(age) >= 0.914 ) {
		ageword = "almost ";
		age = 1 + Math.floor(age);
	}

	ageword += Math.floor(age); 

	// waffle a bit
	if ( age - Math.floor(age) >= 0.5 )
		ageword += " and a half";

	return ageword;
}


function getAgeWord( yyyy, mm, dd )
{
	// Get numeric age first
	var age = getPreciseAge( yyyy, mm, dd );
	var ageword = '';

	// We're gonna fudge and round up if my birthday is a month or less away
	if ( age - Math.floor(age) >= 0.914 ) {
		ageword = "almost ";
		age = 1 + Math.floor(age);
	}

	ageword += numToWord( Math.floor(age) );

	// waffle a bit
	if ( age - Math.floor(age) >= 0.5 )
		ageword += " and a half";

	return ageword;
}


function numToWord( num )
{
	var word = '';
	num = Math.floor( num );

	if ( num == 11 ) word += "eleven"; 
	else if ( num == 12 ) word += "twelve"; 
	else if ( num == 13 ) word += "thirteen"; 
	else if ( num == 14 ) word += "fourteen"; 
	else if ( num == 15 ) word += "fifteen"; 
	else if ( num == 16 ) word += "sixteen"; 
	else if ( num == 17 ) word += "seventeen"; 
	else if ( num == 18 ) word += "eighteen"; 
	else if ( num == 19 ) word += "nineteen"; 
	else
	{
		var tens = Math.floor(num/10);
		var ones = num % 10;
		if ( tens == 2 ) word += "twenty";
		else if ( tens == 3 ) word += "thirty";
		else if ( tens == 4 ) word += "forty";
		else if ( tens == 5 ) word += "fifty";
		else if ( tens == 6 ) word += "sixty";
		else if ( tens == 7 ) word += "seventy";
		else if ( tens == 8 ) word += "eighty";
		else if ( tens == 9 ) word += "ninety";
		
		if ( tens != 0 && ones != 0 )
			word += '-';

		if ( ones == 1 ) word += "one";
		else if ( ones == 2 ) word += "two";
		else if ( ones == 3 ) word += "three";
		else if ( ones == 4 ) word += "four";
		else if ( ones == 5 ) word += "five";
		else if ( ones == 6 ) word += "six";
		else if ( ones == 7 ) word += "seven";
		else if ( ones == 8 ) word += "eight";
		else if ( ones == 9 ) word += "nine";
	}

	return word;
}


function pasteAge()
{
	if ( ! document.getElementById )
		return;

	var yyyy = 1974; var mm = 7; var dd = 1;	// 1974-07-01
	var span = document.getElementById('ageword');
	if ( span )
		span.firstChild.nodeValue = getAgeWord(yyyy, mm, dd);
	// so easy...

	span = document.getElementById('age');
	if ( span )
		span.firstChild.nodeValue = getAge(yyyy, mm, dd);

	span = document.getElementById('fuzzyage');
	if ( span )
		span.firstChild.nodeValue = getFuzzyAge(yyyy, mm, dd);
}

addEvent( window, 'load', pasteAge, false );

