var strBrowser = navigator.appName;var strVersion = navigator.appVersion.substring(0,4);strPlatform ="Win"if ((navigator.appVersion.indexOf("Mac") > -1)){;strPlatform ="Mac";};var GREG_SDN_OFFSET = 32045, DAYS_PER_5_MONTHS = 153, DAYS_PER_4_YEARS = 1461, DAYS_PER_400_YEARS = 146097;var HALAKIM_PER_HOUR = 1080, HALAKIM_PER_DAY = 25920, HALAKIM_PER_LUNAR_CYCLE = ((29 * HALAKIM_PER_DAY) + 13753), HALAKIM_PER_METONIC_CYCLE = (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7));var HEB_SDN_OFFSET = 347997, NEW_MOON_OF_CREATION = 31524, NOON = (18 * HALAKIM_PER_HOUR), AM3_11_20 = ((9 * HALAKIM_PER_HOUR) + 204), AM9_32_43 = ((15 * HALAKIM_PER_HOUR) + 589);var SUN = 0, MON = 1, TUES = 2, WED = 3, THUR = 4, FRI = 5, SAT = 6;hebrewMonth = 0, hebrewDate = 0, hebrewYear = 0, metonicCycle = 0, metonicYear = 0, moladDay = 0, moladHalakim = 0;var gWeekday = new weekdayarr("sun","mon","tues","wednes","thurs","fri","satur");var gMonth = new gregmontharr("January","February","March","April","May","June","July","August","September","October","November","December");var hMonth = new hebrewmontharr("Tishri","Heshvan","Kislev","Tevet","Shevat","AdarI","AdarII","Nisan","Iyyar","Sivan","Tammuz","Av","Elul");var mpy = new monthsperyeararr(12,12,13,12,12,13,12,13,12,12,13,12,12,13,12,12,13,12,13);var dext = "th";function weekdayarr(d0,d1,d2,d3,d4,d5,d6) {	this[0] = d0; this[1] = d1; this[2] = d2; this[3] = d3;	this[4] = d4; this[5] = d5; this[6] = d6;}function gregmontharr(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11) {	this[0] = m0; this[1] = m1; this[2] = m2; this[3] = m3;	this[4] = m4; this[5] = m5; this[6] = m6; this[7] = m7;	this[8] = m8; this[9] = m9; this[10] = m10; this[11] = m11;}function hebrewmontharr(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13) {	this[0] = m0; this[1] = m1; this[2] = m2; this[3] = m3;	this[4] = m4; this[5] = m5; this[6] = m6; this[7] = m7;	this[8] = m8; this[9] = m9; this[10] = m10; this[11] = m11;	this[12] = m12; this[13] = m13;}function monthsperyeararr(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18) {	this[0] = m0; this[1] = m1; this[2] = m2; this[3] = m3;	this[4] = m4; this[5] = m5; this[6] = m6; this[7] = m7;	this[8] = m8; this[9] = m9; this[10] = m10; this[11] = m11;	this[12] = m8; this[13] = m13; this[14] = m14; this[15] = m15;	this[16] = m16; this[17] = m17; this[18] = m18;}function displayWeekday() {	document.writeln(gWeekday[pass.getDay()] + "day.");}function getDateExtension(TheDate) {	dext = "th";	if (TheDate == 1 || TheDate == 21 || TheDate == 31) dext="st";	if (TheDate == 2 || TheDate == 22 || TheDate == 32) dext="nd";}function displayGregorianDate() {	getDateExtension(pass.getDate());	if ((strBrowser == 'Netscape') && (strVersion > 4.49)) dw=gMonth[pass.getMonth()] + ", " + pass.getDate() + dext + ". " + (pass.getYear()+1900) + ".";	else dw=gMonth[pass.getMonth()] + ", " + pass.getDate() + dext + ". " + (pass.getYear()+1900-1900) + ".";	if ((navigator.appName.indexOf("Explorer") > -1)&&(strVersion < 4.0) ) dw=gMonth[pass.getMonth()] + ", " + pass.getDate() + dext + ". " + (pass.getYear()+1900) + ".";	document.writeln(dw);}function displayHebrewDate() {	getDateExtension(hebrewDate);	if(hebrewDate != 0 && hebrewMonth != 0 && hebrewYear != 0) document.writeln(hMonth[hebrewMonth-1] + ", " + hebrewDate + dext + ". " + hebrewYear + ".");}function GregorianToSdn(inputYear,inputMonth,inputDay) {	var year = 0, month = 0, sdn;	/* Make year a positive number. */	if ((strBrowser == 'Netscape') && (strVersion >4.49)){theoffset=0} else {theoffset=1900}	if((navigator.appName.indexOf("Explorer")> -1)&&(strVersion < 4.0) ){theoffset=0}	if (inputYear < 0){year = inputYear + 4801-theoffset;} else {year = inputYear + 4800-theoffset;}	/* Adjust the start of the year. */	if (inputMonth > 2) {month = inputMonth - 3;} else {month = inputMonth + 9; year--;}	sdn = Math.floor((Math.floor(year / 100) * DAYS_PER_400_YEARS) / 4);	sdn += Math.floor(((year % 100) * DAYS_PER_4_YEARS) / 4);	sdn += Math.floor((month * DAYS_PER_5_MONTHS + 2) / 5);	sdn += inputDay - GREG_SDN_OFFSET;	return sdn;}function SdnToHebrew(sdn) {	var inputDay, tishri1 = 0, tishri1After = 0, yearLength = 0,	inputDay = sdn - HEB_SDN_OFFSET;	FindTishriMolad(inputDay);	tishri1 = Tishri1(metonicYear,moladDay,moladHalakim);	if (inputDay >= tishri1) {		/* It found Tishri 1 at the start of the year. */		hebrewYear = metonicCycle * 19 + metonicYear + 1;		if (inputDay < tishri1 + 59) {			if (inputDay < tishri1 + 30) {				hebrewMonth = 1;				hebrewDate = inputDay - tishri1 + 1;			} else {				hebrewMonth = 2;				hebrewDate = inputDay - tishri1 - 29;			}			return;		}		/* We need the length of the year to figure this out, so find Tishri 1 of the next year. */		moladHalakim += HALAKIM_PER_LUNAR_CYCLE * mpy[metonicYear];		moladDay += Math.floor(moladHalakim / HALAKIM_PER_DAY);		moladHalakim = moladHalakim % HALAKIM_PER_DAY;		tishri1After = Tishri1((metonicYear + 1) % 19,moladDay,moladHalakim);	} else {		/* It found Tishri 1 at the end of the year. */		hebrewYear = metonicCycle * 19 + metonicYear;		if (inputDay >= tishri1 - 177) {			/* It is one of the last 6 months of the year. */			if (inputDay > tishri1 - 30) {				hebrewMonth = 13;				hebrewDate = inputDay - tishri1 + 30;			} else if (inputDay > tishri1 - 60) {					hebrewMonth = 12;					hebrewDate = inputDay - tishri1 + 60;				} else if (inputDay > tishri1 - 89) {						hebrewMonth = 11;						hebrewDate = inputDay - tishri1 + 89;					} else if (inputDay > tishri1 - 119) {							hebrewMonth = 10;							hebrewDate = inputDay - tishri1 + 119;						} else if (inputDay > tishri1 - 148) {								hebrewMonth = 9;								hebrewDate = inputDay - tishri1 + 148;							} else {								hebrewMonth = 8;								hebrewDate = inputDay - tishri1 + 178;							}			return;		} else {			if (mpy[(hebrewYear - 1) % 19] == 13) {				hebrewMonth = 7;				hebrewDate = inputDay - tishri1 + 207;				if (hebrewDate > 0) return;				hebrewMonth--;				hebrewDate += 30;				if (hebrewDate > 0) return;				hebrewMonth--;				hebrewDate += 30;			} else {				hebrewMonth = 6;				hebrewDate = inputDay - tishri1 + 207;				if (hebrewDate > 0) return;				hebrewMonth--;				hebrewDate += 30;			}			if (hebrewDate > 0) return;			hebrewMonth--;			hebrewDate += 29;			if (hebrewDate > 0) return;			/* We need the length of the year to figure this out, so find Tishri 1 of this year. */			tishri1After = tishri1;			FindTishriMolad(moladDay - 365);			tishri1 = Tishri1(metonicYear,moladDay,moladHalakim);		}	}	yearLength = tishri1After - tishri1;	moladDay = inputDay - tishri1 - 29;	if (yearLength == 355 || yearLength == 385) {		/* Heshvan has 30 days. */		if (moladDay <= 30) {			hebrewMonth = 2;			hebrewDate = moladDay;			return;		}		moladDay -= 30;	} else {		/* Heshvan has 29 days. */		if (moladDay <= 29) {			hebrewMonth = 2;			hebrewDate = moladDay;			return;		}		moladDay -= 29;	}	/* It has to be Kislev. */	hebrewMonth = 3;	hebrewDate = moladDay;}function FindTishriMolad(inputDay) {	/* Estimate the metonic cycle number. */	/* Note that this may be an under estimate because there are 6939.6896 days in a metonic cycle not 6940, but it will never be an over estimate. */	/* The loop below will correct for any error in this estimate. */	metonicCycle = Math.floor((inputDay + 310) / 6940);	/* Calculate the time of the starting molad for this metonic cycle. */	MoladOfMetonicCycle();	/* If the above was an under estimate, increment the cycle number until the correct one is found. */	/* For modern dates this loop is about 98.6% likely to not execute, even once, because the above estimate is really quite close. */	while (moladDay < inputDay - 6940 + 310) {		metonicCycle++;		moladHalakim += HALAKIM_PER_METONIC_CYCLE;		moladDay += Math.floor(moladHalakim / HALAKIM_PER_DAY);		moladHalakim = moladHalakim % HALAKIM_PER_DAY;	}	/* Find the molad of Tishri closest to this date. */	for (metonicYear = 0; metonicYear < 18; metonicYear++) {		if (moladDay > inputDay - 74) break;		moladHalakim += HALAKIM_PER_LUNAR_CYCLE * mpy[metonicYear];		moladDay += Math.floor(moladHalakim / HALAKIM_PER_DAY);		moladHalakim = moladHalakim % HALAKIM_PER_DAY;	}}function MoladOfMetonicCycle() {	var r1,r2,d1,d2;	/* Start with the time of the first molad after creation. */	r1 = NEW_MOON_OF_CREATION;	/* Calculate gMetonicCycle * HALAKIM_PER_METONIC_CYCLE. */	/*  The upper 32 bits of the result will be in r2 and the lower 16 bits will be in r1. */	r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE&0xFFFF);	r2 = r1 >> 16;	r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16)&0xFFFF);	/* Calculate r2r1 / HALAKIM_PER_DAY. */	/* The remainder will be in r1, the upper 16 bits of the quotient will be in d2 and the lower 16 bits will be in d1. */	d2 = Math.floor(r2 / HALAKIM_PER_DAY);	r2 -= d2 * HALAKIM_PER_DAY;	r1 = (r2 << 16) | (r1&0xFFFF);	d1 = Math.floor(r1 / HALAKIM_PER_DAY);	r1 -= d1 * HALAKIM_PER_DAY;	moladDay = (d2 << 16) | d1;	moladHalakim = r1;}function Tishri1(metonicYear,moladDay,moladHalakim) {	var tishri1 = moladDay;	var dow = tishri1 % 7;	var leapYear =  metonicYear == 2 || metonicYear == 5 || metonicYear == 7 || metonicYear == 10 || metonicYear == 13 || metonicYear == 16 || metonicYear == 18;	var lastWasLeapYear =   metonicYear == 3 || metonicYear == 6 || metonicYear == 8 || metonicYear == 11 || metonicYear == 14 || metonicYear == 17 || metonicYear == 0;	/* Apply rules 2, 3 and 4. */	if ((moladHalakim >= NOON) || ((!leapYear) && dow == TUES && moladHalakim >= AM3_11_20) || (lastWasLeapYear && dow == MON && moladHalakim >= AM9_32_43)) {		tishri1++;		dow++;		if (dow == 7) dow = 0;	}	/* Apply rule 1 after the others because it can cause an additional delay of one day. */	if (dow == WED || dow == FRI || dow == SUN) tishri1++;	return tishri1;}