		function setModels(opttext,optval,n) {
			b = optval.split("$$");
			if(b.length > 1){
				a = b[1].split("$");
				a.sort();
				var ExSelect = document.vsearchauto.modeldrop;
				setOptionTextPlus(ExSelect,a,n);
			}
			else {
				if(ExSelect != null)
					ExSelect.options[0].selected="selected";
			}
		}
		function pickModel(opttext,optval) {
			b = optval.split("$$");
			if(b.length > 1){
				a = b[1].split("$");
				a.sort();
				var ExSelect = document.vsearchauto.modeldrop;
				setOptionText(ExSelect,a);
			}		
		}
		function setOptionTextPlus(ExSelect, theArray, theSels) {
			z = theSels.split("$")
			ExSelect.length = a.length+1;
			ExSelect.options[0].value = "any";
			if(theSels != "$" && theSels != null)
				ExSelect.options[0].selected="";
			ExSelect.options[0].text = "---any model---";
			for (j = 0; j < a.length; j++) 
			{
				ExSelect.options[j+1].value = theArray[j];
				for(k=1; k < z.length-1; k++)
				{
					if(theArray[j] == z[k])
						ExSelect.options[j+1].selected='selected';
				}			
				ExSelect.options[j+1].text = theArray[j];
			}
		}
		
		function setOptionText(ExSelect, theArray) {			
			ExSelect.length = a.length+1;
			ExSelect.options[0].value = "any";
			ExSelect.options[0].selected="selected";
			ExSelect.options[0].text = "---any model---";
			for (j = 0; j < a.length; j++) {
			ExSelect.options[j+1].value = theArray[j];
			ExSelect.options[j+1].selected='';
			ExSelect.options[j+1].text = theArray[j];
			}
		}

		function setOffer(form) {
			var offString = "";
			if(form.name == "vsearchauto") {
				if((form.offernew.checked && form.offerused.checked) || (form.offernew.checked==false && form.offerused.checked==false))
					offString = "New or Used";
				else{
					if(form.offerused.checked==true)
						offString = "Used";
					if(form.offernew.checked==true)
						offString = "New";
				}	
			}
			else {
				var offString = "";
				if((form.offersale.checked && form.offerrent.checked) || (form.offersale.checked==false && form.offerrent.checked==false))
					offString = "Sale or Rental";
				else{
					if(form.offerrent.checked==true)
						offString = "Rental";
					if(form.offersale.checked==true)
						offString = "Sale";
				}
			}
			form.offer.value = offString;
			return form.offer;	
		}
		
		function return_multi(form)
			{
				var optString = "";
				if(form.name == "vsearchjob") 
					var theSelect = form.catdrop;
				else
					var theSelect = form.modeldrop;

				for (i = 0; i < theSelect.options.length; i++) {
					if (theSelect.options[i].selected) 
						optString += theSelect.options[i].value + "$";
				}

				if(form.name == "vsearchjob") {
					form.make.value = optString;
					check_vsearch ( form );
				}
				
				else {
					if(optString != "") optString = "$" + optString;
					form.model.value = optString;
					return form.model;
				}

			}

		
		function check_val(form)
		{
			var validyr = /^((19)|(20))\d{2}$/;
			var validprice = /^\d*$/;
			
			if ((form.lowprice.value != 'all prices' && !validprice.test(form.lowprice.value)) || (form.hiprice.value != 'no maximum' && !validprice.test(form.hiprice.value))){
						alert("not a valid price. (No punctuation, please.)");
						return false;
					} 
			
			if(form.name == "vsearchprop") { 	
				if(form.lowprice.value * 1 > form.hiprice.value * 1 && !form.hiprice.value=='') {
					alert("invalid range.");
					return false;
				} 	
				setOffer(form);
			} 
			else{	
			
				if (!((validyr.test(form.lowyear.value) || form.lowyear.value=='')
					 && (validyr.test(form.hiyear.value) || form.hiyear.value==''))){
					alert("not a valid year");
					return false;
				} 	
				if((form.lowyear.value > form.hiyear.value && !form.hiyear.value=='')
					|| (form.lowprice.value * 1 > form.hiprice.value * 1 && form.hiprice.value!='0' && form.hiprice.value!=''))
				{
					alert("invalid range.");
					return false;
				} 
				setOffer(form);			
				return_multi(form);
			}	
		}

		function refreshModels() {
			if(document.form){
				if(document.form.make.value != -1){
					m = document.form.make.value;
					n = document.form.model.value;
					setModels(m,m,n);
				}
			}			
		}
		
		/* Advanced Search */
		
		function tv_strip_illegal_characters ( val )
		{
			var invalidchars = "<>\/";
			for (output='', x=0; x < val.length; x++)
			{
				if ( invalidchars.indexOf( val.charAt(x) ) == -1 )
					output += val.charAt(x)
			}
			return output;
		}
		function check_sval(form)
		{
			var validyr = /^(20)\d{2}$/;
			var validmo = /(10)|(11)|(12)|(^[1-9]?$)/;
			var validday = /(30)|(31)|(^[1-2]?\d?$)/;
			var validprice = /^\d*(.\d\d)?$/;
			form.AndPhrase.value = tv_strip_illegal_characters ( form.AndPhrase.value );
			form.ExactPhrase.value = tv_strip_illegal_characters ( form.ExactPhrase.value );
			form.OrPhrase.value = tv_strip_illegal_characters ( form.OrPhrase.value );
			form.OmitWords.value = tv_strip_illegal_characters ( form.OmitWords.value );
			
			if(!form.AndPhrase.value && !form.ExactPhrase.value && !form.OrPhrase.value) {
				alert("Please specify a word or phrase for the search criteria.");
				return false;
				}
			
			if(form.OmitWords.value && !form.AndPhrase.value && !form.ExactPhrase.value && !form.OrPhrase.value) {
				alert("Please specify search criteria from which to exclude '" + form.OmitWords.value + "'.");
				return false;
				}
			
			if(form.LowPrice) {	
				if ((form.LowPrice.value != 'all prices' && !validprice.test(form.LowPrice.value)) || (form.HighPrice.value != 'no maximum' && !validprice.test(form.HighPrice.value))){
					alert("not a valid price. (No commas, and correct cents, please.)");
					return false;
				} 
				
				if(form.LowPrice.value * 1 > form.HighPrice.value * 1 && !form.HighPrice.value=='') {
					alert("invalid range.");
					return false;
				}
			}
			if(form.LowPrice || form.HighPrice) {
				if(!(form.AndPhrase.value || form.ExactPhrase.value || form.OrPhrase.value)) {
					alert("You must enter a search term before the price filter can be applied.");
					return false;
				}
			}
			
			if(form.asearch='news') {	
				if (!(validmo.test(form.Start_MM.value) && validmo.test(form.End_MM.value))){
						alert("not a valid month");
						return false;
				} 	
				if (!(validday.test(form.Start_DD.value) && validday.test(form.End_DD.value))){
						alert("not a valid date");
						return false;
				} 			
			
				if (!((validyr.test(form.Start_YYYY.value) || form.Start_YYYY.value=='')
						&& (validyr.test(form.End_YYYY.value) || form.End_YYYY.value==''))){
						alert("not a valid year");
						return false;
				} 	
				if(form.Start_YYYY.value > form.End_YYYY.value && !form.End_YYYY.value==''){
						alert("invalid year range.");
						return false;
				}
				if(form.Start_YYYY.value == form.End_YYYY.value && form.Start_MM.value > form.End_MM.value){
						alert("invalid month range.");
						return false;
				}
				if(form.Start_YYYY.value == form.End_YYYY.value && form.Start_MM.value == form.End_MM.value && form.Start_DD.value > form.End_DD.value){
						alert("invalid date range.");
						return false;
				}
				if(validyr.test(form.Start_YYYY.value) && form.End_YYYY.value == ''){
						form.End_YYYY.value == form.Start_YYYY.value;
						return false;
				}
			}
			 	
		}
		
function check_vsearch ( form )
{

	searchinput = strip_illegal_characters( form.vsearch.value );

	if (searchinput == '&#' )
	{
		searchinput = '';
	}

	form.vsearch.value = searchinput;
	
	return true;
}

function strip_illegal_characters ( val )
{
	var invalidchars = "<>\/\"";
	for (output='', x=0; x < val.length; x++)
	{
		if ( invalidchars.indexOf( val.charAt(x) ) == -1 )
			output += val.charAt(x)
	}
	return output;
}
