<!-- to hide script contents from old browsers 


/* 
* This script was adapted from C sources written by 
* Scott E. Lee, which contain the following copyright notice: 
* 
* Copyright 1993-1995, Scott E. Lee, all rights reserved. 
* Permission granted to use, copy, modify, distribute and sell so long as 
* the above copyright and this permission statement are retained in all 
* copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. 
* 
* Bill Hastings 
* RBI Software Systems 
* bhastings@rbi.com 
*/ 
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; 
var today = null, 
afterSundown = false, 
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); 

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 getToday() 
{ 
if(today == null) { 
today = new Date(); 

afterSundown = (today.getHours() >= 19); 
} 
} 
function displayWeekday() 
{ 
document.writeln('<font color=#000000>'+gWeekday[today.getDay()] + "day"); 
} 
function getFullYear(d) 
{ 
var y = d.getYear(); 

if (y < 1000) 
y += 1900; 

return y; 
} 

function displayGregorianDate() 
{ 
document.writeln('<font color=#000000>'+gMonth[today.getMonth()] + " " + today.getDate() + ", " + getFullYear(today)); 
} 
function displayHebrewDate() 
{ 
if(hebrewDate != 0 && hebrewMonth != 0 && hebrewYear != 0) 
document.writeln('<font color=#000000>'+hebrewDate + " " + hMonth[hebrewMonth-1] + " " + hebrewYear); 
} 
function GregorianToSdn(inputYear,inputMonth,inputDay) 
{ 
var year = 0, 
month = 0, 
sdn; 
// Make year a positive number 
if (inputYear < 0) 
year = inputYear + 4801; 
else 
year = inputYear + 4800; 
// 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; 

if(afterSundown) { 
sdn++; 
} 
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; 
} 
// end hiding contents from old browsers --> 
