// initialize variables

var BaseYear = 2007
var $G$7 = .025;
var $G$8 = .01;
var $G$9 = .85
var $G$10 = .1264
var $G$12 = 3000
var $G$14 = 97500

// Arrays used to display results on Web Page
var BaseSalary_Current = new Array(9);
var BaseSalary_Proposed = new Array(9);
var COLA_Current = new Array(9);
var COLA_Proposed = new Array(9);
var LocalityPay_Current = new Array(9);
var LocalityPay_Proposed = new Array(9);
var TotalPay_Current = new Array(9);
var TotalPay_Proposed = new Array(9);
var	TaxableIncome_Current = new Array(9)
var	TaxableIncome_Proposed = new Array(9)
var IncreaseOverCOLA_Current = new Array(9);
var IncreaseOverCOLA_Proposed = new Array(9);
var TaxRetCredit_Current = new Array(9);
var TaxRetCredit_Proposed = new Array(9);
var BiWeeklyNetCSRS_Current = new Array(9);
var BiWeeklyNetCSRS_Proposed = new Array(9);
var BiWeeklyNetFERS_Current = new Array(9);
var BiWeeklyNetFERS_Proposed = new Array(9);
var NetIncreaseCSRS_Current = new Array(9);
var NetIncreaseCSRS_Proposed = new Array(9);
var NetIncreaseFERS_Current = new Array(9);
var NetIncreaseFERS_Proposed = new Array(9);
var High3_Current = new Array(9);
var High3_Proposed = new Array(9);

// initialize Arrays
for (i=2007; i<2015; i++){
	BaseSalary_Current[i] = 0;
	BaseSalary_Proposed[i] = 0;

	COLA_Current[i] = 0;
	COLA_Proposed[i] = 0;

	LocalityPay_Current[i] = 0;
	LocalityPay_Proposed[i] = 0;

	TotalPay_Current[i] = 0;
	TotalPay_Proposed[i] = 0;
	
	TaxableIncome_Current[i] = 0;
	TaxableIncome_Proposed[i] = 0;
	
	IncreaseOverCOLA_Current[i] = 0;
	IncreaseOverCOLA_Proposed[i] = 0;

	TaxRetCredit_Current[i] = 0;
	TaxRetCredit_Proposed[i] = 0;

	BiWeeklyNetCSRS_Current[i] = 0;
	BiWeeklyNetCSRS_Proposed[i] = 0;

	BiWeeklyNetFERS_Current[i] = 0;
	BiWeeklyNetFERS_Proposed[i] = 0;

	NetIncreaseCSRS_Current[i] = 0;
	NetIncreaseCSRS_Proposed[i] = 0;

	NetIncreaseFERS_Current[i] = 0;
	NetIncreaseFERS_Proposed[i] = 0;

	High3_Current[i] = 0;
	High3_Proposed[i] = 0;
}

function stripNonNumeric( str ){  
	str += '';  
	var rgx = /^\d|\.|-$/;  
	var out = '';  
	for( var i = 0; i < str.length; i++ ){
	    if( rgx.test( str.charAt(i) ) ){
		    if( !( ( str.charAt(i) == '.' && out.indexOf( '.' ) != -1 ) ||
			         ( str.charAt(i) == '-' && out.length != 0 ) ) ){
					         out += str.charAt(i);
			}
		}
	}
	return out;
}
function ProcessForm() {
	BP = stripNonNumeric( document.getElementById('BasePay').value )
	CR = document.getElementById('ColaRate').value
	LR = document.getElementById('LocalityRate').value
	BasePay_Update(BP, CR, LR); 
	return false;
}
 

function BasePay_Update(BasePay, ColaRate , LocalityRate) {
	if (ColaRate > 25)alert('The Current COLA Rage cannot exceed 25%')
	else{
		if (LocalityRate == "") alert('Select a Locality from the Dropdown list.')
		else{
			ColaRate = ColaRate/100
			for (i=2007; i<2015; i++){
				if (i<2009){LocPayIncrement = $G$10
				}else{LocPayIncrement = +LocalityRate
				}
				if (i == 2007) {
					BaseSalary_Current[i]= +BasePay
					BaseSalary_Proposed[i]= +BasePay
					LocalityPay_Current[i] = 0
					LocalityPay_Proposed[i] = 0
					COLA_Current[i] = BaseSalary_Current[i] * ColaRate
					COLA_Proposed[i] = 0
					TotalPay_Current[i] = BaseSalary_Current[i] + COLA_Current[i] 
					TotalPay_Proposed[i] = 0
					IncreaseOverCOLA_Current[i] = 0
					IncreaseOverCOLA_Proposed[i] = 0
					
					TaxableIncome_Current[i] = BaseSalary_Current[i] 
					TaxableIncome_Proposed[i] = 0
					
					BiWeeklyNetCSRS_Current[i] = Math.round(((TotalPay_Current[i] - (TaxDue(TaxableIncome_Current[i]) + TaxableIncome_Current[i] * .0145 + TaxableIncome_Current[i] * .07))/2087)*80)
					BiWeeklyNetCSRS_Proposed[i] = 0
					
					BiWeeklyNetFERS_Current[i] = Math.round((((TotalPay_Current[i] - (TaxDue(TaxableIncome_Current[i])    + TaxableIncome_Current[i] * .0145  + 0.062 * Math.min(97500+(i-2007)*$G$12, TaxableIncome_Current[i])  + 0.008 * TaxableIncome_Current[i] )))/2087)*80)
					BiWeeklyNetFERS_Proposed[i] = 0
		
					NetIncreaseCSRS_Current[i] = Math.round(BiWeeklyNetCSRS_Current[i] - BiWeeklyNetCSRS_Current[i-1] )
					NetIncreaseCSRS_Proposed[i] = 0
					
					NetIncreaseFERS_Current[i] = Math.round(BiWeeklyNetFERS_Current[i] - BiWeeklyNetFERS_Current[i-1])
					NetIncreaseFERS_Proposed[i] = 0
		
					High3_Current[i] = TaxableIncome_Current[i] 
					High3_Proposed[i] = 0;
						
				}else{
					BaseSalary_Current[i] = Math.round(BaseSalary_Current[i-1] * (1 + $G$7))
					BaseSalary_Proposed[i] = Math.round(BaseSalary_Proposed[i-1] * (1 + $G$7))
				
					// note - LocalityPay_--- must be calculated BEFORE COLAA_---
					LocalityPay_Current[i] = 0
					LocalityPay_Proposed[i] = Math.round(+BaseSalary_Proposed[i] * ( LocPayIncrement + (i-2008)*$G$8 ) * ((i-2007)/7))
				
					COLA_Current[i]= Math.round(BaseSalary_Current[i] * ColaRate)
					COLA_Proposed[i]= Math.round(Math.max(BaseSalary_Proposed[i] * ColaRate - LocalityPay_Proposed[i]*$G$9,0))
		
					TotalPay_Current[i] = Math.round(BaseSalary_Current[i] + COLA_Current[i] + LocalityPay_Current[i] )
					TotalPay_Proposed[i] = Math.round(BaseSalary_Proposed[i] + COLA_Proposed[i] + LocalityPay_Proposed[i] )
					
					IncreaseOverCOLA_Current[i] = '' 
					IncreaseOverCOLA_Proposed[i] = TotalPay_Proposed[i] - TotalPay_Current[i]
					 
					TaxableIncome_Current[i] = BaseSalary_Current[i] + LocalityPay_Current[i]
					TaxableIncome_Proposed[i] = BaseSalary_Proposed[i] + LocalityPay_Proposed[i]
					
					BiWeeklyNetCSRS_Current[i] = Math.round(((TotalPay_Current[i] - (TaxDue(TaxableIncome_Current[i]) + TaxableIncome_Current[i] * .0145 + TaxableIncome_Current[i] * .07))/2087)*80)
					BiWeeklyNetCSRS_Proposed[i] = Math.round(((TotalPay_Proposed[i] - (TaxDue(TaxableIncome_Proposed[i]) + TaxableIncome_Proposed[i] * .0145 + TaxableIncome_Proposed[i] * .07))/2087)*80)
					
					BiWeeklyNetFERS_Current[i] = Math.round((((TotalPay_Current[i] -(TaxDue(TaxableIncome_Current[i]) + TaxableIncome_Current[i] * .0145  + 0.062 * Math.min(97500+(i-2007)*$G$12, TaxableIncome_Current[i])  + 0.008 * TaxableIncome_Current[i] )))/2087)*80)
					BiWeeklyNetFERS_Proposed[i] = Math.round((((TotalPay_Proposed[i] - (TaxDue(TaxableIncome_Proposed[i]) + TaxableIncome_Proposed[i] * .0145 + 0.062 * Math.min(97500+(i-2007)*$G$12, TaxableIncome_Proposed[i]) + 0.008 * TaxableIncome_Proposed[i])))/2087)*80)
	
					if (i == 2008) {
						NetIncreaseCSRS_Current[i] = BiWeeklyNetCSRS_Current[i] - BiWeeklyNetCSRS_Current[i-1] 
						NetIncreaseCSRS_Proposed[i] = BiWeeklyNetCSRS_Proposed[i] - BiWeeklyNetCSRS_Current[i-1] 
						
						NetIncreaseFERS_Current[i] = BiWeeklyNetFERS_Current[i] - BiWeeklyNetFERS_Current[i-1] 
						NetIncreaseFERS_Proposed[i] = BiWeeklyNetFERS_Proposed[i] - BiWeeklyNetFERS_Current[i-1] 
					}else{
						NetIncreaseCSRS_Current[i] = BiWeeklyNetCSRS_Current[i] - BiWeeklyNetCSRS_Current[i-1] 
						NetIncreaseCSRS_Proposed[i] = BiWeeklyNetCSRS_Proposed[i] - BiWeeklyNetCSRS_Proposed[i-1] 
						
						NetIncreaseFERS_Current[i] = BiWeeklyNetFERS_Current[i] - BiWeeklyNetFERS_Current[i-1] 
						NetIncreaseFERS_Proposed[i] = BiWeeklyNetFERS_Proposed[i] - BiWeeklyNetFERS_Proposed[i-1] 
					}
					
					switch (i){
						case 2008:
							High3_Current[i] = (TaxableIncome_Current[i-1] + TaxableIncome_Current[i-1] + TaxableIncome_Current[i])/3
							High3_Proposed[i] = (TaxableIncome_Current[i-1] + TaxableIncome_Current[i-1] + TaxableIncome_Proposed[i])/3
							break;
						case 2009:
							High3_Current[i] = (TaxableIncome_Current[i-2] + TaxableIncome_Current[i-1] + TaxableIncome_Current[i])/3
							High3_Proposed[i] = (TaxableIncome_Current[i-2] + TaxableIncome_Proposed[i-1] + TaxableIncome_Proposed[i])/3
							break;
						default:
							High3_Current[i] = (TaxableIncome_Current[i-2] + TaxableIncome_Current[i-1] + TaxableIncome_Current[i])/3
							High3_Proposed[i] = (TaxableIncome_Proposed[i-2] + TaxableIncome_Proposed[i-1] + TaxableIncome_Proposed[i])/3
							break;
					}
				}
				ReportIt(i)
			}
		}
	}
}

function ReportIt(i){
	// Report results to "Current Table"
	document.getElementById('CurrentSalary-'+i).innerHTML =  formatCurrency(BaseSalary_Current[i])
	document.getElementById('CurrentLocalityPay-'+i).innerHTML =  formatCurrency(LocalityPay_Current[i])
	document.getElementById('CurrentCOLA-'+i).innerHTML =  formatCurrency(COLA_Current[i])
	document.getElementById('CurrentTotalPay-'+i).innerHTML =  formatCurrency(TotalPay_Current[i] )
	document.getElementById('CurrentIncrease-'+i).innerHTML =  formatCurrency(IncreaseOverCOLA_Current[i]) 
	document.getElementById('CurrentTaxCredit-'+i).innerHTML =  formatCurrency(TaxableIncome_Current[i])
	document.getElementById('CurrentNetCSRS-'+i).innerHTML =  formatCurrency(BiWeeklyNetCSRS_Current[i])
	document.getElementById('CurrentNetFERS-'+i).innerHTML =  formatCurrency(BiWeeklyNetFERS_Current[i])
	document.getElementById('CurrentNetIncrPriorYrCSRS-'+i).innerHTML = formatCurrency(NetIncreaseCSRS_Current[i])
	document.getElementById('CurrentNetIncrPriorYrFERS-'+i).innerHTML = formatCurrency(NetIncreaseFERS_Current[i])
	document.getElementById('CurrentHigh3-'+i).innerHTML = formatCurrency(High3_Current[i])
	// Report results to "Proposed Table"
	document.getElementById('ProposedSalary-'+i).innerHTML =  formatCurrency(BaseSalary_Proposed[i])
	document.getElementById('ProposedLocalityPay-'+i).innerHTML =  formatCurrency(LocalityPay_Proposed[i])
	document.getElementById('ProposedCOLA-'+i).innerHTML =  formatCurrency(COLA_Proposed[i])
	document.getElementById('ProposedTotalPay-'+i).innerHTML =  formatCurrency(TotalPay_Proposed[i])
	document.getElementById('ProposedIncrease-'+i).innerHTML =  formatCurrency(IncreaseOverCOLA_Proposed[i]) 
	document.getElementById('ProposedTaxCredit-'+i).innerHTML =  formatCurrency(TaxableIncome_Proposed[i])
	document.getElementById('ProposedNetCSRS-'+i).innerHTML =  formatCurrency(BiWeeklyNetCSRS_Proposed[i])
	document.getElementById('ProposedNetFERS-'+i).innerHTML =  formatCurrency(BiWeeklyNetFERS_Proposed[i])
	document.getElementById('ProposedNetIncrPriorYrCSRS-'+i).innerHTML = formatCurrency(NetIncreaseCSRS_Proposed[i])
	document.getElementById('ProposedNetIncrPriorYrFERS-'+i).innerHTML = formatCurrency(NetIncreaseFERS_Proposed[i])
	document.getElementById('ProposedHigh3-'+i).innerHTML = formatCurrency(High3_Proposed[i])	
}

function clearTable() {
	for (i=2007; i<2015; i++){
		// Clear results from "Current Table"
		document.getElementById('CurrentSalary-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentLocalityPay-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentCOLA-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentTotalPay-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentIncrease-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentTaxCredit-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentNetCSRS-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentNetFERS-'+i).innerHTML =  "&nbsp;"
		document.getElementById('CurrentNetIncrPriorYrCSRS-'+i).innerHTML = "&nbsp;"
		document.getElementById('CurrentNetIncrPriorYrFERS-'+i).innerHTML = "&nbsp;"
		document.getElementById('CurrentHigh3-'+i).innerHTML = "&nbsp;"
		// Clear results from "Proposed Table"
		document.getElementById('ProposedSalary-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedLocalityPay-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedCOLA-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedTotalPay-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedIncrease-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedTaxCredit-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedNetCSRS-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedNetFERS-'+i).innerHTML =  "&nbsp;"
		document.getElementById('ProposedNetIncrPriorYrCSRS-'+i).innerHTML = "&nbsp;"
		document.getElementById('ProposedNetIncrPriorYrFERS-'+i).innerHTML = "&nbsp;"
		document.getElementById('ProposedHigh3-'+i).innerHTML = "&nbsp;"
	}
}

function TaxDue(TotalPay) {
	TaxTable = new Array(6)
	for (a=0;a< TaxTable.length; a++) TaxTable[a]= new Array(4)
	TaxTable[0][0] = 0
	TaxTable[0][1] = 0
	TaxTable[0][2] = 0
	TaxTable[0][3] = 0
	TaxTable[1][0] = 16000
	TaxTable[1][1] = 7550
	TaxTable[1][2] = 755
	TaxTable[1][3] = .15
	TaxTable[2][0] = 39100
	TaxTable[2][1] = 30650
	TaxTable[2][2] = 4220
	TaxTable[2][3] = .25
	TaxTable[3][0] = 82650
	TaxTable[3][1] = 74200
	TaxTable[3][2] = 15107.5
	TaxTable[3][3] = .28
	TaxTable[4][0] = 163250
	TaxTable[4][1] = 154800
	TaxTable[4][2] = 37675.5
	TaxTable[4][3] = .33
	TaxTable[5][0] = 999999999999
	TaxTable[5][1] = 154800
	TaxTable[5][2] = 37675.5
	TaxTable[5][3] = .33
	TotalTax=0
	StandardDeduction = 8450
	for (n=1; n<6; n++){
		if ((TotalPay <= TaxTable[n][0]) && (TotalPay > TaxTable[(n-1)][0])){
			AGI = TotalPay - StandardDeduction
			BracketFloor = TaxTable[(n-1)][1]
			BaseTax = TaxTable[(n-1)][2]
			MarginalRate = TaxTable[(n-1)][3]
			AddedTax = (AGI - BracketFloor) * MarginalRate
			TotalTax = BaseTax + AddedTax
		}
	}
	return  TotalTax
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	//	return (((sign)?'':'-') + '$' + num + '.' + cents);
	if (num == "0") {
		return num = "&nbsp;&nbsp;&nbsp; "
	}else{
		return (((sign)?'':'-') + '$' + num );
	}
}


