$(function()
{
	var real_field = $("#departure");
	var real_field_name = real_field.attr("name");
	var real_field_id = real_field.attr("id");
	
	real_field.attr("name", "ajax_dummy_" + real_field_name );
	real_field.attr("id", "ajax_dummy_" + real_field_name );
	
	var hidden_field =
		$('<input type="hidden" name="' + real_field_name + '" value="' + real_field.val() + '" id="' + real_field_id + '" />')
		.insertAfter(real_field);
	
	var date = new Date();
	date.setDate(date.getDate() + 3);
	
	jQuery("#datepicker").click(function(){
		return false;
	});
	
	jQuery.datepicker.setDefaults(jQuery.extend({showMonthAfterYear: false}, jQuery.datepicker.regional['{language}']));
	
	jQuery("#datepicker").datepicker({
		dateFormat: 'yy-mm-dd',
		showOn: 'button',
		minDate: date, // Disable dates before today.
		firstDay:1, // Start day in Monday.
		buttonImage: '/images/search_form/calendar.gif',
		buttonImageOnly: true,
		buttonText: jQuery("#datepicker").attr('title'),
		onSelect: function(dateText, inst){
			jQuery("#srhfrm_departure_date").val(jQuery(this).val());
			srhfrm_update_return(jQuery(this).closest("form"));
			set_return_date(dateText);
			
		}
	});
	
	// If a drop down only has one option in it select it by default and trigger a change event
	$('select').each(function(){
		if ($(this).find('option').length==2)
		{
			$(this).find('option').eq(1).attr('selected', 'selected').trigger('change');
		}
	});
	
	jQuery("#srhfrm_departure_date").change(function(){
		jQuery("#datepicker").val(jQuery(this).val());	
		set_return_date(jQuery(this).val());
	});
	
	
	var date = new Date();
	date.setDate(date.getDate() + 3);
	
	jQuery("#datepicker_return_date").click(function(){
		return false;
	});
	
	jQuery.datepicker.setDefaults(jQuery.extend({showMonthAfterYear: false}, jQuery.datepicker.regional['{language}']));
	jQuery("#datepicker_return_date").datepicker({
		dateFormat: 'yy-mm-dd',
		showOn: 'button',
		minDate: date, // Disable dates before today.
		firstDay:1, // Start day in Monday.
		buttonImage: '/images/search_form/calendar.gif',
		buttonImageOnly: true,
		buttonText: jQuery("#datepicker").attr('title'),
		onSelect: function(dateText, inst){
			jQuery("#srhfrm_return_date").val(jQuery(this).val());
			srhfrm_update_return(jQuery(this).closest("form"));
			
			var temp_date_from = new Date(parseISO8601(jQuery("#srhfrm_departure_date").val()));
			var temp_return_date = new Date(parseISO8601(dateText));
			
			set_duration(temp_date_from, temp_return_date);
		
	}
	});
	jQuery("#srhfrm_return_date").change(function(){
		jQuery("#datepicker_return_date").val(jQuery(this).val());
		var temp_date_from = new Date(parseISO8601(jQuery("#srhfrm_departure_date").val()));
		var temp_return_date = new Date(parseISO8601(jQuery("#srhfrm_return_date").val()));
		set_duration(temp_date_from, temp_return_date);
	});
	
	jQuery("#srhfrm_duration").change(function(){
		set_return_date(jQuery("#srhfrm_departure_date").val());
	});
	
	jQuery("#datepicker_return_date").val(jQuery('#srhfrm_return_date').val());
	

}
);

function set_return_date(date_from)
{
	var myDate = new Date(parseISO8601(date_from));
	var duration;
	// duration format before is ?-? we need only the first part
	if(jQuery("input[name$='duration']").val())
	{	
		duration = jQuery("input[name$='duration']").val().split("-");
	}
	else if(jQuery("select[name$='duration']").val())
	{
		duration = jQuery("select[name$='duration']").val().split("-");
	}
	
	
	if(duration)
	{	
		myDate.setDate(myDate.getDate() + parseInt(duration[0]));
		
		var temp_date_from = new Date(parseISO8601(date_from));
		var temp_return_date = myDate;
		
		var new_date = set_date_format(myDate);
		
		jQuery("#srhfrm_return_date").val(new_date);
		
		set_duration(temp_date_from, temp_return_date);
	}	
	
	jQuery("#datepicker_return_date").val(jQuery('#srhfrm_return_date').val());
}

function set_duration(date_from, return_date)
{
	var diff;
	var temp_date_from  = date_from;
	var temp_return_date = return_date;
	
	diff = Math.floor((temp_return_date.getTime() - temp_date_from.getTime()) / 86400000); // ms per day#
	
	if(diff > 0)
	{	
		// Fix for duration > 20
		if(diff > 20)
		{
			// Clear duration select from previous appends
			var select_length = jQuery("#srhfrm_duration option").size();
			
			for(var i=21 ; i < select_length ; i++)
			{
				jQuery("#srhfrm_duration option[value='"+i+"-"+i+"']").remove();
			}
					
			var temp_duration  = diff;
			
			for(i=21 ; i <= diff ; i++)
			{	
				jQuery('#srhfrm_duration').append('<option class="srhfrm_duration_opt" value="'+i+"-"+i+'" > '+i+'</option>');
			}
			
		}
		// Select duration
		jQuery("input[name$='duration']").val(diff+"-"+diff);
		var duration_value = diff+"-"+diff;
		
		jQuery("#srhfrm_duration option[value='"+duration_value+"']").attr('selected', 'selected');
	}	
}

function set_date_format(date)
{
	
	var curr_date = date.getDate();
	if (curr_date < 10)
	{
		curr_date = "0"+curr_date;
	}
	
	// January = 0
	var curr_month = date.getMonth();
	curr_month = curr_month+1;
	if (curr_month < 10)
	{
		curr_month = "0"+curr_month;
	}
	
	var curr_year = date.getFullYear();
	
	var new_date = curr_year + "-" + curr_month + "-" + curr_date;
	
	return new_date;
}

/**Parses string formatted as YYYY-MM-DD to a Date object.
 * If the supplied string does not match the format, an 
 * invalid Date (value NaN) is returned.
 * @param {string} dateStringInRange format YYYY-MM-DD, with year in
 * range of 0000-9999, inclusive.
 * @return {Date} Date object representing the string.
 */

function parseISO8601(dateStringInRange) 
{
    var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateStringInRange);

    if(parts) {
      month = +parts[2];
      date.setFullYear(parts[1], month - 1, parts[3]);
      if(month != date.getMonth() + 1) {
        date.setTime(NaN);
      }
    }
    return date;
}
