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(fm) {
var income = /^[1-9]+[0-9]+$/;
var rates=[];
	rates.push({"From":1,"To":6000,"Rate":0});
	rates.push({"From":6001,"To":34000,"Rate":15});
	rates.push({"From":34001,"To":80000,"Rate":30});
	rates.push({"From":80001,"To":180000,"Rate":40});
	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('');	
}
