// JavaScript Document
	function checkKey() {
	   if (window.event.keyCode > 57 || window.event.keyCode < 48)	{
		event.returnValue = false;
		}
	}
	
	function checkKeyDecimal() {
	   if ((window.event.keyCode >= 48 && window.event.keyCode <= 57) || window.event.keyCode == 46)
		{event.returnValue = true}
	   else {event.returnValue = false}
	}

	function clearDefault(el) {
	  if (el.defaultValue==el.value) el.value = ""
	}


	function checkNumber(el) {
	  // Make sure IE4 by examining createTextRange method
	  if (document.body==null) return true
	  if (document.body.createTextRange==null) return true    
	  // Convert key code to character
	  var key = String.fromCharCode(event.keyCode), dotRelationship, allowDigit
	  var checkDot = false
	  var allowDigit = false
	  // Check if number of digits following decimal point is cached
	  if (el._digits==null) {
		// Examine default value (initial value attribute)
		var strNum = el.defaultValue
		// Find the decimal point
		var idx = strNum.indexOf(".")
		// Calculate number of decimal digits
		if (idx>-1) 
		  el._digits = strNum.length - idx - 1
		else
		  el._digits = -1
	  }
	
	  // Make sure a digit or a decimal point
	  if (!isNaN(key) || key==".") {
		// Get selection (either insertion point or text selection)
		var selectionRange = document.selection.createRange()
		// Store a copy for use in comparisons
		var tempSel = selectionRange.duplicate()
		// Variable for the input range 
		var inputRange = el.createTextRange()
	 
		// Get index of the dot
		var dotPos = el.value.indexOf(".")
	   
		// If decimal point, check if new character valid
		if (dotPos > -1) {
		  // Locate existing decimal point 
		  inputRange.findText(".")
		  // When user types decimal, it is only accepted if
		  // replacing existing decimal point
		  if ((key==".") && (el._digits>-1)) {
			if (tempSel.findText("."))
			// Test if existing decimal in selection
			checkDot = selectionRange.inRange(tempSel)
		  } else {
			// Determine whether the selection is before or after the decimal point
			dotRelationship = inputRange.compareEndPoints("EndToStart",selectionRange)
			// Test if new input is an allowable digit
			allowDigit = ((dotRelationship<=0 && (el.value.length - dotPos -1 < 
				el._digits || selectionRange.text.length>0)) || (dotRelationship==1 && key!="."))
		  }
		} else {
		  // If inserting a decimal, test number of following digits
		  if (key==".") 
			tempSel.moveEnd("textEdit",1)          
		  allowDigit = (key=="." && (tempSel.text.length - 1 < el._digits)) || !isNaN(key)
		}
	  }
	  // Return whether the key is allowed
	  return (checkDot || allowDigit)
	}

	function displayResults(output) {
		var MONTHLY_ACCESS_FEE_SATELLITE = 95;
		var units = parseFloat(input.unitsField.value);
		var totalMiles = parseFloat(input.totalMilesField.value);
		var deadheadRatio = convertPercentToValue(parseFloat(input.deadheadRatioField.value));
		var averageHaul = parseFloat(input.averageHaulField.value);
		var variableCostMile = parseFloat(input.variableCostMileField.value);
		var fixedCostMile = parseFloat(input.fixedCostMileField.value);
		var totalRevenue = parseFloat(input.totalRevenueField.value);
		var dispatcherSalary = parseFloat(input.dispatcherSalaryField.value);
		var officeClerkSalary = parseFloat(input.officeClerkSalaryField.value);
		var recruitingCostPerDriver = parseFloat(input.recruitingCostPerDriverField.value);
		var cellPhoneChargesPerDriver = parseFloat(input.cellPhoneChargesPerDriverField.value);
		var numberOfDrivers = parseFloat(input.numberOfDriversField.value);
		var numberOfDispatchers = parseFloat(input.numberOfDispatchersField.value);
		var numberOfClerks = parseFloat(input.numberOfClerksField.value);
		var numberOfAllOtherEmployees = parseFloat(input.numberOfAllOtherEmployeesField.value);

		var tmpMilesPerUnitField = totalMiles / units;
		output.milesPerUnitField.value = roundDecimals(tmpMilesPerUnitField,0);
		
		var tmpEmptyMilesField = deadheadRatio * totalMiles;
		output.emptyMilesField.value = roundDecimals(tmpEmptyMilesField,0);
		
		var tmpRevenueMilesField = totalMiles - tmpEmptyMilesField;
		output.revenueMilesField.value = roundDecimals(tmpRevenueMilesField,0)
		
		var tmpTotalCostMileField = variableCostMile + fixedCostMile;
		output.totalCostMileField.value = roundDecimals(tmpTotalCostMileField,2);
		
		var tmpRevenuePerMileField = totalRevenue / totalMiles;
		output.revenuePerMileField.value = roundDecimals(tmpRevenuePerMileField,2);
		
		var tmpRevenuePerLoadedMileField = totalRevenue / tmpRevenueMilesField;
		output.revenuePerLoadedMileField.value = roundDecimals(tmpRevenuePerLoadedMileField,2);
		
		var tmpTotalAnnualVariableExpenseField = totalMiles * variableCostMile;
		output.totalAnnualVariableExpenseField.value = roundDecimals(tmpTotalAnnualVariableExpenseField,0);
		
		var tmpTotalCostsField = totalMiles * tmpTotalCostMileField;
		output.totalCostsField.value = roundDecimals(tmpTotalCostsField,0);
		
		var tmpOperatingRatioField = tmpTotalCostsField / totalRevenue;
		output.operatingRatioField.value = roundDecimals(tmpOperatingRatioField,3);
		
		var tmpTotalNumberOfTripsField = totalMiles / averageHaul;
		output.totalNumberOfTripsField.value = roundDecimals(tmpTotalNumberOfTripsField,0);
		
		var tmpTripsPerTractorField = tmpTotalNumberOfTripsField / units;
		output.tripsPerTractorField.value = roundDecimals(tmpTripsPerTractorField,0);
		
		var tmpTotalEmployeesField = numberOfDrivers + numberOfDispatchers + numberOfClerks + numberOfAllOtherEmployees;
		output.totalEmployeesField.value = roundDecimals(tmpTotalEmployeesField,0);
		
		var tmpDriverToEmployeeRatioField = numberOfDrivers / (numberOfDispatchers + numberOfClerks + numberOfAllOtherEmployees);
		output.driverToEmployeeRatioField.value = roundDecimals(tmpDriverToEmployeeRatioField,2);
		
		var tmpDriverToDispatcherRatioField = numberOfDrivers / numberOfDispatchers;
		output.driverToDispatcherRatioField.value = roundDecimals(tmpDriverToDispatcherRatioField,2);
		
		//Assumption calculations for Monthly costs for LoadTrak
		var tmpLoadtrakAccessFeeField;
		if (units < 6) {
			tmpLoadtrakAccessFeeField = MONTHLY_ACCESS_FEE_SATELLITE
			}
			else if (units < 32) {
				tmpLoadtrakAccessFeeField = MONTHLY_ACCESS_FEE_SATELLITE * .9
			}
			else if (units < 106) {
				tmpLoadtrakAccessFeeField = MONTHLY_ACCESS_FEE_SATELLITE * .875
			}
			else if (units < 527) {
				tmpLoadtrakAccessFeeField = MONTHLY_ACCESS_FEE_SATELLITE * .85
			}
			else {
				tmpLoadtrakAccessFeeField = MONTHLY_ACCESS_FEE_SATELLITE * .8
			}
			assumptions.loadtrakAccessFeeField.value = roundDecimals(tmpLoadtrakAccessFeeField,2);
			
		var tmpSampleFiveYearEquipmentLeaseField;
		if (units < 7) {
			tmpSampleFiveYearEquipmentLeaseField = (0.02217*3900)
			}
			else if (units < 13) {
				tmpSampleFiveYearEquipmentLeaseField = (0.02092*3900)
			}
			else {
				tmpSampleFiveYearEquipmentLeaseField = (0.02055*3900)
			}
			assumptions.sampleFiveYearEquipmentLeaseField.value = roundDecimals(tmpSampleFiveYearEquipmentLeaseField,2);
		
		var tmpMonthlyChargePerTruckField = tmpLoadtrakAccessFeeField + tmpSampleFiveYearEquipmentLeaseField;
		assumptions.monthlyChargePerTruckField.value = roundDecimals(tmpMonthlyChargePerTruckField,2);


		//Analysis
		//1. Increased revenue mileage
		var tmpTotalRevenueMiles = totalMiles - tmpEmptyMilesField;
		analysis.totalRevenueMilesField.value = roundDecimals(tmpTotalRevenueMiles,0);
		
		var tmpPercentIncreaseRevenueMilesField = (parseFloat(assumptions.percentIncreaseUtilizationField.value));
		analysis.percentIncreaseRevenueMilesField.value = roundDecimals(tmpPercentIncreaseRevenueMilesField,1);
		
		var tmpContributionRevenueMilesField = tmpTotalRevenueMiles * convertPercentToValue(tmpPercentIncreaseRevenueMilesField);
		analysis.contributionRevenueMilesField.value = roundDecimals(tmpContributionRevenueMilesField,0);
		
		var tmpAnalysisRevenuePerLoadedMileField = tmpRevenuePerLoadedMileField;
		analysis.revenuePerLoadedMileField.value = roundDecimals(tmpAnalysisRevenuePerLoadedMileField,2);
		
		var tmpContributionRevenueField = tmpContributionRevenueMilesField * tmpRevenuePerLoadedMileField;
		analysis.contributionRevenueField.value = roundDecimals(tmpContributionRevenueField,0);
		
		var tmpIncreasedRevenueMileageField = tmpContributionRevenueField;
		analysis.increasedRevenueMileageField.value = roundDecimals(tmpIncreasedRevenueMileageField,0);
		
		//2. Reduce empty miles
		var tmpAnalysisEmptyMilesField = deadheadRatio*totalMiles;
		analysis.emptyMilesField.value = roundDecimals(tmpAnalysisEmptyMilesField,0);
		
		var tmpPercentReductionEmptyMilesField = (parseFloat(assumptions.percentReductionEmptyMilesField.value));
		analysis.percentReductionEmptyMilesField.value = roundDecimals(tmpPercentReductionEmptyMilesField,1);
		
		var tmpEmptyMilesSavedField = tmpEmptyMilesField * convertPercentToValue(tmpPercentReductionEmptyMilesField);
		analysis.emptyMilesSavedField.value = roundDecimals(tmpEmptyMilesSavedField,0);
		
		var tmpCostPerMileField = tmpTotalCostMileField;
		analysis.costPerMileField.value = roundDecimals(tmpCostPerMileField,2);
		
		var tmpEmptyMileSavingsField = tmpEmptyMilesSavedField * tmpCostPerMileField;
		analysis.emptyMileSavingsField.value = roundDecimals(tmpEmptyMileSavingsField,0);
		
		var tmpEmptyMilesSavingsResultField = tmpEmptyMileSavingsField;
		analysis.emptyMilesSavingsResultField.value = roundDecimals(tmpEmptyMilesSavingsResultField,0);
		
		//3. Staffing Ratios
		var tmpDriverDispatcherRatioField = tmpDriverToDispatcherRatioField;
		analysis.driverDispatcherRatioField.value = roundDecimals(tmpDriverDispatcherRatioField,2);
		
		var tmpPercentImprovementDriverDispatcherRatioField = (parseFloat(assumptions.percentIncreaseDriverDispatcherRatioField.value));
		analysis.percentImprovementDriverDispatcherRatioField.value = roundDecimals(tmpPercentImprovementDriverDispatcherRatioField,1);
		
		var tmpDriverDispatcherRatioUsingLoadTrakField = tmpDriverDispatcherRatioField * (1 + convertPercentToValue(tmpPercentImprovementDriverDispatcherRatioField));
		analysis.driverDispatcherRatioUsingLoadTrakField.value = roundDecimals(tmpDriverDispatcherRatioUsingLoadTrakField,0);
		
		var tmpRepositionDispatcherField = numberOfDispatchers - (numberOfDrivers/tmpDriverDispatcherRatioUsingLoadTrakField);
		analysis.repositionDispatcherField.value = roundDecimals(tmpRepositionDispatcherField,2);
		
		var tmpAnnualDispatcherCostField = dispatcherSalary;
		analysis.annualDispatcherCostField.value = roundDecimals(tmpAnnualDispatcherCostField,0);
		
		var tmpDispatcherStaffingSavingsField = tmpRepositionDispatcherField * tmpAnnualDispatcherCostField;
		analysis.dispatcherStaffingSavingsField.value = roundDecimals(tmpDispatcherStaffingSavingsField,0);
		
		var tmpDriverOfficeClerkRatioField = numberOfDrivers / numberOfClerks;
		analysis.driverOfficeClerkRatioField.value = roundDecimals(tmpDriverOfficeClerkRatioField,2);
		
		var tmpPercentImprovementDriverOfficeClerkRatioField = (parseFloat(assumptions.percentIncreaseDriverOfficeClerkRatioField.value));
		analysis.percentImprovementDriverOfficeClerkRatioField.value = roundDecimals(tmpPercentImprovementDriverOfficeClerkRatioField,1);
		
		var tmpDriverOfficeClerkRatioUsingLoadTrakField = tmpDriverOfficeClerkRatioField * (1 + convertPercentToValue(tmpPercentImprovementDriverOfficeClerkRatioField));
		analysis.driverOfficeClerkRatioUsingLoadTrakField .value = roundDecimals(tmpDriverOfficeClerkRatioUsingLoadTrakField,0);

		var tmpRepositionClerksField = numberOfClerks - (numberOfDrivers/tmpDriverOfficeClerkRatioUsingLoadTrakField);
		analysis.repositionClerksField.value = roundDecimals(tmpRepositionClerksField,2);

		var tmpAnnualOfficeClerkCostField = officeClerkSalary;
		analysis.annualOfficeClerkCostField.value = roundDecimals(tmpAnnualOfficeClerkCostField,0);
		
		var tmpOfficeClerkStaffingSavingsField = tmpRepositionClerksField * tmpAnnualOfficeClerkCostField;
		analysis.officeClerkStaffingSavingsField.value = roundDecimals(tmpOfficeClerkStaffingSavingsField,0);
		
		var tmpTotalDispatchClericalSavingsField = tmpDispatcherStaffingSavingsField + tmpOfficeClerkStaffingSavingsField;
		analysis.totalDispatchClericalSavingsField.value = roundDecimals(tmpTotalDispatchClericalSavingsField,0);
		
		var tmpTotalDispatchClericalSavings = tmpTotalDispatchClericalSavingsField;
		analysis.totalDispatchClericalSavings.value = roundDecimals(tmpTotalDispatchClericalSavings,0);
		
		//4. Driver retention
		var tmpNumberOfDriversField = numberOfDrivers;
		analysis.numberOfDriversField.value = tmpNumberOfDriversField;
		
		var tmpPercentIncreaseDriverRetentionField = (parseFloat(assumptions.percentIncreaseDriverRetentionField.value));
		analysis.driverRetentionImprovementField.value = roundDecimals(tmpPercentIncreaseDriverRetentionField,1);
		
		var tmpFewerNewDriversRequiredUsingLoadTrakField = tmpNumberOfDriversField * convertPercentToValue(tmpPercentIncreaseDriverRetentionField);
		analysis.fewerNewDriversRequiredUsingLoadTrakField.value = roundDecimals(tmpFewerNewDriversRequiredUsingLoadTrakField,2);
		
		var tmpCostRecruitingDriverField = recruitingCostPerDriver;
		analysis.costRecruitingDriverField.value = roundDecimals(tmpCostRecruitingDriverField,0);
		
		var tmpDriverRetentionSavingsField = tmpCostRecruitingDriverField * tmpFewerNewDriversRequiredUsingLoadTrakField;
		analysis.driverRetentionSavingsField.value = roundDecimals(tmpDriverRetentionSavingsField,0);
		
		var tmpTotalDriverRetentionSavingsField = tmpDriverRetentionSavingsField;
		analysis.totalDriverRetentionSavingsField.value = roundDecimals(tmpDriverRetentionSavingsField,0);
		
		//5. Communications charges (per driver)
		var tmpAnnualCommunicationsChargeField = cellPhoneChargesPerDriver;
		analysis.annualCommunicationsChargeField.value = roundDecimals(tmpAnnualCommunicationsChargeField,0);
		
		var tmpDecreaseCommunicationsChargesField = (parseFloat(assumptions.percentDecreaseCommunicationsChargesField.value));
		analysis.decreaseCommunicationsChargesField.value = roundDecimals(tmpDecreaseCommunicationsChargesField,1);
		
		var tmpCommunicationsSavingsPerYearField = tmpAnnualCommunicationsChargeField * convertPercentToValue(tmpDecreaseCommunicationsChargesField);
		analysis.communicationsSavingsPerYearField.value = roundDecimals(tmpCommunicationsSavingsPerYearField,0);
		
		var tmpCommunicationsSavingsField = tmpCommunicationsSavingsPerYearField * numberOfDrivers;
		analysis.communicationsSavingsField.value = roundDecimals(tmpCommunicationsSavingsField,0);
		
		
		//ROI Summary table
		//1. Increased revenue mileage (irm)
		var tmpIrmPerFleetYearField = tmpIncreasedRevenueMileageField;
		roiSummary.irmPerFleetYearField.value = roundDecimals(tmpIrmPerFleetYearField,0);
		
		var tmpIrmPerTractorFleetYearField = tmpIrmPerFleetYearField / units;
		roiSummary.irmPerTractorFleetYearField.value = roundDecimals(tmpIrmPerTractorFleetYearField,0);
		
		var tmpIrmPerMonthFleetField = tmpIrmPerFleetYearField / 12;
		roiSummary.irmPerMonthFleetField.value = roundDecimals(tmpIrmPerMonthFleetField,0);
		
		//2. Reduce empty miles (rem)
		var tmpRemPerFleetYearField = tmpEmptyMilesSavingsResultField;
		roiSummary.remPerFleetYearField.value = roundDecimals(tmpRemPerFleetYearField,0);
		
		var tmpRemPerTractorFleetYearField = tmpRemPerFleetYearField / units;
		roiSummary.remPerTractorFleetYearField.value = roundDecimals(tmpRemPerTractorFleetYearField,0);
		
		var tmpRemPerMonthFleetField = tmpRemPerFleetYearField / 12;
		roiSummary.remPerMonthFleetField.value = roundDecimals(tmpRemPerMonthFleetField,0);
		
		//3. Dispatch/clerical savings (dcs)
		var tmpDcsPerFleetYearField = tmpTotalDispatchClericalSavings;
		roiSummary.dcsPerFleetYearField.value = roundDecimals(tmpDcsPerFleetYearField,0);
		
		var tmpDcsPerTractorFleetYearField = tmpDcsPerFleetYearField / units;
		roiSummary.dcsPerTractorFleetYearField.value = roundDecimals(tmpDcsPerTractorFleetYearField,0);
		
		var tmpDcsPerMonthFleetField = tmpDcsPerFleetYearField / 12;
		roiSummary.dcsPerMonthFleetField.value = roundDecimals(tmpDcsPerMonthFleetField,0);
		
		//4. Driver retention (dr)
		var tmpDrPerFleetYearField = tmpTotalDriverRetentionSavingsField;
		roiSummary.drPerFleetYearField.value = roundDecimals(tmpDrPerFleetYearField,0);
		
		var tmpDrPerTractorFleetYearField = tmpDrPerFleetYearField / units;
		roiSummary.drPerTractorFleetYearField.value = roundDecimals(tmpDrPerTractorFleetYearField,0);
		
		var tmpDrPerMonthFleetField = tmpDrPerFleetYearField / 12;
		roiSummary.drPerMonthFleetField.value = roundDecimals(tmpDrPerMonthFleetField,0);		

		//5. Communication savings (cs)
		var tmpCsPerFleetYearField = tmpCommunicationsSavingsField;
		roiSummary.csPerFleetYearField.value = roundDecimals(tmpCsPerFleetYearField,0);
		
		var tmpCsPerTractorFleetYearField = tmpCsPerFleetYearField / units;
		roiSummary.csPerTractorFleetYearField.value = roundDecimals(tmpCsPerTractorFleetYearField,0);
		
		var tmpCsPerMonthFleetField = tmpCsPerFleetYearField / 12;
		roiSummary.csPerMonthFleetField.value = roundDecimals(tmpCsPerMonthFleetField,0);
		
		//Highlighted area
		//Total benefits (tb)
		var tmpTbPerFleetYearField = tmpIrmPerFleetYearField + tmpRemPerFleetYearField + tmpDcsPerFleetYearField + tmpDrPerFleetYearField + tmpCsPerFleetYearField;
		roiSummary.tbPerFleetYearField.value = roundDecimals(tmpTbPerFleetYearField,0);
		
		var tmpTbPerTractorFleetYearField = tmpIrmPerTractorFleetYearField + tmpRemPerTractorFleetYearField + tmpDcsPerTractorFleetYearField + tmpDrPerTractorFleetYearField + tmpCsPerTractorFleetYearField;
		roiSummary.tbPerTractorFleetYearField.value = roundDecimals(tmpTbPerTractorFleetYearField,0);
		
		var tmpTbPerMonthFleetField = tmpIrmPerMonthFleetField + tmpRemPerMonthFleetField + tmpDcsPerMonthFleetField + tmpDrPerMonthFleetField + tmpCsPerMonthFleetField;
		roiSummary.tbPerMonthFleetField.value = roundDecimals(tmpTbPerMonthFleetField,0);
		
		//Total cost (tc)
		var tmpTcPerFleetYearField = tmpMonthlyChargePerTruckField * units * 12;
		roiSummary.tcPerFleetYearField.value = roundDecimals(tmpTcPerFleetYearField,0);
		
		var tmpTcPerTractorFleetYearField = tmpTcPerFleetYearField / units;
		roiSummary.tcPerTractorFleetYearField.value = roundDecimals(tmpTcPerTractorFleetYearField,0);
		
		var tmpTcPerMonthFleetField = tmpTcPerFleetYearField / 12;
		roiSummary.tcPerMonthFleetField.value = roundDecimals(tmpTcPerMonthFleetField,0);
		
		//Return on investment (roi)
		var tmpRoiPerFleetYearField = tmpTbPerFleetYearField - tmpTcPerFleetYearField;
		roiSummary.roiPerFleetYearField.value = roundDecimals(tmpRoiPerFleetYearField,0);
		
		var tmpRoiPerTractorFleetYearField = tmpTbPerTractorFleetYearField - tmpTcPerTractorFleetYearField;
		roiSummary.roiPerTractorFleetYearField.value = roundDecimals(tmpRoiPerTractorFleetYearField,0);
		
		var tmpRoiPerMonthFleetField = tmpTbPerMonthFleetField - tmpTcPerMonthFleetField;
		roiSummary.roiPerMonthFleetField.value = roundDecimals(tmpRoiPerMonthFleetField,0);
		
		//Return on investment percent (roi)
		var tmpRoiPercentdcsPerFleetYearField = tmpTbPerFleetYearField / tmpTcPerFleetYearField;
		roiSummary.roiPercentdcsPerFleetYearField.value = roundDecimals(convertValueToPercent(tmpRoiPercentdcsPerFleetYearField),0);
		
		var tmpRoiPercentPerTractorFleetYearField = tmpTbPerTractorFleetYearField / tmpTcPerTractorFleetYearField;
		roiSummary.roiPercentPerTractorFleetYearField.value = roundDecimals(convertValueToPercent(tmpRoiPercentPerTractorFleetYearField),0);
		
		var tmpRoiPercentPerMonthFleetField = tmpTbPerMonthFleetField / tmpTcPerMonthFleetField;
		roiSummary.roiPercentPerMonthFleetField.value = roundDecimals(convertValueToPercent(tmpRoiPercentPerMonthFleetField),0);
		
	}
	
	function loadSampleData(input) {
		input.txtCompanyName.value="ABC Company";
		input.unitsField.value=20;
		input.totalMilesField.value=2000000;
		input.deadheadRatioField.value=12.00;
		input.averageHaulField.value=550;
		input.variableCostMileField.value=0.81;
		input.fixedCostMileField.value=0.36;
		input.totalRevenueField.value=2600000;
		input.dispatcherSalaryField.value=35000;
		input.officeClerkSalaryField.value=25000;
		input.recruitingCostPerDriverField.value=3500;
		input.cellPhoneChargesPerDriverField.value=1800;
		input.numberOfDriversField.value=20;
		input.numberOfDispatchersField.value=2;
		input.numberOfClerksField.value=2;
		input.numberOfAllOtherEmployeesField.value=5;
	}
	
	function clearAllData(input) {
		input.txtCompanyName.value="Your Comapny Name";
		input.unitsField.value="0";
		input.totalMilesField.value="0";
		input.deadheadRatioField.value="0.00";
		input.averageHaulField.value="0";
		input.variableCostMileField.value="0.00";
		input.fixedCostMileField.value="0.00";
		input.totalRevenueField.value="0";
		input.dispatcherSalaryField.value="0";
		input.officeClerkSalaryField.value="0";
		input.recruitingCostPerDriverField.value="0";
		input.cellPhoneChargesPerDriverField.value="0";
		input.numberOfDriversField.value="0";
		input.numberOfDispatchersField.value="0";
		input.numberOfClerksField.value="0";
		input.numberOfAllOtherEmployeesField.value="0";
		clearOutput();
	}
	
	function clearOutput() {
		output.milesPerUnitField.value = "";
		output.emptyMilesField.value = "";
		output.revenueMilesField.value = "";
		output.totalCostMileField.value = "";
		output.revenuePerMileField.value = "";
		output.revenuePerLoadedMileField.value = "";
		output.totalAnnualVariableExpenseField.value = "";
		output.totalCostsField.value = "";
		output.operatingRatioField.value = "";
		output.totalNumberOfTripsField.value = "";
		output.tripsPerTractorField.value = "";
		output.totalEmployeesField.value = "";
		output.driverToEmployeeRatioField.value = "";
		output.driverToDispatcherRatioField.value = "";
		
		assumptions.loadtrakAccessFeeField.value = "";
		assumptions.sampleFiveYearEquipmentLeaseField.value = ""
		assumptions.monthlyChargePerTruckField.value = "";

		analysis.increasedRevenueMileageField.value = "";
		analysis.totalRevenueMilesField.value = "";
		analysis.percentIncreaseRevenueMilesField.value = "";
		analysis.contributionRevenueMilesField.value = "";
		analysis.revenuePerLoadedMileField.value = "";
		analysis.contributionRevenueField.value = "";
		analysis.emptyMilesSavingsResultField.value = "";
		analysis.emptyMilesField.value = "";
		analysis.percentReductionEmptyMilesField.value = "";
		analysis.emptyMilesSavedField.value = "";
		analysis.costPerMileField.value = "";
		analysis.emptyMileSavingsField.value = "";
		analysis.totalDispatchClericalSavings.value = "";
		analysis.driverDispatcherRatioField.value = "";
		analysis.percentImprovementDriverDispatcherRatioField.value = "";
		analysis.driverDispatcherRatioUsingLoadTrakField.value = "";
		analysis.repositionDispatcherField.value = "";
		analysis.annualDispatcherCostField.value = "";
		analysis.dispatcherStaffingSavingsField.value = "";
		analysis.driverOfficeClerkRatioField.value = "";
		analysis.percentImprovementDriverOfficeClerkRatioField.value = "";
		analysis.driverOfficeClerkRatioUsingLoadTrakField.value = "";
		analysis.repositionClerksField.value = "";
		analysis.annualOfficeClerkCostField.value = "";
		analysis.officeClerkStaffingSavingsField.value = "";
		analysis.totalDispatchClericalSavingsField.value = "";
		analysis.totalDriverRetentionSavingsField.value = "";
		analysis.numberOfDriversField.value = "";
		analysis.driverRetentionImprovementField.value = "";
		analysis.fewerNewDriversRequiredUsingLoadTrakField.value = "";
		analysis.costRecruitingDriverField.value = "";
		analysis.driverRetentionSavingsField.value = "";
		analysis.communicationsSavingsField.value = "";
		analysis.annualCommunicationsChargeField.value = "";
		analysis.decreaseCommunicationsChargesField.value = "";
		analysis.communicationsSavingsPerYearField.value = "";
		
		roiSummary.irmPerFleetYearField.value = "";
		roiSummary.irmPerTractorFleetYearField.value = "";
		roiSummary.irmPerMonthFleetField.value = "";
		roiSummary.remPerFleetYearField.value = "";
		roiSummary.remPerTractorFleetYearField.value = "";
		roiSummary.remPerMonthFleetField.value = "";
		roiSummary.dcsPerFleetYearField.value = "";
		roiSummary.dcsPerTractorFleetYearField.value = "";
		roiSummary.dcsPerMonthFleetField.value = "";
		roiSummary.drPerFleetYearField.value = "";
		roiSummary.drPerTractorFleetYearField.value = "";
		roiSummary.drPerMonthFleetField.value = "";
		roiSummary.csPerFleetYearField.value = "";
		roiSummary.csPerTractorFleetYearField.value = "";
		roiSummary.csPerMonthFleetField.value = "";
		roiSummary.tbPerFleetYearField.value = "";
		roiSummary.tbPerTractorFleetYearField.value = "";
		roiSummary.tbPerMonthFleetField.value = "";
		roiSummary.tcPerFleetYearField.value = "";
		roiSummary.tcPerTractorFleetYearField.value = "";
		roiSummary.tcPerMonthFleetField.value = "";
		roiSummary.roiPerFleetYearField.value = "";
		roiSummary.roiPerTractorFleetYearField.value = "";
		roiSummary.roiPerMonthFleetField.value = "";
		roiSummary.roiPercentdcsPerFleetYearField.value = "";
		roiSummary.roiPercentPerTractorFleetYearField.value = "";
		roiSummary.roiPercentPerMonthFleetField.value = "";
	}
	
	function convertValueToPercent(decimal)	{
		percent = decimal * 100
		return (percent)
	}
	
	function convertPercentToValue(percent)	{
		decimal = percent / 100
		return (decimal)
	}
	
	function roundDecimals(originalNumber, decimals) {
		var result1 = originalNumber * Math.pow(10, decimals)
		var result2 = Math.round(result1)
		var result3 = result2 / Math.pow(10, decimals)
		return padWithZeros(result3, decimals)
	}
	
	function padWithZeros(roundedValue, decimalPlaces) {
		// Convert the number to a string
		var valueString = roundedValue.toString()
		// Locate the decimal point
		var decimalLocation = valueString.indexOf(".")
		// Is there a decimal point?
		if (decimalLocation == -1) {
			// If no, then all decimal places will be padded with 0s
			decimalPartLength = 0
			// If decimalPlaces is greater than zero, tack on a decimal point
			valueString += decimalPlaces > 0 ? "." : ""
		}
		else {
			// If yes, then only the extra decimal places will be padded with 0s
			decimalPartLength = valueString.length - decimalLocation - 1
		}
		// Calculate the number of decimal places that need to be padded with 0s
		var padTotal = decimalPlaces - decimalPartLength
	
		if (padTotal > 0) {
			// Pad the string with 0s
			for (var counter = 1; counter <= padTotal; counter++) 
				valueString += "0"
			}
		return formatNumber(valueString);
	}
	
	function formatNumber(num) {
		if (num >= 1000 || num <= -1000) {
			// Work with the absolute value
			var numberString = Math.abs(num).toString()
			var insertPosition
			// Calculate the position of the first comma
			switch (numberString.length % 3) {
				case 1 :
					insertPosition = 1
					break
				case 2 :
					insertPosition = 2
					break
				case 0 :
					insertPosition = 3
					break
			}
			while (insertPosition < numberString.length) {
				numberString = numberString.left(insertPosition) + "," + 
								numberString.substring(insertPosition)
				insertPosition += 4
			}
			// If the original number was negative, tack on the minus sign
			if (num < 0) {
				return "-" + numberString
			}
			else {
				return numberString
			}
		}
		else {
			// If the number is between -1000 and 1000, just return it
			return num.toString()
		}
	}

	function extractLeft(totalChars) {
			return this.substring(0, totalChars)
		}
		
		String.prototype.left = extractLeft