		$(function()
		{
			
			// initialise the "Select date" link
			$('#date_pick')
				.datePicker(
					// associate the link with a date picker
					{
						createButton:false
					}
				).bind(
					// when the link is clicked display the date picker
					'click',
					function()
					{
						updateSelects($(this).dpGetSelected()[0]);
						$(this).dpDisplay();
						return false;
					}
				).bind(
					// when a date is selected update the SELECTs
					'dateSelected',
					function(e, selectedDate, $td, state)
					{
						updateSelects(selectedDate);
					}
				).bind(
					'dpClosed',
					function(e, selected)
					{
						updateSelects(selected[0]);
					}
				);

			$('#dd_pick')
				.datePicker(
					// associate the link with a date picker
					{
						createButton:false
					}
				).bind(
					// when the link is clicked display the date picker
					'click',
					function()
					{
						if ($(this).dpGetSelected()[0])
						{
							updateDeparture($(this).dpGetSelected()[0]);	
						}
						$(this).dpDisplay();
						return false;
					}
				).bind(
					// when a date is selected update the SELECTs
					'dateSelected',
					function(e, selectedDate, $td, state)
					{
						updateDeparture(selectedDate);
					}
				).bind(
					'dpClosed',
					function(e, selected)
					{
						updateDeparture(selected[0]);
					}
				);
				
			var updateSelects = function (selectedDate)
			{
				selectedDate = new Date(selectedDate);
				
				var d = selectedDate.getDate();
				var m = selectedDate.getMonth();
				var y = selectedDate.getFullYear();
			
				($('#ad')[0]).selectedIndex = d;
				($('#am')[0]).selectedIndex = m + 1;
							

				// Now follows a check to compare arrival and departure dates
				// It updates the departure date if the current departure date is before the arrival
				var selectedDeparture;
				var newDeparture;				
				var currentDeparture = $('#dd_pick').dpGetSelected()[0];
				
				if (currentDeparture)
				{
					selectedDeparture = new Date(currentDeparture);

					var dd = selectedDeparture.getDate();
					var dm = selectedDeparture.getMonth();


					if ( dm < m || ( dd < d && dm == m) || ( dd == d && dm == m ))
					{
						($('#dd')[0]).selectedIndex = d+1;
						($('#dm')[0]).selectedIndex = m + 1;
						newDeparture = new Date ( y, m, d +1);
						$('#dd_pick').dpSetSelected(newDeparture.asString());
						getNDay();
						checkDDate();
					}

				}
				else
				{
					newDeparture = new Date ( y, m, d +1);
					$('#dd_pick').dpSetSelected(newDeparture.asString());				
					($('#dd')[0]).selectedIndex = d + 1;
					($('#dm')[0]).selectedIndex = m + 1;
				}

			}
			
			var updateDeparture = function (selectedDate)
			{
								
				selectedDate = new Date(selectedDate);
				var d = selectedDate.getDate();
				var m = selectedDate.getMonth();
				var y = selectedDate.getFullYear();
				($('#dd')[0]).selectedIndex = d;
				($('#dm')[0]).selectedIndex = m + 1;
		
				
				
				// Now follows a check to compare arrival and departure dates
				// to update the arrival date if the current arrival date is after the departure
				var currentArrival = $('#date_pick').dpGetSelected()[0];
				
				if (currentArrival)
				{
				
					var selectedArrival = new Date(currentArrival);

					var ad = selectedArrival.getDate();
					var am = selectedArrival.getMonth();					
					
					// When departure is set to a date before or equal to the arrival date, 
					// then update the arrival to a day before departure
			
					if (am > m  || (am == m && ad > d) || (am == m && ad == d))
					{
						($('#ad')[0]).selectedIndex = d - 1;
						($('#am')[0]).selectedIndex = m + 1;
						var newArrival = new Date(y,m,d-1);
						$('#date_pick').dpSetSelected(newArrival.asString());
						checkDDate();
						getNDay();
						
						
					}
				}		
			}
			// listen for when the selects are changed and update the picker
			$('#ad, #am')
				.bind(
					'change',
					function()
					{
						// Update datepickers on change
						var today = new Date();
						var y = today.getFullYear();					
						
						var arrival = new Date (y,$('#am').val()-1,$('#ad').val());		
						var departure = new Date (y,$('#am').val()-1,$('#dd').val());		
						
						$('#date_pick').dpSetSelected(arrival.asString());
						$('#dd_pick').dpSetSelected(departure.asString());
						updateSelects(arrival);
						

					}
				);
				
			$('#dd, #dm')
				.bind(
					'change',
					function()
					{
						// Update datepickers on change
						var today = new Date();
						var y = today.getFullYear();					
						
						var arrival = new Date (y,$('#am').val()-1,$('#ad').val());		
						var departure = new Date (y,$('#am').val()-1,$('#dd').val());		
						
						$('#dd_pick').dpSetSelected(departure.asString());
						$('#date_pick').dpSetSelected(arrival.asString());
		
						updateDeparture(departure);
					}
				);				
				
			// INITIALIZE
			
			// Init selects
			// default the position of the selects to today
			var today = new Date();
			var tomorrow = new Date(); 
			tomorrow.setDate(today.getDate() + 1); 
			($('#ad')[0]).selectedIndex = today.getDate();
			($('#am')[0]).selectedIndex = today.getMonth() + 1;
			($('#dd')[0]).selectedIndex = tomorrow.getDate();
			($('#dm')[0]).selectedIndex = tomorrow.getMonth() + 1;
			
			// Init datepicker dates
			var arr = new Date(today.getFullYear(), today.getMonth(),today.getDate());
			var dep = new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());
			$('#dd_pick').dpSetSelected(dep.asString());
			$('#date_pick').dpSetSelected(arr.asString());
			
			
			// and update the datePicker to reflect it...
			$('#ad').trigger('change');
			

		});

		function change() {
		    
			window.location='?d=' + document.getElementById('ad').value + '&m=' + document.getElementById('am').value;
		
		}
		
