Ford.Vehicle.Selector = {
	loading: false,
	step_object: null,
	last_step: null,
	object: { },
	delegate: null,
		
	isVehicleLoaded: function() {
		return (!$('.js_model').attr('disabled') &&
		       (local('select_one') != $('.js_model').children('option:selected').text()));
	},
	
	setCarImage: function(obj) {
		var src;
		if(obj == null) {
			src = '/images/forms/raq/' + _F.type  + '-' + _F.lang + '-logo.png';
			$('ul.carBuilt').hide();
		} else {
			if(obj instanceof Object) {
				src = $(obj).children('option:selected').data('image');
			} else {
				src = obj;
			}
		}
		$('div.formsRightRail div.imgContainer img').attr('src', src);
		$('div.formsRightRail div.imgContainer img').error(function () {

			var vehType = $(F.Vehicle.Selector.object.model).children('option:selected').val();
			var vehTypeCode = vehType.substring(7,8);
			
			if (vehTypeCode == 'C'){
				$(this).unbind("error").attr('src', '/photos/vehicles/car_' + _F.lang + '.png');
			}
			else if (vehTypeCode == 'T' || vehTypeCode == 'V' || vehTypeCode == 'H' || vehTypeCode == 'M' || vehTypeCode == 'V' ){
				$(this).unbind("error").attr('src', '/photos/vehicles/truck_' + _F.lang + '.png');
			}
			else if (vehTypeCode == 'S'){
				var modelNameVal =$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelid');
				if (modelNameVal == '443' || modelNameVal == '1906' || modelNameVal == '442' || modelNameVal == '1721' || modelNameVal == '328'){
					$(this).unbind("error").attr('src', '/photos/vehicles/suv_' + _F.lang + '.png');
				}
				else{
					$(this).unbind("error").attr('src', '/photos/vehicles/crossover_' + _F.lang + '.png');
				}
			}
			else{
				$(this).unbind("error").attr('src', '/photos/vehicles/suv_' + _F.lang + '.png');
			}
		});
		$('div.formsRightRail div.imgContainer').addClass('carImg');
	},
	
	setCarLabel: function(obj) {
		if($(obj).children('option:selected').data('desc') != undefined) {
			$('div.formsRightRail ul.carBuilt span.desc').text(
				$(obj).children('option:selected').data('desc'));
		}
		
		var year = $(F.Vehicle.Selector.object.year).children('option:selected').val();
		var model = $(F.Vehicle.Selector.object.model).children('option:selected');
		var engine = $(F.Vehicle.Selector.object.engine).children('option:selected');
		var trans = $(F.Vehicle.Selector.object.trans).children('option:selected');
		
		if (_F.lang == "en") {
			$('div.formsRightRail ul.carBuilt h6.car').text(year + ' ' + model.text());
		} else {
			$('div.formsRightRail ul.carBuilt h6.car').text(model.text() + ' ' + year);
		}
		
		if($(F.Vehicle.Selector.object.trans).is(":visible")) {
			$('div.formsRightRail ul.carBuilt span.trans').text(trans.text());
		} else {
			$('div.formsRightRail ul.carBuilt span.trans').text('');
		}
		
		if($(F.Vehicle.Selector.object.engine).is(":visible")) {
			$('div.formsRightRail ul.carBuilt span.engine').text(engine.text());
		} else {
			$('div.formsRightRail ul.carBuilt span.engine').text('');
		}
		
		$('ul.carBuilt').show();
	},
	
	fieldset: function(name, array) {
		var set = $('<fieldset>').attr('id', name).addClass('last');
		var label = $('<label>').append(local('label_' + name));
		$(set).append(label);
		
		$.each(array, function (key, object) {
			$(set).append(object);
		});
		return set;
	},
	
	load: function(options) {
		F.Vehicle.Selector.clean(options.name);
		
		var span;
		if (_F.type === "li") {
			span = $('<span>').attr('class', 'small-loader').append($('<img>').attr('src', '/images/ajax-loader-li.gif'));
		} else {
			span = $('<span>').attr('class', 'small-loader').append($('<img>').attr('src', '/images/ajax-loader.gif'));			
		};
		
		var select;
		if ($('.js_' + options.name + ':first').length > 0) {
			select = $('.js_' + options.name + ':first');
			$(select).children().remove();
		} else {
			select = $('<select>').css('display', 'inline');
			$(select).hide();
		}
		
		var selectOptions = {};
		selectOptions.select = select;
		selectOptions.auto_select = true;
		if(options.auto_select != undefined) {
			selectOptions.auto_select = options.auto_select;
		}
	
		selectOptions.selected = options.selected;
		selectOptions.selector = options.selector;
		if(options.json == undefined) {
			var path = '';
			$.each(options.array, function(key, item) {
				path += '/' + item + '/' + $(eval('F.Vehicle.Selector.object.' + item)).children('option:selected').val();
			});
			
			var url = _F.root + '/' + _F.lang + '/' + _F.type + path + '/' + options.name + '.json';
			if(options.url != undefined) {
				url = options.url;
			}
			
			$.getJSON(url, function(data) {
				$(select).data('block', 'true');
				selectOptions.data = eval('data.' + options.name);
				Ford.Vehicle.Selector.updateSelect(selectOptions);
				$(select).show();
				$(select).data('block', 'false');
			});	
		} else {
			selectOptions.data = options.json;
			Ford.Vehicle.Selector.updateSelect(selectOptions);
			$(select).show();
		}
		
		if($('.js_' + options.name + ':first').length == 0) {
			var set = F.Vehicle.Selector.fieldset(options.name, [span, select]);
			$(F.Vehicle.Selector.object.parent).append(set);
		}
		
		return select;
	},
	
	clean: function(name) {
		// Reset and hide the color panel.
		$('ul.colorSwatches').slideUp('slow');
		$('ul.colorSwatches span.color_name').text('');
		$('ul.colorSwatches').children('li.js_swatch').remove();

		var items = ['trans', 'trim', 'bed', 'engine', 'drive', 'body', 'model', 'year'];
		$.each(items, function(key, item) {
			$('#' + item).remove();
			$('.js_' + item ).attr('disabled', 'disabled');
			$('.js_' + item + ' option').remove();
			$('.js_' + item).removeClass('error');
			if(item == name) {
				return false;
			}
		});
	},

	updateSelect : function(options) {
		var isSelect = false;
		$(options.select).append($('<option>').attr('value', '').append(local('select_one')));
		$.each(options.data, function(key, obj) {
			var option = $('<option>');
			if (typeof obj == 'string') {
				$(option).attr('value', obj);
				$(option).append(obj);
				if (obj == options.selected) {
					$(option).attr('selected', 'selected');
					$(options.select).children('option:first').attr("disabled", "disabled");
					isSelect = true;
				}
			} else {
				for (var prop in obj) {
					if (prop != 'key' && prop != 'value') {
						$(option).data(prop, obj[prop]);
					}
				}
				$(option).attr('value', obj.key);
				$(option).append(obj.value);
				if (options.selected != null) {
					var keyStr = new String(obj.key);
					if (obj[options.selector] === options.selected || keyStr.indexOf(options.selected) != -1) {
						$(option).attr('selected', 'selected');
						$(options.select).children('option:first').attr("disabled", "disabled");
						isSelect = true;
					}
				}
			}
			$(options.select).append(option);
		});
		
		if (options.data.length == 1 && options.auto_select == true) {
			$(options.select).children('option:not(:first)').attr('selected', 'selected');
			if (!isSelect) {
				$(options.select).trigger('change');
			}
		} else {
			$(options.select).removeAttr('disabled');
		}
		
		// $(options.select).children('option:first').attr("disabled", "disabled");
		$(options.select).removeAttr('disabled');
	},
	
	load_colors: function(data) {
		var trans = $(F.Vehicle.Selector.object.trans).children('option:selected').val();
		var engine = $(F.Vehicle.Selector.object.engine).children('option:selected').val();
		var trim = $(F.Vehicle.Selector.object.trim).children('option:selected').val();
		var color = $('ul.colorSwatches').data('color');
		var container = $('ul.colorSwatches');
		
		$(container).children('li.js_swatch').remove();
		$.each(data, function(key, object) {
			var li = $('<li>');
			li.addClass('js_swatch');
			li.data('name', object.name);
			li.data('code', object.code);
			li.data('image', object.image);
			li.data('state', object.state);
			li.data('rgb',  object.red + ', ' + object.green + ', ' + object.blue);
			li.data("primary", object.primary);
			li.append($('<div>')
				.addClass('colorSwatch')
					.append($('<div>')
						.addClass('swatch')
							.css('background-color', 'rgb(' + object.red + ', ' + object.green + ', ' + object.blue + ')')
								.append('<div>')
									.addClass('sheen')));

			$(container).append(li);

			$(li).bind('click', function() {
				Ford.Vehicle.Selector.setCarImage($(this).data('image'));
				$(".color_name").html($(this).data('name'));
				$('ul.carBuilt div.smlColorSwatch').css('background-color', 'rgb(' +
						$(this).data('rgb') + ')');
				$('.colorSwatches li').removeClass('selected');
				$(this).addClass('selected');
			});
			  
			$(li).bind('mouseenter', function() {
				$(".color_name").not('.formsRightRail .color_name').html($(this).data('name'));
			});
			$(li).bind('mouseleave', function() {
				$(".color_name").html($('.colorSwatches li.selected').data('name'));
			});
		});
		$('ul.colorSwatches').slideDown('slow');
		$(container).children("li[data-code='" + color + "']").trigger('click');
		
		if(Ford.Vehicle.Selector.delegate &&
		   $.isFunction(Ford.Vehicle.Selector.delegate.didLoadVehicle)) {
			Ford.Vehicle.Selector.delegate.didLoadVehicle();
		}
	},

	// This method is a temporary fix to adjust problems with the French model data. The vehicle DAO
	// is not returning F150, F250, etc, but instead F-150, F-250, etc.
	adjustModelForFrench: function(vehicle) {
		if(vehicle && (_F.lang === 'fr')) {
			if('F-150' === vehicle.model) {
				vehicle.model = 'F150';
			} else if('F-250' === vehicle.model) {
				vehicle.model = 'F250';
			} else if('F-350' === vehicle.model) {
				vehicle.model = 'F350';
			} else if('F-450' === vehicle.model) {
				vehicle.model = 'F450';
			} else if('E-150' === vehicle.model) {
				vehicle.model = 'E150';
			} else if('E-250' === vehicle.model) {
				vehicle.model = 'E250';
			} else if('E-350 Super Duty' === vehicle.model) {
				vehicle.model = 'E350 Super Duty';
			}
			return vehicle;
		} else {
			return vehicle;
		}
	},

	load_vehicle: function(acode, type) {
		Ford.Vehicle.Selector.clean('body');
		
		var state = Ford.Common.getParam('state');
		if(state == '') {
			state = null;
		}

		var vehicle = Ford.Vehicle.Selector.adjustModelForFrench(Ford.Vehicle.get(acode, true, state));
		$('ul.colorSwatches').data('color' , vehicle.primaryExteriorColor);
		$('.js_body, .js_drive, .js_engine, .js_bed, .js_trim, .js_trans').attr('disabled', 'disabled');
		
		var url = _F.root + '/' + _F.lang + '/' + _F.type +'/acode/' + acode + '/state/' + state +
				'/load.json?property=quote.available';
		$.getJSON(url, function(data) {
			F.Vehicle.Selector.object.year = Ford.Vehicle.Selector.load({
				name: 'year',
				array: [],
				json: data.year,
				selected: vehicle.year,
				selector: 'value'
			});
			F.Vehicle.Selector.object.model = Ford.Vehicle.Selector.load({
				name: 'model',
				array: ['year'],
				json: data.model,
				selected: vehicle.model, // vehicle.aCode.aCode,
				selector: 'value'
			});
			F.Vehicle.Selector.object.body = Ford.Vehicle.Selector.load({
				name: 'body',
				array: ['model'],
				json: data.body,
				selected: acode,
				selector: 'value'
			});
			F.Vehicle.Selector.object.drive = Ford.Vehicle.Selector.load({
				name: 'drive',
				array: ['model', 'body'],
				json: data.drive,
				selected: acode,
				selector: 'value'
			});
			F.Vehicle.Selector.object.engine = Ford.Vehicle.Selector.load({
				name: 'engine',
				array: ['model', 'body', 'drive'],
				json: data.engine,
				selected: vehicle.engine,
				selector: 'opt'
			});
			F.Vehicle.Selector.object.bed = Ford.Vehicle.Selector.load({
				name: 'bed',
				array: ['model', 'body', 'drive', 'engine'],
				json: data.bed,
				selected: acode,
				selector: 'value'
			});
			F.Vehicle.Selector.object.trim = Ford.Vehicle.Selector.load({
				name: 'trim',
				array: ['model', 'body', 'drive', 'engine', 'bed'],
				json: data.trim,
				selected: acode,
				selector: 'value'
			});
			F.Vehicle.Selector.object.trans = Ford.Vehicle.Selector.load({
				name: 'trans',
				array: ['trim', 'engine'],
				json: data.trans,
				selected: vehicle.transmission,
				selector: 'opt'
			});

			if(F.Vehicle.Selector.object.model.children(':selected').data('isTruck') === "true") {
				F.Vehicle.Selector.object.bed.parents('fieldset').show();
			} else {
				F.Vehicle.Selector.object.bed.parents('fieldset').hide();
			}
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.trim);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.trim);
			Ford.Vehicle.Selector.load_colors(data.colors);

			if(state) {
				$('.js_swatch').each(function() {
					if($(this).data('state') === state) {
						Ford.Vehicle.Selector.setCarImage(this);
					}
				});
			}

			var trans = $(F.Vehicle.Selector.object.trans).children('option:selected');
			var engine = $(F.Vehicle.Selector.object.engine).children('option:selected');
			$('div.formsRightRail ul.carBuilt span.trans').text(trans.text());
			$('div.formsRightRail ul.carBuilt span.engine').text(engine.text());
			$('.js_body, .js_drive, .js_engine, .jws_bed, .js_trim, .js_trans').removeAttr('disabled');
			
			if(Ford.Vehicle.Selector.delegate &&
			   $.isFunction(Ford.Vehicle.Selector.delegate.didLoadVehicle)) {
				Ford.Vehicle.Selector.delegate.didLoadVehicle();
			}
		});
	},
	load_year: function(callback) {
		// $('#vehicleSelector .js_year').removeClass('error');
		F.Vehicle.Selector.object.year = Ford.Vehicle.Selector.load({
			name: 'year',
			array: [],
			json: null,
			selected: null,
			parent: null
		});
	},
	load_model: function(callback, auto_select) {
		var modelUrl = $.ford.vars.root + '/' + $.ford.vars.lang + "/" +
				$.ford.vars.type + '/year/' + F.Vehicle.Selector.object.year.val() +
				"/model.json?property=quote.available";
		F.Vehicle.Selector.object.model = Ford.Vehicle.Selector.load({
			name: 'model', 
			array: ['year'], 
			//{type}/year/{year}/model.json
			url: modelUrl,
			// url: _F.root + '/' + F.lang + "/" + _F.type + '/year/' + F.Vehicle.Selector.object.year.val() + "/model.json?property=quote.available",
			json: null, 
			selected: null, 
			selector: null,
			parent:'year', 
			auto_select: auto_select
		});
	},
	load_body: function(callback) {
		var bodyUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') +
				'/body.json';
		F.Vehicle.Selector.object.body = Ford.Vehicle.Selector.load({
			name: 'body', 
			array: ['model'], 
			url: bodyUrl,
			// url: _F.root + '/' + _F.lang + '/' + _F.type + '/year/' + F.Vehicle.Selector.object.year.val() + '/modelId/' + $(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') + '/body.json',
			json: null, 
			selected: null,
			selector: null,
			parent:'model'
		});
	},
	load_drive: function(callback) {
		var driveUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') +
				'/acodes/' + $(F.Vehicle.Selector.object.body).val() + '/drive.json';
		F.Vehicle.Selector.object.drive = Ford.Vehicle.Selector.load({
			name: 'drive', 
			array: ['model', 'body'], 
			url: driveUrl,
			// url: _F.root + '/' + _F.lang + '/' + _F.type + '/year/' + F.Vehicle.Selector.object.year.val() + '/modelId/' + $(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') + '/acodes/' + $(F.Vehicle.Selector.object.body).val() + '/drive.json',
			json: null, 
			selected: null,
			selector: null, 
			parent:'body'
		});
	},
	load_engine: function(callback) {
		var engineUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') +
				'/acodes/' + $(F.Vehicle.Selector.object.drive).val() + '/engine.json';
		F.Vehicle.Selector.object.engine = Ford.Vehicle.Selector.load({
			name: 'engine', 
			array: ['model', 'body', 'drive'], 
			url: engineUrl,
			json: null,
			selected: null,
			selector: null,
			parent:'drive'
		});
	},
	load_bed: function(callback) {
		var bedUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') +
				'/acodes/' + $(F.Vehicle.Selector.object.engine).val() + '/bed.json';
		F.Vehicle.Selector.object.bed = Ford.Vehicle.Selector.load({
			name: 'bed', 
			array: ['model', 'body', 'drive', 'engine'],
			url: bedUrl,
			json: null, 
			selected: null,
			selector: null,
			parent:'engine'
		});
	},
	load_trim: function(callback) {
		var acodes = $(F.Vehicle.Selector.object.engine).val();
		if(F.Vehicle.Selector.object.bed != undefined && $(F.Vehicle.Selector.object.bed).is(':visible')) {
			acodes = $(F.Vehicle.Selector.object.bed).val();
		}
		var trimUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').attr('data-modelId') +
				'/acodes/' + acodes + '/trim.json';
		F.Vehicle.Selector.object.trim = Ford.Vehicle.Selector.load({
			name: 'trim', 
			array: ['model', 'body', 'drive', 'engine', 'bed'], 
			url: trimUrl,
			json: null, 
			selected: null,
			selector: null,
			parent:'bed'
		});
	},
	load_trans: function(callback) {
		var transUrl = $.ford.vars.root + '/' + $.ford.vars.lang + '/' + $.ford.vars.type + '/year/' +
				F.Vehicle.Selector.object.year.val() + '/modelId/' +
				$(F.Vehicle.Selector.object.model).children('option:selected').data('modelId') +
				'/acodes/' + $(F.Vehicle.Selector.object.trim).val() + '/trans.json';
		F.Vehicle.Selector.object.trans = Ford.Vehicle.Selector.load({
			name: 'trans', 
			array: ['trim', 'engine'], 
			url: transUrl,
			json: null, 
			selected: null,
			selector: null,
			parent:'trim'
		});
	},

	_init: function() {
		Ford.Vehicle.Selector.setCarImage(null);
		
		$('#vehicleSelector :input').bind('change.wt', 
			function() { 
				$(this).unbind('change.wt'); 
				
				var group = $(this).attr('data-wtGroup');
				if(group == undefined) {
					group = $(this).parents('[data-wtGroup]:first').data('wtGroup');
				}
				var scenario = $(this).attr('data-wtScenario');
				if(scenario == undefined) {
					scenario = $(this).parents('[data-wtScenario]:first').data('wtScenario');
				}
				var subgroup = $(this).attr('data-wtSubGroup');
				if (subgroup == undefined) {
					subgroup = $(this).parents('[data-wtSubGroup]:first').data('wtSubGroup');
				}
				$.ford.common.WT(group, subgroup, scenario, $(this).attr('data-wtSubScenario'));				
			}
		);
		
		$('#vehicleSelector .js_model').bind('change.db', function() {
			$(this).unbind('change.db'); 
			var o = F.C.getDoubleClick();
			var array = new Array();
			var carYearVal = $(F.Vehicle.Selector.object.year).children('option:selected').val();
			var carModelVal = $(F.Vehicle.Selector.object.model).children('option:selected').text();
			var c = carYearVal + carModelVal;
			array[1] = c;
			array[4] = _F.lang;
			array[5] = $(this).attr('data-wtGroup') + ' - request';
			array[6] = 'Buying Milestone';
			array[7] = 'start';
			o.array = array;
			o.cat = 'foc-r694';
			o.type = 'buyin715';

			o.run();			
		});
		
		// Set up the loading indicator to show and hide when making ajax calls. Hide it initially.
		$('#vehicleSelector .loader')
			.hide()
			.ajaxStart(function() {
				$(this).show();
			})
			.ajaxStop(function() {
				$(this).hide();
			});

		// If an acode or model year ID was passed as a URL parameter then populate the select drop down
		// boxes with the vehicle's data. Otherwise, load the year data.
		var acode = Ford.Common.getParam('acode');
		var modelYearId = Ford.Common.getParam('modelYearId');
		if (acode != undefined && acode.length == 13){
			Ford.Vehicle.Selector.load_vehicle(acode);
		} else if(modelYearId != undefined && modelYearId.length > 0) {
			acode = Ford.Vehicle.Acode.modelYearId(modelYearId);
			Ford.Vehicle.Selector.load_vehicle(acode);
		} else {
			Ford.Vehicle.Selector.setCarImage(null);
			Ford.Vehicle.Selector.load_year();	
		}

		// Set each select box to disabled the 'Select One' item once an item has been selected.
		$('#1_div select').change(function() {
			$(this).children('option:first').attr("disabled", "disabled");
		});
		
		// Setup the data updating triggers for the selection drop down boxes.
		$('.js_year').change(function() {
			$(this).removeClass('error');
			Ford.Vehicle.Selector.setCarImage(null);
			Ford.Vehicle.Selector.load_model(function() { }, false);
		});
		$('.js_model').change(function() {
			$(this).removeClass('error');
			var model = $(F.Vehicle.Selector.object.model).children('option:selected');
			Ford.Vehicle.Selector.load_vehicle($(model).val());
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.model);
		});
		$('.js_body').change(function() {
			$(this).removeClass('error');
			Ford.Vehicle.Selector.load_drive();
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.body);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.body);
		});
		$('.js_drive').change(function() {
			$(this).removeClass('error');
			Ford.Vehicle.Selector.load_engine();
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.drive);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.drive);
		});
		$('.js_engine').change(function() {
			$(this).removeClass('error');
			if(F.Vehicle.Selector.object.model.children(':selected').data('isTruck') != 'true') {
				$(F.Vehicle.Selector.object.bed).children('option').remove();
				Ford.Vehicle.Selector.load_trim();
			} else {
				Ford.Vehicle.Selector.load_bed();
			}
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.engine);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.engine);
		});
		$('.js_bed').change(function() {
			$(this).removeClass('error');
			Ford.Vehicle.Selector.load_trim();
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.bed);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.bed);
		});
		$('.js_trim').change(function() {
			$(this).removeClass('error');
			Ford.Vehicle.Selector.load_trans();
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.trim);
		});
		$('.js_trans').change(function() {
			$(this).removeClass('error');
			var trim = $(F.Vehicle.Selector.object.trim).children('option:selected');
			var trans = $(F.Vehicle.Selector.object.trans).children('option:selected').data('opt');
			var engine = $(F.Vehicle.Selector.object.engine).children('option:selected').data('opt');
			var url = $.ford.vars.root + '/type/' + $.ford.vars.type + '/acode/' + trim.val() +
					'/engine/' + engine + '/trans/' + trans + '/colors.json';
			$.getJSON(url, function(data) {
				Ford.Vehicle.Selector.load_colors(data.colors);
			});
			Ford.Vehicle.Selector.setCarImage(F.Vehicle.Selector.object.trans);
			Ford.Vehicle.Selector.setCarLabel(F.Vehicle.Selector.object.trans);
		});
	},

	// Returns true if all the required data has been selected by the user, otherwise returns false.
	// Any select box of the vehicle selector that is enabled and has not been selected by the user
	// will be marked with the error class.
	validate: function() {
		var valid = true;
		$.each($('#vehicleSelector').find(":input[data-validation]"), function(key, obj) {
			if($(obj).is(':visible') && valid) {
				if($(obj).attr('disabled')) {
					valid = false;
				} else if(local('select_one') === $(obj).children('option:selected').text()) {
					valid = false;
					$(obj).addClass('error');
				}
			}
		});
		return valid;
	}
};

