// JavaScript Document
<!-- Hide from old browsers    	
	/*
	 *	Date scripting 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,
                hebrewMonth = 0,
                hebrewDate = 0,
                hebrewYear = 0,
                metonicCycle = 0,
                metonicYear = 0,
                moladDay = 0,
                moladHalakim = 0;
        var gWeekday = new weekdayarr("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
        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","Adar","Adar II","Nisan","Iyar","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);

        getToday();
                if (gMonth[today.getMonth()] == "January") {
                var SS = 35;
                }  else
                if (gMonth[today.getMonth()] == "February") {
                var SS = 80;
                }  else
                if (gMonth[today.getMonth()] == "March") {
                var SS = 120;
                }  else
                if (gMonth[today.getMonth()] == "April") {
                var SS = 220;
                }  else
                if (gMonth[today.getMonth()] == "May") {
                var SS = 255;
                }  else
                if (gMonth[today.getMonth()] == "June") {
                var SS = 280;
                }  else
                if (gMonth[today.getMonth()] == "July") {
                var SS = 275;
                }  else
                if (gMonth[today.getMonth()] == "August") {
                var SS = 230;
                }  else
                if (gMonth[today.getMonth()] == "September") {
                var SS = 180;
                }  else
                if (gMonth[today.getMonth()] == "October") {
                var SS = 120;
                }  else
                if (gMonth[today.getMonth()] == "November") {
                var SS = 20;
                }  else
                if (gMonth[today.getMonth()] == "December") {
                var SS = 15;
                }

        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();
        }
        function displayWeekday()
        {
                getToday();
                H=today.getHours();
                M=today.getMinutes();
                //if ((((H-16)*60)+M)>=SS)  {
                //document.writeln(gWeekday[today.getDay()] + "DAY" + " " + "EVENING");
                //} else 
                document.writeln(gWeekday[today.getDay()]);
        }
        function displayGregorianDate()
        {
                getToday();
                //document.writeln(today.getDate() + " " + gMonth[today.getMonth()] + " " +  today.getFullYear());
				document.writeln(gMonth[today.getMonth()] +" " + today.getDate() + ", " +  today.getFullYear() );
        }
	
	 function displayGregorianDateReturn()
        {
                getToday();
                //document.writeln(today.getDate() + " " + gMonth[today.getMonth()] + " " +  today.getFullYear());
		//document.writeln("<img src='/images/dt/" + gMonth[today.getMonth()].toLowerCase() + ".jpg'><img src='/images/dt/" + today.getDate() + ".jpg'><img src='/images/dt/" +  today.getFullYear() + ".jpg'>");
		var gregDate =  gMonth[today.getMonth()] +   today.getDate() +   today.getFullYear() ;
		return gregDate;
        }
        
        function displayHebrewDate()
        {
                if(hebrewDate != 0 && hebrewMonth != 0 && hebrewYear != 0)
					document.writeln(hMonth[hebrewMonth-1] + " " + hebrewDate  + ", " +   hebrewYear);
                    //document.writeln(hebrewDate + " " + hMonth[hebrewMonth-1] + " " + hebrewYear);
        }
	
	function displayHebrewDateReturn()
        {
                if(hebrewDate != 0 && hebrewMonth != 0 && hebrewYear != 0) {
			var hebrewReturn;
			hebrewReturn = hMonth[hebrewMonth-1] +  hebrewDate + hebrewYear;
			return hebrewReturn;
		}
                    //document.writeln(hebrewDate + " " + hMonth[hebrewMonth-1] + " " + hebrewYear);
        }

        function GregorianToSdn(inputYear,inputMonth,inputDay)
        {
                var year = 0,
                        month = 0,
                        sdn;
                getToday();
                // 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;
                return sdn;
                }
				
				
		function SdnToHebrew(sdn)
                {
                var inputDay,
                        tishri1 = 0,
                        tishri1After = 0,
                        yearLength = 0,
                H = today.getHours();
                M = today.getMinutes();
                if ((((H-16)*60)+M)>=SS)  {
                                        //flip-over time
                                        // deleted Calendar Maven
                //inputDay = sdn - HEB_SDN_OFFSET + 1;
                inputDay = sdn - HEB_SDN_OFFSET ;

                } else 
                   {
                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;
        }


		function printDate() {
		
		displayGregorianDate();
		
		SdnToHebrew(GregorianToSdn(today.getFullYear(),today.getMonth()+1,today.getDate()));
		displayHebrewDate();
		
		}
		
		function printDateReturn() {
			var calheader = "";
			calheader += "<table style='background-color:#CCCCCC;' border='0' cellpadding='0' cellspacing='0' height='30'>";
			calheader += "<tr><td width='120' align='right' height='30' nowrap>";
			calheader += displayGregorianDateReturn();
			calheader += "</td><td width='16' valign='top'><img src='images/dt/middle_circle.jpg' alt='0' width='20' height='30' border='0'></td><td width='100' nowrap>";
			SdnToHebrew(GregorianToSdn(today.getFullYear(),today.getMonth()+1,today.getDate()));
			calheader+= displayHebrewDateReturn();
			calheader += "</td></tr></table>";
			return calheader;
		}

//  end hiding contents from old browsers  -->
