/* Matchmaker 3 v0.8 - Inventory View JS */
/* Copyright 2009 Autofusion.com */

(function(){

/* indexOf() for Arrays */

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

/* Autofusion Object */

if(typeof(YAHOO.AUTOFUSION) == 'undefined'){
	YAHOO.namespace('AUTOFUSION');
}
if(typeof(YAHOO.AUTOFUSION.items) == 'undefined'){
	YAHOO.AUTOFUSION.items = new Object();
}
if(typeof(YAHOO.AUTOFUSION.JWS) == 'undefined'){
	YAHOO.AUTOFUSION.JWS = new Object(); // Instantiation must wait for confid.
}
var AF = YAHOO.AUTOFUSION;
var JWS = YAHOO.AUTOFUSION.JWS;

/* Inventory View Plugin */

// Matchmaker Object
AF.Matchmaker = new Object;
var MM = AF.Matchmaker;

// Inventory Object
MM.Inventory = function(mmConfig){
	this.config = new Object();
	this.defaults = new Object();
	this.prefs = new Object();
	this.user = new Object();
	this.params = new Object();
	this.hashParams = new Object;
	this.vocab = new Object();
	this.phrases = new Object();
	this.render = new Object();
	this.renderQueue = new Array();
	this.ranges = new Object();
	this.flags = new Object();
	this.flags.dropdowns = new Object();
	this.flags.sliders = new Object();
	this.flags.panels = new Object();
	this.flags.breadcrumbs = new Object();
	this.flags.initialLoad = true;
	this.compareList = new Array();
	this.total = 0;
	this.page = 1;
	var that = this;
	this.numberOnly = function(pString){
		pString += '';
		var rgx = /^\d|\.|-$/;
		var out = '';
		for( var i = 0; i < pString.length; i++ ){
			if( rgx.test( pString.charAt(i) ) ){
			  if( !( ( pString.charAt(i) == '.' && out.indexOf( '.' ) != -1 ) ||
					 ( pString.charAt(i) == '-' && out.length != 0 ) ) ){
				out += pString.charAt(i);
			  }
			}
		}
		return out;
	}; // this.numberOnly()
	this.yuiHover = function(){
		// This is a built-in fix for IE6's hover limitations.
		var oClasses = ["mm3_LargeResult", "mm3_TileResult", "mm3_SmallResult", "mm3_TextOnlyRow"];
		for(var i=0; i<oClasses.length; i++){
			(function(){
				var oElements = YAHOO.util.Dom.getElementsByClassName(oClasses[i]);
				var oHoverClass = oClasses[i] + "_hover";
				for(var j=0; j<oElements.length; j++){
					oElements[j].onmouseover = function(){
						YAHOO.util.Dom.addClass(this, oHoverClass);
					}
					oElements[j].onmouseout = function(){
						YAHOO.util.Dom.removeClass(this, oHoverClass);
					}
				}
			})();
		}
	}; // this.yuiHover()
	this.showComments = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(!YAHOO.util.Dom.hasClass(oTarget, "mm3_ResultParent")){
			oTarget = YAHOO.util.Dom.getAncestorByClassName(oTarget, 'mm3_ResultParent', 'div');
		}
		oTarget = YAHOO.util.Dom.getElementsByClassName('mm3_ResultComments', 'div', oTarget);
		if(oTarget.length > 0){
			YAHOO.util.Dom.setStyle(oTarget[0], 'display', 'block');
		}
	}; // this.showComments()
	this.hideComments = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(!YAHOO.util.Dom.hasClass(oTarget, "mm3_ResultParent")){
			oTarget = YAHOO.util.Dom.getAncestorByClassName(oTarget, 'mm3_ResultParent', 'div');
		}
		oTarget = YAHOO.util.Dom.getElementsByClassName('mm3_ResultComments', 'div', oTarget);
		if(oTarget.length > 0){
			YAHOO.util.Dom.setStyle(oTarget[0], 'display', 'none');
		}
	}; // this.hideComments()
	this.getVIN = function(pTarget){
		var oCheckVIN = function(el){
			return (el.getAttribute("name") == "vin");
		}
		var oVIN = YAHOO.util.Dom.getElementsBy(oCheckVIN, "input", pTarget)[0];
		oVIN = oVIN.getAttribute("value");
		return oVIN;
	}; // this.getVIN()
	this.compileURL = function(e){
		if(typeof(e) != "undefined"){
			YAHOO.util.Event.preventDefault(e);
		}
		var oNewURL = this.config.mmIndex + "?";
		for(var i in this.prefs){
			if(this.prefs[i] != this.defaults[i]){
				oNewURL += "&" + i + "=" + this.prefs[i];
			}
		}
		for(var i in this.params){
			if(this.params[i] != this.defaults[i]){
				oNewURL += "&" + i + "=" + this.params[i];
			}
		}
		for(var i in this.user){
			if(this.user[i] != this.defaults[i]){
				oNewURL += "&" + i + "=" + this.user[i];
			}
		}
		window.location.href = oNewURL;
	}; // this.compileURL()
	this.setHashParam = function(pParam, pValue){
		this.hashParams[pParam] = pValue;
	}; // this.setHashParam()
	this.updateHash = function(){
		var oNewHash = '';
		var oShowHash = false;
		for(var i in this.hashParams){
			switch(i){
				case 'page':
					if(this.page > 1){
						oShowHash = true;
						oNewHash += '&page=' + this.page;
					}
					break;
				default:
					return false;
			}
		}
		if(window.location.hash.replace(/\#/, '') != oNewHash){
			window.location.hash = (oShowHash) ? '#' + oNewHash: '#&page=1';
		}
	}; // this.updateHash()
	this.updateResults = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		YAHOO.util.Event.preventDefault(e);
		if(this.flags.sliders["Year"] == true){
			var oYearMin = document.getElementById("mm3_YearSliderMinField");
			var oYearMax = document.getElementById("mm3_YearSliderMaxField");
			var oYearRange = new Array();
			for(var i=parseInt(oYearMin.value); i<=parseInt(oYearMax.value); i++){
				oYearRange.push((i + "")); // Convert numbers to strings for less typeof's.
			}
			this.params["Year"] = oYearRange;
		}
		if(this.flags.sliders["Price"] == true){
			var oPriceMin = document.getElementById("mm3_PriceSliderMinField");
			var oPriceMax = document.getElementById("mm3_PriceSliderMaxField");
			this.params["MinPrice"] = parseInt(oPriceMin.value.replace(/,/, "")) + "";
			this.params["MaxPrice"] = parseInt(oPriceMax.value.replace(/,/, "")) + "";
		}
		if(this.flags.sliders["MPG"] == true){
			var oMPGMin = document.getElementById("mm3_MPGSliderMinField");
			var oMPGMax = document.getElementById("mm3_MPGSliderMaxField");
			this.params["MinMPG"] = parseInt(oMPGMin.value.replace(/,/, "")) + "";
			this.params["MaxMPG"] = parseInt(oMPGMax.value.replace(/,/, "")) + "";
		}
		if(this.flags.sliders["Mileage"] == true){
			var oMileageMin = document.getElementById("mm3_MileageSliderMinField");
			var oMileageMax = document.getElementById("mm3_MileageSliderMaxField");
			this.params["MinMileage"] = parseInt(oMileageMin.value.replace(/,/, "")) + "";
			this.params["MaxMileage"] = parseInt(oMileageMax.value.replace(/,/, "")) + "";
		}
		this.compileURL();
	}; // this.updateResults()
	this.viewDetails = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(!YAHOO.util.Dom.hasClass(oTarget, 'no-details')){
			YAHOO.util.Event.stopPropagation(e);
			YAHOO.util.Event.preventDefault(e);
			var oComments = (YAHOO.util.Dom.hasClass(oTarget, 'mm3_ResultComments')) ? '&comments=true' : '';
			if(oTarget.className != 'mm3_CompareCheckbox'){
				if(oTarget.nodeName.toUpperCase() == "A"){
					YAHOO.util.Event.preventDefault(e);
				}
				if(!YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ButtonCompare", "a") && !YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_CompareCheckbox", "div") && !YAHOO.util.Dom.hasClass(oTarget, "mm3_ButtonCompare")){
					if(!YAHOO.util.Dom.hasClass(oTarget, "mm3_ResultParent")){
						oTarget = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ResultParent");
					}
					var oMode = (this.user.mode == this.defaults.mode) ? '' : '&mode=' + this.user.mode;
					var oVIN = this.getVIN(oTarget);
					window.location.href = this.config.mmDetails + "?&VIN=" + oVIN + oComments + oMode;
				} else if(oTarget.nodeName.toUpperCase() == 'LABEL'){
					YAHOO.util.Dom.getNextSibling(oTarget).click();
				}
			}
		}
	}; // this.viewDetails()
	this.compareVehicles = function(e){
		YAHOO.util.Event.preventDefault(e);
		if (this.compareList.length > 1){
			var oVINs = "";
			for(var i=0; i<this.compareList.length; i++){
				oVINs += this.compareList[i] + ",";
			}
			oVINs = oVINs.slice(0, -1);
			var oMode = (this.user.mode == this.defaults.mode) ? '' : '&mode=' + this.user.mode;
			window.location.href = this.config.mmCompare + "?&VIN=" + oVINs + oMode;
		} else if(this.compareList.length == 1){
			alert(this.phrases['Inventory One Marked']);
		} else {
			alert(this.phrases['Inventory None Marked']);
		}
	}; // this.compareVehicles()
	this.VINSearch = function(e){
		var oVINSearch = document.getElementById("mm3_VINSearch");
		var oStoredValue = oVINSearch.value;
		oVINSearch.value = this.vocab['Loading'];
		if(oStoredValue.length > 10){ // VINs
			JWS.getVehicle(oStoredValue, true, function(pObj){
				// pObj = this!
				if(JWS.JSON.vehicle.basic == false){
					alert(pObj.phrases['Inventory No Matches']);
					oVINSearch.value = oStoredValue;
				} else {
					window.location.href = pObj.config.mmDetails + "?&VIN=" + oStoredValue;
					return false;
				}
			}, this);
		} else { // Stock Numbers
			JWS.addSingleParam("StockNum", oStoredValue, function(pObj){
				JWS.getMatch(1, function(pObj){
					// pObj = this!
					if(typeof(JWS.JSON.match[0]) == "undefined"){
						alert(pObj.phrases['Inventory No Matches']);
						oVINSearch.value = oStoredValue;
					} else {
						pObj.params.StockNum = oStoredValue;
						pObj.compileURL();
						return false;
					}
				}, pObj); // JWS.getVehicle()
			}, this); // JWS.addSingleParam()
		}
	}; // this.VINSearch()
	this.noMatches = function(){
		var oPanel = new YAHOO.widget.Panel("mm3_NoMatchesPanel", {
			constraintoviewport: true,
			close: false,
			effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.25 },
			zIndex: 30000
		});
		oPanel.setHeader(this.vocab['No Matches'] + '!');
		var oDIV = document.createElement("div");
		oDIV.innerHTML = '\
			<p>' + this.phrases['Inventory No Matches'] + '</p>\
			<div id="mm3_NoMatchesControls">\
				<div>\
					<a class="mm3_Button01" href="javascript:history.back();"><span>' + this.vocab['Go Back'] + '</span></a>\
					<a class="mm3_Button01" href="javascript:window.location.href=\'' + this.config.mmIndex + '?newsearch=true\';"><span>' + this.vocab['New Search'] + '</span></a>\
					<div class="mm3_ClearDiv"></div>\
				</div>\
			</div>\
			<div class="mm3_ClearDiv"></div>\
		';
		oPanel.appendToBody(oDIV);
		oPanel.render(document.body);
		var oPagesContainers = YAHOO.util.Dom.getElementsByClassName("mm3_PagesContainer");
		var oDisplayingResults = YAHOO.util.Dom.getElementsByClassName("mm3_DisplayingResults");
		var oSliderContainers = YAHOO.util.Dom.getElementsByClassName("mm3_SliderContainer");
		YAHOO.util.Dom.setStyle(oPagesContainers, "display", "none");
		YAHOO.util.Dom.setStyle(oDisplayingResults, "display", "none");
		YAHOO.util.Dom.setStyle(oSliderContainers, "display", "none");
	}; // this.noMatches()
	this.checkHighlight = function(pResult){
		var oMatchFound = false;
		// Do we even have a highlight?
		if(typeof(that.highlight) != 'undefined'){
			// Loop through highlights.
			for(var i in that.highlight){
				// Does this result contain the highlight we're looking for?
				if(typeof(pResult[i]) != 'undefined'){
					// Okay, string or array?
					switch(typeof(pResult[i])){
						case 'string':
							for(var j in that.highlight[i]){
								if(pResult[i] == j){
									oMatchFound = that.highlight[i][j];
									break;
								}
							}
							break;
						case 'object':
							for(var j in that.highlight[i]){
								for(var k=0; k<pResult[i].length; k++){
									if(pResult[i][k] == j){
										oMatchFound = that.highlight[i][j];
										break;
									}
								}
							}
							break;
					}
				}
			} // for()
		} // if()
		return oMatchFound;
	}; // this.checkHighlight()
	this.sortByChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oIDValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_SORT/, "");
			var oRealValue = "";
			if(oIDValue == "PriceLTH"){
				oRealValue = "sort_price ASC";
			} else if(oIDValue == "PriceHTL"){
				oRealValue = "sort_price DESC";
			} else if(oIDValue == "Year"){
				oRealValue = "year DESC";
			} else if(oIDValue == "Make"){
				oRealValue = "make ASC";
			} else if(oIDValue == "Model"){
				oRealValue = "model ASC";
			} else if(oIDValue == "Condition"){
				oRealValue = "type ASC";
			} else if(oIDValue == "Mileage"){
				oRealValue = "mileage ASC";
			} else if(oIDValue == "MPG"){
				oRealValue = "mpg_highway DESC";
			} else if(oIDValue == "Age"){
				oRealValue = "datestamp ASC";
			}
			this.prefs.sort = oRealValue;
			this.compileURL();
		}
	}; // this.sortByChange()
	this.perPageChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_PP/, "");
			this.prefs.per_page = oValue;
			this.compileURL();
		}
	}; // this.perPageChange()
	this.typeChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_TypeOptions/, "");
			this.params.VehicleType = oValue;
			this.compileURL();
		}
	}; // this.typeChange()
	this.makeChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_MakeOptions/, "");
			if(oValue == "All"){
				delete this.params.Make;
			} else {
				this.params.Make = oValue;
			}
			this.compileURL();
		}
	}; // this.makeChange()
	this.modelChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_ModelOptions/, "");
			if(oValue == "All"){
				delete this.params.Model;
			} else {
				this.params.Model = oValue;
			}
			this.compileURL();
		}
	}; // this.modelChange()
	this.yearChange = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.options[oTarget.selectedIndex].className != "mm3_SelectBlank"){
			var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_YearOptions/, "");
			if(oValue == "All"){
				delete this.params.Year;
			} else {
				this.params.Year = oValue;
			}
			this.compileURL();
		}
	}; // this.yearChange()
	this.newSearch = function(e){
		if(typeof(e) != "undefined"){
			YAHOO.util.Event.preventDefault(e);
		}
		if(this.user.mode == this.defaults.mode){
			window.location.href = this.config.mmIndex;
		} else {
			window.location.href = this.config.mmIndex + '?mode=' + this.user.mode;
		}
	}; // this.newSearch()
	this.saveSearch = function(e){
		var that = this;
		var updateList = function(){
			JWS.getSavelist(function(){
				var oSaveSearchList = document.getElementById("mm3_SaveSearchList");
				var oCurrentEmail = document.getElementById("mm3_CurrentEmail");
				oSaveSearchList.innerHTML = '';
				if(typeof(that.params.Email) != "undefined"){
					oCurrentEmail.innerHTML = that.params.Email + ' <a href="javascript:void(0);">[' + that.vocab['Clear'] + '?]</a><br />';
					var oHiddenDivs = YAHOO.util.Dom.getElementsByClassName("mm3_SaveSearchHide");
					YAHOO.util.Dom.setStyle(oHiddenDivs, "display", "block");
					var oDeleteEmail = oCurrentEmail.getElementsByTagName("a")[0];
					YAHOO.util.Event.addListener(oDeleteEmail, "click", function(e){
						if(confirm(that.phrases['Inventory Clear Email'])){
							JWS.clearSingleParam("Email", function(){
								delete that.params.Email;
								oCurrentEmail.innerHTML = '';
								updateList();
							}); // JWS.clearSingleParam;
						}
					});
				} else {
					oCurrentEmail.innerHTML = 'none';
				}
				if(JWS.JSON.savelist.length == 0){
					oSaveSearchList.innerHTML += that.phrases['Inventory No Searches'];
				} else {
					oSaveSearchList.innerHTML += that.phrases['Inventory Restore Search'] + '<br />';
					for(var i=0; i<JWS.JSON.savelist.length; i++){
						oSaveSearchList.innerHTML += '\
							<a href="javascript:void(0);" rel="' + JWS.JSON.savelist[i].name + '">' + JWS.JSON.savelist[i].name + ' - ' + JWS.JSON.savelist[i].date + ' [' + that.vocab['Restore'] + '!]</a> \
							<a href="javascript:void(0);" rel="' + JWS.JSON.savelist[i].name + '">[' + that.vocab['Delete'] + '?]</a><br />\
						';
					}
					var oLinks = oSaveSearchList.getElementsByTagName("a");
					YAHOO.util.Event.addListener(oLinks, "click", function(e){
						var oTarget = YAHOO.util.Event.getTarget(e);
						if(oTarget.innerHTML.indexOf("Delete") == -1){
							JWS.getSave(oTarget.rel, function(){
								JWS.getParam(function(){
									that.params = JWS.JSON.param;
									that.compileURL();
								}); // JWS.getSave;
							}); // JWS.getSave;
						} else {
							if(confirm(that.phrases['Inventory Delete Search'])){
								JWS.delSave(oTarget.rel, function(){
									updateList();
								}); // JWS.delSave;
							}
						}
					});
				}
			}); // JWS.getSavelist;
		}; // updateList()
		var setEmail = function(){
			var validateEmail = function(pEmail){
				var oEmailFilter = /^.+@.+\..{2,6}$/;
				var oIllegal = /[\s\(\)\<\>\,\;\:\\\/\"\[\]]/;
				if(pEmail.length > 1 && oEmailFilter.test(pEmail) && pEmail.match(oIllegal) == null){
					return true;
				} else {
					return false;
				}
			}; // validateEmail()
			var oSaveSearchEmail = document.getElementById("mm3_SaveSearchEmail");
			if(validateEmail(oSaveSearchEmail.value) == true){
				JWS.addSingleParam("Email", oSaveSearchEmail.value, function(){
					that.params.Email = oSaveSearchEmail.value;
					document.getElementById("mm3_CurrentEmail").innerHTML = oSaveSearchEmail.value;
					updateList();
				}); // JWS.addSingleParam;
			} else {
				alert(that.phrases['Inventory Valid Save Email']);
			}
		}; // setEmail()
		var newSave = function(){
			var oSaveSearchName = document.getElementById("mm3_SaveSearchName");
			var oValue = oSaveSearchName.value;
			var oLength = oValue.length;
			for(var i=0; i<oLength; i++){
				oValue = oValue.replace(/\s/, "");
			}
			if(oValue != ""){
				JWS.setSave(oSaveSearchName.value, function(){
					oSaveSearchName.value = "";
					updateList();
				}); // JWS.getSavelist;
			} else {
				alert(that.phrases['Inventory Valid Save Name']);
			}
		}; // newSave()
		YAHOO.util.Event.preventDefault(e);
		if(YAHOO.util.Dom.inDocument("mm3_SaveSearchPanel_c")){
			var oContainer = document.getElementById("mm3_SaveSearchPanel_c");
			oContainer.parentNode.removeChild(oContainer);
		}
		var oPanel = new YAHOO.widget.Panel("mm3_SaveSearchPanel", {
			constraintoviewport: true,
			close: true,
			effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.25 },
			zIndex: 30000
		});
		oPanel.setHeader('Save Search');
		var oEnterDiv = document.createElement("div");
		oEnterDiv.innerHTML = '\
			<h2>1: ' + that.phrases['Inventory Save Step 1'] + '</h2>\
			<p class="mm3_Left">' + that.phrases['Inventory Save Enter Email'] + ': <input id="mm3_SaveSearchEmail" type="text" maxlength="50"></input></p>\
			<a id="mm3_SaveSearchGo" class="mm3_Button01" href="javascript:void(0);"><span>' + that.vocab['Go'] + '</span></a>\
			<div class="mm3_ClearDiv"></div>\
		';
		oPanel.appendToBody(oEnterDiv);
		var oCurrent = document.createElement("div");
		oCurrent.className = "mm3_SaveSearchHide";
		oCurrent.innerHTML = '\
			<h2>2: ' + that.phrases['Inventory Save Step 2'] + '</h2>\
			<p>' + that.phrases['Inventory Save Current Email'] + ': <em id="mm3_CurrentEmail">' + that.vocab['None'] + '</em></p>\
			<h3>' + that.phrases['Inventory Save Current Searches'] + ':</h3>\
			<p id="mm3_SaveSearchList">' + that.vocab['Loading'] + '</p>\
		';
		oPanel.appendToBody(oCurrent);
		updateList();
		var oNewDiv = document.createElement("div");
		oNewDiv.className = "mm3_SaveSearchHide";
		oNewDiv.innerHTML = '\
			<h3>' + that.phrases['Inventory Save Create New'] + ':</h3>\
			<p class="mm3_Left">' + that.phrases['Inventory Save Enter Name'] + ': <input id="mm3_SaveSearchName" type="text" maxlength="20"></input></p>\
			<a id="mm3_SaveSearchCreate" class="mm3_Button01" href="javascript:void(0);"><span>' + that.vocab['Create'] + '</span></a>\
			<div class="mm3_ClearDiv"></div>\
		';
		oPanel.appendToBody(oNewDiv);
		YAHOO.util.Event.addListener("mm3_SaveSearchGo", "click", setEmail);
		YAHOO.util.Event.addListener("mm3_SaveSearchCreate", "click", newSave);
		var oControls = document.createElement("div");
		oControls.id = "mm3_SaveSearchControls";
		oControls.innerHTML = '\
			<div>\
				<a id="mm3_SaveSearchDone" href="javascript:void(0);" class="mm3_Button01"><span>' + that.vocab['Return to Current Search'] + '</span></a>\
				<br class="mm3_ClearDiv" />\
			</div>\
		';
		oPanel.appendToBody(oControls);
		var oClear = document.createElement("div");
		oClear.className = "mm3_ClearDiv";
		oPanel.appendToBody(oClear);
		YAHOO.util.Event.addListener("mm3_SaveSearchDone", "click", function(){
			oPanel.hide();
		});
		oPanel.render(document.body);
		if(YAHOO.env.ua.ie == 6){
			scroll(0,0);
		}
	}; // this.saveSearch()
	this.displayChange = function(e){
		YAHOO.util.Event.preventDefault(e);
		var oTarget = YAHOO.util.Event.getTarget(e);
		if (oTarget.id == "mm3_DisplayTile"){
			this.user.display = "tile";
		} else if (oTarget.id == "mm3_DisplayLarge"){
			this.user.display = "large";
		} else if (oTarget.id == "mm3_DisplaySmall"){
			this.user.display = "small";
		} else if (oTarget.id == "mm3_DisplayText"){
			this.user.display = "text";
		}
		this.compileURL();
	}; // this.displayChange()
	this.pageNavigation = function(e){
		YAHOO.util.Event.preventDefault(e);
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() != 'A'){
			oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, 'a');
		}
		if(YAHOO.util.Dom.hasClass(oTarget, "mm3_FirstPage")){
			this.page = 1;
		} else if(YAHOO.util.Dom.hasClass(oTarget, "mm3_LastPage")){
			this.page = Math.ceil(this.total/this.prefs.per_page);
		} else if(YAHOO.util.Dom.hasClass(oTarget, "mm3_NextPage")){
			var oNextPage = this.page + 1;
			if(oNextPage <= Math.ceil(this.total/this.prefs.per_page)){
				this.page++;
			}
		} else if(YAHOO.util.Dom.hasClass(oTarget, "mm3_PreviousPage")){
			var oPreviousPage = this.page - 1;
			if(oPreviousPage >= 1){
				this.page--;
			}
		}
		if(YAHOO.util.Dom.hasClass(oTarget.parentNode, "mm3_Top")){
			if(YAHOO.env.ua.ie == 7){
				document.documentElement.scrollTop = 0;
			} else {
				document.getElementById('mm3_Container').scrollIntoView();
			}
		}
		this.loadPage(this.page);
	}; // this.pageNavigation()
	this.pageNumber = function(e){
		YAHOO.util.Event.preventDefault(e);
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() != "A"){
			oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "a");
		}
		var oSPAN = YAHOO.util.Dom.getFirstChild(oTarget);
		if(isNaN(parseInt(oSPAN.innerHTML)) == false){
			if(YAHOO.util.Dom.hasClass(oTarget.parentNode, "mm3_Top")){
				if(YAHOO.env.ua.ie == 7){
					document.documentElement.scrollTop = 0;
				} else {
					document.getElementById('mm3_Container').scrollIntoView();
				}
			}
			this.page = parseInt(oSPAN.innerHTML);
			this.loadPage(this.page);
		}
	}; // this.pageNumber()
	this.toggleCompare = function(e){
		YAHOO.util.Event.stopPropagation(e);
		var oTarget = YAHOO.util.Event.getTarget(e);
		var oLabel = YAHOO.util.Dom.getPreviousSibling(oTarget);
		if(oLabel != null){
			if(oLabel.nodeName.toUpperCase() != "LABEL"){
				oLabel = null;
			}
		}
		oAncestor = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ResultParent");
		var oVIN = this.getVIN(oAncestor);
		if(oTarget.checked == true){
			this.compareList.push(oVIN);
			if(oLabel != null){
				oLabel.innerHTML = this.vocab['Undo Compare'];
			}
		} else {
			var oIndex = this.compareList.indexOf(oVIN);
			this.compareList.splice(oIndex, 1);
			if(oLabel != null){
				oLabel.innerHTML = this.vocab['Compare'];
			}
		}
	}; // this.toggleCompare()
	this.panelCheckbox = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		var oValue = oTarget.id.replace(/mm3_Options/, "");
		var oSection = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ParamSection");
		var oParamID = oSection.id;
		oParamID = oParamID.replace(/mm3_Param/, "");
		var oPanel = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_NavAreaOptionsPanel");
		if(oTarget.checked == true){
			if(typeof(this.params[oParamID]) == "undefined"){
				this.params[oParamID] = [];
			}
			this.params[oParamID].push(oValue);
		} else {
			for(var i=0; i<this.params[oParamID].length; i++){
				if(this.params[oParamID][i] == oValue){
					this.params[oParamID].splice(i, 1);
				}
			}
		}
		if(this.params[oParamID].length == 0){
			delete this.params[oParamID];
		}
		JWS.setParam(this.params, function(pObj){
			// pObj = this!
			pObj.generatePanel(oPanel);
		}, this); // JWS.setParam;
	}; // this.panelCheckbox()
	this.panelDropdown = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		var oValue = oTarget.options[oTarget.selectedIndex].id.replace(/mm3_Options/, "");
		var oSection = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ParamSection");
		var oParamID = oSection.id;
		oParamID = oParamID.replace(/mm3_Param/, "");
		var oPanel = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_NavAreaOptionsPanel");
		this.params[oParamID] = oValue;
		if(oValue == "None"){
			delete this.params[oParamID];
		}
		JWS.setParam(this.params, function(pObj){
			// pObj = this!
			pObj.generatePanel(oPanel);
		}, this); // JWS.setParam;
	}; // this.panelDropdown()
	this.addColor = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() != "TR"){
			oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "tr");
		}
		var oValue = oTarget.id.replace(/mm3_Colors/, "");
		var oSection = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ColorPicker");
		var oParamID = oSection.id;
		oParamID = oParamID.replace(/mm3_/, "");
		oParamID = oParamID.replace(/Picker/, "");
		var oPanel = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_NavAreaOptionsPanel");
		// Convert to array if string:
		if(typeof(this.params[oParamID]) == "string"){
			this.params[oParamID] = [this.params[oParamID]];
		} else if(typeof(this.params[oParamID]) == "undefined"){
			this.params[oParamID] = [];
		}
		this.params[oParamID].push(oValue);
		JWS.setParam(this.params, function(pObj){
			// pObj = this!
			pObj.generatePanel(oPanel);
		}, this); // JWS.setParam;
	}; // this.addColor()
	this.removeColor = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() != "TR"){
			oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "tr");
		}
		var oValue = oTarget.id.replace(/mm3_Colors/, "");
		var oColorTable = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_ColorTable");
		var oParamID = oColorTable.id;
		oParamID = oParamID.replace(/mm3_/, "");
		oParamID = oParamID.replace(/Table/, "");
		var oPanel = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_NavAreaOptionsPanel");
		// Convert to array if string:
		if(typeof(this.params[oParamID]) == "string"){
			this.params[oParamID] = [this.params[oParamID]];
		} else if(typeof(this.params[oParamID]) == "undefined"){
			this.params[oParamID] = [];
		}
		for(var i=0; i<this.params[oParamID].length; i++){
			if(this.params[oParamID][i] == oValue){
				this.params[oParamID].splice(i, 1);
			}
		}
		JWS.setParam(this.params, function(pObj){
			// pObj = this!
			pObj.generatePanel(oPanel);
		}, this); // JWS.setParam;
	}; // this.removeColor()
	this.showColors = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		var oID = oTarget.id.replace(/mm3_/, "");
		oID = oID.replace(/Button/, "");
		YAHOO.util.Dom.setStyle(("mm3_" + oID + "Picker"), "display", "block");
	}; // this.showColors()
	this.resetColors = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		var oID = oTarget.id.replace(/mm3_/, "");
		oID = oID.replace(/RemoveAll/, "");
		YAHOO.util.Dom.setStyle(("mm3_" + oID + "Picker"), "display", "none");
		this.params[oID] = [];
		var oTable = document.getElementById(("mm3_" + oID + "Table"));
		var oTBody = YAHOO.util.Dom.getFirstChild(oTable);
		var oNewBody = document.createElement("tbody");
		var oTR = document.createElement("tr");
		var oTD = document.createElement("td");
		oTD.appendChild(document.createTextNode(" "));
		oTR.appendChild(oTD);
		oNewBody.appendChild(oTR);
		oTable.removeChild(oTBody);
		oTable.appendChild(oNewBody);
	}; // this.resetColors()
	this.renderPanel = function(pPanel, pGenerated){
		var oContinue = true;
		for(var i in this.flags.panels){
			if(this.flags.panels[i] == false){
				oContinue = false;
			}
		}
		if(oContinue == true){
			var oRenderID = pPanel.id.replace(/mm3_Panel/, "");
			// For every item (in order) in this render group...
			for(var i=0; i<this.render[oRenderID].length; i++){
				// ...check each item in the renderQueue.
				for(var j=0; j<this.renderQueue.length; j++){
					var oParamID = this.renderQueue[j].id.replace(/mm3_Param/, "");
					// If this renderQueue item is next on the list...
					if(oParamID == this.render[oRenderID][i]){
						// ...append it!
						pGenerated.appendChild(this.renderQueue[j]);
					}
				}
			}
			// Last but not least, clear the renderQueue!
			this.renderQueue = new Array();
			var oCheckboxes = pGenerated.getElementsByTagName("input");
			YAHOO.util.Event.addListener(oCheckboxes, "click", this.panelCheckbox, this, true);
			var oDropdowns = pGenerated.getElementsByTagName("select");
			YAHOO.util.Event.addListener(oDropdowns, "change", this.panelDropdown, this, true);
			var oNavAreaButtonWrapper = document.createElement("div");
			oNavAreaButtonWrapper.className = "mm3_NavAreaButtonWrapper";
			var oA = document.createElement("a");
			oA.href = "javascript:void(0);";
			oA.className = "mm3_Button01 mm3_UpdateButton";
			var oSpan = document.createElement("span");
			oSpan.appendChild(document.createTextNode(this.vocab['Update Results']));
			oA.appendChild(oSpan);
			oNavAreaButtonWrapper.appendChild(oA);
			var oClear01 = document.createElement("div");
			oClear01.className = "mm3_ClearDiv";
			oNavAreaButtonWrapper.appendChild(oClear01);
			pGenerated.appendChild(oNavAreaButtonWrapper);
			var oClear02 = document.createElement("div");
			oClear02.className = "mm3_ClearDiv";
			pGenerated.appendChild(oClear02);
			YAHOO.util.Event.addListener(oA, "click", this.compileURL, this, true);
			var oPanelLoader = YAHOO.util.Dom.getElementsByClassName("mm3_PanelLoader", "div", pPanel)[0];
			pPanel.removeChild(oPanelLoader);
			YAHOO.util.Dom.setStyle(pGenerated, "display", "block");
		}
	}; // this.renderPanel()
	this.generateOptions = function(pOption, pName, pPanel, pGenerated){
		JWS.getFilter(pOption, function(pObj){
			// pObj = this!
			if(JWS.JSON.filter != ""){
				var oParamSection = document.createElement("div");
				oParamSection.id = "mm3_Param" + pOption;
				oParamSection.className = "mm3_ParamSection";
				//pGenerated.appendChild(oParamSection);
				var oP01 = document.createElement("p");
				oP01.appendChild(document.createTextNode(pName + ":"));
				oParamSection.appendChild(oP01);
				var oC01 = document.createElement("div"); // Column 1.
				oC01.className = "mm3_OptionsPanelColumn";
				oParamSection.appendChild(oC01);
				if(pOption.indexOf("Min") == -1){ // Checkboxes.
					var oC02 = document.createElement("div"); // Column 2.
					oC02.className = "mm3_OptionsPanelColumn";
					oParamSection.appendChild(oC02);
					var oAlt = false; // false = oC01, true = oC02.
					var oInput = new Array();
					var oLabel = new Array();
					var oLabelCount = new Array();
					var oBR = new Array();
					for(var i in JWS.JSON.filter){
						oInput[i] = document.createElement("input");
						oInput[i].type = "checkbox";
						oInput[i].id = "mm3_Options" + i;
						// Is this param defined?
						if(typeof(pObj.params[pOption]) != "undefined"){
							if(typeof(pObj.params[pOption]) != "string"){ // Array.
								for(var j=0; j<pObj.params[pOption].length; j++){
									// Is this specific option defined?
									if(pObj.params[pOption][j] == i){
										oInput[i].defaultChecked = "defaultChecked";
									}
								}
							} else { // String.
								// Is this specific option defined?
								if(pObj.params[pOption] == i){
									oInput[i].defaultChecked = "defaultChecked";
								}
							}
						}
						oLabel[i] = document.createElement("label");
						oLabel[i].htmlFor = "mm3_Options" + i;
						oLabel[i].appendChild(document.createTextNode(" " + JWS.JSON.filter[i].name.replace(/\//, " / ") + " "));
						oLabelCount[i] = document.createElement("span");
						oLabelCount[i].appendChild(document.createTextNode("(" + JWS.JSON.filter[i].count + ")"));
						oLabel[i].appendChild(oLabelCount[i]);
						oBR[i] = document.createElement("br");
						if(oAlt == false){
							oC01.appendChild(oInput[i]);
							oC01.appendChild(oLabel[i]);
							oC01.appendChild(oBR[i]);
							oAlt = true;
						} else {
							oC02.appendChild(oInput[i]);
							oC02.appendChild(oLabel[i]);
							oC02.appendChild(oBR[i]);
							oAlt = false;
						}
					} // for()
				} else { // Dropdowns.
					var oSelect = document.createElement("select");
					oSelect.id = "mm3_Options" + pOption;
					var oNone = document.createElement("option");
					oNone.id = "mm3_OptionsNone";
					oNone.appendChild(document.createTextNode("(None)"));
					oSelect.appendChild(oNone);
					var oOption = new Array();
					for(var i in JWS.JSON.filter){
						oOption[i] = document.createElement("option");
						oOption[i].id = "mm3_Options" + i;
						// Is this param defined?
						if(typeof(pObj.params[pOption]) != "undefined"){
							// Is this specific option defined?
							if(pObj.params[pOption] == i){
								oOption[i].selected = "selected";
							}
						}
						oOption[i].appendChild(document.createTextNode(JWS.JSON.filter[i].name + " (" + JWS.JSON.filter[i].count + ")"));
						oSelect.appendChild(oOption[i]);
					}
					oC01.appendChild(oSelect);
				}
				var oClear01 = document.createElement("div");
				oClear01.className = "mm3_ClearDiv";
				oParamSection.appendChild(oClear01);
				pObj.renderQueue.push(oParamSection);
			} // if()
			pObj.flags.panels[pOption] = true;
			pObj.renderPanel(pPanel, pGenerated);
		}, this); // JWS.getFilter;
	}; // this.generateOptions()
	this.generateColors = function(pOption, pName, pPanel, pGenerated){
		JWS.getFilter(pOption, function(pObj){
			// pObj = this!
			if(JWS.JSON.filter != ""){
				var oParamSection = document.createElement("div");
				oParamSection.id = "mm3_Param" + pOption;
				oParamSection.className = "mm3_ParamSection";
				//pGenerated.appendChild(oParamSection);
				var oP01 = document.createElement("p");
				oP01.appendChild(document.createTextNode(pName + ":"));
				oParamSection.appendChild(oP01);
				var oC01 = document.createElement("div"); // Column 1
				oC01.className = "mm3_OptionsPanelColumn";
				oParamSection.appendChild(oC01);
				oC01.appendChild(document.createTextNode(pObj.vocab['Add New Color'] + ':'));
				var oA01 = document.createElement("a");
				oA01.id = "mm3_" + pOption + "Button";
				oA01.className = "mm3_ColorButton";
				oA01.href = "javascript:void(0);";
				oA01.appendChild(document.createTextNode(" "));
				oC01.appendChild(oA01);
				var oClear01 = document.createElement("div");
				oClear01.className = "mm3_ClearDiv";
				oC01.appendChild(oClear01);
				var oC02 = document.createElement("div"); // Column 2
				oC02.className = "mm3_OptionsPanelColumn";
				oParamSection.appendChild(oC02);
				oC02.appendChild(document.createTextNode(pObj.vocab['Remove All'] + ':'));
				var oA02 = document.createElement("a");
				oA02.id = "mm3_" + pOption + "RemoveAll";
				oA02.className = "mm3_RemoveButtonLarge";
				oA02.href = "javascript:void(0);";
				oA02.appendChild(document.createTextNode(" "));
				oC02.appendChild(oA02);
				var oClear02 = document.createElement("div");
				oClear02.className = "mm3_ClearDiv";
				oC02.appendChild(oClear02);
				var oClear03 = document.createElement("div");
				oClear03.className = "mm3_ClearDiv";
				oParamSection.appendChild(oClear03);
				var oColorPicker = document.createElement("div");
				oColorPicker.id = "mm3_" + pOption + "Picker";
				oColorPicker.className = "mm3_ColorPicker";
				oParamSection.appendChild(oColorPicker);
				var oChoicesTable = document.createElement("table");
				oColorPicker.appendChild(oChoicesTable);
				var oChoicesBody = document.createElement("tbody");
				oChoicesTable.appendChild(oChoicesBody);
				for(var i in JWS.JSON.filter){
					var oChosen = false;
					if(typeof(pObj.params[pOption]) != "undefined"){
						if(pObj.params[pOption].indexOf(i) != -1){
							oChosen = true;
						}
					}
					if(oChosen == false){
						var oTR = document.createElement("tr");
						oTR.id = "mm3_Colors" + i;
						oTR.className = "mm3_ColorRow";
						oChoicesBody.appendChild(oTR);
						var oTD01 = document.createElement("td");
						oTR.appendChild(oTD01);
						var oIMG = document.createElement("img");
						var oSRC = i.replace(/\//, "-");
						oSRC = oSRC.replace(/\s/, "-");
						oIMG.src = "http://www.autofusion.com/development/jwsinv/0.6/images/colors/mm3_swatches_" + oSRC + ".gif";
						oIMG.alt = i;
						oTD01.appendChild(oIMG);
						var oTD02 = document.createElement("td");
						oTR.appendChild(oTD02);
						oTD02.appendChild(document.createTextNode(i));
						YAHOO.util.Event.addListener(oTR, "click", pObj.addColor, pObj, true);
					}
				}
				var oColorTable = document.createElement("table");
				oColorTable.id = "mm3_" + pOption + "Table";
				oColorTable.className = "mm3_ColorTable";
				oParamSection.appendChild(oColorTable);
				var oTBODY01 = document.createElement("tbody");
				oColorTable.appendChild(oTBODY01);
				if(typeof(pObj.params[pOption]) != "undefined"){ // Is this param defined?
					if(typeof(pObj.params[pOption]) != "string"){ // Array:
						for(var j=0; j<pObj.params[pOption].length; j++){
							var oRow = document.createElement("tr");
							oRow.id = "mm3_Colors" + pObj.params[pOption][j];
							var oTD1 = document.createElement("td");
							var oIMG = document.createElement("img");
							var oSRC = pObj.params[pOption][j].replace(/\//, "-");
							oSRC = oSRC.replace(/\s/, "-");
							oIMG.src = 'http://www.autofusion.com/development/jwsinv/0.6/images/colors/mm3_swatches_' + oSRC + '.gif';
							oIMG.alt = pObj.params[pOption][j];
							oTD1.appendChild(oIMG);
							var oTD2 = document.createElement("td");
							oTD2.appendChild(document.createTextNode(pObj.params[pOption][j]));
							var oBR = document.createElement("br");
							oTD2.appendChild(oBR);
							var oA = document.createElement("a");
							oA.className = "mm3_ColorLink";
							oA.href = "javascript:void(0);";
							oA.appendChild(document.createTextNode("(remove)"));
							oTD2.appendChild(oA);
							oRow.appendChild(oTD1);
							oRow.appendChild(oTD2);
							oTBODY01.appendChild(oRow);
							YAHOO.util.Event.addListener(oA, "click", pObj.removeColor, pObj, true);
						}
					} else { // String:
						var oRow = document.createElement("tr");
						oRow.id = "mm3_Colors" + pObj.params[pOption];
						var oTD1 = document.createElement("td");
						var oIMG = document.createElement("img");
						var oSRC = pObj.params[pOption].replace(/\//, "-");
						oSRC = oSRC.replace(/\s/, "-");
						oIMG.src = 'http://www.autofusion.com/development/jwsinv/0.6/images/colors/mm3_swatches_' + oSRC + '.gif';
						oIMG.alt = pObj.params[pOption];
						oTD1.appendChild(oIMG);
						var oTD2 = document.createElement("td");
						oTD2.appendChild(document.createTextNode(pObj.params[pOption]));
						var oBR = document.createElement("br");
						oTD2.appendChild(oBR);
						var oA = document.createElement("a");
						oA.className = "mm3_ColorLink";
						oA.href = "javascript:void(0);";
						oA.appendChild(document.createTextNode("(remove)"));
						oTD2.appendChild(oA);
						oRow.appendChild(oTD1);
						oRow.appendChild(oTD2);
						oTBODY01.appendChild(oRow);
						YAHOO.util.Event.addListener(oA, "click", pObj.removeColor, pObj, true);
					}
				} else {
					var oBlankTR = document.createElement("tr");
					oTBODY01.appendChild(oBlankTR);
					var oBlankTD = document.createElement("td");
					oBlankTR.appendChild(oBlankTD);
					oBlankTD.appendChild(document.createTextNode(" "));
				}
				YAHOO.util.Event.addListener(oA01, "click", pObj.showColors, pObj, true);
				YAHOO.util.Event.addListener(oA02, "click", pObj.resetColors, pObj, true);
				pObj.renderQueue.push(oParamSection);
			} // if()
			pObj.flags.panels[pOption] = true;
			pObj.renderPanel(pPanel, pGenerated);
		}, this); // JWS.getFilter;
	}; // this.generateColors()
	this.generatePanel = function(pPanel){
		var oFormerPanels = YAHOO.util.Dom.getElementsByClassName("mm3_GeneratedPanel", "div", pPanel);
		for(var i=0; i<oFormerPanels.length; i++){
			pPanel.removeChild(oFormerPanels[i]);
		}
		var oPanelLoader = document.createElement("div");
		oPanelLoader.className = "mm3_PanelLoader";
		pPanel.appendChild(oPanelLoader);
		var oGeneratedPanel = document.createElement("div");
		oGeneratedPanel.className = "mm3_GeneratedPanel";
		pPanel.appendChild(oGeneratedPanel);
		var oID = pPanel.id;
		oID = oID.replace(/mm3_Panel/, "");
		if(oID == "Bodystyle"){
			this.flags.panels["Bodystyle"] = false;
			this.generateOptions("Bodystyle", "Bodystyle", pPanel, oGeneratedPanel);
		} else if(oID == "Colors"){
			this.flags.panels["ExteriorColor"] = false;
			this.flags.panels["InteriorColor"] = false;
			this.generateColors("ExteriorColor", "Exterior Color", pPanel, oGeneratedPanel);
			this.generateColors("InteriorColor", "Interior Color", pPanel, oGeneratedPanel);
		} else if(oID == "Powertrain"){
			this.flags.panels["Transmission"] = false;
			this.flags.panels["Drive"] = false;
			this.flags.panels["Cylinders"] = false;
			this.flags.panels["FuelType"] = false;
			this.flags.panels["MinHorsepower"] = false;
			this.generateOptions("Transmission", "Transmission", pPanel, oGeneratedPanel);
			this.generateOptions("Drive", "Drive Type", pPanel, oGeneratedPanel);
			this.generateOptions("Cylinders", "Number of Cylinders", pPanel, oGeneratedPanel);
			this.generateOptions("FuelType", "Fuel Type", pPanel, oGeneratedPanel);
			this.generateOptions("MinHorsepower", "Minimum Horsepower", pPanel, oGeneratedPanel);
		} else if(oID == "Safety"){
			this.flags.panels["NHTSA"] = false;
			this.flags.panels["Airbags"] = false;
			this.flags.panels["Emergency"] = false;
			this.flags.panels["Safety"] = false;
			this.generateOptions("NHTSA", "NHTSA Safety Rating", pPanel, oGeneratedPanel);
			this.generateOptions("Airbags", "Airbags", pPanel, oGeneratedPanel);
			this.generateOptions("Emergency", "Emergency Assistance", pPanel, oGeneratedPanel);
			this.generateOptions("Safety", "General Safety Features", pPanel, oGeneratedPanel);
		} else if(oID == "Interior"){
			this.flags.panels["SeatNumber"] = false;
			this.flags.panels["Seats"] = false;
			this.flags.panels["AudioVideo"] = false;
			this.flags.panels["Comfort"] = false;
			this.generateOptions("SeatNumber", "Number of Seats", pPanel, oGeneratedPanel);
			this.generateOptions("Seats", "General Seating Features", pPanel, oGeneratedPanel);
			this.generateOptions("AudioVideo", "Audio and Video Features", pPanel, oGeneratedPanel);
			this.generateOptions("Comfort", "Comfort and Convenience", pPanel, oGeneratedPanel);
		} else if(oID == "Exterior"){
			this.flags.panels["WheelSize"] = false;
			this.flags.panels["Exterior"] = false;
			this.generateOptions("WheelSize", "Wheel Size", pPanel, oGeneratedPanel);
			this.generateOptions("Exterior", "General Exterior Features", pPanel, oGeneratedPanel);
		} else if(oID == "Truck"){
			this.flags.panels["MinTowing"] = false;
			this.flags.panels["Trucks"] = false;
			this.generateOptions("MinTowing", "Minimum Towing Capacity", pPanel, oGeneratedPanel);
			this.generateOptions("Trucks", "General Truck Features", pPanel, oGeneratedPanel);
		}
	}; // this.generatePanel()
	this.togglePanel = function(e){
		var oContinue = true;
		for(var i in this.flags.panels){
			if(this.flags.panels[i] == false){
				oContinue = false;
			}
		}
		if(oContinue == true){
			YAHOO.util.Event.preventDefault(e);
			var oTarget = YAHOO.util.Event.getTarget(e);
			if(oTarget.nodeName.toUpperCase() != "A"){
				oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "a");
			}
			var oNavArea = document.getElementById("mm3_NavArea");
			var oAllSubheaders = YAHOO.util.Dom.getElementsByClassName("mm3_NavAreaSubHeader", "a", oNavArea);
			var oAllPanels = YAHOO.util.Dom.getElementsByClassName("mm3_NavAreaOptionsPanel", "div", oNavArea);
			var oDropPanelContainer = YAHOO.util.Dom.getAncestorByClassName(oTarget, "mm3_DropPanelContainer");
			var oNavAreaOptionsPanel = YAHOO.util.Dom.getLastChild(oDropPanelContainer);
			var oNAOPStyle = YAHOO.util.Dom.getStyle(oNavAreaOptionsPanel, "display");
			if(oNAOPStyle == "none"){
				var oFormerPanels = YAHOO.util.Dom.getElementsByClassName("mm3_GeneratedPanel", "div", oNavAreaOptionsPanel);
				for(var i=0; i<oFormerPanels.length; i++){
					oNavAreaOptionsPanel.removeChild(oFormerPanels[i]);
				}
				YAHOO.util.Dom.setStyle(oAllPanels, "display", "none");
				YAHOO.util.Dom.removeClass(oAllSubheaders, "mm3_NavAreaSubHeaderOpen");
				YAHOO.util.Dom.setStyle(oNavAreaOptionsPanel, "display", "block");
				YAHOO.util.Dom.addClass(oTarget, "mm3_NavAreaSubHeaderOpen");
				this.generatePanel(oNavAreaOptionsPanel);
			} else {
				YAHOO.util.Dom.setStyle(oNavAreaOptionsPanel, "display", "none");
				YAHOO.util.Dom.removeClass(oTarget, "mm3_NavAreaSubHeaderOpen");
			}
		}
	}; // this.togglePanel()
	this.toggleMainOptions = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() != "A"){
			oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "a");
		}
		var oSibling = YAHOO.util.Dom.getNextSibling(oTarget);
		if(YAHOO.util.Dom.hasClass(oTarget, "mm3_NavAreaHeaderOpen")){
			YAHOO.util.Dom.removeClass(oTarget, "mm3_NavAreaHeaderOpen");
			YAHOO.util.Dom.setStyle(oSibling, "display", "none");
		} else {
			YAHOO.util.Dom.addClass(oTarget, "mm3_NavAreaHeaderOpen");
			YAHOO.util.Dom.setStyle(oSibling, "display", "block");
		}
	}; // this.toggleMainOptions()
	this.toggleSearchMode = function(e){
		if(typeof(this.user.mode) == 'undefined'){
			this.user.mode = this.defaults.mode;
		}
		if(this.user.mode == 'basic'){
			this.user.mode = 'advanced';
		} else {
			this.user.mode = 'basic';
		}
		this.compileURL(e);
	}; // this.toggleSearchMode()
	this.attachNavigationListeners = function(){
		var oButtonNewSearch = YAHOO.util.Dom.getElementsByClassName("mm3_ButtonNewSearch", "a");
		YAHOO.util.Event.addListener(oButtonNewSearch, "click", this.newSearch, this, true);
		var oButtonSaveSearch = YAHOO.util.Dom.getElementsByClassName("mm3_ButtonSaveSearch", "a");
		YAHOO.util.Event.addListener(oButtonSaveSearch, "click", this.saveSearch, this, true);
		//var oButtonContactDealer = YAHOO.util.Dom.getElementsByClassName("mm3_ButtonContactDealer", "a");
		//YAHOO.util.Event.addListener(oButtonContactDealer, "click", this.contactDealer, this, true);
		var oVINSearch = document.getElementById("mm3_VINSearch");
		YAHOO.util.Event.addListener(oVINSearch, "focus", function(){
			oVINSearch.value = "";
			YAHOO.util.Event.removeListener(oVINSearch, "focus");
		});
		YAHOO.util.Event.addListener(oVINSearch, "keypress", function(e){
			if(e.keyCode == 13 && oVINSearch.value != ""){
				this.VINSearch();
			}
		}, this, true);
		YAHOO.util.Event.addListener("mm3_VINSearchButton", "click", this.VINSearch, this, true);
		var oDisplayButton = YAHOO.util.Dom.getElementsByClassName("mm3_DisplayButton", "a");
		YAHOO.util.Event.addListener(oDisplayButton, "click", this.displayChange, this, true);
		var oButtonCompareMarked = YAHOO.util.Dom.getElementsByClassName("mm3_ButtonCompareMarked", "a");
		YAHOO.util.Event.addListener(oButtonCompareMarked, "click", this.compareVehicles, this, true);
		YAHOO.util.Event.addListener("mm3_MainOptionsUpdate", "click", this.updateResults, this, true);
		var oNavAreaSubHeader = YAHOO.util.Dom.getElementsByClassName("mm3_NavAreaSubHeader", "a");
		YAHOO.util.Event.addListener(oNavAreaSubHeader, "click", this.togglePanel, this, true);
		YAHOO.util.Event.addListener("mm3_MainOptionsHeader", "click", this.toggleMainOptions, this, true);
		YAHOO.util.Event.addListener("mm3_SearchMode", "click", this.toggleSearchMode, this, true);
	}; // this.attachNavigationListeners()
	this.loadBasicDropdowns = function(){
		// TYMM:
		if(YAHOO.util.Dom.hasClass('mm3_BasicBar', 'mm3_Basic')){
			// Populate the Type dropdown:
			JWS.getFilter("VehicleType", function(pObj){
				// pObj = this!
				var oTotalNew = (typeof(JWS.JSON.filter["New"]) != "undefined") ? JWS.JSON.filter["New"].count : 0;
				var oTotalUsed = (typeof(JWS.JSON.filter["Used"]) != "undefined") ? JWS.JSON.filter["Used"].count : 0;
				var oTotalCPO = (typeof(JWS.JSON.filter["Certified Pre-Owned"]) != "undefined") ? JWS.JSON.filter["Certified Pre-Owned"].count : 0;
				var oBasicType = document.getElementById("mm3_BasicType");
				var oTypeOptions = '';
				var oTypeString = pObj.vocab['All'] + ' ' + pObj.vocab['Type'] + 's';
				if(typeof(pObj.params.VehicleType) != "undefined"){
					if(pObj.params.VehicleType.length == 1){
						if (pObj.params.VehicleType[0] == "New"){
							oTypeString = pObj.vocab['New'];
						} else if (pObj.params.VehicleType[0] == "Used"){
							oTypeString = pObj.vocab['Used'];
						} else if (pObj.params.VehicleType[0] == "Certified Pre-Owned"){
							oTypeString = pObj.vocab['CPO'];
						}
					} else {
						oTypeString = '(' + pObj.vocab['Multiple'] + ')';
					}
				}
				if(oTotalNew > 0){
					oTypeOptions += '<option id="mm3_TypeOptionsNew">' + pObj.vocab['New'] + ' (' + oTotalNew + ')</option>';
				}
				if(oTotalUsed > 0){
					oTypeOptions += '<option id="mm3_TypeOptionsUsed">' + pObj.vocab['Used'] + ' (' + oTotalUsed + ')</option>';
				}
				if(oTotalCPO > 0){
					oTypeOptions += '<option id="mm3_TypeOptionsCPO">' + pObj.vocab['CPO'] + ' (' + oTotalCPO + ')</option>';
				}
				oBasicType.innerHTML = '\
					<span>' + pObj.vocab['Type'] + ':</span>\
					<select>\
						<option class="mm3_SelectBlank" selected="selected">' + oTypeString + '</option>\
						<option class="mm3_SelectBlank">---</option>\
						<option id="mm3_TypeOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Type'] + 's' + '</option>' + oTypeOptions + '\
					</select>\
				';
				var oSELECT = oBasicType.getElementsByTagName("select")[0];
				YAHOO.util.Event.addListener(oSELECT, "change", pObj.typeChange, pObj, true);
				pObj.flags.dropdowns.type = true;
			}, this); // JWS.getFilter("VehicleType")
			// Populate the Make dropdown:
			JWS.getFilter("Make", function(pObj){
				// pObj = this!
				var oBasicMake = document.getElementById("mm3_BasicMake");
				var oMakeOptions = '';
				for(var i in JWS.JSON.filter){
					oMakeOptions += '<option id="mm3_MakeOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
				}
				var oMakeString = pObj.vocab['All'] + ' ' + pObj.vocab['Make'] + 's';
				if(typeof(pObj.params.Make) != "undefined"){
					if(pObj.params.Make.length == 1){
						oMakeString = pObj.params.Make[0];
					} else {
						oMakeString = '(' + pObj.vocab['Multiple'] + ')';
					}
				}
				oBasicMake.innerHTML = '\
					<span>' + pObj.vocab['Make'] + ':</span>\
					<select>\
						<option class="mm3_SelectBlank" selected="selected">' + oMakeString + '</option>\
						<option class="mm3_SelectBlank">---</option>\
						<option id="mm3_MakeOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Make'] + 's' + '</option>' + oMakeOptions + '\
					</select>\
				';
				var oSELECT = oBasicMake.getElementsByTagName("select")[0];
				YAHOO.util.Event.addListener(oSELECT, "change", pObj.makeChange, pObj, true);
				pObj.flags.dropdowns.make = true;
			}, this); // JWS.getFilter("Make")
			// Populate the Model dropdown:
			JWS.getFilter("Model", function(pObj){
				// pObj = this!
				var oBasicModel = document.getElementById("mm3_BasicModel");
				var oModelOptions = '';
				if(typeof(JWS.JSON.error) != "undefined"){
					oBasicModel.getElementsByTagName('select')[0].innerHTML = '\
							<option class="mm3_SelectBlank" selected="selected">(select make first)</option>\
					';
				} else {
					for(var i in JWS.JSON.filter){
						oModelOptions += '<option id="mm3_ModelOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
					}
					var oModelString = pObj.vocab['All'] + ' ' + pObj.vocab['Model'] + 's';
					if(typeof(pObj.params.Model) != "undefined"){
						if(pObj.params.Model.length == 1){
							oModelString = pObj.params.Model[0];
						} else {
							oModelString = '(' + pObj.vocab['Multiple'] + ')';
						}
					}
					oBasicModel.innerHTML = '\
						<span>' + pObj.vocab['Model'] + ':</span>\
						<select>\
							<option class="mm3_SelectBlank" selected="selected">' + oModelString + '</option>\
							<option class="mm3_SelectBlank">---</option>\
							<option id="mm3_ModelOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Model'] + 's' + '</option>' + oModelOptions + '\
						</select>\
					';
					var oSELECT = oBasicModel.getElementsByTagName("select")[0];
					YAHOO.util.Event.addListener(oSELECT, "change", pObj.modelChange, pObj, true);
				} // if()
				pObj.flags.dropdowns.model = true;
			}, this); // JWS.getFilter("Model")
			// Populate the Year dropdown:
			JWS.getFilter("Year", function(pObj){
				// pObj = this!
				var oBasicYear = document.getElementById("mm3_BasicYear");
				var oYearOptions = '';
				pObj.ranges.Year = new Array();
				for(var i in JWS.JSON.filter){
					oYearOptions += '<option id="mm3_YearOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
					pObj.ranges.Year.push(JWS.JSON.filter[i].name);
				}
				var oYearString = pObj.vocab['All'] + ' ' + pObj.vocab['Year'] + 's';
				if(typeof(pObj.params.Year) == "string"){
					oYearString = pObj.params.Year;
				} else if(typeof(pObj.params.Year) != "undefined"){
					if(pObj.params.Year.length == 1){
						oYearString = pObj.params.Year[0];
					} else if(pObj.params.Year.length > 1){
						oYearString = '(' + pObj.vocab['Multiple'] + ')';
					}
				}
				oBasicYear.innerHTML = '\
					<span>' + pObj.vocab['Year'] + ':</span>\
					<select>\
						<option class="mm3_SelectBlank" selected="selected">' + oYearString + '</option>\
						<option class="mm3_SelectBlank">---</option>\
						<option id="mm3_YearOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Year'] + 's' + '</option>' + oYearOptions + '\
					</select>\
				';
				var oSELECT = oBasicYear.getElementsByTagName("select")[0];
				YAHOO.util.Event.addListener(oSELECT, "change", pObj.yearChange, pObj, true);
				pObj.flags.dropdowns.year = true;
			}, this); // JWS.getFilter("Year")
		}
		
		// Populate "SORT BY" selector:
		var oSortByString = "";
		if(this.prefs.sort == "sale_price ASC" || this.prefs.sort == "price ASC" || this.prefs.sort == "sort_price ASC"){
			oSortByString = this.vocab['Price'] + ': ' + this.vocab['Low'] + ' ' + this.vocab['to'] + ' ' + this.vocab['High'];
		} else if(this.prefs.sort == "sale_price DESC" || this.prefs.sort == "price DESC" || this.prefs.sort == "sort_price DESC"){
			oSortByString = this.vocab['Price'] + ': ' + this.vocab['High'] + ' ' + this.vocab['to'] + ' ' + this.vocab['Low'];
		} else if(this.prefs.sort == "year DESC"){
			oSortByString = this.vocab['Year'] + ' (' + this.vocab['Newest'] + ')';
		} else if(this.prefs.sort == "make ASC"){
			oSortByString = this.vocab['Make'];
		} else if(this.prefs.sort == "model ASC"){
			oSortByString = this.vocab['Model'];
		} else if(this.prefs.sort == "type ASC"){
			oSortByString = this.vocab['Type'];
		} else if(this.prefs.sort == "mileage ASC"){
			oSortByString = this.vocab['Mileage'] + ' (' + this.vocab['Lowest'] + ')';
		} else if(this.prefs.sort == "mpg_highway DESC"){
			oSortByString = this.vocab['MPG'] + ' (' + this.vocab['Highest'] + ')';
		} else if(this.prefs.sort == "datestamp ASC"){
			oSortByString = this.vocab['Age'];
		}
		var oSortingSelector = document.getElementById("mm3_SortingOptions");
		oSortingSelector.innerHTML = '\
			<span>' + this.vocab['Sort By'] + ':</span>\
			<select>\
				<option class="mm3_SelectBlank" selected="selected">' + oSortByString + '</option>\
				<option class="mm3_SelectBlank">---</option>\
				<option id="mm3_SORTPriceLTH">' + this.vocab['Price'] + ': ' + this.vocab['Low'] + ' ' + this.vocab['to'] + ' ' + this.vocab['High'] + '</option>\
				<option id="mm3_SORTPriceHTL">' + this.vocab['Price'] + ': ' + this.vocab['High'] + ' ' + this.vocab['to'] + ' ' + this.vocab['Low'] + '</option>\
				<option id="mm3_SORTYear">' + this.vocab['Year'] + ' (' + this.vocab['Newest'] + ')' + '</option>\
				<option id="mm3_SORTMake">' + this.vocab['Make'] + '</option>\
				<option id="mm3_SORTModel">' + this.vocab['Model'] + '</option>\
				<option id="mm3_SORTCondition">' + this.vocab['Type'] + '</option>\
				<option id="mm3_SORTMileage">' + this.vocab['Mileage'] + ' (' + this.vocab['Lowest'] + ')' + '</option>\
				<option id="mm3_SORTMPG">' + this.vocab['MPG'] + ' (' + this.vocab['Highest'] + ')' + '</option>\
				<option id="mm3_SORTAge">' + this.vocab['Age'] + '</option>\
			</select>\
		';
		YAHOO.util.Event.addListener(oSortingSelector.getElementsByTagName("select")[0], "change", this.sortByChange, this, true);
		// Populate "RESULTS PER PAGE" selector:
		var oPerPageSelector = document.getElementById("mm3_PerPageOptions");

		oPerPageSelector.innerHTML = '\
			<span>' + this.vocab['Results Per Page'] + ':</span>\
			<select>\
				<option class="mm3_SelectBlank" selected="selected">' + this.prefs.per_page + '</option>\
				<option class="mm3_SelectBlank">---</option>\
				<option id="mm3_PP5">5</option>\
				<option id="mm3_PP10">10</option>\
				<option id="mm3_PP20">20</option>\
				<option id="mm3_PP30">30</option>\
				<option id="mm3_PP40">40</option>\
				<option id="mm3_PP50">50</option>\
			</select>\
		';
		YAHOO.util.Event.addListener(oPerPageSelector.getElementsByTagName("select")[0], "change", this.perPageChange, this, true);
	}; // this.loadBasicDropdowns()
	this.loadSearchDropdowns = function(){
		// Set flags:
		this.flags.dropdowns.type = false;
		this.flags.dropdowns.make = false;
		this.flags.dropdowns.model = false;
		this.flags.dropdowns.year = false;
		// Attach listeners for the "multiple" links:
		var oMultipleLinks = document.getElementById("mm3_MainOptionsDropdowns").getElementsByTagName("a");
		YAHOO.util.Event.addListener(oMultipleLinks, "click", function(e){
			var oTarget = YAHOO.util.Event.getTarget(e);
			var oSibling = YAHOO.util.Dom.getPreviousSibling(oTarget);
			var oParam = oSibling.id.replace(/mm3_MainDropdowns/, "");
			if(oParam == "Type"){
				oParam = "VehicleType";
			}
			this.editParam(oParam);
		}, this, true);
		// Populate the Type dropdown:
		JWS.getFilter("VehicleType", function(pObj){
			// pObj = this!
			var oTotalNew = (typeof(JWS.JSON.filter["New"]) != "undefined") ? JWS.JSON.filter["New"].count : 0;
			var oTotalUsed = (typeof(JWS.JSON.filter["Used"]) != "undefined") ? JWS.JSON.filter["Used"].count : 0;
			var oTotalCPO = (typeof(JWS.JSON.filter["Certified Pre-Owned"]) != "undefined") ? JWS.JSON.filter["Certified Pre-Owned"].count : 0;
			var oMainDropdownsType = document.getElementById("mm3_MainDropdownsType");
			var oTypeOptions = '';
			var oTypeString = pObj.vocab['All'] + ' ' + pObj.vocab['Type'] + 's';
			if(typeof(pObj.params.VehicleType) != "undefined"){
				if(pObj.params.VehicleType.length == 1){
					if (pObj.params.VehicleType[0] == "New"){
						oTypeString = pObj.vocab['New'];
					} else if (pObj.params.VehicleType[0] == "Used"){
						oTypeString = pObj.vocab['Used'];
					} else if (pObj.params.VehicleType[0] == "Certified Pre-Owned"){
						oTypeString = pObj.vocab['CPO'];
					}
				} else {
					oTypeString = '(' + pObj.vocab['Multiple'] + ')';
				}
			}
			if(oTotalNew > 0){
				oTypeOptions += '<option id="mm3_TypeOptionsNew">' + pObj.vocab['New'] + ' (' + oTotalNew + ')</option>';
			}
			if(oTotalUsed > 0){
				oTypeOptions += '<option id="mm3_TypeOptionsUsed">' + pObj.vocab['Used'] + ' (' + oTotalUsed + ')</option>';
			}
			if(oTotalCPO > 0){
				oTypeOptions += '<option id="mm3_TypeOptionsCPO">' + pObj.vocab['CPO'] + ' (' + oTotalCPO + ')</option>';
			}
			oMainDropdownsType.innerHTML = '\
				<select>\
					<option class="mm3_SelectBlank" selected="selected">' + oTypeString + '</option>\
					<option class="mm3_SelectBlank">---</option>\
					<option id="mm3_TypeOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Type'] + 's' + '</option>' + oTypeOptions + '\
				</select>\
			';
			var oSELECT = oMainDropdownsType.getElementsByTagName("select")[0];
			YAHOO.util.Event.addListener(oSELECT, "change", pObj.typeChange, pObj, true);
			pObj.flags.dropdowns.type = true;
			pObj.loadSliders();
		}, this); // JWS.getFilter("VehicleType")
		// Populate the Make dropdown:
		JWS.getFilter("Make", function(pObj){
			// pObj = this!
			var oMainDropdownsMake = document.getElementById("mm3_MainDropdownsMake");
			var oMakeOptions = '';
			for(var i in JWS.JSON.filter){
				oMakeOptions += '<option id="mm3_MakeOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
			}
			var oMakeString = pObj.vocab['All'] + ' ' + pObj.vocab['Make'] + 's';
			if(typeof(pObj.params.Make) != "undefined"){
				if(pObj.params.Make.length == 1){
					oMakeString = pObj.params.Make[0];
				} else {
					oMakeString = '(' + pObj.vocab['Multiple'] + ')';
				}
			}
			oMainDropdownsMake.innerHTML = '\
				<select>\
					<option class="mm3_SelectBlank" selected="selected">' + oMakeString + '</option>\
					<option class="mm3_SelectBlank">---</option>\
					<option id="mm3_MakeOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Make'] + 's' + '</option>' + oMakeOptions + '\
				</select>\
			';
			var oSELECT = oMainDropdownsMake.getElementsByTagName("select")[0];
			YAHOO.util.Event.addListener(oSELECT, "change", pObj.makeChange, pObj, true);
			pObj.flags.dropdowns.make = true;
			pObj.loadSliders();
		}, this); // JWS.getFilter("Make")
		// Populate the Model dropdown:
		JWS.getFilter("Model", function(pObj){
			// pObj = this!
			var oMainDropdownsModel = document.getElementById("mm3_MainDropdownsModel");
			var oModelOptions = '';
			if(typeof(JWS.JSON.error) != "undefined"){
				oMainDropdownsModel.innerHTML = '\
					<select disabled="disabled">\
						<option class="mm3_SelectBlank" selected="selected">(select make first)</option>\
					</select>\
				';
			} else {
				for(var i in JWS.JSON.filter){
					oModelOptions += '<option id="mm3_ModelOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
				}
				var oModelString = pObj.vocab['All'] + ' ' + pObj.vocab['Model'] + 's';
				if(typeof(pObj.params.Model) != "undefined"){
					if(pObj.params.Model.length == 1){
						oModelString = pObj.params.Model[0];
					} else {
						oModelString = '(' + pObj.vocab['Multiple'] + ')';
					}
				}
				oMainDropdownsModel.innerHTML = '\
					<select>\
						<option class="mm3_SelectBlank" selected="selected">' + oModelString + '</option>\
						<option class="mm3_SelectBlank">---</option>\
						<option id="mm3_ModelOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Model'] + 's' + '</option>' + oModelOptions + '\
					</select>\
				';
				var oSELECT = oMainDropdownsModel.getElementsByTagName("select")[0];
				YAHOO.util.Event.addListener(oSELECT, "change", pObj.modelChange, pObj, true);
			} // if()
			pObj.flags.dropdowns.model = true;
			pObj.loadSliders();
		}, this); // JWS.getFilter("Model")
		// Populate the Year dropdown:
		JWS.getFilter("Year", function(pObj){
			// pObj = this!
			var oMainDropdownsYear = document.getElementById("mm3_MainDropdownsYear");
			var oYearOptions = '';
			pObj.ranges.Year = new Array();
			for(var i in JWS.JSON.filter){
				oYearOptions += '<option id="mm3_YearOptions' + JWS.JSON.filter[i].name + '">' + JWS.JSON.filter[i].name + ' (' + JWS.JSON.filter[i].count + ')</option>';
				pObj.ranges.Year.push(JWS.JSON.filter[i].name);
			}
			var oYearString = pObj.vocab['All'] + ' ' + pObj.vocab['Year'] + 's';
			if(typeof(pObj.params.Year) == "string"){
				oYearString = pObj.params.Year;
			} else if(typeof(pObj.params.Year) != "undefined"){
				if(pObj.params.Year.length == 1){
					oYearString = pObj.params.Year[0];
				} else if(pObj.params.Year.length > 1){
					oYearString = '(' + pObj.vocab['Multiple'] + ')';
				}
			}
			oMainDropdownsYear.innerHTML = '\
				<select>\
					<option class="mm3_SelectBlank" selected="selected">' + oYearString + '</option>\
					<option class="mm3_SelectBlank">---</option>\
					<option id="mm3_YearOptionsAll">' + pObj.vocab['All'] + ' ' + pObj.vocab['Year'] + 's' + '</option>' + oYearOptions + '\
				</select>\
			';
			var oSELECT = oMainDropdownsYear.getElementsByTagName("select")[0];
			YAHOO.util.Event.addListener(oSELECT, "change", pObj.yearChange, pObj, true);
			pObj.flags.dropdowns.year = true;
			pObj.loadSliders();
		}, this); // JWS.getFilter("Year")
	}; // this.loadSearchDropdowns()
	this.updateYearSlider = function(pSlider){
		YAHOO.util.Dom.setStyle("mm3_Loading", "display", "block");
		var oMinID = "mm3_" + pSlider + "SliderMinField";
		var oMaxID = "mm3_" + pSlider + "SliderMaxField";
		var oMinField = document.getElementById(oMinID);
		var oMaxField = document.getElementById(oMaxID);
		var oMin = parseInt(oMinField.value);
		var oMax = parseInt(oMaxField.value);
		var oRange = new Array();
		for(var i=oMin; i<=oMax; i++){
			oRange.push((i + "")); // Convert numbers to strings for less typeof's.
		}
		this.params[pSlider] = oRange;
		//this.flags.sliders[pSlider] = true;
		JWS.setParam(this.params, function(pArgs){
			// pArgs = [oMinField, oMaxField]!
			JWS.getMatchCount(function(pArgs){
				// pArgs = [oMinField, oMaxField]!
				if(JWS.JSON.count == 0){
					pArgs[0].style.color = "red";
					pArgs[1].style.color = "red";
				} else {
					pArgs[0].style.color = "green";
					pArgs[1].style.color = "green";
				}
				YAHOO.util.Dom.setStyle("mm3_Loading", "display", "none");
			}, pArgs); // JWS.getMatchCount()
		}, [oMinField, oMaxField]); // JWS.setParam()
	}; // this.updateYearSlider()
	this.updateDualSlider = function(pSlider){
		YAHOO.util.Dom.setStyle("mm3_Loading", "display", "block");
		var oMinParam = "Min" + pSlider;
		var oMaxParam = "Max" + pSlider;
		var oMinID = "mm3_" + pSlider + "SliderMinField";
		var oMaxID = "mm3_" + pSlider + "SliderMaxField";
		var oMinField = document.getElementById(oMinID);
		var oMaxField = document.getElementById(oMaxID);
		var oMin = parseInt(oMinField.value.replace(/,/, ""));
		var oMax = parseInt(oMaxField.value.replace(/,/, ""));
		this.params[oMinParam] = oMin + "";
		this.params[oMaxParam] = oMax + "";
		//this.flags.sliders[pSlider] = true;
		JWS.setParam(this.params, function(pArgs){
			// pArgs = [oMinField, oMaxField]!
			JWS.getMatchCount(function(pArgs){
				// pArgs = [oMinField, oMaxField]!
				if(JWS.JSON.count == 0){
					pArgs[0].style.color = "red";
					pArgs[1].style.color = "red";
				} else {
					pArgs[0].style.color = "green";
					pArgs[1].style.color = "green";
				}
				YAHOO.util.Dom.setStyle("mm3_Loading", "display", "none");
			}, pArgs); // JWS.getMatchCount()
		}, [oMinField, oMaxField]); // JWS.setParam()
	}; // this.updateDualSlider()
	this.loadYearSlider = function(){
		var oPixelRange = 200;
		var oMin = parseInt(this.ranges.Year[0]);
		var oMax = parseInt(this.ranges.Year[(this.ranges.Year.length - 1)]);
		var oMinField = document.getElementById("mm3_YearSliderMinField");
		var oMaxField = document.getElementById("mm3_YearSliderMaxField");
		var oValueRange = oMax-oMin;
		if(typeof(this.params.Year) == "string"){
			oMinField.value = this.params.Year;
			oMaxField.value = this.params.Year;
		} else if(typeof(this.params.Year) != "undefined"){
			oMinField.value = this.params.Year[0];
			oMaxField.value = this.params.Year[(this.params.Year.length - 1)];
		} else {
			oMinField.value = this.ranges.Year[0];
			oMaxField.value = this.ranges.Year[(this.ranges.Year.length - 1)];
		}
		var oInitMin = parseInt(oMinField.value);
		var oInitMax = parseInt(oMaxField.value);
		var oMinRange = oInitMin - oMin; // How far are we from the absolute lowest value?
		var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
		var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
		var oMaxRange = oMax - oInitMax; // How far are we from the absolute highest value?
		var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
		var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
		var oConvert = function(pValue){
			pValue = parseInt(pValue);
			var oPercent = pValue/oPixelRange; // Percentage of pixel range.
			var oProduct = oPercent*oValueRange; // How much of the value range are we covering?
			var oReturn = Math.round(oProduct + oMin); // Add that number to the starting point.
			if(oReturn > oMax){ // Correct the value if needed.
				oReturn = oMax;
			} else if(oReturn < oMin){
				oReturn = oMin;
			}
			return oReturn; // Return the result.
		};
		var oBlurConvert = function(){
			this.flags.sliders["Year"] = true;
			var oBlurMin = parseInt(this.numberOnly(oMinField.value));
			var oBlurMax = parseInt(this.numberOnly(oMaxField.value));
			if(oBlurMin > oBlurMax){
				oBlurMin = oBlurMax;
				oMinField.value = oBlurMax;
			}
			if(oBlurMin < oMin){
				oBlurMin = oMin;
				oMinField.value = oMin;
			}
			if(oBlurMax > oMax){
				oBlurMax = oMax;
				oMaxField.value = oMax;
			}
			if(oBlurMax < oMin){
				oBlurMax = oMin;
				oMaxField.value = oMin;
			}
			var oMinRange = oBlurMin - oMin; // How far are we from the absolute lowest value?
			var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
			var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
			var oMaxRange = oMax - oBlurMax; // How far are we from the absolute highest value?
			var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
			var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
			oYearSlider.unsubscribe("change"); // oUpdateUI hijacks the user values!
			oYearSlider.setValues(oMinProd,oMaxProd);
			oYearSlider.subscribe("change", oUpdateUI); // Restore oUpdateUI.
		};
		var oYearSlider = YAHOO.widget.Slider.getHorizDualSlider("mm3_YearSlider", "mm3_YearSliderMinThumb", "mm3_YearSliderMaxThumb", oPixelRange, 0, [oMinProd, oMaxProd]);
		var oUpdateUI = function(){
			oMinField.value = oConvert(oYearSlider.minVal);
			oMaxField.value = oConvert(oYearSlider.maxVal);
		};
		oYearSlider.subscribe("change", oUpdateUI);
		oYearSlider.subscribe("slideEnd", function(){
			this.updateYearSlider("Year");
		}, this, true);
		YAHOO.util.Event.addListener([oMinField, oMaxField], "blur", oBlurConvert, this, true);
		if(oMin == oMax || isNaN(oMin) || isNaN(oMax)){
			YAHOO.util.Dom.setStyle("mm3_YearSliderContainer", "display", "none");
		}
		if(YAHOO.env.ua.ie == 6){
			YAHOO.util.Dom.setStyle("mm3_YearSliderContainer", "font-size", "10px");
		}
	}; // this.loadYearSlider()
	this.loadPriceSlider = function(){
		JWS.getFilter("PriceRange", function(pObj){
			// pObj = this!
			var oPixelRange = 200;
			var oMin = parseInt(JWS.JSON.filter.min);
			var oMax = parseInt(JWS.JSON.filter.max);
			var oMinField = document.getElementById("mm3_PriceSliderMinField");
			var oMaxField = document.getElementById("mm3_PriceSliderMaxField");
			oMinField.value = (typeof(pObj.params.MinPrice) != "undefined") ? pObj.params.MinPrice : oMin;
			oMaxField.value = (typeof(pObj.params.MaxPrice) != "undefined") ? pObj.params.MaxPrice : oMax;
			var oValueRange = oMax-oMin;
			var oInitMin = parseInt(oMinField.value);
			var oInitMax = parseInt(oMaxField.value);
			var oMinRange = oInitMin - oMin; // How far are we from the absolute lowest value?
			var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
			var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
			var oMaxRange = oMax - oInitMax; // How far are we from the absolute highest value?
			var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
			var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
			var oConvert = function(pValue){
				pValue = parseInt(pValue);
				var oPercent = pValue/oPixelRange; // Percentage of pixel range.
				var oProduct = oPercent*oValueRange; // How much of the value range are we covering?
				var oReturn = Math.round(oProduct + oMin); // Add that number to the starting point.
				if(oReturn > oMax){ // Correct the value if needed.
					oReturn = oMax;
				} else if(oReturn < oMin){
					oReturn = oMin;
				}
				return oReturn; // Return the result.
			};
			var oBlurConvert = function(){
				this.flags.sliders["Price"] = true;
				var oBlurMin = parseInt(this.numberOnly(oMinField.value));
				var oBlurMax = parseInt(this.numberOnly(oMaxField.value));
				if(oBlurMin > oBlurMax){
					oBlurMin = oBlurMax;
					oMinField.value = oBlurMax;
				}
				if(oBlurMin < oMin){
					oBlurMin = oMin;
					oMinField.value = oMin;
				}
				if(oBlurMax > oMax){
					oBlurMax = oMax;
					oMaxField.value = oMax;
				}
				if(oBlurMax < oMin){
					oBlurMax = oMin;
					oMaxField.value = oMin;
				}
				var oMinRange = oBlurMin - oMin; // How far are we from the absolute lowest value?
				var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
				var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
				var oMaxRange = oMax - oBlurMax; // How far are we from the absolute highest value?
				var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
				var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
				oPriceSlider.unsubscribe("change"); // oUpdateUI hijacks the user values!
				oPriceSlider.setValues(oMinProd,oMaxProd);
				oPriceSlider.subscribe("change", oUpdateUI); // Restore oUpdateUI.
			};
			var oPriceSlider = YAHOO.widget.Slider.getHorizDualSlider("mm3_PriceSlider", "mm3_PriceSliderMinThumb", "mm3_PriceSliderMaxThumb", oPixelRange, 0, [oMinProd, oMaxProd]);
			var oUpdateUI = function(){
				oMinField.value = oConvert(oPriceSlider.minVal);
				oMaxField.value = oConvert(oPriceSlider.maxVal);
			};
			oPriceSlider.subscribe("change", oUpdateUI);
			oPriceSlider.subscribe("slideEnd", function(){
				this.updateDualSlider("Price");
			}, pObj, true);
			YAHOO.util.Event.addListener([oMinField, oMaxField], "blur", oBlurConvert, pObj, true);
			if(oMin == oMax || isNaN(oMin) || isNaN(oMax)){
				YAHOO.util.Dom.setStyle("mm3_PriceSliderContainer", "display", "none");
			}
			if(YAHOO.env.ua.ie == 6){
				setTimeout(function(){
					YAHOO.util.Dom.setStyle("mm3_PriceSliderContainer", "font-size", "10px");
				}, 2000);
			}
		}, this); // JWS.getFilter("MaxPrice");
	}; // this.loadPriceSlider()
	this.loadMPGSlider = function(){
		JWS.getFilter("MPGRange", function(pObj){
			// pObj = this!
			var oPixelRange = 200;
			var oMin = parseInt(JWS.JSON.filter.min);
			var oMax = parseInt(JWS.JSON.filter.max);
			var oMinField = document.getElementById("mm3_MPGSliderMinField");
			var oMaxField = document.getElementById("mm3_MPGSliderMaxField");
			oMinField.value = (typeof(pObj.params.MinMPG) != "undefined") ? pObj.params.MinMPG : oMin;
			oMaxField.value = (typeof(pObj.params.MaxMPG) != "undefined") ? pObj.params.MaxMPG : oMax;
			var oValueRange = oMax-oMin;
			var oInitMin = parseInt(oMinField.value);
			var oInitMax = parseInt(oMaxField.value);
			var oMinRange = oInitMin - oMin; // How far are we from the absolute lowest value?
			var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
			var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
			var oMaxRange = oMax - oInitMax; // How far are we from the absolute highest value?
			var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
			var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
			var oConvert = function(pValue){
				pValue = parseInt(pValue);
				var oPercent = pValue/oPixelRange; // Percentage of pixel range.
				var oProduct = oPercent*oValueRange; // How much of the value range are we covering?
				var oReturn = Math.round(oProduct + oMin); // Add that number to the starting point.
				if(oReturn > oMax){ // Correct the value if needed.
					oReturn = oMax;
				} else if(oReturn < oMin){
					oReturn = oMin;
				}
				return oReturn; // Return the result.
			};
			var oBlurConvert = function(){
				this.flags.sliders["MPG"] = true;
				var oBlurMin = parseInt(this.numberOnly(oMinField.value));
				var oBlurMax = parseInt(this.numberOnly(oMaxField.value));
				if(oBlurMin > oBlurMax){
					oBlurMin = oBlurMax;
					oMinField.value = oBlurMax;
				}
				if(oBlurMin < oMin){
					oBlurMin = oMin;
					oMinField.value = oMin;
				}
				if(oBlurMax > oMax){
					oBlurMax = oMax;
					oMaxField.value = oMax;
				}
				if(oBlurMax < oMin){
					oBlurMax = oMin;
					oMaxField.value = oMin;
				}
				var oMinRange = oBlurMin - oMin; // How far are we from the absolute lowest value?
				var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
				var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
				var oMaxRange = oMax - oBlurMax; // How far are we from the absolute highest value?
				var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
				var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
				oMPGSlider.unsubscribe("change"); // oUpdateUI hijacks the user values!
				oMPGSlider.setValues(oMinProd,oMaxProd);
				oMPGSlider.subscribe("change", oUpdateUI); // Restore oUpdateUI.
			};
			var oMPGSlider = YAHOO.widget.Slider.getHorizDualSlider("mm3_MPGSlider", "mm3_MPGSliderMinThumb", "mm3_MPGSliderMaxThumb", oPixelRange, 0, [oMinProd, oMaxProd]);
			var oUpdateUI = function(){
				oMinField.value = oConvert(oMPGSlider.minVal);
				oMaxField.value = oConvert(oMPGSlider.maxVal);
			};
			oMPGSlider.subscribe("change", oUpdateUI);
			oMPGSlider.subscribe("slideEnd", function(){
				this.updateDualSlider("MPG");
			}, pObj, true);
			YAHOO.util.Event.addListener([oMinField, oMaxField], "blur", oBlurConvert, pObj, true);
			if(oMin == oMax || isNaN(oMin) || isNaN(oMax)){
				YAHOO.util.Dom.setStyle("mm3_MPGSliderContainer", "display", "none");
			}
			if(YAHOO.env.ua.ie == 6){
				setTimeout(function(){
					YAHOO.util.Dom.setStyle("mm3_MPGSliderContainer", "font-size", "10px");
				}, 1500);
			}
		}, this); // JWS.getFilter("MinMPG");
	}; // this.loadMPGSlider()
	this.loadMileageSlider = function(){
		JWS.getFilter("MileageRange", function(pObj){
			// pObj = this!
			var oPixelRange = 200;
			var oMin = parseInt(JWS.JSON.filter.min);
			var oMax = parseInt(JWS.JSON.filter.max);
			var oMinField = document.getElementById("mm3_MileageSliderMinField");
			var oMaxField = document.getElementById("mm3_MileageSliderMaxField");
			oMinField.value = (typeof(pObj.params.MinMileage) != "undefined") ? pObj.params.MinMileage : oMin;
			oMaxField.value = (typeof(pObj.params.MaxMileage) != "undefined") ? pObj.params.MaxMileage : oMax;
			var oValueRange = oMax-oMin;
			var oInitMin = parseInt(oMinField.value);
			var oInitMax = parseInt(oMaxField.value);
			var oMinRange = oInitMin - oMin; // How far are we from the absolute lowest value?
			var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
			var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
			var oMaxRange = oMax - oInitMax; // How far are we from the absolute highest value?
			var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
			var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
			var oConvert = function(pValue){
				pValue = parseInt(pValue);
				var oPercent = pValue/oPixelRange; // Percentage of pixel range.
				var oProduct = oPercent*oValueRange; // How much of the value range are we covering?
				var oReturn = Math.round(oProduct + oMin); // Add that number to the starting point.
				if(oReturn > oMax){ // Correct the value if needed.
					oReturn = oMax;
				} else if(oReturn < oMin){
					oReturn = oMin;
				}
				return oReturn; // Return the result.
			};
			var oBlurConvert = function(){
				this.flags.sliders["Mileage"] = true;
				var oBlurMin = parseInt(this.numberOnly(oMinField.value));
				var oBlurMax = parseInt(this.numberOnly(oMaxField.value));
				if(oBlurMin > oBlurMax){
					oBlurMin = oBlurMax;
					oMinField.value = oBlurMax;
				}
				if(oBlurMin < oMin){
					oBlurMin = oMin;
					oMinField.value = oMin;
				}
				if(oBlurMax > oMax){
					oBlurMax = oMax;
					oMaxField.value = oMax;
				}
				if(oBlurMax < oMin){
					oBlurMax = oMin;
					oMaxField.value = oMin;
				}
				var oMinRange = oBlurMin - oMin; // How far are we from the absolute lowest value?
				var oMinPerc = oMinRange / oValueRange; // Percentage of value range.
				var oMinProd = parseInt(oPixelRange * oMinPerc); // Final pixel range value.
				var oMaxRange = oMax - oBlurMax; // How far are we from the absolute highest value?
				var oMaxPerc = 1 - (oMaxRange / oValueRange); // Percentage of value range.
				var oMaxProd = parseInt(oPixelRange * oMaxPerc); // Final pixel range value.
				oMileageSlider.unsubscribe("change"); // oUpdateUI hijacks the user values!
				oMileageSlider.setValues(oMinProd,oMaxProd);
				oMileageSlider.subscribe("change", oUpdateUI); // Restore oUpdateUI.
			};
			var oMileageSlider = YAHOO.widget.Slider.getHorizDualSlider("mm3_MileageSlider", "mm3_MileageSliderMinThumb", "mm3_MileageSliderMaxThumb", oPixelRange, 0, [oMinProd, oMaxProd]);
			var oUpdateUI = function(){
				oMinField.value = oConvert(oMileageSlider.minVal);
				oMaxField.value = oConvert(oMileageSlider.maxVal);
			};
			oMileageSlider.subscribe("change", oUpdateUI);
			oMileageSlider.subscribe("slideEnd", function(){
				this.updateDualSlider("Mileage");
			}, pObj, true);
			YAHOO.util.Event.addListener([oMinField, oMaxField], "blur", oBlurConvert, pObj, true);
			if(oMin == oMax || isNaN(oMin) || isNaN(oMax)){
				YAHOO.util.Dom.setStyle("mm3_MileageSliderContainer", "display", "none");
			}
			if(YAHOO.env.ua.ie == 6){
				setTimeout(function(){
					YAHOO.util.Dom.setStyle("mm3_MileageSliderContainer", "font-size", "10px");
				}, 1000);
			}
		}, this); // JWS.getFilter("MaxMileage");
	}; // this.loadMileageSlider()
	this.loadSliders = function(){
		if(this.flags.dropdowns.type == true && this.flags.dropdowns.make == true && this.flags.dropdowns.model == true && this.flags.dropdowns.year == true){
			this.loadYearSlider();
			this.loadPriceSlider();
			this.loadMPGSlider();
			this.loadMileageSlider();
		}
	}; // this.loadSliders()
	this.editParam = function(pParam){
		YAHOO.util.Dom.setStyle("mm3_Loading", "display", "block");
		JWS.getFilter(pParam, function(pObj){
			// pObj = this!
			if(JWS.JSON.filter != ""){
				if(YAHOO.util.Dom.inDocument("mm3_EditParamPanel_c")){
					var oContainer = document.getElementById("mm3_EditParamPanel_c");
					oContainer.parentNode.removeChild(oContainer);
				}
				var oPanel = new YAHOO.widget.Panel("mm3_EditParamPanel", {
					constraintoviewport: true,
					close: true,
					effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.25 },
					zIndex: 30000
				});
				var oHeader = pParam.replace(/Min/, "Minimum ");
				oHeader = oHeader.replace(/Max/, "Maximum ");
				oPanel.setHeader(pObj.vocab['Edit Filter'] + ': ' + oHeader);
				var oOptions = document.createElement("div");
				oOptions.id = "mm3_EditParamOptions";
				oOptions.innerHTML = '<p>' + pObj.phrases['Inventory Edit Filter'] + '</p>';
				var oCheckboxes = false;
				var oTexts = false;
				var oRadios = false;
				if(pParam.indexOf("VehicleType") != -1){
					oCheckboxes = true;
					for(var i in JWS.JSON.filter){
						if(i.indexOf("New") != -1 || i.indexOf("Used") != -1 || i.indexOf("Certified") != -1){
							var oSpan = document.createElement("span");
							oSpan.className = "mm3_EditParamSpan";
							oOptions.appendChild(oSpan);
							var oInput = document.createElement("input");
							oInput.type = "checkbox";
							oInput.id = "mm3_Options" + i;
							// Is this param defined?
							if(typeof(pObj.params[pParam]) != "undefined"){
								for(var j=0; j<pObj.params[pParam].length; j++){
									// Is this specific option defined?
									if(pObj.params[pParam][j] == i){
										oInput.defaultChecked = "defaultChecked";
									}
								}
							}
							oSpan.appendChild(oInput);
							oSpan.appendChild(document.createTextNode(" "));
							var oLabel = document.createElement("label");
							oLabel.htmlFor = "mm3_Options" + i;
							oSpan.appendChild(oLabel);
							oLabel.appendChild(document.createTextNode(" " + JWS.JSON.filter[i].name.replace(/\//, " / ") + " "));
							var oLabelCount = document.createElement("span");
							oLabelCount.appendChild(document.createTextNode("(" + JWS.JSON.filter[i].count + ")"));
							oLabel.appendChild(oLabelCount);
						}
					}
				} else if(pParam.indexOf("Min") == -1 && pParam.indexOf("Max") == -1){ // Checkboxes.
					oCheckboxes = true;
					for(var i in JWS.JSON.filter){
						var oSpan = document.createElement("span");
						oSpan.className = "mm3_EditParamSpan";
						oOptions.appendChild(oSpan);
						var oInput = document.createElement("input");
						oInput.type = "checkbox";
						oInput.id = "mm3_Options" + i;
						// Is this param defined?
						if(typeof(pObj.params[pParam]) != "undefined"){
							for(var j=0; j<pObj.params[pParam].length; j++){
								// Is this specific option defined?
								if(pObj.params[pParam][j] == i){
									oInput.defaultChecked = "defaultChecked";
								}
							}
						}
						oSpan.appendChild(oInput);
						oSpan.appendChild(document.createTextNode(" "));
						var oLabel = document.createElement("label");
						oLabel.htmlFor = "mm3_Options" + i;
						oSpan.appendChild(oLabel);
						oLabel.appendChild(document.createTextNode(" " + JWS.JSON.filter[i].name.replace(/\//, " / ") + " "));
						var oLabelCount = document.createElement("span");
						oLabelCount.appendChild(document.createTextNode("(" + JWS.JSON.filter[i].count + ")"));
						oLabel.appendChild(oLabelCount);
					}
				} else if(pParam.indexOf("Price") != -1 || pParam.indexOf("MPG") != -1 || pParam.indexOf("Mileage") != -1){ // Texts.
					oTexts = true;
					var oJWSMin;
					var oJWSMax;
					var oParam = pParam.replace(/Min/, "");
					oParam = oParam.replace(/Max/, "");
					oPanel.setHeader(pObj.vocab['Edit Filter'] + ': ' + oParam + ' Range');
					JWS.getFilter(oParam + "Range", function(pObj){
						// pObj = this!
						oJWSMin = JWS.JSON.filter.min.replace(/\.00/, "");
						oJWSMax = JWS.JSON.filter.max.replace(/\.00/, "");
						var oSpan = document.createElement("span");
						oSpan.className = "mm3_EditParamSpan";
						oOptions.appendChild(oSpan);
						var oInputMin = document.createElement("input");
						oInputMin.type = "text";
						oInputMin.id = "mm3_EditRangeMin";
						if(typeof(pObj.params["Min" + oParam]) != "undefined"){
							oInputMin.value = pObj.params["Min" + oParam];
						} else {
							oInputMin.value = oJWSMin;
						}
						oSpan.appendChild(oInputMin);
						oSpan.appendChild(document.createTextNode(" to "));
						var oInputMax = document.createElement("input");
						oInputMax.type = "text";
						oInputMax.id = "mm3_EditRangeMax";
						if(typeof(pObj.params["Max" + oParam]) != "undefined"){
							oInputMax.value = pObj.params["Max" + oParam];
						} else {
							oInputMax.value = oJWSMax;
						}
						oSpan.appendChild(oInputMax);
						YAHOO.util.Event.addListener([oInputMin, oInputMax], "blur", function(e){
							var oTarget = YAHOO.util.Event.getTarget(e);
							if(oTarget.id.indexOf("Min") != -1 && parseInt(oTarget.value) < parseInt(oJWSMin)){
								oTarget.value = oJWSMin;
							} else if(oTarget.id.indexOf("Max") != -1 && parseInt(oTarget.value) > parseInt(oJWSMax)){
								oTarget.value = oJWSMax;
							}
						});
					}, pObj); // JWS.getFilter
				} else { // Radios.
					oRadios = true;
					for(var i in JWS.JSON.filter){
						var oSpan = document.createElement("span");
						oSpan.className = "mm3_EditParamSpan";
						oOptions.appendChild(oSpan);
						var oInput = document.createElement("input");
						oInput.type = "radio";
						oInput.id = YAHOO.util.Dom.generateId();
						oInput.name = "mm3_EditParamRadio";
						oInput.value = i;
						// Is this param defined?
						if(typeof(pObj.params[pParam]) != "undefined"){
							// Is this specific option defined?
							if(pObj.params[pParam] == i){
								oInput.defaultChecked = "defaultChecked";
							}
						}
						oSpan.appendChild(oInput);
						oSpan.appendChild(document.createTextNode(" "));
						var oLabel = document.createElement("label");
						oLabel.htmlFor = oInput.id;
						oSpan.appendChild(oLabel);
						oLabel.appendChild(document.createTextNode(" " + JWS.JSON.filter[i].name + " "));
						var oLabelCount = document.createElement("span");
						oLabelCount.appendChild(document.createTextNode("(" + JWS.JSON.filter[i].count + ")"));
						oLabel.appendChild(oLabelCount);
					}
				}
				oPanel.appendToBody(oOptions);
				var oControls = document.createElement("div");
				oControls.id = "mm3_EditParamControls";
				if(oCheckboxes == true){
					oControls.innerHTML = '\
						<div>\
							<a href="javascript:void(0);" class="mm3_Button02" rel="CheckAll"><span>' + pObj.vocab['Check All'] + '</span></a>\
							<a href="javascript:void(0);" class="mm3_Button02" rel="UncheckAll"><span>' + pObj.vocab['Uncheck All'] + '</span></a>\
							<a href="javascript:void(0);" class="mm3_Button01" rel="Submit"><span>' + pObj.vocab['Submit'] + '</span></a>\
							<a href="javascript:void(0);" class="mm3_Button01" rel="Cancel"><span>' + pObj.vocab['Cancel'] + '</span></a>\
							<br class="mm3_ClearDiv" />\
						</div>\
					';
				} else {
					oControls.innerHTML = '\
						<div>\
							<a href="javascript:void(0);" class="mm3_Button01" rel="Submit"><span>' + pObj.vocab['Submit'] + '</span></a>\
							<br class="mm3_ClearDiv" />\
						</div>\
					';
				}
				oPanel.appendToBody(oControls);
				var oClear = document.createElement("div");
				oClear.className = "mm3_ClearDiv";
				oPanel.appendToBody(oClear);
				var oLinks = oControls.getElementsByTagName("a");
				YAHOO.util.Event.addListener(oLinks, "click", function(e){
					YAHOO.util.Event.preventDefault(e);
					var oTarget = YAHOO.util.Event.getTarget(e);
					if(oTarget.nodeName.toUpperCase() != "A"){
						oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "a");
					}
					if(oTarget.rel == "CheckAll"){
						var oAllInputs = oOptions.getElementsByTagName("input");
						for(var i=0; i<oAllInputs.length; i++){
							oAllInputs[i].checked = true;
						}
					} else if(oTarget.rel == "UncheckAll"){
						var oAllInputs = oOptions.getElementsByTagName("input");
						for(var i=0; i<oAllInputs.length; i++){
							oAllInputs[i].checked = false;
						}
					} else if(oTarget.rel == "Cancel"){
						oPanel.hide();
					} else if(oTarget.rel == "Submit"){
						if(oCheckboxes == true){
							var oOptionsArray = new Array();
							var oAllInputs = oOptions.getElementsByTagName("input");
							for(var i=0; i<oAllInputs.length; i++){
								if(oAllInputs[i].checked == true){
									oOptionsArray.push(oAllInputs[i].id.replace(/mm3_Options/, ""));
								}
							}
							pObj.params[pParam] = oOptionsArray;
							if(pObj.params[pParam].length == 0){
								delete pObj.params[pParam];
							}
							pObj.compileURL();
						} else if(oTexts == true){
							var oMin = document.getElementById("mm3_EditRangeMin");
							var oMax = document.getElementById("mm3_EditRangeMax");
							pObj.params["Min" + oParam] = parseInt(oMin.value.replace(/,/, "")) + "";
							pObj.params["Max" + oParam] = parseInt(oMax.value.replace(/,/, "")) + "";
							if(pObj.params["Min" + oParam] <= oJWSMin){
								delete pObj.params["Min" + oParam];
							}
							if(pObj.params["Max" + oParam] >= oJWSMax){
								pObj.params["Max" + oParam] = oJWSMax;
							}
							pObj.compileURL();
						} else if(oRadios == true){
							var oAllInputs = oOptions.getElementsByTagName("input");
							for(var i=0; i<oAllInputs.length; i++){
								if(oAllInputs[i].checked == true){
									pObj.params[pParam] = oAllInputs[i].value;
								}
							}
							pObj.compileURL();
						}
					}
				});
				oPanel.render(document.body);
				YAHOO.util.Dom.setStyle("mm3_Loading", "display", "none");
				if(YAHOO.env.ua.ie == 6){
					scroll(0,0);
				}
			} else {
				alert("There was an error retrieving the filter. Please try again.");
			}
		}, this); // JWS.getFilter;
	}; // this.editParam()
	this.loadBreadcrumbs = function(){
		var oSearchFilters = document.getElementById("mm3_SearchFilters");
		var oMainParams = document.createElement("div");
		var oContinue = false;
		this.flags.breadcrumbs.price = true;
		this.flags.breadcrumbs.mpg = true;
		this.flags.breadcrumbs.mileage = true;
		for(var i in this.params){
			if(i.indexOf("VehicleType") != -1){ // Type
				oContinue = true;
				if(this.params[i].length == 1){
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">Type: ' + this.params[i] + '</a>';
				} else {
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">Type: ' + this.params[i].length + ' ' + this.vocab['Selected'] + '</a>';
				}
				oMainParams.innerHTML += '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("Make") != -1 || i.indexOf("Model") != -1){ // Make and Model
				oContinue = true;
				if(this.params[i].length == 1){
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i + ': ' + this.params[i] + '</a>';
				} else {
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i + ': ' + this.params[i].length + ' ' + this.vocab['Selected'] + '</a>';
				}
				oMainParams.innerHTML += '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("Year") != -1){ // Year
				oContinue = true;
				oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i + ': ' + this.params[i][0] + ' min, ' + this.params[i][this.params[i].length - 1] + ' max</a>';
				oMainParams.innerHTML += '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("Price") != -1 && this.flags.breadcrumbs.price == true){ // Price
				oContinue = true;
				this.flags.breadcrumbs.price = false;
				var oPriceString = '';
				oPriceString += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">Price: ';
				if(typeof(this.params.MinPrice) != "undefined"){
					oPriceString += this.params.MinPrice + ' min';
				}
				if(typeof(this.params.MinPrice) != "undefined" && typeof(this.params.MaxPrice) != "undefined"){
					oPriceString += ', ';
				}
				if(typeof(this.params.MaxPrice) != "undefined"){
					oPriceString += this.params.MaxPrice + ' max';
				}
				oPriceString += '</a>';
				oMainParams.innerHTML += oPriceString + '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("MPG") != -1 && this.flags.breadcrumbs.mpg == true){ // MPG
				oContinue = true;
				this.flags.breadcrumbs.mpg = false;
				var oMPGString = '';
				oMPGString += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">MPG: ';
				if(typeof(this.params.MinMPG) != "undefined"){
					oMPGString += this.params.MinMPG + ' min';
				}
				if(typeof(this.params.MinMPG) != "undefined" && typeof(this.params.MaxMPG) != "undefined"){
					oMPGString += ', ';
				}
				if(typeof(this.params.MaxMPG) != "undefined"){
					oMPGString += this.params.MaxMPG + ' max';
				}
				oMPGString += '</a>';
				oMainParams.innerHTML += oMPGString + '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("Mileage") != -1 && this.flags.breadcrumbs.mileage == true){ // Mileage
				oContinue = true;
				this.flags.breadcrumbs.mileage = false;
				var oMileageString = '';
				oMileageString += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">Mileage: ';
				if(typeof(this.params.MinMileage) != "undefined"){
					oMileageString += this.params.MinMileage + ' min';
				}
				if(typeof(this.params.MinMileage) != "undefined" && typeof(this.params.MaxMileage) != "undefined"){
					oMileageString += ', ';
				}
				if(typeof(this.params.MaxMileage) != "undefined"){
					oMileageString += this.params.MaxMileage + ' max';
				}
				oMileageString += '</a>';
				oMainParams.innerHTML += oMileageString + '<br class="mm3_ClearDiv" />';
			} else if(i.indexOf("Price") == -1 && i.indexOf("MPG") == -1 && i.indexOf("Mileage") == -1 && i.indexOf("Email") == -1 && i.indexOf("StockNum") == -1){ // All others.
				oContinue = true;
				if(typeof(this.params[i]) == "string"){
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i.replace(/Min/, "Minimum ") + ': ' + this.params[i] + '</a>';
				} else if(this.params[i].length == 1){
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i.replace(/Min/, "Minimum ") + ': ' + this.params[i][0].replace(/\sSponsored/, "") + '</a>';
				} else {
					oMainParams.innerHTML += '<a href="javascript:void(0);" class="mm3_RemoveFilter" rel="delete:' + i + '">&nbsp;</a><a href="javascript:void(0);" rel="' + i + '">' + i + ': ' + this.params[i].length + ' Selected</a>';
				}
				oMainParams.innerHTML += '<br class="mm3_ClearDiv" />';
			}
		}
		if(oContinue == true){
			oSearchFilters.innerHTML = '<h6>' + this.vocab['Your Search Filters'] + '</h6><strong>' + this.vocab['Click to Edit'] + '</strong>';
			oSearchFilters.appendChild(oMainParams);
			oSearchFilters.innerHTML += '<div id="mm3_RemoveAllFiltersWrapper"><a href="javascript:void(0);" id="mm3_RemoveAllFilters">' + this.vocab['Reset All Filters'] + '</a></div><br class="mm3_ClearDiv" />';
			var oLinks = oSearchFilters.getElementsByTagName("a");
			YAHOO.util.Event.addListener(oLinks, "click", function(e){
				YAHOO.util.Event.preventDefault(e);
				var oTarget = YAHOO.util.Event.getTarget(e);
				if(oTarget.nodeName.toUpperCase() != "A"){
					oTarget = YAHOO.util.Dom.getAncestorByTagName(oTarget, "a");
				}
				if(oTarget.id == "mm3_RemoveAllFilters"){
					this.newSearch();
				} else if(oTarget.rel.indexOf("delete") == -1){
					// Edit this param.
					this.editParam(oTarget.rel);
				} else {
					// Remove this param.
					var oSplit = oTarget.rel.split(":");
					for(var i in this.params){
						if(oSplit[1].indexOf(i) != -1){ // Was i.indexOf(oSplit[1]), had to change due to Exterior/ExteriorColor.
							delete this.params[i];
						}
					}
					this.compileURL();
				}
			}, this, true);
		}
	}; // this.loadBreadcrumbs()
	this.zipSearch = function(e){
		YAHOO.util.Event.stopPropagation(e);
		YAHOO.util.Event.preventDefault(e);
		var oTarget = YAHOO.util.Event.getTarget(e);
		var validate = {
			zip: function(pInput){
				if(isNaN(parseInt(pInput.value)) == false){
					if(pInput.value.length == 5){
						return true;
					} else {
						return "Please enter a numeric 5-digit zip code.";
					}
				} else {
					return "Please enter a numeric 5-digit zip code.";
				}
			}
		};
		var oInput = document.getElementById("mm3_ZipCodeInput");
		if(validate.zip(oInput) === true){
				this.params["Zip"] = oInput.value;
				this.params["MaxDistance"] = oTarget.options[oTarget.selectedIndex].value;
				this.compileURL();
		} else {
			oTarget.options[0].selected = true;
			alert("Please enter a numeric 5-digit zip code.");
		}
	}; // this.zipSearch()
	this.loadZipSearch = function(){
		if(YAHOO.util.Dom.inDocument('mm3_ZipCodeSearch')){
			YAHOO.util.Event.addListener('mm3_ZipCodeSelect', 'change', this.zipSearch, this, true);
		}
	}; // this.loadZipSearch()
	this.updatePageInfo = function(){
		var oPerPage = (typeof(this.prefs.per_page) != "undefined") ? parseInt(this.prefs.per_page) : parseInt(this.defaults.per_page);
		// Result strings:
		var oStartResult = ((this.page * oPerPage) - oPerPage) + 1;
		var oEndResult = (oStartResult + oPerPage) - 1;
		if(oEndResult > this.total){
			oEndResult = this.total;
		}
		var oTopPageBarResults = document.getElementById("mm3_TopPageBarResults");
		var oDisplayingResults = YAHOO.util.Dom.getElementsByClassName("mm3_DisplayingResults","div");
		oTopPageBarResults.innerHTML = this.total + ' ' + this.vocab['Matches'] + '!';
		for(var i=0; i<oDisplayingResults.length; i++){
			oDisplayingResults[i].innerHTML = '\
				' + this.vocab['Displaying Results'] + '\
				' + oStartResult + '-' + oEndResult + '\
				' + this.vocab['of'] + '\
				' + this.total + '\
				<em>(' + this.vocab['Page'] + ' ' + ((this.page * oPerPage) / oPerPage) + ' ' + this.vocab['of'] + ' ' + Math.ceil(this.total / oPerPage) + ')</em>\
			';
		}
		// Page buttons:
		var oPageArray = new Array();
		oPageArray[0] = this.page - 2;
		oPageArray[1] = this.page - 1;
		oPageArray[2] = this.page;
		oPageArray[3] = this.page + 1;
		oPageArray[4] = this.page + 2;
		var oPagesContainer = YAHOO.util.Dom.getElementsByClassName("mm3_PagesContainer", "div")
		var oPagesHTML = '\
			<a class="mm3_Button02 mm3_Left mm3_FirstPage" href="javascript:void(0);" rel="first"><span>First Page</span></a>\
			<a class="mm3_Button02 mm3_Left mm3_PreviousPage" href="javascript:void(0);" rel="previous"><span>Previous Page</span></a>\
			<a class="mm3_Button02 mm3_Right mm3_LastPage" href="javascript:void(0);" rel="last"><span>Last Page</span></a>\
			<a class="mm3_Button02 mm3_Right mm3_NextPage" href="javascript:void(0);" rel="next"><span>Next Page</span></a>\
		';
		for(var i=0; i<oPageArray.length; i++){
			var oFinalResult = oPageArray[i] * oPerPage; // Final result of given page.
			var oFirstResult = oFinalResult - (oPerPage - 1); // First result of given page.
			var oBlankPage = false;
			if (oPageArray[i] < 1 || oFirstResult > this.total){
				oBlankPage = true;
			}
			if(oBlankPage == false){
				if(i == 2){
					oPagesHTML += '<a id="mm3_PageButton3" class="mm3_Button02" href="javascript:void(0);"><span>' + oPageArray[2] + '</span></a>';
				} else {
					oPagesHTML += '<a id="mm3_PageButton' + (i + 1) + '" class="mm3_PageButton" href="javascript:void(0);"><span>' + oPageArray[i] + '</span></a>';
				}
			}
		}
		oPagesHTML += '\
			<div class="mm3_ClearDiv"></div>\
		';
		for(var i=0; i<oPagesContainer.length; i++){
			oPagesContainer[i].innerHTML = oPagesHTML;
		}
		var oPageNavButtons = new Array();
		oPageNavButtons[0] = YAHOO.util.Dom.getElementsByClassName("mm3_FirstPage","a");
		oPageNavButtons[1] = YAHOO.util.Dom.getElementsByClassName("mm3_PreviousPage","a");
		oPageNavButtons[2] = YAHOO.util.Dom.getElementsByClassName("mm3_NextPage","a");
		oPageNavButtons[3] = YAHOO.util.Dom.getElementsByClassName("mm3_LastPage","a");
		YAHOO.util.Event.addListener(oPageNavButtons, "click", this.pageNavigation, this, true);
		var oPageButton = YAHOO.util.Dom.getElementsByClassName("mm3_PageButton","a");
		YAHOO.util.Event.addListener(oPageButton, "click", this.pageNumber, this, true);
	}; // this.updatePageInfo()
	this.loadPage = function(pPage){
		YAHOO.util.Dom.setStyle("mm3_Loading", "display", "block");
		// Page info:
		JWS.getMatchCount(function(pObj){
			// pObj = this!
			pObj.page = pPage;
			pObj.total = parseInt(JWS.JSON.count);
			pObj.updatePageInfo();
		}, this); // JWS.getMatchCount()
		// Page matches:
		JWS.getMatch(pPage, function(pObj){
			// pObj = this!
			// Hide sliders?
			if(JWS.JSON.match.length == 1){
				YAHOO.util.Dom.setStyle("mm3_YearSliderContainer", "display", "none");
				YAHOO.util.Dom.setStyle("mm3_PriceSliderContainer", "display", "none");
				YAHOO.util.Dom.setStyle("mm3_MPGSliderContainer", "display", "none");
				YAHOO.util.Dom.setStyle("mm3_MileageSliderContainer", "display", "none");
			} else {
				YAHOO.util.Dom.setStyle("mm3_YearSliderContainer", "display", "block");
				YAHOO.util.Dom.setStyle("mm3_PriceSliderContainer", "display", "block");
				YAHOO.util.Dom.setStyle("mm3_MPGSliderContainer", "display", "block");
				YAHOO.util.Dom.setStyle("mm3_MileageSliderContainer", "display", "block");
			}
			// Clear out existing matches:
			var oResultsContainer = document.getElementById("mm3_ResultsContainer");
			var oChildren = YAHOO.util.Dom.getChildren(oResultsContainer);
			for(var i=0; i<oChildren.length; i++){
				oResultsContainer.removeChild(oChildren[i]);
			}
			// Load matches depending on display type:
			if(typeof(pObj.user.display) == "undefined"){
				pObj.user.display = pObj.defaults.display;
			}
			// Text only table?
			if(pObj.user.display == "text"){
				// Create the table:
				var oTextOnlyTable = document.createElement("table");
				oTextOnlyTable.id = "mm3_TextOnlyTable";
				var oTBODY = document.createElement("tbody");
				var oTextOnlyHeader = document.createElement("tr");
				oTextOnlyHeader.id = "mm3_TextOnlyHeader";
				var oTextOnlyColStartTop = document.createElement("td");
				oTextOnlyColStartTop.className = "mm3_TextOnlyColStart";
				var oTextOnlyColStartTopDiv = document.createElement("div");
				oTextOnlyColStartTopDiv.appendChild(document.createTextNode(pObj.vocab['Type']));
				oTextOnlyColStartTop.appendChild(oTextOnlyColStartTopDiv);
				oTextOnlyHeader.appendChild(oTextOnlyColStartTop);
				var oTD01 = document.createElement("td");
				var oTD02 = document.createElement("td");
				var oTD03 = document.createElement("td");
				var oTD04 = document.createElement("td");
				var oTD05 = document.createElement("td");
				var oTD06 = document.createElement("td");
				var oTD07 = document.createElement("td");
				var oTD08 = document.createElement("td");
				var oDIV01 = document.createElement("div");
				var oDIV02 = document.createElement("div");
				var oDIV03 = document.createElement("div");
				var oDIV04 = document.createElement("div");
				var oDIV05 = document.createElement("div");
				var oDIV06 = document.createElement("div");
				var oDIV07 = document.createElement("div");
				var oDIV08 = document.createElement("div");
				oDIV01.appendChild(document.createTextNode(pObj.vocab['Year']));
				oDIV02.appendChild(document.createTextNode(pObj.vocab['Make']));
				oDIV03.appendChild(document.createTextNode(pObj.vocab['Model']));
				oDIV04.appendChild(document.createTextNode(pObj.vocab['Price']));
				oDIV05.appendChild(document.createTextNode(pObj.vocab['Miles']));
				oDIV06.appendChild(document.createTextNode(pObj.vocab['Cyls']));
				oDIV07.appendChild(document.createTextNode(pObj.vocab['Color']));
				oDIV08.appendChild(document.createTextNode(pObj.vocab['Compare']));
				oTD01.appendChild(oDIV01);
				oTD02.appendChild(oDIV02);
				oTD03.appendChild(oDIV03);
				oTD04.appendChild(oDIV04);
				oTD05.appendChild(oDIV05);
				oTD06.appendChild(oDIV06);
				oTD07.appendChild(oDIV07);
				oTD08.appendChild(oDIV08);
				oTextOnlyHeader.appendChild(oTD01);
				oTextOnlyHeader.appendChild(oTD02);
				oTextOnlyHeader.appendChild(oTD03);
				oTextOnlyHeader.appendChild(oTD04);
				oTextOnlyHeader.appendChild(oTD05);
				oTextOnlyHeader.appendChild(oTD06);
				oTextOnlyHeader.appendChild(oTD07);
				oTextOnlyHeader.appendChild(oTD08);
				oTBODY.appendChild(oTextOnlyHeader);
				oTextOnlyTable.appendChild(oTBODY);
				oResultsContainer.appendChild(oTextOnlyTable);
			}
			// Loop through results:
			for(var i=0; i<JWS.JSON.match.length; i++){
				var oMatch = JWS.JSON.match[i];
				// Extra?
				var oExtra = false;
				if(oMatch.incentive != "" || oMatch.special_lease == "1" || typeof(pObj.custom) != "undefined" || oMatch.carfax_link != "" || pObj.checkHighlight(oMatch) != false){
					oExtra = true;
				}
				// Thumbnail?
				var oThumbnail = (typeof(oMatch.thumbnails["120"]) != "undefined") ? oMatch.thumbnails["120"] : oMatch.thumbnails["image"] ;
				// Type, Phone, Banner?
				var oPhone = '';
				switch(oMatch.type){
					case 'New':
						var oType = pObj.vocab['New'];
						oPhone = (pObj.config.mmPhoneTool == 'true' && oMatch.dealer.phonetool_phone_new != '') ? oMatch.dealer.phonetool_phone_new : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone_new != '') ? oMatch.dealer.phone_new : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone != '') ? oMatch.dealer.phone : oPhone;
						var oBanner = "New";
						break;
					case 'Used':
						var oType = (oMatch.certified == "Yes") ? pObj.vocab['CPO'] : pObj.vocab['Used'];
						oPhone = (pObj.config.mmPhoneTool == 'true' && oMatch.dealer.phonetool_phone_used != '') ? oMatch.dealer.phonetool_phone_used : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone_used != '') ? oMatch.dealer.phone_used : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone != '') ? oMatch.dealer.phone : oPhone;
						var oBanner = (oMatch.certified == "Yes") ? "CPO" : "Used";
						if(oBanner == "CPO"){
							oExtra = true;
						}
						break;
					default:
						var oType = pObj.vocab['N/A'];
						oPhone = (pObj.config.mmPhoneTool == 'true' && oMatch.dealer.phonetool_phone_new != '') ? oMatch.dealer.phonetool_phone_new : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone_new != '') ? oMatch.dealer.phone_new : oPhone;
						oPhone = (oPhone == '' && oMatch.dealer.phone != '') ? oMatch.dealer.phone : oPhone;
						var oBanner = "NA";
				}
				if(oPhone == ''){
					switch(oMatch.type){
						case 'New':
							oPhone = pObj.vocab['Phone New'];
							break;
						case 'Used':
							if(oMatch.certified == "Yes"){
								oPhone = pObj.vocab['Phone CPO'];
							} else {
								oPhone = pObj.vocab['Phone Used'];
							}
							break;
						default:
							oPhone = pObj.vocab['Phone New'];
					}
				}
				// Video?
				if(oMatch.video != ""){
					oExtra = true;
				}
				// Sanitize Phone:
				if(oPhone.length === 10){
					oPhone = '(' + oPhone.substring(0, 3) + ') ' + oPhone.substring(3, 6) + '-' + oPhone.substring(6);
				}
				// MPG?
				var oMPG = (parseInt(oMatch.mpg_city) > 0) ? oMatch.mpg_city : pObj.vocab['N/A'] ;
				oMPG = (parseInt(oMatch.mpg_highway) > oMPG) ? oMatch.mpg_highway : oMPG ;
				// MSRP?
				var oMSRP = '';
				if(pObj.config.mmShowMSRP == 'true' && oMatch.type == 'New'){
					var oMSRPSplit = oMatch['msrp'].split(".");
					oMSRPSplit[0] = oMSRPSplit[0].replace(/(\d+)(\d{3})/, "$1" + "," + "$2");
					oMSRP = "$" + oMSRPSplit[0] + "." + oMSRPSplit[1];
					oMSRP = '<span class="mm3_MSRPPrice">' + pObj.vocab['MSRP'] + ': <del>' + oMSRP + '</del></span><br />';
				}
				// Price?
				var oWasPrice = '';
				if(oMatch['sale_price'] != "0.00"){
					var oPriceSplit = oMatch['sale_price'].split(".");
					oPriceSplit[0] = oPriceSplit[0].replace(/(\d+)(\d{3})/, "$1" + "," + "$2");
					var oPrice = "$" + oPriceSplit[0] + "." + oPriceSplit[1];
					// Sale Price?
					if(parseInt(oMatch['price'], 10) > parseInt(oMatch['sale_price'], 10)){
						var oWasPriceSplit = oMatch['price'].split(".");
						oWasPriceSplit[0] = oWasPriceSplit[0].replace(/(\d+)(\d{3})/, "$1" + "," + "$2");
						oWasPrice = "$" + oWasPriceSplit[0] + "." + oWasPriceSplit[1];
						oWasPrice = '<span class="mm3_WasPrice">' + pObj.vocab['Was'] + ': <del>' + oWasPrice + '</del></span><br />';
					}
				} else {
					var oPrice = pObj.vocab['No Price'];
				}
				// Hide price?
				if(pObj.config.mmHidePrice != ''){
					if(pObj.config.mmHidePrice == oMatch.type.toLowerCase() || pObj.config.mmHidePrice == 'true'){
						oWasPrice = '';
						oPrice = pObj.vocab['No Price'];
					}
				}
				// Monthly Payment?
				var oMonthlyPayment = '';
				if (pObj.config.mmMonthlyPayment != '' && oMatch.sale_price != '0.00'){
					var mptc = oMatch.sale_price * (1 - pObj.config.mmCalculatorDeposit) + 350 + oMatch.sale_price * pObj.config.mmCalculatorTax / 100;
					var mpi = pObj.config.mmCalculatorRate / 100 / 12;
					var mpy = Math.pow(1+mpi,pObj.config.mmCalculatorDefault);
					var mp = (mptc*mpy*mpi) / (mpy-1);
					mp = parseFloat(mp, 10);
					mp = Math.round(mp * 100) / 100;
					mp = mp + '';
					var oMonthlyPaymentSplit = mp.split(".");
					if (typeof(oMonthlyPaymentSplit[1]) == 'undefined') {
						oMonthlyPaymentSplit[1] = '00';
					}
					oMonthlyPaymentSplit[0] = oMonthlyPaymentSplit[0].replace(/(\d+)(\d{3})/, "$1" + "," + "$2");
					mp = oMonthlyPaymentSplit[0] + "." + oMonthlyPaymentSplit[1];
					mp = "$" + oMonthlyPaymentSplit[0] + "." + oMonthlyPaymentSplit[1];
					oMonthlyPayment = '<span class="mm3_MonthlyPayment">' + pObj.vocab['Monthly Payment'] + ': ' + mp + '</span><br />';

				}
				// Compare?
				var oCompare = (pObj.compareList.indexOf(oMatch.vin) != -1) ? 'checked="checked"' : '';
				var oCompareText = (pObj.compareList.indexOf(oMatch.vin) != -1) ? pObj.vocab['Undo Compare'] : pObj.vocab['Compare'] ;
				// Comments?
				var oComments = '';
				if(pObj.config.mmCommentsPopup == 'true' && (oMatch.comments != '' || oMatch.tagline != '' || oMatch.advertising != '')){
					oComments = oMatch.comments.replace('<li>', '&nbsp;') + oMatch.tagline.replace('<li>', '&nbsp;') + oMatch.advertising.replace('<li>', '&nbsp;');
					var oLimit = parseInt(pObj.config.mmCommentsPopupLimit, 10);
					if(oComments.length > oLimit){
						oComments = oComments.substring(0, oLimit) + '... (More)';
					}
					oComments = '<div class="mm3_ResultComments">' + oComments + '</div>';
				}
				// Render:
				var oResult = document.createElement("div");
				switch(pObj.user.display){
					case "large":
						oResult.className = "mm3_LargeResult mm3_ResultParent mm3_ResultType" + oMatch.type;
						oResultsContainer.appendChild(oResult);
						oResult.innerHTML = '\
							<div class="mm3_Left">\
								<div class="mm3_ResultThumbnail">\
									<img class="mm3_ThumbnailBanner' + oBanner + '" alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="/AF2/images/blank.gif" />\
									<img alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="' + oThumbnail + '" />\
								</div>\
								<div class="mm3_ResultTitle">' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + '<br /><span>' + oMatch.trim + '</span></div>\
								<div class="mm3_ResultData">\
									<span>' + pObj.vocab['Type'] + ': ' + oType + ' |</span> <span>' + pObj.vocab['Color'] + ': ' + oMatch.exterior + ' |</span> \
									<span>' + pObj.vocab['Engine'] + ': ' + oMatch.engine + ' |</span> <span>' + pObj.vocab['Doors'] + ': ' + oMatch.doors + ' |</span> \
									<span>' + pObj.vocab['Transmission'] + ': ' + oMatch.transmission + ' |</span> <span>' + pObj.vocab['Drive'] + ': ' + oMatch.drive + 'WD |</span> \
									<span>' + pObj.vocab['MPG'] + '(' + pObj.vocab['Hwy'] + ')' + ': ' + oMPG + ' |</span> <span>' + pObj.vocab['Mileage'] + ': ' + oMatch.mileage.replace(/\.00/,"") + ' |</span> \
									<span class="mm3_DataStock">' + pObj.vocab['Stock #'] + ': ' + oMatch.stocknum + ' |</span> <span>' + pObj.vocab['VIN'] + ': ' + oMatch.vin + '</span>\
									<input value="' + oMatch.vin + '" name="vin" type="hidden">\
								</div>\
							</div>\
							<div class="mm3_Right">\
								<div class="mm3_ResultPricing">\
									' + oMSRP + '\
									' + oWasPrice + '\
									<span class="mm3_PricingTitle">' + pObj.vocab['Price Prefix'] + ' </span><br />\
									<span class="mm3_Price">' + oPrice + '</span><br />\
									' + oMonthlyPayment + '\
									<span class="mm3_PricingSubtitle">' + pObj.vocab['Call'] + ' ' + oPhone + '</span>\
								</div>\
								<div class="mm3_ResultControls">\
									<a href="javascript:void(0);" class="mm3_Button01 mm3_ButtonDetails"><span>' + pObj.vocab['View Vehicle Details'] + '</span></a>\
									<div class="mm3_ClearDiv"></div>\
									<div class="mm3_CompareCheckbox">\
										<label for="mm3_CBGen' + i + '">' + oCompareText + '</label> <input id="mm3_CBGen' + i + '" type="checkbox" ' + oCompare + '>\
									</div>\
								</div>\
							</div>\
							<div class="mm3_ResultClearDiv"></div>\
							' + oComments + '\
						';
						break;
					case "tile":
						oResult.className = "mm3_TileResult mm3_ResultParent mm3_ResultType" + oMatch.type;
						oResultsContainer.appendChild(oResult);
						oResult.innerHTML = '\
							<div class="mm3_Top">\
								<div class="mm3_ResultThumbnail">\
									<img class="mm3_ThumbnailBanner' + oBanner + '" alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="/AF2/images/blank.gif" />\
									<img alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="' + oThumbnail + '" />\
								</div>\
								<div class="mm3_ResultTitle">' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + '<br /><span>' + oMatch.trim + '</span></div>\
								<div class="mm3_ResultData">\
									<span>' + pObj.vocab['Type'] + ': ' + oType + ' |</span> <span>' + pObj.vocab['Color'] + ': ' + oMatch.exterior + ' |</span> Engine: ' + oMatch.engine + ' | <span>' + pObj.vocab['Doors'] + ': ' + oMatch.doors + ' |</span> <span>' + pObj.vocab['Transmission'] + ': ' + oMatch.transmission + ' |</span> <span>' + pObj.vocab['Drive'] + ': ' + oMatch.drive + 'WD |</span> <span>' + pObj.vocab['MPG'] + '(' + pObj.vocab['Hwy'] + ')' + ': ' + oMPG + ' |</span> <span>' + pObj.vocab['Mileage'] + ': ' + oMatch.mileage.replace(/\.00/, "") + ' |</span> <span class="mm3_DataStock">' + pObj.vocab['Stock #'] + ': ' + oMatch.stocknum + ' |</span> <span>' + pObj.vocab['VIN'] + ': ' + oMatch.vin + '</span>\
									<input value="' + oMatch.vin + '" name="vin" type="hidden">\
								</div>\
								<div class="mm3_ClearDiv"></div>\
							</div>\
							<div class="mm3_Bottom">\
								<div class="mm3_ResultPricing">\
									' + oMSRP + '\
									' + oWasPrice + '\
									<span class="mm3_PricingTitle">' + pObj.vocab['Price Prefix'] + ' </span><br />\
									<span class="mm3_Price">' + oPrice + '</span><br />\
									' + oMonthlyPayment + '\
									<span class="mm3_PricingSubtitle">' + pObj.vocab['Call'] + ' ' + oPhone + '</span>\
								</div>\
								<div class="mm3_ResultControls">\
									<a href="javascript:void(0);" class="mm3_Button01 mm3_ButtonDetails"><span>' + pObj.vocab['View Details'] + '</span></a>\
									<div class="mm3_ClearDiv"></div>\
									<div class="mm3_CompareCheckbox">\
										<label for="mm3_CBGen' + i + '">' + oCompareText + '</label> <input id="mm3_CBGen' + i + '" type="checkbox" ' + oCompare + '>\
									</div>\
								</div>\
								<div class="mm3_ClearDiv"></div>\
							</div>\
							' + oComments + '\
						';
						// Clear every other tile:
						if(i%2 == 1){
							var oOddClear = document.createElement("div");
							oOddClear.className = "mm3_ClearDiv";
							oResultsContainer.appendChild(oOddClear);
						}
						break;
					case "small":
						oResult.className = "mm3_SmallResult mm3_ResultParent mm3_ResultType" + oMatch.type;
						oResultsContainer.appendChild(oResult);
						oResult.innerHTML = '\
							<div class="mm3_Left">\
								<div class="mm3_ResultThumbnail">\
									<img class="mm3_ThumbnailBanner' + oBanner + '" alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="/AF2/images/blank.gif" />\
									<img alt="' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + ' ' + oMatch.trim + '" src="' + oThumbnail + '" />\
								</div>\
								<div class="mm3_ResultTitle">' + oMatch.year + ' ' + oMatch.make + ' ' + oMatch.model + '<br /><span>' + oMatch.trim + '</span></div>\
								<div class="mm3_ResultData">\
									' + oType + ' | ' + oMatch.exterior + ' | ' + oMatch.engine + ' | ' + oMPG + ' ' + pObj.vocab['MPG'] + '(' + pObj.vocab['Hwy'] + ')' + ' | ' + oMatch.mileage.replace(/\.00/, "") + ' ' + pObj.vocab['Miles'] + '\
									<input value="' + oMatch.vin + '" name="vin" type="hidden">\
								</div>\
								<div class="mm3_ClearDiv"></div>\
							</div>\
							<div class="mm3_Right">\
								<div class="mm3_ResultPricing">\
									<span class="mm3_PricingTitle">' + pObj.vocab['Price Prefix'] + ' </span><br />\
									<span class="mm3_Price">' + oPrice + '</span><br />\
									<span class="mm3_PricingSubtitle">' + pObj.vocab['Call'] + ' ' + oPhone + '</span>\
								</div>\
								<div class="mm3_ResultControls">\
									<a href="javascript:void(0);" class="mm3_Button01 mm3_ButtonDetails"><span>' + pObj.vocab['View Details'] + '</span></a>\
									<div class="mm3_ClearDiv"></div>\
									<div class="mm3_CompareCheckbox">\
										<label for="mm3_CBGen' + i + '">' + oCompareText + '</label> <input id="mm3_CBGen' + i + '" type="checkbox" ' + oCompare + '>\
									</div>\
								</div>\
								<div class="mm3_ClearDiv"></div>\
							</div>\
							<div class="mm3_ResultClearDiv"></div>\
						';
						break;
					case "text":
						var oTextOnlyRow = document.createElement("tr");
						oTextOnlyRow.className = "mm3_TextOnlyRow mm3_ResultParent mm3_ResultType" + oMatch.type;
						var oTextOnlyColStart = document.createElement("td");
						oTextOnlyColStart.className = "mm3_TextOnlyColStart";
						var oTextOnlyColStartDiv = document.createElement("div");
						oTextOnlyColStartDiv.appendChild(document.createTextNode(oType));
						oTextOnlyColStart.appendChild(oTextOnlyColStartDiv);
						oTextOnlyRow.appendChild(oTextOnlyColStart);
						var oTD001 = document.createElement("td");
						var oTD002 = document.createElement("td");
						var oTD003 = document.createElement("td");
						var oTD004 = document.createElement("td");
						var oTD005 = document.createElement("td");
						var oTD006 = document.createElement("td");
						var oTD007 = document.createElement("td");
						var oDIV001 = document.createElement("div");
						var oDIV002 = document.createElement("div");
						var oDIV003 = document.createElement("div");
						var oDIV004 = document.createElement("div");
						var oDIV005 = document.createElement("div");
						var oDIV006 = document.createElement("div");
						var oDIV007 = document.createElement("div");
						oDIV001.appendChild(document.createTextNode(oMatch.year));
						oDIV002.appendChild(document.createTextNode(oMatch.make));
						oDIV003.appendChild(document.createTextNode(oMatch.model));
						oDIV003.appendChild(document.createElement("br"));
						oDIV003.appendChild(document.createTextNode(oMatch.trim));
						oDIV004.appendChild(document.createTextNode(oPrice));
						oDIV005.appendChild(document.createTextNode(oMatch.mileage.replace(/\.00/, "")));
						oDIV006.appendChild(document.createTextNode(oMatch.cylinders));
						oDIV007.appendChild(document.createTextNode(oMatch.exterior));
						oTD001.appendChild(oDIV001);
						oTD002.appendChild(oDIV002);
						oTD003.appendChild(oDIV003);
						oTD004.appendChild(oDIV004);
						oTD005.appendChild(oDIV005);
						oTD006.appendChild(oDIV006);
						oTD007.appendChild(oDIV007);
						oTextOnlyRow.appendChild(oTD001);
						oTextOnlyRow.appendChild(oTD002);
						oTextOnlyRow.appendChild(oTD003);
						oTextOnlyRow.appendChild(oTD004);
						oTextOnlyRow.appendChild(oTD005);
						oTextOnlyRow.appendChild(oTD006);
						oTextOnlyRow.appendChild(oTD007);
						var oTD008 = document.createElement("td");
						var oResultData = document.createElement("div");
						oResultData.className = "mm3_ResultData";
						var oCompareCheckbox = document.createElement("div");
						oCompareCheckbox.className = "mm3_CompareCheckbox";
						var oInput = document.createElement("input");
						oInput.type = "checkbox";
						oInput.defaultChecked = oCompare;
						oCompareCheckbox.appendChild(oInput);
						oResultData.appendChild(oCompareCheckbox);
						var oHidden = document.createElement("input");
						oHidden.type = "hidden";
						oHidden.name = "vin";
						oHidden.value = oMatch.vin;
						oResultData.appendChild(oHidden);
						oTD008.appendChild(oResultData);
						oTextOnlyRow.appendChild(oTD008);
						oTBODY.appendChild(oTextOnlyRow);
						break;
					default:
						alert("Error: No display type defined?");
				} // switch()
				// Extra?
				if(oExtra == true && (pObj.user.display == "large" || pObj.user.display == "tile")){
					var oExtraDiv = document.createElement("div");
					oExtraDiv.className = "mm3_ResultExtra";
					oResult.appendChild(oExtraDiv);
					// CPO?
					if(oBanner == "CPO"){
						var oCanadaCPO = (pObj.config.mmCanadian == 'true' && oMatch.make.toLowerCase() == 'bmw') ? '_canada' : '';
						oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCPO"><img src="/inventory/images/certs/' + oMatch.make + '_PRE-OWNEDcars' + oCanadaCPO + '.gif" alt="Certified Pre-Owned!" /></div>';
					}
					// Incentives?
					if(oMatch.incentive != ""){
						oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraIncentive">' + oMatch.incentive + '!</div>';
					}
					// Lease special?
					if(oMatch.special_lease == "1"){
						oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraIncentive">' + pObj.phrases['Inventory Special Lease'] + '</div>';
					}
					// Video?
					if(oMatch.video != ""){
						oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraVideo">' + oMatch.video + '</div>';
					}
					// Carfax?
					if(oMatch.carfax_link != ""){
						oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCarfax"><img src="/inventory/images/carfax-mm3.png" alt="Carfax Vehicle Report" /></div>';
						if(oMatch.carfax_one_owner == 'Y'){
							oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCarfax mm3_ExtraOneOwner"><img src="/inventory/images/carfax_one_owner.gif" alt="Carfax One Owner" /></div>';
						}
					}
					// Highlight?
					if(pObj.checkHighlight(oMatch) != false){
						// Loop through highlights.
						for(var x in that.highlight){
							// Does this result contain the highlight we're looking for?
							if(typeof(oMatch[x]) != 'undefined'){
								// Okay, string or array?
								switch(typeof(oMatch[x])){
									case 'string':
										for(var y in that.highlight[x]){
											if(oMatch[x] == y){
												oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraHighlight">' + that.highlight[x][y] + '</div>';
												break;
											}
										}
										break;
									case 'object':
										for(var y in that.highlight[x]){
											for(var z=0; z<oMatch[x].length; z++){
												if(oMatch[x][z] == y){
													oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraHighlight">' + that.highlight[x][y] + '</div>';
													break;
												}
											}
										}
										break;
								}
							}
						} // for()
					}
					// Custom content?
					if(typeof(pObj.custom) != "undefined"){
						if(typeof(pObj.custom[oBanner]) != "undefined"){
							switch(oBanner){
								case "New":
									oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCustomNew">' + pObj.custom['New'] + '</div>';
									break;
								case "Used":
									oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCustomUsed">' + pObj.custom['Used'] + '</div>';
									break;
								case "CPO":
									oExtraDiv.innerHTML += '<div class="mm3_ExtraItem mm3_ExtraCustomCPO">' + pObj.custom['CPO'] + '</div>';
									break;
								default:
									// Do nothing.
							}
						}
					}
					// Clear:
					var oExtraClear = document.createElement("div");
					oExtraClear.className = "mm3_ClearDiv";
					oExtraDiv.appendChild(oExtraClear);
				}
			} // for()
			// Clear:
			var oFinalClear = document.createElement("div");
			oFinalClear.className = "mm3_ClearDiv";
			oResultsContainer.appendChild(oFinalClear);
			var oResultParent = YAHOO.util.Dom.getElementsByClassName("mm3_ResultParent", false, oResultsContainer);
			YAHOO.util.Event.addListener(oResultParent, "click", pObj.viewDetails, pObj, true);
			if(pObj.config.mmCommentsPopup == 'true'){
				YAHOO.util.Event.addListener(oResultParent, "mouseover", pObj.showComments, pObj, true);
				YAHOO.util.Event.addListener(oResultParent, "mouseout", pObj.hideComments, pObj, true);
			}
			var oINPUT = oResultsContainer.getElementsByTagName("input");
			YAHOO.util.Event.addListener(oINPUT, "click", pObj.toggleCompare, pObj, true);
			if(JWS.JSON.match.length == 0){
				pObj.noMatches();
			}
			pObj.setHashParam('page', pPage);
			pObj.updateHash();
			if(pObj.flags.initialLoad == true){
				pObj.attachNavigationListeners();
				pObj.flags.initialLoad = false;
			}
			YAHOO.util.Dom.setStyle("mm3_Loading", "display", "none");
			if(YAHOO.env.ua.ie == 6){
				pObj.yuiHover();
			}
		}, this); // JWS.getMatch()
	}; // this.loadPage()
	this.init = function(){
		// Make sure BODY has skin class:
		if(YAHOO.util.Dom.hasClass(document.body, "yui-skin-sam") == false){
			YAHOO.util.Dom.addClass(document.body, "yui-skin-sam");
		}
		// Populate setup objects:
		this.config = mmConfig.config;
		this.defaults = mmConfig.defaults;
		this.vocab = mmConfig.vocab;
		this.phrases = mmConfig.phrases;
		this.render = mmConfig.render;
		this.custom = mmConfig.custom;
		this.highlight = mmConfig.highlight;
		
		// JWS:
		JWS = new JWSAPI(this.config.mmConfID);
		
		// Hash params?
		if(window.location.hash != ''){
			this.hashParams = {};
			var oHash = window.location.hash.substr(2).split('&');
			for(var i=0; i<oHash.length; i++){
				var oItem = oHash[i].split('=');
				this.hashParams[oItem[0]] = oItem[1];
			}
		}
		
		// Populate this.prefs and this.params:
		this.prefs.per_page = this.defaults.per_page;
		this.prefs.sort = this.defaults.sort;
		var oParamsArray = YAHOO.util.Dom.getChildren("mm3_Parameters");
		var oName = new Array();
		var oValue = new Array();
		for(var i=0; i<oParamsArray.length; i++){
			oName[i] = oParamsArray[i].getAttribute("name");
			oValue[i] = oParamsArray[i].getAttribute("value");
			if(oValue[i] != null && oValue[i] != "undefined" && oValue[i] != "" && oName[i].indexOf('utm_') == -1){
				// User:
				if(oName[i] == "newsearch" || oName[i] == "display" || oName[i] == "mode"){
					this.user[oName[i]] = oValue[i];
				// Prefs (will overwrite default prefs):
				} else if(oName[i] == "per_page" || oName[i] == "sort"){
					this.prefs[oName[i]] = oValue[i];
				// Other params:
				} else {
					if(oValue[i].indexOf(",") != -1){
						oValue[i] = oValue[i].split(",");
					} else if(oName[i].indexOf("Min") == -1 && oName[i].indexOf("Max") == -1 && oName[i].indexOf("Email") == -1 && oName[i].indexOf("StockNum") == -1 && oName[i].indexOf("Zip") == -1){
						// Force Array for anything other than Min/Max, Email, StockNum:
						oValue[i] = [oValue[i]];
					}
					if(oName[i] == "VehicleType"){
						// Change "CPO" to "Certified Pre-Owned" for VehicleType:
						for(var j=0; j<oValue[i].length; j++){
							if(oValue[i][j] == "CPO"){
								oValue[i][j] = "Certified Pre-Owned";
							}
						}
					}
					this.params[oName[i]] = oValue[i];
				}
			} // if()
		} // for()
		if(typeof(this.user.newsearch) != "undefined"){
			this.params = {};
		}
		if(typeof(this.user.mode) == "undefined"){
			this.user.mode = this.defaults.mode;
		}
		// Call setPref and setParam:
		var oPrefs = {
			'function':'i',
			'condition':'all',
			'cars_table':this.config.mmTable,
			'location':this.config.mmQSource,
			'per_page':this.prefs.per_page,
			'sort':this.prefs.sort,
			'use_evox':'Y'
		};
		JWS.setPref(oPrefs, function(pObj){
			// pObj = this!
			JWS.setParam(pObj.params, function(pObj){
				// pObj = this!
				if(typeof(pObj.hashParams['page']) != 'undefined'){
					pObj.loadPage(parseInt(pObj.hashParams['page']));
				} else {
					pObj.loadPage(1);
				}
				if(pObj.user.mode == 'advanced'){
					pObj.loadBreadcrumbs();
					pObj.loadZipSearch();
					pObj.loadSearchDropdowns();
				}
				pObj.loadBasicDropdowns();
			}, pObj); // JWS.setParam;
		}, this); // JWS.setPref;
	}; // this.init()
}; // MM.Inventory()

})();
