
/**
 * Retourne la date de Pâques
 *
 * @access public
 * @param integer year Année concernée, par défaut l'année courante
 * @return Date
 */
function easter(year) {
	if(typeof(year) == "undefined") {
		var today = new Date();
		year = today.getFullYear();
	}
	var n = year - 1900;
	var a = n - 19 * Math.floor(n / 19);
	var ab = 1 + a * 7;
	var b = Math.floor(ab / 19);
	var bc = 11 * a - b + 4;
	var c = bc - 29 * Math.floor(bc / 29);
	var d = Math.floor(n / 4);
	var de = n - c + d + 31;
	var e = de - 7 * Math.floor(de / 7);
	var p = 25 - c - e;
	var po = 31;
	if(p > 0.5) {
		var m = 3;
		po = 0;
	}
	else var m = 2;
	p = p + po;

	return new Date(year, m, p);
}

/**
 * Retourne la date du lundi de Pâques
 *
 * @access public
 * @param Date easterDate Date de Pâques
 * @return Date
 */
function easterMonday(easterDate) {
	if(typeof(easterDate) == "undefined")
		easterDate = easter();
	var easterMonday = new Date();
	easterMonday.setTime(easterDate.getTime() + 86400 * 1000);

	return easterMonday;
}

/**
 * Retourne la date de l'Ascension.
 *
 * @access public
 * @param Date easterDate Date de Pâques
 * @return Date
 */
function ascension(easterDate) {
	if(typeof(easterDate) == "undefined")
		easterDate = easter();
	var ascension = new Date();
	ascension.setTime(easterDate.getTime() + 39 * 86400 * 1000);

	return ascension;
}

/**
 * Retourne la date du lundi de Pentecôte
 *
 * @access public
 * @param Date easterDate Date de Pâques
 * @return Date
 */
function pentecostMonday(easterDate) {
	if(typeof(easterDate) == "undefined")
		easterDate = easter();
	var pentecostMonday = new Date();
	pentecostMonday.setTime(easterDate.getTime() + 50 * 86400 * 1000);

	return pentecostMonday;
}

