// Author    : Robert Collette (ROBERT-COLLETTE@worldnet.att.net) 

var Conversion = {
  rsize : 8,
  formatvalue : function(input, rsize) {
     var invalid = "**************************";
     var nines = "999999999999999999999999";
     var strin = "" + input;
     var fltin = parseFloat(strin);
     if (strin.length <= rsize) { return strin; }
     if (strin.indexOf("e") != -1 ||
         fltin > parseFloat(nines.substring(0,rsize)+".4")) {
       return invalid.substring(0, rsize);
     }
     var rounded = "" + (fltin + (fltin - parseFloat(strin.substring(0, rsize))));
     return rounded.substring(0, rsize);
  },
  clearform : function() {
    $$('.cff').each(function(elm){
      elm.value = "";
    });
    return true;
  },
  clear : function(cl) {
    $$(cl).each(function(elm){
      elm.value = "";
    });
    return true;
  },
  validate : function(f) {
    var v = $(f).value;
    if(v == null || v.length == 0 || isNaN(v) || /^\s+$/.test(v)) {
      $(f).value = 0;
    }
  },
  isNum : function(f) {
    var v = $(f).value;
    return !(v == null || v.length == 0 || isNaN(v) || /^\s+$/.test(v));
  }
}
var AreaCalculator = {
  convertform : function(){
    var form = this;
    var firstvalue = 0;
    var hec = $('valAHC');
    var dacres = $('valADAC');
    var acres = $('valAAC');
    var roods =$('valARO');
    var perches = $('valAPE');
    
    if([acres,roods,perches].any(
      function(f){
        return Conversion.isNum(f);
      })) {
      //we are converting from a/r/p to hectares
      [acres,roods,perches].each(function(f){Conversion.validate(f)});
      dacres.value = (perches.value/40+parseInt(roods.value,10))/4+parseInt(acres.value,10);
      
      firstvalue = dacres.value / dacres.factor;
      $$('.areaf').each(function(field){
          field.value = Conversion.formatvalue((firstvalue * field.factor), Conversion.rsize);
      });
      hec.value = parseFloat(hec.value).toFixed(4);
    } else {
      //we are converting from metric to a/r/p
      $$('.areaf').each(function(field){
        if (field.value != null && field.value.length != 0) {
            Conversion.validate(field);
            firstvalue = field.value / field.factor;
            throw $break;
         }
      });
      if (firstvalue == 0) {
        Conversion.clearform();
      } else {
        $$('.areaf').each(function(field){
          field.value = Conversion.formatvalue((firstvalue * field.factor), Conversion.rsize);
        });
        hec.value = parseFloat(hec.value).toFixed(4);
        var ac = dacres.value;
        acres.value = parseInt(ac,10);
        var rd = (ac-parseInt(ac,10))*4;
        roods.value = parseInt(rd,10);
        perches.value = ((rd-parseInt(rd,10))*40).toFixed(1);
      }
    }
  },

  init : function() {
    var areaForm = $('areaconversion');
    areaForm.valAM2.factor = 1; //m2 
    areaForm.valADAC.factor = 0.000247105; //381; //m2 to acres
    areaForm.valAHC.factor = 0.0001; // m2 to hectares
    $$('.calculate').each(function(b){
      $(b).observe('click', AreaCalculator.convertform.bindAsEventListener(areaForm));
      b.setStyle({'visibility':'visible'});
    });
    $$('.clear').each(function(b){
      $(b).observe('click',Conversion.clearform.bindAsEventListener(areaForm));
      b.setStyle({'visibility':'visible'});
    });
    $$('.areaf').each(function(field){
      $(field).observe('focus', Conversion.clearform.bindAsEventListener(areaForm));
    });
  }
}
var LengthCalculator = {
  convertform : function(){
      var form = this;
      var firstvalue = 0;
      $$('.wfield').each(function(field){
        if (field.value != null && field.value.length != 0) {
            firstvalue = field.value / field.factor;
            throw $break;
         }
      });
      if (firstvalue == 0) {
        Conversion.clear('.wfield')
      } else {
        $$('.wfield').each(function(field){
          field.value = Conversion.formatvalue((firstvalue * field.factor), Conversion.rsize);
        });
      }
  },
  init : function() {
    var lengthForm = $('lengthconversion');
    lengthForm.valMM.factor = 100;            // mm to mm.
    lengthForm.valCM.factor = 10;            // mm to cm.
    lengthForm.valMiles.factor = 0.0000621371;            // mm to miles.
    lengthForm.valNMiles.factor = 0.0000539957;            // mm to nautical miles.
    lengthForm.valInch.factor = 3.937007874;  // mm to in.
    lengthForm.valMeter.factor = 0.1;  // mm to mtr.
    lengthForm.valKM.factor = 0.0001;  // mm to kilomtr.
    lengthForm.valFeet.factor = 0.3280839895;  // mm to feet.
    lengthForm.valYard.factor = 0.1093613298; //mm to yards.
    lengthForm.valLink.factor = 0.4970959596; //mm to links.
    lengthForm.valChain.factor = 0.0049709596; //mm to chains.
    $$('.calculate').each(function(b){
      $(b).observe('click', LengthCalculator.convertform.bindAsEventListener(lengthForm));
      b.setStyle({'visibility':'visible'});
    });
    $$('.clear').each(function(b){
      $(b).observe('click',Conversion.clearform.bindAsEventListener(lengthForm));
      b.setStyle({'visibility':'visible'});
    });
    $$('.wfield').each(function(field){
      $(field).observe('focus', function(){Conversion.clear('.wfield')});
    });
  }
}