<!--
//This code supports the Rotor Calculations application

function square(n) {
    return n*n
}
function toOneDecimal(n) {
    n = Math.round(n*10.0)
    var w = Math.floor(n/10)
    var f = Math.floor(n%10)
    return w + "." + f
}
function speed_from_RCF(RCF, r_mm) {
    return Math.round(1000.0 * Math.sqrt(RCF / (1.12 * r_mm)))
}   
function speed_from_kFactor(kFactor, r_ratio) {
    return Math.round(Math.sqrt((Math.log(r_ratio)/kFactor) * (1.0e13/3600.0))/0.10472)
}
function RCF_from_speed(speed, r_mm) {
    return Math.round(1.12 * square(speed/1000.0) * r_mm)
}
function kFactor_from_speed(speed, r_ratio) {
    return (Math.log(r_ratio)/square(speed * 0.10472)) * (1.0e13/3600.0);
}

var rSelected
var rMAX
var rMIN
var rAVG
var maxRPM
var i

function setup_Rotor_vars (form) {
    var ri=form.Rotor.selectedIndex;
    if (ri < 0) {	// shouldn't happen
       alert("You must select a rotor!")
       return false
    }
    if (ri == 0) {	// -Custom- rotor
       rMAX=parseFloat(form.rMAX.value)
       rMIN=parseFloat(form.rMIN.value)
       maxRPM=parseFloat(form.maxRPM.value)
    } else {
		rSelected=Rotors[ri]
       rMAX=rMAXmm[ri]
       rMIN=rMINmm[ri]
       maxRPM=RmaxRPM[ri]
       form.rSelected.value = rSelected
       form.rMAX.value = rMAX
       form.rMIN.value = rMIN
       form.maxRPM.value = maxRPM
    }
    rAVG=(rMAX+rMIN)/2.0
    return true
}

function compute_RPM(form) {
    if (!setup_Rotor_vars (form)) {
       return
    }
    var speed=0
    var RCFavg=parseFloat(form.RCFavg.value)
    var RCFmax=parseFloat(form.RCFmax.value)
    var kFactor=parseFloat(form.kFactor.value)
    with (Math)
       if (RCFavg > 0)
          speed = speed_from_RCF(RCFavg, rAVG)
       else if (RCFmax > 0)
          speed = speed_from_RCF(RCFmax, rMAX)
       else if (kFactor > 0)
          speed = speed_from_kFactor(kFactor, rMAX/rMIN)
       else {
          alert("You must specify one of:\nRCFavg, RCFmax or k-Factor!")
          return
       }
    if (speed > maxRPM) {
       alert("Computed speed exceeds rotor maximum speed.")
       // speed = maxRPM
       speed = "******"
    }
    form.RPM.value = speed
}

function compute_from_RPM(form) {
    if (!setup_Rotor_vars (form)) {
       return
    }
    var speed = parseFloat(form.RPM.value)
    if (speed > maxRPM) {
       alert("Specified speed exceeds rotor maximum speed.\nUsing rotor maximum ("+maxRPM+")")
       speed = maxRPM
       form.RPM.value = speed
    }
    form.RCFavg.value = RCF_from_speed(speed, (rMAX+rMIN)/2.0)
    form.RCFmax.value = RCF_from_speed(speed, rMAX)
    form.kFactor.value = toOneDecimal(kFactor_from_speed(speed, rMAX/rMIN))
}

function compute_from_RCFavg(form) {
    if (!setup_Rotor_vars (form)) {
       return
    }
    var RCFavg = parseFloat(form.RCFavg.value)
    var speed = speed_from_RCF(RCFavg, (rMAX+rMIN)/2.0)
    if (speed > maxRPM) {
       alert("Computed speed exceeds rotor maximum speed.\nRecomputing using rotor maximum ("+maxRPM+")")
       speed = maxRPM
       RCFavg = RCF_from_speed(speed, (rMAX+rMIN)/2.0)
       form.RCFavg.value = RCFavg
    }
    form.RPM.value = speed
    form.RCFmax.value = RCF_from_speed(speed, rMAX)
    form.kFactor.value = toOneDecimal(kFactor_from_speed(speed, rMAX/rMIN))
}

function compute_from_RCFmax(form) {
    if (!setup_Rotor_vars (form)) {
       return
    }
    var RCFmax = parseFloat(form.RCFmax.value)
    var speed = speed_from_RCF(RCFmax, rMAX)
    if (speed > maxRPM) {
       alert("Computed speed exceeds rotor maximum speed.\nRecomputing using rotor maximum ("+maxRPM+")")
       speed = maxRPM
       RCFmax = RCF_from_speed(speed, rMAX)
       form.RCFmax.value = RCFmax
    }
    form.RPM.value = speed
    form.RCFavg.value = RCF_from_speed(speed, (rMAX+rMIN)/2.0)
    form.kFactor.value = toOneDecimal(kFactor_from_speed(speed, rMAX/rMIN))
}

function compute_from_kFactor(form) {
    if (!setup_Rotor_vars (form)) {
       return
    }
    var kFactor = parseFloat(form.kFactor.value)
    var BESTkFactor = kFactor_from_speed(maxRPM, rMAX/rMIN)
    var speed = 0
    if (kFactor < BESTkFactor) {
       alert("Specified k-Factor is less than\n the best possible for this rotor.\n" +
             "Recomputing using rotor's best possible k-Factor.")
       kFactor = BESTkFactor
       form.kFactor.value = toOneDecimal(kFactor)
       speed = maxRPM
    } else {
       speed = speed_from_kFactor(kFactor, rMAX/rMIN)
    }
    form.RPM.value = speed
    form.RCFavg.value = RCF_from_speed(speed, (rMAX+rMIN)/2.0)
    form.RCFmax.value = RCF_from_speed(speed, rMAX)
}

function go(form)
{
location=document.test.RightMenu.options[document.test.RightMenu.selectedIndex].value
}

//-->
