if (!sb_BapPortal) { var sb_BapPortal =  new Object(); };

sb_BapPortal = {
	usedCars: null,
	newCars: null,

	init: function() {
		//console.log('init');
		if (!document.getElementById) return;
		sb_BapPortal.loadScript('/BAP/JsonMakeModelYear.aspx?type=used&callback=sb_BapPortal.loadJsonUsed');
		sb_BapPortal.loadScript('/BAP/JsonMakeModelYear.aspx?type=new&callback=sb_BapPortal.loadJsonNew');
	},

	loadJsonUsed: function(json) {
		//console.log('loadJsonUsed');
		sb_BapPortal.usedCars = json;
		sb_BapPortal.usedVehicles.init();
	},

	loadJsonNew: function(json) {
		//console.log('loadJsonNew');
		sb_BapPortal.newCars = json;
		sb_BapPortal.newVehicles.init();
	},

	usedVehicles: {
		init: function() {
			//console.log('usedVehicles.init');
			var makeSelect = document.getElementById('tv-search-used-make');
			makeSelect.onchange = function() {
				//console.log('usedVehicles.makeSelect.onchange');
				var modelSelect = document.getElementById('tv-search-used-model');
				var yearSelect = document.getElementById('tv-search-used-year');
				if (this.selectedIndex === 0) {
					sb_BapPortal.usedVehicles.emptySelects(sb_BapPortal.targetDepth.model);
					modelSelect.disabled = true;
					yearSelect.disabled = true;
				} else {
					yearSelect.disabled = true;
					sb_BapPortal.usedVehicles.populateSelects(sb_BapPortal.targetDepth.model);
				};
			};

			var modelSelect = document.getElementById('tv-search-used-model');
			modelSelect.onchange = function() {
				//console.log('usedVehicles.modelSelect.onchange');
				var yearSelect = document.getElementById('tv-search-used-year');
				var priceSelect = document.getElementById('tv-search-used-price');
				if (this.selectedIndex === 0) {
					sb_BapPortal.usedVehicles.emptySelects(sb_BapPortal.targetDepth.model);
					yearSelect.disabled = true;
				} else {
					sb_BapPortal.usedVehicles.populateSelects(sb_BapPortal.targetDepth.year);
				};
			};

			var searchButton = document.getElementById('tv-search-used-submit');
			searchButton.onclick = function() {
				//console.log('usedVehicles.searchButton.onclick');
				var makeSelect = document.getElementById('tv-search-used-make');
				var modelSelect = document.getElementById('tv-search-used-model');
				var yearSelect = document.getElementById('tv-search-used-year');
				var priceSelect = document.getElementById('tv-search-used-price');
				var make = makeSelect[makeSelect.selectedIndex].value;
				var model = modelSelect[modelSelect.selectedIndex].value
				var minYear = yearSelect[yearSelect.selectedIndex].value;
				var maxPrice = priceSelect[priceSelect.selectedIndex].value;
				var certified = document.getElementById('tv-search-used-cpoused').checked;
				var url = '/car-search';
				if (make != '' || model != '' || minYear != '' || maxPrice != '') {
					if (make != '') {
						url += '/';
						url += make
						if (model != '') {
							url += '/' + model;
						};
					};
					url += '?';
					if (minYear != '') {
						url += 'minyear=' + minYear;
					};
					if (maxPrice != '') {
						if (minYear != '') {
							url += '&';
						}
						url += 'maxprice=' + maxPrice;
					};
					if (minYear != '' || maxPrice != '') {
						url += '&';
					};
				} else {
					url += '?';
				};
				if (!certified) {
					url += 'type=used';
				} else {
					url += 'type=certified';
				};
				location.href = url;
				return false;
			};
		},

		populateSelects: function(depth) {
			//console.log('usedVehicles.populateSelects');
			var makeSelect = document.getElementById('tv-search-used-make');
			var modelSelect = document.getElementById('tv-search-used-model');
			var yearSelect = document.getElementById('tv-search-used-year');
			var selectedMake = makeSelect[makeSelect.selectedIndex].value;
			if (depth == sb_BapPortal.targetDepth.model) {
				for (var i = 0; i < sb_BapPortal.usedCars.MakeModelYear.Make.length; i++) {
					if (sb_BapPortal.usedCars.MakeModelYear.Make[i].nameSEO == selectedMake) {
						sb_BapPortal.usedVehicles.emptySelects(sb_BapPortal.targetDepth.model);
						// just-in-time data typing
						if (typeof(sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.length) == 'undefined') {
							sb_BapPortal.usedCars.MakeModelYear.Make[i].Model = [
								{
									name: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.name,
									nameSEO: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.nameSEO,
									Y: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.Y
								}
							];
						};
						for (var x = 0; x < sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.length; x++) {
							var modelName = sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].name;
							var option = document.createElement('option');
							option.value = sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].nameSEO;
							option.appendChild(document.createTextNode(modelName));
							modelSelect.appendChild(option);
						};
						modelSelect.disabled = false;
						break;
					};
				};
			} else if (depth == sb_BapPortal.targetDepth.year) {
				var selectedModel = modelSelect[modelSelect.selectedIndex].value;
				for (var i = 0; i < sb_BapPortal.usedCars.MakeModelYear.Make.length; i++) {
					if (sb_BapPortal.usedCars.MakeModelYear.Make[i].nameSEO == selectedMake) {
						// just-in-time data typing
						if (typeof(sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.length) == 'undefined') {
							sb_BapPortal.usedCars.MakeModelYear.Make[i].Model = [
								{
									name: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.name,
									nameSEO: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.nameSEO,
									Y: sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.Y
								}
							];
						};
						for (var x = 0; x < sb_BapPortal.usedCars.MakeModelYear.Make[i].Model.length; x++) {
							if (sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].nameSEO == selectedModel) {
								sb_BapPortal.usedVehicles.emptySelects(sb_BapPortal.targetDepth.year);
								// just-in-time data typing
								if (typeof(sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].Y) == 'string') {
									sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].Y = [ sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].Y ];
								};
								for (var y = 0; y < sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].Y.length; y++) {
									var yearName = sb_BapPortal.usedCars.MakeModelYear.Make[i].Model[x].Y[y];
									var option = document.createElement('option');
									option.value = yearName;
									option.appendChild(document.createTextNode(yearName));
									yearSelect.appendChild(option);
								};
								yearSelect.disabled = false;
								break;
							};
						};
					};
				};
			};
		},

		emptySelects: function(depth) {
			//console.log('usedVehicles.emptySelects');
			switch (depth) {
				case sb_BapPortal.targetDepth.model :
					var modelSelect = document.getElementById('tv-search-used-model');
					while(modelSelect.hasChildNodes()) {
						modelSelect.removeChild(modelSelect.lastChild);
					};
					var optionAll = document.createElement('option');
					optionAll.value = '';
					optionAll.appendChild(document.createTextNode('All Models'));
					modelSelect.appendChild(optionAll);
				case sb_BapPortal.targetDepth.year :
					var yearSelect = document.getElementById('tv-search-used-year');
					while(yearSelect.hasChildNodes()) {
						yearSelect.removeChild(yearSelect.lastChild);
					};
					var optionAll = document.createElement('option');
					optionAll.value = '';
					optionAll.appendChild(document.createTextNode('Any Year'));
					yearSelect.appendChild(optionAll);
			};
		}
	},

	newVehicles: {
		init: function() {
			//console.log('newVehicles.init');
			var makeSelect = document.getElementById('tv-search-new-make');
			makeSelect.onchange = function() {
				//console.log('newVehicles.makeSelect.onchange');
				var modelSelect = document.getElementById('tv-search-new-model');
				if (this.selectedIndex === 0) {
					sb_BapPortal.newVehicles.emptySelects();
					modelSelect.disabled = true;
				} else {
					sb_BapPortal.newVehicles.populateSelects();
				};
			};

			var searchButton = document.getElementById('tv-search-new-submit');
			searchButton.onclick = function() {
				//console.log('newVehicles.searchButton.onclick');
				var makeSelect = document.getElementById('tv-search-new-make');
				var modelSelect = document.getElementById('tv-search-new-model');
				var priceSelect = document.getElementById('tv-search-new-price');
				var make = makeSelect[makeSelect.selectedIndex].value;
				var model = modelSelect[modelSelect.selectedIndex].value
				var maxPrice = priceSelect[priceSelect.selectedIndex].value;
				var url = '/car-search';
				if (make != '' || model != '' || maxPrice != '') {
					if (make != '') {
						url += '/';
						url += make
						if (model != '') {
							url += '/' + model;
						};
					};
					url += '?';
					if (maxPrice != '') {
						url += 'maxprice=' + maxPrice;
					};
					if (maxPrice != '') {
						url += '&';
					};
				} else {
					url += '?';
				};
				url += 'type=new';
				location.href = url;
				return false;
			};
		},

		populateSelects: function() {
			//console.log('newVehicles.populateSelects');
			var makeSelect = document.getElementById('tv-search-new-make');
			var modelSelect = document.getElementById('tv-search-new-model');
			var selectedMake = makeSelect[makeSelect.selectedIndex].value;
			for (var i = 0; i < sb_BapPortal.newCars.MakeModelYear.Make.length; i++) {
				if (sb_BapPortal.newCars.MakeModelYear.Make[i].nameSEO == selectedMake) {
					sb_BapPortal.newVehicles.emptySelects(sb_BapPortal.targetDepth.model);
					// JIT typing - lol
					if (typeof(sb_BapPortal.newCars.MakeModelYear.Make[i].Model.length) == 'undefined') {
						sb_BapPortal.newCars.MakeModelYear.Make[i].Model = [
							{
								name: sb_BapPortal.newCars.MakeModelYear.Make[i].Model.name,
								nameSEO: sb_BapPortal.newCars.MakeModelYear.Make[i].Model.nameSEO
							}
						];
					};
					for (var x = 0; x < sb_BapPortal.newCars.MakeModelYear.Make[i].Model.length; x++) {
						var modelName = sb_BapPortal.newCars.MakeModelYear.Make[i].Model[x].name;
						var option = document.createElement('option');
						option.value = sb_BapPortal.newCars.MakeModelYear.Make[i].Model[x].nameSEO;
						option.appendChild(document.createTextNode(modelName));
						modelSelect.appendChild(option);
					};
					modelSelect.disabled = false;
					break;
				};
			};
		},

		emptySelects: function() {
			//console.log('newVehicles.emptySelects');
			var modelSelect = document.getElementById('tv-search-new-model');
			while(modelSelect.hasChildNodes()) {
				modelSelect.removeChild(modelSelect.lastChild);
			};
			var optionAll = document.createElement('option');
			optionAll.value = '';
			optionAll.appendChild(document.createTextNode('All Models'));
			modelSelect.appendChild(optionAll);
		}
	},

	loadScript: function(scriptUri) {
		var script = document.createElement('script');
		script.type = "text/javascript";
		script.src = scriptUri;
		document.getElementsByTagName('head')[0].appendChild(script);
	},

	targetDepth: {
		model: 1,
		year: 2
	},

	addEvent: function(obj, evType, fn, useCapture) {
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.attachEvent) {
			var r = obj.attachEvent('on' + evType, fn);
			return r;
		} else {
			obj['on' + evType] = fn;
		};
	}
};

sb_BapPortal.addEvent(window, 'load', sb_BapPortal.init);