//CALCULATORS
// needs cleanup


// global constants
var lightspeedm = 299792458;
var km = 1000;
var m = 1;
var cm = 0.01;
var mm = 0.001;
var nm=  0.000000001;
var ft = 0.3048;
var inch =  0.0254;
var hz = 1;
var khz = 1000;
var mhz = 1000000;
var ghz = 1000000000;
var thz = 1000000000000;
var vacuumpermit = 0.000000000008854;
var Faradayc = 96485.31;
var idealgasconstant = 0.08205784;
var gram = 1;
var kg = 1000;




//freq to wavelength
function wavecalc(freqtowave)
{
var frequency = freqtowave.freqbase.value;
var factor = freqtowave.factor.value;
var calcd = parseFloat(lightspeedm / (frequency * factor));
freqtowave.feet.value = parseFloat(calcd / ft).toFixed(4);
freqtowave.inches.value = parseFloat(calcd / inch).toFixed(4);
freqtowave.meters.value = calcd.toFixed(4);
freqtowave.centimeters.value = parseFloat(calcd / cm).toFixed(4);
freqtowave.millimeters.value = parseFloat(calcd / mm).toFixed(4);
freqtowave.nanometers.value = parseFloat(calcd / nm).toFixed(4);
}

//wavelength to freq
function freqcalc(wavetofreq)
{
var wavelength = wavetofreq.wavetxt.value;
var unit = wavetofreq.unit.value;
var calcd = parseFloat((lightspeedm / unit) / wavelength);
wavetofreq.hz.value = calcd.toFixed(4);
wavetofreq.khz.value = parseFloat(calcd / khz).toFixed(4);
wavetofreq.mhz.value = parseFloat(calcd / mhz).toFixed(4);
wavetofreq.ghz.value = parseFloat(calcd / ghz).toFixed(4);
wavetofreq.thz.value = parseFloat(calcd / thz).toFixed(4);
}

//battery discharge
function BatteryDischarge(bdr) 
{
var c = parseFloat(bdr.amphours.value);
var n = parseFloat(bdr.peukert.value);
var i = parseFloat(bdr.amps.value);
var t = c / Math.pow(i,n);
bdr.actual.value = (c * i / Math.pow(i,n)).toFixed(4);
bdr.dt100.value = (t).toFixed(4);
bdr.dt80.value = (t * 0.8).toFixed(4);
bdr.dt20.value = (t * 0.2).toFixed(4);
}

//battery capacity
function BatteryCapacity(battcap) 
{
var dayenergyuse = parseFloat(battcap.watts.value);
var daystored = parseFloat(battcap.daysusage.value);
var lossfact = parseFloat(battcap.lossfactor.value);
var depthdischargefact = parseFloat(battcap.dischargefactor.value);
var voltage = parseFloat(battcap.voltage.value);	
var batterybank = parseFloat(dayenergyuse * daystored * lossfact * depthdischargefact);
var capacity = parseFloat(batterybank / voltage * 10) / 10;
battcap.capacity.value = capacity.toFixed(4);
}

//flat plate capacitor
function capcompute(Capcalc)
{
var tempindex = Capcalc.units.selectedIndex;
var unit = Capcalc.units.options[tempindex].value;
var thick = Capcalc.thick.value * unit;
var area = ((Capcalc.length.value * Capcalc.width.value) * unit);
var plates = Capcalc.plates.value;
var dieconstant = Capcalc.dieconstant.value;
var farad = parseFloat(((vacuumpermit * dieconstant * area) / thick) * (plates -1));
var microfarad = farad * 1000000;
var picofarad = farad * 1000000000000;
Capcalc.picofarads.value = picofarad.toFixed(4);
Capcalc.microfarads.value = microfarad.toFixed(4);
Capcalc.farads.value = farad.toFixed(4);
}

function setDC(Capcalc)
{
tempindex = Capcalc.dielectric.selectedIndex;
Capcalc.dieconstant.value = Capcalc.dielectric.options[tempindex].value;
}

function setUnit(Capcalc)
{
if (Capcalc.units.value == inch)
	{
	Capcalc.Xunit.value = "inches";
	Capcalc.Yunit.value = "inches";
	Capcalc.Zunit.value = "inches";
	}
if (Capcalc.units.value == ft)
	{
	Capcalc.Xunit.value = "feet";
	Capcalc.Yunit.value = "feet";
	Capcalc.Zunit.value = "feet";
	}
if (Capcalc.units.value == mm)
	{
	Capcalc.Xunit.value = "millimeters";
	Capcalc.Yunit.value = "millimeters";
	Capcalc.Zunit.value = "millimeters";
	}
if (Capcalc.units.value == m)
	{
	Capcalc.Xunit.value = "meters";
	Capcalc.Yunit.value = "meters";
	Capcalc.Zunit.value = "meters";
	}
}



//h2o gas volume
function H2Ogas(watergascalc)
{
var liters = parseFloat(watergascalc.liters.value);
var volts = parseFloat(watergascalc.volts.value);
var amps = parseFloat(watergascalc.amps2.value);
var cells = parseFloat(watergascalc.cells.value);
var minutes = parseFloat(watergascalc.minutes.value);
var tempC = parseFloat(watergascalc.tempC.value);
var pressure = parseFloat(watergascalc.pressure.value);
var HydrogenAMU = 1.008;
var OxygenAMU = 16.00;
var H2Omolg = (HydrogenAMU * 2) + OxygenAMU;
var litermoles = (1 / H2Omolg) * kg;
var moles = liters * litermoles;
var tempK = tempC + 273.15;
var atm = pressure;
var moleratio = 1.5;
var gasvolume = parseFloat(((moles * tempK * idealgasconstant) / atm) * moleratio);
var h2vol = gasvolume / moleratio;
var o2vol = gasvolume - h2vol;
var watts = volts * amps;
var seconds = minutes * 60;
var voltspercell = volts / cells;
var rate = idealgasconstant * amps * tempK * seconds;
var gasvolumerate = ((rate / (Faradayc * atm * 2)) + (rate / (Faradayc * atm * 4))) * cells;
watergascalc.h2gas.value = h2vol.toFixed(4);
watergascalc.o2gas.value = o2vol.toFixed(4);
watergascalc.h2o2gas.value = gasvolume.toFixed(4);
watergascalc.gasvolumerate.value = gasvolumerate.toFixed(4);
watergascalc.voltspercell.value = voltspercell.toFixed(4);

//var PW = 101300 * (1.5 * moles) * 0.00224 * (298/273);
//var U = (28583 * moles) - PW;
//var G = (28583 * moles) - (4870 * moles);
//watergascalc.pw.value = PW.toFixed(4);
//watergascalc.u.value = U.toFixed(4);
//watergascalc.g.value = G.toFixed(4);
}