
	// used by 'selector'
	// form element names hardcoded
	// button name hardcoded

// active code: attach to onload event
	jsel_addLoadEvent(jsel_onloadEvent);
	
	function jsel_init( p_presels)
	{
		fnames = new Array('fmake', 'fmodel', 'ftrim', 'fderv');
		fpresels = p_presels;
		frefs = new Array(arrayMake, arrayModel, arrayGrade, arrayDerv);
		fbutton = 'nullsbmt';
	}

	var default_errormessage = "Please select a vehicle first.";
	var default_target = "#";
	function jsel_setDefaults( mess, tar)
	{
		default_errormessage = mess;
		default_target = tar;
	}

	// exit page call
	function jsel_exit( mantarget)
	{
		if (document.proDep['fderv'].selectedIndex == 0)
		{
			alert(default_errormessage);
			return(false);
		}
		if (mantarget != null)
		{
			document.proDep.action = mantarget;
		} else {
			// form valid so redirect target to next step
			document.proDep.action = default_target;
		}
		return(true);
	}

	var loadEventTriggered = false;
	function jsel_onloadEvent()
	{
		if (loadEventTriggered)
			return;
		loadEventTriggered = true;
		jsel_tcSetupBasic();
		jsel_tcSetupForm();

	/*
		// if when loaded there's a make selected, fix up dependent menus for that selection
		if ((document.proDep[jsel_formnames[1]].disabled) && (document.proDep[jsel_formnames[0]].selectedIndex != 0))
		{
			jsel_tcProcessBackSelect(0);
		}
	*/

	}
	// active code: attach to onload event
	jsel_addLoadEvent(jsel_onloadEvent);

	function jsel_tcSetupBasic()
	{
		for (var i=0 ; i < fnames.length ; ++i)
		{
			bhv_dis(fnames[i]);
		}
		bhv_dis(fbutton);
	}

	function jsel_tcSetupForm()
	{
		var i=0;
		var type = fpresels[i];
		if (type == 'query') {
			jsel_tcSetupMenu(fnames[i], frefs[i], i, null);
		} else if(type == 'hide') {
			//
		} else {
			// make menu then auto-select
			jsel_tcSetupMenu(fnames[i], frefs[i], i, type);
		}
	}

	function jsel_tcSetupMenu(fieldname, refarray, level, matchname)
	{
		// ml = menu length
		ml = jsel_makeMenu(refarray,document.proDep[fieldname],0+1);
		if (ml == 2)
		{
			var scomp = document.proDep[fieldname];
			scomp.selectedIndex = 1;
			scomp.style.display = 'none';
			jsel_tcProcessSelect( 1, scomp);
			var labelcomp = document.getElementById('label_'+fieldname);
			if (labelcomp != null)
				labelcomp.style.display = 'none';
		}
		jsel_tcSetupMenusMatch( fieldname, refarray, matchname, level);
	}
	
	function jsel_tcSetupMenusMatch( fieldname, refarray, matchstr, level)
	{
		var matchPos = -1;
		if (matchstr == null)
			return;
			
		for (var i=0 ; i<refarray.length ; ++i)
		{
			if (refarray[i] == matchstr)
			{
				matchPos = i;
				break;
			}
		}
		// action find/result
		if (matchPos != -1)
		{
			var scomp = document.proDep[fieldname];
			scomp.selectedIndex = matchPos;
			jsel_tcProcessSelectDirect(level+1, matchPos);
		}
	}

	function jsel_tcProcessSelectDirect( num, ref)
	{
		if (ref == 0)
		{	
			// selected 'Please select'
			for (var i=num ; i<fnames.length ; ++i)
			{
				// blank and disable sequent menus and button
				jsel_blankMenu(document.proDep[fnames[i]]);
			}
			bhv_dis(fbutton);
		} else {
			// disable further menus
			for (i=num+1 ; i < 4 ; ++i)
			{
				jsel_blankMenu(document.proDep[fnames[i]]);
			}
			// process this selection
			if (num == 1)
				refarray = frefs[num][ref];
			if (num == 2)
			{
				var j = document.proDep[fnames[num-2]].selectedIndex;
				refarray = frefs[num][j][ref+1];
			}
			if (num == 3)
			{
				var j = document.proDep[fnames[num-3]].selectedIndex;
				var k = document.proDep[fnames[num-2]].selectedIndex;
				// alert("make"+j+" model"+k+" trim"+ref);
				refarray = frefs[num][j][k+2][ref+2];
			}
			if (num == 4)
			{
				// final selection
				bhv_en(fbutton);
			} else {
				// alert(frefs[3][35][4]);
				ml = jsel_makeMenu(refarray,document.proDep[fnames[num]],num);
			}
		}
	}

	function jsel_makeMenu( arr, field, skip)
	{
		if (field == null)
			return;
		if (field.options == null)
			return;
		field.options.length = arr.length-skip+1;
		field.disabled = false;
		field.style.visibility = "visible";
		field.selectedIndex = 0;
		field.options[0].value = "Empty";
		field.options[0].text = "Please select";
		field.options[0].disabled = false;

		if ((arr.length-skip)==1)
		{
			var fname = arr[skip];
			if (fname == "") fname="None";
			field.options[1].value = fname;
			field.options[1].text = fname;
			field.options[1].disabled = false;
			field.selectedIndex = 1;
			for (i=0 ; i< fnames.length ; ++i)
			{
				if (fnames[i] == field.name)
				{
					// alert("in game "+i);
					jsel_tcProcessSelectDirect(i+1,1);
				}
			}
			if (arr[skip] == "")
			{
				// hide this single item 'None' menu
				field.style.visibility = "hidden";
			}
		} else {
			for (var i=skip ; i<arr.length ; ++i)
			{
				var fname = arr[i];
				if (fname == "") fname="None";
				field.options[i-skip+1].value = fname;
				if (fname.search(/&#233;/gi) != -1) {
					fname = fname.replace(/&#233;/gi, '\u00E9')
				}
				if (fname.search(/&#39;/gi) != -1) {
					fname = fname.replace(/&#39;/gi, '\u0027')
				}
				field.options[i-skip+1].text = fname;
				field.options[i-skip+1].disabled = false;
			}
		}
		return(field.options.length);
	}
