var monthlength = [31,28,31,30,31,30,31,31,30,31,30,31,31,28,31,30,31,30,31,31,30,31,30,31,];
var monthdaystart = [,,,,,,,,,,,,,,,,,,,,,,];
var daysofweek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

function initReservationForm()
	{
		var date = new Date();
	
		var baseDate = document.getElementById("form").date_from_basedate.value;
		var baseYear = baseDate.substring(0, 4);
		var baseMonth = baseDate.substring(4, 6);
		
		var additionalMonths = 0;
		var yearsDifference =  date.getFullYear() - baseYear;
		if ( yearsDifference )
			additionalMonths = 12* yearsDifference-baseMonth;
		
		var newIndex = additionalMonths + date.getMonth();
		
		var index = document.getElementById("form").date_from_yearmonth;
		//Set the index of the month select
		index.selectedIndex = newIndex;
		
		// Get the day selectbox
		document.getElementById("form").date_from_day.selectedIndex = date.getDate() -1;
		
		SetDaysInMonth(document.getElementById("form"),'date_to');
		SetDepartureDate(document.getElementById("form"),'date_from','date_to','num_nights');
	}

function CheckArrivalDate(form,field1,field2,numdays_field)
	{
	var f1_ym_ptr,f1_d_ptr;
	eval("f1_ym_ptr = form." + field1 + "_yearmonth");

	if (f1_ym_ptr)
		{
		f1_yearmonth = parseInt(f1_ym_ptr[f1_ym_ptr.selectedIndex].value);
		eval("f1_d_ptr = form." + field1 + "_day");
		f1_day = parseInt(f1_d_ptr[f1_d_ptr.selectedIndex].value);
		}
	else
		{
		// Cannot find pointer to arrival date selector. This means that the
		// arrival date is fixed and cannot be adjusted
		SetNumDays(form,field1,field2,numdays_field);
		return;
		}

	var f2_ym_ptr,f2_d_ptr;
	eval("f2_ym_ptr = form." + field2 + "_yearmonth");
	var f2_yearmonth = parseInt(f2_ym_ptr[f2_ym_ptr.selectedIndex].value);
	eval("f2_d_ptr = form." + field2 + "_day");
	var f2_day = parseInt(f2_d_ptr[f2_d_ptr.selectedIndex].value);

	if (f1_yearmonth > f2_yearmonth || (f1_yearmonth == f2_yearmonth && f1_day >= f2_day))
		{
		//f2_ym_ptr.selectedIndex = f1_ym_ptr.selectedIndex;
		//f2_d_ptr.selectedIndex = f1_d_ptr.selectedIndex;
		//DecDate(form,f1_ym_ptr,f1_d_ptr,numdays_field);
		//SetDaysInMonth(form,field1);
		f1_ym_ptr.selectedIndex = f2_ym_ptr.selectedIndex;
		f1_d_ptr.selectedIndex = f2_d_ptr.selectedIndex;
		DecDate(form,f1_ym_ptr,f1_d_ptr,numdays_field);
		SetDaysInMonth(form,field1);
		}
	else
		{
		SetNumDays(form,field1,field2,numdays_field);
		}
	return;
	}

function CheckDepartureDate(form,field1,field2,numdays_field)
	{
	var f1_ym_ptr,f1_d_ptr;
	eval("f1_ym_ptr = form." + field1 + "_yearmonth");
	var f1_yearmonth = parseInt(f1_ym_ptr[f1_ym_ptr.selectedIndex].value);
	eval("f1_d_ptr = form." + field1 + "_day");
	var f1_day = parseInt(f1_d_ptr[f1_d_ptr.selectedIndex].value);

	var f2_ym_ptr,f2_d_ptr;
	eval("f2_ym_ptr = form." + field2 + "_yearmonth");
	var f2_yearmonth = parseInt(f2_ym_ptr[f2_ym_ptr.selectedIndex].value);
	eval("f2_d_ptr = form." + field2 + "_day");
	var f2_day = parseInt(f2_d_ptr[f2_d_ptr.selectedIndex].value);

	if (f1_yearmonth > f2_yearmonth || (f1_yearmonth == f2_yearmonth && f1_day >= f2_day))
		{
		f2_ym_ptr.selectedIndex = f1_ym_ptr.selectedIndex;
		f2_d_ptr.selectedIndex = f1_d_ptr.selectedIndex;
		IncDate(form,f2_ym_ptr,f2_d_ptr,numdays_field);
		SetDaysInMonth(form,field2);
		}
	else
		{
		SetNumDays(form,field1,field2,numdays_field);
		}
	return;
	}

function SetDepartureDate(form,field1,field2,numdays_field)
	{
	var f1_ym_ptr,f1_d_ptr;
	eval("f1_ym_ptr = form." + field1 + "_yearmonth");
	eval("f1_d_ptr = form." + field1 + "_day");

	var f2_ym_ptr,f2_d_ptr;
	eval("f2_ym_ptr = form." + field2 + "_yearmonth");
	eval("f2_d_ptr = form." + field2 + "_day");

	if (f1_ym_ptr)
		{
		f2_ym_ptr.selectedIndex = f1_ym_ptr.selectedIndex;
		f2_d_ptr.selectedIndex = f1_d_ptr.selectedIndex;
		}
	else
		{
		eval("f1_ym_ptr = form." + field1);
		
		// arrival date information is in hidden field
		f1_ym = parseFloat(f1_ym_ptr.value.substr(0,6));
		f1_d = parseFloat(f1_ym_ptr.value.substr(6,2));
		
		// Iterate through departure date until match found with arrival date
		for (i=0; i<f2_ym_ptr.options.length; i++)
			{
			if (f2_ym_ptr.options[i].value == f1_ym)
				{
				f2_ym_ptr.selectedIndex = i;
				break;
				}
			}
		f2_d_ptr.selectedIndex = f1_d-1;
		}

	IncDate(form,f2_ym_ptr,f2_d_ptr,numdays_field);
	}

function DecDate(form,ym_ptr,day_ptr,numdays_field)
	{
	var yearmonth = ym_ptr[ym_ptr.selectedIndex].value;
	var day = parseInt(day_ptr[day_ptr.selectedIndex].value);

	var numday_ptr;
	eval("numdays_ptr = form." + numdays_field);
	var numdays = parseInt(numdays_ptr.options[numdays_ptr.selectedIndex].value);

	var numdays_rem = numdays;

	var loopcnt;
	for (loopcnt = 0; loopcnt < 30; loopcnt++)
		{
		if (numdays_rem < day)
			{
			day_ptr.selectedIndex -= numdays_rem;
			return;
			}
	
		numdays_rem -= day;
		ym_ptr.selectedIndex -= 1;
		day_ptr.selectedIndex = monthlength[ym_ptr.selectedIndex];
		day = monthlength[ym_ptr.selectedIndex];
		}
	}

function IncDate(form,ym_ptr,day_ptr,numdays_field)
	{
	var yearmonth = ym_ptr[ym_ptr.selectedIndex].value;
	var day = parseInt(day_ptr[day_ptr.selectedIndex].value);

	var numday_ptr;
	eval("numdays_ptr = form." + numdays_field);
	var numdays = parseInt(numdays_ptr.options[numdays_ptr.selectedIndex].value);

	var numdays_rem = numdays;

	var loopcnt;
	for (loopcnt = 0; loopcnt < 30; loopcnt++)
		{
		if (monthlength[ym_ptr.selectedIndex] >= (day + numdays_rem))
			{
			day_ptr.selectedIndex += numdays_rem;
			return;
			}
	
		numdays_rem -= (monthlength[ym_ptr.selectedIndex]+1 - day);
		ym_ptr.selectedIndex += 1;
		day_ptr.selectedIndex = 0;
		day = 1;
		}
	}

function SetNumDays(form,field1,field2,numdays_field)
	{
	var numdays = CalculateNumDays(form,field1,field2);

	var numday_ptr;
	eval("numdays_ptr = form." + numdays_field);
	numdays_ptr.selectedIndex = numdays-1;
	}

function SetDaysInMonth(form,fieldname)
	{
	var date_si;
	eval("date_si = form." + fieldname + "_yearmonth.selectedIndex");

	var numdays = monthlength[date_si];
	//alert("days in " + fieldname + " = " + numdays);

	for (var loop=29; loop<32; loop++)
		{
		if (loop<=numdays)
			{
			eval("form." + fieldname + "_day.options[loop-1].text = loop.toString()");
			}
		else
			{
			eval("form." + fieldname + "_day.options[loop-1].text = ''");
			}
		}
	}

function CalculateNumDays(form,field1,field2)
	{
	var f1_yearmonth_si,f1_yearmonth,f1_day_si,f1_day;

	eval("f1_yearmonth_ptr = form." + field1 + "_yearmonth");
	if (f1_yearmonth_ptr)
		{
		eval("f1_yearmonth_si = form." + field1 + "_yearmonth.selectedIndex");
		eval("f1_yearmonth = parseInt(form." + field1 + "_yearmonth[f1_yearmonth_si].value)");
		eval("f1_day_si = form." + field1 + "_day.selectedIndex");
		eval("f1_day = parseInt(form." + field1 + "_day[f1_day_si].value)");
		}
	else
		{
		eval("f1_ym_ptr = form." + field1);
		f1_yearmonth = parseInt(f1_ym_ptr.value.substr(0,6));
		//f1_day = parseInt(f1_ym_ptr.value.substr(6,2));
		f1_day = parseFloat(f1_ym_ptr.value.substr(6,2));
		}

	var f2_yearmonth_si,f2_yearmonth,f2_day_si,f2_day;
	eval("f2_yearmonth_ptr = form." + field2 + "_yearmonth");
	f2_yearmonth_si = f2_yearmonth_ptr.selectedIndex;
	f2_yearmonth = parseInt(f2_yearmonth_ptr[f2_yearmonth_si].value);

	eval("f2_day_si = form." + field2 + "_day.selectedIndex");
	eval("f2_day = parseInt(form." + field2 + "_day[f2_day_si].value)");

	if (f2_yearmonth < f1_yearmonth || (f2_yearmonth == f1_yearmonth && f2_day <= f1_day))
		{
		return 0;
		}

	if (!f1_yearmonth_si)
		{
		// Field 1 does not exist, therefore Field 1 does not  have a select box
		// of yearmonth values, therefore use the Field 2 select box values to set f1_yearmonth_si
		for (i=0; i<f2_yearmonth_ptr.options.length; i++)
			{
			if (f2_yearmonth_ptr.options[i].value == f1_yearmonth)
				{
				f1_yearmonth_si = i;
				break;
				}
			}
		}

	var num_days = 0
	var loopcnt = 0;
	while(f1_yearmonth <= f2_yearmonth && loopcnt < 30)
		{
		if (f2_yearmonth == f1_yearmonth)
			{
			num_days += f2_day - f1_day;
			break;
			}

		num_days += monthlength[f1_yearmonth_si] - f1_day;

		f1_day = 0;
		f1_yearmonth_si++;
		//f1_yearmonth++;
		//eval("f1_yearmonth = parseInt(form." + field1 + "_yearmonth[f1_yearmonth_si].value)");

		f1_yearmonth++;
		if ((f1_yearmonth % 100) > 12)
			{
			f1_yearmonth += 100;
			f1_yearmonth = parseInt(f1_yearmonth/100)*100 + 1;
			}

		loopcnt++;
		}

	return num_days;
	}
