function compute(form)  {

   //Get rid of commas if they're input
   var DMIreduce = form.DMIreduce.value.replace(/,/g, '');
   DMIreduce = parseFloat(DMIreduce.split(',').join());

   var DMI = form.DMI.value.replace(/,/g, '');
   DMI = parseFloat(DMI.split(',').join());

   var Milk = form.Milk.value.replace(/,/g, '');
   Milk = parseFloat(Milk.split(',').join());

   var rationcost = form.rationcost.value.replace(/,/g, '');
   rationcost = parseFloat(rationcost.split(',').join());

   var numcows = form.numcows.value.replace(/,/g, '');
   numcows = parseFloat(numcows.split(',').join());


   //Make sure numbers are within range
   if(!checkNumber(DMIreduce, 1, 4, "DMI reduction")){
      return;
   }
   if(!checkPositive(DMI, "DMI")){
      return;
   }
   if(!checkPositive(Milk, "Milk Production")){
      return;
   }
   if(!checkPositive(rationcost, "Ration Cost")){
      return;
   }
   if(!checkPositive(numcows, "Number of Cows")){
      return;
   }


   //Do calculations
   var feedeffic = DMI / Milk;
   var dolperlbDM = rationcost / DMI;
   var dolperCWT = (rationcost / Milk) * 100;
   var DMIperDay = DMI - DMIreduce;
   var costcowday = rationcost - (DMIreduce * dolperCWT) + 0.05;
   var improvedeffic = Milk / DMIperDay;
   var improveperCWT = costcowday / Milk;

   var reduceperday = (DMIreduce*dolperlbDM) - 0.05;
   var savingpermon = numcows*reduceperday*30;
   var savingperyr = savingpermon*12;

   form.reduceday.value = round(reduceperday,2);
   form.savemon.value = Comma(round(savingpermon,2));
   form.saveyr.value = Comma(round(savingperyr,2));   

   if(DMIreduce > 0) {
              form.save.value = ("Use Silo-King\u00AE and achieve a " + DMIreduce + " lb DMI reduction.*  Your feed cost savings are $" + form.saveyr.value + " per year!");
              }
              else {
              form.savemon.value = "";
              form.saveyr.value = "";
              form.save.value = ("Fill in all fields to see what your savings could be!");
              }
} 

function ClearForm(form)  {
   form.DMI.value = "";
   form.Milk.value = "";
   form.rationcost.value = "";
   form.DMIreduce.value = "";
   form.numcows.value = "";
   form.reduceday.value = "";
   form.savemon.value = "";
   form.saveyr.value = "";
   form.save.value = "";
}

function round(value, decimalPlace)
{
  var power_of_ten = 1;
  while (decimalPlace-- > 0)
     power_of_ten *= 10.0;
  return Math.round(value * power_of_ten) / power_of_ten;
}

function checkNumber(input, min, max, msg)
{
    msg = msg + " field has invalid data: " + input;
    var str = input;

    for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
            return false;
        }
    }

    var num = 0 + str

    if (num < min || max < num) {
        alert(msg + " not in range [" + min + ".." + max + "]");
        return false;
    }

    input.value = str;
    return true;
}

function checkPositive(input, msg)
{
    msg = msg + " field has invalid data: " + input;
    var str = input;

   for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
            return false;
        }
    }


    var num = 0 + str

    if (num < 0) {
        alert(msg + " must be positive!");
        return false;a
    }

    input.value = str;
    return true;
}

function Comma(SS) {
    var T = "", S = String(SS), L = S.length - 1, C, j, P = S.indexOf(".") - 1;
    if (P < 0) {
        P = L;
    }
    for (j = 0; j <= L; j++) {
        T += C = S.charAt(j);
        if (j < P && (P - j) % 3 == 0 && (C != "-")) {
            T += ",";
        }
    }
    return T;
}

