
	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("úùøé","çùåï","ëñìå","èáú","ùáè","àãø","àãø á","ðéñï","àééø","ñéåï","úîåæ","àá","àìåì");
	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(y,m,d)
	{
		//if(today == null) {
			if(m<0||!d||!y)	today = new Date();
			else	today = new Date(y,m,d);
			//alert(today)
			afterSundown = (today.getHours() >= 19);
		//}
	}

	function displayWeekday()
	{
		document.writeln(gWeekday[today.getDay()] + "day");
	}

	function getFullYear(d)
	{
	    var y = d.getYear();
	    
	    if (y < 1000)
	    	y += 1900;
	   
	    return y;
	}	
	
	function displayGregorianDate()
	{
		document.writeln(gMonth[today.getMonth()] + " " + today.getDate() + ", " + getFullYear(today));
	}

	function displayHebrewDate()
	{
		if(hebrewDate != 0 && hebrewMonth != 0 && hebrewYear != 0)
			return(fHebrewDay(hebrewDate) + " á" + hMonth[hebrewMonth-1] + " " + fHebrewYear(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;
	}

function fHebrewYear(iNum){
	var sLast,sDec,sOne="",sHun, sFinal
	iNum+=""
	sHun=iNum.substr(1,1)
	sHun=(sHun==0?"":fHebrewYear.heb[sHun+"00"])
	sLast=iNum.substr(2,2)
	if(sLast!="16"&&sLast!="15"){
		sDec=iNum.substr(2,1)
		sDec=(sDec==0?"":fHebrewYear.heb[sDec+"0"])
		sOne=iNum.substr(3,1)
		sOne=(sOne==0?"":fHebrewYear.heb[sOne])
	}else{
		if(sLast=="16")sDec="èæ"
		else sDec="èå"
	}
	sFinal="ä'"+sHun+sDec+sOne
	if(sFinal.length>4) sFinal=sFinal.substr(0,sFinal.length-1)+"\""+sFinal.substr(sFinal.length-1,1)
	sFinal=sFinal.replace(/ô$/,"ó").replace(/ö$/,"õ").replace(/ð$/,"ï").replace(/ë$/,"ê").replace(/î$/,"í")
	return(sFinal)
}
fHebrewYear.heb={ 
     1:"à",      2:"á",      3:"â",      4:"ã",      5:"ä",      6:"å",     7: "æ",      8:"ç",      9:"è", 
     10:"é",      20:"ë",      30:"ì",      40:"î",      50:"ð",      60:"ñ",      70:"ò",      80:"ô", 
     90:"ö",      100:"÷",      200:"ø",      300:"ù",      400:"ú" ,	500:"ú÷",	600:"úø",	700:"úù",	800:"úú",	900:"úú÷"
} 

function fHebrewDay(iNum){
	var sLast,sDec="",sOne="", sFinal
	iNum+=""

	if(iNum!="16"&&iNum!="15"){
		if(iNum.length==2){
			sDec=iNum.substr(0,1)
			sDec=(sDec==0?"":fHebrewDay.heb[sDec+"0"])
			sOne=iNum.substr(1,1)
			sOne=(sOne==0?"":fHebrewDay.heb[sOne])
		}else{
			sOne=iNum.substr(0,1)
			sOne=(sOne==0?"":fHebrewDay.heb[sOne])
		}
	}else{
		if(iNum=="16")sDec="èæ"
		else sDec="èå"
	}
	sFinal=sDec+sOne
	if(sFinal.length>1) sFinal=sFinal.substr(0,sFinal.length-1)+"\""+sFinal.substr(sFinal.length-1,1)
	if(sFinal.length==1) sFinal+="'"
	return(sFinal)
}
fHebrewDay.heb={ 
     1:"à",      2:"á",      3:"â",      4:"ã",      5:"ä",      6:"å",     7: "æ",      8:"ç",      9:"è", 
     10:"é",      20:"ë",      30:"ì"
} 


function fGetHebrewDate(oElemID,sDate){
	//try{
		var HD
		var arr=sDate.split("/")
		getToday(arr[2],arr[1]-1,arr[0]);
		SdnToHebrew(GregorianToSdn(getFullYear(today),today.getMonth()+1,today.getDate()));
		HD=displayHebrewDate()
		if(oElemID) document.getElementById(oElemID).innerHTML=HD
		return HD;
	//catch(e){}
}

function fillSpan(spnId, sDate){
	document.getElementById(spnId).innerHTML=fGetHebrewDate(sDate)
}

function GetWeekParasha(val){		
	//document.write("/IncFiles/WP.asp?sDate="+val)
	doAjaxRequest("/ajaxFiles/WP.asp", {sDate:val,Lang:0},{
					method:"GET",
					onFailure:ajaxFailure,
					onSuccess:WPSuccess
				});

}
function WPSuccess(oReq){
	try{
		var xml = oReq.responseXML, oDoc = xml.documentElement, oNodes= oDoc.childNodes
		//var siteNode = oDoc.selectNodes("//result")
		var siteNode = xml.selectSingleNode( "//result/text()").nodeValue;
		document.getElementById("oWP").innerHTML=siteNode;
		//document.data.WP.value=siteNode.item(0).text;
	}catch(e){}
}
function ajaxFailure(){
	alert("Error occured")
}

