// constants
PRECISION = 5;
fourPI = 4.0*Math.PI;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function calculate_Pt()
{
//	alert("Calculate pt called");	// test only
	
// read in the values
//	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);
	
	var Gt = Math.pow( 10,(Gt_dBi/10) );
	var Gr = Math.pow( 10,(Gr_dBi/10) );

// calculate required transmit power
	var four_pi_r_over_lamda = fourPI*range_meters/wavelength_m
	var four_pi_r_over_lamda_all_squared = four_pi_r_over_lamda*four_pi_r_over_lamda;
	
	var Pt_W = Pr_W/(Gt*Gr) * four_pi_r_over_lamda_all_squared;
	var Pt_dBm = 10*Math.log(Pt_W*1000)/Math.LN10;
	
// write answer to form

	document.friis_form.Pt_dBm.value = parseFloat( Pt_dBm.toPrecision(PRECISION) );
	document.friis_form.Pt_W.value   = parseFloat( Pt_W.toPrecision(PRECISION) );
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calculate_Gt()
{
	//alert("Calculate gt called");
// read in the values
	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
//	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);

// calculate required transmit gain
	var four_pi_r_over_lamda = fourPI*range_meters/wavelength_m
	var four_pi_r_over_lamda_all_squared = four_pi_r_over_lamda*four_pi_r_over_lamda;
	var Gr = Math.pow( 10,(Gr_dBi/10) );

	var Gt = Pr_W/(Pt_W*Gr) * four_pi_r_over_lamda_all_squared;
	
	var Gt_dBi = 10*Math.log(Gt)/Math.LN10;	
	var Gt_dBd = Gt_dBi - 2.15;
	
	// write values to from
	document.friis_form.Gt_dBi.value = parseFloat( Gt_dBi.toPrecision(PRECISION) );
	document.friis_form.Gt_dBd.value = parseFloat( Gt_dBd.toPrecision(PRECISION) );

}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calculate_Gr()
{
	//alert("Calculate gr called");
// read in the values
	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
//	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);
	
// calculate required transmit gain
	var four_pi_r_over_lamda = fourPI*range_meters/wavelength_m
	var four_pi_r_over_lamda_all_squared = four_pi_r_over_lamda*four_pi_r_over_lamda;
	var Gt = Math.pow( 10,(Gt_dBi/10) );

	var Gr = Pr_W/(Pt_W*Gt) * four_pi_r_over_lamda_all_squared;
	
	var Gr_dBi = 10*Math.log(Gr)/Math.LN10;	
	var Gr_dBd = Gr_dBi - 2.15;
	
	// write values to from
	document.friis_form.Gr_dBi.value = parseFloat( Gr_dBi.toPrecision(PRECISION) );
	document.friis_form.Gr_dBd.value = parseFloat( Gr_dBd.toPrecision(PRECISION) );
	
	
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calculate_Pr()
{
	//alert("Calculate pr called");
// read in the values
	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
//	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);

	var Gt = Math.pow( 10,(Gt_dBi/10) );
	var Gr = Math.pow( 10,(Gr_dBi/10) );
	var wavelength_over_four_pi_r = wavelength_m / (fourPI*range_meters);
	var wavelength_over_four_pi_r_all_squared = wavelength_over_four_pi_r * wavelength_over_four_pi_r;
	
	var Pr_W = Pt_W*Gt*Gr*wavelength_over_four_pi_r_all_squared;
	var Pr_dBm = 10*Math.log(Pr_W*1000.0)/Math.LN10;
	document.friis_form.Pr_dBm.value = parseFloat( Pr_dBm.toPrecision(PRECISION) );
	document.friis_form.Pr_W.value   = parseFloat( Pr_W.toPrecision(PRECISION) );
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calculate_range()
{
	//alert("Calculate r called");
// read in the values
	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
//	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);

	var Gt = Math.pow( 10,(Gt_dBi/10) );
	var Gr = Math.pow( 10,(Gr_dBi/10) );

	range_meters = wavelength_m/(fourPI)*Math.sqrt(Gt*Gr*Pt_W/Pr_W);
	var range_miles = range_meters/1609.344;
	
	document.friis_form.range_miles.value  = parseFloat( range_miles.toPrecision(PRECISION) );
	document.friis_form.range_meters.value  = parseFloat( range_meters.toPrecision(PRECISION) );	
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calculate_freq()
{
	//alert("Calculate f called");
// read in the values
	var Pt_W 			= parseFloat(document.friis_form.Pt_W.value);
	var Gt_dBi 			= parseFloat(document.friis_form.Gt_dBi.value);
	var Gr_dBi 			= parseFloat(document.friis_form.Gr_dBi.value);
	var Pr_W 			= parseFloat(document.friis_form.Pr_W.value);
	var range_meters  	= parseFloat(document.friis_form.range_meters.value);
	var wavelength_m  	= parseFloat(document.friis_form.wavelength_m.value);

	var Gt = Math.pow( 10.0,(Gt_dBi/10.0) );
	var Gr = Math.pow( 10.0,(Gr_dBi/10.0) );

	var wavelength_m = fourPI*range_meters * Math.sqrt(Pr_W/Pt_W * 1/(Gt*Gr) );


	var wavelength_mm = wavelength_m*1000.0;
	var wavelength_cm = wavelength_m*100;
	
	var freq_kHz = 299792458/wavelength_mm;
	var freq_MHz = freq_kHz/1000.0;
	var freq_GHz = freq_kHz/1000000.0;

// write values to from

	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );


}
/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
function Pt_W_changed()
{
	var Pt_W = parseFloat(document.friis_form.Pt_W.value);
	var Pt_dBm = 10*Math.log(Pt_W*1000.0)/Math.LN10;
	document.friis_form.Pt_dBm.value  = parseFloat( Pt_dBm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Pt_dBm_changed()
{
	var pt_dBm = parseFloat(document.friis_form.Pt_dBm.value);
	var pt_W = Math.pow(10, (pt_dBm/10.0))/1000.0;
	document.friis_form.Pt_W.value  = parseFloat( pt_W.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Gt_dBi_changed()
{
	var Gt_dBi = parseFloat(document.friis_form.Gt_dBi.value);
	var Gt_dBd = Gt_dBi - 2.15;
	document.friis_form.Gt_dBd.value  = parseFloat( Gt_dBd.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Gt_dBd_changed()
{
	var Gt_dBd = parseFloat(document.friis_form.Gt_dBd.value);
	var Gt_dBi = Gt_dBd + 2.15;
	document.friis_form.Gt_dBi.value  = parseFloat( Gt_dBi.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Gr_dBi_changed()
{
	var Gr_dBi = parseFloat(document.friis_form.Gr_dBi.value);
	var Gr_dBd = Gr_dBi - 2.15;
	document.friis_form.Gr_dBd.value  = parseFloat( Gr_dBd.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Gr_dBd_changed()
{
	var Gr_dBd = parseFloat(document.friis_form.Gr_dBd.value);
	var Gr_dBi = Gr_dBd + 2.15;
	document.friis_form.Gr_dBi.value  = parseFloat( Gr_dBi.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Pr_W_changed()

{
	var pr_W = parseFloat(document.friis_form.Pr_W.value);
	var pr_dBm = 10*Math.log(pr_W*1000.0)/Math.LN10;
	document.friis_form.Pr_dBm.value  = parseFloat( pr_dBm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function Pr_dBm_changed()
{
	var pr_dBm = parseFloat(document.friis_form.Pr_dBm.value);
	var pr_W = Math.pow(10, (pr_dBm/10.0))/1000.0;
	document.friis_form.Pr_W.value  = parseFloat( pr_W.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function range_meters_changed()
{
	var range_meters = parseFloat(document.friis_form.range_meters.value);
	var range_miles = range_meters/1609.344;
	document.friis_form.range_miles.value  = parseFloat( range_miles.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function range_miles_changed()
{
	var range_miles = parseFloat(document.friis_form.range_miles.value);
	var range_meters = range_miles*1609.344;
	document.friis_form.range_meters.value  = parseFloat( range_meters.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function freq_kHz_changed()
{
	var freq_kHz = parseFloat(document.friis_form.freq_kHz.value);
	var freq_MHz = freq_kHz/1000.0;
	var freq_GHz = freq_kHz/1000000.0;
	
	var wavelength_mm = 299792458/(freq_kHz);
	var wavelength_cm = wavelength_mm/10;
	var wavelength_m  = wavelength_mm/1000;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}
//////////////////////////////////////////////////////////////////////////////////
function freq_MHz_changed()
{
	var freq_MHz = parseFloat(document.friis_form.freq_MHz.value);
	var freq_kHz = freq_MHz*1000.0;
	var freq_GHz = freq_MHz/1000.0;
	
	var wavelength_mm = 299792458/(freq_kHz);
	var wavelength_cm = wavelength_mm/10;
	var wavelength_m  = wavelength_mm/1000;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function freq_GHz_changed()
{
	var freq_GHz = parseFloat(document.friis_form.freq_GHz.value);
	var freq_kHz = freq_GHz*1000000.0;
	var freq_MHz = freq_GHz*1000.0;
	
	var wavelength_mm = 299792458/(freq_kHz);
	var wavelength_cm = wavelength_mm/10;
	var wavelength_m  = wavelength_mm/1000;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function wavelength_m_changed()
{
	var wavelength_m = parseFloat(document.friis_form.wavelength_m.value);
	
	var wavelength_mm = wavelength_m*1000.0;
	var wavelength_cm = wavelength_m*100;
//	var wavelength_m  = wavelength_mm/1000;
	
	var freq_kHz = 299792458/wavelength_mm;
	var freq_MHz = freq_kHz/1000.0;
	var freq_GHz = freq_kHz/1000000.0;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function wavelength_cm_changed()
{
	var wavelength_cm = parseFloat(document.friis_form.wavelength_cm.value);
	
	var wavelength_m  = wavelength_cm/100.0;
	var wavelength_mm = wavelength_cm*10.0;
	
	var freq_kHz = 299792458/wavelength_mm;
	var freq_MHz = freq_kHz/1000.0;
	var freq_GHz = freq_kHz/1000000.0;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
	
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}

//////////////////////////////////////////////////////////////////////////////////
function wavelength_mm_changed()
{
	var wavelength_mm = parseFloat(document.friis_form.wavelength_mm.value);
	
	var wavelength_m  = wavelength_mm/1000.0;
	var wavelength_cm = wavelength_m*100.0;
	
	var freq_kHz = 299792458/wavelength_mm;
	var freq_MHz = freq_kHz/1000.0;
	var freq_GHz = freq_kHz/1000000.0;
	
	document.friis_form.freq_kHz.value  = parseFloat( freq_kHz.toPrecision(PRECISION) );
	document.friis_form.freq_MHz.value  = parseFloat( freq_MHz.toPrecision(PRECISION) );
	document.friis_form.freq_GHz.value  = parseFloat( freq_GHz.toPrecision(PRECISION) );
						
	document.friis_form.wavelength_m.value  = parseFloat( wavelength_m.toPrecision(PRECISION) );
	document.friis_form.wavelength_cm.value = parseFloat( wavelength_cm.toPrecision(PRECISION) );
	document.friis_form.wavelength_mm.value = parseFloat( wavelength_mm.toPrecision(PRECISION) );
}

