(function($)
{
	$.fn.expandingFilter = function(settings)
	{
		/*** VARIABLE DEFINITIONS ***/
		
		var $instance = this;
		var $data = null;
		
		/*** SETTINGS ***/
		
		var settings = $.extend({
			source : '/!makeandmodels.xml'
		}, settings);
		
		/*** MAIN ***/
		
		return this.each(function()
		{
			loadData($(this));
			action($(this));
		});
		
		/*** FUNCTIONS ***/
		
		function optionizeSingleArray(array)
		{
			var options = $('<select></select>');
			var option = $('<option></option>').html('Select Car Make').val('');
			option.appendTo(options);
			
			var prev_value = null;
			$(array).each(function(index,value)
			{
				if (prev_value != value)
				{
					var option = $('<option></option>').html(value).val(value);
					option.appendTo(options);
					prev_value = value;
				}
			})
			return options.html();
		}
		
		function loadData(container)
		{
			$.get(settings.source, function(data) {
				getCarMake(container,data);
				getCarModels(data);
				$data = data;
			});
		}
		
		function getCarMake(container,data)
		{
			var make = $('filter car make',data).map(function(){
				return $(this).text();
			}).get();
			loadCarMake(container,make);
		}
		
		function getCarModels(container,data,make)
		{
			var options = $('<select></select>');
			var option = $('<option></option>').html('Select Car Model').val('');
			option.appendTo(options);
			
			$models = $('filter car',data).each(function()
			{
				var listmake = $('make',this).text();
				
				if (listmake == make)
				{
					var url = $('models url',this).text();
					var model = $('models model',this).text();
					
					var option = $('<option></option>').html(model).val(url);
					option.appendTo(options);
				}
			});
			$('select[name=model]',container).html(options.html());
		}
		
		function loadCarMake(container,make){
			$('select[name=make]',container).html(optionizeSingleArray(make));
		}
		
		function action(container)
		{
			var make = $('select[name=make]',container);
			var model = $('select[name=model]',container);
			
			make.change(function()
			{
				if ($(this).val() != '')
				{
					getCarModels(container,$data,$(this).val());
				}
			});
			
			$('input',container).click(function()
			{
				if ( make.val() != '' && model.val() != '' )
				{
					var url = model.val();
					url = url.toLowerCase();
					url = url.replace(' ','-');
					url = url.replace(' ','-');
					document.location.href = '/install-adaptors-' + url + '/';
				}
			});
		};
	};
})(jQuery);
