   //****************************************************
   //* Check all input field, if get an error, resend form, 
   //* otherwise calculate fan flow and send request for
   //* fans the fit this size.
   //*
   //* 
   //****************************************************
	function viewMatches() {
		form = this.document.fan_sizer;

		var length=0;
		var width=0;
		var height=0;
		var ductLength=0;

		//* check that length, height and width of room are filled in and numeric
		if (!form['roomlength'].value) {
			alert('Please enter room length');
			return false;
		} else
		if (!IsNumeric(form['roomlength'].value)) {
			alert('Please enter numeric room length');
			return false;
		} else {
			length=form['roomlength'].value;
		}
		if (!form['roomwidth'].value) {
			alert('Please enter room width');
			return false;
		} else
		if (!IsNumeric(form['roomwidth'].value)) {
			alert('Please enter numeric room width');
			return false;
		} else {
			width=form['roomwidth'].value;
		}
		if (!form['roomheight'].value) {
			alert('Please enter room height');
			return false;
		} else
		if (!IsNumeric(form['roomheight'].value)) {
			alert('Please enter numeric room height');
			return false;
		} else {
			height=form['roomheight'].value;
		}

		//* check that duct type is selected
		var radio_choice=false;
		for (counter = 0; counter < form['ducttype'].length; counter++)
		{
			if (form.ducttype[counter].checked) {
				radio_choice = true;
				ducttype=form['ducttype'][counter].value;
			}	
		}
		if (!radio_choice) {
			alert('Please choose duct type');
			return false;
		}

		//* check that duct length is filled in and numeric
		if (!form['ductlength'].value) {
			alert("Please choose duct length");
			return false;
		} else
		if (!IsNumeric(form['ductlength'].value)) {
			alert('Please enter numeric duct length');
			return false;
		} else {
			ductlength = parseInt(form['ductlength'].value);
		}

		//* check that # of elbows is filled in and numeric
		if (!form['elbows'].value) {
			alert("Please choose number of elbows");
			return false;
		} else
		if (!IsNumeric(form['elbows'].value)) {
			alert('Please enter numeric elbows');
			return false;
		} else {
			elbows = parseInt(form['elbows'].value);
		}

		//* ALL FORM FIELDS ARE FILLED IN, DO CALCULATIONS NOW
		
		//* room size = length x height x width
		room_size_cu_ft=length*height*width;

		//* adjusted square footage is room size / 8 
		room_size_adjusted_sq_ft=parseInt(room_size_cu_ft)/8;

		//* hard code target ACH for bathrooms
		target_ach=8; 

		// calc equivalent duct length
		equivalent_duct_length = calcDuctLength(ductlength, elbows);

		initial_fan_size_rec=Math.round(((room_size_cu_ft/60)*target_ach)+.5);

		if (parseInt(room_size_adjusted_sq_ft) < 60) {
			rec_fan_rating = Math.round(initial_fan_size_rec);
		} else
		if (parseInt(equivalent_duct_length) < 50) {
			rec_fan_rating = Math.round(((initial_fan_size_rec * 0.95) + (parseInt(equivalent_duct_length) * 0.1)));
		} else {
			rec_fan_rating = Math.round((initial_fan_size_rec * 0.95) + (parseInt(equivalent_duct_length) * 0.4));
		}

		search_url= 'advanced_search_result.php?finder=exhaustfan&cfm_recommended='+rec_fan_rating+'&roomlength='+length+'&roomheight='+height+'&roomwidth='+width+'&ductlength='+ductlength+'&elbows='+elbows+'&ducttype='+ducttype;
		window.document.location.href=search_url;

		return false; // DO NOT switch to true. you want to redirect rather than submit!!

	} // end viewMatches

   //*  check for valid numeric strings
	function IsNumeric(strString)
	   {
	   var strValidChars = "0123456789";
	   var strChar;
	   var blnResult = true;
	   if (strString.length == 0) return false;

	   //  test strString consists of valid characters listed above
	   for (i = 0; i < strString.length && blnResult == true; i++)
		  {
		  strChar = strString.charAt(i);
		  if (strValidChars.indexOf(strChar) == -1)
			 {
			 blnResult = false;
			 }
		  }
	   return blnResult;
   }

   //****************************************************
   //* Based on the type of duct, duct length and # elbows, 
   //* calculate the duct length.
   //****************************************************
	function calcDuctLength(ductlength, elbows) {
		form = this.document.fan_sizer;
		if (form.ducttype[0].checked) {
			// rigid
			equivalent_duct_length = (ductlength + (elbows*15));
		} else
		if (form.ducttype[1].checked) {
			// insulated flex
			equivalent_duct_length = ((ductlength*1.25) + (elbows*15));
		} else {
			// aluminum flex
			equivalent_duct_length = ((ductlength*1.5) + (elbows*15));
		}

		return equivalent_duct_length;

	} // END calcDuctLength

   //****************************************************
   // Room volume = length x width x height
   //****************************************************
	function fillRoomVol() {
		form = this.document.fan_sizer;

		if ((IsNumeric(form['roomlength'].value))
		&& (IsNumeric(form['roomwidth'].value))
		&& (IsNumeric(form['roomheight'].value)))
		{
			roomVol=form['roomlength'].value*form['roomwidth'].value*form['roomheight'].value;
			form['roomVol'].value = roomVol;
		} else {
			form['roomVol'].value = '';
		}

		// when recalculate room volume, also recalc fan flow
		fillFanFlow();
		
	} // END fillRoomVol

   //****************************************************
   //* Calculate effective duct length
   //****************************************************
	function fillEffectiveDuctLength()
	{
		form = this.document.fan_sizer;

		var radio_choice=false;
		for (counter = 0; counter < form['ducttype'].length; counter++)
		{
			if (form.ducttype[counter].checked) {
				radio_choice = true;
			}	
		}
		if (!radio_choice) {
			//* need duct type selected, return 
			form['ductLen'].value = '';
			return;
		}

		//* check if duct length filled in and numeric
		if (!form['ductlength'].value) {
			form['ductLen'].value = '';
			return;
		} else
		if (!IsNumeric(form['ductlength'].value)) {
			form['ductLen'].value = '';
			return;
		} else {
			ductlength = parseInt(form['ductlength'].value);
		}

		//* check if # elbows filled in and numeric
		if (!form['elbows'].value) {
			form['ductLen'].value = '';
			return;
		} else
		if (!IsNumeric(form['elbows'].value)) {
			form['ductLen'].value = '';
			return;
		} else {
			elbows = parseInt(form['elbows'].value);
		}

		form['ductLen'].value = calcDuctLength(ductlength, elbows);

		// when effective duct length, also recalc fan flow
		fillFanFlow();

	} // END fillEffectiveDuctLength

   //****************************************************
   //****************************************************
	function fillFanFlow() {

		form = this.document.fan_sizer;

		var length=0;
		var width=0;
		var height=0;
		var ductLength=0;
		
		//* check that length, height and width of room are filled in and numeric
		if (!form['roomlength'].value) {
			form['fanFlow'].value = '';
			return;
		} else
		if (!IsNumeric(form['roomlength'].value)) {
			form['fanFlow'].value = '';
			return;
		} else {
			length=form['roomlength'].value;
		}
		if (!form['roomwidth'].value) {
			form['fanFlow'].value = '';
			return;
		} else
		if (!IsNumeric(form['roomwidth'].value)) {
			form['fanFlow'].value = '';
			return;
		} else {
			width=form['roomwidth'].value;
		}
		if (!form['roomheight'].value) {
			form['fanFlow'].value = '';
			return;
		} else
		if (!IsNumeric(form['roomheight'].value)) {
			form['fanFlow'].value = '';
			return;
		} else {
			height=form['roomheight'].value;
		}

		//* check that duct type is selected
		var radio_choice=false;
		for (counter = 0; counter < form['ducttype'].length; counter++)
		{
			if (form.ducttype[counter].checked)
			radio_choice = true;
		}
		if (!radio_choice) {
			form['fanFlow'].value = '';
			return;
		}

		//* check that duct length is filled in and numeric
		if (!form['ductlength'].value) {
			form['fanFlow'].value = '';
			return;
		} else
		if (!IsNumeric(form['ductlength'].value)) {
			form['fanFlow'].value = '';
			return;
		} else {
			ductlength = parseInt(form['ductlength'].value);
		}

		//* check that # of elbows is filled in and numeric
		if (!form['elbows'].value) {
			form['fanFlow'].value = '';
			return;
		} else
		if (!IsNumeric(form['elbows'].value)) {
			form['fanFlow'].value = '';
			return;
		} else {
			elbows = parseInt(form['elbows'].value);
		}

		room_size_cu_ft=length*height*width;

		room_size_adjusted_sq_ft=parseInt(room_size_cu_ft)/8;

		target_ach=8; // for bathrooms

		equivalent_duct_length = calcDuctLength(ductlength, elbows);

		initial_fan_size_rec=Math.round(((room_size_cu_ft/60)*target_ach)+.5);

		if (parseInt(room_size_adjusted_sq_ft) < 60) {
			rec_fan_rating = Math.round(initial_fan_size_rec);
		} else
		if (parseInt(equivalent_duct_length) < 50) {
			rec_fan_rating = Math.round(((initial_fan_size_rec * 0.95) + (parseInt(equivalent_duct_length) * 0.1)));
		} else {
			rec_fan_rating = Math.round((initial_fan_size_rec * 0.95) + (parseInt(equivalent_duct_length) * 0.4));
		}

		form['fanFlow'].value = rec_fan_rating;

	} // END fillFanFlow

   //****************************************************
   //* Reload the form when resend page
   //****************************************************
	function loadFields() {
		form = this.document.fan_sizer;

		if (Request.QueryString("roomlength").Count > 0) {
			var roomlength = Request.QueryString("roomlength");
			form['roomlength'].value = roomlength;
		}	

		if (Request.QueryString("roomheight").Count > 0) {
			var roomheight = Request.QueryString("roomheight");
			form['roomheight'].value = roomheight;
		}	

		if (Request.QueryString("roomwidth").Count > 0) {
			var roomwidth = Request.QueryString("roomwidth");
			form['roomwidth'].value = roomwidth;
		}
		
		if (Request.QueryString("ductlength").Count > 0) {
			var ductlength = Request.QueryString("ductlength");
			form['ductlength'].value = ductlength;
		}
		
		if (Request.QueryString("elbows").Count > 0) {
			var elbows = Request.QueryString("elbows");
			form['elbows'].value = elbows;
		}
		
		var ducttype = Request.QueryString("ducttype");
		if (ducttype=='rigid')
			form['ducttype'][0].checked = true;
		else  
		if (ducttype=='insul_flex')
			form['ducttype'][1].checked = true;
		else  
		if (ducttype=='alum_flex')
			form['ducttype'][2].checked = true;

		fillEffectiveDuctLength();
		fillRoomVol();

	} // END loadFields    
