<!--

// define globals
var stateID;
var federalMatchRate;
var countyMatchRate;
var currentNumWorkers;
var newWorkers;
var currentWage;
var increase;


// default constants
var avgHrsWk = 36.24;
var adminCostNewWorkers = 0.1765;
var adminCostCurrentWorkers = 0.1265;
var wageElasticity = 0.33;
var turnoverElasticity = 0.45;
var avgClientsPerWorker = 1.45;
var percentDivertedFromInstitutionalization = 0.20;
var consumptionIncomeRatio = 1;
var retentionRate = 0.5;
var turnoverCostsPerWorker = 1500.0;
var economicMultiplier = 2.0;
var avgNursinghomeCost = 0;


function Comma(number) {
number = '' + number;
if (number.length > 3) {
var mod = number.length % 3;
var output = (mod > 0 ? (number.substring(0,mod)) : '');
for (i=0 ; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0))
output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
else
output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
return (output);
}
else return number;
}

// main
function calcOutput(calcType,sid,fmr,cmr,cnw,nw,cw,i,ae,acpw,pd,anhc,tcpw,rr,ccdcw,cndcw)
{



stateID = sid * 1;
federalMatchRate = fmr / 100;
countyMatchRate = cmr / 100;
currentNumWorkers = cnw * 1;
newWorkers = nw * 1;
currentWage = cw * 1;
increase = i * 1;


// change default constants if user has changed
wageElasticity = ae;
avgClientsPerWorker = acpw;
percentDivertedFromInstitutionalization = pd;
avgNursinghomeCost = anhc;
turnoverCostsPerWorker = tcpw;
retentionRate = rr * 1;
adminCostCurrentWorkers = ccdcw * 1;
adminCostNewWorkers = cndcw * 1;

// initialize key outputs
var stateCost = 0;
var effectiveMatchRate = 0;


var totalCostFederal = 0;
var totalCostOfExistingWagesToState = 0;
var totalCostOfNewWagesToState = 0;
var federalMedicaidFunds = 0;


	if (checkParams(stateID,currentNumWorkers,increase))
	{
				
		// START: BASIC CALCULATIONS
		
		// START: Highlighted Outputs 
		// total cost	
		document.calculator.total_cost.value = Comma( Math.round(getTotalCostOfWagesForExistingWorkers()) );
		// total net cost to state
		document.calculator.state_cost.value = Comma( Math.round( getTotalNetCosttoState() ) );
		// Effective Match
		document.calculator.match.value = Math.round( getEffectiveMatchRate() ); 
		// END: Highlighted Outputs 
		
		
		// Increase to State Gross Domestic Product
		document.calculator.multiplier.value = Comma( Math.round( getIncreaseToStateGrossDomesticProduct() ) );			

		
		// Savings from Reduced Turnover
		document.calculator.redued_turnover.value = Comma( Math.round( getSavingsFromReducedTurnoverCosts() ) );
		// Families Leaving Poverty
		document.calculator.family_poverty.value = Comma( Math.round( getFamiliesLeavingPoverty() ) );
		// Children Leaving Poverty
		document.calculator.child_poverty.value = Math.round( getChildrenLeavingPoverty() );	
		// Numbers of Facility Placements Avoided
		document.calculator.avoided_placements.value =  Comma( Math.round( getNumberOfInstitutionsAvoided() ) );	
		// Number of New Clients Served in the Community
		document.calculator.clients_served.value = Comma( Math.round( getNumberOfNewClientsServed() ) );	
		
		// END: BASIC CALCULATIONS
		
		
		// START: FULL CALCULATIONS
		if( calcType == "fullCalc" ) 
		{
			
			
			// Other Outputs
			// Projected Number of Direct Care Workers
			document.calculator.projected_num_dcws.value = Comma( Math.round( getProjectedNumDCWs() ) );
			// Projected Wage
			document.calculator.projected_wage.value = roundtoHundreth( getProjectedWage() );
			// Percentage Increase in Wages
			document.calculator.percentage_increase.value = Math.round( getPercentageWageIncrease() * 100 );
			// Projected Retention Rate
			document.calculator.projected_retention.value = Math.round( getProjectedRetentionRate() * 100 );
			
			
			
			// START: Detailed State Financial Analysis
			// wages for existing workers
			document.calculator.wages_existing_workers.value = Comma( Math.round(getTotalCostOfWagesForExistingWorkers()) );
			// wages for new workers
			document.calculator.wages_new_workers.value = Comma( Math.round(getTotalCostOfWagesForNewWorkers()) );
			// wages for new and existing workers
			document.calculator.total_wages.value = Comma( Math.round(getTotalCostOfWagesForNewAndExistingWorkers()) );
			// Match Payments for New Workers
			document.calculator.match_payments.value = Comma( Math.round(getMatchPaymentsForNewWorkers()) );
			// SUBTOTAL
			document.calculator.new_wage_costs_subtotal.value = Comma( Math.round( getSubtotalNewWageCostsStateMedicaid() ) );

			// Total Savings from Institutional Diversion
			document.calculator.total_savings_diversion.value = Comma( Math.round(getTotalAnnualCostOfSavingsFromDiversion()) );
			// Match Funds Lost By Institutional Diversion Savings
			document.calculator.match_funds_lost.value = Comma( Math.round( getTotalMatchFundsLoseByInstitutionalDiversionSavings() ) );
			// SUBTOTAL
			document.calculator.subtotal_savings_diversion.value = Comma( Math.round( getSubtotalSavingsFromDiversion() ) );

		
			// Total Savings from Reductions in Use of Medicaid
			document.calculator.total_savings_medicaid.value = Comma( Math.round(getTotalMedicaidSavings()) );
			// Match Funds Lost By Savings
			document.calculator.match_funds_lost_medicaid.value = Comma( Math.round( getMatchFundsLostBySavings() + getCountyMatchFundsLostBySavings() ) ); 
			// SUBTOTAL
			document.calculator.subtotal_medicaid_savings.value = Comma( Math.round( getSubtotalOterMedicaidSavings() ) ); 

			// GRAND TOTAL: TOTAL NET COST TO STATE MEDICAID PROGRAM
			document.calculator.total_cost_state_medicaid.value = Comma( Math.round( getTotalNetCosttoStateMedicaidProgram() ) ); 
		
		
			// State Tax Revenue Increase
			document.calculator.tax_revenue_increase.value = Comma( Math.round(getStateRevenueIncrease()) );
			// Reduced TANF Expenditures
			document.calculator.reduced_tanf.value = Comma( Math.round(getTotalTANFSavings()) );
			// Federal Match Funds Lost by TANF Expenditures Change
			document.calculator.match_funds_lost_tanf.value = Comma( Math.round(getFederalMatchFundsLostTANF()) );		
			// SUBTOTAL
			document.calculator.subtotal_other_state_savings.value = Comma( Math.round( getOtherSavingsToState() ) ); 
			// END: Detailed State Financial Analysis
		}
		// END FULL CALCULATIONS
		
		
		
		
		
		




	// test
	//obsID = 3;
	//alert( getTotalAnnualCostOfSavingsFromDiversiontoFederal()  + "," +  getMatchFundsLostBySavings()  + "," +  getFederalMatchFundsLostTANF() );
		
	}
}



// getSubtotalNewWageCostsStateMedicaid - B52
function getSubtotalNewWageCostsStateMedicaid()
{
	return ( getTotalCostOfWagesForExistingWorkers() + getTotalCostOfWagesForNewWorkers() - getMatchPaymentsForNewWorkers() );
}

// getSubtotalSavingsFromDiversion - B59
function getSubtotalSavingsFromDiversion()
{
	return ( -getTotalAnnualCostOfSavingsFromDiversion() + getTotalMatchFundsLoseByInstitutionalDiversionSavings() );
}

// getSubtotalOterMedicaidSavings - B66
function getSubtotalOterMedicaidSavings()
{
	return ( -getTotalMedicaidSavings() + ( getMatchFundsLostBySavings() + getCountyMatchFundsLostBySavings() ) );
}


// GRAND TOTAL: TOTAL NET COST TO STATE MEDICAID PROGRAM - B68
function getTotalNetCosttoStateMedicaidProgram()
{
	return ( getSubtotalNewWageCostsStateMedicaid() +  getSubtotalSavingsFromDiversion() + getSubtotalOterMedicaidSavings() );
}



// getMeanAdjustedRatio - G
function getMeanAdjustedRatio()
{
	return currentWage / getAverageOriginalPreChangeHourlyWage();
}


// getOriginalPreChangeHourlyWage - I
function getOriginalPreChangeHourlyWage(obsID)
{
	return obsWage[obsID] * wageIndex[stateID-1];
}


// getOriginalPostChangeHourlyWage - J
function getOriginalPostChangeHourlyWage(obsID)
{
	return getOriginalPreChangeHourlyWage(obsID) + increase;
}


// getMeanAdjustedPreChangeHourlyWage - L
function getMeanAdjustedPreChangeHourlyWage(obsID)
{
	return (getOriginalPreChangeHourlyWage(obsID) * getMeanAdjustedRatio());
}


// getMeanAdjustedPostChangeHourlyWage - M
function getMeanAdjustedPostChangeHourlyWage(obsID)
{
	return (getOriginalPostChangeHourlyWage(obsID) * getMeanAdjustedRatio());
}




// getAverageOriginalPreChangeHourlyWage - I139
function getAverageOriginalPreChangeHourlyWage()
{
	var total = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		total += getOriginalPreChangeHourlyWage(obsID);
	}
	return (total / 125);
}


// getNormalizedHoursWorked - BM
function getNormalizedHoursWorked(obsID)
{
	return ((hrsWk[obsID] * 29) / avgHrsWk);
}


// getTotalSalaryEarnedPreChange - N
function getTotalSalaryEarnedPreChange(obsID)
{
	return (getOriginalPreChangeHourlyWage(obsID) * wksWork[obsID] * getNormalizedHoursWorked(obsID));
}


// getTotalSalaryEarnedPostChange - O
function getTotalSalaryEarnedPostChange(obsID)
{
	return ((getOriginalPostChangeHourlyWage(obsID)) * wksWork[obsID] * getNormalizedHoursWorked(obsID));
}


// getSumTotalSalaryEarnedPreChange - N130
function getSumTotalSalaryEarnedPreChange()
{
	var totalPreChange = 0;

	for (obsID = 0; obsID < 125; obsID++)
	{
		totalPreChange += getTotalSalaryEarnedPreChange(obsID);
	}

	return (totalPreChange);
}

// getSumTotalSalaryEarnedPostChange - O130
function getSumTotalSalaryEarnedPostChange()
{
	var totalPostChange = 0;

	for (obsID = 0; obsID < 125; obsID++)
	{
		totalPostChange += getTotalSalaryEarnedPostChange(obsID);
	}

	return (totalPostChange);
}



// getDifferenceInTotalSalaryEarned - 0131
function getDifferenceInTotalSalaryEarned()
{
	return (getSumTotalSalaryEarnedPostChange() - getSumTotalSalaryEarnedPreChange());
}


// getPreChangeWeight - N133 / I135
function getPreChangeWeight()
{
	return (currentNumWorkers / 125);
}

// getPostChangeWeight - 0133 / I136 
function getPostChangeWeight()
{
	return ((currentNumWorkers + newWorkers) / 125);
}


// getTotalCostOfWagesForExistingWorkers - Summary B45
function getTotalCostOfWagesForExistingWorkers()
{
	return (getDifferenceInTotalSalaryEarned() * getPreChangeWeight() * (1 + adminCostCurrentWorkers));
}


// getTotalMatch - Summary B17 / State Data D16
function getTotalMatch()
{
	return (federalMatchRate + countyMatchRate);
}


// getTotalCostToStateForExistingWorkers - D58 / D25
function getTotalCostToStateForExistingWorkers()
{
	return (getTotalCostOfWagesForExistingWorkers() * (1 - getTotalMatch()));
}

// getTotalCostToFederalForExistingWorkers - D26
function getTotalCostToFederalForExistingWorkers()
{
	return ( getTotalCostOfWagesForExistingWorkers() * federalMatchRate );
}

// getTotalCostToCountyForExistingWorkers - D27
function getTotalCostToCountyForExistingWorkers()
{
	return (getTotalCostOfWagesForExistingWorkers() * countyMatchRate );
}

// Total Match Payments for New Workers - D32
function getTotalMatchPaymentsForNewWorkers()
{
	return ( getTotalMatch() * getTotalCostOfWagesForNewWorkers() );
}


// getCostOfInducedDemand - total Cost of Wages for New Workers - D59
function getCostOfInducedDemand()
{
	var totalPostChange = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		totalPostChange += getTotalSalaryEarnedPostChange(obsID);
	}
	return (totalPostChange * (getPostChangeWeight() - getPreChangeWeight()) * (1 + adminCostNewWorkers));
}

// getFederalMatchPaymentsForNewWorkers - D60
function getFederalMatchPaymentsForNewWorkers()
{
	return (federalMatchRate * getCostOfInducedDemand());
}


// getCountyMatchPaymentsForNewWorkers - D60
function getCountyMatchPaymentsForNewWorkers()
{
	return ( countyMatchRate * getCostOfInducedDemand());
}

// getSavingsFromInstitutionalDiversion - D61
function getSavingsFromInstitutionalDiversion()
{
	return (federalMatchRate * (1 - federalMatchRate));
}


// getAverageMonthlNHCost - D37
function getAverageMonthlyNHCost()
{
	return ( avgNursinghomeCost );
}


// getNumNewWorkersInducedDemand - State Data D4
function getNumNewWorkersInducedDemand()
{
	return (Math.round(getPercentageWageIncrease() * wageElasticity * currentNumWorkers));
}


// getTotalAnnualCostOfSavingsFromDiversion - D40
function getTotalAnnualCostOfSavingsFromDiversion()
{
	return (getNumNewWorkersInducedDemand() * avgClientsPerWorker * percentDivertedFromInstitutionalization * getAverageMonthlyNHCost() * 12);
}

// getTotalAnnualCostOfSavingsFromDiversiontoState - D41
function getTotalAnnualCostOfSavingsFromDiversiontoState()
{
	return (getTotalAnnualCostOfSavingsFromDiversion() * getStateMedicaidShare());
}


// getTotalAnnualCostOfSavingsFromDiversiontoFederal - D42
function getTotalAnnualCostOfSavingsFromDiversiontoFederal()
{
	return ( getTotalAnnualCostOfSavingsFromDiversion() * federalMatchRate );
}


// getTotalAnnualCostOfSavingsFromDiversiontoCounty - D45
function getTotalAnnualCostOfSavingsFromDiversiontoCounty()
{
	return (getTotalAnnualCostOfSavingsFromDiversion() * countyMatchRate);
}


// getTotalMatchFundsLoseByInstitutionalDiversionSavings - D48
function getTotalMatchFundsLoseByInstitutionalDiversionSavings()
{
	return ( getTotalAnnualCostOfSavingsFromDiversiontoFederal() + getTotalAnnualCostOfSavingsFromDiversiontoCounty() );
}



// getProjectedNumDCWs - State Data D7
function getProjectedNumDCWs()
{
	return (currentNumWorkers + newWorkers);
}

// getProjectedWage - State Data D11
function getProjectedWage()
{
	return ( currentWage + increase );
}



// getPercentageWageIncrease - B33
function getPercentageWageIncrease()
{
	return ( ( getProjectedWage() - currentWage ) / currentWage);
}


// getStateMedicaidShare - State Data D38
function getStateMedicaidShare()
{
	return (1 - getTotalMatch());
}


// getTotalCostOfWagesForNewWorkers - Summary B47
function getTotalCostOfWagesForNewWorkers()
{
	return (getSumTotalSalaryEarnedPostChange() * (getPostChangeWeight() - getPreChangeWeight()) * (1 + adminCostNewWorkers));
}


// getTotalCostOfWagesForNewAndExistingWorkers - Summary B49
function getTotalCostOfWagesForNewAndExistingWorkers()
{
	return (getTotalCostOfWagesForNewWorkers() + getTotalCostOfWagesForExistingWorkers());
}


// getTotalCostOfWagesForNewAndExistingWorkers - Summary B49
function getMatchPaymentsForNewWorkers()
{
	return ( getTotalMatchPaymentsForNewWorkers() + getTotalCostToCountyForExistingWorkers() + getTotalCostToFederalForExistingWorkers() );
}


// getMonthlyWagePreChange - Sample Post AI
function getMonthlyWagePreChange(obsID)
{
	return (getTotalSalaryEarnedPreChange(obsID) / 12);
}




// getMonthlyWagePreChange - Sample Post AJ
function getMonthlyWagePostChange(obsID)
{
	return (getTotalSalaryEarnedPostChange(obsID) / 12);
}





// getTANFEligiblePreChange - Sample Post AM
function getTANFEligiblePreChange(obsID)
{
	if(getMonthlyWagePreChange(obsID) < tanfCutoff[stateID-1])
	{
		return true;
	} else {
		return false;
	}
}





// getTANFEligiblePostChange - Sample Post AN
function getTANFEligiblePostChange(obsID)
{
	if(getMonthlyWagePostChange(obsID) < tanfCutoff[stateID-1])
	{
		return true;
	} else {
		return false;
	}
}




// getKickedOffTANF - Sample Post AP
function getKickedOffTANF(obsID)
{
	var kickedOff = 0;

	if(onTANF[obsID] == 1) // on TANF
	{
		if( !(getTANFEligiblePreChange(obsID)) ) // on TANF, not PRE, on/off POST
		{
			kickedOff = 1;
		} else if ( !(getTANFEligiblePostChange(obsID)) ) // on TANF, on PRE, not POST
		{
			kickedOff = 1;
		}
	} 
	
	return (kickedOff);	
}




// getSumKickedOffTANF - AP130
function getSumKickedOffTANF()
{
	var sumKickedOff = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumKickedOff += getKickedOffTANF(obsID);
	}
	
	return (sumKickedOff);
}


// getTANFBasedSavings - AZ138
function getTANFBasedSavings()
{
	return (getSumKickedOffTANF() * 2000 * getPostChangeWeight());
}

// getSpousesEarnings - BJ
function getSpousesEarnings(obsID)
{
	return (totalFamilyEarnings[obsID] - wSalVal[obsID]);
}


// getTotalFamilyIncomePreChange - X
function getTotalFamilyIncomePreChange(obsID)
{
	return (getTotalSalaryEarnedPreChange(obsID) + incomeIndex[stateID-1] * getSpousesEarnings(obsID));
}


// getTotalFamilyIncomePostChange - Y
function getTotalFamilyIncomePostChange(obsID)
{
	return (getTotalFamilyIncomePreChange(obsID) - getTotalSalaryEarnedPreChange(obsID) + getTotalSalaryEarnedPostChange(obsID));
}


// getMedicaidEligiblePreChange - AS
function getMedicaidEligiblePreChange(obsID)
{
	if( ((getTotalFamilyIncomePreChange(obsID) / povertLine[obsID]) * 100 ) < medicaidCutoff[stateID-1] )
	{
		return true;
	} else {
		return false;
	}
}


// getMedicaidEligiblePostChange - AT
function getMedicaidEligiblePostChange(obsID)
{
	if( ((getTotalFamilyIncomePostChange(obsID) / povertLine[obsID]) * 100 ) < medicaidCutoff[stateID-1] )
	{
		return true;
	} else {
		return false;
	}
}




// getKickedOffMedicaid - Sample Post AV
function getKickedOffMedicaid(obsID)
{
	var kickedOff = 0;

	if(onMedicaid[obsID] == 1) // onMedicaid
	{
		if( !(getMedicaidEligiblePreChange(obsID)) ) // onMedicaid, not PRE, on/off POST
		{
			kickedOff = 1;
		} else if ( !(getMedicaidEligiblePostChange(obsID)) ) // on TANF, on PRE, not POST
		{
			kickedOff = 1;
		}
	} 
	
	return (kickedOff);	
}




// getSumKickedOffMedicaid - AV130
function getSumKickedOffMedicaid()
{
	var sumKickedOff = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumKickedOff += getKickedOffMedicaid(obsID);
	}
	
	return (sumKickedOff);
}


// getMedicaidSavingsCurrentWorkers - AX
function getMedicaidSavingsCurrentWorkers(obsID)
{
	return ( getKickedOffMedicaid(obsID) * ( (2000  * numAdults[obsID]) + (1000 * numChildren[obsID]) ) );
}

// getSumMedicaidSavingsCurrentWorkers - AX130
function getSumMedicaidSavingsCurrentWorkers()
{
	var sumMedicaidSavings = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumMedicaidSavings += getMedicaidSavingsCurrentWorkers(obsID);
	}
	
	return (sumMedicaidSavings);
}


// getSumKids - SUM BP 4 - 138
function getSumKids()
{
	var sumChildren = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumChildren += numChildren[obsID];
	}
	
	return (sumChildren);
}

// getSumAdults - SUM BR 4 - 138
function getSumAdults()
{
	var sumAdults = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumAdults += numAdults[obsID];
	}
	
	return (sumAdults);
}



// getMedicaidSavingsOriginalSample - AZ136
function getMedicaidSavingsOriginalSample()
{
	return ( getSumMedicaidSavingsCurrentWorkers() * getPreChangeWeight() );
}


// getMedicaidSavingsNewWorkersSample - BA136
function getMedicaidSavingsNewWorkersSample()
{
	return ( (getPostChangeWeight() - getPreChangeWeight()) * 0.5 * ( (1000 * getSumKids()) + (2000 * getSumAdults()) ) );
}

// getTotalMedicaidSavings - BB136
function getWorkerBasedMedicaidSavings()
{
	return ( getMedicaidSavingsOriginalSample() + getMedicaidSavingsNewWorkersSample() );
}


// getTotalMedicaidSavings - BB136
function getTotalMedicaidSavings()
{
	return ( getTANFBasedSavings() + getWorkerBasedMedicaidSavings() );
}

// getMatchFundsLostBySavings - State Data D53
function getMatchFundsLostBySavings()
{
	return ( federalMatchRate * getTotalMedicaidSavings() );
}

// getCountyMatchFundsLostBySavings - State Data D59
function getCountyMatchFundsLostBySavings()
{
	return ( countyMatchRate * getTotalMedicaidSavings() );
}



// getN142 - Sample Post N142
function getN142()
{
	return ( getSumTotalSalaryEarnedPreChange() * getPreChangeWeight() );
}


// getO142 - Sample Post O142
function getO142()
{
	return ( getSumTotalSalaryEarnedPostChange() * getPostChangeWeight() );
}


// getIncomeChange - Sample Post O143
function getIncomeChange()
{
	return ( getO142() - getN142());
}


// getStateRevenueIncrease - State Data D117
function getStateRevenueIncrease()
{
	return ( (salesTax[stateID-1] / 100 ) * consumptionIncomeRatio * getIncomeChange() );
}


// getTANFSavingsOriginalSample - AN136
function getTANFSavingsOriginalSample()
{
	return ( getSumKickedOffTANF() * tanfFamily[stateID-1] );
}


// getTANFSavingsNewWorkers - AN138
function getTANFSavingsNewWorkers()
{
	return ( 0.3 * ( getPostChangeWeight() - getPreChangeWeight() ) * tanfFamily[stateID-1] * 125 );
}


// getTotalTANFSavings - AN140
function getTotalTANFSavings()
{
	return ( getTANFSavingsOriginalSample() + getTANFSavingsNewWorkers() );
}

// getFederalMatchFundsLostTANF - State Data  D68
function getFederalMatchFundsLostTANF()
{
	return ( ( getTotalTANFSavings() * federalMatchRate ) + getCountyMatchFundsLostTANF() );
}

// getCountyMatchFundsLostTANF - State Data  D75
function getCountyMatchFundsLostTANF()
{
	return ( getTotalTANFSavings() * countyMatchRate );
}






// GRAND TOTAL: TOTAL NET COST TO STATE - B79
function getTotalNetCosttoState()
{
	return ( getTotalNetCosttoStateMedicaidProgram() - getOtherSavingsToState() );
}


// SUBTOTAL: OTHER SAVINGS TO STATE
function getOtherSavingsToState()
{
	return ( getStateRevenueIncrease() + getTotalTANFSavings() - getFederalMatchFundsLostTANF() );
}


// getStaffTurnoverCostsPreChange D47
function getStaffTurnoverCostsPreChange()
{
	return ( currentNumWorkers * ( 1 - retentionRate ) * turnoverCostsPerWorker );
}

// getStaffTurnoverCostsPostChange D48
function getStaffTurnoverCostsPostChange()
{
	return ( getProjectedNumDCWs() * ( 1 - getProjectedRetentionRate() ) * turnoverCostsPerWorker );
}


// getProjectedRetentionRate - D107
function getProjectedRetentionRate()
{
	return ( retentionRate + ( turnoverElasticity * getPercentageWageIncrease() ) );
}



// getSavingsFromReducedTurnoverCosts - D49
function getSavingsFromReducedTurnoverCosts()
{
	return ( getStaffTurnoverCostsPreChange() - getStaffTurnoverCostsPostChange() );
}



// getInPovertyPreChange - AD
function getInPovertyPreChange(obsID)
{
	if( getTotalFamilyIncomePreChange(obsID) < povertLine[obsID] )
	{
		return (1);
	} else {
		return (0);
	}
}

// getInPovertyPostChange - AE
function getInPovertyPostChange(obsID)
{
	if( getTotalFamilyIncomePostChange(obsID) < povertLine[obsID] )
	{
		return (1);
	} else {
		return (0);
	}
}


// getSumInPovertyPreChange - AD130
function getSumInPovertyPreChange()
{
	var sumInPre = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumInPre += getInPovertyPreChange(obsID);
	}
	
	return ( sumInPre );
}


// getSumInPovertyPostChange - AE130
function getSumInPovertyPostChange()
{
	var sumInPost = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumInPost += getInPovertyPostChange(obsID);
	}
	
	return ( sumInPost );
}


// getDifferenceInPoverty - AE131
function getDifferenceInPoverty()
{
	return ( getSumInPovertyPostChange() - getSumInPovertyPreChange() );
}

// getFamiliesLeavingPoverty - AE143
function getFamiliesLeavingPoverty()
{
	return ( -getDifferenceInPoverty() * getPostChangeWeight() );
}


// getChildrenInPovertyPreChange - AF
function getChildrenInPovertyPreChange(obsID)
{
	return ( getInPovertyPreChange(obsID) * numChildren[obsID] );
}


// getChildrenInPovertyPostChange - AF
function getChildrenInPovertyPostChange(obsID)
{
	return ( getInPovertyPostChange(obsID) * numChildren[obsID] );
}




// getSumChildrenInPovertyPreChange - AF130
function getSumChildrenInPovertyPreChange()
{
	var sumChildren = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumChildren += getChildrenInPovertyPreChange(obsID);
	}
	
	return ( sumChildren );
}



// getSumChildrenInPovertyPostChange - AG130
function getSumChildrenInPovertyPostChange()
{
	var sumChildren = 0;
	
	for (obsID = 0; obsID < 125; obsID++)
	{
		sumChildren += getChildrenInPovertyPostChange(obsID);
	}
	
	return ( sumChildren );
}

// getDifferenceInChildPoverty - AG131
function getFamiliesLeavingPoverty()
{
	return ( -getDifferenceInPoverty() * getPostChangeWeight() );
}


// getDifferenceInChildPoverty - AG131
function getDifferenceInChildPoverty()
{
	return ( getSumChildrenInPovertyPostChange() - getSumChildrenInPovertyPreChange() );
}

// getChildrenLeavingPoverty - AE146
function getChildrenLeavingPoverty()
{
	return ( getFamiliesLeavingPoverty() * 0.824 );
}


// getNumberOfInstitutionsAvoided - State Data D98
function getNumberOfInstitutionsAvoided()
{
	return ( newWorkers * avgClientsPerWorker * percentDivertedFromInstitutionalization );
}


// getNumberOfNewClientsServed - State Data D99
function getNumberOfNewClientsServed()
{
	return ( newWorkers * avgClientsPerWorker * ( 1 - percentDivertedFromInstitutionalization ) );
}



// getEffectiveMatchRate 
function getEffectiveMatchRate()
{
	return ( ( getTotalCostOfWagesForNewAndExistingWorkers() - getTotalNetCosttoState() ) / ( getTotalCostOfWagesForExistingWorkers() + getTotalCostOfWagesForNewWorkers() ) * 100);
}


// getIncreaseToStateGrossDomesticProduct - State Data D92
function getIncreaseToStateGrossDomesticProduct()
{
	return ( economicMultiplier * ( getFederalMatchPaymentsForNewWorkers() + getTotalCostToFederalForExistingWorkers() -  getTotalAnnualCostOfSavingsFromDiversiontoFederal() - getMatchFundsLostBySavings() - ( getFederalMatchFundsLostTANF() - getCountyMatchFundsLostTANF() ) ) );
}


























function roundtoHundreth(realNumber)
{
	realNumber = realNumber * 100;
	realNumber = Math.round(realNumber);
	realNumber = realNumber / 100;
	return (realNumber);
}



function checkParams(stateID,currentNumWorkers,increase)
{
	return true;
}


function setParams()
{
	document.calculator.assumed_elasticity.value = wageElasticity;
	document.calculator.clients_per_worker.value = avgClientsPerWorker;
	document.calculator.percent_diverted.value = percentDivertedFromInstitutionalization;
	document.calculator.turnover_per_worker.value = turnoverCostsPerWorker;
	document.calculator.change_rentention_rate.value = retentionRate;
	document.calculator.turnover_elasticity.value = turnoverElasticity;
	document.calculator.costs_new_workers.value = adminCostNewWorkers;
	document.calculator.costs_current_workers.value = adminCostCurrentWorkers;
	document.calculator.current_retention_rate.value = retentionRate;
}

function changeNumWorkers( newNumWorkers )
{
	document.calculator.num_workers.value = newNumWorkers;
	document.calculator.induced_num_workers.value = newNumWorkers;
	document.calculator.turnover_num_workers.value = newNumWorkers;
}

function recalculateNewWorkers( $new_currentRate,$new_increase,$new_wageElasticity,$new_numCurrentWorkers )
{
	document.calculator.new_workers.value = (Math.round( ($new_increase / $new_currentRate) * $new_wageElasticity * $new_numCurrentWorkers));
	document.calculator.savings_new_workers.value = document.calculator.new_workers.value;
	//alert($new_increase + "\n" + $new_currentRate + "\n" + $new_wageElasticity + "\n" + $new_numCurrentWorkers);
}

function changeWageIncrease( currentFigure, newWageFigure )
{
	document.calculator.input_percentage_increase.value = Math.round( ( newWageFigure / currentFigure ) * 100);
}

function changeMatchRates( fedMatch,stateMatch,countyMatch )
{
	document.calculator.state_match.value = roundtoHundreth( 100 - (fedMatch*1 + countyMatch*1) );
}


function changeParams( stateID, currentWage, increase, assumed_elasticity, num_workers )
{
	if (stateID != 0)
	{
		document.calculator.fed_match.value = match1[stateID-1];
		document.calculator.state_match.value = roundtoHundreth( 100 - match1[stateID-1] );
		document.calculator.currentWage.value = currentStateWage[stateID-1];
		document.calculator.average_nh_cost.value = Math.round( nursinghomeCost[stateID-1] );
		document.calculator.i_projected_retention.value = roundtoHundreth( retentionRate + ( turnoverElasticity * ( increase / currentStateWage[stateID-1] ) ) ); 
		
		if(increase){}else{increase = 0};
		if(num_workers){}else{num_workers = 0};
		
		
		recalculateNewWorkers( currentStateWage[stateID-1], increase, assumed_elasticity, num_workers );
		
		//alert(currentStateWage[stateID-1] + "," + increase + "," + assumed_elasticity + "," + num_workers);
		
	} else {
		alert ("You must choose a state.");
	}
}
//-->
