﻿
function round(number, X) {
    X = (!X ? 2 : X);
    return Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
}

function tidy_display(display_value) {
    if (display_value != 0) {

        if ((Math.abs(display_value) < 0.01) || (Math.abs(display_value) > 100)) {
            return toScientific(display_value, 4);
        }
        else {
            return round(Number(display_value), 4);
        }
    }
    else {
        return 0;
    }
}


function toScientific(dec_number, s) {
    var DecNum = parseFloat(dec_number)
    var DecNumExponent
    var DecNumMantissa
    DecNumExponent = Math.floor(Math.log(DecNum) / Math.LN10)
    DecNumMantissa = DecNum / Math.pow(10, DecNumExponent)

    return round(DecNumMantissa, s) + "x10^" + DecNumExponent
}


function IsNumeric(n) {
    if (n * 1 == NaN) return false;
    else return true;
}


function _conv_(ctrlID, ctrlName) {
    var eInput = document.getElementById(ctrlID + '_' + ctrlName + '_input');
    var eSelect = document.getElementById(ctrlID + '_' + ctrlName + '_select');
    var eFactor = document.getElementById(ctrlID + '_' + ctrlName + '_factor');
    var eResult = document.getElementById(ctrlID + '_' + ctrlName + '_result');


    eFactor.value = tidy_display(eSelect.options[eSelect.selectedIndex].value);

    _result_out = tidy_display(eSelect.options[eSelect.selectedIndex].value * eInput.value);


    if (IsNumeric(_result_out) == false || eInput.value < 0) {
        eResult.value = '';
        return;
    }

    // Select substring after "->" in the text of a option selection
    _m = eSelect.options[eSelect.selectedIndex].text.indexOf(">");
    _l = eSelect.options[eSelect.selectedIndex].text.length;
    _out_unit = eSelect.options[eSelect.selectedIndex].text.substr((_m + 2), _l);
    _in_unit = eSelect.options[eSelect.selectedIndex].text.substr(0, (_m - 2));

    eResult.value = _result_out + " " + _out_unit;
}

function _conv_temperature(ctrlID, ctrlName) {
    var eInput = document.getElementById(ctrlID + '_' + ctrlName + '_input');
    var eSelect = document.getElementById(ctrlID + '_' + ctrlName + '_select');
    var eFactor = document.getElementById(ctrlID + '_' + ctrlName + '_factor');
    var eResult = document.getElementById(ctrlID + '_' + ctrlName + '_result');

    eFactor.value = eSelect.options[eSelect.selectedIndex].value;

    switch (eSelect.selectedIndex) {

        case 0: //Celcius to Fahrenheit
            temperature_result_out = round(((9 / 5) * Number(eInput.value) + 32), 2);
            break;
        case 1: //Celcius to Kelvin
            temperature_result_out = round((Number(eInput.value) + 273.15), 2);
            break;
        case 2: //Fahrenheit to Celcius
            temperature_result_out = round((5 / 9) * (Number(eInput.value) - 32), 2);
            break;
        case 3: //Fahrenheit to Kelvin
            temperature_result_out = round((5 / 9) * (Number(eInput.value) + 459.67), 2);
            break;
        case 4: //Kelvin to Celcius
            temperature_result_out = round((Number(eInput.value) - 273.15), 2);
            break;
        case 5: //Kelvin to Fahrenheit
            temperature_result_out = round(((9 / 5) * Number(eInput.value) - 459.67), 2);
            break;

    }

    if (IsNumeric(temperature_result_out) == false) {
        eResult.value = '';
        return;
    }

    // Select substring after "->" in the text of a option selection

    temperature_m = eSelect.options[eSelect.selectedIndex].text.indexOf(">");
    temperature_l = eSelect.options[eSelect.selectedIndex].text.length;
    temperature_out_unit = eSelect.options[eSelect.selectedIndex].text.substr(temperature_m + 2, temperature_l);
    temperature_in_unit = eSelect.options[eSelect.selectedIndex].text.substr(0, (temperature_m - 2));

    eResult.value = temperature_result_out + " " + temperature_out_unit;

}

	