<!--

//*************************************************************************
//
// Copyright 1998 by John A Bolton.  All Rights Reserved.
//
// THIS JAVASCRIPT SOURCE CODE IS NOT PUBLIC DOMAIN.
// ALL RIGHTS ARE RESERVED BY THE AUTHOR.
//
//*************************************************************************

function check_button(radioGroup)
{
  for (var i=0; i<radioGroup.length; i++)
    if (radioGroup[i].checked) return i
  return 0
}

function round(num, decimalPlaces)
{
  var factor = Math.pow(10,decimalPlaces)
  return Math.round(num*factor)/factor
}

var output = null, PI=round(Math.PI,7)

function sround(num, decimalPlaces)
{
  var i, s, x=-1, n=round(num,decimalPlaces)

  s = n.toString()  

  for (i=0; i<s.length; i++)
  {
    if (s.substring(i,i+1) == ".")
    {
      x = i
      break
    }
  }

  if (x == -1)
  {
    s += "."
    x = s.length-1
  }

  for (i=s.length-1; s.length-1-x<decimalPlaces; i++)
    s += "0"

  return s
}


function calc_diam2(sw,ar,wd)
{
  return (((sw*(ar/100.0)*2)/25.4)+wd)
}


function calc_diam()
{
  var d = calc_diam2(parseInt(document.mvr.sectionwidth.value),
                     parseInt(document.mvr.aspectratio.value),
                     parseInt(document.mvr.wheeldiameter.value))

  document.mvr.ctdiam.value = sround(d,2)
  document.mvr.ctcirc.value = sround(d*PI,2)
  document.mvr.ctrpm.value  = sround(63360.0/(d*PI),2)
  recalc_speedo(1)
}


function recalc_actual(i)
{
  if (i == 1)      // diameter changed
  {
    document.mvr.atcirc.value = sround(parseFloat(document.mvr.atdiam.value)*PI,2)
    document.mvr.atrpm.value = sround(63360.0/parseFloat(document.mvr.atcirc.value),2)
  }
  else if (i == 2) // circumference changed
  {
    document.mvr.atdiam.value = sround(parseFloat(document.mvr.atcirc.value)/PI,2)
    document.mvr.atrpm.value = sround(63360.0/parseFloat(document.mvr.atcirc.value),2)
  }
  else             // revs per mile changed
  {
    document.mvr.atcirc.value = sround(63360.0/parseFloat(document.mvr.atrpm.value),2)
    document.mvr.atdiam.value = sround(parseFloat(document.mvr.atcirc.value)/PI,2)
  }
  recalc_speedo(1)
}


function recalc_speedo(i)
{
  var j = check_button(document.mvr.tireuse)
  var tr = 0

  if (document.mvr.tireuse[j].value == "A")
    tr = parseFloat(document.mvr.atrpm.value)
  else
    tr = parseFloat(document.mvr.ctrpm.value)

  if (i == 1)
    document.mvr.drivengear.value = sround(tr*parseFloat(document.mvr.gear[0].value)*parseInt(document.mvr.drivegear.value)/1000.0,1)
  else
    document.mvr.drivegear.value = sround(parseInt(document.mvr.drivengear.value)*1000.0/(tr*parseFloat(document.mvr.gear[0].value)),1)
}


function compute(win, inForm, outDoc)
{
  var i, tire_use, range_unit, num_gears=0, calc_mph=true
  var title, loopbeg, loopend, loopinc, tire_circ, num
  var minrpm=parseInt(inForm.rangelowerr.value), minmph=parseInt(inForm.rangelowerm.value)
  var maxrpm=parseInt(inForm.rangeupperr.value), maxmph=parseInt(inForm.rangeupperm.value)
  var bgc="bgcolor=FFFFC9"

  calc_diam()
  i  = check_button(inForm.tireuse)
  tire_use = inForm.tireuse[i].value
  if (tire_use == "A")
    tire_circ = parseFloat(inForm.atcirc.value)
  else
    tire_circ = parseFloat(inForm.ctcirc.value)

  i  = check_button(inForm.rangeunit)
  range_unit = inForm.rangeunit[i].value

  if (range_unit == "M")
  {
    title = "RPM Calculator"
    calc_mph = false
  }
  else
    title = "MPH Calculator"

  for (var i=0; i<inForm.gear.length; i++)
  {
    if (!(isNaN(inForm.gear[i].value)) && inForm.gear[i].value > 0.0)
      num_gears++;
    else
      break;
  }

  outDoc.open()
  outDoc.clear()
  outDoc.writeln("<html><head><title>"+title+"</title></head><body>")
  outDoc.writeln("<center><h2>"+title+"</h2>")

  outDoc.writeln("<table border=1>")

  if (calc_mph)
  {
    outDoc.writeln("<th "+bgc+">RPM</th>")
    loopbeg = minrpm
    loopend = maxrpm
    loopinc = parseInt(inForm.rangeincr.value)
  }
  else
  {
    outDoc.writeln("<th "+bgc+">MPH</th>")
    loopbeg = minmph
    loopend = maxmph
    loopinc = parseInt(inForm.rangeincm.value)
  }

  for (var i=1; i<num_gears; i++)
    outDoc.write("<th "+bgc+">"+i+"</th>")

  for (var i=loopbeg; i<=loopend; i+=loopinc)
  {
    outDoc.write("<tr>")

    outDoc.write("<td align=center>"+i+"</td>")

    for (var g=1; g<num_gears; g++)
    {
      outDoc.write("<td align=center>")
      if (calc_mph)
      {
        num = i*tire_circ/(inForm.gear[0].value*inForm.gear[g].value*1056.0)
        if (num <= maxmph)
          outDoc.write(sround(num,1))
        else
          outDoc.write("----")
      }
      else
      {
        num = i*inForm.gear[0].value*inForm.gear[g].value*1056.0/tire_circ
        if (num >= minrpm && num <= maxrpm)
          outDoc.write(round(num,0))
        else
          outDoc.write("----")
      }
      outDoc.write("</td>")
    }

    outDoc.writeln("</tr>")
  }

  outDoc.writeln("</table>")

  outDoc.writeln("</center></body></html>")
  outDoc.close()
}

function go()
{
  output = window.open("","MVROut","width=500,height=450,scrollbars,toolbar,resizable,status")
  output.focus()
  output.defaultStatus = "Computing..."
  compute(window,window.document.mvr,output.document)
  output.defaultStatus = ""
}


// -->
