function calcln2(form,index)
  // converts length units, Novemver 28, 2008
  // copyright Bernd Krueger, 2008-2010
{
  var m_ft = 3.048e-1;        // metre per international foot (exact, NIST)
  var m_fts = 1200./3937.;    // metre per survey foot (exact, NIST)

  imfac0 = new Array(5280., 3., 1., 1.0/12.);
  imfac1 = new Array(1760., 3., 12., 0.);
  sufac0 = new Array(5280., 660., 66., 16.5, 3., 1., 33./50., 1./12.);
  sufac1 = new Array(8., 10., 4., 5.5, 3., 50./33., 6.*33./25., 0.);
  var useu;
  
  selectcol(form);
  if(index==-1) {
     v = form.storev.value;
  }
  if(index==0) {                                          // m
     v = parseFloat(form.met.value); if(!isFinite(v) || v<=0) {warnings(1); return;}
  }
  if(index==1) {                                          // km
     v = parseFloat(form.kme.value); if(!isFinite(v) || v<=0) {warnings(1); return;}
     else { v = v*1.0e3; }}
  if(index==2) {                                          // cm
     v = parseFloat(form.cme.value); if(!isFinite(v) || v<=0) {warnings(1); return;}
     else { v = v*1.0e-2; }}
  if(index==3) {                                          // mm
     v = parseFloat(form.mme.value); if(!isFinite(v) || v<=0) {warnings(1); return;}
     else { v = v*1.0e-3; }}
  if(index==4) {                                          // Imperial, US customary
    v = 0.;
    for(var i=0; i<=3; i++) {
      if(form.chint[i].checked==true) {
        if(form.inte[i].value==' ') vus = 0.
        else vus = parseFloat(form.inte[i].value); if(!isFinite(vus)) vus=0.;
          v = v + vus*imfac0[i]; }}
     v = v *m_ft;
     if(!isFinite(v) || v<=0) {warnings(1); return;}
  }
  if(index==5) {                                          // U.S. survey
    v = 0.;
    for(var i=0; i<=7; i++) {
      if(form.chsur[i].checked==true) {
        if(form.asur[i].value==' ') vus = 0.
        else vus = parseFloat(form.asur[i].value); if(!isFinite(vus)) vus=0.;
          v = v + vus*sufac0[i]; }}
     v = v *m_fts;
     if(!isFinite(v) || v<=0) {warnings(1); return;}
  }
  form.storev.value = v;
                                                   // output of metric SI units
  form.met.value = ausga(form,v);
  form.kme.value = ausga(form,v/1.0e3);
  form.cme.value = ausga(form,v*1.0e2);
  form.mme.value = ausga(form,v*1.0e3);

  st=1+form.stell.selectedIndex;
  mini = v * Math.pow(10,-st); 

  useu = -1;                                       // output of US customary units 
  minus = mini/m_ft;
  for(var i=3; i>=0; i--) {                             // find smallest usable unit
    if(form.chint[i].checked==true) {useu = i; break;}}
  if(useu>=0) {
    vus = v/m_ft/5280.;
    for(var i=0; i<=3; i++) { 
      if(useu==i) {
        if(vus>=minus/imfac0[i]) form.inte[i].value = ausga(form,vus);
        else form.inte[i].value = ausga(form,0);
        break;}
      else {if(form.chint[i].checked==true) {
        vusfl = Math.floor(vus);  vusro = Math.round(vus);
        if(vusfl!=vusro && vus>(vusro-minus/imfac0[i])) vusfl = vusro;
        form.inte[i].value = ausfst(vusfl,0); 
        vus = (vus - vusfl) * imfac1[i];
        if(vus<0.) vus=0.; }
        else{ vus = vus * imfac1[i];}}
  }}
  useu = -1;                                       // output U.S. survey units
  minus = mini/m_fts;
  for(var i=7; i>=0; i--) {                             // find smallest usable unit
    if(form.chsur[i].checked==true) {useu = i; break;}}
  if(useu>=0) {
    vus = v/m_fts/5280.;
    for(var i=0; i<=7; i++) { 
      if(useu==i) {
        if(vus>=minus/sufac0[i]) form.asur[i].value = ausga(form,vus);
        else form.asur[i].value = ausga(form,0);
        break;}
      else {if(form.chsur[i].checked==true) {
        vusfl = Math.floor(vus);  vusro = Math.round(vus);
        if(vusfl!=vusro && vus>(vusro-minus/sufac0[i])) vusfl = vusro;
        form.asur[i].value = ausfst(vusfl,0); 
        vus = (vus - vusfl) * sufac1[i];
        if(vus<0.) vus=0.; }
        else{ vus = vus * sufac1[i];}}
  }}
  return;
}
function selectcol(form)
  // selects colors for ln2 converter
  // copyright Bernd Krueger, 2008-2010
{
  for(var i=0; i<=3; i++) {
    if(form.chint[i].checked==true) document.getElementsByName('inte')[i].style.backgroundColor = '#F0FFF0';
    else { document.getElementsByName('inte')[i].style.backgroundColor = '#B0C4DE';
           form.inte[i].value = ' '; }}
  for(var i=0; i<=7; i++) {
    if(form.chsur[i].checked==true) document.getElementsByName('asur')[i].style.backgroundColor = 'ivory';
    else { document.getElementsByName('asur')[i].style.backgroundColor = '#B0C4DE';
           form.asur[i].value = ' '; }}
  return;
}
function blankln2(form)
  // sets fields in area 2 converter to blank without changing chosen units
  // copyright Bernd Krueger, 2008-2010
{
  form.kme.value = ' '; form.met.value = ' '; form.cme.value = ' ';
  form.mme.value = ' ';
  for (var i=0; i<=3; i++) form.inte[i].value = ' ';
  for (var i=0; i<=7; i++) form.asur[i].value = ' ';
  form.storev.value = 0.;
  return;
}
