function initDocument(passedYear,passedMakeName, passedModelName, passedTYR, passedReferer)
{
	//alert("passedYear = "+passedYear+"\npassedMakeName = "+passedMakeName+"\npassedModelName = "+passedModelName+"\npassedTYR = "+passedTYR+"\npassedReferer = "+passedReferer);

	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>2005&&passedTYR!=""&&passedReferer!=""){
	errflg=errflg+1;
	}
	if(selYr==0&&passedTYR<1983&&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");
			//alert("makeID = "+makeID);
			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;
			}

		}
	}
	
	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!=""){
		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.rclm = new Array();
}

// Create rclm objects and add to model.
function T(makeNumber, modelNumber, rclmNumber, rclmName)
{
	var rclmObj = new rclM(rclmName, rclmNumber);
	makes[makeNumber].models[modelNumber].rclm[rclmNumber] = rclmObj;
}

function rclM(rclmname, rclmnumber)
{
	this.rclmName = rclmname;
	this.rclmNumber = rclmnumber;
}

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



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 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.rclmdid.options[document.QuickForm.rclmdid.options.selectedIndex].value == ""){
		if( document.QuickForm.rclmdid.length > 1 )
                {
			var nextIndex = document.QuickForm.rclmdid.options.selectedIndex + 1;
			document.QuickForm.rclmdid.options[ prevIndex ].selected = true;
		}
	}
}

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

