window.addEvent('domready', function() {
	
	// hide advanced search unless any advanced fields are filled
	var noAdvanced = $('advanced_search').getElements('input').every(function(input) {
		return ( !input.value || ( (input.type == 'radio') && !input.checked ) );
	});
	
	if(noAdvanced)
		$('advanced_search').slide('hide');
	
	
	// setup advanced search toggle link
	$('advanced_search_link').addEvent('click', function(event) {
		
		$('advanced_search').slide();

		return false;
	});
	
	// setup client-side post-processing of form data
	$('listings_search').addEvent('submit', function() {
		
		// strip non-numeric characters from monthly payment min and max
		$('payment_min').set('value', $('payment_min').get('value').replace(/[^0-9.]/g, ''));
		$('payment_max').set('value', $('payment_max').get('value').replace(/[^0-9.]/g, ''));
		
	});
	
	// setup live updating
	$('make').addEvent('change', function() {

		// disable model and years until new values loaded
		$('model').setProperty('disabled', true);
		$('year_min').setProperty('disabled', true);
		$('year_max').setProperty('disabled', true);
		
		var make = $('make').get('value');
		
		// update form
		if(!make)
		{
			resetOptions('model');

			new Request.JSON({
				url: '/json/Years'
				,method: 'get'
				,onComplete: updateYears
			}).get();
		}
		else
		{
			new Request.JSON({
				url: '/json/Models'
				,method: 'get'
				,onComplete: updateModels
			}).get({'make': make});

			new Request.JSON({
				url: '/json/Years'
				,method: 'get'
				,onComplete: updateYears
			}).get({'make': make});
		}
		
	});



	$('model').addEvent('change', function() {

		// disable years until new values loaded
		$('year_min').setProperty('disabled', true);
		$('year_max').setProperty('disabled', true);
		
		var make = $('make').get('value');
		var model = $('model').get('value');
		
		// update form
		if(!model)
		{
			new Request.JSON({
				url: '/json/Years'
				,method: 'get'
				,onComplete: updateYears
			}).get({'make': make});
		}
		else
		{
			new Request.JSON({
				url: '/json/Years'
				,method: 'get'
				,onComplete: updateYears
			}).get({'make': make, 'model': model});
		}
		
	});



	
});

	
function resetOptions(select)
{
	// save blank option
	var blankText = $(select).getFirst('option').get('text');
	
	// empty options and add blank option
	$(select).empty().grab(new Element('option', {'value': ''}).set('text', blankText));
}


function updateModels(models)
{
	// save old value
	var oldValue = $('model').get('value');

	// reset options
	resetOptions('model');
	
	// add each new option
	models.each(function(model) {
		// create option
		new Element('option', {
			'selected': (model == oldValue)
			,'value': model
		}).set('text', model).inject('model');
	});
	
	// set disabled false
	$('model').setProperty('disabled', false);
}

function updateYears(years)
{
	// save old value
	var oldValue_1 = $('year_min').get('value');
	var oldValue_2 = $('year_max').get('value');

	// reset options
	resetOptions('year_min');
	resetOptions('year_max');
	
	// add each new option
	years.each(function(year) {
		// create option
		new Element('option', {
			'selected': (year == oldValue_1)
			,'value': year
		}).set('text', year).inject('year_min');
		
		new Element('option', {
			'selected': (year == oldValue_2)
			,'value': year
		}).set('text', year).inject('year_max');
	});
	
	// set disabled false
	$('year_min').setProperty('disabled', false);
	$('year_max').setProperty('disabled', false);
}

