function getDrag (f, speed)
{
  var drag;

  with (Math)
  {
    drag = (f.dragCoefficient.value * f.frontArea.value * pow (speed, 2))/391;
  }

  return drag;
}

function getWindFactor (f, speed)
{
  var windFactor;

  with (Math)
  {
    windFactor = (((.98 * pow(f.wind.value/speed, 2)) +
                        (.63 * (f.wind.value/speed))) * f.windFactor.value) -
                       (.4 * (f.wind.value/speed));
  }

  return windFactor;
}

function getWindDrag (f, speed)
{
  var windFactor;
  var drag;

  windFactor = getWindFactor (f, speed);
  drag = getDrag (f, speed);

  return (drag * windFactor);  
}

function getDragForce (f, f1, speed)
{
  var drag;
  var windDrag;

  drag = getDrag (f, speed);
  windDrag = getWindDrag (f, speed);
 
  return ((parseFloat (f1.rollingForce.value) +
          parseFloat (drag) +
          parseFloat (windDrag) +
          parseFloat (f1.inclineForce.value))).toFixed(2);
}

function getTotalDrag (f, f1, speed)
{
  var drag;
  var windDrag;
  
  drag = getDrag (f, speed);
  windDrag = getWindDrag (f, speed);
 
  return ((parseFloat (f1.rollingForce.value) +
          parseFloat (drag) +
          parseFloat (windDrag) +
          parseFloat (f1.inclineForce.value)) * f1.torqueMult.value).toFixed(2);
}

function calcDrag(f, f1, speed, drag, windFactor, windDrag, dragForce, totalDrag, hp)
{
  with (Math)
  {
    drag.value = getDrag (f, speed);

    windFactor.value = getWindFactor (f, speed);

    windDrag.value = getWindDrag (f, speed);

    dragForce.value = getDragForce (f, f1, speed);

    totalDrag.value = getTotalDrag (f, f1, speed);

    hp.value = ((totalDrag.value * speed * f1.revPerMile.value)/
               (315120 * f.drive_efficiency.value)).toFixed(3);
  }
}
function calcAllDrag (f,f1)
{
  with (Math)
  {
    f1.torqueMult.value = (840.34 / f1.revPerMile.value).toFixed(3);

    f1.rollingForce.value = ((f1.totalWeight.value *
                            (parseFloat (f.rr.value) + parseFloat (f.bs.value))) *
                            cos (atan (f.incline.value/100))).toFixed(3);

    f1.inclineForce.value = f1.totalWeight.value * 
                           sin (atan (f.incline.value/100)).toFixed(3);
  }

  calcDrag (f, f1, 10, f1.drag10, f1.windFactor10, f1.windDrag10, f1.dragForce10, f1.totalDrag10, f1.hp10);
  calcDrag (f, f1, 20, f1.drag20, f1.windFactor20, f1.windDrag20, f1.dragForce20, f1.totalDrag20, f1.hp20);
  calcDrag (f, f1, 30, f1.drag30, f1.windFactor30, f1.windDrag30, f1.dragForce30, f1.totalDrag30, f1.hp30);
  calcDrag (f, f1, 40, f1.drag40, f1.windFactor40, f1.windDrag40, f1.dragForce40, f1.totalDrag40, f1.hp40);
  calcDrag (f, f1, 50, f1.drag50, f1.windFactor50, f1.windDrag50, f1.dragForce50, f1.totalDrag50, f1.hp50);
  calcDrag (f, f1, 60, f1.drag60, f1.windFactor60, f1.windDrag60, f1.dragForce60, f1.totalDrag60, f1.hp60);
  calcDrag (f, f1, 70, f1.drag70, f1.windFactor70, f1.windDrag70, f1.dragForce70, f1.totalDrag70, f1.hp70);
  calcDrag (f, f1, 80, f1.drag80, f1.windFactor80, f1.windDrag80, f1.dragForce80, f1.totalDrag80, f1.hp80);
  calcDrag (f, f1, 90, f1.drag90, f1.windFactor90, f1.windDrag90, f1.dragForce90, f1.totalDrag90, f1.hp90);
}
