  // calculations for scale converter, January 06, 2005
  // copyright Bernd Krueger, 2005-2007

function calcsca(form,index)
{
  var m_in = 2.54e-2;    // metre per international inch (exact, NIST)
  var m_ft = 3.048e-1;   // metre per international foot (exact, NIST)
  var m_mi = 1.609344e3; // metre per international mile (exact, NIST)

  if(form.calib.checked)
    {
    // calibration mode
      if(index>=0 && index<2)
	{
	  if(index==0) v=parseFloat(form.mcm.value)*0.01;
	  if(index==1) v=parseFloat(form.min.value)*m_in;
	  form.mcm.value=ausga(form,v/0.01);
	  form.min.value=ausga(form,v/m_in);
	  return;
	}
      if(index>1) 
	{
	  if(form.mcm.value <= 0) { warnings(2); resetcase(form); return; }
	  if(index==2) v=parseFloat(form.rkm.value)*1000.; // km real
	  if(index==3) v=parseFloat(form.rmt.value);       // m  real
	  if(index==4) v=parseFloat(form.rcm.value)*0.01;  // cm real
	  if(index==5) v=parseFloat(form.rmi.value)*m_mi;  // mi real
	  if(index==6) v=parseFloat(form.rft.value)*m_ft;  // ft real
	  if(index==7) v=parseFloat(form.rin.value)*m_in;  // in real
	  scal = v / parseFloat(form.mcm.value) * 100.;
	  form.sca.value=ausga(form,scal);
	  form.calib.checked = false;
	  return;
	}
    }
  else
    {
    // calculation mode

      if(index==-2) { form.mcm.value=""; form.rkm.value=""; form.rmt.value="";
                      form.rcm.value=""; form.min.value=""; form.rmi.value="";
                      form.rft.value=""; form.rin.value=""; 
                      form.sca.value = parseFloat(form.sca.value);
                      return; }
      if(index==-1) { v=form.storev.value; if(v==0) return; }  // base is m reality
      var scal = parseFloat(form.sca.value);
      if(!isFinite(scal) || scal<=0) {warnings(1); return;}
      
      if(index==0) v=parseFloat(form.mcm.value)*0.01*scal;     // cm map
      if(index==2) v=parseFloat(form.rkm.value)*1000.;         // km real
      if(index==3) v=parseFloat(form.rmt.value);               // m  real
      if(index==4) v=parseFloat(form.rcm.value)*0.01;          // cm real

      if(index==1) v=parseFloat(form.min.value)*m_in*scal;     // in map
      if(index==5) v=parseFloat(form.rmi.value)*m_mi;          // mi real
      if(index==6) v=parseFloat(form.rft.value)*m_ft;          // ft real
      if(index==7) v=parseFloat(form.rin.value)*m_in;          // in real
      form.storev.value=v;
  
      form.mcm.value=ausga(form,v/0.01/scal);   // cm map 
      form.rkm.value=ausga(form,v/1000.);       // km real
      form.rmt.value=ausga(form,v);             // m  real
      form.rcm.value=ausga(form,v/0.01);        // cm real
      form.min.value=ausga(form,v/m_in/scal);   // in map 
      form.rmi.value=ausga(form,v/m_mi);        // mi real
      form.rft.value=ausga(form,v/m_ft);        // ft real
      form.rin.value=ausga(form,v/m_in);        // in real
    }
  return;
}
function resetcase(form)
{
  if(form.calib.checked)
    {
      form.sca.value="";
      resetval(form);
    }
  return;
}
function resetval(form)
{
  form.mcm.value="";
  form.rkm.value="";
  form.rmt.value="";
  form.rcm.value="";
  form.min.value="";
  form.rmi.value="";
  form.rft.value="";
  form.rin.value="";
  return;
}
