//When modifying kbbStartYear and kbbEndYear, make sure you also edit _kbbYears.jsp. 
var kbbEndYear=2009;
var kbbStartYear=kbbEndYear-20;

function initDocument(passedYear,passedMakeName, passedModelName, passedKBBmid, passedTYR, passedReferer, page){
	var makeID;
	var modID;
	var selMake;
	var selMod;
	var selYr;
	var errflg=0;
	initYear();
	selYr = fillYear(passedYear);
	//passedTYR is the year variable from the user, if there is no year or if it <> prams it gets changed to hardcoded yr
	if(selYr==0 && passedTYR > kbbEndYear && passedTYR != "" && passedReferer != ""){
	errflg=errflg+1;
	}
	if(selYr==0 && passedTYR < kbbStartYear && passedTYR != "" && passedReferer != ""){
	errflg=errflg+10;
	}
	initCars();
	if(validateInt(passedMakeName))
	{
		selMake = fillMakeSelect(passedMakeName);
		selMod = fillModelSelect(passedMakeName);
		if(selMake==0&&passedReferer!=""){
	errflg=errflg+3;
		}
	}else
	{
			selMake = fillMakeSelect();
			makeID = getID(passedMakeName, "mkid");
			selMod = fillModelSelect(makeID);
			if(makeID==0&&passedMakeName!=""&&passedReferer!=""){
	errflg=errflg+3;
		}
	}
	
	if(passedModelName!=""&&passedModelName!="undefined")
	{
		if(validateInt(passedMakeName)&&validateInt(passedModelName))
		{
			selMod = fillModelSelect(passedMakeName, passedModelName)
		if(selMod==0&&passedReferer!=""){
	errflg=errflg+5;
		}
		}else
		{
			fillModelSelect(makeID)
			modID = getID(passedModelName, "mdid");
			if(modID==0&&passedReferer!=""){
	errflg=errflg+5;
			}
			fillkbbMSelect(makeID, modID);
		}
	}

	if(passedKBBmid!=""&&passedModelName!="")
	{
		fillkbbMSelect(passedMakeName, passedModelName, passedKBBmid)
	}

	switch(errflg){
	case 1:parent.document.getElementById('errspace').innerHTML = "<h2>Values for  "+passedTYR+" vehicles are not yet available.  Please select another year or vehicle.</h2>";break;
	case 3:parent.document.getElementById('errspace').innerHTML = "<h2>We are unable to retrieve values for the "+passedTYR+" vehicle you requested.  Please try again, or select a different year or vehicle.</h2>";break;
	case 4:parent.document.getElementById('errspace').innerHTML = "<h2>Values for  "+passedTYR+" vehicles are not yet available.  Please select another year or vehicle.</h2>";break;
	case 5:parent.document.getElementById('errspace').innerHTML = "<h2>We are unable to retrieve values for the "+passedTYR+" vehicle you requested.  Please try again, or select a different year or vehicle.</h2>";break;
	case 6:parent.document.getElementById('errspace').innerHTML = "<h2>Values for  "+passedTYR+" vehicles are not yet available.  Please select another year or vehicle.</h2>";break;
	case 8:parent.document.getElementById('errspace').innerHTML = "<h2>We are unable to retrieve values for the "+passedTYR+" vehicle you requested.  Please try again, or select a different year or vehicle.</h2>";break;
	case 10:parent.document.getElementById('errspace').innerHTML = "<h2>The model year you requested is not available.  Please try again.</h2>";break;
	case 13:parent.document.getElementById('errspace').innerHTML = "<h2>The model year you requested is not available.  Please try again.</h2>";break;
	case 15:parent.document.getElementById('errspace').innerHTML = "<h2>The model year you requested is not available.  Please try again.</h2>";break;




}
	if(errflg>0&&passedReferer!=""&&page!="self"){
		parent.document.getElementById('errspace').style.display="block";
	}

}

function validateInt(valID) {
    // no leading 0s allowed
    return (("" + parseInt(valID)) == valID);
}

var years;

function Y( year )
{
	years = year.split(",");
	years = years.sort(reverseSort); 
}

var makes = new Array();

// create car make objects and fill arrays
function K( makenumber, make )
{
	makes[makenumber] = new Make( make,makenumber );
}

// make constructor
function Make( makeName,makeNumber )
{
	this.makeName = makeName;
	this.makeNumber = makeNumber;
	this.models = new Array();
}

// create car model objects and fill arrays
function D(makeNumber, modelnumber, model)
{
	var modelObj = new Model(modelnumber, model, makeNumber);
	makes[makeNumber].models[modelnumber] = modelObj;
}

// model constructor
function Model(modelnumber,model,makeNumber)
{
	this.modelNumber = modelnumber;
	this.modelName = model;
	this.makeNumber = makeNumber;
	this.kbbm = new Array();
}

// Create kbbm objects and add to model.
function T(makeNumber, modelNumber, kbbmNumber, kbbmName)
{
	var kbbmObj = new kbbM(kbbmName, kbbmNumber);
	makes[makeNumber].models[modelNumber].kbbm[kbbmNumber] = kbbmObj;
}

function kbbM(kbbmname, kbbmnumber)
{
	this.kbbmName = kbbmname;
	this.kbbmNumber = kbbmnumber;
}

function PopulateClient(makeListBox, modelListBox)
{
	//CheckMMT();
	var makeSelected = new String(makeListBox.options[makeListBox.selectedIndex].value);
	if (modelListBox == null)
	{
		fillModelSelect(makeSelected);
		createBlankkbbMSelect();
	}
	else
	{
		var modelSelected = new String(modelListBox.options[modelListBox.selectedIndex].value);
		fillkbbMSelect(makeSelected, modelSelected);
	}
}



function fillYear(passedYear)
{
	document.QuickForm.year.options.selectedIndex = 0; // init selection index
	document.QuickForm.year.options.length = 0;  // clear select

	var i = 0;
	var selectedYear = 0;
	var selectedYearValue = 0;

	//put empty value at the top of select

	for ( yearVal in years )
	{
		document.QuickForm.year.options[ i ] = new Option( years[i], years[i] );
		if (years[i] == passedYear) {
			selectedYear = i;
			document.QuickForm.year.options[selectedYear].selected = true; 
		}
		i++;
	}
	document.QuickForm.year.options[selectedYear].selected = true;  // select selectedMake
	selectedYearValue = document.QuickForm.year.options[selectedYear].value;
	return selectedYear;
}


// construct make selection on page
function fillMakeSelect(passedMakeName)
{
	document.QuickForm.mkid.options.selectedIndex = 0; // init selection index
	document.QuickForm.mkid.options.length = 1;  // clear select
	// fill selection with makes
	var i = 1;
	var selectedMake = 0;
	var selectedMakeValue = 0;



	for ( makesIdx in makes )
	{
		var aMake = makes[makesIdx];
		document.QuickForm.mkid.options[ i ] = new Option( aMake.makeName, aMake.makeNumber );
		if (aMake.makeNumber == passedMakeName) {
			selectedMake = i;
			document.QuickForm.mkid.options[selectedMake].selected = true;
		}
		i++;
	}


	document.QuickForm.mkid.options[selectedMake].selected = true;  // select selectedMake
	selectedMakeValue = document.QuickForm.mkid.options[selectedMake].value;
	document.QuickForm.mkid.disabled=false;
	return selectedMakeValue;
}

// construct model selection on page
function fillModelSelect( makeNbr, passedModelName)
{
	var selectedModel = 0;
	var selectedModelValue = 0;
	document.QuickForm.mdid.options.selectedIndex = 0;
	document.QuickForm.mdid.options.length = 1; 
	var i = 1;

	if( makeNbr != null)
	{
		var selectedModels;
		if(makes[makeNbr]){
        	selectedModels = (makes[makeNbr].models);
		}else{
			return;
		}

		for ( aModelIdx in selectedModels )
		{
			aModel = selectedModels[ aModelIdx ];
			document.QuickForm.mdid.options[ i ] = new Option( aModel.modelName, aModel.modelNumber );
			if (aModel.modelNumber == passedModelName) {
				document.QuickForm.mdid.options[ i ].selected = true; 
				selectedModel = i;
			}
			i++;
		}
		document.QuickForm.mdid.disabled=false;
		PopulateClient(document.QuickForm.mkid, document.QuickForm.mdid);
	}


	if (selectedModel != -1) {
		document.QuickForm.mdid.options[selectedModel].selected = true;  // select selectedModel
		selectedModelValue = document.QuickForm.mkid.options[selectedModel].value;
	}
	else
	{
		document.QuickForm.mdid.options[ 0 ].selected = true;
	}
	return selectedModelValue;
}


function getID(passedName, type)
{
var passID=0;
var optString = eval("document.QuickForm."+type+".options");
for(i=1;i<optString.length;i++)
{
	if(optString[ i ].text == passedName)
	{
		passID = optString[ i ].value;
		optString[ i ].selected = true;
	}
}
	return passID;
}


function createBlankkbbMSelect(aSelectedMake)
{
        document.QuickForm.kbbmdid.options.selectedIndex = 0;
        document.QuickForm.kbbmdid.options.length = 1;
		eval(document.QuickForm.kbbmdid.style.width=175);//used to reset width of select to base level
        var selectedkbbM = 0; // for selected option purposes
        var selectedkbbMs;

        // put empty value at the top of select

        document.QuickForm.kbbmdid.options[selectedkbbM].selected = true;
		document.QuickForm.kbbmdid.disabled=true;
}


// construct kbbm selection on page
function fillkbbMSelect(aSelectedMake, aSelectedModel, passedkbbMName)
{
	document.QuickForm.kbbmdid.options.selectedIndex = 0;
	document.QuickForm.kbbmdid.options.length = 1;
	eval(document.QuickForm.kbbmdid.style.width=175);//used to reset width of select to base level
	var selectedkbbM = 0; // for selected option purposes
	var selectedkbbMs;
	var selectedkbbMs;
	var kbbmNumLength=0;
	var kbbmDif=0;
	var kbbmStretch;
	var kbbmNameHold="";
	var i=1;
	if (validateInt(aSelectedModel) && validateInt(aSelectedModel))
	{
	if(makes[aSelectedMake]){
		if(makes[aSelectedMake].models[aSelectedModel])
			selectedkbbMs = makes[aSelectedMake].models[aSelectedModel].kbbm.sort();else return;
			}else{
			return;
			}
		//selectedkbbMs = selectedkbbMs;
		for ( akbbmdidx in selectedkbbMs )
		{
			akbbM = selectedkbbMs[ akbbmdidx ];
			document.QuickForm.kbbmdid.options[ i ] = new Option( akbbM.kbbmName, akbbM.kbbmNumber );
			
			if (akbbM.kbbmNumber == passedkbbMName)
			{
				document.QuickForm.kbbmdid.options[ i ].selected = true;
			}
			i++;
			if(akbbM.kbbmName.length>=27)//used to dynamically set width of kbbm select
			{
				if(kbbmNumLength<akbbM.kbbmName.length)
				{
					kbbmNameHold=akbbM.kbbmName;
					kbbmNumLength=akbbM.kbbmName.length;
				}
			}//end dynamic width of kbbm select
		}
		if(kbbmNameHold.indexOf("Utility")>-1)kbbmNumLength=kbbmNumLength-6;
		kbbmDif=kbbmNumLength-21;
		if(kbbmDif>0){
			eval("document.QuickForm.kbbmdid.style.width = "+(175+(kbbmDif*5)));
		}
		document.QuickForm.kbbmdid.disabled=false;
	}		
}





function CheckMMT() {
	if (document.QuickForm.mkid.options[document.QuickForm.mkid.options.selectedIndex].value == ""){
 		if( document.QuickForm.mkid.length > 1 )
		{
			var nextIndex = document.QuickForm.mkid.options.selectedIndex + 1;
			document.QuickForm.mkid.options[ nextIndex ].selected = true;
		}
	}
	else {
		if (document.QuickForm.mdid.options[document.QuickForm.mdid.options.selectedIndex].value == ""){
			if( document.QuickForm.mdid.length > 1 )
			{
				var nextIndex = document.QuickForm.mdid.options.selectedIndex + 1;
				document.QuickForm.mdid.options[ nextIndex ].selected = true;
			}
		}
	}
	if (document.QuickForm.kbbmdid.options[document.QuickForm.kbbmdid.options.selectedIndex].value == ""){
		if( document.QuickForm.kbbmdid.length > 1 )
                {
			var nextIndex = document.QuickForm.kbbmdid.options.selectedIndex + 1;
			document.QuickForm.kbbmdid.options[ prevIndex ].selected = true;
		}
	}
}

function reverseSort(a, b) 
{ 
   if(a > b) 
      return -1 
   if(a < b) 
      return 1 
   return 0 
}