function initialize() {                                                         //>Initialize
    fillLists();                                                                   // FillLists (base, target)
    document.getElementById("value").value = "";                                   // Write into value-field
    //document.getElementById("value").focus();                                      // Set focus to value-field
    document.getElementById("value").select();                                     // Select 'popup' in value field
    calculate();  }                                                                // Calculate -> '- - - - -' in result
 
   function newType()   { clearLists();                 fillLists();               //>NewType
                          calculate();                  setFocus();  }             //
   function newValue()  { calculate();                  setFocus();  }             //>NewValue
   function newBase()   { calculate();                  setFocus();  }             //>NewBase
   function newTarget() { calculate();                  setFocus();  }             //>NewTarget
   function setFocus()  { document.getElementById("value").focus();  }             //>SetFocus
 
   function clearLists() {                                                         //>ClearLists (base, target)
    var base   = document.getElementById("base");                                  // Get Html-element of the base
    var target = document.getElementById("target");                                // Get Html-element of the target
    for (var i=base.length-1; i>=0; i--) {                                         // Loop: content of the lists
      base.options[i]   = null;                                                    //   Void base-item
      target.options[i] = null;  } }                                               //   Void target-item
 
   function calculate() {                                                          //>Calculate
    var type        = document.getElementById("type");                             // Html-Element of type (category)
    var typeID      = type.options[type.selectedIndex].id;                         // ID of the choosen type
    var input       = document.getElementById("value").value;                      // Content (text) of input-value
    var white       = input.match(/\s*/);                                          // White spaces in input (for opera)
    var value       = parseFloat(input.replace(/,/,'.'));                          // Parsed string with ','->'.' or NaN
    var baseValue   = document.getElementById("base").value;                       // Base-value
    var targetValue = document.getElementById("target").value;                     // Target-value
    if (isNaN(value) || (white && input==white)) {                                 // No valid number or only whitespaces
        document.getElementById("result").value=" - - - - - -";   return; }         //    -> Clear result value
    if (typeID=="temperature") {                                                   // On Temperature:
        calculateTemperature(value, baseValue, targetValue);     return; }         //    -> Calculate Temperature
    var result = value * baseValue / targetValue;                                  // Else: Convert value to result
    var result = (Math.round(result*1000))/1000
    document.getElementById("result").value = result;  }                           //       Write result in text-field
 
   function validateInput(input, base) {                                           //>ValidateInput (for number systems)
    var decimal = parseInt(input, base);                                           // Convert input-value->decimal-integer
    if (isNaN(decimal)) decimal = "";                                              // No decimal number  ->void input-field
    var valid = decimal.toString(base);                                            // Convert decimal back to base-system
    document.getElementById("value").value = valid;                                // Write validated value to input field
    return valid; }                                                                // Return validated value
 
   function calculateTemperature(value, base, target) {                            //>CalculateTemperature
    var celsius = Number.NaN;                                                      // Convert base to celsius
    if      (base=="[F]")    celsius = (value-32)*5/9;                             //     [F] -> [C]
    else if (base=="[C]")    celsius =  value;                                     //     [C] -> [C]
    else if (base=="[K]")    celsius =  value-273.15;                              //     [K] -> [C]                     //     [R] -> [C]
    var result = Number.NaN;                                                       // Convert celsius to target
    if      (target=="[F]")  result  = (celsius*9/5)+32                            //     [C] -> [F]
    else if (target=="[C]")  result  =  celsius;                                   //     [C] -> [C]
    else if (target=="[K]")  result  =  celsius+273.15;                            //     [C] -> [K]
    document.getElementById("result").value = result;  }                           // Write result in text-field
 
   function enlist(text, value) {                                                  //>Enlist given items to base & target
    var base   = document.getElementById("base");                                  // Html-Element for Base-Unit
    var target = document.getElementById("target");                                //                  Target-Unit
    base.options[base.length]     = new Option(text, value);                       // Set Html-Properties to base
    target.options[target.length] = new Option(text, value); }                     //                        target
 
   function fillLists() {                                                          //>FillLists
    var type   = document.getElementById("type");                                  // Get Html-Element of the 'type'
    var typeID = type.options[type.selectedIndex].id;                              // Get the ID of the selected type
    if      (typeID=="temperature") {                                              // Temperatures:
      enlist("Celsius",                            "[C]");                         //   [C] is base
      enlist("Fahrenheit",                         "[F]");                         //   [F] = [C]*9/5 + 32
      enlist("Kelvin",                             "[K]");                         //   [K] = [C] + 273.15 
      document.getElementById("base").options[1].selected   = true;                //   Preselect farenheit for base
      document.getElementById("target").options[0].selected = true; }              //   Preselect celcius for target
    else if (typeID=="length") {                                                   // Lengths:
      enlist("Metres",                              1.0);                          //   1 [m]  is base
      enlist("Kilometres",                         1000.0);                        //   1 [km]   = 1000             [m]
      enlist("Centimetres",                         0.01);                        //   1 [cm]   = 0.01             [m]
      enlist("Millimetres",                        0.001);                         //   1 [mm]   = 0.001            [m]
      enlist("Microns",               0.000001);                                   //   1 [um]   = 0.000001         [m]
      enlist("Nanometres",                         1e-9);                          //   1 [nm]   = 1e-9             [m]
      enlist("Inches",                              0.0254);                       //   1 [in]   = 0.0254           [m]
      enlist("Feet",                              0.3048);                         //   1 [ft]   = 0.3048           [m]
      enlist("Yards",                              0.9144);                        //   1 [yd]   = 0.9144           [m]
      enlist("Miles",                              1609.344);                      //   1 [mi]   = 1609.344         [m]
      enlist("Nautical Miles",                     1852.0);                        //   1 [n mi] = 1852             [m]
      enlist("Light Years",                        9460730472580800);              //   1 [LY]   = 9460730472580800 [m]
      document.getElementById("base").options[8].selected   = true;                //   Preselect miles for base
      document.getElementById("target").options[1].selected = true; }              //   Preselect kilometres for target
    else if (typeID=="area") {                                                     // Areas:
      enlist("Square Metres",                     1.0);                            //   1 [m^2] S is base
      enlist("Square Kilometres",                1000000.0);                       //   1 [km^2]  = 1000000         [m^2]
      enlist("Square Centimetres",               0.0001);                          //   1 [cm^2]  = 0.0001          [m^2]
      enlist("Square Millimetres",               0.000001);                        //   1 [mm^2]  = 0.000001        [m^2]
      enlist("Hectares",                           10000.0);                       //   1 [ha]    = 10000           [m^2]
      enlist("Acres",                            4046.8564224);                    //   1 [acre]  = 4046.8564224    [m^2]
      enlist("Square Inches",                     0.00064516);                     //   1 [in^2]  = 0.00064516      [m^2]
      enlist("Square Feet",                     0.09290304);                       //   1 [ft^2]  = 0.09290304      [m^2]
      enlist("Square Yards",                     0.83612736);                      //   1 [yd^2]  = 0.83612736      [m^2]
      enlist("Square Miles",                     2589988.110336);                  //   1 [mi^2]  = 2589988.110336  [m^2]
      document.getElementById("base").options[7].selected   = true;                //   Preselect sq feet for base
      document.getElementById("target").options[0].selected = true; }              //   Preselect sq metres for target
    else if (typeID=="volume") {                                                   // Volumes:
      enlist("Cubic Metres",                      1.0);                            //   1 [m^3] is base
      enlist("Cubic Kilometres",                 1000000000.0);                    //   1 [km^3]    = 1000000000      [m^3]
      enlist("Litres",                           0.001);                           //   1 [dm^3]    = 0.001           [m^3]
      enlist("Millilitres",                      0.000001);                        //   1 [cm^3]    = 0.000001        [m^3]
      enlist("Microlitres",                      1e-9);                            //   1 [mm^3]    = 1e-9            [m^3]
      enlist("Cubic Inches",                      0.000016387064);                 //   1 [in^3]    = 0.000016387064  [m^3]
      enlist("Cubic Feet",                      0.028316846592);                   //   1 [ft^3]    = 0.028316846592  [m^3]
      enlist("Cubic Yards",                      0.764554857984);                  //   1 [yd^3]    = 0.764554857984  [m^3]
      enlist("Gallons (British)",              0.00454609);                        //   1 [gal-b]   = 0.00454609      [m^3]
      enlist("Gallons (US)",                   0.003785411784);            //   1 [gal-u]   = 0.003785411784  [m^3]
      enlist("Cups (US)",                        0.0002365882365);           //   1 [c-us]    = 0.0002365882365 [m^3]
      enlist("Cups (metric)",                    0.000250);                  //   1 [c-me]    = 0.000250        [m^3]
      enlist("Fluid Ounces (US)",            0.0000295735295625);        //   1 [fl.oz-us]= 0.00002957352956[m^3]
      enlist("Pints (US)",                      0.000473176473);            //   1 [pt-us]   = 0.000473176473  [m^3]
      enlist("Quarts (US)",                     0.000946352946);            //   1 [qt-us]   = 0.000946352946  [m^3]
      enlist("Tablespoons (US)",             14.7867647825e-6);          //   1 [tbsp-us] = 14.7867647825e-6[m^3]
      enlist("Tablespoons (metric)",         15e-6);                     //   1 [tbsp-me] = 15e-6);         [m^3]
      enlist("Teaspoons (US)",                4.928921595e-6);            //   1 [tsp-us]  = 4.928921595e-6  [m^3]
      enlist("Teaspoons (metric)",            5.0e-6);                   //   1 [tsp-me]  = 5.0e-6          [m^3]
      document.getElementById("base").options[9].selected   = true;                //   Preselect gallons for base
      document.getElementById("target").options[2].selected = true; }              //   Preselect sq litres for target
    else if (typeID=="time") {                                                     // Time:
      enlist("Seconds",                            1.0);                       //   1 [s] is base
      enlist("Minutes",                          60.0);                      //   1 [min]  = 60          [s]
      enlist("Hours",                              3600.0);                    //   1 [h]    = 3600        [s]
      enlist("Days",                               86400.0);                   //   1 [d]    = 86400       [s]
      enlist("Weeks",                             604800.0);                  //   1 [wk]   = 604800      [s]
      enlist("Years",                            31536000.0);                //   1 [a-c]  = 31536000    [s]
      enlist("Decades",             315360000.0);               //   1 [dec]  = 315360000   [s]
      enlist("Centuries",                        3153600000.0);              //   1 [c-c]  = 3153600000  [s]
      enlist("Millennia",                        31536000000.0);             //   1 [m-c]  = 31536000000 [s]
      enlist("Milliseconds",                     0.001);                     //   1 [m-c]  = 31536000000 [s]
      enlist("Microseconds",                     0.000001);                  //   1 [m-c]  = 31536000000 [s]
      enlist("Nanoseconds",                      0.000000001);             //   1 [m-c]  = 31536000000 [s]
      document.getElementById("base").options[0].selected   = true;                //   Preselect seconds for base
      document.getElementById("target").options[1].selected = true; }              //   Preselect minutes for target
    else if (typeID=="speed") {                                                    // Speed:
      enlist("Metres per second",                 1.0);                       //   1 [m/s] is base
      enlist("Metres per minute",               1.0/60.0);                  //   1 [m/min]  = 1/60          [m/s]
      enlist("Metres per hour",                   1.0/3600.0);                //   1 [m/h]    = 1/3600        [m/s]
      enlist("Kilometres per second",            1000.0);                    //   1 [km/s]   = 1000          [m/s]
      enlist("Kilometres per minute",          1000.0/60.0);               //   1 [km/min] = 1000/60       [m/s]
      enlist("Kilometres per hour",              1000.0/3600.0);             //   1 [km/h]   = 1000/3600     [m/s]
      enlist("Miles per second",                 1609.344);                  //   1 [mps]    = 1609.344      [m/s]
      enlist("Miles per minute",                 1609.344/60.0);             //   1 [mpm]    = 1609.344/60   [m/s]
      enlist("Miles per hour",                   1609.344/3600.0);           //   1 [mph]    = 1609.344/3600 [m/s]
      enlist("Feet per second",                  0.3048);                    //   1 [fps]    = 0.3048        [m/s]
      enlist("Feet per minute",                  0.3048/60.0);               //   1 [fpm]    = 0.3048/60     [m/s]
      enlist("Feet per hour",                    0.3048/3600.0);             //   1 [fph]    = 0.3048/3600   [m/s]
      enlist("Inches per second",                  0.0254);                    //   1 [ips]    = 0.0254        [m/s]
      enlist("Inches per minute",                  0.0254/60.0);               //   1 [ipm]    = 0.0254/60     [m/s]
      enlist("Inches per hour",                    0.0254/3600.0);             //   1 [iph]    = 0.0254/3600   [m/s]
      enlist("Knots",                               1852.0/3600.0);             //   1 [kn]     = 1852.0/3600   [m/s]
      document.getElementById("base").options[8].selected   = true;                //   Preselect mph for base
      document.getElementById("target").options[5].selected = true; }              //   Preselect kph for target
    else if (typeID=="mass") {                                                     // Mass:
      enlist("Kilograms",              1.0);                       //   1 [kg] is base
      enlist("Grams",                       0.001);                     //   1 [g]     = 0.001          [kg]
      enlist("Metric Tons",                        1000.0);                    //   1 [t]     = 1000           [kg]
      enlist("Long Tons (UK)",                    1016.0469088);              //   1 [tn]    = 1016.0469088   [kg]
      enlist("Short Tons (US)",                907.18474);                 //   1 [sh tn] = 907.18474      [kg]
      enlist("Ounces",      0.028349523125);            //   1 [oz]    = 0.028349523125 [kg]
      enlist("Pounds",        0.45359237);              //   1 [lb-t]  = 0.45359237   [kg]
      enlist("Stone",                     6.35029318);               //   1 [st]    = 6.35029318     [kg]
      document.getElementById("base").options[6].selected   = true;                //   Preselect pounds for base
      document.getElementById("target").options[0].selected = true; }              //   Preselect kilograms for target
   else if (typeID=="power") {                                                    // Power:
      enlist("Joules per second",                 1.0);                       //   1 [J/s]   = 1.0              [Nm/s] is base
      enlist("Kilojoules per hour",              1000.0/3600.0);             //   1 [kJ/h]  = 1000.0/3600.0    [Nm/s]
      enlist("Watts",                               1.0);                       //   1 [W]     = 1.0              [Nm/s]
      enlist("Kilowatts",                          1000.0);                    //   1 [kW]    = 1000.0           [Nm/s]
      enlist("Megawatts",                          1000000.0);                 //   1 [MW]    = 1000000.0        [Nm/s]
      enlist("Kilocalories per hour",          4186.8/3600.0);             //   1 [kcal/h]= 1.16263888888889 [Nm/s]
      enlist("Horsepower",                 745.69987158227022);        //   1 [HP]    = 745.699871582270 [Nm/s]
      enlist("Manpower",                74.569987158227022);        //   1 [MP]    = 74.5699871582270 [Nm/s]
      enlist("Newtonmeter per second",          1.0);                       //   1 [Nm/s] 
      document.getElementById("base").options[6].selected   = true;                //   Preselect horsepower for base
      document.getElementById("target").options[3].selected = true; }              //   Preselect kilowatts for target
    else if (typeID=="energy") {                                                   // Energy:
      enlist("Joules",               1.0);                       //   1 [J]      = 1.0               [Nm] is base
      enlist("Kilojoules",                         1000.0);                    //   1 [kJ]     = 1000.0            [Nm]
      enlist("Watt seconds",                       1.0);                       //   1 [Ws]     = 1.0               [Nm]
      enlist("Watt hours",                         3600.0);                    //   1 [Wh]     = 3600.0            [Nm]
      enlist("Kilowatt hours",                    3600000.0);                 //   1 [kWh]    = 3600000.0         [Nm]
      enlist("Calories",     4.1868);                    //   1 [cal]    = 4.1855            [Nm]
      enlist("Kilogram Calories",        4186.8);                    //   1 [C, kcal]= 4185.5            [Nm]
      enlist("Newton-Metres",                       1.0)                       //   1 [Nm] is base
      document.getElementById("base").options[2].selected   = true;                //   Preselect watt seconds for base
      document.getElementById("target").options[6].selected = true; }              //   Preselect kilogram calories for target
    else if (typeID=="pressure") {
      enlist("Kilograms/Square Meter",                 1.0);
      enlist("Pounds/Square Foot",                     4.88242764);
      enlist("Pounds/Square Inch",                     703.06957963916318);
      enlist("Atmospheres",                            10332.2745);
      enlist("Bars",                                   10197.1621);
      enlist("Centimeters of Mercury",                 135.950981);
      enlist("Inches of Mercury",                      345.31554);
      enlist("Pascals",                                9.80665000000000); 
      document.getElementById("base").options[2].selected   = true;                //   Preselect pounds per sq inch for base
      document.getElementById("target").options[0].selected = true; }              //   Preselect kg per sq meter for target
   }