// Splitter and Attencuator Calculators 
// Copyright (c) 2008, CEPD Inc.
// http://www.cepd.com

function log10(val) {
  return Math.log(val)/Math.log(10);
}

// attempt to get around toy language bugs
function round(value, digits) {
  var ivalue;
  var power;
  
  power = Math.pow(10,digits);
  value = value * power;
  ivalue = Math.floor(value);
  if ((value-ivalue) > 0.499999999) {
    ivalue++;
 }
  ivalue=ivalue/power;

  return ivalue;
}




function updateVPP(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Vpp=parseFloat(form.PP.value,10);
    var Vrms=(Vpp/(2*Math.sqrt(2)))/(Math.pow(10,Correct/20));
    var Power = (1000*Math.pow(Vrms,2))/Z;
    var Dbm = log10(1000*Math.pow(Vrms,2)/Z)*10;
    var Dbu = log10(Vrms/Dbu0)*20;
    var Dbv = log10(Vrms)*20;
    
    form.RMS.value = round(Vrms,4);
    form.MW.value = round(Power,4);
    form.DBM.value = round(Dbm,4);
    form.DBU.value = round(Dbu,4);
    form.DBV.value = round(Dbv,4);

}

function updateVRMS(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Vrms=parseFloat(form.RMS.value,10);
    var Vpp= Vrms*2*Math.sqrt(2)*Math.pow(10,Correct/20);
    var Power = (1000*Math.pow(Vrms,2))/Z;
    var Dbm = log10(1000*Math.pow(Vrms,2)/Z)*10;
    var Dbu = log10(Vrms/Dbu0)*20;
    var Dbv = log10(Vrms)*20;
    
    form.PP.value = round(Vpp,4);
    form.MW.value = round(Power,4);
    form.DBM.value = round(Dbm,4);
    form.DBU.value = round(Dbu,4);
    form.DBV.value = round(Dbv,4);

}    

function updatePOWER(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Power=parseFloat(form.MW.value,10);
    var Vrms=Math.sqrt(Z*Power/1000);
    var Vpp= Vrms*2*Math.sqrt(2)*Math.pow(10,Correct/20);
    var Dbm = log10(1000*Math.pow(Vrms,2)/Z)*10;
    var Dbu = log10(Vrms/Dbu0)*20;
    var Dbv = log10(Vrms)*20;
    
    form.PP.value = round(Vpp,4);
    form.RMS.value = round(Vrms,4);
    form.DBM.value = round(Dbm,4);
    form.DBU.value = round(Dbu,4);
    form.DBV.value = round(Dbv,4);

}

function updateDBM(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Dbm=parseFloat(form.DBM.value,10);
    var Vrms=Math.sqrt(Z*(Math.pow(10,Dbm/10)/1000));
    var Vpp= Vrms*2*Math.sqrt(2)*Math.pow(10,Correct/20);
    var Power = (1000*Math.pow(Vrms,2))/Z;
    var Dbu = log10(Vrms/Dbu0)*20;
    var Dbv = log10(Vrms)*20;
    
    form.PP.value = round(Vpp,4);
    form.RMS.value = round(Vrms,4);
    form.MW.value = round(Power,4);
    form.DBU.value = round(Dbu,4);
    form.DBV.value = round(Dbv,4);

}

function updateDBU(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Dbu=parseFloat(form.DBU.value,10);
    var Vrms=Dbu0*Math.pow(10,Dbu/20)
    var Vpp= Vrms*2*Math.sqrt(2)*Math.pow(10,Correct/20);
    var Power = (1000*Math.pow(Vrms,2))/Z;
    var Dbm = log10(1000*Math.pow(Vrms,2)/Z)*10;
    var Dbv = log10(Vrms)*20;
    
    form.PP.value = round(Vpp,4);
    form.RMS.value = round(Vrms,4);
    form.MW.value = round(Power,4);
    form.DBM.value = round(Dbm,4);
    form.DBV.value = round(Dbv,4);

}

function updateDBV(form){
    var Dbu0 = Math.sqrt(.001*600);
    var Z=parseFloat(form.Z.value,10);  
    var Correct=parseFloat(form.Correct.value,10);
    var Dbv=parseFloat(form.DBV.value,10);
    var Vrms=Math.pow(10,Dbv/20)
    var Vpp= Vrms*2*Math.sqrt(2)*Math.pow(10,Correct/20);
    var Power = (1000*Math.pow(Vrms,2))/Z;
    var Dbm = log10(1000*Math.pow(Vrms,2)/Z)*10;
    var Dbu = log10(Vrms/Dbu0)*20;
    
    form.PP.value = round(Vpp,4);
    form.RMS.value = round(Vrms,4);
    form.MW.value = round(Power,4);
    form.DBM.value = round(Dbm,4);
    form.DBU.value = round(Dbu,4);

}

