	// window.onerror=processError;

	var usedMakesName = new Array();
	var newMakesName = new Array();
		
	// used as a cross reference table for name and number
	// the following are used as a 2D table for makes and models
	var usedMakes = new Array();
	var newMakes = new Array();
	
	var models = new Array();
	
	// load the arrays and construct the selections on the page
	function initDocument()
	{
	    // Initialize used cars javascript
		initCars();
		fillMakeSelectUsed();
		fillModelSelectUsed( "1" );     
		
		// Initialize new car javascript
		initNewMakes();
		fillMakeSelectNew();
		fillModelSelectNew( "1" );  
	}
	
	// create car make objects and fill arrays
	function K( makenumber, make )
	{
		usedMakesName[make] = new MakesName( make, makenumber );
		usedMakes[makenumber] = new Make( make, makenumber );
	}
	
	function A( makenumber, make)
	{
		newMakesName[make] = new MakesName( make, makenumber );
		newMakes[makenumber] = new Make( make, makenumber );
	}
	
	// make name constructor
	function MakesName( makeName,makeNumber )
	{
		this.makeNumber = makeNumber;
	}
	
	// make constructor
	function Make( makeName,makeNumber )
	{
		this.makeName = makeName;
		this.makeNumber = makeNumber;
		// create array associated with makes
		this.models = new Array();
	}
	
	// construct make selection on page
	function fillMakeSelectUsed(  )
	{
		// init selection index
		document.usedForm.mknm.options.selectedIndex = 0;
		// clear select
		document.usedForm.mknm.options.length = 0;
		
		// fill selection with makes
		var i = 0;
		for ( makesIdx in usedMakes )
		{
			var aMake = usedMakes[makesIdx];
			document.usedForm.mknm.options[ i ] = 
			new Option( aMake.makeName, aMake.makeName );
			i++;
		}
	
		// select first item
		document.usedForm.mknm.options[ 0 ].selected = true;
	}
	
	function fillMakeSelectNew(  )
	{
		// init selection index
		document.newForm.mkid.options.selectedIndex = 0;
		// clear select
		document.newForm.mkid.options.length = 0;
		
		// fill selection with makes
		var i = 0;
		for ( makesIdx in newMakes )
		{
			var aMake = newMakes[makesIdx];
			document.newForm.mkid.options[ i ] = 
			new Option( aMake.makeName, aMake.makeNumber );
			i++;
		}
	
		// select first item
		document.newForm.mkid.options[ 0 ].selected = true;
	}
	
	// create used car model objects and fill arrays
	function D( makeNumber, model )
	{
		// model constructor
		function Model( model, makeNumber )
		{
			this.modelName = model;
			this.makeNumber = makeNumber;
		}
	
		var modelObj = new Model( model, makeNumber);
		usedMakes[makeNumber].models[model] = modelObj;
	}
	
	// create new car model objects and fill arrays
	function L( makeNumber, modelNumber, model )
	{
		// model constructor
		function Model( model, makeNumber, modelNumber )
		{
			this.modelName = model;
			this.makeNumber = makeNumber;
			this.modelNumber = modelNumber;
		}
	
		var modelObj = new Model( model, makeNumber, modelNumber);
		newMakes[makeNumber].models[model] = modelObj;
	}
	
	// construct model selection on page
	function fillModelSelectUsed( makeNbr )
	{
		document.usedForm.mdnm.options.selectedIndex = 0;
		document.usedForm.mdnm.options.length = 0; 
		var selectedModels;
		
		selectedModels = (usedMakes[makeNbr].models);
		var i=0;
		document.usedForm.mdnm.options[ i ] = new Option( "All" , "all" );
		i++;
		for ( aModelIdx in selectedModels )
		{
			aModel = selectedModels[ aModelIdx ];
			document.usedForm.mdnm.options[ i ] = 
			new Option( aModel.modelName, aModel.modelName );
			i++;
		}
		
		document.usedForm.mdnm.options[ 0 ].selected = true;
	}
	
	function fillModelSelectNew( makeNbr )
	{
		document.newForm.mdnm.options.selectedIndex = 0;
		document.newForm.mdnm.options.length = 0; 
		var selectedModels;
		
		selectedModels = (newMakes[makeNbr].models);
		var i=0;
		document.newForm.mdnm.options[ i ] = new Option( "All" , "all" );
		i++;
		for ( aModelIdx in selectedModels )
		{
			aModel = selectedModels[ aModelIdx ];
			document.newForm.mdnm.options[ i ] = 
			new Option( aModel.modelName, aModel.modelName );
			i++;
		}
		
		document.newForm.mdnm.options[ 0 ].selected = true;
	}
	
	// when make is selected fill model selection
	function selectedMakeUsed( aSelectedMake )
	{
		fillModelSelectUsed( usedMakesName[aSelectedMake].makeNumber );
	}
	
	// when make is selected fill model selection
	function selectedMakeNew( mkid )
	{
		for (aIdx in newMakesName)
		{
			if (newMakesName[aIdx].makeNumber == mkid)
			{
				return fillModelSelectNew( mkid );
			}
		}
		// This should never be reached
	}
	
	function ValidateUsed() 
	{
		with (document.usedForm) 
		{
			//allows us to quantify use of widget
			// change mypngtag to your profile name
			// example: chitrib.png
			var random_number = Math.round( Math.random() * 1000000000 );
			document.images["tracker"].src = "http://www.cars.com/rd/usertrack/widgets/mypngtag.png?rand=" +
			random_number;
			// check user input for zipcode entry field
			if (zc.value == "") 
			{
				zc.value = prompt ("Please enter a Zip Code:","");
			}
		}
	}
	
	function ValidateNew() 
	{
		with (document.newForm) 
		{
			if (zc.value == "") 
			{
				zc.value = prompt("Please enter a Zip Code:","");
			}
		}
	}
	
	function processError()
	{
		with (document.usedForm)
		{
			if(mknm.options[mknm.selectedIndex].value != "")
			{
				Populate(mknm,0);
			}
			else
				mknm.options[0].selected = true;			 
		}
		return true;
	}
