// (c) 2006 conscious.co.uk

function calccarbenefit() {
// Calculates car benefits
   var formnames = new Array("listprice", "employeecontribs", "employeepayments", "coemissions");
   var formdisplayednames = new Array("List Price of Car", "Employee Capital Contributions", "Private Use Employee Payments", "Approved CO2 Emissions Figure");
   var formvals = new Array();
   var outnames = new Array("carbenefit", "listpriceused", "fuelbenefit", "totalbenefit");
   var outvals = new Array();


   // get form values      
   for (i=0; i<formnames.length; i++)
      for (j=0,m=document.carbenefitform.elements.length;j<m;j++)
         if (document.carbenefitform.elements[j].name == formnames[i])
            formvals[formnames[i]] = document.carbenefitform.elements[j].value;

   // Error checking
   var isvalidnum = true;
   for (j=0; j<formnames.length; j++) {
      formvals[formnames[j]] = formvals[formnames[j]].replace("£", "");
      if (formvals[formnames[j]] == "") formvals[formnames[j]] = "0";
      for (i=0; i<formvals[formnames[j]].length; i++) {
         if ((formvals[formnames[j]].charAt(i) != "0")
         && (formvals[formnames[j]].charAt(i) != ".")
         && (!parseFloat(formvals[formnames[j]].charAt(i)))) {
            isvalidnum = false;
            alert("Please enter a valid number in the "+formdisplayednames[j]+" field");
            break;

      }
   }
   }
   
   if (isvalidnum) {

      for (i=0; i<formnames.length; i++) formvals[formnames[i]] = parseFloat(formvals[formnames[i]]);
      
      if(formvals['listprice'] < formvals['employeecontribs']) alert("List Price must be greater than Employee Capital Contributions");

      formnames[formnames.length] = "regdate";
      
      formnames[formnames.length] = "fueltype";
      formnames[formnames.length] = "enginecapacity";
   // get form values from drop-downs     
   for (i=4; i<formnames.length; i++)
      for (j=0,m=document.carbenefitform.elements.length;j<m;j++)
         if (document.carbenefitform.elements[j].name == formnames[i])
            formvals[formnames[i]] = document.carbenefitform.elements[j].value;     
      formnames[formnames.length] = "employerpays";
      for (j=0,m=document.carbenefitform.elements.length;j<m;j++)
         if ((document.carbenefitform.elements[j].name == "employerpays") && (document.carbenefitform.elements[j].checked))
            formvals["employerpays"] = document.carbenefitform.elements[j].value;    
         
      var listpriceusedA = 0;      
      if (formvals['employeecontribs'] > 5000) formvals['employeecontribs'] = 5000;  // employee contributions capped at 5000 pounds
      if (formvals['coemissions'] > 0) {  // if CO2 emissions for car known
         if (formvals['coemissions'] < 140) formvals['coemissions'] = 140;  // emissions must be between 140...
         else if (formvals['coemissions'] > 240) formvals['coemissions'] = 240; // and 240...
	 formvals['coemissions'] = Math.floor(formvals['coemissions'] / 5) * 5;  // in steps of 5
	 if (formvals['fueltype'] == "petroleuro") {  // if Petrol or Euro IV
	    listpriceusedA = Math.floor(formvals['coemissions']/5) - 13;  // deduction of 13 percent
	    if (listpriceusedA < 15) listpriceusedA = 15; // between 15...
	    else if (listpriceusedA > 35) listpriceusedA = 35;	 // and 35
	 }
	 else if (formvals['fueltype'] == "diesel") { // if non-Euro IV diesel
	    listpriceusedA = Math.floor(formvals['coemissions']/5) - 10; // deduction of 10 percent
	    if (listpriceusedA < 15) listpriceusedA = 15; // between 15...
	    else if (listpriceusedA > 35) listpriceusedA = 35;	// and 35	 
	 } 
	 else if (formvals['fueltype'] == "hybrid") { // if fuel-electric hybrid
	    listpriceusedA = Math.floor(formvals['coemissions']/5) - 15; // deduction of 15 percent
	    if (listpriceusedA < 15) listpriceusedA = 15; // between 15..
	    else if (listpriceusedA > 35) listpriceusedA = 35; // and 35 	 
	 } 	 
         else if (formvals['fueltype'] == "electric") { // if electric car ...
            if (formvals['regdate'] == "97") listpriceusedA = 15; //and registered before 1998, always percentage used value of 15
            else listpriceusedA = 9; // or 9 if registered before 1998
         
         }
      }
      else if (formvals['fueltype'] != "electric") { // if CO2 emissions not known, calculate as follows
         if (formvals['regdate'] == "97") { // if registered before 1998 ...
            if (formvals['enginecapacity'] == "1400") listpriceusedA = 15; // 15 percent value for under 1400cc vehicle
            else if (formvals['enginecapacity'] == "14002000") listpriceusedA = 22; // 22 percent value for 1400cc to 2000cc vehicle
            else if (formvals['enginecapacity'] == "2000") listpriceusedA = 32; // 32 percent value for over 2000cc vehicle         
         }
         else { // if registered after 1997
            if (formvals['enginecapacity'] == "1400") listpriceusedA = 15; // 15 percent value for under 1400cc vehicule
            else if (formvals['enginecapacity'] == "14002000") listpriceusedA = 25; // 25 percent value for 1400cc to 2000cc vehicle
            else if (formvals['enginecapacity'] == "2000") listpriceusedA = 35;   // 35 percent value for over 2000cc vehicle       
            if ((formvals['fueltype'] == "diesel") && (listpriceusedA < 35)) listpriceusedA += 3; // add 3% for diesel car, up to 35%
         }                        
      }
      else { // if electric car, regardless of CO2 emissions ...
         if (formvals['regdate'] == "97") listpriceusedA = 15; //and registered before 1998, always percentage used value of 15
         else listpriceusedA = 9; // or 9 if registered before 1998 

      }	
      listpriceusedA = listpriceusedA/100; // percentage as a decimal value
      var priceusedtocalc = formvals['listprice'] - formvals['employeecontribs'];  //variable of list price less employee contributions
      if (priceusedtocalc > 80000) priceusedtocalc = 80000; // capped at 80000
      outvals['carbenefit'] = (listpriceusedA * priceusedtocalc) - formvals['employeepayments']; // car benefit value is percentage of above price less employee payments
      if (formvals['employerpays'] == "Yes") outvals['fuelbenefit'] = 14400 * listpriceusedA; // if employer pays for private fuel, fuel benefit is percentage of 14,400 pounds
      else outvals['fuelbenefit'] = 0; // no fuel benefit if employer doesn't pay
      outvals['totalbenefit'] = outvals['carbenefit'] + outvals['fuelbenefit']; // total benefit is car plus fuel benefits
      outvals['listpriceused'] = listpriceusedA*100; // list price changed back to percentage
      for (i=0; i<outnames.length; i++) outvals[outnames[i]] = poundsandpence(outvals[outnames[i]], false, true);	
	
   // output values
   for (i=0; i<outnames.length; i++)
      for (j=0,m=document.carbenefitform.elements.length;j<m;j++)
         if (document.carbenefitform.elements[j].name == outnames[i])
            document.carbenefitform.elements[j].value = outvals[outnames[i]];	
   }
}



function poundsandpence(numnotrounded, returnasfloat, isthousands) {
// makes number conform to pounds and 2 decimal (pence) digits, with options of commas denoting thousands
var decbit = (numnotrounded.toString()).split(".");

if (!decbit[1]) var decpart = "00";
else if ((decbit[1].length) == 1) var decpart = decbit[1]+"0";
else if ((decbit[1].length) == 2) var decpart = decbit[1];
else {
// Varies to get right result - check
   var tempbit = (Math.round((decbit[0]+decbit[1].substring(0,2))+"."+(decbit[1].substring(2)))).toString();
   var decpart = tempbit.substring((tempbit.length-2));
   decbit[0] = tempbit.substring(0, (tempbit.length-2));
//   var decpart = (decbit[1].substring(0, 2));

}

if ((!returnasfloat) && (isthousands) && (decbit[0].length > 3)) {  // add commas for thousands if appropriate
   var afterthousands = "";
   for (tocommas = 0; tocommas < (decbit[0].length / 3); tocommas++) afterthousands = ","+decbit[0].substring((decbit[0].length-((tocommas+1)*3)), (decbit[0].length-(tocommas*3)))+afterthousands;
   afterthousands = afterthousands.substring(1);

}
else afterthousands = decbit[0];

var wholebit = afterthousands+"."+decpart;

if (!returnasfloat) return wholebit;
else return parseFloat(wholebit);
}