/*********************************************************
   2009 Individual Income Tax Calculation
   usage:  federalTax = calcSingle( taxableincome );
   usage:  federalTax = calcMarried( taxableincome );
	 usage:  federalTax = calcFederalTax( taxableIncome, married );
	 Copyright 2010 Mark E. Gunnison
  *********************************************************/

function calcFederalTax( taxableIncome, married )
{
var fedTax = 0;


 			if (married == 1)
			 	fedTax = calcMarried( taxableIncome );
			else
				fedTax = calcSingle( taxableIncome );

			return (fedTax);
}	
	
	
function calcSingle( taxableIncomeR )
{
   var fedTax = 0;
	 
	 
	 var brac10 = 8350;
	 var brac15 = 33950;
	 var brac25 = 82250;
	 var brac28 = 171550;
	 var brac33 = 372950;
	 var add15 = 835.0;
	 var add25 = 4675.00;
	 var add28 = 16750.00;
	 var add33 = 41754.00;
	 var add35 = 108216.00;
	 

     taxableIncomeR = roundIncome(taxableIncomeR);

     if (taxableIncomeR<brac10)
          fedTax = taxableIncomeR*.10;

     if (taxableIncomeR>=brac10 && taxableIncomeR<brac15)
          fedTax = ((taxableIncomeR-brac10)*.15)+add15;
			  
     if (taxableIncomeR>=brac15 && taxableIncomeR<brac25)
          fedTax = ((taxableIncomeR-brac15)*.25)+add25;

     if (taxableIncomeR>=brac25 && taxableIncomeR<brac28)
          fedTax = ((taxableIncomeR-brac25)*.28)+add28;

     if (taxableIncomeR>=brac28 && taxableIncomeR<brac33)
          fedTax = ((taxableIncomeR-brac28)*.33)+add33;

     if (taxableIncomeR>=brac33)
          fedTax = ((taxableIncomeR-brac33)*.35)+add35;

     if (fedTax < 0)
          fedTax = 0;

     fedTax = Math.round(fedTax);
		 
		 return( fedTax );
}

function calcMarried( taxableIncomeR )
{

  var fedTax = 0;

	 var brac10 = 16700;
	 var brac15 = 67900;
	 var brac25 = 137050;
	 var brac28 = 208850;
	 var brac33 = 372950;
	 var add15 = 1670;
	 var add25 = 9350.0;
	 var add28 = 26637.50;
	 var add33 = 46741.50;
	 var add35 = 100894.50;
	
	
     taxableIncomeR = roundIncome(taxableIncomeR);

     if (taxableIncomeR<brac10)
          fedTax = taxableIncomeR*.10;

     if (taxableIncomeR>=brac10 && taxableIncomeR<brac15)
          fedTax = ((taxableIncomeR-brac10)*.15)+add15;
			  
     if (taxableIncomeR>=brac15 && taxableIncomeR<brac25)
          fedTax = ((taxableIncomeR-brac15)*.25)+add25;

     if (taxableIncomeR>=brac25 && taxableIncomeR<brac28)
          fedTax = ((taxableIncomeR-brac25)*.28)+add28;

     if (taxableIncomeR>=brac28 && taxableIncomeR<brac33)
          fedTax = ((taxableIncomeR-brac28)*.33)+add33;

     if (taxableIncomeR>=brac33)
          fedTax = ((taxableIncomeR-brac33)*.35)+add35;
			  
     if (fedTax < 0)
          fedTax = 0;

     fedTax = Math.round(fedTax);
		 
		 
 		 return( fedTax );
}

/***************** Round to amount used by the IRS in their table ************************/
function roundIncome(taxableIncomeR)
{
var taxableIncome = 0;
taxableIncome = taxableIncomeR;


        if (taxableIncome<3000 && taxableIncome>0)       //use IRS rounding for table
	{

                taxableIncomeR = Math.floor(taxableIncome/100);  // round to 100
                taxableIncomeR = taxableIncomeR*100;

                if (taxableIncome - taxableIncomeR < 25)
                        taxableIncomeR += 13;
                if (taxableIncome - taxableIncomeR >= 25 && taxableIncome - taxableIncomeR < 50)
                        taxableIncomeR += 38;
                if (taxableIncome - taxableIncomeR >= 50 && taxableIncome - taxableIncomeR < 75)
                        taxableIncomeR += 63;
                if (taxableIncome - taxableIncomeR >= 75 && taxableIncome - taxableIncomeR < 100)
                        taxableIncomeR += 88;

	}


        if (taxableIncome<100000 && taxableIncome>=3000)       //use IRS rounding for table
	{

                taxableIncomeR = Math.floor(taxableIncome/100);  // round to 100
                taxableIncomeR = taxableIncomeR*100;

                if (taxableIncome - taxableIncomeR < 50)
			taxableIncomeR += 25;
		else	
			taxableIncomeR += 75;
	}

	return( taxableIncomeR );
	
}

