function currencyFormat(n, currencySign, currencySignPosition, decimalDivider, thousandsDivider, notForField) {
   if (!isNaN(n)) {
                if (!currencySign) {currencySign = false;}
                if (!currencySignPosition) {currencySignPosition = false;}
                if (!decimalDivider) {decimalDivider = ".";}
                if (!thousandsDivider) {thousandsDivider = "";}
                if (!notForField) {notForField = false;}
        
      n = Math.round(n*10)/10;
      n = n.toString();

                nPart = n.split(".");
                
                var x = nPart[0].substr(0, nPart[0].length%3);
                for (var i = 0; i < Math.floor(nPart[0].length/3); i++) {
                        if ((nPart[0].length%3 != 0) || (i > 0)) {
                                x += thousandsDivider;
                        }
                        x += nPart[0].substr((nPart[0].length%3) + (i*3), 3);
                }
                
                if (!nPart[1]) {nPart[1] = "00";}
                if (nPart[1].length == 1) {nPart[1] += "0";}

      n = x + decimalDivider + nPart[1];
                if (currencySign) {
                        n = (currencySignPosition) ? currencySign + n : n + currencySign;
                }
                if (notForField) {
                        while (n.indexOf(" ") != -1) {
                                n = n.replace(" ", "&nbsp;");
                        }
                }
   }
   return n;
}

function formatNumber(number){

        var decimalPos;
        var leftPart = number.toString();
        var orgLeftPart = "";
        var digitCount = 0;
        var digitChar = "";
        var decimalPart = "";
        
        decimalPos = leftPart.indexOf(".");
        decimalPart = leftPart.substring(decimalPos);
        leftPart = leftPart.substring(0,decimalPos);
        
        decimalPart = decimalPart.substring(0,3);
        
        orgLeftPart = leftPart;
        leftPart="";
        for (var x=orgLeftPart.length-1;x!=-1;x--) {
        
                digitCount = digitCount + 1;
                digitChar = orgLeftPart.substring(x,x+1);
                if (digitCount==3) {
                        digitCount=0;
                        digitChar = "," + digitChar;
                }
                leftPart = digitChar + leftPart;
        
        }
        if (leftPart.substring(0,1)==",") {leftPart=leftPart.substring(1);}
        
        return(leftPart + decimalPart);

}

function v_number(number){
        var digits="0123456789.";
        if (number=="") {return false;}
        if (number.length==0) {return false;}
        for (var i=0;i<number.length;i++){if (digits.indexOf(number.substring(i,i+1))==-1 && number.substring(i,i+1)!="."){return false;}}
        if (number<0) {return false;}
        return true;
}


function calculateTax(){

        //load values from form into variables

        var frm=document.taxcalc;
        var vGrossPay=frm.GrossPay.value;
        var vTaxPaid=frm.TaxPaid.value;
        var vYear=frm.Year.options[frm.Year.selectedIndex].value;
        
        //validate inputs
        
        var errorMessage="";
        
        if (!v_number(vGrossPay)) {errorMessage+="Annual salary,\n";}
        if (!v_number(vTaxPaid)) {errorMessage+="Tax paid,\n";}
        
        if (errorMessage.length!=0) {alert("The following entries are incorrect:\n\n"+errorMessage+"\nPlease correct these entries and\ntry again.");return false;}
        
        if (vGrossPay.substring(0,1)=="") vGrossPay=vGrossPay.substring(1);
        if (vTaxPaid.substring(0,1)=="") vTaxPaid=vTaxPaid.substring(1);

        
        //initialise those variables for calculation
        
        var Tax=0;
        var Gross;
        var Taxable;
        var TaxToPaid=0;
        var TaxToReturn=0;
        var Q1, P1, Q2, P2, Q3, P3;

        //calculate

        switch(vYear){
                case '2004/2005': {
                        Q1 = 4745;
                        P1 = 0.1;
                        Q2 = 2020;
                        P2 = 0.22;
                        Q3 = 31400;
                        P3 = 0.4;
                break;
                }
                case '2005/2006': {
                        Q1 = 4895;
                        P1 = 0.1;
                        Q2 = 2090;
                        P2 = 0.22;
                        Q3 = 32400;
                        P3 = 0.4;
                break;
                }
                case '2006/2007': {
                        Q1 = 5035;
                        P1 = 0.1;
                        Q2 = 2150;
                        P2 = 0.22;
                        Q3 = 33300;
                        P3 = 0.4;
                break;
                }
                case '2007/2008': {
                        Q1 = 5225;
                        P1 = 0.1;
                        Q2 = 2230;
                        P2 = 0.22;
                        Q3 = 34600;
                        P3 = 0.4;
                break;
                }
                case '2008/2009': {
                        Q1 = 6035;
                        P1 = 0;
                        Q2 = 0;
                        P2 = 0.2;
                        Q3 = 34800;
                        P3 = 0.4;
                break;
                }
                case '2009/2010': {
                        Q1 = 6475;
                        P1 = 0;
                        Q2 = 0;
                        P2 = 0.2;
                        Q3 = 37400;
                        P3 = 0.4;
                break;
                }                
        }

        Gross = vGrossPay - Q1;
        Taxable = Gross > 0 ? Gross : 0;

        if(Gross > Q3){
         Tax += (Gross - Q3) * P3;
         Tax += (Q3 - Q2) * P2;
         Tax += Q2 * P1;
        }
        else if(Gross > Q2){
         Tax += (Gross - Q2) * P2;
         Tax += Q2 * P1;
        }
        else if(Gross > 0){
	 Tax += Gross * P1;
	}

	TaxToPaid = Tax - vTaxPaid;
	if(TaxToPaid < 0) TaxToReturn = TaxToPaid * -1;

	
	//load text boxes with results
	
		frm.v1.value = currencyFormat(Q1, '', true, '.', ',');
		frm.v2.value = currencyFormat(Taxable, '', true, '.', ',');
		frm.v3.value = currencyFormat(Tax, '', true, '.', ',');
	if(TaxToReturn) {
		document.getElementById("tax-to-return").innerHTML = "Tax to return:";
		frm.v4.value = currencyFormat(TaxToReturn, '', true, '.', ',');
	} else {
		document.getElementById("tax-to-return").innerHTML = "Tax to pay:";
		frm.v4.value = currencyFormat(TaxToPaid, '', true, '.', ',');
	}

	return false;
}

