﻿// Benefits Calculator v1.4
// v1.4 - 28/05/2010 - Updated formulas to take 'additional' (50%) tax rates into account
// v1.3 - 08/12/2009 - Changed umbrella fee to 15
// v1.2 - 23/02/2009 - Formulas updated and now using 2009 constants
// v1.1 - 19/02/2009 - Fixed Umbrella Employer NI calculation (section 3.1)
// v1.0 - 13/02/2009 - Initial Build
// 
// Andrew Pettican (23/02/2009)
// Toby Trembath (08/12/2009)
////////////////////////////////////////////////////////////////////////////////
var bc_debug=false;
var bc_taxrate_free=0.0;
var bc_taxrate_basic=0.2;
var bc_taxrate_high=0.4;
var bc_taxrate_additional=0.5;
var bc_taxlimit_free=7475;
var bc_taxlimit_basic=35000;
var bc_taxlimit_high=35000;
var bc_taxlimit_additional=150000;
var bc_nirate_ee=0.12;
var bc_nirate_above_uel=0.02;
var bc_nirate_emp=0.138;
var bc_nirate_ee_diff=(bc_nirate_ee-bc_nirate_above_uel);
var bc_nibracket_free=7225;
var bc_nibracket_lel=5304;
var bc_nibracket_uel=42475;
var bc_nibracket_pt=7225;
var bc_corporation_tax_rate=0.20;
var bc_high_dividend_tax_rate=0.225;
var bc_vat_rate=0.2;
var bc_flat_vat_rate=0.145;
var bc_acc_fee=(99*12*(1+bc_vat_rate));
var bc_umbrella_fee=(19.50*52);
var bc_perm_salary_assumed_rate=0.15;
var bc_default_rate=10;
var bc_default_hours=40;
var bc_default_expenses=0;
var bc_default_pension=0;
var bc_default_salary=0;

$(document).ready(function(){$('form.CalculatorForm').submit(function(){var a="";var b=bc_default_rate;var c=bc_default_hours;var d=bc_default_expenses;var e=bc_default_pension;var f=bc_default_salary;

b=$('form.CalculatorForm #id_ltd_bcalc_rate').val();
c=$('form.CalculatorForm #id_ltd_bcalc_hours').val();
d=$('form.CalculatorForm #id_ltd_bcalc_expenses').val();
e=$('form.CalculatorForm #id_ltd_bcalc_pension').val();
f=$('form.CalculatorForm #id_ltd_bcalc_salary').val();
a="ltd";

if(b==""){$('form#id_'+a+'_benefits_calc #id_'+a+'_bcalc_rate').val(round_currency(bc_default_rate));b=bc_default_rate}if(c==""){$('form#id_'+a+'_benefits_calc #id_'+a+'_bcalc_hours').val(round_currency(bc_default_hours));c=bc_default_hours}if(d==""){$('form#id_'+a+'_benefits_calc #id_'+a+'_bcalc_expenses').val(round_currency(bc_default_expenses));d=bc_default_expenses}if(e==""){$('form#id_'+a+'_benefits_calc #id_'+a+'_bcalc_pension').val(round_currency(bc_default_pension));e=bc_default_pension}if(f==""){$('form#id_'+a+'_benefits_calc #id_'+a+'_bcalc_salary').val(round_currency(bc_default_salary));f=bc_default_salary}var g=0;var h=new Array();if(!validate_number(b,true)){h[g]="bcalc_rate";g++}if(!validate_number(c,true)){h[g]="bcalc_hours";g++}if(!validate_number(d)){h[g]="bcalc_expenses";g++}if(!validate_number(e)){h[g]="bcalc_pension";g++}if(!validate_number(f)&&this.id=="umb_benefits_calc"){h[g]="bcalc_salary";g++}if(g>0){var i=g+" error(s) were found in your inputs. Please try again.";trigger_error(a,i,h)}else{clear_error(a);var j=null;
                                                                                                                                                                                                                                                                j=calc_limited(a,parseFloat(b),parseFloat(c),parseFloat(d),parseFloat(e),parseFloat(f));
                                                                                                                                                                                                                                                                if(j!==null){var k=round_currency(j[0]);var l=round_currency(j[0]/12);var m=dec_to_perc(j[1]);$('#id_'+a+'_bcalc_takehome_py').html("£"+k);$('#id_'+a+'_bcalc_takehome_pm').html("£"+l);$('#id_'+a+'_bcalc_takehome_pc').html(m+"%")}else{$('#id_'+a+'_bcalc_takehome_py').html("£0.00");$('#id_'+a+'_bcalc_takehome_pm').html("£0.00");$('#id_'+a+'_bcalc_takehome_pc').html("0.00%")}}return false})});function trigger_error(a,b,c){for(i=0;i<c.length;i++){$('#id_'+a+'_'+c[i]).addClass("invalid")}$('#id_'+a+'_benefits_calc_error').html(b);$('#id_'+a+'_benefits_calc_error').css("display","block")}function clear_error(a){$('.invalid').removeClass("invalid");$('#id_'+a+'_benefits_calc_error').html("");$('#id_'+a+'_benefits_calc_error').css("display","none")}function calc_limited(a,b,c,d,e,f){if(bc_debug){alert("calc_limited("+b+", "+c+", "+d+", "+e+", "+f+")")}var g=null;var h=0;var i=0;var j=0;var k=0;var l=0;var m=false;var n=generate_annual_figures(b,c,d,e);if(isArray(n)){if(n.length==5){h=n[0];i=n[1];j=n[2];k=n[3];l=n[4];m=true}}if(bc_debug){alert("1.\nannual_turnover: "+h+"\nannual_fr_vat_gain: "+i+"\nannual_expenses "+j+"\nannual_pension "+k+"\nannual_perm_salary "+l+")")}if(m){var o=f;if(bc_debug){alert("3.1. gross_salary = "+o)}var p=0;if(o>0){p=o-bc_taxlimit_free}if(bc_debug){alert("3.2. taxable_income = "+p)}var q=0;if(p>0){if(p<bc_taxlimit_basic){q=p*bc_taxrate_basic}else{q=bc_taxlimit_basic*bc_taxrate_basic}}if(bc_debug){alert("3.3.1. basic_tax_salary = "+q)}var r=0;if(p-bc_taxlimit_basic>0){if(p-bc_taxlimit_additional>0){r=(bc_taxlimit_additional-bc_taxlimit_high)*bc_taxrate_high}else{r=(p-bc_taxlimit_basic)*bc_taxrate_high}}if(bc_debug){alert("3.3.2. high_tax_salary = "+r)}var s=0;if(p-bc_taxlimit_additional>0){s=(p-bc_taxlimit_additional)*bc_taxrate_additional}if(bc_debug){alert("3.3.3. additional_tax_salary = "+s)}var t=q+r+s;if(bc_debug){alert("3.3. paye_tax = "+t)}var u=0;if(o>bc_nibracket_pt){u=o-bc_nibracket_pt}if(bc_debug){alert("3.4. employee_salary = "+u)}var v=0;if(o>bc_nibracket_uel){v=(u*bc_nirate_above_uel)+((bc_nibracket_uel-bc_nibracket_pt)*bc_nirate_ee_diff)}else{v=u*bc_nirate_ee}if(bc_debug){alert("3.5. employee_ni = "+v)}var w=o-(t+v);if(bc_debug){alert("3.6. net_salary = "+w)}var x=h+i;if(bc_debug){alert("4.1. turnover = "+x)}var y=0;if(o>bc_nibracket_pt){y=(o-bc_nibracket_pt)*bc_nirate_emp}if(bc_debug){alert("4.2. employer_ni = "+y)}var z=o+y+k+bc_acc_fee+j;if(bc_debug){alert("4.3. total_expenses = "+z)}var A=0;if((x-z)>0){A=(x-z)*bc_corporation_tax_rate}if(bc_debug){alert("4.4. corporation_tax = "+A)}var B=(x-(z+A));if(B<0){trigger_error(a,"Please reduce your expenses claim or salary.<br />You are claiming more expenses and salary (£"+round_currency(z+A)+") than your turnover (£"+round_currency(x)+").",Array("bcalc_expenses","bcalc_pension","bcalc_salary"));return null}if(bc_debug){alert("4.5. dividends_payable = "+B)}var C=0;if((bc_taxlimit_free+bc_taxlimit_basic)-o<B){C=(((B*100)/90)-((bc_taxlimit_free+bc_taxlimit_basic)-o))*bc_high_dividend_tax_rate}if(bc_debug){alert("4.6. dividends_tax = "+C)}var D=B-C;if(bc_debug){alert("4.7. dividends_income = "+D)}var E=w+D+j;if(bc_debug){alert("5.1. total_take_home = "+E)}var F=E/h;if(bc_debug){alert("5.2. percentage_take_home = "+F)}g=new Array(E,F);if(bc_debug){alert("5.3. results = "+g)}}return g}function calc_umbrella(a,b,c,d,e){if(bc_debug){alert("calc_umbrella("+b+", "+c+", "+d+", "+e+")")}var f=null;var g=0;var h=0;var i=0;var j=0;var k=0;var l=false;var m=generate_annual_figures(b,c,d,e);if(isArray(m)){if(m.length==5){g=m[0];h=m[1];i=m[2];j=m[3];k=m[4];l=true}}if(bc_debug){alert("1.\nannual_turnover: "+g+"\nannual_fr_vat_gain: "+h+"\nannual_expenses "+i+"\nannual_pension "+j+"\nannual_perm_salary "+k+")")}if(l){var n=0;if((g-(i+bc_umbrella_fee+bc_nibracket_free))>0){n=(g-(i+bc_umbrella_fee+bc_nibracket_free))*(bc_nirate_emp/(1+bc_nirate_emp))}if(bc_debug){alert("3.1. employer_ni = "+n)}var o=bc_umbrella_fee+n+i+j;if(bc_debug){alert("3.2. total_employer_expenses = "+o)}var p=g-o;if(bc_debug){alert("3.3. gross_pay = "+p)}var q=p+i;if(bc_debug){alert("3.4. total_pay = "+q)}var r=0;if((p-bc_nibracket_free)>0){r=(p-bc_nibracket_free)*bc_nirate_above_uel}if(bc_debug){alert("4.1.1. employee_ni_lower = "+r)}var s=0;if(p>bc_nibracket_uel){s=(bc_nibracket_uel-bc_nibracket_free)*bc_nirate_ee_diff}else if((p-bc_nibracket_free)>0){s=(p-bc_nibracket_free)*bc_nirate_ee_diff}if(bc_debug){alert("4.1.2. employee_ni_higher = "+s)}var t=r+s;var u=0;if((p-bc_taxlimit_free)>0){if((p-bc_taxlimit_free)<bc_taxlimit_high){u=(p-bc_taxlimit_free)*bc_taxrate_basic}else{u=bc_taxlimit_basic*bc_taxrate_basic}}if(bc_debug){alert("4.2.1. basic_tax_salary = "+u)}var v=0;if(p-(bc_taxlimit_free+bc_taxlimit_high)>0){if(p-(bc_taxlimit_free+bc_taxlimit_additional)>0){v=(bc_taxlimit_additional-bc_taxlimit_high)*bc_taxrate_high}else{v=(p-(bc_taxlimit_free+bc_taxlimit_high))*bc_taxrate_high}}if(bc_debug){alert("4.2.2. high_tax_salary = "+v)}var w=0;if(p-(bc_taxlimit_free+bc_taxlimit_additional)>0){w=(p-(bc_taxlimit_free+bc_taxlimit_additional))*bc_taxrate_additional}if(bc_debug){alert("4.2.3. additional_tax_salary = "+w)}var x=u+v+w;if(bc_debug){alert("4.2. paye_tax = "+x)}var y=x+t;var z=q-y;if(bc_debug){alert("5.1. total_take_home = "+z)}var A=z/g;if(bc_debug){alert("5.2. percentage_take_home = "+A)}f=new Array(z,A);if(bc_debug){alert("5.3. results = "+f)}}return f}function generate_annual_figures(a,b,c,d){var e=a*b*52;var f=(e*bc_vat_rate)-((e*(1+bc_vat_rate))*bc_flat_vat_rate);var g=c*52;var h=d*52;var i=e-(e*bc_perm_salary_assumed_rate);var j=new Array(e,f,g,h,i);return j}function validate_number(a,b){var c=false;if(!isNaN(a)){var d=parseFloat(a);if((b&&d>0)||(!b&&d>=0)){if(a!==""){c=true}}}return c}function round_currency(a){return parse_decimal_string(Math.round(a*100)/100)}function dec_to_perc(a){return parse_decimal_string(Math.round(a*10000)/100)}function parse_decimal_string(a){var b="";var c=String(a);var d=c.length;var e=c.indexOf(".");if(e===0){b+="0"}b+=c;if(e==-1){b+=".00"}else if(d-e==2){b+="0"}else if(d-e<2){b+="00"}return b}function isArray(a){return a.constructor==Array}
