/* ============================================================
 *	Set initial value of the parameters
 * ============================================================*/

function setinitvalue() {
  document.getElementById('yearlyincome').value = 25000;
  document.getElementById('homevalue').value = 150000;
//  document.getElementById('student').value = 0;
  document.getElementById('self-employed').value = 0;
  document.getElementById('seniorcitizen').value = 0;
  document.getElementById('nosalestax').value = 1000;
  document.getElementById('gdppc').value = 40100;
  document.getElementById('gsppc').value = 43100;
  document.getElementById('capitalgains').value = 0;
  document.getElementById('phonebill').value = 40.00;
  document.getElementById('annualmiles').value = 30000;
  document.getElementById('mileage').value = 10;
  document.getElementById('cigarettepacks').value = 0;
  document.getElementById('spiritbottles').value = 10;
  document.getElementById('gallonsperspiritbottle').value = 0.19813;
  document.getElementById('winebottles').value = 10;
  document.getElementById('gallonsperwinebottle').value = 0.19813;
  document.getElementById('sixpacks').value = 10;
  document.getElementById('gallonspersixpack').value = 1.125;

  document.getElementById('federalsstaxrate').value = 6.2;
  document.getElementById('federalsstaxrate-self').value = 12.40;
  document.getElementById('federalsstaxcap').value = 90000;
  document.getElementById('federalmedicaretaxrate').value = 1.45;
  document.getElementById('federalmedicaretaxrate-self').value = 2.90;
  document.getElementById('federalcorporateincometaxrate').value = 40;
  document.getElementById('federalphonerecovery').value = 2.00;
  document.getElementById('federalphone911').value = 1.20;
  document.getElementById('federalphoneexcisetaxrate').value = 3.3;
  document.getElementById('statesalestaxrate').value = 4.00;
  document.getElementById('statecorporateincometaxrate').value = 7.5;
  document.getElementById('statedisabilitytaxrate').value = 0.50;
  document.getElementById('statephonerecovery').value = 1.00;
  document.getElementById('stategastaxrate').value = 0.2265;
  document.getElementById('statecigarettetaxrate').value = 1.50;
  document.getElementById('statespiritstaxrate').value = 6.44;
  document.getElementById('statewinetaxrate').value = 0.19;
  document.getElementById('statebeertaxrate').value = 0.11;
  document.getElementById('localsalestaxrate').value = 4.00;
  document.getElementById('localpropertytaxrate').value = 20.391;
  document.getElementById('localpropertytaxded').value = 30000;
  document.getElementById('localpropertytaxdedsenior').value = 50000;
  document.getElementById('localschooltaxrate').value = 18.98;

  someID = setInterval("getTaxes()", 1000);
}

/* ============================================================
 *	Get Freedom Date
 * ============================================================*/
function getFreedomDate(taxpercentage) {
  var dayofyear = Math.round(taxpercentage*365);
  var monthname=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

  if(dayofyear == 0) { dayofyear = 1; }

  if(dayofyear >= 1 && dayofyear <= 31) {
    daystring = monthname[0] + ' ' + String(dayofyear-0);
  } else if(dayofyear >= 32 && dayofyear <= 59) {
    daystring = monthname[1] + ' ' + String(dayofyear-31);
  } else if(dayofyear >= 60 && dayofyear <= 90) {
    daystring = monthname[2] + ' ' + String(dayofyear-59);
  } else if(dayofyear >= 91 && dayofyear <= 120) {
    daystring = monthname[3] + ' ' + String(dayofyear-90);
  } else if(dayofyear >= 121 && dayofyear <= 151) {
    daystring = monthname[4] + ' ' + String(dayofyear-120);
  } else if(dayofyear >= 152 && dayofyear <= 181) {
    daystring = monthname[5] + ' ' + String(dayofyear-151);
  } else if(dayofyear >= 182 && dayofyear <= 212) {
    daystring = monthname[6] + ' ' + String(dayofyear-181);
  } else if(dayofyear >= 213 && dayofyear <= 243) {
    daystring = monthname[7] + ' ' + String(dayofyear-212);
  } else if(dayofyear >= 244 && dayofyear <= 273) {
    daystring = monthname[8] + ' ' + String(dayofyear-243);
  } else if(dayofyear >= 274 && dayofyear <= 304) {
    daystring = monthname[9] + ' ' + String(dayofyear-273);
  } else if(dayofyear >= 305 && dayofyear <= 334) {
    daystring = monthname[10] + ' ' + String(dayofyear-304);
  } else {
    daystring = monthname[11] + ' ' + String(dayofyear-334);
  }

  return daystring;
}

/* ============================================================
 *	Return Taxes
 * ============================================================*/
function getTaxes() {
  //  get parameters
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var selfemployed = parseInt(document.getElementById('self-employed').value);
  var gdppc = parseFloat(document.getElementById('gdppc').value);
  var gsppc = parseFloat(document.getElementById('gsppc').value);

  // calculate taxes
  var federalincometax = getFederalIncomeTax();
  var federalsstax = getFederalSSTax();
  var federalsstaxded = getFederalSSTaxDed(federalsstax);
  var federalmedicaretax = getFederalMedicareTax();
  var federalmedicaretaxded = getFederalMedicareTaxDed(federalmedicaretax);
  var federalcapitalgainstax = getFederalCapitalGainsTax();
  var federalcorporateincometax = getFederalCorporateIncomeTax();
  var federalphonerecovery = getFederalPhoneRegulationRecovery();
  var federalphone911 = getFederalPhone911();
  var federalphoneexcisetax = getFederalPhoneExciseTax();
  var stateincometax = getStateIncomeTax();
  var statecorporateincometax = getStateCorporateIncomeTax();
  var statedisabilitytax = getStateDisabilityTax();
  var statephonerecovery = getStatePhoneRegulationRecovery();
  var stategastax = getStateGasTax();
  var statecigarettetax = getStateCigaretteTax();
  var statespiritstax = getStateSpiritsTax();
  var statewinetax = getStateWineTax();
  var statebeertax = getStateBeerTax();
  var localpropertytax = getLocalPropertyTax();
  var localpropertytaxded = getLocalPropertyTaxDed();
  var localschooltax = getLocalSchoolTax();

  var subtotaltax = federalincometax
                    + federalsstax
                    - federalsstaxded
                    + federalmedicaretax
/*                    - federalmedicaretaxded */
                    + federalcapitalgainstax
                    + federalphonerecovery
                    + federalphone911
                    + federalphoneexcisetax
                    + stateincometax
                    + statedisabilitytax
                    + statephonerecovery
                    + stategastax
                    + statecigarettetax
                    + statespiritstax
                    + statewinetax
                    + statebeertax
                    + localpropertytax
                    - localpropertytaxded
                    + localschooltax;
  var statesalestax = getStateSalesTax(subtotaltax);
  var localsalestax = getLocalSalesTax(subtotaltax);

  var totaltax = subtotaltax + statesalestax + localsalestax;
  var taxpercentage = totaltax/yearlyincome;
  var moneyleft = yearlyincome - totaltax;
  var freedomdate = getFreedomDate(taxpercentage);

  // result
  var result = document.getElementById('result').getElementsByTagName('em');
  var result_desc = document.getElementById('result').getElementsByTagName('div');

  result.item(0).firstChild.nodeValue = yearlyincome.toFixed(2);
  result_desc.item(0).firstChild.nodeValue = '';
  result.item(1).firstChild.nodeValue = federalincometax.toFixed(2);
  result_desc.item(1).firstChild.nodeValue = '';
  var ss_string_desc = '';
  var medicare_string_desc = '';
  if(!selfemployed) {
    ss_string_desc = 'PLUS ' + federalsstax.toFixed(2) + ' paid by your EMPLOYER. This is money you could be earning but that your employer must forfeit instead of giving it to you. These additional employer taxes are NOT included in the final calculation total.';
    medicare_string_desc = 'PLUS ' + federalmedicaretax.toFixed(2) + ' paid by your EMPLOYER. This is money you could be earning but that your employer must forfeit instead of giving it to you. These additional employer taxes are NOT included in the final calculation total.';
  }
  else {
    ss_string_desc = '  -' + federalsstaxded.toFixed(2) + ' deduction for being self-employed.';
/*    medicare_string_desc = '  -' + federalmedicaretaxded.toFixed(2) + ' deduction for being self-employed.';*/
  }
  result.item(2).firstChild.nodeValue = federalsstax.toFixed(2);
  result_desc.item(2).firstChild.nodeValue = ss_string_desc;
  result.item(3).firstChild.nodeValue = federalmedicaretax.toFixed(2);
  result_desc.item(3).firstChild.nodeValue = medicare_string_desc;
  var cg_string = federalcapitalgainstax.toFixed(2);
  if(federalcapitalgainstax != 0.00) {
    cg_string = cg_string + ' (calculated in addition to your income to find the capital gains tax bracket -- amount if asset held for one year)';
  }
  result.item(4).firstChild.nodeValue = cg_string;
  result_desc.item(4).firstChild.nodeValue = '';
  result.item(5).firstChild.nodeValue = '"' + federalcorporateincometax.toFixed(2) + '"';
  result_desc.item(5).firstChild.nodeValue = 'Computed from the Gross Domestic Product (GDP), which is normalized by the current population of the United States. This number is $' + gdppc.toFixed(2) + ' for 2005, the federal Gross Domestic Product per capita. This tax affects you directly if you own stock in any company, but always when you buy goods or services from ANY corporate enterprise. [You most likely do every day.] These taxes are passed down to you! This amount is NOT included in the final calculation total.';
  result.item(6).firstChild.nodeValue = federalphonerecovery.toFixed(2);
  result_desc.item(6).firstChild.nodeValue = '';
  result.item(7).firstChild.nodeValue = federalphone911.toFixed(2);
  result_desc.item(7).firstChild.nodeValue = '';
  result.item(8).firstChild.nodeValue = federalphoneexcisetax.toFixed(2);
  result_desc.item(8).firstChild.nodeValue = '';
  result.item(9).firstChild.nodeValue = stateincometax.toFixed(2);
  result_desc.item(9).firstChild.nodeValue = '';
  result.item(10).firstChild.nodeValue = statedisabilitytax.toFixed(2);
  result_desc.item(10).firstChild.nodeValue = '';
  result.item(11).firstChild.nodeValue = statesalestax.toFixed(2);
  result_desc.item(11).firstChild.nodeValue = '';
  result.item(12).firstChild.nodeValue = '"' + statecorporateincometax.toFixed(2) + '"';
  result_desc.item(12).firstChild.nodeValue = 'Computed from the Gross State Product (GSP), which is normalized by the current population of New York state. This number is $' + gsppc.toFixed(2) + ' for 2002, the state Gross Domestic Product per capita. This tax affects you directly if you own stock in any company, but always when you buy goods or services from ANY corporate enterprise. [You most likely do every day.] These taxes are passed down to you! This amount is NOT included in the final calculation total.';
  result.item(13).firstChild.nodeValue = statephonerecovery.toFixed(2);
  result_desc.item(13).firstChild.nodeValue = '';
  result.item(14).firstChild.nodeValue = stategastax.toFixed(2);
  result_desc.item(14).firstChild.nodeValue = '';
  result.item(15).firstChild.nodeValue = statecigarettetax.toFixed(2);
  result_desc.item(15).firstChild.nodeValue = '';
  result.item(16).firstChild.nodeValue = statespiritstax.toFixed(2);
  result_desc.item(16).firstChild.nodeValue = '';
  result.item(17).firstChild.nodeValue = statewinetax.toFixed(2);
  result_desc.item(17).firstChild.nodeValue = '';
  result.item(18).firstChild.nodeValue = statebeertax.toFixed(2);
  result_desc.item(18).firstChild.nodeValue = '';
  result.item(19).firstChild.nodeValue = localsalestax.toFixed(2);
  result_desc.item(19).firstChild.nodeValue = '';
  var pt_string_desc = '';
  var st_string_desc = '';
  if(localpropertytax == 0.0) {
    pt_string_desc = "Don't think that you are immune to property taxes just because you don't own property! Your landlord passes the tax burden on his land down to you in the form of your rent!";
    st_string_desc = "Don't think that you are immune to school taxes just because you don't own property! Your landlord passes the tax burden on his land down to you in the form of your rent!";
  }
  else {
    pt_string_desc = '  -' + localpropertytaxded.toFixed(2) + ' for NY state STAR exemption';
  }
  result.item(20).firstChild.nodeValue = localpropertytax.toFixed(2);
  result_desc.item(20).firstChild.nodeValue = pt_string_desc;
  result.item(21).firstChild.nodeValue = localschooltax.toFixed(2);
  result_desc.item(21).firstChild.nodeValue = st_string_desc;
  result.item(22).firstChild.nodeValue = totaltax.toFixed(2);
  result_desc.item(22).firstChild.nodeValue = '';

  result.item(23).firstChild.nodeValue = (taxpercentage*100).toFixed(1) + '%';
  result_desc.item(23).firstChild.nodeValue = '';
  result.item(24).firstChild.nodeValue = totaltax.toFixed(2);
  result_desc.item(24).firstChild.nodeValue = '';
  result.item(25).firstChild.nodeValue = moneyleft.toFixed(2);
  result_desc.item(25).firstChild.nodeValue = '';
  result.item(26).firstChild.nodeValue = freedomdate;
  result_desc.item(26).firstChild.nodeValue = '';

  
}

/* ============================================================
 *	Get Federal Income Tax
 * ============================================================*/
function getFederalIncomeTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);

  if(yearlyincome <= 6000) {
    var tax = 0.10*yearlyincome;
  } else if(yearlyincome <= 27950) {
    var tax = 600 + 0.15*(yearlyincome-6000);
  } else if(yearlyincome <= 67700) {
    var tax = 3892.50 + 0.27*(yearlyincome-27950);
  } else if(yearlyincome <= 141250) {
    var tax = 14625 + 0.30*(yearlyincome-67700);
  } else if(yearlyincome <= 307050) {
    var tax = 36690 + 0.35*(yearlyincome-141250);
  } else {
    var tax = 94720 + 0.386*(yearlyincome-307050);
  }

  return tax;
}

/* ============================================================
 *	Get Federal Capital Gains Tax
 * ============================================================*/
function getFederalCapitalGainsTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var capitalgains = parseFloat(document.getElementById('capitalgains').value);

  if(yearlyincome+capitalgains <= 6000) {
    var tax = 0.10*capitalgains;
  } else if(yearlyincome+capitalgains <= 27950) {
    var tax = 0.15*capitalgains;
  } else if(yearlyincome+capitalgains <= 67700) {
    var tax = 0.27*capitalgains;
  } else if(yearlyincome+capitalgains <= 141250) {
    var tax = 0.30*capitalgains;
  } else if(yearlyincome+capitalgains <= 307050) {
    var tax = 0.35*capitalgains;
  } else {
    var tax = 0.386*capitalgains;
  }

  return tax;
}

/* ============================================================
 *	Get Federal SS Tax
 * ============================================================*/
function getFederalSSTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var selfemployed = parseFloat(document.getElementById('self-employed').value);
  var taxcap = parseFloat(document.getElementById('federalsstaxcap').value);

  var taxable = (yearlyincome > taxcap) ? taxcap : yearlyincome;

  if(selfemployed) {
    var percentage = parseFloat(document.getElementById('federalsstaxrate-self').value);
  } else {
    var percentage = parseFloat(document.getElementById('federalsstaxrate').value);
  }

  return percentage/100*taxable;
}

/* ============================================================
 *	Get Federal SS Tax Deduction
 * ============================================================*/
function getFederalSSTaxDed(sstax) {
  var selfemployed = parseFloat(document.getElementById('self-employed').value);

  var deduction = (selfemployed) ? sstax/2 : 0.0;

  return deduction;
}

/* ============================================================
 *	Get Federal Medicare Tax
 * ============================================================*/
function getFederalMedicareTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var selfemployed = parseFloat(document.getElementById('self-employed').value);

  if(selfemployed) {
    var percentage = parseFloat(document.getElementById('federalmedicaretaxrate-self').value);
  } else {
    var percentage = parseFloat(document.getElementById('federalmedicaretaxrate').value);
  }

  return percentage/100*yearlyincome;
}

/* ============================================================
 *	Get Federal Medicare Tax Deduction
 * ============================================================*/
function getFederalMedicareTaxDed(medtax) {
  var selfemployed = parseFloat(document.getElementById('self-employed').value);

  var deduction = (selfemployed) ? medtax/2 : 0.0;

  return deduction;
}

/* ============================================================
 *	Get Federal Corporate Income Tax
 * ============================================================*/
function getFederalCorporateIncomeTax() {
  var federalcorporateincometaxrate = parseFloat(document.getElementById('federalcorporateincometaxrate').value);
  var gdppc = parseFloat(document.getElementById('gdppc').value);

  tax = gdppc*federalcorporateincometaxrate/100;

  return tax;
}

/* ============================================================
 *	Get Federal Phone Regulation Recovery
 * ============================================================*/
function getFederalPhoneRegulationRecovery() {
  var federalphonerecovery = parseFloat(document.getElementById('federalphonerecovery').value);

  tax = federalphonerecovery*12;

  return tax;
}

/* ============================================================
 *	Get Federal Phone 911 Service Fee
 * ============================================================*/
function getFederalPhone911() {
  var federalphone911 = parseFloat(document.getElementById('federalphone911').value);

  tax = federalphone911*12;

  return tax;
}

/* ============================================================
 *	Get Federal Phone Excise Tax
 * ============================================================*/
function getFederalPhoneExciseTax() {
  var phonebill = parseFloat(document.getElementById('phonebill').value);
  var percentage = parseFloat(document.getElementById('federalphoneexcisetaxrate').value);

  tax = percentage/100*phonebill*12;

  return tax;
}

/* ============================================================
 *	Get State Sales Tax
 * ============================================================*/
function getStateSalesTax(taxsofar) {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var nosalestax = parseFloat(document.getElementById('nosalestax').value);
  var percentage = parseFloat(document.getElementById('statesalestaxrate').value);

  var spentamount = yearlyincome - nosalestax - taxsofar;

  return percentage/100*spentamount;
}

/* ============================================================
 *	Get State Income Tax
 * ============================================================*/
function getStateIncomeTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);

  if(yearlyincome <= 11000) {
    var tax = 0.04*yearlyincome;
  } else if(yearlyincome <= 15000) {
    var tax = 440 + 0.045*(yearlyincome-11000);
  } else if(yearlyincome <= 17000) {
    var tax = 620 + 0.0525*(yearlyincome-15000);
  } else if(yearlyincome <= 30000) {
    var tax = 725 + 0.059*(yearlyincome-17000);
  } else if(yearlyincome <= 125000) {
    var tax = 1492 + 0.0685*(yearlyincome-30000);
  } else if(yearlyincome <= 500000) {
    var tax = 8000 + 0.07375*(yearlyincome-125000);
  } else {
    var tax = 35656 + 0.077*(yearlyincome-500000);
  }

  return tax;
}

/* ============================================================
 *	Get State Disability Tax
 * ============================================================*/
function getStateDisabilityTax() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var percentage = parseFloat(document.getElementById('statedisabilitytaxrate').value);

  tax = Math.min(yearlyincome*percentage/100, 0.60*52);

  return tax;
}

/* ============================================================
 *	Get State Corporate Income Tax
 * ============================================================*/
function getStateCorporateIncomeTax() {
  var statecorporateincometaxrate = parseFloat(document.getElementById('statecorporateincometaxrate').value);
  var gsppc = parseFloat(document.getElementById('gsppc').value);

  tax = gsppc*statecorporateincometaxrate/100;

  return tax;
}

/* ============================================================
 *	Get State Phone Telecommunications Exicse Surcharge
 * ============================================================*/
function getStatePhoneRegulationRecovery() {
  var surcharge = parseFloat(document.getElementById('statephonerecovery').value);

  tax = surcharge*12;

  return tax;
}

/* ============================================================
 *	Get State Gasoline Tax
 * ============================================================*/
function getStateGasTax() {
  var percentage = parseFloat(document.getElementById('stategastaxrate').value);
  var annualmiles = parseFloat(document.getElementById('annualmiles').value);
  var mileage = parseFloat(document.getElementById('mileage').value);

  return (annualmiles/mileage)*percentage;
}

/* ============================================================
 *	Get State Cigarette Tax
 * ============================================================*/
function getStateCigaretteTax() {
  var percentage = parseFloat(document.getElementById('statecigarettetaxrate').value);
  var cigarettepacks = parseFloat(document.getElementById('cigarettepacks').value);

  return cigarettepacks*percentage;
}

/* ============================================================
 *	Get State Spirits Tax
 * ============================================================*/
function getStateSpiritsTax() {
  var percentage = parseFloat(document.getElementById('statespiritstaxrate').value);
  var spiritbottles = parseFloat(document.getElementById('spiritbottles').value);
  var gallonsperbottle = parseFloat(document.getElementById('gallonsperspiritbottle').value);

  return (spiritbottles*gallonsperbottle)*percentage;
}

/* ============================================================
 *	Get State Wine Tax
 * ============================================================*/
function getStateWineTax() {
  var percentage = parseFloat(document.getElementById('statewinetaxrate').value);
  var winebottles = parseFloat(document.getElementById('winebottles').value);
  var gallonsperbottle = parseFloat(document.getElementById('gallonsperwinebottle').value);

  return (winebottles*gallonsperbottle)*percentage;
}

/* ============================================================
 *	Get State Beer Tax
 * ============================================================*/
function getStateBeerTax() {
  var percentage = parseFloat(document.getElementById('statebeertaxrate').value);
  var sixpacks = parseFloat(document.getElementById('sixpacks').value);
  var gallonspersixpack = parseFloat(document.getElementById('gallonspersixpack').value);

  return (sixpacks*gallonspersixpack)*percentage;
}

/* ============================================================
 *	Get Local Sales Tax
 * ============================================================*/
function getLocalSalesTax(taxsofar) {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var nosalestax = parseFloat(document.getElementById('nosalestax').value);
  var percentage = parseFloat(document.getElementById('localsalestaxrate').value);

  var spentamount = yearlyincome - nosalestax - taxsofar;

  return percentage/100*spentamount;
}

/* ============================================================
 *	Get Local Property Tax
 * ============================================================*/
function getLocalPropertyTax() {
  var homevalue = parseFloat(document.getElementById('homevalue').value);
  var dollarsperthousand = parseFloat(document.getElementById('localpropertytaxrate').value);

  var percentage = dollarsperthousand/1000;

  return percentage*homevalue;
}

/* ============================================================
 *	Get Local Property Tax Deduction
 * ============================================================*/
function getLocalPropertyTaxDed() {
  var yearlyincome = parseFloat(document.getElementById('yearlyincome').value);
  var homevalue = parseFloat(document.getElementById('homevalue').value);
  var dollarsperthousand = parseFloat(document.getElementById('localpropertytaxrate').value);
  var seniorcitizen = parseFloat(document.getElementById('seniorcitizen').value);
  var localpropertytaxded = parseFloat(document.getElementById('localpropertytaxded').value);
  var localpropertytaxdedsenior = parseFloat(document.getElementById('localpropertytaxdedsenior').value);

  var exempt = (seniorcitizen && yearlyincome < 60000) ? localpropertytaxdedsenior : localpropertytaxded;

  var percentage = dollarsperthousand/1000;

  return percentage*exempt;
}

/* ============================================================
 *	Get Local School Tax
 * ============================================================*/
function getLocalSchoolTax() {
  var homevalue = parseFloat(document.getElementById('homevalue').value);
  var dollarsperthousand = parseFloat(document.getElementById('localschooltaxrate').value);

  var percentage = dollarsperthousand/1000;

  return percentage*homevalue;
}
