function headRow() {
    var hr = [];
    hr.push('<tr>');
    hr.push('<td colspan="3"><b>Tax Bracket</b></td>');
    hr.push('<td align="right"><b>Tax Rate</b></td>');
    hr.push('<td align="right" style="width:90px;"><b>Tax</b></td>');
    hr.push('</tr>');
    return hr.join('');
}
function totalRows(tIncome, tTax) {
    tNet = tIncome - tTax;
    hr = [];
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right"><b>Total Tax</b></td>');
    hr.push('	<td align="right"><b>$');
    hr.push(currency(tTax));
    hr.push('</b></td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4">&nbsp;</td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right"><b>Net Income</b></td>');
    hr.push('	<td></td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right">Per Annum :</td>');
    hr.push('	<td align="right">$');
    hr.push(currency(tNet));
    hr.push('</td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right">Per Week :</td>');
    hr.push('	<td align="right">$');
    hr.push(currency(tNet / 52));
    hr.push('</td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right">Per Fortnight :</td>');
    hr.push('	<td align="right">$');
    hr.push(currency(tNet / 26));
    hr.push('</td>');
    hr.push('</tr>');
    hr.push('<tr>');
    hr.push('	<td colspan="4" align="right">Per Month :</td>');
    hr.push('	<td align="right">$');
    hr.push(currency(tNet / 12));
    hr.push('</td>');
    hr.push('</tr>');
    return hr.join('');
}
function detailRow(tFrom, tTo, tRate, tTax) {
    var hr = [];
    hr.push('<tr>');
    hr.push('<td align="right">');
    hr.push(currency(tFrom));
    hr.push('</td>');
    hr.push('<td> - </td>');
    hr.push('<td align="right">');
    hr.push(currency(tTo));
    hr.push('</td>');
    hr.push('<td align="right">');
    hr.push(tRate);
    hr.push('%</td>');
    hr.push('<td align="right">');
    hr.push(currency(tTax));
    hr.push('</td>');
    hr.push('</tr>');
    return hr.join('');
}
function currency(tAmt) {
    var ret = tAmt.toFixed(0).toString();
    var retlen = ret.length - 3;
    for (var i = 0; i < Math.floor((ret.length - (1 + i)) / 3); i++)
        ret = ret.substring(0, ret.length - (4 * i + 3)) + ',' + ret.substring(ret.length - (4 * i + 3));
    return ret;
}

function CalcInc() {
    var income = /^[1-9]+[0-9]+$/;
    var fm = document.incomecalculator; // form prefix
    var rates = [];
    rates.push({ "From": 1, "To": 6000, "Rate": 0 });
    rates.push({ "From": 6001, "To": 35000, "Rate": 15 });
    rates.push({ "From": 35001, "To": 80000, "Rate": 30 });
    rates.push({ "From": 80001, "To": 180000, "Rate": 38 });
    rates.push({ "From": 180001, "To": 10000000, "Rate": 45 });
    var gS; //gross salary variable
    var mgnAmount = 0, taxSubTotal = 0, taxTotal = 0;
    if (!income.test(fm.gs.value) || fm.gs.value <= 0) {
        alert("Please enter a valid value for your income. Please note :\n\n1. Only enter whole dollar values.\n2. Do not use commas or fullstops.");
        fm.gs.select();
        return false;
    } else {
        gS = eval(fm.gs.value); // assign gross income
    }

    var out = ['<table>'];
    out.push(headRow());

    var remainder = gS;

    for (var i = 0; i < rates.length; i++) {
        if (remainder > 0) {
            if (gS <= rates[i].To) {
                bracket = remainder;
            }
            else {
                bracket = Math.min(remainder, rates[i].To - (rates[i].From - 1));
            }
            bracketTax = bracket * rates[i].Rate / 100;
            out.push(detailRow(rates[i].From, Math.min(gS, rates[i].To), rates[i].Rate, bracketTax));
            remainder -= bracket;
            taxTotal += bracketTax;
        }
    }
    out.push(totalRows(gS, taxTotal));
    out.push('</table>');
    document.getElementById('results').innerHTML = out.join('');
}
