//  InletSCFMCalculator

//  This application gathers required information about a site's air requirements
//  and determines the Inlet FAD (in ACFM) required.  

//  InletSCFMCalculator can be dropped into a pre-existing web page.  Simply import
//  the javascript library, then add a <div></div> tag with id="InletSCFMCalculator"
//  to mark where the form will be inserted.  The one parameter is width, an integer 
//  representing the calculator width in pixels.  WARNING:  There is a minimum logical
//  size for the table.  I won't tell you what it is.  Height varies, of course.


function EquipmentObject(description,quantity,scfmPerUnit,useFactorPercent){
	this.description = description;
	this.quantity = quantity;
	this.scfmPerUnit = scfmPerUnit;
	this.useFactorPercent = useFactorPercent;
	this.calculate = function(){
		this.total = this.quantity * this.scfmPerUnit * this.useFactorPercent;
	}
	this.calculate();
}

function populatePartialPressureChart(){
	// populates a vast chart of the partial pressure of water
	var partialPressure = new Object();
	partialPressure.temperature = new Array(-160,-155,-150,-145,-140,-135,-130,-125,-120,-115,-110,-105,-100,-95,-90,-85,-80,-60,-55,-50,-48,-46,-44,-42,-40,-38,-36,-34,-32,-30,-28,-26,-24,-22,-20,-19,-18,-17,-16,-15,-14,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212);
	partialPressure.psi = new Array(0.00000004949,0.0000000904,0.000000162,0.000000285,0.0000004928,0.000000838,0.000001403,0.000002312,0.000003757,0.000006019,0.000009517,0.00001486,0.00002291,0.00003491,0.0000526,0.00007841,0.0001157,0.0004972,0.0007001,0.0009776,0.001115,0.00127,0.00144,0.00164,0.00186,0.00211,0.002388,0.0027,0.003049,0.00344,0.003876,0.004363,0.004905,0.005509,0.006181,0.006545,0.006928,0.007332,0.007757,0.008204,0.008676,0.009694,0.01024,0.01082,0.01143,0.01207,0.01274,0.01344,0.01419,0.01496,0.01578,0.01664,0.01754,0.01849,0.01948,0.02052,0.02161,0.02276,0.02396,0.02521,0.02653,0.02791,0.02936,0.03087,0.03246,0.03412,0.03585,0.03767,0.03957,0.04156,0.04363,0.04581,0.04808,0.05045,0.05293,0.05552,0.05823,0.06105,0.064,0.06708,0.0703,0.07365,0.07715,0.0808,0.08461,0.08854,0.0922,0.096,0.1,0.104,0.1082,0.1126,0.1171,0.1217,0.1265,0.1315,0.1367,0.142,0.1475,0.1532,0.1591,0.1653,0.1716,0.1781,0.1849,0.1918,0.199,0.2064,0.2141,0.222,0.2302,0.2386,0.2473,0.2563,0.2655,0.2751,0.285,0.2951,0.3056,0.3164,0.3276,0.339,0.3509,0.3631,0.3756,0.3886,0.4019,0.4156,0.4298,0.4443,0.4593,0.4747,0.4906,0.5069,0.5237,0.541,0.5588,0.5771,0.5959,0.6152,0.6351,0.6556,0.6766,0.6982,0.7204,0.7432,0.7666,0.7906,0.8153,0.8407,0.8668,0.8935,0.921,0.9492,0.9781,1.0078,1.0382,1.0695,1.1016,1.1345,1.1683,1.2029,1.2384,1.2748,1.3121,1.3504,1.3896,1.4298,1.4709,1.513,1.5563,1.6006,1.6459,1.6924,1.74,1.78,1.8387,1.8897,1.942,1.9955,2.0503,2.1064,2.1638,2.2225,2.2826,2.344,2.4069,2.4712,2.537,2.6042,2.6729,2.743,2.815,2.889,2.964,3.04,3.119,3.199,32.81,3.365,3.45,3.537,3.627,3.718,3.811,3.906,4.003,4.102,4.203,4.306,4.411,4.519,4.629,4.741,4.855,4.971,5.09,5.212,5.335,5.461,5.59,5.721,5.855,5.992,6.131,6.273,6.417,6.565,6.715,6.868,7.024,7.183,7.345,7.51,7.678,7.85,8.024,8.202,8.383,8.567,8.755,8.946,9.141,9.339,9.541,9.746,9.955,10.168,10.385,10.605,10.83,11.058,11.29,11.526,11.767,12.011,12.259,12.512,12.769,13.031,13.297,13.568,13.844,14.123,14.406,14.696);
	return partialPressure;
}

function populateBarometricPressureChart(){
	//  populates a nearly equally vast chart of altitude to barometric pressure
	var barometricPressure = new Object();
	barometricPressure.elevation = new Array(0,250,500,750,1000,1250,1500,1750,2000,2250,2500,2750,3000,3250,3500,3750,4000,4250,4500,4750,5000,5250,5500,5750,6000,6250,6500,6750,7000,7250,7500,7750,8000,8250,8500,8750,9000,9250,9500,9750,10000,10250,10500,10750,11000,11250,11500,11750,12000);
	barometricPressure.pressure = new Array(14.69,14.56,14.42,14.29,14.16,14.04,13.91,13.79,13.66,13.54,13.41,13.29,13.16,13.04,12.92,12.80,12.68,12.57,12.45,12.34,12.22,12.11,11.99,11.88,11.77,11.66,11.55,11.44,11.33,11.23,11.12,11.02,10.91,10.81,10.70,10.60,10.50,10.40,10.30,10.20,10.10,10.00,9.90,9.81,9.71,9.62,9.52,9.43,9.34);
	return barometricPressure;
}

function InletSCFMCalculator(){
	this.equipmentList = new Array();
	this.siteAltitude = 0;
	this.siteMaxTemperature = 0;
	this.siteMaxRH = 0;
	this.futureAddition = 0;

	this.calculate = function(){
	//  Calculate subtotals and present total
		this.totalSCFM = 0;
		for (var i in this.equipmentList) {
			// compute this.presentTotal
			this.equipmentList[i].calculate();
			this.totalSCFM += this.equipmentList[i].total;
		}
		this.futureTotal = this.totalSCFM + this.futureAddition;
		this.inletFAD = resolveExcel(this.siteMaxRH,this.siteAltitude,this.siteMaxTemperature,this.totalSCFM);
	}
	this.calculate();
}

function selectBarometricPressure(reference) {
	var result = 0;
	for (var i in barometricPressureChart.elevation) {
		if (barometricPressureChart.elevation[i] <= reference) {
			result = barometricPressureChart.pressure[i];
		}
	}
	return result;
}

function selectPartialPressure(reference){
	var result = 0;
	for (var i in partialPressureChart.temperature) {
		if (partialPressureChart.temperature[i] <= reference) {
			result = partialPressureChart.psi[i];
		}
	}
	return result;
}

function resolveExcel(siteMaxRH,siteAltitude,siteMaxTemperature,totalSCFM) {
	// resolves the very complex excel calculations.  
	var B51 = siteMaxRH;
	var B49 = siteAltitude;
	var B50 = siteMaxTemperature;
	var A65 = selectBarometricPressure(B49);  	//  Barometric Pressure (B49) 
	var A67 = B51;
	var A62 = 0;		//  0% RH
	var A60 = 14.4;		//  value given by spreadsheet
	var A61 = 60;		//  degrees F
	var A66 = B50;
	var F63 = selectPartialPressure(A66);		//  Partial Pressure of Water (A66)
	var F62 = selectPartialPressure(A61);  		//  Partial Pressure of Water (A61)
	var F57 = A61 + 460;
	var F58 = A66 + 460;
	var F60 = F58 / F57;
	var E47 = totalSCFM;
	var F66 = A65 - (A67 * F63);
	var F65 = A60 - (A62 * F62);
	var F68 = F65 / F66;
	var A69 = E47 * F60 * F68;
	var A72 = A69;
	var inletFAD = A72;
	return inletFAD;
}

function drawRootTable(){
	var rootForm = document.createElement("form");
	rootForm.setAttribute("name","InletSCFMForm");
	rootForm.setAttribute("id","InletSCFMForm");
	rootForm.setAttribute("method","post");
	rootForm.setAttribute("action","");
	var rootTable = document.createElement("table");
	rootTable.setAttribute("width","600");
	rootTable.setAttribute("border","0");
	rootTable.setAttribute("cellspacing","0");
	rootTable.setAttribute("cellpadding","0");
	rootTable.appendChild(document.createElement("tbody"));
	rootForm.appendChild(rootTable);
	rootTable.tBodies[0].insertRow(0);
	rootTable.rows[0].insertCell(0);
	var newP = document.createElement("p");
	newP.setAttribute("class","tableResults");
	newP.appendChild(document.createTextNode("SCFM to Required Inlet ACFM Calculator"));
	rootTable.rows[0].cells[0].appendChild(newP);
	var newDiv = document.createElement("div");
	newDiv.setAttribute("id","equipmentTableDIV");
	rootTable.rows[0].cells[0].appendChild(newDiv);
	newDiv = document.createElement("div");
	newDiv.setAttribute("id","siteAndAmbientTableDIV");
	rootTable.rows[0].cells[0].appendChild(newDiv);
	if (document.getElementById("InletSCFMCalculator") != null) {
		document.getElementById("InletSCFMCalculator").appendChild(rootForm);
	}
	else {  // return error message
		document.getElementById("body")[0].appendChild(document.createTextNode("WARNING:  Inlet SCFM Calculator not correctly confightured, please contact your site administrator"));
	}
}

function drawEquipmentTable(){
	if (document.getElementById("equipmentTable") != null) {
		document.getElementById("equipmentTable").parentNode.removeChild(document.getElementById("equipmentTable"));
	}
	var equipmentTable = document.createElement("table");
	equipmentTable.setAttribute("id","equipmentTable");
	equipmentTable.setAttribute("width","600");
	equipmentTable.setAttribute("cellSpacing","0");
	equipmentTable.setAttribute("cellPadding","0");
	equipmentTable.appendChild(document.createElement("tbody"));
	equipmentTable.tBodies[0].insertRow(equipmentTable.tBodies[0].rows.length);
	for (var i = 0; i < 5; i++) {
		equipmentTable.tBodies[0].rows[0].insertCell(i);
		equipmentTable.tBodies[0].rows[0].cells[i].setAttribute("class","tableHeading");
	}
	//  Yes, I am aware of the existence of thead and th.  
	equipmentTable.tBodies[0].rows[0].cells[0].appendChild(document.createTextNode("Air Outlet / Equipment"));
	equipmentTable.tBodies[0].rows[0].cells[1].appendChild(document.createTextNode("Quantity"              ));
	equipmentTable.tBodies[0].rows[0].cells[2].appendChild(document.createTextNode("SCFM Per Unit"         ));
	equipmentTable.tBodies[0].rows[0].cells[3].appendChild(document.createTextNode("Use Factor %"          ));
	equipmentTable.tBodies[0].rows[0].cells[4].appendChild(document.createTextNode("Total"                 ));
	
	//  Traverse equipment list, adding rows as required
	for (var i in inletSCFMCalculator.equipmentList) {
		equipmentTable.tBodies[0].insertRow(equipmentTable.tBodies[0].rows.length);

		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(0);                            //  equipmentList[i].description	
		var newDiv = document.createElement("div");
		newDiv.setAttribute("align","left");
		var newTextBox = document.createElement("input");
		newTextBox.setAttribute("name",("description_" + i));
		newTextBox.setAttribute("id",("description_" + i));
		newTextBox.setAttribute("type","text");
		newTextBox.setAttribute("class","tableTextField");
		newTextBox.setAttribute("size","20");
		newTextBox.setAttribute("maxlength","20");
		newTextBox.setAttribute("value",(inletSCFMCalculator.equipmentList[i].description));
		//  ADD EVENT HANDLER HERE!!!
		newTextBox.onblur = function() {
			var index = parseInt(this.id.substr(12));
			inletSCFMCalculator.equipmentList[index].description = this.value;
			updatePage();
//			document.getElementById("quantity_" + index).select();
		}
		newDiv.appendChild(newTextBox);
		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[0].appendChild(newDiv);

		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(1);                           //  equipmentList[i].quantity	
		newDiv = document.createElement("div");
		newDiv.setAttribute("align","center");
		newTextBox = document.createElement("input");
		newTextBox.setAttribute("name",("quantity_" + i));
		newTextBox.setAttribute("id",("quantity_" + i));
		newTextBox.setAttribute("type","text");
		newTextBox.setAttribute("class","tableTextField");
		newTextBox.setAttribute("size","8");
		newTextBox.setAttribute("maxlength","8");
		newTextBox.setAttribute("value",(inletSCFMCalculator.equipmentList[i].quantity));
		//  ADD EVENT HANDLER HERE!!!
		newTextBox.onblur = function() {
			var index = parseInt(this.id.substr(9));
			inletSCFMCalculator.equipmentList[index].quantity = parseFloat(this.value);
			updatePage();
//			document.getElementById("scfmPerUnit_" + index).select();
		}
		newDiv.appendChild(newTextBox);
		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[1].appendChild(newDiv);

		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(2);                           //  equipmentList[i].scfmPerUnit
		newDiv = document.createElement("div");
		newDiv.setAttribute("align","center");
		newTextBox = document.createElement("input");
		newTextBox.setAttribute("name",("scfmPerUnit_" + i));
		newTextBox.setAttribute("id",("scfmPerUnit_" + i));
		newTextBox.setAttribute("type","text");
		newTextBox.setAttribute("class","tableTextField");
		newTextBox.setAttribute("size","8");
		newTextBox.setAttribute("maxlength","8");
		newTextBox.setAttribute("value",(inletSCFMCalculator.equipmentList[i].scfmPerUnit));
		//  ADD EVENT HANDLER HERE!!!
		newTextBox.onblur = function() {
			var index = parseInt(this.id.substr(12));
			inletSCFMCalculator.equipmentList[index].scfmPerUnit = parseFloat(this.value);
			updatePage();
//			document.getElementById("useFactorPercent_" + index).select();
		}
		newDiv.appendChild(newTextBox);
		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[2].appendChild(newDiv);

		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(3);                           //  equipmentList[i].useFactorPercent
		newDiv = document.createElement("div");
		newDiv.setAttribute("align","center");
		newTextBox = document.createElement("input");
		newTextBox.setAttribute("name",("useFactorPercent_" + i));
		newTextBox.setAttribute("id",("useFactorPercent_" + i));
		newTextBox.setAttribute("type","text");
		newTextBox.setAttribute("class","tableTextField");
		newTextBox.setAttribute("size","8");
		newTextBox.setAttribute("maxlength","8");
		newTextBox.setAttribute("value",(inletSCFMCalculator.equipmentList[i].useFactorPercent));
		//  ADD EVENT HANDLER HERE!!!
		newTextBox.onblur = function() {
			var index = parseInt(this.id.substr(17));
			if ((this.value <= 1) && (this.value >= 0)) {
				inletSCFMCalculator.equipmentList[index].useFactorPercent = parseFloat(this.value);
				updatePage();
//				if (index != (inletSCFMCalculator.equipmentList.length - 1)) {
//					document.getElementById("description_" + (index + 1)).select();
//				} 
//				else {
//					document.getElementById("blank_description").select();
//				}
			}
			else {
				window.alert("Invalid value.  Percents must range from 0 to 1 (.5 = 50%).");
				this.value = inletSCFMCalculator.equipmentList[index].useFactorPercent;
				this.select();
			}
		}
		newDiv.appendChild(newTextBox);
		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[3].appendChild(newDiv);

		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(4);								//  equipmentList[i].total	
		newDiv = document.createElement("div");
		newDiv.setAttribute("align","right");
		newDiv.appendChild(document.createTextNode((inletSCFMCalculator.equipmentList[i].total)));
		equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[4].appendChild(newDiv);	
	}
	
	//  Add one additional BLANK row, so that new rows may be added, with its own special event handler
	equipmentTable.tBodies[0].insertRow(equipmentTable.tBodies[0].rows.length);

	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(0);		//  blank_description	
	var newDiv = document.createElement("div");
	newDiv.setAttribute("align","left");
	var newTextBox = document.createElement("input");
	newTextBox.setAttribute("name","blank_description");
	newTextBox.setAttribute("id","blank_description");
	newTextBox.setAttribute("type","text");
	newTextBox.setAttribute("class","tableTextField");
	newTextBox.setAttribute("size","20");
	newTextBox.setAttribute("maxlength","20");
	//  ADD EVENT HANDLER HERE!!!
	newTextBox.onblur = function() {
		if (this.value != "") {
			inletSCFMCalculator.equipmentList.push(new EquipmentObject(this.value,0,0,0));
			updatePage();
//			document.getElementById("quantity_" + (inletSCFMCalculator.equipmentList.length - 1)).select();
		}
	}
	newDiv.appendChild(newTextBox);
	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[0].appendChild(newDiv);

	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(1);		//  blank_quantity	
	var newDiv = document.createElement("div");
	newDiv.setAttribute("align","center");
	var newTextBox = document.createElement("input");
	newTextBox.setAttribute("name","blank_quantity");
	newTextBox.setAttribute("id","blank_quantity");
	newTextBox.setAttribute("type","text");
	newTextBox.setAttribute("class","tableTextField");
	newTextBox.setAttribute("size","8");
	newTextBox.setAttribute("maxlength","8");
	newTextBox.setAttribute("value","0");
	//  ADD EVENT HANDLER HERE!!!
	newTextBox.onblur = function() {
		if (this.value != "0") {
			inletSCFMCalculator.equipmentList.push(new EquipmentObject("",parseFloat(this.value),0,0));
			updatePage();
//			document.getElementById("scfmPerUnit_" + (inletSCFMCalculator.equipmentList.length - 1)).select();
		}
	}
	newDiv.appendChild(newTextBox);
	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[1].appendChild(newDiv);

	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(2);		//  blank_scfmPerUnit
	var newDiv = document.createElement("div");
	newDiv.setAttribute("align","center");
	var newTextBox = document.createElement("input");
	newTextBox.setAttribute("name","blank_scfmPerUnit");
	newTextBox.setAttribute("id","blank_scfmPerUnit");
	newTextBox.setAttribute("type","text");
	newTextBox.setAttribute("class","tableTextField");
	newTextBox.setAttribute("size","8");
	newTextBox.setAttribute("maxlength","8");
	newTextBox.setAttribute("value","0");
	//  ADD EVENT HANDLER HERE!!!
	newTextBox.onblur = function() {
		if (this.value != "0") {
			inletSCFMCalculator.equipmentList.push(new EquipmentObject("",0,parseFloat(this.value),0));
			updatePage();
//			document.getElementById("useFactorPercent_" + (inletSCFMCalculator.equipmentList.length - 1)).select();
		}
	}
	newDiv.appendChild(newTextBox);
	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[2].appendChild(newDiv);

	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(3);		//  blank_useFactorPercent
	var newDiv = document.createElement("div");
	newDiv.setAttribute("align","center");
	var newTextBox = document.createElement("input");
	newTextBox.setAttribute("name","blank_useFactorPercent");
	newTextBox.setAttribute("id","blank_useFactorPercent");
	newTextBox.setAttribute("type","text");
	newTextBox.setAttribute("class","tableTextField");
	newTextBox.setAttribute("size","8");
	newTextBox.setAttribute("maxlength","8");
	newTextBox.setAttribute("value","0");
	//  ADD EVENT HANDLER HERE!!!
	newTextBox.onblur = function() {
		if (this.value != "0") {
			inletSCFMCalculator.equipmentList.push(new EquipmentObject("",0,0,parseFloat(this.value)));
			updatePage();
//			document.getElementById("blank_description").select();
		}
	}
	newDiv.appendChild(newTextBox);
	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].cells[3].appendChild(newDiv);

	equipmentTable.tBodies[0].rows[equipmentTable.tBodies[0].rows.length - 1].insertCell(4);		//  blank_total	NOT USED

	//  add the table to the screen:
	//  MODIFY:  remove reference to root tag... use root table instead	
	document.getElementById("equipmentTableDIV").appendChild(equipmentTable);	
}		//  drawEquipmentTable()

function drawSiteAndAmbientTable() {
	if (document.getElementById("siteAndAmbientTable") != null) {
		document.getElementById("siteAndAmbientTable").parentNode.removeChild(document.getElementById("siteAndAmbientTable"));
	}
	var siteAndAmbientTable = document.createElement("table");
	siteAndAmbientTable.setAttribute("width","600");
	siteAndAmbientTable.setAttribute("id","siteAndAmbientTable");
	siteAndAmbientTable.setAttribute("border","0");
	siteAndAmbientTable.setAttribute("cellspacing","0");
	siteAndAmbientTable.setAttribute("cellpadding","0");
	siteAndAmbientTable.appendChild(document.createElement("tbody"));
	siteAndAmbientTable.tBodies[0].insertRow(0);
	siteAndAmbientTable.tBodies[0].rows[0].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[0].cells[0].setAttribute("width","250");
	siteAndAmbientTable.tBodies[0].rows[0].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[0].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[0].cells[1].setAttribute("width","275");
	siteAndAmbientTable.tBodies[0].rows[0].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[0].cells[1].appendChild(document.createTextNode("Total (SCFM)"));
	siteAndAmbientTable.tBodies[0].rows[0].insertCell(2)
	siteAndAmbientTable.tBodies[0].rows[0].cells[2].setAttribute("width","75");
	var newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newDiv.appendChild(document.createTextNode((inletSCFMCalculator.totalSCFM)));
	siteAndAmbientTable.tBodies[0].rows[0].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(1);
	siteAndAmbientTable.tBodies[0].rows[1].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[1].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[1].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[1].cells[1].appendChild(document.createTextNode("Future Additions"));
	siteAndAmbientTable.tBodies[0].rows[1].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[1].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newInput = document.createElement("input");
	newInput.setAttribute("name","futureAddition");
	newInput.setAttribute("id","futureAddition");
	newInput.setAttribute("type","text");
	newInput.setAttribute("class","tableTextField");
	newInput.setAttribute("size","8");
	newInput.setAttribute("maxlength","8");
	newInput.setAttribute("value",inletSCFMCalculator.futureAddition);
	newInput.onblur = function() {
		inletSCFMCalculator[(this.id)] = parseFloat(this.value);
		updatePage();
		document.getElementById("siteAltitude").select();
	}
	newDiv.appendChild(newInput);
	siteAndAmbientTable.tBodies[0].rows[1].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(2);
	siteAndAmbientTable.tBodies[0].rows[2].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[2].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[2].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[2].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[2].cells[1].appendChild(document.createTextNode("Future Total"));
	siteAndAmbientTable.tBodies[0].rows[2].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newDiv.appendChild(document.createTextNode(inletSCFMCalculator.futureTotal));
	siteAndAmbientTable.rows[2].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(3);
	siteAndAmbientTable.rows[3].insertCell(0);
	siteAndAmbientTable.rows[3].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.rows[3].insertCell(1);
	siteAndAmbientTable.rows[3].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.rows[3].cells[1].appendChild(document.createTextNode("Inlet FAD (ACFM) Required"));
	siteAndAmbientTable.rows[3].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newDiv.appendChild(document.createTextNode(inletSCFMCalculator.inletFAD));
	siteAndAmbientTable.rows[3].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(4);
	siteAndAmbientTable.tBodies[0].rows[4].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[4].cells[0].setAttribute("colspan","3");
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newDiv.appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[4].cells[0].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(5);
	siteAndAmbientTable.tBodies[0].rows[5].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[5].cells[0].setAttribute("class","tableHeading");
	siteAndAmbientTable.tBodies[0].rows[5].cells[0].appendChild(document.createTextNode("Site Ambient Conditions"));
	siteAndAmbientTable.tBodies[0].rows[5].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[5].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[5].cells[1].appendChild(document.createTextNode("Altitude"));
	siteAndAmbientTable.tBodies[0].rows[5].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newInput = document.createElement("input");
	newInput.setAttribute("name","siteAltitude");
	newInput.setAttribute("id","siteAltitude");
	newInput.setAttribute("type","text");
	newInput.setAttribute("class","tableTextField");
	newInput.setAttribute("size","8");
	newInput.setAttribute("maxlength","8");
	newInput.setAttribute("value",inletSCFMCalculator.siteAltitude);
	//  Set event handler here.
	newInput.onblur = function() {
		inletSCFMCalculator[(this.id)] = parseFloat(this.value);
		updatePage();
		document.getElementById("siteMaxTemperature").select();
	}
	newDiv.appendChild(newInput);
	siteAndAmbientTable.tBodies[0].rows[5].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(6);
	siteAndAmbientTable.tBodies[0].rows[6].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[6].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[6].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[6].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[6].cells[1].appendChild(document.createTextNode("Max Ambient Operating Temperature"));
	siteAndAmbientTable.tBodies[0].rows[6].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newInput = document.createElement("input");
	newInput.setAttribute("name","siteMaxTemperature");
	newInput.setAttribute("id","siteMaxTemperature");
	newInput.setAttribute("type","text");
	newInput.setAttribute("class","tableTextField");
	newInput.setAttribute("size","8");
	newInput.setAttribute("maxlength","8");
	newInput.setAttribute("value",inletSCFMCalculator.siteMaxTemperature);
	newInput.onblur = function() {
		inletSCFMCalculator[(this.id)] = parseFloat(this.value);
		updatePage();
		document.getElementById("siteMaxRH").select();
	}
	newDiv.appendChild(newInput);
	siteAndAmbientTable.tBodies[0].rows[6].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(7);
	siteAndAmbientTable.tBodies[0].rows[7].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[7].cells[0].appendChild(document.createTextNode(" "));
	siteAndAmbientTable.tBodies[0].rows[7].insertCell(1);
	siteAndAmbientTable.tBodies[0].rows[7].cells[1].setAttribute("class","tableText");
	siteAndAmbientTable.tBodies[0].rows[7].cells[1].appendChild(document.createTextNode("Max Ambient Relative Humidity"));
	siteAndAmbientTable.tBodies[0].rows[7].insertCell(2);
	newDiv = document.createElement("div");
	newDiv.setAttribute("align","right");
	newInput = document.createElement("input");
	newInput.setAttribute("name","siteMaxRH");
	newInput.setAttribute("id","siteMaxRH");
	newInput.setAttribute("type","text");
	newInput.setAttribute("class","tableTextField");
	newInput.setAttribute("size","8");
	newInput.setAttribute("maxlength","8");
	newInput.setAttribute("value",inletSCFMCalculator.siteMaxRH);
	newInput.onblur = function() {
		if ((this.value <= 1) && (this.value >= 0)) {
			inletSCFMCalculator[(this.id)] = parseFloat(this.value);
			updatePage();
		}
		else {
			window.alert("Invalid value.  Percents must range from 0 to 1 (.5 = 50%).");
			this.value = inletSCFMCalculator[(this.id)];
			this.select();
		}
	}
	newDiv.appendChild(newInput);
	siteAndAmbientTable.tBodies[0].rows[7].cells[2].appendChild(newDiv);
	
	siteAndAmbientTable.tBodies[0].insertRow(8);
	siteAndAmbientTable.tBodies[0].rows[8].insertCell(0);
	siteAndAmbientTable.tBodies[0].rows[8].cells[0].setAttribute("colspan","3");
	var newP = document.createElement("p");
	newP.appendChild(document.createTextNode(" "));
	newP = document.createElement("p");
	newP.setAttribute("class","smallPrint");
	siteAndAmbientTable.tBodies[0].rows[8].cells[0].appendChild(newP);
	newP.appendChild(document.createTextNode("SCFM = (14.7 psia, 60 degrees F, 0% RH)"));
	siteAndAmbientTable.tBodies[0].rows[8].cells[0].appendChild(newP);
	
	document.getElementById("siteAndAmbientTableDIV").appendChild(siteAndAmbientTable);
}    //    drawSiteAndAmbientTable() 

function updatePage(){
	//  Reset all calculated values to reflect calculator object updates
	inletSCFMCalculator.calculate();
	
	//  update page elements
	drawEquipmentTable();
	drawSiteAndAmbientTable();
}

function resetCalculator(){
//    Resets all variables and form elements
	//  Initialize Calculate object
	partialPressureChart    = populatePartialPressureChart();
	barometricPressureChart = populateBarometricPressureChart();
	inletSCFMCalculator = new InletSCFMCalculator();
	
	//  Initialize user fields
	updatePage();
}

function initializePage(){
	drawRootTable();
	resetCalculator();
}


window.onload = initializePage;
