// =================================================================
function JSLLTrim(pstr1, pstr2) {
   var str = "";
   var curchar = "";
   var pos = 0;
   var len = pstr1.length;
   while (pos < len) {
     curchar = pstr1.substring(pos, pos + 1);
     if (pstr2 != null) {
       if (pstr2.indexOf(curchar) == -1) {
         return (pstr1.substring(pos, pstr1.length));
       }
     }
     else {
       if (curchar != " ") {
         return (pstr1.substring(pos, pstr1.length));
       }
     }
     pos++;
   }
   return "";
}

function JSLRTrim(pstr1, pstr2) {
   var str = "";
   var curchar = "";
   var len = pstr1.length;
   var pos = len - 1;
   while (pos >= 0) {
     curchar = pstr1.substring(pos, pos + 1);
     if (pstr2 != null) {
       if (pstr2.indexOf(curchar) == -1) {
         return (pstr1.substring(0, pos + 1));
       }
     }
     else {
       if (curchar != " ") {
         return (pstr1.substring(0, pos + 1));
       }
     }
     pos--;
   }
   return "";
}

function JSLIsNumber(pval, suppress){
    pval = JSLLTrim(pval, " ");
    pval = JSLRTrim(pval, " ");
    oneDecimal = false;
    
	inputStr = "" + pval;
	
	for ( var i = 0; i < inputStr.length ; i++ ) {
      var oneChar = inputStr.charAt(i);
      if ( i==0 && oneChar == "-") {
        continue;
      }
      if ( oneChar == "." && !oneDecimal) {
        oneDecimal = true;
        continue;
      }
	  
	  if ( oneChar < "0" || oneChar > "9") {
        if ( !suppress || (suppress == "N")) {
          alert("Valor incorrecto");
        }
        return false;
      }
    }
   return true;
}

function uc(category, from, to, eqn){
  this.ucategory = category;
  this.ufrom     = from;
  this.uto       = to;
  this.ueqn      = eqn;
}

var aCap = new Array();
aCap[0] = new uc("VOLUME FLOW","Bcm/a (normal)","Bcm/a (normal)","Input");
aCap[1] = new uc("VOLUME FLOW","Mcm/d (estándar)","Bcm/a (normal)","Input*365/1000*273.15/288.71");
aCap[2] = new uc("VOLUME FLOW","m3/h (normal)","Bcm/a (normal)","Input*365*24/1e9");
aCap[3] = new uc("VOLUME FLOW","Mcf/d (estándar)","Bcm/a (normal)","Input/102.263408");
aCap[4] = new uc("MASS FLOW","TOE/d","Bcm/a (normal)","Input/1e9*1110*365");
aCap[5] = new uc("MASS FLOW","Tonne LNG/d","Bcm/a (normal)","Input/1e9*1379*365");
aCap[6] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","Bcm/a (normal)","Input*365/1000/GCV");
aCap[7] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","Bcm/a (normal)","Input*365*24/1000/GCV");
aCap[8] = new uc("ENERGY FLOW","Therms/d","Bcm/a (normal)","Input/25967.59855/GCV");
aCap[9] = new uc("ENERGY FLOW","kWh/d","Bcm/a (normal)","Input/1e9/GCV*3.6*365");
aCap[10] = new uc("ENERGY FLOW","kW (kWh/h)","Bcm/a (normal)","Input/1e9/GCV*3.6*365*24");

aCap[11] = new uc("VOLUME FLOW","Bcm/a (normal)","Mcm/d (estándar)","Input*1000/365*288.71/273.15");
aCap[12] = new uc("VOLUME FLOW","m3/h (normal)","Mcm/d (estándar)","Input*24/1e6*288.71/273.15");
aCap[13] = new uc("VOLUME FLOW","Mcf/d (estándar)","Mcm/d (estándar)","Input/37.32614392*288.71/273.15");
aCap[14] = new uc("VOLUME FLOW","Mcm/d (estándar)","Mcm/d (estándar)","Input");
aCap[15] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","Mcm/d (estándar)","Input/GCV*288.71/273.15");
aCap[16] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","Mcm/d (estándar)","Input*24/GCV*288.71/273.15");
aCap[17] = new uc("ENERGY FLOW","Therms/d","Mcm/d (estándar)","Input/9478.173471/GCV*288.71/273.15");
aCap[18] = new uc("ENERGY FLOW","kWh/d","Mcm/d (estándar)","Input/GCV/1e6*3.6*288.71/273.15");
aCap[19] = new uc("ENERGY FLOW","kW (kWh/h)","Mcm/d (estándar)","Input/GCV/1e6*3.6*24*288.71/273.15");
aCap[20] = new uc("MASS FLOW","Tonne LNG/d","Mcm/d (estándar)","Input/686.08");
aCap[21] = new uc("MASS FLOW","TOE/d","Mcm/d (estándar)","Input/852.35");


aCap[22] = new uc("VOLUME FLOW","Bcm/a (normal)","m3/h (normal)","Input*1e9/365/24");
aCap[23] = new uc("VOLUME FLOW","m3/h (normal)","m3/h (normal)","Input");
aCap[24] = new uc("VOLUME FLOW","Mcf/d (estándar)","m3/h (normal)","Input*1116.286396");
aCap[25] = new uc("VOLUME FLOW","Mcm/d (estándar)","m3/h (normal)","Input*1e6/24*273.15/288.71");
aCap[26] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","m3/h (normal)","Input*1e6/24/GCV");
aCap[27] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","m3/h (normal)","Input*1e6/GCV");
aCap[28] = new uc("ENERGY FLOW","Therms/d","m3/h (normal)","Input*4.396065001/GCV");
aCap[29] = new uc("ENERGY FLOW","kWh/d","m3/h (normal)","Input/GCV/24*3.6");
aCap[30] = new uc("ENERGY FLOW","kW (kWh/h)","m3/h (normal)","Input/GCV*3.6");
aCap[31] = new uc("MASS FLOW","Tonne LNG/d","m3/h (normal)","Input*1379/24");
aCap[32] = new uc("MASS FLOW","TOE/d","m3/h (normal)","Input*1110/24");

aCap[33] = new uc("VOLUME FLOW","Bcm/a (normal)","Mcf/d (estándar)","Input*102.263408");
aCap[34] = new uc("VOLUME FLOW","m3/h (normal)","Mcf/d (estándar)","Input/1116.286396");
aCap[35] = new uc("VOLUME FLOW","Mcf/d (estándar)","Mcf/d (estándar)","Input");
aCap[36] = new uc("VOLUME FLOW","Mcm/d (estándar)","Mcf/d (estándar)","Input*37.32614392*273.15/288.71");
aCap[37] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","Mcf/d (estándar)","Input*37.32614392/GCV");
aCap[38] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","Mcf/d (estándar)","Input*895.8274541/GCV");
aCap[39] = new uc("ENERGY FLOW","Therms/d","Mcf/d (estándar)","Input/253.9285465/GCV");
aCap[40] = new uc("ENERGY FLOW","kWh/d","Mcf/d (estándar)","Input/GCV/7441.909306");
aCap[41] = new uc("ENERGY FLOW","kW (kWh/h)","Mcf/d (estándar)","Input/GCV/310.0795544");
aCap[42] = new uc("MASS FLOW","Tonne LNG/d","Mcf/d (estándar)","Input/19.4277");
aCap[43] = new uc("MASS FLOW","TOE/d","Mcf/d (estándar)","Input/24.13578");

aCap[44] = new uc("VOLUME FLOW","Bcm/a (normal)","TOE/d","Input*1e9/1110/365");
aCap[45] = new uc("VOLUME FLOW","m3/h (normal)","TOE/d","Input/1110*24");
aCap[46] = new uc("VOLUME FLOW","Mcf/d (estándar)","TOE/d","Input*24.13578");
aCap[47] = new uc("VOLUME FLOW","Mcm/d (estándar)","TOE/d","Input*852.35");
aCap[48] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","TOE/d","Input*1e6/1110/GCV");
aCap[49] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","TOE/d","Input*1e6/1110/GCV*24");
aCap[50] = new uc("ENERGY FLOW","Therms/d","TOE/d","Input/10.5208/GCV");
aCap[51] = new uc("ENERGY FLOW","kWh/d","TOE/d","Input*3.6/1110/GCV");
aCap[52] = new uc("ENERGY FLOW","kW (kWh/h)","TOE/d","Input*3.6/1110/GCV*24");
aCap[53] = new uc("MASS FLOW","Tonne LNG/d","TOE/d","Input*1379/1110");
aCap[54] = new uc("MASS FLOW","TOE/d","TOE/d","Input");

aCap[55] = new uc("VOLUME FLOW","Bcm/a (normal)","Tonne LNG/d","Input*1e9/1379/365");
aCap[56] = new uc("VOLUME FLOW","m3/h (normal)","Tonne LNG/d","Input/1379*24");
aCap[57] = new uc("VOLUME FLOW","Mcf/d (estándar)","Tonne LNG/d","Input*19.4277");
aCap[58] = new uc("VOLUME FLOW","Mcm/d (estándar)","Tonne LNG/d","Input*686.08");
aCap[59] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","Tonne LNG/d","Input*1e6/1379/GCV");
aCap[60] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","Tonne LNG/d","Input*1e6/1379/GCV*24");
aCap[61] = new uc("ENERGY FLOW","Therms/d","Tonne LNG/d","Input/13.0704/GCV");
aCap[62] = new uc("ENERGY FLOW","kWh/d","Tonne LNG/d","Input*3.6/1379/GCV");
aCap[63] = new uc("ENERGY FLOW","kW (kWh/h)","Tonne LNG/d","Input*3.6/1379/GCV*24");
aCap[64] = new uc("MASS FLOW","Tonne LNG/d","Tonne LNG/d","Input");
aCap[65] = new uc("MASS FLOW","TOE/d","Tonne LNG/d","Input/1379*1110");

aCap[66] = new uc("VOLUME FLOW","Bcm/a (normal)","MMJ/d (TJ/d)","Input*1000*GCV/365");
aCap[67] = new uc("VOLUME FLOW","m3/h (normal)","MMJ/d (TJ/d)","Input*GCV*24/1e6");
aCap[68] = new uc("VOLUME FLOW","Mcf/d (estándar)","MMJ/d (TJ/d)","Input*GCV/37.32614392");
aCap[69] = new uc("VOLUME FLOW","Mcm/d (estándar)","MMJ/d (TJ/d)","Input*GCV*273.15/288.71");
aCap[70] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","MMJ/d (TJ/d)","Input");
aCap[71] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","MMJ/d (TJ/d)","Input*24");
aCap[72] = new uc("ENERGY FLOW","Therms/d","MMJ/d (TJ/d)","Input/9478.173471");
aCap[73] = new uc("ENERGY FLOW","kWh/d","MMJ/d (TJ/d)","Input/1e6*3.6");
aCap[74] = new uc("ENERGY FLOW","kW (kWh/h)","MMJ/d (TJ/d)","Input/1e6*3.6*24");
aCap[75] = new uc("MASS FLOW","Tonne LNG/d","MMJ/d (TJ/d)","Input/1e6*1379*GCV");
aCap[76] = new uc("MASS FLOW","TOE/d","MMJ/d (TJ/d)","Input/1e6*1110*GCV");

aCap[77] = new uc("VOLUME FLOW","Bcm/a (normal)","MMJ/h (TJ/h)","Input*1000*GCV/365/24");
aCap[78] = new uc("VOLUME FLOW","m3/h (normal)","MMJ/h (TJ/h)","Input*GCV/1e6");
aCap[79] = new uc("VOLUME FLOW","Mcf/d (estándar)","MMJ/h (TJ/h)","Input*GCV/895.8274541");
aCap[80] = new uc("VOLUME FLOW","Mcm/d (estándar)","MMJ/h (TJ/h)","Input*GCV/24*273.15/288.71");
aCap[81] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","MMJ/h (TJ/h)","Input/24");
aCap[82] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","MMJ/h (TJ/h)","Input");
aCap[83] = new uc("ENERGY FLOW","Therms/d","MMJ/h (TJ/h)","Input/227476.1633");
aCap[84] = new uc("ENERGY FLOW","kWh/d","MMJ/h (TJ/h)","Input/1e6/24*3.6");
aCap[85] = new uc("ENERGY FLOW","kW (kWh/h)","MMJ/h (TJ/h)","Input/1e6*3.6");
aCap[86] = new uc("MASS FLOW","Tonne LNG/d","MMJ/h (TJ/h)","Input/1e6*1379*GCV/24");
aCap[87] = new uc("MASS FLOW","TOE/d","MMJ/h (TJ/h)","Input/1e6*1110*GCV/24");

aCap[88] = new uc("VOLUME FLOW","Bcm/a (normal)","Therms/d","Input*GCV*25967.59855");
aCap[89] = new uc("VOLUME FLOW","m3/h (normal)","Therms/d","Input*GCV/4.396065001");
aCap[90] = new uc("VOLUME FLOW","Mcf/d (estándar)","Therms/d","Input*GCV*253.9285465");
aCap[91] = new uc("VOLUME FLOW","Mcm/d (estándar)","Therms/d","Input*GCV*9478.173471*273.15/288.71");
aCap[92] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","Therms/d","Input*9478.173471");
aCap[93] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","Therms/d","Input*227476.1633");
aCap[94] = new uc("ENERGY FLOW","Therms/d","Therms/d","Input");
aCap[95] = new uc("ENERGY FLOW","kWh/d","Therms/d","Input/29.30710001");
aCap[96] = new uc("ENERGY FLOW","kW (kWh/h)","Therms/d","Input/1.221129167");
aCap[97] = new uc("MASS FLOW","Tonne LNG/d","Therms/d","Input*13.0704*GCV");
aCap[98] = new uc("MASS FLOW","TOE/d","Therms/d","Input*10.5208*GCV");

aCap[99] = new uc("VOLUME FLOW","Bcm/a (normal)","kWh/d","Input*1e9*GCV/3.6/365");
aCap[100] = new uc("VOLUME FLOW","m3/h (normal)","kWh/d","Input*GCV*24/3.6");
aCap[101] = new uc("VOLUME FLOW","Mcf/d (estándar)","kWh/d","Input*GCV*7441.909306");
aCap[102] = new uc("VOLUME FLOW","Mcm/d (estándar)","kWh/d","Input*GCV*1e6/3.6*273.15/288.71");
aCap[103] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","kWh/d","Input*1e6/3.6");
aCap[104] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","kWh/d","Input*1e6*24/3.6");
aCap[105] = new uc("ENERGY FLOW","Therms/d","kWh/d","Input*29.30710001");
aCap[106] = new uc("ENERGY FLOW","kWh/d","kWh/d","Input");
aCap[107] = new uc("ENERGY FLOW","kW (kWh/h)","kWh/d","Input*24");
aCap[108] = new uc("MASS FLOW","Tonne LNG/d","kWh/d","Input/3.6*1379*GCV");
aCap[109] = new uc("MASS FLOW","TOE/d","kWh/d","Input/3.6*1110*GCV");

aCap[110] = new uc("VOLUME FLOW","Bcm/a (normal)","kW (kWh/h)","Input*1e9*GCV/3.6/365/24");
aCap[111] = new uc("VOLUME FLOW","m3/h (normal)","kW (kWh/h)","Input*GCV/3.6");
aCap[112] = new uc("VOLUME FLOW","Mcf/d (estándar)","kW (kWh/h)","Input*GCV*310.0795544");
aCap[113] = new uc("VOLUME FLOW","Mcm/d (estándar)","kW (kWh/h)","Input*GCV*1e6/3.6/24*273.15/288.71");
aCap[114] = new uc("ENERGY FLOW","MMJ/d (TJ/d)","kW (kWh/h)","Input*1e6/3.6/24");
aCap[115] = new uc("ENERGY FLOW","MMJ/h (TJ/h)","kW (kWh/h)","Input*1e6/3.6");
aCap[116] = new uc("ENERGY FLOW","Therms/d","kW (kWh/h)","Input*1.221129167");
aCap[117] = new uc("ENERGY FLOW","kWh/d","kW (kWh/h)","Input/24");
aCap[118] = new uc("ENERGY FLOW","kW (kWh/h)","kW (kWh/h)","Input");
aCap[119] = new uc("MASS FLOW","Tonne LNG/d","kW (kWh/h)","Input/3.6*1379*GCV/24");
aCap[120] = new uc("MASS FLOW","TOE/d","kW (kWh/h)","Input/3.6*1110*GCV/24");

var aInv = new Array();
aInv[0] = new uc("VOLUME","Bcm (normal)","Bcm (normal)","Input");
aInv[1] = new uc("VOLUME","m3 (normal)","Bcm (normal)","Input/1e9");
aInv[2] = new uc("VOLUME","Mcf (estándar)","Bcm (normal)","Input/102.263408/365");
aInv[3] = new uc("VOLUME","Mcm (estándar)","Bcm (normal)","Input/1000*273.15/288.71");
aInv[4] = new uc("ENERGY","MMJ (TJ)","Bcm (normal)","Input/1000/GCV");
aInv[5] = new uc("ENERGY","Therms","Bcm (normal)","Input/25967.59855/365/GCV");
aInv[6] = new uc("ENERGY","kWh","Bcm (normal)","Input/1e9/GCV*3.6");
aInv[7] = new uc("MASS","Tonne LNG","Bcm (normal)","Input/1e9*1379");
aInv[8] = new uc("MASS","TOE","Bcm (normal)","Input/1e9*1110");
aInv[9] = new uc("VOLUME","Bcm (normal)","m3 (normal)","Input*1e9");
aInv[10] = new uc("VOLUME","m3 (normal)","m3 (normal)","Input");
aInv[11] = new uc("VOLUME","Mcf (estándar)","m3 (normal)","Input*1116.286396*24");
aInv[12] = new uc("VOLUME","Mcm (estándar)","m3 (normal)","Input*1e6*273.15/288.71");
aInv[13] = new uc("ENERGY","MMJ (TJ)","m3 (normal)","Input*1e6/GCV");
aInv[14] = new uc("ENERGY","Therms","m3 (normal)","Input*4.396065001*24/GCV");
aInv[15] = new uc("ENERGY","kWh","m3 (normal)","Input/GCV*3.6");
aInv[16] = new uc("MASS","Tonne LNG","m3 (normal)","Input*1379");
aInv[17] = new uc("MASS","TOE","m3 (normal)","Input*1110");
aInv[18] = new uc("VOLUME","Bcm (normal)","Mcf (estándar)","Input*102.263408*365");
aInv[19] = new uc("VOLUME","m3 (normal)","Mcf (estándar)","Input/1116.286396/24");
aInv[20] = new uc("VOLUME","Mcf (estándar)","Mcf (estándar)","Input");
aInv[21] = new uc("VOLUME","Mcm (estándar)","Mcf (estándar)","Input*37.32614392*273.15/288.71");
aInv[22] = new uc("ENERGY","MMJ (TJ)","Mcf (estándar)","Input*37.32614392/GCV");
aInv[23] = new uc("ENERGY","Therms","Mcf (estándar)","Input/253.9285465/GCV");
aInv[24] = new uc("ENERGY","kWh","Mcf (estándar)","Input/GCV/7441.909306");
aInv[25] = new uc("MASS","Tonne LNG","Mcf (estándar)","Input/19.4277");
aInv[26] = new uc("MASS","TOE","Mcf (estándar)","Input/24.13578");
aInv[27] = new uc("VOLUME","Bcm (normal)","Mcm (estándar)","Input*1000*288.71/273.15");
aInv[28] = new uc("VOLUME","m3 (normal)","Mcm (estándar)","Input/1e6*288.71/273.15");
aInv[29] = new uc("VOLUME","Mcf (estándar)","mcm (estándar)","Input/37.32614392*288.71/273.15");
aInv[30] = new uc("VOLUME","Mcm (estándar)","Mcm (estándar)","Input");
aInv[31] = new uc("ENERGY","MMJ (TJ)","Mcm (estándar)","Input/GCV*288.71/273.15");
aInv[32] = new uc("ENERGY","Therms","mcm (estándar)","Input/9478.173471/GCV*288.71/273.15");
aInv[33] = new uc("ENERGY","kWh","Mcm (estándar)","Input/GCV/1e6*3.6*288.71/273.15");
aInv[34] = new uc("MASS","Tonne LNG","Mcm (estándar)","Input/686.08");
aInv[35] = new uc("MASS","TOE","Mcm (estándar)","Input/852.35");
aInv[36] = new uc("VOLUME","Bcm (normal)","MMJ (TJ)","Input*1000*GCV");
aInv[37] = new uc("VOLUME","m3 (normal)","MMJ (TJ)","Input*GCV/1e6");
aInv[38] = new uc("VOLUME","Mcf (estándar)","MMJ (TJ)","Input*GCV/37.32614392");
aInv[39] = new uc("VOLUME","Mcm (estándar)","MMJ (TJ)","Input*GCV*273.15/288.71");
aInv[40] = new uc("ENERGY","MMJ (TJ)","MMJ (TJ)","Input");
aInv[41] = new uc("ENERGY","Therms","MMJ (TJ)","Input/9478.173471");
aInv[42] = new uc("ENERGY","kWh","MMJ (TJ)","Input/1e6*3.6");
aInv[43] = new uc("MASS","Tonne LNG","MMJ (TJ)","Input/1e6*1379*GCV");
aInv[44] = new uc("MASS","TOE","MMJ (TJ)","Input/1e6*1110*GCV");
aInv[45] = new uc("VOLUME","Bcm (normal)","Therms","Input*GCV*25967.59855*365");
aInv[46] = new uc("VOLUME","m3 (normal)","Therms","Input*GCV/4.396065001/24");
aInv[47] = new uc("VOLUME","Mcf (estándar)","Therms","Input*GCV*253.9285465");
aInv[48] = new uc("VOLUME","Mcm (estándar)","Therms","Input*GCV*9478.173471*273.15/288.71");
aInv[49] = new uc("ENERGY","MMJ (TJ)","Therms","Input*9478.173471");
aInv[50] = new uc("ENERGY","Therms","Therms","Input");
aInv[51] = new uc("ENERGY","kWh","Therms","Input/29.30710001");
aInv[52] = new uc("MASS","Tonne LNG","Therms","Input*13.0704*GCV");
aInv[53] = new uc("MASS","TOE","Therms","Input*10.5208*GCV");
aInv[54] = new uc("VOLUME","Bcm (normal)","kWh","Input*1e9*GCV/3.6");
aInv[55] = new uc("VOLUME","m3 (normal)","kWh","Input*GCV/3.6");
aInv[56] = new uc("VOLUME","Mcf (estándar)","kWh","Input*GCV*7441.909306");
aInv[57] = new uc("VOLUME","Mcm (estándar)","kWh","Input*GCV*1e6/3.6*273.15/288.71");
aInv[58] = new uc("ENERGY","MMJ (TJ)","kWh","Input*1e6/3.6");
aInv[59] = new uc("ENERGY","Therms","kWh","Input*29.30710001");
aInv[60] = new uc("ENERGY","kWh","kWh","Input");
aInv[61] = new uc("MASS","Tonne LNG","kWh","Input/3.6*1379*GCV");
aInv[62] = new uc("MASS","TOE","kWh","Input/3.6*1110*GCV");
aInv[63] = new uc("VOLUME","Bcm (normal)","Tonne LNG","Input*1e9/1379");
aInv[64] = new uc("VOLUME","m3 (normal)","Tonne LNG","Input/1379");
aInv[65] = new uc("VOLUME","Mcf (estándar)","Tonne LNG","Input*19.4277");
aInv[66] = new uc("VOLUME","Mcm (estándar)","Tonne LNG","Input*686.08");
aInv[67] = new uc("ENERGY","MMJ (TJ)","Tonne LNG","Input*1e6/1379/GCV");
aInv[68] = new uc("ENERGY","Therms","Tonne LNG","Input/13.0704/GCV");
aInv[69] = new uc("ENERGY","kWh","Tonne LNG","Input*3.6/1379/GCV");
aInv[70] = new uc("MASS","Tonne LNG","Tonne LNG","Input");
aInv[71] = new uc("MASS","TOE","Tonne LNG","Input/1379*1110");
aInv[72] = new uc("VOLUME","Bcm (normal)","TOE","Input*1e9/1110");
aInv[73] = new uc("VOLUME","m3 (normal)","TOE","Input/1110");
aInv[74] = new uc("VOLUME","Mcf (estándar)","TOE","Input*24.13578");
aInv[75] = new uc("VOLUME","Mcm (estándar)","TOE","Input*852.35");
aInv[76] = new uc("ENERGY","MMJ (TJ)","TOE","Input*1e6/1110/GCV");
aInv[77] = new uc("ENERGY","Therms","TOE","Input/10.5208/GCV");
aInv[78] = new uc("ENERGY","kWh","TOE","Input*3.6/1110/GCV");
aInv[79] = new uc("MASS","Tonne LNG","TOE","Input*1379/1110");
aInv[80] = new uc("MASS","TOE","TOE","Input");

var u = new Array();

function calc()
{

  var ufrom  = document.getElementById('ufrom');
  var uto    = document.getElementById('uto');
  var finput = document.getElementById('finput');
  var gcv    = document.getElementById('gcv');
  var answer = document.getElementById('answer');

  // Remove leading spaces and zeros
  var lval = JSLLTrim(JSLRTrim(finput.value),' 0');
  var lgcv = JSLLTrim(JSLRTrim(gcv.value),' 0');

	s = new String(lval);
	lval = s.replace(",", ".");
	
	
  finput.value = lval;
  gcv.value = lgcv;

  // Validation means scientific notations are not 
  // supported so 1e6 or 1^6 fail.
  if (!JSLIsNumber(lval,'N')){
    return false;
  }

  if (!JSLIsNumber(lgcv,'N')){
    return false;
  }  

  // Default to 1 if left blank
  if (("" == lval) || ("." == lval))
  {
    lval = 1;
  }

  if (("" == lgcv) || ("." == lgcv))
  {
    lgcv = 40;
  }

  finput.value = lval;
  gcv.value = lgcv;

  answer.innerHTML = 
    prettyprint(
      ufrom.options[ufrom.selectedIndex].value
     ,uto.options[uto.selectedIndex].value
     ,lval
     ,lgcv);

  buildTable(ufrom.options[ufrom.selectedIndex].value, finput.value, gcv.value);

  return true;
}

function convert(from, to, val, gcv){
  //
  var r, re, ss;       
  for (var i=0; i<u.length; i++){
    if (u[i].ufrom == from && u[i].uto == to)
    {
      ss = u[i].ueqn;
      re = /Input/g;
      ss = ss.replace(re, val); 
      re = /GCV/g;   
      ss = ss.replace(re, gcv); 
      //alert(":"+ss+":");
      return eval(ss);
    }
  }
  return false;
}

function buildSelFrom(ufrom){

  var ufrom  = document.getElementById('ufrom');

  var found = false;
  // Empty current options from ufrom
  while(ufrom.length>0){
    ufrom[0] = null;
  }
  //
  for (var i=0; i<u.length; i++){
    found = false;
    for (var j=0; j<ufrom.length; j++){
      if (ufrom.options[j].value == u[i].ufrom){
        found = true;
      }
    }
    if (found == false){
      ufrom.options[ufrom.length]=new Option(u[i].ufrom,u[i].ufrom,false,false);

    }
  }
  // Must set default selection or IE5.0 browsers fail 
  // when selectedIndex is referenced
  ufrom.selectedIndex=0;
}

function buildSelTo(sFrom){

  var uto = document.getElementById('uto');

  // Empty current options from oSelTo
  while(uto.length>0){
    uto[0] = null;
  }

  // Repopulate
  for (var i=0; i<u.length; i++){
    if (u[i].ufrom == sFrom)
// Stop same unit appearing in both From and To select lists
//        && u[i].uto != sFrom)
    {
      uto.options[uto.length]=new Option(u[i].uto,u[i].uto,false,false);
    }
  }
  // Must set default selection or IE5.0 browsers fail 
  // when selectedIndex is referenced
  uto.selectedIndex=0;
}
function buildTable(ufrom, val, gcv){

  var uDiv=document.getElementById('units');
  
  

  // Rebuild table
  var shade=true;
  var sClass='';
  var sTab='';
  
  sTab = '<TR><th><B>VALOR</B></th><TH><B>UNIDADES</B></TH></TR>';
  sTab += '<TR><TD COLSPAN=2 HEIGHT=2></TD></TR>';
  
  for (var i=0; i<u.length; i++){
    if (u[i].ufrom == ufrom){

      ans = prettyprint(ufrom, u[i].uto, val, gcv);

      // Results are vertically aligned on decimal point
      // Done by splitting answer into integer and decimal
      // and displaying in three table columns: int | . | decimal

      pt = ans.indexOf(".");
      if (pt > 0){
        qty = ans.substring(0,pt);
        dec = ans.substring(pt+1,pt+(ans.length-pt));
        dp  = ".";
      } else {
        qty = ans;
        dec = ""; 
        dp  = "";
      }       

      // Light/dark shading for alternate rows
      if (shade){
        sClass= ' class="shd" ';
        shade = false;
      } else {
        sClass= ' class="nshd" ';
        shade = true;
      }

      sTab += 
         '<TR'+sClass+'>'
        +'<TD class="qty" >' + qty +''+ dp  +''+ dec +'</TD>'
        +'<TD class="u">' + u[i].uto + '</TD>' 
        +'</TR>'
        +'<TR height=1><td colspan=2></td></tr>'
 
    }
  }

  sTab = 
    '<TABLE class="xtable" border="0">' 
    + sTab 
    + '</TABLE>';
  uDiv.innerHTML=sTab;

  return;
}
function xinit(){
  u = aCap;
  changeTable();
}
function changeFrom(){

  var ufrom = document.getElementById('ufrom');

  buildSelTo(ufrom.options[ufrom.selectedIndex].value);
  calc();
}

function round(number,X) {
  return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function comma(qty){
  // add commas by walking qty from end to start adding comma every 3rd char
  // e.g. 1000000 => 1,000,000
  var sep=3;
  var l=qty.length;
  var neg="";
  // Don't want to handle -ve sign
  if (qty.substring(0,1) == "-"){
    neg="-";
    qty = qty.substring(1,l);
    l = l - 1;
  }
  if (l>sep){
    var o="";
    var k=0;
    for(var i=l; i>0; i--){
      k = k + 1;
      if ((k % sep) == 0 && (k!=l)){
        o = o + qty.substring(i,i-1);
        o = o + ".";
      } else {
        o = o + qty.substring(i,i-1);
      }
    }
    // Previous step gives string in reverse - turn it back round
    qty="";
    for (var i=0; i<o.length; i++){
      qty = o.substring(i,i+1) + qty;
    }
  }
  return neg + qty;
}



function changeTable(){

	var ufrom  = document.getElementById('ufrom');
	var ftitle = document.getElementById('ftitle');
	var flink  = document.getElementById('flink');

  

  var sCapacity  = "Capacity converter";
  var sInventory = "Inventory converter";

/*  if (ftitle.innerHTML == sCapacity){
    ftitle.innerHTML = sInventory;
    flink.innerHTML = "Switch to " + sCapacity;
    u = aInv;
  } else {
    // Inventory or blank
    ftitle.innerHTML = sCapacity;
    flink.innerHTML = "Switch to " + sInventory;
    u = aCap;
  }*/

  buildSelFrom(ufrom);
  buildSelTo(ufrom.options[ufrom.selectedIndex].value);
  calc();
}

function prettyprint(ufrom, uto, val, gcv){

  // Multitude of sins in here:
  // 1. rounds numbers - dp depend on magnitude
  // 2. Map internal calc errors to "n/a" string
  // 3. Comma delimit integer part of result (but not for 1e+64)

  var ans, dp, qty, dec, pt, expt;

  // The bigger the number the less sensible the decimal
  // places become (displaying them implies accuracy when
  // in fact they are unlikely to be accurate).
  // So for following res
  //             <1        8dp
  //   >=1       <999      5dp
  //   >=999     <999,999  2dp
  //   >=999,999           0dp

  var x = convert(ufrom,uto,val,gcv);
  ans = "" +x;
  if (x < 1){
    ans = "" + round(x,8);
  } else {
    if (x >= 1 && x < 999){
      ans = "" + round(x,5);
    } else {
      if (x >= 999 && x < 999999){
        ans = "" + round(x,2);
      } else {
        ans = "" + round(x,0);
      }
    }
  }

  // Handle zero divide Infinity result by replacing with a 
  // string n/a.
  if (ans == "Infinity" || ans == "NaN") { 
    // Have to use a character or result field border doesnt display properly
    return "n/a"; 
  }

  // Comma delimit integer part every three digits e.g 1000 => 1,000
  expt = ans.indexOf("e");
  dp  = ans.indexOf(".");
  if (dp > 0){
    qty = ans.substring(0,dp);
    dec = ans.substring(dp+1,dp+(ans.length-dp));
    pt  = ",";
  } else {
    qty = ans;
    dec = "";
    pt  = "";
  }
  // Don't comma delimit exponentiated numbers
  if (expt == -1){
    qty = comma(qty);
  }

  return qty + pt + dec;

}
// =================================================================
