//	Auteur:	Henk Reints, H.Reints@chello.nl, date:	Oct. 1999
//	Traduction française et adaptation pour le site du Diocèse de Rimouski:
//	Yves-Marie Mélançon, mars 2000 et février 2001, avec l'autorisation de l'auteur.
//	Ce fichier est sans commentaire et annotation pour en accélérer
//	le chargement.  On peut consulter eastercalc.js commenté et annoté à
//	l'adresse:  http://members.brabant.chello.nl/~h.reints/easter/eastercalc.html
//  Note:  les fonctions disponibles et l'affichage varient selon le navigateur utilisé.
//	Usage:  <html><head><script language="JavaScript" src="paquescalc.js"></script></head></html>

var copyrightstring = 'Copyright &copy; 1999, <a href="http://members.brabant.chello.nl/~h.reints/easter/index.htm">Henk Reints</a><br><font size=-2 color="blue">Version française: Yves-Marie Mélançon</FONT>';
var copyrightdutch  = copyrightstring;

var algname  = new Array;
var algdutch = new Array;
var algmin   = new Array;
var algmax   = new Array;

algname[ 0]=12;
algname[ 1]="Universel, Delambre+Lilius/Clavius";	algdutch[algname[ 1]]="Universeel Delambre+Lilius/Clavius";	algmin[algname[ 1]]=   1; algmax[algname[ 1]]=9999;
algname[ 2]="Universel, Delambre";			algdutch[algname[ 2]]="Universeel Delambre";			algmin[algname[ 2]]=   1; algmax[algname[ 2]]=9999;
algname[ 3]="Universel, Tondering";			algdutch[algname[ 3]]="Universeel Tondering";			algmin[algname[ 3]]=   1; algmax[algname[ 3]]=9999;
algname[ 4]="Universel, Tables universelles";				algdutch[algname[ 4]]="Universele Tabellen";			algmin[algname[ 4]]= 326; algmax[algname[ 4]]=4099;
algname[ 5]="Gregorien, Lilius/Clavius";			algdutch[algname[ 5]]="Gregoriaans Lilius/Clavius";		algmin[algname[ 5]]=1583; algmax[algname[ 5]]=9999;
algname[ 6]="Gregorien, Gauss";				algdutch[algname[ 6]]="Gregoriaans Gauss";			algmin[algname[ 6]]=1583; algmax[algname[ 6]]=9999;
algname[ 7]="Gregorien, Delambre";			algdutch[algname[ 7]]="Gregoriaans Delambre";			algmin[algname[ 7]]=1583; algmax[algname[ 7]]=9999;
algname[ 8]="Gregorien, Tondering";			algdutch[algname[ 8]]="Gregoriaans Tondering";			algmin[algname[ 8]]=1583; algmax[algname[ 8]]=9999;
algname[ 9]="Gregorien, Tables grégoriennes";				algdutch[algname[ 9]]="Gregoriaanse Tabellen";			algmin[algname[ 9]]=1583; algmax[algname[ 9]]=4099;
algname[10]="Julien, Delambre";				algdutch[algname[10]]="Juliaans Delambre";			algmin[algname[10]]=   1; algmax[algname[10]]=9999;
algname[11]="Julien, Tondering";				algdutch[algname[11]]="Juliaans Tondering";			algmin[algname[11]]=   1; algmax[algname[11]]=9999;
algname[12]="Julien, Tables juliennes";				algdutch[algname[12]]="Juliaanse Tabellen";			algmin[algname[12]]= 326; algmax[algname[12]]=4099;


function EasterJulianTables (year) {

	var result,gold,cent,temp,tA,tB,tC,tD,tE;

	if ((1*year < 326) || (1*year > 4099)) {
		result = NaN;
	} else {
		gold = year % 19;
		cent = Math.floor(year/100);
		temp = year % 100;
		tA = ((225 - 11*gold) % 30) + 21;
		tB = (tA - 19) % 7;
		tC = (40 - cent) % 7;
		tD = (temp + Math.floor(temp/4)) % 7;	
		tE = ((20 - tB - tC - tD) % 7) + 1;
		result = tA + tE;
	};
	return result;
};

function EasterGregorianTables (year) {

	var result,gold,cent,temp,tA,tB,tC,tD,tE;

	if ((1*year < 1583) || (1*year > 4099)) {
		result = NaN;
	} else {
		gold = year % 19;
		cent = Math.floor(year/100);
		temp = Math.floor((cent-15)/2) + 202 - 11*gold;
		if (cent >  26) { temp-- };
		if (cent >  38) { temp-- };
		if (cent == 21) { temp-- };
		if (cent == 24) { temp-- };
		if (cent == 25) { temp-- };
		if (cent == 33) { temp-- };
		if (cent == 36) { temp-- };
		if (cent == 37) { temp-- };
		temp = temp % 30;
		tA = temp + 21;
		if ( temp == 29                ) { tA-- };
		if ((temp == 28) && (gold > 10)) { tA-- };
		tB = (tA - 19) % 7;
		tC = (40 - cent) % 4;
		if (tC == 3) { tC++ };
		if (tC >  1) { tC++ };
		temp = year % 100;
		tD = (temp + Math.floor(temp/4)) % 7;	
		tE = ((20 - tB - tC - tD) % 7) + 1;
		result = tA + tE;
	};
	return result;
};

function EasterGregorianLiliusClavius (year) {

	var result,a,b,c,d,e,f,g

	if (1*year < 1583) {
		result = NaN;
	} else {
		a = (year % 19) + 1;
		b = Math.floor(year/100)    + 1;
		c = Math.floor((3*b)/4)     - 12;
		d = Math.floor((8*b + 5)/25)- 5;
		e = Math.floor((year*5)/4)  - 10 - c;
		f = (((11*a + 20 + d - c) % 30) + 30) % 30;
		if ((f == 24) || ((f == 25) && (a > 11))) { f++ };
		g = 44 - f;
		if (g < 21) { g = g + 30; };
		result = g + 7 - ((e + g) % 7);
	};
	return result;
};

function EasterGregorianGauss (year) {

	var result,a,b,c,d,e,f,g,i,M,N;

	if ((1*year < 1583) || (1*year > 9999)) {
		result = NaN;
	} else {
		M = new Array (22,22,23,23,24,
		24,24,25,26,25,26,27,27,27,28,
		28,29,29,29, 0, 1, 0, 1, 2, 2,
		 2, 3, 4, 4, 4, 5, 5, 6, 6, 6,
		 7, 8, 7, 8, 9, 9, 9,10,10,11,
		11,11,12,13,12,13,14,15,14,15,
		16,16,16,17,17,18,18,18,19,20,
		19,20,21,21,21,22,22,23,23,23,
		24,25,25,25,26,27,26,27,28,28);
		i = Math.floor(year/100)-15;	
		N = (4 + Math.floor(year/100) - Math.floor(year/400)) % 7;
		a = year % 19;
		b = year % 4;
		c = year % 7;
		d = (19*a + M[i]) % 30;
		e = (2*b + 4*c + 6*d + N) % 7;
		result = 22 + d + e;
		if (result==57 || (d==28 && e==6 && a>10)) { result = result-7; };
	};
	return result;
};

function EasterJulianDelambre (year) {

	var result,a,b,c,d,e;

	if (1*year < 1) {
		result = NaN;
	} else {
		a = year % 4;
		b = year % 7;
		c = year % 19;
		d = (19*c + 15) % 30;
		e = (2*a + 4*b - d + 34) % 7;
		result = 22 + d + e;
	};
	return result;
};

function EasterGregorianDelambre (year) {

	var result,a,b,c,d,e,f,g,h,i,k,L,m;

	if (1*year < 1583) {
		result = NaN;
	} else {
		a = year % 19;
		b = Math.floor(year/100);
		c = year % 100;
		d = Math.floor(b/4);
		e = b % 4;
		f = Math.floor((b + 8)/25);
		g = Math.floor((b - f + 1)/3);
		h = (19*a + b - d - g + 15) % 30;
		i = Math.floor(c/4);
		k = c % 4;
		L = (32 + 2*e + 2*i - h - k) % 7;
		m = Math.floor((a + 11*h + 22*L)/451);
		result = 22 + h + L - 7*m;
	};
	return result;
};

function EasterJulianTondering (year) {

	var result,g,i,j;

	if (1*year < 1) {
		result = NaN;
	} else {
		g = year % 19;
		i = (19*g + 15) % 30;
		j = (year + Math.floor(year/4) + i) % 7;
		result = 28 + i - j;
	};
	return result;
};

function EasterGregorianTondering (year) {

	var result,g,c,d,h,k,i,j;

	if (1*year < 1583) {
		result = NaN;
	} else {
		g = year % 19;
		c = Math.floor(year/100);
		d = c - Math.floor(c/4);
		h = (d - Math.floor((8*c+13)/25) + 19*g + 15) % 30;
		k = Math.floor(h/28);
		i = h - k*(1 - k*Math.floor(29/(h+1))*Math.floor((21-g)/11));
		j = (year + Math.floor(year/4) + i + 2 - d) % 7;
		result = 28 + i - j;
	};
	return result;
};

function jul2greg (marchday, year, julian) {

	var result,canbegregorian,x;

	canbegregorian = (datestring(marchday,year,true) > "1582-10-04");
	if (canbegregorian && !julian && ""+marchday != "NaN") {
		result = 1*marchday + 10;
		x = Math.floor(year/100) - 16;
		if (x > 0) { result = result + x - Math.floor(x/4); };
	} else {
		result = marchday;
	};
	return result;
};

function ThisYear (offset) {

	var year;

	year  = (new Date()).getYear();
	if (1*year < 1900) { year += 1900; };
	return year + offset;
};

function Leap (year, julian) {

	var result,

	result = CanDivide (year, 4);
	if ((1*year > 1582) && !julian) {
		result = result - CanDivide (year, 100) + CanDivide (year, 400);
	};
	return result;
};

function days (month, year, julian) {

	var result;

	if      (month == 2) { result = 28 + Leap (year, julian); }
	else if (month <  8) { result = 30 + month % 2; }
	else                 { result = 31 - month % 2; };
	return result;
};

function formatnumber (number, width, character) {

	var result;

	result = "" + number;
	while (result.length < width) { result = character + result; };
	return result;
};

function datestring (marchday, year, julian) {

	var result,y,m,d,loop;

	if (""+marchday == "NaN") {
		result = "????-??-??";
	} else {
		y = 1*year;
		m = 3;
		d = 1*marchday;
		loop = 2;
		while (loop > 0) {
			loop = loop - 2;
			while (d>days(m,y,julian)) { d=d-days(m,y,julian); m=(m%12)+1; if (m==1) { y++ } };
			while (d < 1) { m=((m+10)%12)+1; if (m==12) { y-- }; d=d+days(m,y,julian) };
			if ((loop == 0) && !julian) {
				if (1*year<1583 && ((y*100+m)*100)+d>15821004) { d=d+10; loop++ };
				if (1*year>1582 && ((y*100+m)*100)+d<15821015) { d=d-10; loop++ };
			};
		};
		result=formatnumber(y,4,' ')+"-"+formatnumber(m,2,'0')+"-"+formatnumber(d,2,'0');
	};
	return result;
};

function daymonth (marchday, year, julian, language) {

	var x,day,mon,month;

	var engmon = new Array("*****","janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","ao&ucirc;t","septembre","octobre","novembre","d&eacute;cembre");

	if (""+marchday != "NaN") {
		x = datestring (marchday, year, julian);
		day = 1*x.substr(8,2);
		mon = 1*x.substr(5,2);
	} else {
		day = 0;
		mon = 0;
	};
	if (language=="dutch") { month = engmon[mon]; }
	else                   { month = engmon[mon]; };
	return '<table><tr><td align="right" width=30><font face="Arial">' + day + '</font></td><td><font face="Arial">' + month + '&nbsp;&nbsp;</font></td></tr></table>';
};

function CanDivide (m, n) {

	var result;

	result = 0;
	if ((m % n) == 0) { result = 1; };
	return result;
};

function IsInteger (number) {

	var result = true;
	var d = "1234567890";
	var x = "" + number;
	var i,j;

	for (i = 0; result && (i < x.length); i++) {
		for (j = 0; (j < d.length) && (x.substr(i,1) != d.substr(j,1)); j++) { };
		result = (j < d.length);
	};
	return result;
};

function ValidateInteger (field1, low, high, replace, language) {

	var result,x;

	result = IsInteger (field1.value) && IsInteger (low) && IsInteger (high);
	if (result) {
		if (replace && (1*field1.value < 1*low )) { field1.value = low ; };
		if (replace && (1*field1.value > 1*high)) { field1.value = high; };
		result = ((1*field1.value >= 1*low) && (1*field1.value <= 1*high));
	};
	if (!result) {
		if (language=="dutch") {
		} else {
			x = "\"" + field1.value + "\" est une valeur invalide.\n";
			x = x + "Entrez une valeur entre " + low + " et " + high + " (inclusivement).";
		};
		alert (x);
	};
	return result;
};

function ValidateYear (field1, alg, replace, language) {

	return ValidateInteger(field1,algmin[alg],algmax[alg],replace,language);
};

function ValidateYearField (field1, field2, mode, alg, replace, language) {

	var result;

	result = ValidateYear (field1, alg, replace, language);
	if (result) {
		if (mode=="atleast" && (1*field2.value < 1*field1.value)) { field2.value = field1.value };
		if (mode=="atmost"  && (1*field2.value > 1*field1.value)) { field2.value = field1.value };
	};
	return result;
};

function least (number1, number2) {

	var result;

	result = number1;
	if (1*number1 > 1*number2) { result = number2; };
	return result;
};

function greatest (number1, number2) {

	var result;

	result = number1;
	if (1*number1 < 1*number2) { result = number2; };
	return result;
};

function setalgrange (algfield, lowfield, highfield) {
	lowfield.value  = greatest (lowfield.value , algmin[algname[algfield.selectedIndex+1]]);
	highfield.value = least    (highfield.value, algmax[algname[algfield.selectedIndex+1]]);
	return true;
};

function MakeEasterList (low, high, alg, gregalg, gregyear, language) {

	var f1,f2,title,years,algtx,algnm,jultx,grgtx,since,caltx,now,x1,x2,ed,year;
	var jinfo,ginfo,hinfo,jtext,gtext,htext,julcal,julalg;

	f1 = "<font face=\"Arial\">";
	f2 = "</font>";
	if (language=="dutch") {
	} else {
		title = "P&acirc;ques et f&ecirc;tes associ&eacute;es";
		if (low==high)	{ years = "<tr><td>" + f1 + "Ann&eacute;es : "  + f2 + "<td>" + f1 + low + "." + f2 + "</tr>"; }
		else		{ years = "<tr><td>" + f1 + "Ann&eacute;es : " + f2 + "<td>" + f1 + low + " &agrave; " + high + "." + f2 + "</tr>"; };

		algtx = "<tr><td>"+f1+"Algorithme : "+f2+"<td>"+f1;
		algnm = alg;
		jultx = "Julien";
		grgtx = "Gregorien";
		since = grgtx + " depuis ";
		caltx = "<tr><td>"+f1+"Calendrier : "+f2+"<td>"+f1;
		jtext = "<tr><td>"+f1+"Year+J"+f2+"</td><td>"+f1+"= Algorithme et calendrier Julien."+f2+"</td></tr>";
		gtext = "<tr><td>"+f1+"Year+G"+f2+"</td><td>"+f1+"= Algorithme et calendrier Grégorien."+f2+"</td></tr>";
		htext = "<tr><td>"+f1+"Year+H"+f2+"</td><td>"+f1+"= Hybride: algorithme Julien et calendrier Grégorien (Orthodoxe)."+f2+"</td></tr>";
	};
	jinfo = false;
	ginfo = false;
	hinfo = false;
	document.writeln ('<html><head><title>'+title+'</title><STYLE type="text/css"><!--A {text-decoration: underline; color: #0000ff}A:visited {text-decoration: underline; color: #551a8b}A:active {text-decoration: underline; color: #008000}A:hover {text-decoration: underline; color: #ff0000}.style_bouton {color: #000000; background: #ffd1d5}//--></style></head><body bgcolor="bisque" link="blue" alink="blue" vlink="blue">'+f1);
	if (language=="dutch") {
	} else {
		document.writeln ('<center><b><font face="Arial" size=+2>',title,'</font></b></center>');
		document.writeln ('<p align="center"><font face="Arial">R&eacute;sultat de la <a href="javascript:history.back();">Calculatrice des dates de P&acirc;ques</a></font><BR><FONT face="Arial" SIZE=2>Utilisez la fonction IMPRIMER de votre navigateur pour imprimer cette page.</FONT>');
	};
	document.writeln ('<p><table align="center">');
	document.writeln (years);
	if (alg.substr(0,9)=="Universel") {
		if      (1*gregalg > 1*high) { algtx = algtx + " " + jultx + " ("; }
		else if (1*gregalg < 1*low ) { algtx = algtx + " " + grgtx + " ("; }
		else                         { algtx = algtx + " " + since + gregalg + " ("; };
		algnm = algnm + ")";
	};
	document.writeln (algtx + algnm + "." + f2 + "</tr>");
	if (alg.substr(0,6)=="Julien" || alg.substr(0,9)=="Universel") {
		if      (1*gregyear > 1*high) { caltx = caltx + " " + jultx + "."; }
		else if (1*gregyear < 1*low ) { caltx = caltx + " " + grgtx + "."; }
		else                          { caltx = caltx + " " + since + gregyear + "."; };
		document.writeln (caltx + f2 + "</tr>");
	};
	document.writeln ("</table>" + f2);
	document.writeln ('<p><table border align="center"><tr><td><table>');
	if (language=="dutch") {
	} else {
		document.write   ("<tr>");
		document.write   ('<td align="center"><u><b>' + f1 + "Ann&eacute;e"     + f2 + "</b></u>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center">&nbsp;&nbsp;<u><b>' + f1 + "Dim. avant Cendres</u>*"+ f2 + "</b>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center">&nbsp;&nbsp;<u><b>' + f1 + "P&acirc;ques"    + f2 + "</b></u>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center">&nbsp;&nbsp;<u><b>' + f1 + "Ascension" + f2 + "</b></u>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center">&nbsp;&nbsp;<u><b>' + f1 + "Pentec&ocirc;te" + f2 + "</b></u>&nbsp;&nbsp;</td>");
		document.writeln ("</font></tr>");
	};
	now = ThisYear (0);
	for (year = 1*low; (year <= 1*high); year++) {
		window.status = "" + year;

		julcal = (year < 1*gregyear);
		if      (alg==algname[ 1] && year <  gregalg) { julalg = true ; ed=jul2greg(EasterJulianDelambre        (year),year,julcal); }
		else if (alg==algname[ 1] && year >= gregalg) { julalg = false; ed=         EasterGregorianLiliusClavius(year); }
		else if (alg==algname[ 2] && year <  gregalg) { julalg = true ; ed=jul2greg(EasterJulianDelambre        (year),year,julcal); }
		else if (alg==algname[ 2] && year >= gregalg) { julalg = false; ed=         EasterGregorianDelambre     (year); }
		else if (alg==algname[ 3] && year <  gregalg) { julalg = true ; ed=jul2greg(EasterJulianTondering       (year),year,julcal); }
		else if (alg==algname[ 3] && year >= gregalg) { julalg = false; ed=         EasterGregorianTondering    (year); }
		else if (alg==algname[ 4] && year <  gregalg) { julalg = true ; ed=jul2greg(EasterJulianTables          (year),year,julcal); }
		else if (alg==algname[ 4] && year >= gregalg) { julalg = false; ed=         EasterGregorianTables       (year); }
		else if (alg==algname[ 5]                   ) { julalg = false; ed=         EasterGregorianLiliusClavius(year); }
		else if (alg==algname[ 6]                   ) { julalg = false; ed=         EasterGregorianGauss        (year); }
		else if (alg==algname[ 7]                   ) { julalg = false; ed=         EasterGregorianDelambre     (year); }
		else if (alg==algname[ 8]                   ) { julalg = false; ed=         EasterGregorianTondering    (year); }
		else if (alg==algname[ 9]                   ) { julalg = false; ed=         EasterGregorianTables       (year); }
		else if (alg==algname[10]                   ) { julalg = true ; ed=jul2greg(EasterJulianDelambre        (year),year,julcal); }
		else if (alg==algname[11]                   ) { julalg = true ; ed=jul2greg(EasterJulianTondering       (year),year,julcal); }
		else if (alg==algname[12]                   ) { julalg = true ; ed=jul2greg(EasterJulianTables          (year),year,julcal); }
		else { alert("Algorithme de Pâques invalide : " + alg); };
		yy = "" + year;
		if ((((1*low<1*gregalg)&&(1*gregalg<=1*high))||((1*low<1*gregyear)&&(1*gregyear<=1*high)))&&(alg.substr(0,9)!="Gregorien")) {
			if (julalg &&  julcal ) { yy = year + " J"; jinfo = true; };
			if (julalg && !julcal ) { yy = year + " H"; hinfo = true; };
			if (!julalg)            { yy = year + " G"; ginfo = true; };
		};
		if (year == now) { x1 = f1+"<b>"; x2 = "</b>"+f2; }
		else             { x1 = f1      ; x2 =        f2; };
		document.write   ('<tr><font face="Arial">');
		document.write   ('<td>' + x1 + yy + x2 + '</td>');
		document.write   ('<td>' + x1 + daymonth (ed - 49, year, julcal, language) + x2 + '</td>');
		document.write   ('<td>' + x1 + daymonth (ed     , year, julcal, language) + x2 + '</td>');
		document.write   ('<td>' + x1 + daymonth (ed + 39, year, julcal, language) + x2 + '</td>');
		document.write   ('<td>' + x1 + daymonth (ed + 49, year, julcal, language) + x2 + '</td>');
		document.writeln ("</font></tr>");
	};
// ici
		document.write   ("<tr>");
		document.write   ('<td align="center"><b><HR>' + f1 + "Ann&eacute;e"     + f2 + "</b>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center"><HR>&nbsp;&nbsp;<b>' + f1 + "Dim. avant Cendres*"+ f2 + "</b>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center"><HR>&nbsp;&nbsp;<b>' + f1 + "P&acirc;ques"    + f2 + "</b>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center"><HR>&nbsp;&nbsp;<b>' + f1 + "Ascension" + f2 + "</b>&nbsp;&nbsp;</td>");
		document.write   ('<td align="center"><HR>&nbsp;&nbsp;<b>' + f1 + "Pentec&ocirc;te" + f2 + "</b>&nbsp;&nbsp;</td>");
		document.writeln ("</font></tr>");
//fin

	document.writeln("</table></tr></table>");
	if (jinfo || hinfo || ginfo) {
		document.writeln('<br>');
		document.writeln('<table align="center">');
		if (jinfo) { document.writeln (jtext); };
		if (hinfo) { document.writeln (htext); };
		if (ginfo) { document.writeln (gtext); };
		document.writeln('</table>');
	};
	if (language=="dutch") {
	} else {
		document.writeln (f1,'<table align="center" width=620><tr><td align="justify"><FONT face="Arial" SIZE=2>');
		document.writeln ('<BR><p align="justify"><b>*</b> Le dimanche avant le Mercredi des Cendres  =  7 semaines avant P&acirc;ques. Pour l&#39;&Eacute;glise catholique romaine, c&#39;est le dernier dimanche ordinaire avant le d&eacute;but du car&ecirc;me.  Pour obtenir la date du <b>Mercredi des Cendres, ajoutez 3 jours</B> &agrave; la date de ce dimanche.');
		document.writeln ('La Pentec&ocirc;te = 7 semaines apr&egrave;s P&acirc;ques. L&#39;Ascension = 10 jours avant la Pentec&ocirc;te</FONT></td></tr></table>');
		document.writeln ('<p align="center"><font size=-1 color="blue">',copyrightstring,'</font>' + f2);
		document.writeln ('<p align="center"><font face="Arial"><a Href="javascript:history.back();">(Faire un nouveau calcul  /  Page pr&eacute;c&eacute;dente)</a></font><BR><br>');
		document.writeln ('<HR><BR><table align="center" width=600><tr><td align="center"><font size=2 face="Arial" color="red">');
		document.writeln ('<b>AVERTISSEMENT</b></font>');
		document.writeln ('<p align="justify"><font size=2 face="Arial" color="black">');
		document.writeln ('Ce r&eacute;sultat du calcul des dates de P&acirc;ques vous est donn&eacute; &agrave; titre de d&eacute;monstration seulement');
		document.writeln ('et pour le plaisir des personnes int&eacute;ress&eacute;es par les math&eacute;matiques du calcul de la date de P&acirc;ques.');
		document.writeln ('L&#39;auteur et toutes les autres sources mentionn&eacute;es dans ce programme ne pourront &ecirc;tre tenus responsables de quelque cons&eacute;quence que ce soit suite &agrave;');
		document.writeln ('un calcul impr&eacute;cis ou faux ou &agrave; une interpr&eacute;tation erron&eacute;e des r&eacute;sultats.');
		document.writeln ('Pour la planification d&acute;activit&eacute;s bas&eacute;es sur la date de P&acirc;ques,');
		document.writeln ('toujours consulter d&acute;autres r&eacute;f&eacute;rences pour s&#39;assurer de l&#39;exactitude des dates donn&eacute;es ici.');
		document.writeln ('</font></td></tr></table>');
	};
	document.writeln ("<br>")
	document.writeln ("</body></html>");
	window.status = "";
	return true;
};

function CompareAllMethods (low, high) {

	var r,n,year,j1,j2,j3,g1,g2,g3,g4,g5,y,ok;

	var listAll = false;

	r = "omparer les algorithmes de la date de P&acirc;ques pour les ann&eacute;es " + low + " &agrave; " + high;
	n = 0;
	document.writeln ("C" + r);
	for (year = low; year <= high; year++) {
		window.status = "" + year + ": " + n;
		j1 = EasterJulianTables (year);
		j2 = EasterJulianDelambre (year);
		j3 = EasterJulianTondering (year);
		g1 = EasterGregorianTables (year);
		g2 = EasterGregorianLiliusClavius (year);
		g3 = EasterGregorianGauss (year);
		g4 = EasterGregorianDelambre (year);
		g5 = EasterGregorianTondering (year);
		y  = "<br>"   + formatnumber (year,4,"0");
		y  =  y + " " + formatnumber (j1,3,"0");
		y  =  y + " " + formatnumber (j2,3,"0");
		y  =  y + " " + formatnumber (j3,3,"0");
		y  =  y + " " + formatnumber (g1,3,"0");
		y  =  y + " " + formatnumber (g2,3,"0");
		y  =  y + " " + formatnumber (g3,3,"0");
		y  =  y + " " + formatnumber (g4,3,"0");
		y  =  y + " " + formatnumber (g5,3,"0");
		ok =      Compare (j1,j2,1 );
		ok = ok * Compare (j1,j3,ok);
		ok = ok * Compare (j2,j3,ok);
		ok = ok * Compare (g1,g2,ok);
		ok = ok * Compare (g1,g3,ok);
		ok = ok * Compare (g1,g4,ok);
		ok = ok * Compare (g1,g5,ok);
		ok = ok * Compare (g2,g3,ok);
		ok = ok * Compare (g2,g4,ok);
		ok = ok * Compare (g2,g5,ok);
		ok = ok * Compare (g3,g4,ok);
		ok = ok * Compare (g3,g5,ok);
		ok = ok * Compare (g4,g5,ok);
		if (ok==0) {
			n++;
			document.writeln (y + " ERREUR");
		} else if (listAll) {
			document.writeln (y);
		};
	};
	document.writeln ("<br>Pr&ecirc;t &agrave; c" + r + ", trouv&eacute; " + n + " erreurs");
	window.status = "";
	return true;
};

function Compare (d1,d2,previousResult) {
	return (previousResult && (""+d1 == "NaN" || ""+d2 == "NaN" || d1 == d2));
};

function buildform (language, defalg) {

	var title,algtxt,grgtx1,grgtx2,lowtxt,higtxt,restxt,statxt;

	if (language=="dutch") {
	} else {
		title  = "Calcul de la date de P&acirc;ques";
		algtxt = "Algorithme de calcul ";
		grgtx1 = "5. Utiliser l&#39;algorithme Gr&eacute;gorien (seulement pour les algorithmes universels) &agrave; partir de :";
		grgtx2 = "4. Convertir le r&eacute;sultat Julien au calendrier Gr&eacute;gorien &agrave; partir de :";
		lowtxt = "2. Ann&eacute;e de d&eacute;part pour le tableau ";
		higtxt = "3. Ann&eacute;e de fin pour le tableau ";
		restxt = "R&eacute;initialiser";
		statxt = "Calculer";
	};
	document.writeln('<html>');
	document.writeln('<head>');
	document.writeln('<title>',title,'</title>');
	document.writeln('</head>');
	document.writeln('<body bgcolor="bisque" link="blue" alink="red" vlink="orchid"><A NAME="haut"></A>');
	document.writeln('<font face="Arial">');
	if (language=="dutch") {
	} else {
		document.writeln('<center><b><font size=+2>',title,'</font></b>');
		document.writeln('<p><font size=2><a href="http://members.brabant.chello.nl/~h.reints/easter/eastercalc.htm">Click here for English version &nbsp;/&nbsp; Klik hier voor Nederlandse versie</a></font></P></center>');
		document.writeln('<table width=550 align="center"><tr><td><p align="justify"><font face="Arial" size=-1>Pour un calcul selon le calendrier occidental (&Eacute;glise catholique romaine, par exemple), nous vous sugg&eacute;rons de conserver les valeurs propos&eacute;es (lignes 1, 4 et 5). Inscrivez simplement les ann&eacute;es d&eacute;sir&eacute;es de d&eacute;but (ligne 2) et de fin (ligne 3) pour la production d&acute;un tableau des dates de P&acirc;ques et des f&ecirc;tes associ&eacute;es.  Vous pouvez inscrire directement l&#39;année, ou utiliser les boutons +1 et -1 à c&ocirc;t&eacute; du chiffre.  &Eacute;vitez de demander une p&eacute;riode sup&eacute;rieure &agrave; 20 ans pour ne pas attendre trop longtemps le r&eacute;sultat et pour obtenir un tableau qui tient sur une page.</FONT></td></tr></table>');
	};
	document.writeln('</center>');
	document.writeln('<form name="easterform">');
	document.writeln('<input type="hidden" name="language" value="'+language+'">');
	document.writeln('<input type="hidden" name="defalg"   value="'+defalg+'">');
	document.writeln('<table border align="center" cellpadding=10>');
	document.writeln('<tr><td align="right"><font face="Arial">1. <a href="http://members.brabant.chello.nl/~h.reints/easter/index.htm">'+algtxt+'</A>:</font></td><td><font face="Arial">');

	document.writeln('<select name="algorithm" onchange="setalgrange(this,this.form.low,this.form.high);">');
	for (var i = 1; i <= algname[0]; i++) {
		document.write ('<option value="',algname[i],'">');
		if (language == "dutch") { document.writeln(         algname[i] ) }
		else                     { document.writeln(         algname[i] ) };
	};
	document.writeln('</select></font></td></tr>');

	document.writeln('<tr><td align="right"><font face="Arial">'+lowtxt+':</font></td><td><font face="Arial">');
	document.writeln('<input type="text" name="low" size=4 maxlength=4 onchange="return ValidateYearField(this,this.form.high,\'atleast\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('\&nbsp;\&nbsp;\&nbsp;\&nbsp;');
	document.writeln('<input type="button" value="+1" onclick="this.form.low.value++; ValidateYearField(this.form.low,this.form.high,\'atleast\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('<input type="button" value="-1" onclick="this.form.low.value--; ValidateYearField(this.form.low,this.form.high,\'atleast\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('</font></td></tr>');

	document.writeln('<tr><td align="right"><font face="Arial">'+higtxt+':</font></td><td><font face="Arial">');
	document.writeln('<input type="text" name="high" size=4 maxlength=4 onchange="return ValidateYearField(this,this.form.low,\'atmost\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('\&nbsp;\&nbsp;\&nbsp;\&nbsp;');
	document.writeln('<input type="button" value="+1" onclick="this.form.high.value++; ValidateYearField(this.form.high,this.form.low,\'atmost\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('<input type="button" value="-1" onclick="this.form.high.value--; ValidateYearField(this.form.high,this.form.low,\'atmost\' ,algname[this.form.algorithm.selectedIndex+1],true,\'\');">');
	document.writeln('</font></td></tr>');

	document.writeln('<tr><td align="right"><font face="Arial">'+grgtx2+'</font></td><td><font face="Arial">');
	document.writeln('<input type="text" name="gregyear" value=1583 size=4 maxlength=4 onchange="return ValidateYearField(this,this.form.gregalg,\'atleast\', algname[5],true,\'\');">');
	document.writeln('\&nbsp;\&nbsp;\&nbsp;\&nbsp;');
	document.writeln('<input type="button" value="+1" onclick="this.form.gregyear.value++; ValidateYearField(this.form.gregyear,this.form.gregalg,\'atleast\' ,algname[5],true,\'\');">');
	document.writeln('<input type="button" value="-1" onclick="this.form.gregyear.value--; ValidateYearField(this.form.gregyear,this.form.gregalg,\'atleast\' ,algname[5],true,\'\');">');
	document.writeln('</font></td></tr>');

	document.writeln('<tr><td align="right"><font face="Arial">'+grgtx1+'</font></td><td><font face="Arial">');
	document.writeln('<input type="text" name="gregalg" value=1583 size=4 maxlength=4 onchange="return ValidateYearField(this,this.form.gregyear,\'atmost\' ,algname[5],true,\'\');">');
	document.writeln('\&nbsp;\&nbsp;\&nbsp;\&nbsp;');
	document.writeln('<input type="button" value="+1" onclick="this.form.gregalg.value++;ValidateYearField(this.form.gregalg,this.form.gregyear,\'atmost\' ,algname[5],true,\'\');">');
	document.writeln('<input type="button" value="-1" onclick="this.form.gregalg.value--;ValidateYearField(this.form.gregalg,this.form.gregyear,\'atmost\' ,algname[5],true,\'\');">');
	document.writeln('</font></td></tr>');

	document.writeln('<tr><td align="right"><font face="Arial"><input type="button" value="'+restxt+'" onclick="this.form.algorithm.selectedIndex=',defalg,'; this.form.gregalg.value=1583; this.form.gregyear.value=1583; this.form.low.value=ThisYear(-1); this.form.high.value=ThisYear(+19); return true;"></font></td>');
	document.writeln('    <td align="left" ><font face="Arial">');
	if (navigator.appName == "Netscape") {
		document.writeln('<input type="submit" value="Soumettre">');
	} else {
		document.writeln('<input type="button" value="'+statxt+'" onclick="return MakeEasterList(this.form.low.value,this.form.high.value,algname[this.form.algorithm.selectedIndex+1],this.form.gregalg.value,this.form.gregyear.value,\''+language+'\');">');
		document.writeln('<input type="submit" value="Soumettre">');
	};
	document.writeln('</font></td></tr>');
	document.writeln('</table>');
	document.writeln('</form>');

	if (navigator.appName == "Netscape") {
		document.writeln ('<table width=450 align="center"><tr><td><p align="center"><font face="Arial" color="red" size=-1>');
		document.writeln ('</font></td></tr></table>');
	} else {
		document.writeln ('<table width=550 align="center"><tr><td><p align="justify"><font face="Arial" size=-1>');
		if (language=="dutch") {
		} else {
			document.writeln ('Quand vous pressez le bouton <b>Calculer</b>, la proc&eacute;dure est effectu&eacute;e localement dans votre ordinateur, sans r&eacute;actualisation de la page.');
			document.writeln ('Quand vous pressez le bouton <b>Soumettre</b>, le formulaire est remis en m&eacute;moire et la page du tableau obtenu est actualis&eacute;e.');
			document.writeln ('Si vous pr&eacute;voyez <b><font color=red>imprimer</b></font> le tableau obtenu, utilisez toujours le bouton <b>Soumettre</b> pour calculer.');
		};
		document.writeln ('</font></td></tr></table>');
	};
// copyright et boutons de fin de page coupés d'ici et placés page principale	
	document.writeln('<script language="JavaScript">');
	document.writeln('document.easterform.algorithm.selectedIndex=',defalg,';');
	document.writeln('if (document.easterform.low.value=="" ) { document.easterform.low.value  = ThisYear(-1); };');
	document.writeln('if (document.easterform.high.value=="") { document.easterform.high.value = ThisYear(+19); };');
	document.writeln('</script>');
	document.writeln('</font>');
	document.writeln('</body>');
	document.writeln('</html>');
	return true;
};

function element (i, sep, text) {

	var j,k,m,n;

	n = 0;
	j = 0;
	k = text.indexOf (sep, j); if (k == -1) { k = text.length; };
	m = k + sep.length;
	while (n < i && m < text.length) {
		n++;
		j = m;
		k = text.indexOf (sep, j); if (k == -1) { k = text.length; };
		m = k + sep.length;
	};
	return ( (n < i) ? sep : text.substr (j, k-j) );
};

function startup () {

	var i,j,x,y,z,f,v,w;
	var low      = null;
	var high     = null;
	var alg      = null;
	var gregalg  = null;
	var gregyear = null;
	var language = null;
	var defalg   = 0;

	y = location.search; if (y != "") y = element (1, "?", y);
	i = 0;
	x = ((y=="") ? "&" : element (i, "&", y) );
	while (x != "&") {
		f = element (0, "=", x);
		v = element (1, "=", x);
		w = "";
		j = 0;
		while (j < v.length) {
			z = v.charAt(j);
			if (z=="+") { z = " "; };
			if (z=="%") { z = unescape(v.substr(j,3)); j += 2; };
			w += z;
			j++;
		};
		if (f=="low"      ) { low      = w; };
		if (f=="high"     ) { high     = w; };
		if (f=="algorithm") { alg      = w; };
		if (f=="gregalg"  ) { gregalg  = w; };
		if (f=="gregyear" ) { gregyear = w; };
		if (f=="language" ) { language = w; };
		if (f=="defalg"   ) { defalg   = w; };
		i++;
		x = element (i, "&", y);
	};
	if (low != null && high != null && alg != null && gregalg != null && gregyear != null) {
		MakeEasterList (low, high, alg, gregalg, gregyear, language);
	} else {
		buildform (language, defalg);
	};
};

startup();
