//*******************************************
//  Copyright Dealer.com Websystems
//  carfinder.js
//  author: \/\/ick
//  date: 9.10.2004
//********************************************

var bodystyles = new Array("Convertible","Coupe","Hatchback","Mini-Van","Motorcycle","RV","SUV","Sedan","Sport","Sportcross","Truck","Wagon");
var colors = new Array("Black","Blue","Brown","Champagne","Green","Grey","Orange","Purple","Red","Silver","Tan","White","Yellow");
var priceLabels = new Array("0 - 3,000","3,000 - 6,000","6,000 - 9,000","9,000 - 12,000","12,000 - 15,000","15,000 - 18,000","18,000 - 21,000","21,000 - 24,000","24,000 - 27,000","27,000 - 30,000","30,000 - 33,000","33,000 - 36,000","36,000 - 39,000","39,000 - 42,000","42,000 - 45,000","45,000 - 48,000","48,000 - 51,000","51,000 - 54,000","54,000 - 57,000","57,000 - 60,000","60,000 - 63,000","63,000 - 66,000","66,000 - 69,000","69,000 - 72,000","72,000 - 75,000","75,000 - 78,000","78,000 - 81,000","81,000 - 84,000","84,000 - 87,000","87,000 - 90,000");
var prices = new Array("0 - 3000","3000 - 6000","6000 - 9000","9000 - 12000","12000 - 15000","15000 - 18000","18000 - 21000","21000 - 24000","24000 - 27000","27000 - 30000","30000 - 33000","33000 - 36000","36000 - 39000","39000 - 42000","42000 - 45000","45000 - 48000","48000 - 51000","51000 - 54000","54000 - 57000","57000 - 60000","60000 - 63000","63000 - 66000","66000 - 69000","69000 - 72000","72000 - 75000","75000 - 78000","78000 - 81000","81000 - 84000","84000 - 87000","87000 - 90000");
var mileageLabels = new Array("0","10,000","20,000","30,000","40,000","50,000","60,000","70,000","80,000","90,000","100,000","110,000","120,000","130,000","140,000","150,000");
var mileages = new Array("0","10000","20000","30000","40000","50000","60000","70000","80000","90000","100000","110000","120000","130000","140000","150000");
var yearLabels = new Array("2004","2003","2002","2001","2000","1999","1998","1997","1996","1995","1994","1993","1992","1991","1990","1989","1988","1987","1986","1985","1984");
var years = new Array("2004","2003","2002","2001","2000","1999","1998","1997","1996","1995","1994","1993","1992","1991","1990","1989","1988","1987","1986","1985","1984");

var hasused;
var rmodels =	{
	'Honda' : {
		'Accord' : [ 1984,2008 ],
		'Civic' : [ 1984,2008 ],
		'CR-V' : [ 1996,2008 ],
		'Del Sol' : [ 1992,1997 ],
		'EV Plus' : [ ], // scrapped after leases expired
		'Element' : [ 2003,2008 ],
		'Fit' : [ 2007,2008 ],
		'Insight' : [ 1999,2006 ],
		'Odyssey' : [ 1995,2008 ],
		'Passport' : [ 1993,2001 ],
		'Pilot' : [ 2003,2100 ],
		'Prelude' : [ 1980,2001 ],
		'Ridgeline' : [ 2006,2008 ],
		'S1999' : [ ], // no idea what this is
		'S2000' : [ 1999,2008 ]
	},
	'Acura' : {
		'CL' : [ 1997,2003 ],
		'Integra' : [ 1980,2001 ],
		'Legend' : [ 1980,1995 ],
		'MDX' : [ 2001,2100 ],
		'NSX' : [ 1991,2005 ],
		'RDX' : [ 2007,2100 ],
		'RL' : [ 1996,2100 ],
		'RSX' : [ 2002,2006 ],
		'SLX' : [ 1996,1999 ],
		'TL' : [ 1996,2100 ],
		'TSX' : [ 2004,2100 ],
		'Vigor' : [ 1992,1995 ]
	},
	'Volkswagen' : {
		'Cabrio' : [ 1993,1999 ]
	},
	'Scion' : {
		'xA' : [ 2004,2006 ],
		'xB' : [ 2004,2100 ],
		'tC' : [ 2005,2100 ],
		'xD' : [ 2008,2100 ]
	}
}

function scrubModels(make,model) {
	var formRef = document.forms['carfinderForm'];
	var addmodel = true;
	if (typeof(formRef.minYear) != 'undefined') {
		var minYear = (formRef.minYear.value != '')?formRef.minYear.value:0;
		var maxYear = (formRef.maxYear.value != '')?formRef.maxYear.value:2500; // good until the year 2500
		if ((typeof(rmodels[make]) != 'undefined') && (typeof(rmodels[make][model]) != 'undefined')) {
			if ((rmodels[make][model].length == 0) || ((minYear > rmodels[make][model][1]) || (maxYear < rmodels[make][model][0]))) {
				addmodel = false;
			}
		}
	}
	return(addmodel);
}

var majorformfields = new Array('year','make','model','bodyStyle','price');
var minorformfields = new Array('transmission','mileage');
var searchscore = 2.5;

function fmcvalidate(msg) {
	var formRef = document.forms['carfinderForm'];
	var fieldswdata = 0;
	for (i = 0; i < majorformfields.length; i++) {
		formelm = eval('formRef.'+majorformfields[i]);
		if (formelm.options[formelm.selectedIndex].value != '') { fieldswdata++; }
	}
	for (i = 0; i < minorformfields.length; i++) {
		formelm = eval('formRef.'+minorformfields[i]);
		if (formelm.options[formelm.selectedIndex].value != '') { fieldswdata += 0.5; }
	}
	if (fieldswdata < searchscore) { alert('Your search is too broad. Please select more search criteria.'); }
  else { validate(msg); }
}

function clearoptionlist(formelm) {
	var numopt = formelm.options.length;
	for (i = (numopt - 1); i >= 1; i--) {
		formelm.options[i] = null;
	}
}

function initClass() {
	var formRef = document.forms['carfinderForm'];
	var typeRef = (typeof(formRef.elements['vehicle.type']) != 'undefined')?formRef.elements['vehicle.type']:formRef.type;

	var typeInt;
	for (i = 0; i < types.length; i++) {
		if (i == 0) { typeInt = 0; }
		else if (i == 1) { typeInt = 2; }
		else { typeInt = 1; }
		typeRef.options[i] = new Option(types[i],typeInt);
	}
	if ((newmakes.length == 0) || (newmakes[0] == 'preowned')) { // disable new vehicle choices for preowned-only dealers
		typeRef.options[0] = null;
		typeRef.options[0] = null;
		typeRef.selectedIndex = 0;
	}
	else if (hasused == 0) { // disable used vehicle choices for new-only dealers
		typeRef.options[0] = null;
		typeRef.selectedIndex = 0;
		typeRef.options[1] = null;
	}
	else { // disable "new & preowned" searching for compliancy
		if ((newmakes[0].toLowerCase() == 'honda') || (newmakes[0].toLowerCase() == 'acura')) {
			typeRef.options[0] = null;
			typeRef.selectedIndex = 1;
		}
	}
}

function getYears(x) {
	var formRef = document.forms['carfinderForm'];
	var typeRef = (typeof(formRef.elements['vehicle.type']) != 'undefined')?formRef.elements['vehicle.type']:formRef.type;

	var startyr = 0;
	if (typeRef.options[typeRef.selectedIndex].value == 2) {
		var today = new Date;
		var thisYear = today.getFullYear();
		startyr = (years.length - ((years[years.length-1] == thisYear)?2:3));
	}

	var j = 1;
	if (typeof(formRef.minYear) != 'undefined') {
		if (!x) {
			clearoptionlist(formRef.minYear);
			clearoptionlist(formRef.maxYear);
		}
		for (i = startyr; i < years.length; i++) {
			if (!x) { formRef.minYear.options[j] = new Option(yearLabels[i],years[i]); }
			formRef.maxYear.options[j++] = new Option(yearLabels[i],years[i]);
		}
		if ((!x) && (startyr > 0)) {
			formRef.minYear.selectedIndex = 1;
			formRef.maxYear.selectedIndex = (formRef.maxYear.options.length > 3)?3:(formRef.maxYear.options.length-1);
		}
	}
	else {
		clearoptionlist(formRef.year);
		for (i = (years.length - 1); i >= startyr; i--) {
			formRef.year.options[j++] = new Option(yearLabels[i],years[i]);
		}
	}
}

function getMakes(type) { // does not use form object reference for easier onLoad call
	getYears(); // easier this way than changing all the form onChange events
	var formRef = document.forms['carfinderForm'];
	var typeRef = (typeof(formRef.elements['vehicle.type']) != 'undefined')?formRef.elements['vehicle.type']:formRef.type;

	if (!type) { type = typeRef.options[typeRef.selectedIndex].value; }
  clearoptionlist(formRef.make);
  clearoptionlist(formRef.model);
	formRef.make.disabled = false;

	if (type != 2) {
		var optionCnt = 0;
		if (newmakes.length > 0) {
			if (newmakes[0].toLowerCase() == 'honda') {
				var makeIndex = getVehiclesIndex('Honda');
				formRef.make.options[++optionCnt] = new Option(vehicles[makeIndex][0],vehicles[makeIndex][0]);
			}
	// not really necessary for  Acura since it is currently first anyway, but just in case that ever changes..
			else if (newmakes[0].toLowerCase() == 'acura') {
				var makeIndex = getVehiclesIndex('Acura');
				formRef.make.options[++optionCnt] = new Option(vehicles[makeIndex][0],vehicles[makeIndex][0]);
			}
		}
		for (i = 0; i < vehicles.length; i++) {
			if ((newmakes.length == 0) ||
					((newmakes[0].toLowerCase() != 'honda') && (newmakes[0].toLowerCase() != 'acura')) ||
					((newmakes[0].toLowerCase() == 'honda') && (vehicles[i][0] != 'Honda')) ||
					((newmakes[0].toLowerCase() == 'acura') && (vehicles[i][0] != 'Acura'))) {
				formRef.make.options[++optionCnt] = new Option(vehicles[i][0],vehicles[i][0]);
			}
		}
		formRef.model.disabled = true;
		with (formRef) {
			if (typeof(minMileage) != 'undefined') {
				minMileage.disabled = false;
				maxMileage.disabled = false;
			}
			else if (typeof(mileage) != 'undefined') {
				mileage.disabled = false;
			}
		}
	}
	else {
		for (i = 0; i < newmakes.length; i++) {
			var makeIndex = getVehiclesIndex(newmakes[i]);
			formRef.make.options[i+1] = new Option(vehicles[makeIndex][0],vehicles[makeIndex][0]);
		}
		if (formRef.make.options.length == 2) { // special case for 1 franchise - load models immediately
			formRef.make.selectedIndex = 1;
			getModels(formRef.make);
			formRef.model.disabled = false;
		}
		else { formRef.model.disabled = true; }
		with (formRef) {
			if (typeof(minMileage) != 'undefined') {
				minMileage.disabled = true;
				maxMileage.disabled = true;
			}
			else if (typeof(mileage) != 'undefined') {
				mileage.disabled = true;
			}
		}
	}
}

function getModels(makeRef) {
	var formRef = document.forms['carfinderForm'];
	var typeRef = (typeof(formRef.elements['vehicle.type']) != 'undefined')?formRef.elements['vehicle.type']:formRef.type;
	var oldModel = formRef.model.value;

	clearoptionlist(formRef.model);
	if (makeRef.selectedIndex != 0) { // hides model list not found message from getVehiclesIndex
		var makeIndex = getVehiclesIndex(makeRef.options[makeRef.selectedIndex].value);
		if (makeIndex == -1) { formRef.model.disabled = true; }
		else {
			var optionCnt = 0;
			for (i = 1; i < vehicles[makeIndex].length; i++) {
				if (scrubModels(vehicles[makeIndex][0],vehicles[makeIndex][i])) {
					formRef.model.options[++optionCnt] = new Option(vehicles[makeIndex][i],vehicles[makeIndex][i]);
				}
			}
			formRef.model.disabled = false;
		}
	}
	formRef.model.value = oldModel;
	if (formRef.model.selectedIndex < 0) { formRef.model.selectedIndex = 0; }
}

function getBodyStyles() {
	var formRef = document.forms['carfinderForm'];
	for (i = 0; i < bodystyles.length; i++) {
		formRef.bodyStyle.options[i+1] = new Option(bodystyles[i],bodystyles[i]);
	}
}

function getColors() {
	var formRef = document.forms['carfinderForm'];
	for (i = 0; i < colors.length; i++) {
		formRef.color.options[i+1] = new Option(colors[i],colors[i]);
	}
}

function getTransmissions() { // here to make it easier to implement any future changes
	var formRef = document.forms['carfinderForm'];
	formRef.transmission.options[1] = new Option('Automatic','Automatic');
	formRef.transmission.options[2] = new Option('Standard','Standard');
}

function getPrices(x) {
	var formRef = document.forms['carfinderForm'];
	if (typeof(formRef.minPrice) != 'undefined') {
		for (i = 0; i < prices.length; i++) {
			if (!x) { formRef.minPrice.options[i+1] = new Option('$ '+priceLabels[i],prices[i]); }
			formRef.maxPrice.options[i+1] = new Option('$ '+priceLabels[i],prices[i]);
		}
	}
	else {
		for (i = 0; i < prices.length; i++) {
			formRef.price.options[i+1] = new Option('$ '+priceLabels[i],prices[i]);
		}
	}
}

function getMileages(x) {
	var formRef = document.forms['carfinderForm'];
	if (typeof(formRef.minMileage) != 'undefined') {
		for (i = 0; i < mileages.length; i++) {
			if (!x) { formRef.minMileage.options[i+1] = new Option(mileageLabels[i],mileages[i]); }
			formRef.maxMileage.options[i+1] = new Option(mileageLabels[i],mileages[i]);
		}
	}
	else {
		for (i = 0; i < mileages.length; i++) {
			formRef.mileage.options[i+1] = new Option(mileageLabels[i],mileages[i]);
		}
	}
}

function getVehiclesIndex(makename) {
	var makeIndex = -1;
	for (j = 0; j < vehicles.length; j++) {
		if (vehicles[j][0].toLowerCase().replace(/ /g,'') == makename.toLowerCase().replace(/ /g,'')) {
			makeIndex = j;
			break;
		}
	}
	if (makeIndex == -1) { alert('Model list not found for: '+makename+'.\n\nPlease contact Dealer.com support at 888-895-2994.'); }
	return(makeIndex);
}

function modelstylecheck(objRef) {
	with(document.forms['carfinderForm']) {
		if ((model.value != '') && (bodyStyle.value != '')) {
			if (objRef.name == 'model') { resetObj = bodyStyle; }
			else { resetObj = model; }
			alert('Please select a Model **OR** a Bodystyle.\n\nResetting '+resetObj.name+'.');
			resetObj.selectedIndex = 0;
		}
	}
}

function rangecheck(datatype) {
	var minRef = document.forms['carfinderForm'].elements['min'+datatype];
	var maxRef = document.forms['carfinderForm'].elements['max'+datatype]
	var minValue = parseInt(minRef.options[minRef.selectedIndex].value);
	var maxValue = maxRef.options[maxRef.selectedIndex].value;
	eval('get'+datatype+'s(true)');

	var i = 1;
	while (i < maxRef.options.length) {
		maxCompare = parseInt(maxRef.options[i].value);
		if (datatype == 'Year') { maxCompare++; }
		if (minValue >= maxCompare) {
			maxRef.options[i] = null;
		}
		else { i++; }
	}

	for (i = 1; i < maxRef.options.length; i++) {
		if (maxRef.options[i].value == maxValue) {
			maxRef.selectedIndex = i;
			break;
		}
	}
}

