//global variables
var previous_operation="";
var meter="";
var memory="";

// Set conversion factors for each item.
var factor_array = new Array(1, 39.37007874, 3.280839895, 1.093613298);
//                           m, m to in,     m to ft,     m to yards
function setDefaults()
{
  for(i = 0; i<4; i++)
   {
     document.getElementById('val' + i).value = "";
   }  
   document.getElementById('factor').value = "";
   document.getElementById('store_result_meter').value = "";     
   document.getElementById('val0').readOnly=false;
   document.getElementById('val1').readOnly=false;
   document.getElementById('val2').readOnly=false;
   document.getElementById('val3').readOnly=false;      
   document.getElementById('val0').focus();
   previos_operation="";
   meter="";
   memory="";
}

function checkIt(evt, field) 
{
  evt = (evt) ? evt : window.event;
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  if(charCode == 46)
  {
    pos = field.value.indexOf(".");
    if( pos != -1)
    {
      alert("This field accepts decimal only once");
      return false;
    }
  }

  if (charCode > 31 && (charCode < 46 || charCode > 57 || charCode == 47)) 
  {
    alert("This field accepts decimal numbers only");
    return false;
  }

  //status = "";
  return true;
}

function calculator(oper, units_meter)
{
  if (previous_operation == "")
  {
    memory = units_meter;
  }
  else if (previous_operation == "add")
  {
    memory = memory + units_meter;
  }
  else if (previous_operation == "sub")
  {
    memory = memory - units_meter;
  }  
  else if (previous_operation == "multiply")
  {
    factor_value = document.getElementById('factor').value;
    factor_value = (factor_value != "") ? factor_value : 1;    
    memory = memory * factor_value;    
  }
  else if (previous_operation == "divide")
  {
    factor_value = document.getElementById('factor').value;
    factor_value = (factor_value != "") ? factor_value : 1;    
    memory = memory / factor_value;    
  }  
  previous_operation = oper;
  return memory;
}

function show_results()
{
  // check if the user has entered value in multiple fields.Also
  // Get the value entered by the user
  var first_value = "";
  var entered_value_counter = 0; 
  var meter_value=""; 
  for(i = 3; i>=0; i--)
  {
    var element = document.getElementById('val' + i);
    var state = document.getElementById('val0').readOnly;
    if (state == true)
    {
      first_value = memory;
      meter_value = memory;
      break;
    }     
    if(element.value.length != 0)
    {
      first_value = element.value;
      con_fact = factor_array[i];
      meter_value = parseFloat(first_value/con_fact);      
      entered_value_counter++;
      //if (entered_value_counter > 1 && (previous_operation == "add" || previous_operation == "sub" || previous_operation == ""))
      if (entered_value_counter > 1 && state == false)// show error and reset values
      {
        alert("Enter only one field for calculation");
        document.getElementById('val0').focus();  
        first_value = "";
        entered_value_counter = 0;                 
        meter_value = '';
        return false;
      }
    }    
  }
  if (previous_operation == "multiply"  ||  previous_operation == "divide")
  {
    factor_value = document.getElementById('factor').value;
    if(factor_value == "")
    {
      alert("Enter multiplication/division factor");
      document.getElementById('factor').focus();
      return false;
    }
  }
  
  if(first_value == "" && first_value.length == 0)
  {
    first_value = 0;
  }  
  current_operation="";
  meter = calculator(current_operation, meter_value);
  inches = Math.round((meter * 39.37007874)*100)/100;
  feet = Math.round((meter * 3.280839895)*100)/100;
  yard = Math.round((meter * 1.093613298)*100)/100;            

  // show rounded off value of meter to the user
  meter_shown = Math.round((meter * 1) *100)/100;
  document.getElementById('val0').value = meter_shown;
  
  document.getElementById('val1').value = inches;
  document.getElementById('val2').value = feet;
  document.getElementById('val3').value = yard;
  
  document.getElementById('val0').readOnly=true;
  document.getElementById('val1').readOnly=true;
  document.getElementById('val2').readOnly=true;
  document.getElementById('val3').readOnly=true;    
  document.getElementById('factor').value="";    
}

function operate(current_operation)
{
  var first_value = "";
  var entered_value_counter = 0;  
  var meter_value="";

  for(i = 3; i>=0; i--)
  {
    var state = document.getElementById('val0').readOnly;
    if (state == true)
    {
      first_value = memory;
      meter_value = memory;
      break;
    }  
    var element = document.getElementById('val' + i);
    if(element.value.length != 0)
    {
      entered_value_counter++;
      first_value = element.value;
      con_fact = factor_array[i];
      meter_value = parseFloat(first_value/con_fact);        
    }
    if (entered_value_counter > 1 && state == false)// show error and reset values
    {
      alert("Enter only one field for calculation");
      document.getElementById('val0').focus();  
      first_value = "";
      entered_value_counter = 0;                 
      meter_value = "";
      return false;
    }    
  }
  
   if(first_value == "")
   {
   meter_value = 0;
   }
   // call calculate_values
   meter = calculator(current_operation, meter_value);  
  
  if (current_operation == "add" || current_operation == "sub")
  {
    // reset the fields
    document.getElementById('val0').readOnly=false;
    document.getElementById('val1').readOnly=false;
    document.getElementById('val2').readOnly=false;
    document.getElementById('val3').readOnly=false;
    for(i = 0; i<4; i++)
    {
      document.getElementById('val' + i).value = "";
    }
    document.getElementById('val0').focus();  
  }
  else if (current_operation == "multiply" || current_operation == "divide")
  {
    // reset the fields
    document.getElementById('val0').readOnly=true;
    document.getElementById('val1').readOnly=true;
    document.getElementById('val2').readOnly=true;
    document.getElementById('val3').readOnly=true;
    document.getElementById('factor').value = ""; 
    document.getElementById('factor').focus(); 
  }
}
