function addDay(date,days){
	return new Date(date.getTime() + days*24*60*60*1000);
}

function setupDatePickers(startButtonId, startHiddenId, startYearId, startMonthId, startDayId, startDisplayId, endButtonId, endHiddenId, endYearId, endMonthId, endDayId, endDisplayId, displayFormat, callback, isOwnerBooking)
{
	var startSet = {
		buttonId: startButtonId,
		hiddenId: startHiddenId,
		yearId: startYearId,
		monthId: startMonthId,
		dayId: startDayId,
		displayId: startDisplayId
	};
	var endSet = {
		buttonId: endButtonId,
		hiddenId: endHiddenId,
		yearId: endYearId,
		monthId: endMonthId,
		dayId: endDayId,
		displayId: endDisplayId
	};
	
	if ( endButtonId != null )
	{
		sets = [startSet, endSet];
	}
	else
	{
		sets = [startSet];
	}
		
//load existing dates from form into datepickers and display fields
	
	for ( i=0; i<sets.length; i++ )
	{
		set = sets[i];
		set.date = null;
		if ( $F(set.hiddenId) != '' )
		{      	      					      		
			set.date = $F(set.hiddenId).split('-');
			set.date = new Date(set.date[0], set.date[1]-1, set.date[2], 0, 0, 0, 0);
		}
	}
				
  //set up datepickers
  
	for ( i=0; i<sets.length; i++ )
	{
		set = sets[i];

		params = 
		{
			inputField  : set.hiddenId,         // ID of the input field
			ifFormat    : "%Y-%m-%d",    // the date format    
			button      : set.buttonId,       // ID of the button
			electric	: false,		//date only updates when calendar closed
			date : set.date,
			set : set,
			onUpdate : function(cal) 
			{
				if ( this.set.yearId && this.set.monthId && this.set.dayId )
				{      				
					$(this.set.yearId).selectedIndex = array_find(cal.date.getFullYear(), $(this.set.yearId).options, 'value');
					$(this.set.monthId).selectedIndex = cal.date.getMonth() + 1;
					$(this.set.dayId).selectedIndex = cal.date.getDate();
					
					if ( isOwnerBooking == undefined || isOwnerBooking != true ) 
					{
						// Ensure selected date is either today or in the future.
						var selectedDay = Math.floor( cal.date.getTime() / 86400000 );
						var today = Math.floor( ( new Date() ).getTime() / 86400000 );
						
						if ( selectedDay < today )
						{
							//alert( 'Invalid date. Please select a future date.' );
						
							$(this.set.hiddenId).value = '';
							
							var today_date = new Date();
							var tomorrow = addDay(today_date, 1);
									
							//set the day to be one day in the future from today
							$(startSet.yearId).selectedIndex = array_find(today_date.getFullYear(), $(startSet.yearId).options, 'value');
							$(startSet.monthId).selectedIndex = today_date.getMonth() + 1;
							$(startSet.dayId).selectedIndex = today_date.getDate();
							
							//check the end date comes after start date
							if ( $(endSet.yearId) != null && $(endSet.yearId).selectedIndex === 0 && $(endSet.monthId).selectedIndex === 0 && $(endSet.dayId).selectedIndex === 0 ) {
								$(endSet.yearId).selectedIndex = array_find(tomorrow.getFullYear(), $(this.set.yearId).options, 'value');
								$(endSet.monthId).selectedIndex = tomorrow.getMonth() + 1;
								$(endSet.dayId).selectedIndex = tomorrow.getDate();
							}
						}
					}
					
					//set start date to the day before end date (if empty)
					if ( $(startSet.yearId).selectedIndex === 0 && $(startSet.monthId).selectedIndex === 0 && $(startSet.dayId).selectedIndex === 0 ) {
						var previous_day = addDay(cal.date, -1);
						
						$(startSet.yearId).selectedIndex = array_find(previous_day.getFullYear(), $(startSet.yearId).options, 'value');
						$(startSet.monthId).selectedIndex = previous_day.getMonth() + 1;
						$(startSet.dayId).selectedIndex = previous_day.getDate();
					}
					
					//set end date to the day after start date (if empty)
					if ( $(endSet.yearId) != null && $(endSet.yearId).selectedIndex === 0 && $(endSet.monthId).selectedIndex === 0 && $(endSet.dayId).selectedIndex === 0 ) {
						var next_day = addDay(cal.date, 1);
						
						$(endSet.yearId).selectedIndex = array_find(next_day.getFullYear(), $(endSet.yearId).options, 'value');
						$(endSet.monthId).selectedIndex = next_day.getMonth() + 1;
						$(endSet.dayId).selectedIndex = next_day.getDate();
					}
				
					//check if both start and end date are filled
					if (	$(startSet.yearId).selectedIndex > 0 && $(startSet.monthId).selectedIndex > 0 && $(startSet.dayId).selectedIndex > 0 
							&& 
							$(endSet.yearId) != null 
							&&
							$(endSet.yearId).selectedIndex > 0 && $(endSet.monthId).selectedIndex > 0 && $(endSet.dayId).selectedIndex > 0	)
					{      	      			
						startYear = $(startSet.yearId).options[$(startSet.yearId).selectedIndex].value; 		      		
						startMonth = $(startSet.monthId).options[$(startSet.monthId).selectedIndex].value;
						startDay = $(startSet.dayId).options[$(startSet.dayId).selectedIndex].value;
						start = new Date(startYear, startMonth-1, startDay, 0, 0, 0, 0);
						
						endYear = $(endSet.yearId).options[$(endSet.yearId).selectedIndex].value; 		      		
						endMonth = $(endSet.monthId).options[$(endSet.monthId).selectedIndex].value;
						endDay = $(endSet.dayId).options[$(endSet.dayId).selectedIndex].value;
						end = new Date(endYear, endMonth-1, endDay, 0, 0, 0, 0);
						
						//check the end date comes after start date
						if ( start >= end )
						{
							var next_day = addDay(start, 1);
							//alert('End date must be later than start date.');
						
							$(endSet.hiddenId).value = '';
							if ( endSet.yearId && endSet.monthId && endSet.dayId )
							{
								//set the end date to a day after the start date
								$(endSet.yearId).selectedIndex = array_find(next_day.getFullYear(), $(endSet.yearId).options, 'value');
								$(endSet.monthId).selectedIndex = next_day.getMonth() + 1;
								$(endSet.dayId).selectedIndex = next_day.getDate();
							}
						}
						
					}
				}
				
				if ( callback != undefined )
				{
					callback();
				}
			}
		};
		
		if ( set.displayId && displayFormat )
		{
			params.displayArea = set.displayId;
			params.daFormat = displayFormat;
		} 
		
		Calendar.setup(params);
	}

}
 

function checkDayMonth(daySelectId, monthSelectId)
{
	daysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	day = $(daySelectId).options[$(daySelectId).selectedIndex].value;
	month = $(monthSelectId).options[$(monthSelectId).selectedIndex].value;
	if ( day && month && daysInMonth[parseInt(month)-1] < parseInt(day) )
	{
		alert('You have selected an invalid date.');
		$(daySelectId).selectedIndex = 0;
	}
}
