jQuery(document).ready(function()
{
	var handlers = {};
	handlers.init = function()
	{
		jQuery('#year').html('<option value="0">-- Loading --</option>').attr('disabled', true).parent().show();
		jQuery('#make').empty().parent().hide();
		jQuery('#model').empty().parent().hide();
		jQuery('#variant').empty().parent().hide();		
		jQuery('#submit').attr('disabled', true);
		
		jQuery.getJSON(vehicleDataUrl, function(data)
		{
			jQuery('#year').removeOption(/./);
			if(data.length > 1)
			{
				jQuery('#year').addOption("0", "-- Select Year --", true);
			}
			for(key in data)
			{
				jQuery('#year').addOption(data[key], data[key], false);
			}
			if(data.length == 1)
			{				
				jQuery('#year').change();
			}
			jQuery('#year').attr('disabled', false).parent().show();
		});
	}
	
	handlers.yearChange = function(data)
	{
		var year = jQuery('#year').val();

		jQuery('#make').empty().parent().hide();
		jQuery('#model').empty().parent().hide();
		jQuery('#variant').empty().parent().hide();
		jQuery('#submit').attr('disabled', true);
		
		if(year !== "0")
		{
			var url = vehicleDataUrl + '/' + year;
			
			jQuery('#make').removeOption(/./).addOption("0", "-- Loading --").attr('disabled', true).parent().show();
			jQuery.getJSON(url, function(data)
			{
				jQuery('#make').removeOption(/./);
				if(data.length > 1)
				{
					jQuery('#make').addOption("0", "-- Select Make --", true);
				}
				for(key in data)
				{
					jQuery('#make').addOption(data[key], data[key], false);
				}
				if(data.length == 1)
				{				
					jQuery('#make').change();
				}
				jQuery('#make').attr('disabled', false).parent().show();
			});
		}
	}

	handlers.makeChange = function(data)
	{
		var year = jQuery('#year').val();
		var make = jQuery('#make').val();
		
		jQuery('#model').empty().parent().hide();
		jQuery('#variant').empty().parent().hide();
		jQuery('#submit').attr('disabled', true);

		if(make !== "0")
		{
			var url = vehicleDataUrl + '/' + year + '-' + make;
			
			jQuery('#model').removeOption(/./).addOption("0", "-- Loading --").attr('disabled', true).parent().show();
			jQuery.getJSON(url, function(data)
			{
				jQuery('#model').removeOption(/./);
				if(data.length > 1)
				{
					jQuery('#model').addOption("0", "-- Select Model --", true);
				}
				for(key in data)
				{
					jQuery('#model').addOption(data[key], data[key], false);
				}
				if(data.length == 1)
				{				
					jQuery('#model').change();
				}
				jQuery('#model').attr('disabled', false).parent().show();
			});
		}
	}	

	handlers.modelChange = function(data)
	{
		var year = jQuery('#year').val();
		var make = jQuery('#make').val();
		var model = jQuery('#model').val();
		
		jQuery('#variant').empty().parent().hide();
		jQuery('#submit').attr('disabled', true);

		if(model !== "0")
		{
			var url = vehicleDataUrl + '/' + year + '-' + make + '-' + model;
			
			jQuery('#variant').removeOption(/./).addOption("0", "-- Loading --").attr('disabled', true).parent().show();
			jQuery.getJSON(url, function(data)
			{
				jQuery('#variant').removeOption(/./);
				if(data.length > 1)
				{
					jQuery('#variant').addOption("0", "-- Select Variant --", true);
				}
				for(key in data)
				{
					jQuery('#variant').addOption(data[key], data[key], false);
				}
				if(data.length == 1)
				{				
					jQuery('#variant').change();					
				}
				jQuery('#variant').attr('disabled', false).parent().show();

				if(data.length == 0 || (data.length == 1 && data[0] == ""))
				{
					jQuery('#variant').parent().hide();
				}
			});
		}
	}
	
	handlers.variantChange = function(data)
	{
		var year = jQuery('#year').val();
		var make = jQuery('#make').val();
		var model = jQuery('#model').val();
		var variant = jQuery('#variant').val();
		
		if(variant === "0")
		{
			jQuery('#submit').attr('disabled', true);
		}
		else
		{
			jQuery('#submit').attr('disabled', false);
		}
	}
	
	jQuery('#year').change(handlers.yearChange);
	jQuery('#make').change(handlers.makeChange);	
	jQuery('#model').change(handlers.modelChange);
	jQuery('#variant').change(handlers.variantChange);
	
	handlers.init();	
});
