function VehicleSelect() {
	this.makeObjectId = 'makeselect';
	this.modelObjectId = 'modelselect';
	this.variationObjectId = 'variationSelect';
	this.termObjectId = 'termSelect';
	this.mileageObjectId = 'mileageSelect';
	this.selectedMake = false;
	this.selectedModel = false;
	this.selectedVariation = false;
	this.selectedTerm = false;
	this.selectedMileage = false;
	this.makeList = new Array();
	this.modelList = new Array();
	this.variationList = new Array();
	this.allValue = 'All';
	this.vehicleSelectForm = false;
	
	this.termListMake = new Array();
	this.termListModel = new Array();
	this.termListVariation = new Array();
	this.termListAll = new Array();
	
	this.mileageListMake = new Array();
	this.mileageListModel = new Array();
	this.mileageListVariation = new Array();
	this.mileageListAll = new Array();
	
	this.includeAllOptions = false;
	this.noVariationFunction = false;
	
	this.SetObjectIds = SetObjectIds;
	this.SetAllValue = SetAllValue;
	this.AddMake = AddMake;
	this.AddModel = AddModel;
	this.AddVariation = AddVariation;
	this.AddTerm = AddTerm;
	this.AddMileage = AddMileage;
	this.BuildMakeList = BuildMakeList;
	this.BuildModelList = BuildModelList;
	this.SetVariationType = SetVariationType;
	this.BuildVariationList = BuildVariationList;
	this.BuildOtherLists = BuildOtherLists;
	this.BuildTermList = BuildTermList;
	this.BuildMileageList = BuildMileageList;
	this.InitLists = InitLists;
	this.SetMake = SetMake;
	this.SetMakeId = SetMakeId;
	this.SetModel = SetModel
	this.SetModelId = SetModelId
	this.SetVariationId = SetVariationId;
	this.SetTerm = SetTerm;
	this.SetMileage = SetMileage;
	this.IncludeAll = IncludeAll;
	this.ShowVehicleFields = ShowVehicleFields;
	this.ValidateFields = ValidateFields;
	this.SetVehicleSelectForm = SetVehicleSelectForm;
	this.SetClassName = SetClassName;
}

function SetObjectIds(makeObjectId, modelObjectId, variationObjectId, termObjectId, mileageObjectId) {
	this.makeObjectId = makeObjectId;
	this.modelObjectId = modelObjectId;
	if (variationObjectId) this.variationObjectId = variationObjectId;
	if (termObjectId) this.termObjectId = termObjectId;
	if (mileageObjectId) this.mileageObjectId = mileageObjectId;
}

function SetAllValue(allValue) {
	this.allValue = allValue;
}

function AddMake(makeid, make) {
	this.makeList[makeid] = make;
}

function AddModel(makeid, modelid, model) {
	if (typeof(this.modelList[makeid]) == 'undefined') {
		this.modelList[makeid] = new Array();
	}
	this.modelList[makeid][modelid] = model;
}

function AddVariation(modelid, variationid, variation) {
	if (typeof(this.variationList[modelid]) == 'undefined') {
		this.variationList[modelid] = new Array();
	}
	this.variationList[modelid][variationid] = variation;
}

function AddTerm(makeid, modelid, variationid, term) {
	if (typeof(this.termListMake[makeid]) == 'undefined') {
		this.termListMake[makeid] = new Array();
	}
	this.termListMake[makeid][term] = term+' Months';
	
	if (typeof(this.termListModel[modelid]) == 'undefined') {
		this.termListModel[modelid] = new Array();
	}
	this.termListModel[modelid][term] = term+' Months';
	
	if (typeof(this.termListVariation[variationid]) == 'undefined') {
		this.termListVariation[variationid] = new Array();
	}
	this.termListVariation[variationid][term] = term+' Months';
	
	this.termListAll[term] = term+' Months';
}

function AddMileage(makeid, modelid, variationid, mileage) {
	if (typeof(this.mileageListMake[makeid]) == 'undefined') {
		this.mileageListMake[makeid] = new Array();
	}
	this.mileageListMake[makeid][mileage] = mileage+' Miles';
	
	if (typeof(this.mileageListModel[modelid]) == 'undefined') {
		this.mileageListModel[modelid] = new Array();
	}
	this.mileageListModel[modelid][mileage] = mileage+' Miles';
	
	if (typeof(this.mileageListVariation[variationid]) == 'undefined') {
		this.mileageListVariation[variationid] = new Array();
	}
	this.mileageListVariation[variationid][mileage] = mileage+' Miles';
	
	this.mileageListAll[mileage] = mileage+' Miles';
}

function BuildMakeList() {
	var makeObject = document.getElementById(this.makeObjectId);
	var makeData;
		
	this.RemoveChildNodes(makeObject);
	if (this.includeAllOptions) {
		this.AddSelectOption(makeObject, 0, this.allValue);
	}
	for (makeid in this.makeList) {
		this.AddSelectOption(makeObject, makeid, this.makeList[makeid], this.selectedMake);
	}
}

function BuildModelList() {
	var makeid = document.getElementById(this.makeObjectId).value;
	var modelObject = document.getElementById(this.modelObjectId);
		
	this.RemoveChildNodes(modelObject);
	if (this.includeAllOptions) {
		this.AddSelectOption(modelObject, 0, this.allValue);
	}
	for (modelid in this.modelList[makeid]) {
		this.AddSelectOption(modelObject, modelid, this.modelList[makeid][modelid], this.selectedModel);
	}
	this.BuildVariationList();
	if (this.termListAll.length > 0) this.BuildTermList();
	if (this.mileageListAll.length > 0) this.BuildMileageList();
}

function SetVariationType(variationType, hideTypeSelect) {
	if (variationType == 'E') {
		document.getElementById("variationSelect").style.display = '';
		document.getElementById("newVariation").style.display = 'none';
		document.getElementById("variationType").style.display = '';
		if (hideTypeSelect) document.getElementById("variationType").selectedIndex = 0;
	} else {
		document.getElementById("variationSelect").style.display = 'none';
		document.getElementById("newVariation").style.display = '';
		if (hideTypeSelect) {
			document.getElementById("variationType").style.display = 'none';
			document.getElementById("variationType").selectedIndex = 1;
		}
	}
}

function BuildVariationList() {
	if (this.variationList.length > 0) {
		var maxVariantSize = 0;
		var modelid = document.getElementById(this.modelObjectId).value;
		var variationObject = document.getElementById(this.variationObjectId);
			
		this.RemoveChildNodes(variationObject);
		if (this.includeAllOptions) {
			this.AddSelectOption(variationObject, 0, this.allValue);
		}
		if (modelid > 0) {
			for (variationid in this.variationList[modelid]) {
				if (this.variationList[modelid][variationid].length > maxVariantSize) maxVariantSize = this.variationList[modelid][variationid].length;
				this.AddSelectOption(variationObject, variationid, this.variationList[modelid][variationid], this.selectedVariation);
			}
		}
		
		if (document.getElementById("variantLabel1")) {
			if (maxVariantSize > 25) {
				document.getElementById("variantLabel1").style.display = 'none';
				document.getElementById("variantInputCell").colSpan = 2;
				document.getElementById("variantLabel2").style.display = '';
				document.getElementById(this.variationObjectId).style.fontSize = '10px';
			} else {
				document.getElementById("variantLabel1").style.display = '';
				document.getElementById("variantInputCell").colSpan = 1;
				document.getElementById("variantLabel2").style.display = 'none';
				document.getElementById(this.variationObjectId).style.fontSize = '';
			}
		}
		
		if (document.getElementById("variationType")) {
			if (typeof(this.variationList[modelid]) == 'undefined') {
				this.SetVariationType('N', true);
			} else {
				this.SetVariationType('E', true);
			}
		}
	}
	if (this.termListAll.length > 0) this.BuildTermList();
	if (this.mileageListAll.length > 0) this.BuildMileageList();
}

function BuildOtherLists() {
	if (this.termListAll.length > 0) this.BuildTermList();
	if (this.mileageListAll.length > 0) this.BuildMileageList();
}

function BuildTermList() {
	var makeid = document.getElementById(this.makeObjectId).value
	var modelid = document.getElementById(this.modelObjectId).value;
	if (this.variationList.length > 0) {
		var variationid = document.getElementById(this.variationObjectId).value;
	} else {
		var variationid = 0;
	}
	var termObject = document.getElementById(this.termObjectId);
	this.RemoveChildNodes(termObject);
	if (this.includeAllOptions) {
		this.AddSelectOption(termObject, 0, this.allValue);
	}
	var termLookup = false;
	if (variationid > 0) termLookup = this.termListVariation[variationid];
	else if (modelid > 0) termLookup = this.termListModel[modelid];
	else if (makeid > 0) termLookup = this.termListMake[makeid];
	else if (this.termListAll.length > 0) termLookup = this.termListAll;
	
	if (termLookup) {
		for (term in termLookup) {
			this.AddSelectOption(termObject, term, termLookup[term], this.selectedTerm);
		}
	}
}

function BuildMileageList() {
	var makeid = document.getElementById(this.makeObjectId).value
	var modelid = document.getElementById(this.modelObjectId).value;
	if (this.variationList.length > 0) {
		var variationid = document.getElementById(this.variationObjectId).value;
	} else {
		var variationid = 0;
	}
	var mileageObject = document.getElementById(this.mileageObjectId);
	this.RemoveChildNodes(mileageObject);
	if (this.includeAllOptions) {
		this.AddSelectOption(mileageObject, 0, this.allValue);
	}
	var mileageLookup = false;
	if (variationid > 0) mileageLookup = this.mileageListVariation[variationid];
	else if (modelid > 0) mileageLookup = this.mileageListModel[modelid];
	else if (makeid > 0) mileageLookup = this.mileageListMake[makeid];
	else if (this.mileageListAll.length > 0) mileageLookup = this.mileageListAll;
	
	if (mileageLookup) {
		for (mileage in mileageLookup) {
			this.AddSelectOption(mileageObject, mileage, mileageLookup[mileage], this.selectedMileage);
		}
	}
}

function SetMake(make) {
	make = make.toLowerCase();
	for (makeid in this.makeList) {
		makeName = this.makeList[makeid];
		makeName = makeName.toLowerCase()
		if (makeName == make) {
			this.selectedMake = makeid;
		}
	}
}

function SetMakeId(makeId) {
	this.selectedMake = makeId;	
}

function SetModel(model) {
	model = model.toLowerCase();
	for (makeid in this.modelList) {
		for (modelid in this.modelList[makeid]) {
			modelName = this.modelList[makeid][modelid];
			modelName = modelName.toLowerCase();
			if (modelName == model) {
				this.selectedModel = modelid;
			}
		}
	}
}

function SetModelId(modelId) {
	this.selectedModel = modelId;	
}

function SetVariationId(variationId) {
	this.selectedVariation = variationId;
}

function SetTerm(term) {
	this.selectedTerm = term;
}

function SetMileage(mileage) {
	this.selectedMileage = mileage;
}

function InitLists() {
	this.BuildMakeList();
	this.BuildModelList();
	this.BuildVariationList();
	if (this.termListAll.length > 0) this.BuildTermList();
	if (this.mileageListAll.length > 0) this.BuildMileageList();
}

function IncludeAll() {
	this.includeAllOptions = true;
}

function ShowVehicleFields(vehicleType) {
	var displayValue = '';
	if (vehicleType == 'N') displayValue = 'none';
	
	document.getElementById("regNumberRow").style.display = displayValue;
	document.getElementById("regDateRow").style.display = displayValue;
	document.getElementById("mileageRow").style.display = displayValue;
}

function ValidateFields(formObject, validateMake, validateModel, validateVariation, validateTerm, validateMileage) {
	var errorString = new Array();
	if (validateMake && document.getElementById(this.makeObjectId).value == 0) errorString.push("- Please Select a Make");
	if (validateModel && document.getElementById(this.modelObjectId).value == 0) errorString.push("- Please Select a Model");
	if (validateVariation && document.getElementById(this.variationObjectId).value == 0) errorString.push("- Please Select a Variant");
	if (validateTerm && document.getElementById(this.termObjectId).value == 0) errorString.push("- Please Select a Term");
	if (validateMileage && document.getElementById(this.mileageObjectId).value == 0) errorString.push("- Please Select a Mileage");
	if (errorString.length > 0) {
		alert(errorString.join("\n"));
	} else {
		formObject.submit();
	}
}

function SetVehicleSelectForm(vehicleSelectForm) {
	this.vehicleSelectForm = vehicleSelectForm;
}


function SetClassName(className, submitForm) {
	this.vehicleSelectForm['class'].value = className;
	if (submitForm) this.vehicleSelectForm.submit();
}
	

VehicleSelect.prototype = new Root;
