//<script>
function makeArray() {
	this[0] = makeArray.arguments.length;
	for (i = 0; i < makeArray.arguments.length; i = i + 1)
		this[i+1] = makeArray.arguments[i];
}

var hebMonth = ['','Nissan', 'Iyar', 'Sivan', 'Tammuz', 'Av', 'Elul','Tishrei', 'Cheshvan', 'Kislev', 'Tevet', 'Shvat','Adar', 'Adar_I', 'Adar_II'];
	
//var hebMonthNames = new makeArray('ðéñï', 'àééø', 'ñéåï', 'úîåæ', 'îðçí àá', 'àìåì','úùøé', 'çùåï', 'ëñìå', 'èáú', 'ùáè','àãø', 'àãø à', 'àãø á');
var hebMonthNamesHex = new makeArray('&#x5E0;&#x5D9;&#x5E1;&#x5DF;', '&#x5D0;&#x5D9;&#x5D9;&#x5E8;', '&#x5E1;&#x5D9;&#x5D5;&#x5DF;', '&#x5EA;&#x5DE;&#x5D5;&#x5D6;', '&#x5DE;&#x5E0;&#x5D7;&#x5DD;&#x20;&#x5D0;&#x5D1;', '&#x5D0;&#x5DC;&#x5D5;&#x5DC;','&#x5EA;&#x5E9;&#x5E8;&#x5D9;', '&#x5D7;&#x5E9;&#x5D5;&#x5DF;', '&#x5DB;&#x5E1;&#x5DC;&#x5D5;', '&#x5D8;&#x5D1;&#x5EA;', '&#x5E9;&#x5D1;&#x5D8;','&#x5D0;&#x5D3;&#x5E8;', '&#x5D0;&#x5D3;&#x5E8;&#x20;&#x5D0;', '&#x5D0;&#x5D3;&#x5E8;&#x20;&#x5D1;');
	
//var hebDateChar = new makeArray('à', 'á', 'â', 'ã', 'ä', 'å','æ', 'ç', 'è', 'é', 'éà','éá', 'éâ', 'éã','èå', 'èæ', 'éæ', 'éç', 'éè', 'ë','ëà', 'ëá', 'ëâ','ëã', 'ëä', 'ëå', 'ëæ', 'ëç', 'ëè','ì');
var hebDateCharHex = new makeArray('&#x5D0;', '&#x5D1;', '&#x5D2;', '&#x5D3;', '&#x5D4;', '&#x5D5;','&#x5D6;', '&#x5D7;', '&#x5D8;', '&#x5D9;', '&#x5D9;&#x5D0;','&#x5D9;&#x5D1;', '&#x5D9;&#x5D2;', '&#x5D9;&#x5D3;','&#x5D8;&#x5D5;', '&#x5D8;&#x5D6;', '&#x5D9;&#x5D6;', '&#x5D9;&#x5D7;', '&#x5D9;&#x5D8;', '&#x5DB;','&#x5DB;&#x5D0;', '&#x5DB;&#x5D1;', '&#x5DB;&#x5D2;','&#x5DB;&#x5D3;', '&#x5DB;&#x5D4;', '&#x5DB;&#x5D5;', '&#x5DB;&#x5D6;', '&#x5DB;&#x5D7;', '&#x5DB;&#x5D8;','&#x5DC;');

var civMonth = ['', 'January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December'];

var weekDay = new makeArray('S', 'M', 'T', 'W', 'T', 'F', 'S');

//var hebWeekDay = new makeArray('à', 'á', 'â', 'ã', 'ä', 'å', 'ù');
var hebWeekDayHex = new makeArray('&#x5D0;', '&#x5D1;', '&#x5D2;', '&#x5D3;', '&#x5D4;', '&#x5D5;', '&#x5E9;');

function Gauss(year) {
	var a,b,c;
	var m;
	var	Mar;	// "day in March" on which Pesach falls (return value)

	a = Math.floor((12 * year + 17) % 19);b = Math.floor(year % 4);
	m = 32.044093161144 + 1.5542417966212 * a +  b / 4.0 - 0.0031777940220923 * year;
	if (m < 0) m -= 1;
	Mar = Math.floor(m);
	if (m < 0) m++;
	m -= Mar;

	c = Math.floor((Mar + 3 * year + 5 * b + 5) % 7);
	if(c == 0 && a > 11 && m >= 0.89772376543210 )
		Mar++;
	else if(c == 1 && a > 6 && m >= 0.63287037037037)
		Mar += 2;
	else if(c == 2 || c == 4 || c == 6)
		Mar++;

	Mar += Math.floor((year - 3760) / 100) - Math.floor((year - 3760) / 400) - 2;
	return Mar;
}

function civMonthLength(month, year) {
	if(month == 2)
		return 28 + leap(year);
	else if(month == 4 || month == 6 || month == 9 || month == 11)
	   return 30;
	else
		return 31;
}

function greg2heb(day, month, year)
{

	var absDate = greg2abs(day, month, year);
	
	return abs2heb(absDate);


	var d = day;
	var	m = month;
	var y = year;
	var hy;
	var pesach;
	var anchor;
	var adarType;

	m -= 2;
	 // Jan or Feb
	if (m <= 0) {m+=12;y-=1;}

	d+=Math.floor(7*m/12+30*(m-1)); // day in March
	hy=y+3760;	// get Hebrew year
	pesach=Gauss(hy);
	// before 1 Nisan
	if (d<=pesach-15) {anchor=pesach;d+=365;if(leap(y)) d++;y-=1;hy-=1;pesach=Gauss(hy);} else anchor = Gauss(hy + 1);

	d-=pesach-15;anchor-=pesach-12;y++;if(leap(y))anchor++;

	for(m = 0; m < 11; m++) {var days;if(m==7&&anchor%30==2) days=30; /* Cheshvan */ else if(m==8&&anchor%30==0) days=29; /* Kislev */ else days=30-m%2;if(d<=days)break; d-=days;}

	adarType = 0;			// plain old Adar
	if (m == 11 && anchor >= 30) {if (d > 30) {/*Adar 2*/adarType=2;d-=30;} else adarType=1;	/* Adar 1*/}

	// Tishrei or after? - then bump up year
	if(m >= 6)hy++;

	// Adar? - adjust for Adars
	//if(m == 11)	m+=adarType;

	return (d+' '+m+' '+hy);
}


function Easter(Y) {
	// based on the algorithm of Oudin
    var C = Math.floor(Y / 100);
    var N = Y - 19 * Math.floor(Y / 19);
    var K = Math.floor((C - 17) / 25);
    var I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15;
    I = I - 30*Math.floor((I / 30));
    I = I - Math.floor(I / 28) * (1 - Math.floor(I / 28) * Math.floor(29 / (I + 1)) * Math.floor((21 - N) / 11));
    var J = Y + Math.floor(Y / 4) + I + 2 - C + Math.floor(C / 4);
    J = J - 7 * Math.floor(J / 7);
    var L = I - J;
    var M = 3 + Math.floor((L + 40) / 44);
    var D = L + 28 - 31 * Math.floor(M / 4);

	var ret = new Object();
	ret[1] = M;
	ret[2] = D;
	return ret;
}

function DOW(day,month,year) {var a=Math.floor((14-month)/12);var y=year-a;var m=month+12*a-2;var d=(day+y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)+Math.floor((31*m)/12))%7;return d+1;}
function NthDOW(nth,weekday,month,year) {if (nth>0) return (nth-1)*7+1+(7+weekday-DOW((nth-1)*7+1,month,year))%7;var days=civMonthLength(month,year);return days-(DOW(days,month,year)-weekday+7)%7;}

function moadim(cday, cmonth, cyear, hday, hmonth, dow, hYear) {
	if(hmonth == TISHREI) {
		if(hday==1||hday==2) return "Rosh Hashana";if(hday==3&&dow!=7) return "Fast of Gedalia";if(hday==4&&dow==1) return "Fast of Gedalia";if(hday==10) return "Yom Kippur";if(hday>=15&&hday<=22) return "Sukkot";if(hday==23) return "Sukkot (d)";
	}
	else if(hmonth == KISLEV) {
		if(hday >= 25) return "Chanukah";
	}
	else if(hmonth == TEVET) {
		if(hday<=2) return "Chanukah";
		if(hday==3) {
			// Kislev can be malei or chaser
			if(cday==1) {cday=29;cmonth=11;}
			else if(cday==2) {cday=30;cmonth=11;}
			else cday-=3;
			var hdate=greg2heb(cday, cmonth, cyear);
			hd=eval(hdate.substring(0, hdate.indexOf(' ')));
			if(hd==29) return "Chanukah";
		}
		else if(hday==10) return "Fast of Tevet";
	}
	else if(hmonth == SHVAT) {
		if(hday==15) return "Tu b'Shvat";
	}
	else if((hmonth==ADAR_I&&!HebLeapYear(hYear)) || hmonth==ADAR_II) {
		if(hday==11&&dow==5) return "Taanit Esther";if(hday==13&&dow!=7) return "Taanit Esther";if(hday==14) return "Purim";if(hday==15) return "Shushan Purim";
	}
	else if (hmonth==ADAR_I) { /* not a leap year */
		if (hday==14) return "Purim Katan";if (hday==15) return "Shushan Purim Katan";
	}
	else if(hmonth == NISAN) {
		if(hday >= 15 && hday <= 21) return "Pesach";if(hday == 22) return "Pesach (d)";
	}
	else if(hmonth == IYYAR) {
		if(hday==14) return "Pesah sheni";if(hday==18) return "Lag B'Omer";
	}
	else if(hmonth == SIVAN) {
		if(hday==6) return "Shavuot";if(hday==7) return "Shavuot (d)";
	}
	else if(hmonth==TAMUZ) {
		if(hday==17&&dow!=7) return "Fast of Tammuz";if(hday==18&&dow==1) return "Fast of Tammuz";
	}
	else if(hmonth == AV) {
		if(hday==9&&dow!=7) return "Tisha B'Av";if(hday==10&&dow==1) return "Tisha B'Av";if(hday==15) return "Tu B'Av";
	}
	
	if (hday==30||hday==1){return "Rosh Chodesh";}
	return "";
}
//</script>