//figures updated using http://www.hmrc.gov.uk/rates/corp.htm
// and http://www.hmrc.gov.uk/rates/it.htm
// and http://www.hmrc.gov.uk/ctsa/ct_rate_band.htm

// HISTORY
//	18/01/07 KW UPDATED FOR 06/07 RATES USING URLS ABOVE
CTLowBand=10000;
CTLowBandTop=50000;
CTStdBand=300000;
CTMargFact=19/400; //Marginal Starting Rate Relief Fraction
PersAll = 5035; 
LowBand = 2090; 
StdBand = 32400; 
HighLimit = PersAll+LowBand+StdBand;
HighRateText="";
CTLowRate=0;
CTStdRate=0.19;
CTHighRate=0.3;
LowRate = 0.1; 
StdRate = 0.22; 
HighRate = 0.40; 
EesMin = 5035; 
ErsMin = 5035; 
MaxNI = 33540; 
EesRate = 0.11; 
EesHighRate = 0.01; 
ErsRate = 0.128; 
zz = "000066000066";
OldTotalTax = "";
NewTotalTax = "";

function CalcTax(Prof,OldSal,NewSal) {
	OldProfit=readFloat(Prof);
	OldSalary=readFloat(OldSal);
	NewSalary=readFloat(NewSal);
       if (OldProfit<0) {OldTotalTax="Profit";NewTotalTax="Too";TotalSaving="Low"; return;}
       if (OldProfit>250000) {OldTotalTax="Profit";NewTotalTax="Too";TotalSaving="High"; return;}
       if (OldSalary<0) {OldTotalTax="Current";NewTotalTax="Salary Too";TotalSaving="Low"; return;}
       if (NewSalary<0) {OldTotalTax="New Salary";NewTotalTax="Too";TotalSaving="Low"; return;}
       if (OldSalary<NewSalary) {OldTotalTax="New Salary";NewTotalTax="Too";TotalSaving="High"; return;}

	// Reset Variables
	OldHighTax=0;
	OldStdTax=0;
	OldLowTax=0;
	OldEesNI=0;
	OldErsNI=0;
	NewHighTax=0;
	NewStdTax=0;
	NewLowTax=0;
	NewEesNI=0;
	NewErsNI=0;

	// Calculate Old Tax Liability (OldTax)
	if (OldSalary>PersAll+LowBand+StdBand) {OldHighTax = (OldSalary-HighLimit)*HighRate}
	if (OldSalary>PersAll+LowBand) {OldStdTax = (OldSalary-(OldHighTax/HighRate)-PersAll-LowBand)*StdRate}
	if (OldSalary>PersAll) {OldLowTax = (OldSalary-(OldHighTax/HighRate)-(OldStdTax/StdRate)-PersAll)*LowRate}
	OldTax=OldLowTax+OldStdTax+OldHighTax
	
	// Calculate New Tax Liability (NewTax)
	if (NewSalary>PersAll+LowBand+StdBand) {NewHighTax = (NewSalary-HighLimit)*HighRate}
	if (NewSalary>PersAll+LowBand) {NewStdTax = (NewSalary-(NewHighTax/HighRate)-PersAll-LowBand)*StdRate}
	if (NewSalary>PersAll) {NewLowTax = (NewSalary-(NewHighTax/HighRate)-(NewStdTax/StdRate)-PersAll)*LowRate}
	NewTax=NewLowTax+NewStdTax+NewHighTax

	// Calculate Old Employees NI (OldEesNI)
	if (OldSalary>MaxNI) {
	 OldEesNI=(MaxNI-EesMin)*EesRate+(OldSalary-MaxNI)*EesHighRate}
	else {
	 OldEesNI=(OldSalary-EesMin)*EesRate
	}
	if (OldSalary<EesMin) {OldEesNI=0}

	// Calculate New Employees NI (NewEesNI)
	if (NewSalary>MaxNI) {
	 NewEesNI=(MaxNI-EesMin)*EesRate+(NewSalary-MaxNI)*EesHighRate}
	else {
	 NewEesNI=(NewSalary-EesMin)*EesRate
	}
	if (NewSalary<EesMin) {NewEesNI=0}

	// Calculate Old Employers NI (OldErsNI)
	if (OldSalary>ErsMin) {
	 OldErsNI=(OldSalary-ErsMin)*ErsRate }
	else {
	 OldErsNI=0;
	}

	// Calculate New Employers NI (NewErsNI)
	if (NewSalary>ErsMin) {
	 NewErsNI=(NewSalary-ErsMin)*ErsRate }
	else {
	 NewErsNI=0;
	}

	// Calculate Corporation Tax
	NewProfit=OldProfit+OldSalary+OldErsNI-NewSalary-NewErsNI
	
	if (OldProfit<(CTLowBand)+1) {
     OldCorpTax=OldProfit*CTLowRate}
	else {OldCorpTax=OldProfit*CTStdRate
		if (OldProfit<(CTLowBandTop)) {
			OldCTMargRed=(CTLowBandTop-OldProfit)*CTMargFact
			OldCorpTax=OldCorpTax-OldCTMargRed
		}
	}
	if (NewProfit<(CTLowBand)+1) {
     NewCorpTax=NewProfit*CTLowRate}
	else {NewCorpTax=NewProfit*CTStdRate
		if (NewProfit<(CTLowBandTop)) {
			NewCTMargRed=(CTLowBandTop-NewProfit)*CTMargFact
			NewCorpTax=NewCorpTax-NewCTMargRed
		}
	}
	
	
	// Calculate Maximum Net Dividend to Avoid 40% Tax
	MaxDividend=NewProfit-NewErsNI-NewCorpTax-NewSalary
	if ((NewSalary+MaxDividend/.9)>HighLimit) {
		MaxDividend=(HighLimit-NewSalary)*.9
		HighRateText="before 40% tax is due "}
	if (NewSalary>HighLimit) {MaxDividend=0}
	if (NewSalary>NewProfit) {MaxDividend=0}
	if (MaxDividend<0) {MaxDividend=0}

	//Calculate DividendNeeded to achieve same Net Income as with current Salary
	HighDivTax=0
	HighDividend=0
	OldNetIncome=OldSalary-OldTax-OldEesNI
	NewNetIncome=NewSalary-NewTax-NewEesNI
	DividendNeeded=OldNetIncome-NewNetIncome
//	n=confirm(DividendNeeded)
	if (DividendNeeded<=0) {DividendNeeded=0}
	if (NewSalary>HighLimit) {
		HighDividend=DividendNeeded*4/3
	}
	else
		{
		if ((NewSalary+DividendNeeded/.9) > HighLimit) {
			HighDividend=(DividendNeeded/.9+NewSalary-HighLimit)*1.2
		}
	}
	HighDivTax=(HighDividend)*.25
	if (DividendNeeded<=0) {HighDivTax=0}
	if (HighDivTax<0) {HighDivTax=0}
	DividendNeeded=DividendNeeded+HighDivTax
	NewTax=NewTax+HighDivTax
	NewHighTax=NewHighTax+HighDivTax
	NewNetIncome=NewSalary-NewTax-NewEesNI+DividendNeeded

	//Work out totals
	NewStdRateIncome=NewSalary+MaxDividend-NewTax-NewEesNI+HighDivTax
	OldTotalTax=OldTax+OldEesNI+OldErsNI+OldCorpTax
	NewTotalTax=NewTax+NewEesNI+NewErsNI+NewCorpTax
	TotalSaving=OldTotalTax-NewTotalTax

}

function isdiv(anynum,divisor) {
        //returns true if anynum is evenly divisible by divisor.
        retval = false
        if (parseInt(anynum/divisor) == parseFloat (anynum/divisor)) {
                retval = true
        }
        return retval
}

function leftOf(smstring,lrgstring) {
        //returns leftmost characters of lrgstring up to smstring.
        //If user passes an empty string, change that to a space.
        if (smstring == ""){smstring = " "}
        strlen1 = smstring.length
        strlen2 = lrgstring.length
        foundat = 0
        for (i=0;i<=strlen2;i++) {
                comp=lrgstring.substring(i-1,strlen2)
                comp = comp.substring(0,strlen1)                
              if (comp == smstring) {
                        foundat = i
                        break
                }
        }
        return lrgstring.substring(0,(foundat-1))
}

function rightOf(smstring,lrgstring) {
        //returns the rightmost characters of lrgstring back to smstring.
        //If user passes an empty string, change that to a space.
        if (smstring == ""){smstring = " "}
        strlen1 = smstring.length
        strlen2 = lrgstring.length
        foundat = 0
        for (i=strlen2;i>=0;i--) {
                comp=lrgstring.substring(i-1,strlen2)
                comp = comp.substring(0,strlen1)                
                if (comp == smstring) {
                        foundat = i
                        break
                }
        }
        return lrgstring.substring(foundat,255)
}

function spot(smstring,lrgstring) {
        //returns a number indicating the spot where smstring appears in lrgstring.
        strlen1 = smstring.length
        strlen2 = lrgstring.length
        foundat = 0
        for (i=0;i<=strlen2;i++) {
                comp=lrgstring.substring(i-1,strlen2)
                comp = comp.substring(0,strlen1)                
                if (comp == smstring) {
                        foundat = i
                        break
                }
        }
       return foundat
}

function readFloat(num){
        if (spot(",",num)!=0){
                tmp = "" + leftOf(",",num) + rightOf(",",num);
                return parseFloat(tmp);
        }
        else {
                return parseFloat(num);
        }
}

function conv(num,dec){
	 if (typeof(num) != "number") {return num}
	 num = Math.round(num*100)/100
          //an = "  "+num;
         an = "  "+num;
       if (spot(".",an)==0){an = an + ".00";}
        rr = rightOf(".",an);
	 if (rr.length<2) {rr=rr+"0"}
        ll = leftOf(".",an);
	 aa = ll
	 if (ll.length>5) {aa = ll.substring(0,ll.length-3) + "," + ll.substring(ll.length-3,ll.length);}
	 if (dec=="2") {
	 	if (ll.length>2){
            		aa = aa + "." + rr.substring(0,2);
	        }
	     	else {
              	aa = aa + "." + rr.substring(0,3)+zz.substring(0,rr.length-3);
	        }
	 }
        return aa;
}









function CreateReport() {
	if (typeof(NewTotalTax) !="number") {return;}
	Report=window.open('','','menubar=yes,scrollbars=yes,toolbar=yes,resizable=yes,width=600,height=400')
	Report.document.open("text/html","replace")
//	Report.document.writeln('<html><head><title>Tax Liability Comparison</title></head>')
//	Report.document.writeln('<body  text="#000066" bgcolor="#FFFFFF" topmargin="0">')
//	Report.document.writeln('<table width="95%"><tr>') 
//	Report.document.writeln('<td width="80%" colspan="2" height="256"><p align="center"><font face="Arial, Helvetica, sans-serif" size="+1"><br><b>Comparison of tax due with<br>Current and Lower Salaries</b></font></p>')
//	Report.document.writeln('<table width="80%" border="4" cellpadding="4" cellspacing="0" align="center"><tr><td width="49%" height="0" valign="top">')
//	Report.document.writeln('<font face="Arial, Helvetica, sans-serif" size="-1"><br><br>Pre Tax Profit<br>Salary<br><br>Personal Allowance - £'+PersAll+'<br>Personal Tax @ '+LowRate*100+'%<br>Personal Tax @ '+StdRate*100+'%<br>')
//	Report.document.writeln('Personal Tax @ '+HighRate*100+'%<br><br>Employees National Insurance<br>Employers National Insurance<br><br>')
//	Report.document.writeln('Corporation Tax<br><br>Personal Income After Tax<br><br><b>Total Tax Burden<br><br><br>Saving</b></font></p></td>')
//	Report.document.writeln('<td width="27%" height="0" valign="top"><p align="right"><font face="Arial, Helvetica, sans-serif" size="-1"><b>Current Salary</b><br><br>')
//	Report.document.writeln(conv(OldProfit,0)+'<br>'+conv(OldSalary,0)+'<br><br><br>'+conv(OldLowTax,2)+'<br>'+conv(OldStdTax,2)+'<br>'+conv(OldHighTax,2)+'<br><br>'+conv(OldEesNI,2)+'<br>'+conv(OldErsNI,2)+'<br><br>'+conv(OldCorpTax,2)+'<br><br>')
//	Report.document.writeln(conv(OldNetIncome,0)+'<br><br><b>'+conv(OldTotalTax,2)+'</b><br>'+conv(OldTotalTax/(OldProfit+OldSalary)*100,2)+'%<br><br></font></p></td><br><br>')
//	Report.document.writeln('<td width="24%" height="0" valign="top"><p align="right"><font face="Arial, Helvetica, sans-serif" size="-1"><b>Lower Salary</b><br><br>')
//	Report.document.writeln(conv(NewProfit,0)+'<br>'+conv(NewSalary,0)+'<br><br><br>'+conv(NewLowTax,2)+'<br>'+conv(NewStdTax,2)+'<br>'+conv(NewHighTax,2)+'<br><br>'+conv(NewEesNI,2)+'<br>'+conv(NewErsNI,2)+'<br><br>'+conv(NewCorpTax,2)+'<br><br>')
//	Report.document.writeln(conv(NewNetIncome,0)+'<br><br><b>'+conv(NewTotalTax,2)+'</b><br>'+conv(NewTotalTax/(NewProfit+NewSalary)*100,2)+'%<br><br><b>'+conv(OldTotalTax-NewTotalTax,2)+'</b></font></p></td></tr></table>')
//	Report.document.writeln('<br><br><p align="center"><font face="Arial, Helvetica, sans-serif"><u><b>NOTES</b></u></p>')
//	Report.document.writeln('<font size="-1"><b>Income after tax - </b>using the lower salary the same after tax income can be acheived as with the current salary by issuing a net dividend of £ '+conv(DividendNeeded,0)+'. ')
//	Report.document.writeln('<b>Tax Savings - </b> the above example gives a tax saving of £ '+conv(OldTotalTax-NewTotalTax,2)+'.')
//	if (NewSalary<=HighLimit) {Report.document.writeln('The maximum net dividend that can be taken before higher rate tax is due is &pound;'+conv(MaxDividend,0)+' giving a total personal income after tax of &pound;'+conv(NewStdRateIncome,0))
//					Report.document.writeln('<b>with no additional tax to pay</b>. ')}
//	Report.document.writeln('Additional profit is kept within the company, but can partially be used to fund Pension Contributions. ')
//	Report.document.writeln('There is no National Insurance on dividend payments, ')
//	Report.document.writeln('Corporation Tax for Small Companies ranges between 0 and 19 percent. Dividends are treated as having been taxed at 10% ')
//	Report.document.writeln('with no additional tax to pay unless the taxpayer slips in to the 40% tax band in which case additional tax at 22.5% is due. ')
//	Report.document.writeln('<b>Maximising Savings - </b>the highest savings come by having a low salary i.e. £ 5,000 gives a very high tax and NI saving but keeps the taxpayers NI contributions topped up for state pension purposes. ')
//	Report.document.writeln('Couples can save more tax by splitting the shareholding thereby enabling two sets of dividends to be taken up to the 40% limit.</p>')
//	Report.document.writeln('The figures illustrated relate to the tax year ended 31st March 2004, are approximate, and do not reflect any other income, benefits in kind, age or marital status. ')
//	Report.document.writeln('Individual circumstances should be discussed with a good accountant. For further information contact:-</font>')
//	Report.document.writeln('</table></body></html>')
//	Report.document.close()
	Report.document.writeln('<html><head><title>Tax Liability Comparison</title>')
	Report.document.writeln("<link href=\"../assets/styles/global.css\" rel=\"stylesheet\" type=\"text/css\" />\n")
	Report.document.writeln('</head><body>')
	Report.document.writeln('<div id =\"comparisontable\">')
	Report.document.writeln('<H1>Comparison of tax due with Current and Lower Salaries</H1>')
 	Report.document.writeln('<fieldset>')
 	Report.document.writeln('<legend></legend>')
	Report.document.writeln('  <div class=row><HR />')
	Report.document.writeln('	<span class=formfield></span>')
	Report.document.writeln('	<div class=value><strong>Current Salary</strong></div>')
	Report.document.writeln('	<div class=value><strong>Lower Salary</strong></div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Pre Tax Profit</span>')
	Report.document.writeln('	<div class=value>' + conv(OldProfit,0) + '</div>')
	Report.document.writeln('	<div class=value>' + conv(NewProfit,0) + '</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Salary</span>')
	Report.document.writeln('	<div class=value>'+conv(OldSalary,0)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewSalary,0)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Personal Allowance - £'+PersAll+'</span>')
	Report.document.writeln('	<div class=value></div>')
	Report.document.writeln('	<div class=value></div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Personal Tax @ '+LowRate*100+'%</span>')
	Report.document.writeln('	<div class=value>'+conv(OldLowTax,2)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewLowTax,2)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Personal Tax @ '+StdRate*100+'%</span>')
	Report.document.writeln('	<div class=value>'+conv(OldStdTax,2)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewStdTax,2)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Personal Tax @ '+HighRate*100+'%</span>')
	Report.document.writeln('	<div class=value>'+conv(OldHighTax,2)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewHighTax,2)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Employees National Insurance</span>')
	Report.document.writeln('	<div class=value>'+conv(OldEesNI,2)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewEesNI,2)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Employers National Insurance</span>')
	Report.document.writeln('	<div class=value>'+conv(OldErsNI,2)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewErsNI,2)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Corporation Tax</span>')
	Report.document.writeln('	<div class=value>'+conv(OldCorpTax,0)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewCorpTax,0)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield>Personal Income After Tax</span>')
	Report.document.writeln('	<div class=value>'+conv(OldNetIncome,0)+'</div>')
	Report.document.writeln('	<div class=value>'+conv(NewNetIncome,0)+'</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield><strong>Total Tax Burden</strong></span>')
	Report.document.writeln('	<div class=value><strong>'+conv(OldTotalTax,2)+'</strong></div>')
	Report.document.writeln('	<div class=value><strong>'+conv(NewTotalTax,2)+'</strong></div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield></span>')
	Report.document.writeln('	<div class=value>'+conv(OldTotalTax/(OldProfit+OldSalary)*100,2)+'%</div>')
	Report.document.writeln('	<div class=value>'+conv(NewTotalTax/(NewProfit+NewSalary)*100,2)+'%</div>')
	Report.document.writeln('  </div>')
	Report.document.writeln('  <div class=row>')
	Report.document.writeln('	<span class=formfield><strong>Saving</strong></span>')
	Report.document.writeln('	<div class=value></div>')
	Report.document.writeln('	<div class=value><strong>6,715.40</strong></div>')
	Report.document.writeln('  </div>')
	Report.document.writeln(' </fieldset>')
	Report.document.writeln('<H2>NOTES</H2>')
	Report.document.writeln('<P><b>Income after tax - </b>using the lower salary the same after tax income can be acheived as with the current salary by issuing a net dividend of £'+conv(DividendNeeded,0)+'')
	Report.document.writeln('<b>Tax Savings - </b> the above example gives a tax saving of £'+conv(OldTotalTax-NewTotalTax,2)+'.')
	if (NewSalary<=HighLimit) 
		{
		Report.document.writeln('The maximum net dividend that can be taken before higher rate tax is due is &pound;'+conv(MaxDividend,0)+' giving a total personal income after tax of &pound;'+conv(NewStdRateIncome,0)+'')
		Report.document.writeln('<b>with no additional tax to pay</b>. ')
		}
	Report.document.writeln('Additional profit is kept within the company, but can partially be used to fund Pension Contributions. ')
	Report.document.writeln('There is no National Insurance on dividend payments, ')
	Report.document.writeln('Corporation Tax for Small Companies ranges between 0 and 19 percent. Dividends are treated as having been taxed at 10% ')
	Report.document.writeln('with no additional tax to pay unless the taxpayer slips in to the 40% tax band in which case additional tax at 22.5% is due. ')
	Report.document.writeln('<b>Maximising Savings - </b>the highest savings come by having a low salary i.e. £5,000 gives a very high tax and NI saving but keeps the taxpayers NI contributions topped up for state pension purposes. ')
	Report.document.writeln('Couples can save more tax by splitting the shareholding thereby enabling two sets of dividends to be taken up to the 40% limit.</p>')
	Report.document.writeln('<P>The figures illustrated relate to the tax year ended 31st March 2007, are approximate, and do not reflect any other income, benefits in kind, age or marital status. ')
	Report.document.writeln('Individual circumstances should be discussed with a good accountant.</P>')
	Report.document.writeln('<P><A href=# onclick=javascript:window.close()>Close Window</A></P>')
	Report.document.writeln('</div>')
	Report.document.writeln('</body>')
	Report.document.close()
}

function MM_goToURL() { //v2.0
  for (var i=0; i< (MM_goToURL.arguments.length - 1); i+=2) //with arg pairs
    eval(MM_goToURL.arguments[i]+".location='"+MM_goToURL.arguments[i+1]+"'");
  document.MM_returnValue = false;
}

