/*
--------------------------------------------------------------------------------
 JavaScript: Tire Selector Entry Form.
 Requires: JQuery
--------------------------------------------------------------------------------
*/
if (typeof (trackingVariables) == "undefined") {
    var trackingVariables = new Array();

    var trackingDate = new Date();
    var trackingDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
    var trackingDay = trackingDays[trackingDate.getDay()];
    var trackingDayType = trackingDate.getDay() == 0 || trackingDate.getDay() == 6 || trackingDate.getDay() == 7 ? "Weekend" : "Weekday";
}

trackingVariables["tracking-00047"] = { pageName: "GYTIRES | TIRE CONFIGURATOR | SEARCH BY VEHICLE | INDEX | SELECT TIRE SIZE", event: "", prop1: "TIRE CONFIGURATOR", prop2: "SEARCH BY VEHICLE", prop3: "TIRE CONFIGURATOR | SEARCH BY VEHICLE", prop4: "INDEX", prop5: "SEARCH BY VEHICLE | INDEX", prop6: "TIRE CONFIGURATOR | SEARCH BY VEHICLE  | INDEX", prop7: "SELECT TIRE SIZE", prop8: "INDEX | SELECT TIRE SIZE", eVar9: "<<YEAR>>", prop9: "SEARCH BY VEHICLE | INDEX | SELECT TIRE SIZE", eVar10: "<<MAKE>>", prop10: "TIRE CONFIGURATOR | SEARCH BY VEHICLE | INDEX | SELECT TIRE SIZE", eVar11: "<<MODEL>>", prop11: "", eVar12: "", prop12: "", eVar13: "<<YEAR>> | <<MAKE>> | <<MODEL>>", prop13: "", prop14: "", prop15: "", prop16: "", prop17: "", prop18: "", prop19: "", prop20: "", eVar21: "", prop21: "", prop22: "", prop23: "", prop24: "", prop25: "", prop26: "", prop27: "", prop28: trackingDate.toTimeString(), prop29: trackingDay, prop30: trackingDayType };
trackingVariables["tracking-00052"] = { pageName: "GYTIRES | TIRE CONFIGURATOR | SEARCH BY TIRE NAME | <<TIRE NAME>> | RESULTS", event: "1", prop1: "TIRE CONFIGURATOR", prop2: "SEARCH BY TIRE NAME", prop3: "TIRE CONFIGURATOR | SEARCH BY TIRE NAME", prop4: "<<TIRE NAME>>", prop5: "SEARCH BY TIRE NAME | <<TIRE NAME>>", prop6: "TIRE CONFIGURATOR | SEARCH BY TIRE NAME  | <<TIRE NAME>>", prop7: "RESULTS", prop8: "<<TIRE NAME>> | RESULTS", eVar9: "", prop9: "SEARCH BY TIRE NAME | <<TIRE NAME>> | RESULTS", eVar10: "", prop10: "TIRE CONFIGURATOR | SEARCH BY TIRE NAME | <<TIRE NAME>> | RESULTS", eVar11: "", prop11: "", eVar12: "", prop12: "", eVar13: "", prop13: "", prop14: "", prop15: "", prop16: "", prop17: "", prop18: "", prop19: "", prop20: "", eVar21: "", prop21: "", prop22: "", prop23: "", prop24: "", prop25: "", prop26: "", prop27: "", prop28: trackingDate.toTimeString(), prop29: trackingDay, prop30: trackingDayType };
trackingVariables["tracking-00053"] = { pageName: "GYTIRES | TIRE CONFIGURATOR | SEARCH BY CATALOG | <<TIRE CATEGORY>> | RESULTS", event: "1", prop1: "TIRE CONFIGURATOR", prop2: "SEARCH BY CATALOG", prop3: "TIRE CONFIGURATOR | SEARCH BY CATALOG", prop4: "<<TIRE CATEGORY>>", prop5: "SEARCH BY CATALOG | <<TIRE CATEGORY>>", prop6: "TIRE CONFIGURATOR | SEARCH BY CATALOG  | <<TIRE CATEGORY>>", prop7: "RESULTS", prop8: "<<TIRE CATEGORY>> | RESULTS", eVar9: "", prop9: "SEARCH BY CATALOG | <<TIRE CATEGORY>> | RESULTS", eVar10: "", prop10: "TIRE CONFIGURATOR | SEARCH BY CATALOG | <<TIRE CATEGORY>> | RESULTS", eVar11: "", prop11: "", eVar12: "", prop12: "", eVar13: "", prop13: "", prop14: "", prop15: "", prop16: "", prop17: "", prop18: "", prop19: "", prop20: "", eVar21: "", prop21: "", prop22: "", prop23: "", prop24: "", prop25: "", prop26: "", prop27: "", prop28: trackingDate.toTimeString(), prop29: trackingDay, prop30: trackingDayType };

var TireSelectorEntryForm = Class.extend({
	AJAX_URL: '/cfmx/web/goodyeartiresel/components/tiresel.cfc', // URL to the application that generates the Tire Selector AJAX data.
	LIST_LABEL: "Select\u2026", // Text used for the first item in each drop down list.
	VEHICLE_FORM: null,
	VEHICLE_YEAR_SELECT: null,
	VEHICLE_YEAR_PLUS_CHECK: null,
	VEHICLE_MAKE_SELECT: null,
	VEHICLE_MODEL_SELECT: null,
	VEHICLE_VERSION_CONTAINER: null,
	VEHICLE_VERSION_SELECT: null,
	VEHICLE_OPTION_CONTAINER: null,
	VEHICLE_OPTION_SELECT: null,
	VEHICLE_SUBMIT: null,
	SIZE_FORM: null,
	SIZE_WIDTH_SELECT: null,
	SIZE_RATIO_SELECT: null,
	SIZE_DIAMETER_SELECT: null,
	SIZE_SUBMIT: null,
	TIRE_NAME_SELECT: null,
	TIRE_NAME_SUBMIT: null,
	tabs: null,
	savedValues: null,
	// Initialize the Tire Selector.
	//
	init: function (elements, tabs) {
		this.tabs = tabs;
		this.VEHICLE_FORM = $('#' + elements.vehicleForm)[0];
		this.VEHICLE_YEAR_SELECT = $('#' + elements.vehicleYearSelect)[0];
		this.VEHICLE_YEAR_PLUS_CHECK = $('#' + elements.vehicleYearPlusCheck)[0];
		this.VEHICLE_MAKE_SELECT = $('#' + elements.vehicleMakeSelect)[0];
		this.VEHICLE_MODEL_SELECT = $('#' + elements.vehicleModelSelect)[0];
		this.VEHICLE_VERSION_CONTAINER = $('#' + elements.vehicleVersionContainer)[0];
		this.VEHICLE_VERSION_SELECT = $('#' + elements.vehicleVersionSelect)[0];
		this.VEHICLE_OPTION_CONTAINER = $('#' + elements.vehicleOptionContainer)[0];
		this.VEHICLE_OPTION_SELECT = $('#' + elements.vehicleOptionSelect)[0];
		this.VEHICLE_SUBMIT = $('#' + elements.vehicleSubmit)[0];
		this.SIZE_FORM = $('#' + elements.sizeForm)[0];
		this.SIZE_METRIC_SELECT = $('#' + elements.sizeMetricSelect)[0];
		this.SIZE_WIDTH_SELECT = $('#' + elements.sizeWidthSelect)[0];
		this.SIZE_RATIO_SELECT = $('#' + elements.sizeRatioSelect)[0];
		this.SIZE_DIAMETER_SELECT = $('#' + elements.sizeDiameterSelect)[0];
		this.SIZE_SUBMIT = $('#' + elements.sizeSubmit)[0];
		this.TIRE_NAME_SELECT = $('#' + elements.tireNameSelect)[0];
		this.TIRE_NAME_SUBMIT = $('#' + elements.tireNameSubmit)[0];

		var thisTSEObj = this;

		// Vehicle drop downs.
		if (this.VEHICLE_YEAR_SELECT != null) {
			$(this.VEHICLE_YEAR_SELECT).change(function (e) {
				thisTSEObj.onYearChange();
			})
		} // End if.
		if (this.VEHICLE_YEAR_PLUS_CHECK != null) {
			$(this.VEHICLE_YEAR_PLUS_CHECK).click(function (e) {
				thisTSEObj.onYearChange();
			})
		} // End if.
		if (this.VEHICLE_MAKE_SELECT != null) {
			$(this.VEHICLE_MAKE_SELECT).change(function (e) {
				thisTSEObj.onMakeChange();
			})
		} // End if.
		if (this.VEHICLE_MODEL_SELECT != null) {
			$(this.VEHICLE_MODEL_SELECT).change(function (e) {
				thisTSEObj.onModelChange();
			})
		} // End if.
		if (this.VEHICLE_VERSION_SELECT != null) {
			$(this.VEHICLE_VERSION_SELECT).change(function (e) {
				thisTSEObj.onVersionChange();
			})
		} // End if.
		if (this.VEHICLE_OPTION_SELECT != null) {
			$(this.VEHICLE_OPTION_SELECT).change(function (e) {
				thisTSEObj.onOptionChange();
			})
		} // End if.

		// Tire size drop downs.
		if (this.SIZE_METRIC_SELECT != null) {
			$(this.SIZE_METRIC_SELECT).change(function (e) {
				thisTSEObj.onSizeMetricChange();
			})
		} // End if.
		if (this.SIZE_WIDTH_SELECT != null) {
			$(this.SIZE_WIDTH_SELECT).change(function (e) {
				thisTSEObj.onSizeWidthChange();
			})
		} // End if.
		if (this.SIZE_RATIO_SELECT != null) {
			$(this.SIZE_RATIO_SELECT).change(function (e) {
				thisTSEObj.onSizeRatioChange();
			})
		} // End if.
		if (this.SIZE_DIAMETER_SELECT != null) {
			$(this.SIZE_DIAMETER_SELECT).change(function (e) {
				thisTSEObj.onSizeDiameterChange();
			})
		} // End if.

		// Tire name drop down.
		if (this.TIRE_NAME_SELECT != null) {
			$(this.TIRE_NAME_SELECT).change(function (e) {
				thisTSEObj.onTireNameChange();
			})
		} // End if.

		var tireSelectorCookieValue = this.getCookieValue();
		if (tireSelectorCookieValue != null) {
			var tireSelectorCookieValues = tireSelectorCookieValue.split("|");

			this.savedValues = {
				selectedTab: tireSelectorCookieValues[0],
				vehicleYear: tireSelectorCookieValues[1],
				vehicleYearPlus: tireSelectorCookieValues[2],
				vehicleMake: tireSelectorCookieValues[3],
				vehicleModel: tireSelectorCookieValues[4],
				vehicleVersion: tireSelectorCookieValues[5],
				vehicleOption: tireSelectorCookieValues[6],
				sizeMetric: tireSelectorCookieValues[7],
				sizeWidth: tireSelectorCookieValues[8],
				sizeRatio: tireSelectorCookieValues[9],
				sizeDiameter: tireSelectorCookieValues[10],
				catalogArea: tireSelectorCookieValues[11],
				tireName: tireSelectorCookieValues[12]
			};

			this.tabs.selectTab(this.savedValues.selectedTab);
			$(".tsm_tireCatalogCategory select").val(this.savedValues.catalogArea)
		}

		this.initForms();

		_this = this;
		$("div.tabPaneContent form").submit(function (e) {
			_this.setCookieValue({
				selectedTab: _this.tabs.lastTabOptionIndex,
				vehicleYear: _this.VEHICLE_YEAR_SELECT.value,
				vehicleYearPlus: _this.VEHICLE_YEAR_PLUS_CHECK.checked,
				vehicleMake: _this.VEHICLE_MAKE_SELECT.value,
				vehicleModel: _this.VEHICLE_MODEL_SELECT.value,
				vehicleVersion: _this.VEHICLE_VERSION_SELECT.value,
				vehicleOption: _this.VEHICLE_OPTION_SELECT.value,
				sizeMetric: _this.SIZE_METRIC_SELECT.value,
				sizeWidth: _this.SIZE_WIDTH_SELECT.value,
				sizeRatio: _this.SIZE_RATIO_SELECT.value,
				sizeDiameter: _this.SIZE_DIAMETER_SELECT.value,
				catalogArea: $(".tsm_tireCatalogCategory select").val(),
				tireName: _this.TIRE_NAME_SELECT.value
			});

			switch(_this.tabs.lastTabOptionIndex){
				case 0:
					_this.callFloodlightTag("http://fls.doubleclick.net/activityi;src=2810977;type=tireconf;cat=gytir595;ord=");
					break;
				case 1:
					_this.callFloodlightTag("http://fls.doubleclick.net/activityi;src=2810977;type=tireconf;cat=gytir298;ord=");
					break;
				case 2:
					_this.callFloodlightTag("http://fls.doubleclick.net/activityi;src=2810977;type=tireconf;cat=gytir020;ord=");
					break;
				case 3:
					_this.callFloodlightTag("http://fls.doubleclick.net/activityi;src=2810977;type=tireconf;cat=gytir107;ord=");
					break;
			}
		});

		$("form[action $= 'catalog.cfm']").submit(function (e) {
			$.extend(s_gdyr, trackingVariables["tracking-00053"]);
			var tireCategory = $(".tsm_tireCatalogCategory select").val().toUpperCase();
			s_gdyr.pageName = s_gdyr.pageName.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop4 = s_gdyr.prop4.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop5 = s_gdyr.prop5.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop6 = s_gdyr.prop6.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop8 = s_gdyr.prop8.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop9 = s_gdyr.prop9.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.prop10 = s_gdyr.prop10.replace("<<TIRE CATEGORY>>", tireCategory);
			s_gdyr.tl();
		});

		$("form[action $= 'details.cfm']").submit(function (e) {
			$.extend(s_gdyr, trackingVariables["tracking-00052"]);
			var tireName = $("#tsm_tireName option:selected").text().toUpperCase();
			s_gdyr.pageName = s_gdyr.pageName.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop4 = s_gdyr.prop4.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop5 = s_gdyr.prop5.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop6 = s_gdyr.prop6.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop8 = s_gdyr.prop8.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop9 = s_gdyr.prop9.replace("<<TIRE NAME>>", tireName);
			s_gdyr.prop10 = s_gdyr.prop10.replace("<<TIRE NAME>>", tireName);
			s_gdyr.tl();
		});

		$("form[action $= 'process.cfm']").submit(function (e) {
			$.extend(s_gdyr, trackingVariables["tracking-00047"]);
			var tireYear = _this.VEHICLE_YEAR_SELECT.value.toUpperCase();
			var tireMake = _this.VEHICLE_MAKE_SELECT.value.toUpperCase();
			var tireModel = _this.VEHICLE_MODEL_SELECT.value.toUpperCase();
			s_gdyr.eVar9 = s_gdyr.eVar9.replace("<<YEAR>>", tireYear);
			s_gdyr.eVar10 = s_gdyr.eVar10.replace("<<MAKE>>", tireMake);
			s_gdyr.eVar11 = s_gdyr.eVar11.replace("<<MODEL>>", tireModel);
			s_gdyr.eVar13 = s_gdyr.eVar13.replace("<<YEAR>>", tireYear).replace("<<MAKE>>", tireMake).replace("<<MODEL>>", tireModel);
			s_gdyr.tl();
		});
	}, // End init().
	setCookieValue: function (formElements) {
		var date = new Date();
		date.setTime(date.getTime() + (90 * 24 * 60 * 60 * 1000));
		expires = '; expires=' + date.toUTCString();
		var value = [
            formElements.selectedTab,
            formElements.vehicleYear,
            formElements.vehicleYearPlus,
            formElements.vehicleMake,
            formElements.vehicleModel,
            formElements.vehicleVersion,
            formElements.vehicleOption,
            formElements.sizeMetric,
            formElements.sizeWidth,
            formElements.sizeRatio,
            formElements.sizeDiameter,
            formElements.catalogArea,
            formElements.tireName
        ].join('|');
		document.cookie = ["tireSelector", "=", encodeURIComponent(value), expires, "; path=/"].join('');
	},
	getCookieValue: function () {
		var name = "tireSelector";
		var cookieValue = null;
		if (document.cookie && document.cookie != '') {
			var cookies = document.cookie.split(';');
			for (var i = 0; i < cookies.length; i++) {
				var cookie = jQuery.trim(cookies[i]);
				if (cookie.substring(0, name.length + 1) == (name + '=')) {
					cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
					break;
				}
			}
		}
		return cookieValue;
	},
	callFloodlightTag: function (sourceTag) {
		var tag_url = sourceTag + Math.floor(Math.random() * 999999) + "?";
		if (document.getElementById("DCLK_FLDiv")) { var flDiv = document.getElementById("DCLK_FLDiv"); }
		else {
			var flDiv = document.body.appendChild(document.createElement("div"));
			flDiv.id = "DCLK_FLDiv";
			flDiv.style.display = "none";
		}
		var DCLK_FLIframe = document.createElement("iframe");
		DCLK_FLIframe.id = "DCLK_FLIframe_" + Math.floor(Math.random() * 999999);
		DCLK_FLIframe.src = tag_url;
		flDiv.appendChild(DCLK_FLIframe);
	},
	initForms: function () {
		// Reset the forms.
		this.resetVehicleForm();
		this.resetSizeForm();

		var thisTSEObj = this;
		// Populate the years field.
		$.getJSON(this.AJAX_URL, { method: 'getYear', returnformat: "json" }, function (json) { thisTSEObj.populateYears(json); });
		// Populate the size metric field.
		$.getJSON(this.AJAX_URL, { method: 'getMetric', returnformat: "json" }, function (json) { thisTSEObj.populateSizeMetrics(json); });
		// Populate the tire name field.
		$.getJSON(this.AJAX_URL, { method: 'getTireList', returnformat: "json" }, function (json) { thisTSEObj.populateTireNames(json); });
	}, // End initForms().

	resetVehicleForm: function () {

		if (this.VEHICLE_YEAR_PLUS_CHECK != null) {
			this.VEHICLE_YEAR_PLUS_CHECK.disabled = true;
		} // End if.

		if (this.VEHICLE_MAKE_SELECT != null) {
			this.VEHICLE_MAKE_SELECT.disabled = true;
			this.clearOptions(this.VEHICLE_MAKE_SELECT);
			this.addOption(this.VEHICLE_MAKE_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.VEHICLE_MODEL_SELECT != null) {
			this.VEHICLE_MODEL_SELECT.disabled = true;
			this.clearOptions(this.VEHICLE_MODEL_SELECT);
			this.addOption(this.VEHICLE_MODEL_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.VEHICLE_VERSION_SELECT != null) {
			this.VEHICLE_VERSION_SELECT.disabled = true;
			this.clearOptions(this.VEHICLE_VERSION_SELECT);
			this.addOption(this.VEHICLE_VERSION_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.VEHICLE_OPTION_SELECT != null) {
			this.VEHICLE_OPTION_SELECT.disabled = true;
			this.clearOptions(this.VEHICLE_OPTION_SELECT);
			this.addOption(this.VEHICLE_OPTION_SELECT, this.LIST_LABEL, "");
		} // End if.

		this.VEHICLE_VERSION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOff';

		if (this.VEHICLE_FORM != null) this.VEHICLE_SUBMIT.disabled = true;

		if (this.VEHICLE_FORM != null) this.VEHICLE_FORM.reset();

	}, // End resetVehicleForm().

	resetSizeForm: function () {

		if (this.SIZE_WIDTH_SELECT != null) {
			this.SIZE_WIDTH_SELECT.disabled = true;
			this.clearOptions(this.SIZE_WIDTH_SELECT);
			this.addOption(this.SIZE_WIDTH_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.SIZE_RATIO_SELECT != null) {
			this.SIZE_RATIO_SELECT.disabled = true;
			this.clearOptions(this.SIZE_RATIO_SELECT);
			this.addOption(this.SIZE_RATIO_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.SIZE_DIAMETER_SELECT != null) {
			this.SIZE_DIAMETER_SELECT.disabled = true;
			this.clearOptions(this.SIZE_DIAMETER_SELECT);
			this.addOption(this.SIZE_DIAMETER_SELECT, this.LIST_LABEL, "");
		} // End if.

		if (this.SIZE_FORM != null) this.SIZE_FORM.reset();

	}, // End resetSizeForm().

	onYearChange: function () {

		this.VEHICLE_MAKE_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_MAKE_SELECT);
		this.addOption(this.VEHICLE_MAKE_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_MODEL_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_MODEL_SELECT);
		this.addOption(this.VEHICLE_MODEL_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_VERSION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_VERSION_SELECT);
		this.addOption(this.VEHICLE_VERSION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_OPTION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_OPTION_SELECT);
		this.addOption(this.VEHICLE_OPTION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_VERSION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_SUBMIT.disabled = true;

		if (this.VEHICLE_YEAR_SELECT.selectedIndex == 0) {
			return alert("Please select a year.");
		} else {
			this.VEHICLE_YEAR_PLUS_CHECK.disabled = false;
		}

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getMake',
			year: this.VEHICLE_YEAR_SELECT.value,
			yearplusminus: (this.VEHICLE_YEAR_PLUS_CHECK.checked) ? '1' : '0',
			returnformat: "json"
		}, function (json) { thisTSEObj.populateMakes(json); });

	}, // End onYearChange().

	onMakeChange: function () {

		this.VEHICLE_MODEL_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_MODEL_SELECT);
		this.addOption(this.VEHICLE_MODEL_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_VERSION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_VERSION_SELECT);
		this.addOption(this.VEHICLE_VERSION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_OPTION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_OPTION_SELECT);
		this.addOption(this.VEHICLE_OPTION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_VERSION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_SUBMIT.disabled = true;

		if (this.VEHICLE_MAKE_SELECT.selectedIndex == 0) {
			return alert("Please select a make.");
		}

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getModel',
			year: this.VEHICLE_YEAR_SELECT.value,
			yearplusminus: (this.VEHICLE_YEAR_PLUS_CHECK.checked) ? '1' : '0',
			make: this.VEHICLE_MAKE_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateModels(json); });

	}, // End onMakeChange().

	onModelChange: function () {

		this.VEHICLE_VERSION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_VERSION_SELECT);
		this.addOption(this.VEHICLE_VERSION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_OPTION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_OPTION_SELECT);
		this.addOption(this.VEHICLE_OPTION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_VERSION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOff';
		this.VEHICLE_SUBMIT.disabled = true;

		if (this.VEHICLE_MODEL_SELECT.selectedIndex == 0) {
			return alert("Please select a model.");
		} else {
			this.VEHICLE_SUBMIT.disabled = false;
		}

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getVersion',
			year: this.VEHICLE_YEAR_SELECT.value,
			yearplusminus: (this.VEHICLE_YEAR_PLUS_CHECK.checked) ? '1' : '0',
			make: this.VEHICLE_MAKE_SELECT.value,
			model: this.VEHICLE_MODEL_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateVersions(json); });

	}, // End onModelChange().

	onVersionChange: function () {

		this.VEHICLE_OPTION_SELECT.disabled = true;
		this.clearOptions(this.VEHICLE_OPTION_SELECT);
		this.addOption(this.VEHICLE_OPTION_SELECT, this.LIST_LABEL, "");

		this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOff';

		if (this.VEHICLE_VERSION_SELECT.selectedIndex == 0) {
			return;
		}

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getOption',
			year: this.VEHICLE_YEAR_SELECT.value,
			yearplusminus: (this.VEHICLE_YEAR_PLUS_CHECK.checked) ? '1' : '0',
			make: this.VEHICLE_MAKE_SELECT.value,
			model: this.VEHICLE_MODEL_SELECT.value,
			version: this.VEHICLE_VERSION_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateOptions(json); }
	);

	}, // End onVersionChange().

	onOptionChange: function () {
		if (this.VEHICLE_OPTION_SELECT.selectedIndex == 0) {
			return;
		}
	}, // End onOptionChange().

	onSizeMetricChange: function () {

		this.SIZE_WIDTH_SELECT.disabled = true;
		this.clearOptions(this.SIZE_WIDTH_SELECT);
		this.addOption(this.SIZE_WIDTH_SELECT, this.LIST_LABEL, "");

		this.SIZE_RATIO_SELECT.disabled = true;
		this.clearOptions(this.SIZE_RATIO_SELECT);
		this.addOption(this.SIZE_RATIO_SELECT, this.LIST_LABEL, "");

		this.SIZE_DIAMETER_SELECT.disabled = true;
		this.clearOptions(this.SIZE_DIAMETER_SELECT);
		this.addOption(this.SIZE_DIAMETER_SELECT, this.LIST_LABEL, "");

		this.SIZE_SUBMIT.disabled = true;

		if (this.SIZE_METRIC_SELECT.selectedIndex == 0) { return alert("Please select a metric."); }

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getWidth',
			metric: this.SIZE_METRIC_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateSizeWidths(json); });

	}, // End onSizeWidthChange().

	onSizeWidthChange: function () {

		this.SIZE_RATIO_SELECT.disabled = true;
		this.clearOptions(this.SIZE_RATIO_SELECT);
		this.addOption(this.SIZE_RATIO_SELECT, this.LIST_LABEL, "");

		this.SIZE_DIAMETER_SELECT.disabled = true;
		this.clearOptions(this.SIZE_DIAMETER_SELECT);
		this.addOption(this.SIZE_DIAMETER_SELECT, this.LIST_LABEL, "");

		this.SIZE_SUBMIT.disabled = true;

		if (this.SIZE_WIDTH_SELECT.selectedIndex == 0) { return alert("Please select a width."); }

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getAspectRatio',
			metric: this.SIZE_METRIC_SELECT.value,
			sectionwidth: this.SIZE_WIDTH_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateSizeRatios(json); });

	}, // End onSizeWidthChange().

	onSizeRatioChange: function () {

		this.SIZE_DIAMETER_SELECT.disabled = true;
		this.clearOptions(this.SIZE_DIAMETER_SELECT);
		this.addOption(this.SIZE_DIAMETER_SELECT, this.LIST_LABEL, "");

		this.SIZE_SUBMIT.disabled = true;

		if (this.SIZE_RATIO_SELECT.selectedIndex == 0) { return alert("Please select an aspect ratio."); }

		var thisTSEObj = this;
		$.getJSON(this.AJAX_URL, {
			method: 'getRimDiameter',
			metric: this.SIZE_METRIC_SELECT.value,
			sectionwidth: this.SIZE_WIDTH_SELECT.value,
			aspectratio: this.SIZE_RATIO_SELECT.value,
			returnformat: "json"
		}, function (json) { thisTSEObj.populateSizeDiameters(json); });

	}, // End onSizeRatioChange().

	onSizeDiameterChange: function () {

		this.SIZE_SUBMIT.disabled = true;

		if (this.SIZE_DIAMETER_SELECT.selectedIndex == 0) { return alert("Please select a diameter."); }

		this.SIZE_SUBMIT.disabled = false;

	}, // End onSizeDiameterChange().

	onTireNameChange: function () {
		this.TIRE_NAME_SUBMIT.disabled = true;
		if (this.TIRE_NAME_SELECT.selectedIndex == 0) { return alert("Please select a tire name."); }
		this.TIRE_NAME_SUBMIT.disabled = false;

	}, // End onTireNameChange().

	populateMakes: function (response) {
		this.VEHICLE_MAKE_SELECT.disabled = false;
		var makes = response.DATA;
		for (var i = 0; i < makes.length; i++) {
			this.addOption(this.VEHICLE_MAKE_SELECT, makes[i], makes[i]);
		}

		if (this.savedValues != null && this.savedValues.vehicleMake != "") {
			this.VEHICLE_MAKE_SELECT.value = this.savedValues.vehicleMake;
			this.onMakeChange();
		}
	}, // End populateMakes().

	populateModels: function (response) {
		this.VEHICLE_MODEL_SELECT.disabled = false;
		var models = response.DATA;
		for (var i = 0; i < models.length; i++) {
			this.addOption(this.VEHICLE_MODEL_SELECT, models[i], models[i]);
		}

		if (this.savedValues != null && this.savedValues.vehicleModel != "") {
			this.VEHICLE_MODEL_SELECT.value = this.savedValues.vehicleModel;
			this.onModelChange();
		}
	}, // End populateModels().

	populateYears: function (response) {

		this.VEHICLE_YEAR_SELECT.disabled = false;
		var years = response.DATA;
		for (var i = 0; i < years.length; i++) {
			this.addOption(this.VEHICLE_YEAR_SELECT, years[i], years[i]);
		}

		if (this.savedValues != null && this.savedValues.vehicleYear != "") {
			this.VEHICLE_YEAR_SELECT.value = this.savedValues.vehicleYear;
			$("#tsm_vehicleYearPlusCheck").attr("checked", this.savedValues.vehicleYearPlus == "true" ? true : false);
			this.onYearChange();
		}
	}, // End populateYears().

	populateVersions: function (response) {

		var versions = response.DATA;
		if (versions.length > 1) {
			this.VEHICLE_VERSION_CONTAINER.className = 'tsm_containerOn';
			this.VEHICLE_VERSION_SELECT.disabled = false;
			for (var i = 0; i < versions.length; i++) {
				this.addOption(this.VEHICLE_VERSION_SELECT, versions[i], versions[i]);
			}

			if (this.savedValues != null && this.savedValues.vehicleVersion != "") {
				this.VEHICLE_VERSION_SELECT.value = this.savedValues.vehicleVersion;
				this.onVersionChange();
			}
		}
		if (this.savedValues != null) {
			this.savedValues.vehicleYear = "";
			this.savedValues.vehicleYearPlus = "";
			this.savedValues.vehicleMake = "";
			this.savedValues.vehicleModel = "";
			this.savedValues.vehicleVersion = "";
		}
		return;
	}, // End populateVersions().

	populateOptions: function (response) {

		var options = response.DATA;
		if (options.length > 1) {
			this.VEHICLE_OPTION_CONTAINER.className = 'tsm_containerOn';
			this.VEHICLE_OPTION_SELECT.disabled = false;
			for (var i = 0; i < options.length; i++) {
				this.addOption(this.VEHICLE_OPTION_SELECT, options[i], options[i]);
			}
		} else {
			return;
		}

		if (this.savedValues != null && this.savedValues.vehicleOption != "") {
			this.VEHICLE_OPTION_SELECT.value = this.savedValues.vehicleOption;
			this.onOptionChange();
		}
		if (this.savedValues != null) {
			this.savedValues.vehicleOption = "";
		}
	}, // End populateOptions().

	populateSizeMetrics: function (response) {

		if (this.SIZE_METRIC_SELECT == null) return;

		this.SIZE_METRIC_SELECT.disabled = false;
		var sizeMetrics = response.DATA;
		for (var i = 0; i < sizeMetrics.length; i++) {
			this.addOption(this.SIZE_METRIC_SELECT, sizeMetrics[i][0], sizeMetrics[i][0]);
		}

		if (this.savedValues != null && this.savedValues.sizeMetric != "") {
			this.SIZE_METRIC_SELECT.value = this.savedValues.sizeMetric;
			this.onSizeMetricChange();
		}
	}, // End populateSizeMetrics().

	populateSizeWidths: function (response) {

		if (this.SIZE_WIDTH_SELECT == null) return;

		this.SIZE_WIDTH_SELECT.disabled = false;
		var sizeWidths = response.DATA;
		for (var i = 0; i < sizeWidths.length; i++) {
			this.addOption(this.SIZE_WIDTH_SELECT, sizeWidths[i], sizeWidths[i]);
		}

		if (this.savedValues != null && this.savedValues.sizeWidth != "") {
			this.SIZE_WIDTH_SELECT.value = this.savedValues.sizeWidth;
			this.onSizeWidthChange();
		}
	}, // End populateSizeWidths().

	populateSizeRatios: function (response) {

		this.SIZE_RATIO_SELECT.disabled = false;
		var sizeRatios = response.DATA;
		for (var i = 0; i < sizeRatios.length; i++) {
			this.addOption(this.SIZE_RATIO_SELECT, sizeRatios[i], sizeRatios[i]);
		}

		if (this.savedValues != null && this.savedValues.sizeRatio != "") {
			this.SIZE_RATIO_SELECT.value = this.savedValues.sizeRatio;
			this.onSizeRatioChange();
		}
	}, // End populateSizeRatios().

	populateSizeDiameters: function (response) {

		this.SIZE_DIAMETER_SELECT.disabled = false;
		var sizeDiameters = response.DATA;
		for (var i = 0; i < sizeDiameters.length; i++) {
			this.addOption(this.SIZE_DIAMETER_SELECT, sizeDiameters[i], sizeDiameters[i]);
		}

		if (this.savedValues != null && this.savedValues.sizeDiameter != "") {
			this.SIZE_DIAMETER_SELECT.value = this.savedValues.sizeDiameter;
			this.onSizeDiameterChange();
		}
		this.savedValues.sizeMetric = "";
		this.savedValues.sizeWidth = "";
		this.savedValues.sizeRatio = "";
		this.savedValues.sizeDiameter = "";
	}, // End populateSizeDiameters().

	populateTireNames: function (response) {

		if (this.TIRE_NAME_SELECT == null) return;

		this.TIRE_NAME_SELECT.disabled = false;
		var tireNames = response.DATA;
		for (var i = 0; i < tireNames.length; i++) {
			this.addOption(this.TIRE_NAME_SELECT, tireNames[i][1], tireNames[i][0]);
		}

		if (this.savedValues != null && this.savedValues.tireName != "") {
			this.TIRE_NAME_SELECT.value = this.savedValues.tireName;
			this.onTireNameChange();
		}
	}, // End populateTireNames().

	/**
	* Remove all of the options from the passed <select> object
	*
	* @param selectObject
	*/
	clearOptions: function (selectObject) {
		if (!selectObject) {
			return;
		}

		while (selectObject.options.length > 0) {
			selectObject.remove(0);
		}
	}, // End this.clearOptions().

	/**
	* Add a name/value option to the passed <select> object
	*
	* @param selectObject
	* @param name
	* @param value
	*/
	addOption: function (selectObject, name, value) {
		if (!selectObject) {
			return;
		}

		selectObject.options[selectObject.options.length] =
		new Option(name, value);
	}, // End this.addOption().

	/**
	* Trim leading and trailing whitespace
	*
	* @param str
	*/
	trim: function (str) {
		if (!str) {
			return "";
		}
		return str.replace(/^\s+|\s+$/g, "");
	} // End trim().

});                                                     // End class TireSelectorEntryForm.