
/***************************************
 *             perpetual.js            *
 ***************************************
 * Hebrew / Gregorian date conversion  *
 ***************************************
 * History														 *
 *																		 *
 *  21/03/2005: v1.1									 *
 * Four Parshiot											 *
 *																		 *
 *  14/03/2005: v1.01									 *
 * Removed mention of Rosh Chodesh     *
 * Tishri. Compat with Holiady object. *
 *																		 *
 *  13/12/2004: v1.0									 *
 ***************************************
 * (c) Gabriel Zerbib,                 *
 *   gabriel@bumpt.net                 *
 *   http://www.bumpt.net              *
 *                                     *
 * It is strictly forbidden to use or  *
 * reproduce all or parts of this      *
 * program without author's explicit   *
 * permission.                         *
 * Commercial use of this program is   *
 * subject to purchase. Please contact *
 * the author.                         *
 ***************************************/



function buildMonth(hdate)
{
	var h = new HDate(hdate);
	h.setDay(1);
	var g = new GDate(h);

	var table = document.getElementById("tableCalendar");
	while(table.rows.length > 1)
		table.deleteRow(-1);

	var i;
	var tr, td;
	var str;
	var bShabbat, bFriday, bYomTov;
	var strParasha, strSpecialParasha;
	var strDayInfo;
	var strRoshChodesh;
	var strEvent;
	var strShabbatHour;
	var holiday = null;
	var oLastHoliday = 1;
	var nLastEventType = 0;
	var oZmanim = null;

	for(i = 1; i <= 30; ++i)
	{
		strDayInfo = "";
		strEvent = "";
		strShabbatHour = "";
		bYomTov = false;
	
		holiday = HOLIDAYS.currentHoliday(h, nLastEventType);
		
		if(holiday)
		{
			strEvent = new JEvent(holiday.type).name;
			oLastHoliday = holiday;
			nLastEventType = holiday.type;
			
			if(holiday.arrYomTov.length > 0)
				bYomTov = holiday.arrYomTov[h.minus(holiday.hStartDate)];
			else
				bYomTov = false;
		}
		else if(oLastHoliday)
		{
			++nLastEventType;
			oLastHoliday = null;
		}


		strRoshChodesh = "";
		if(i == 1)
		{
			if(h.getMonth() != HDate.TISHRI)
				strRoshChodesh = "Rosh&nbsp;'Hodesh&nbsp;";
		}
		else if(i == 30)
			strRoshChodesh = "Rosh&nbsp;'Hodesh&nbsp;" + (new HDate(h)).nextDay().MonthName();


		bShabbat = (h.getDayOfWeek() == HDate.SHABBAT);
		bFriday = (h.getDayOfWeek() == HDate.SHISHI)

		tr = table.insertRow(-1);

		if(i == 30)
			if(h.getDay() == 1)
			{
				tr.style.visibility = "hidden";
				tr.insertCell(-1).innerHTML = "&nbsp;"
				break;
			}

		strParasha = "";
		strSpecialParasha = "";
		strShabbatHour = "";
		
		if(bShabbat)
		{
			strParasha = h.getParashaName(false, true);
			strSpecialParasha = h.getSpecialParashaName(false, true);
		}

		if(bShabbat || bYomTov)
			tr.className = "Shabbat";

		if(strRoshChodesh && strEvent)
			strDayInfo = strEvent + ", " + strRoshChodesh;
		else if(strEvent)
			strDayInfo = strEvent;
		else
			strDayInfo = (strRoshChodesh ? (strRoshChodesh + '&nbsp;&nbsp;<br/>') : '') 
								 + '<span dir="rtl" style="font-size: 11pt; font-weight: bold;">' + strParasha + '</span>' 
								 + (strSpecialParasha != "" ? '<span dir="rtl" style="font-size: 11pt; font-weight: bold;"> (' + strSpecialParasha + ')</span>' : "");
								 + "&nbsp;";


		if(bFriday)
		{
			if(typeof(defaultCity) != 'undefined')
			{
				oZmanim = computeZmanim(h, defaultCity);
				strShabbatHour = formatHour(oZmanim.knissatShabbat);
			}
		}
		else if(bShabbat)
		{
			if(! oZmanim)
				oZmanim = computeZmanim(h, defaultCity);
			strShabbatHour = formatHour(oZmanim.motsaeiShabbat);
		}
		else
			oZmanim = null;

		td = tr.insertCell(-1);
		td.noWrap = true;
		td.style.textAlign = "right";
		td.innerHTML = i;
		td.style.border = "1px solid silver";

		td = tr.insertCell(-1);
		if(! strShabbatHour)
			td.innerHTML = strDayInfo;
		else
		{
			td.innerHTML = '<table style="font-size: ' + table.style.fontSize + ';" border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td>'
										 + strDayInfo + '</td><td align="right">'
										 + '<img align="absmiddle" src="../img/' + ( bFriday ? 'candles_small' : '3stars_small') + '.png" />'
										 + strShabbatHour
										 + '</td></tr></table>';
		}
		td.width = "200";

		td = tr.insertCell(-1);
		td.innerHTML = g.WeekdayNameShort();

		td = tr.insertCell(-1);
		td.noWrap = true;
		str = g.getDay();
		td.innerHTML = str;


		if(i == 1)
		{
			td = tr.insertCell(-1);
			td.rowSpan = Math.min(h.getMonthLength(), g.getMonthLength() - g.getDay() + 1);
			td.width = 1;
			td.innerHTML = "&nbsp;";
			td.style.backgroundColor = "silver";

			td = tr.insertCell(-1);
			td.noWrap = true;
			td.innerHTML = g.MonthName() + " " + g.getYear();
			td.style.backgroundColor = "white";
		}
		else if(g.getDay() == 1)
		{
			td = tr.insertCell(-1);
			td.rowSpan = h.getMonthLength() - i + 1;
			td.valign = "top";
			td.innerHTML = "&nbsp;";
			td.style.backgroundColor = "gray";

			td = tr.insertCell(-1);
			td.noWrap = true;
			td.innerHTML = g.MonthName() + " " + g.getYear();
			td.style.backgroundColor = "white";
		}


		h.nextDay();
		g.nextDay();
	}

	document.getElementById("spanCurrentMonth").innerHTML = hdate.MonthName();
	document.getElementById("spanCurrentYear").innerHTML = hdate.getYear();

	document.getElementById("spanYear").innerHTML = hdate.getYear();
	document.getElementById("spanLeap").innerHTML = hdate.LeapName();
	document.getElementById("spanType").innerHTML = hdate.YearTypeName();
	document.getElementById("spanYearLength").innerHTML = hdate.getYearLength();

}

function changeYear()
{
	document.getElementById("spanCurrentYear").style.display = "none";
	document.getElementById("inputYear").value = hdate.getYear();
	document.getElementById("inputYear").style.display = "inline";
	document.getElementById("inputYear").select();
}
function enterYear(year)
{
	document.getElementById("spanCurrentYear").style.display = "inline";
	document.getElementById("inputYear").style.display = "none";

	hdate.setYear(year)
	buildMonth(hdate);
}