// requires prior inclusion of WithholdingTableRow.js
var Calculators = Calculators || {};
Calculators.tax = Calculators.tax || {};

Calculators.tax.WithholdingTable = function WithholdingTable(filingStatus) {
	this.table = new Array();
	if(filingStatus == "single") {
		for(var i = 0; i < Calculators.tax.CurrentYearTaxData.SINGLE_TABLE.length; i++) {
			this.table.push(new Calculators.tax.WithholdingTableRow(Calculators.tax.CurrentYearTaxData.SINGLE_TABLE[i]))
		}
	}
	else {
		for(var i = 0; i < Calculators.tax.CurrentYearTaxData.MARRIED_TABLE.length; i++) {
			this.table.push(new Calculators.tax.WithholdingTableRow(Calculators.tax.CurrentYearTaxData.MARRIED_TABLE[i]))
		}		
	}
	
	this.getFederalWithholding = function(annualGross, allowances) {
		var totalAllowance = allowances * Calculators.tax.CurrentYearTaxData.PERSONAL_ALLOWANCE;
		var taxableIncome = (annualGross - totalAllowance > 0) ? annualGross - totalAllowance : 0;
		var federalWithholdingAmount = 0.00;
		for (var i = 0; i < this.table.length; i++) {
			var tableRow = this.table[i];
			if(taxableIncome > tableRow.getWages()) {
				federalWithholdingAmount = ((taxableIncome - tableRow.getWages()) * tableRow.getWithholdingRate()) + tableRow.getWithholdingAmount();
			} else {
				break;
			}																		
		}
		return federalWithholdingAmount;
	}
}