// (c) 2006 conscious.co.uk

function calcgrossprofitmargin() {
// Calculate Gross Profit and Margin values from given sales data

   var formnames = new Array("sales", "costofsales");
   var formdisplayednames = new Array("Sales", "Cost of Sales");
   var formvals = new Array();
   var outnames = new Array("grossprofit", "grossprofitmargin");
   var outvals = new Array();


   // get form values      
   for (i=0; i<formnames.length; i++)
      for (j=0,m=document.grossprofitmarginform.elements.length;j<m;j++)
         if (document.grossprofitmarginform.elements[j].name == formnames[i])
            formvals[formnames[i]] = document.grossprofitmarginform.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]]);
      outvals['grossprofit'] = (formvals['sales'] - formvals['costofsales']);  // profit as sales less costs
      if (formvals['sales'] != 0) outvals['grossprofitmargin'] = ((outvals['grossprofit'] / formvals['sales']) * 100); // profit margin as profit over sales then multiplied by 100 to create a percentage
      else outvals['grossprofitmargin'] = 0;
      // format as money
      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.grossprofitmarginform.elements.length;j<m;j++)
         if (document.grossprofitmarginform.elements[j].name == outnames[i])
            document.grossprofitmarginform.elements[j].value = outvals[outnames[i]];	
   }
}

function calcgrossprofit() {
// Calculates gross profit and sales from given 
   var formnames = new Array("grossprofitmargin", "sales");
   var formdisplayednames = new Array("Gross Profit Margin", "Sales");
   var formvals = new Array();
   var outnames = new Array("costofsales", "grossprofit");
   var outvals = new Array();


   // get form values      
   for (i=0; i<formnames.length; i++)
      for (j=0,m=document.grossprofitform.elements.length;j<m;j++)
         if (document.grossprofitform.elements[j].name == formnames[i])
            formvals[formnames[i]] = document.grossprofitform.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]]);
      	outvals['grossprofit'] = (formvals['grossprofitmargin'] * (formvals['sales'] / 100));  // profit as sales multiplied by profit margin, with 100 considered to convert back from a percentage
      	outvals['costofsales'] = (formvals['sales'] - outvals['grossprofit']);  // costs incurred as sales less profit
      // format as money
      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.grossprofitform.elements.length;j<m;j++)
         if (document.grossprofitform.elements[j].name == outnames[i])
            document.grossprofitform.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);
}