/*   Dialcalculator.js
	Routines necessary to make the dial calculator work
	
	Program by Lee Mager KN4GC/NNN0SYS
*/

// Variables
       var AsFreq; 
	var CenFreq;
	var MarkFreq;
	var SpaceFreq;
	var ShiftFreq;


function calculateDial()
{
       AsFreq = eval(document.DialCalc.AsFreq.value * 1000); 
	CenFreq = eval(document.DialCalc.CenFreq.value);    
	MarkFreq = eval(document.DialCalc.MarkFreq.value);  
	SpaceFreq = eval(document.DialCalc.SpaceFreq.value);
	ShiftFreq = eval(document.DialCalc.ShiftFreq.value);

   if (isNum(AsFreq))
	{
	   
	   // if the Center Frequency is given, calculate the dial frequency
	   if (isNum(CenFreq))
	   {
	      computeDial(AsFreq, CenFreq);
	   }
	   else if (isNum(MarkFreq))
	   {
	      if (isNum(SpaceFreq))
	      {
	          ShiftFreq = Math.abs(MarkFreq - SpaceFreq);
	          document.DialCalc.ShiftFreq.value = ShiftFreq;
	          computeCF(MarkFreq, SpaceFreq);
	          computeDial(AsFreq, CenFreq);
	      }
	      else if (isNum(ShiftFreq))
	      {
	          SpaceFreq = MarkFreq + ShiftFreq;
	          document.DialCalc.SpaceFreq.value = SpaceFreq;
	          computeCF(MarkFreq, SpaceFreq);
	          computeDial(AsFreq, CenFreq);
	      }
	      else
	      {
	          computeError("Insufficient Data.<br />You've entered a Mark filter Frequency. You must also enter either a Space filter Frequency or a Shift Frequency.");
	      }
	   }
	   else if (isNum(SpaceFreq))
	   {
	      if (isNum(ShiftFreq))
	      {
	          MarkFreq = SpaceFreq - ShiftFreq;
	          document.DialCalc.MarkFreq.value = MarkFreq;
	          computeCF(MarkFreq, SpaceFreq);
	          computeDial(AsFreq, CenFreq);
	      }
	      else
	      {
	          computeError("Insufficient Data.<br />You've entered a Space filter Frequency.   You must also enter either a Mark filter Frequency or a Shift Frequency.");
	      }
	   }
	   else
	   {
	      computeError("Insufficient Data.<br />You must enter a Center Frequency or the values necessary to calculate a Center Frequency.");
	   }
	}
	
	else
	{
	   computeError("Insufficient Data.<br />You must enter the Assigned Frequency in KiloHertz");
	}
}

function isNum(passedVal)
{
	if (isNaN(passedVal))
	{
	   return false;
	}
	if (passedVal == null)
	{
	   return false;
	}
	if (passedVal == "")
	{  
	   return false;
	}
/*  for (i=0; i<passedVal.length; i++)
	{
	   if (passedVal.charAt(i) < "0")
	   {
	       return false;
	   }
	   if (passedVal.charAt(i) > "9")
	   {
	       return false;
	   }
	}
*/  return true;
}
function round(val, places) {
// rounds number to "places" decimal places
// rounds down, will not add places...
	val = val * Math.pow(10, places)
	val = Math.round(val)
	val = val / Math.pow(10, places)
	return val
}

function computeError(errMsg)
{
	debugWin = window.open("", "debugWin", "height=200, width=300,resize=yes");
	debugWin.document.write("There was an error ");
	debugWin.document.write("<br />The error was: " + errMsg );
	debugWin.document.close();
	return true;
}

function computeDial(AsFreq, CenFreq)
{
	var USBDial = (AsFreq - CenFreq);
//  alert("USB Dial = " + USBDial);
	var LSBDial = (AsFreq + CenFreq);
	document.DialCalc.USBDial.value = round(USBDial/1000,3);
	document.DialCalc.LSBDial.value = round(LSBDial/1000,3);

}

function computeCF(MarkFreq, SpaceFreq)
{
	CenFreq = (MarkFreq + SpaceFreq)/2;
//  alert("Center Frequency = " + CenFreq);
	document.DialCalc.CenFreq.value = CenFreq;
}

function clearForm()
{
	document.DialCalc.AsFreq.value = "";
	document.DialCalc.CenFreq.value = "";
	document.DialCalc.MarkFreq.value = "";
	document.DialCalc.SpaceFreq.value = "";
	document.DialCalc.ShiftFreq.value = "";
	document.DialCalc.USBDial.value = "";
	document.DialCalc.LSBDial.value = "";
}
