//The copyright holder of this file and source code is globefeed.com.
//Copyright 2009 globefeed.com
function focusIn(ele,units) {
    var elex;
    for (x in units) {
        elex = document.getElementById(x);
        elex.style.backgroundColor = "";
    }
    ele.style.backgroundColor = "#FFFF99";
    ele.select();
}

function convertAll(units, consts) {
    var curUnit;
    curUnit = "";
    
    var elex;
    for (x in units) {
        elex = document.getElementById(x);
        if (elex.style.backgroundColor != "") {
            curUnit = elex.id;
        }
    }

    if (curUnit == "") {
        alert("Please enter some value for any of the units.");
        return;
    }

    var curEle;
    curEle = document.getElementById(curUnit);
    if (curEle.value == "") {
        alert("Please enter some value for the unit.");
        return;
    }
    if (isNaN(curEle.value)) {
        alert("Please enter a numeric value for the unit.");
        return;
    }

    var ele;

    if (consts.length == 0) {
        for (x in units) {
            ele = document.getElementById(x);
            ele.value = roundResult(curEle.value * units[curUnit] / units[x]);
        }
    }
    else {
        for (x in units) {
            ele = document.getElementById(x);
            ele.value = roundResult(((curEle.value - consts[curUnit]) * (units[x] / units[curUnit])) + consts[x]);
        }

        if (document.getElementById("kelvin").value < 0) {
            for (x in units) {
                ele = document.getElementById(x);
                ele.value = "";
                ele.style.backgroundColor = "";
            }
            alert("Temperature can not be bellow absolute zero.");
        }
    }
}

function roundResult(val) {
    var res = val.toString();
    var exp = null;
    var neg = null;

    if (res.indexOf("e") > 0) {
        exp = res.split("e")[1];
        res = res.split("e")[0];
    }

    if (res.charAt(0) == "-") {
        neg = "-";
        res = res.replace("-", "");
    }

    if (res.indexOf(".") > 0 && res.charAt(0) == "0") {
        if (res.charAt(0) == "0") {
            res = (parseFloat(res).toFixed(findNonZeroIndex(res) + 14)).toString();
        }
    }
    else {

        var firstDigit = res.charAt(0); //To handle 0.999999999999999
        var deciIndex = res.indexOf(".");
        var resLength = res.length;
        if (deciIndex > 0) {
            res = res.replace(".", "");
            res = "0." + res;
            res = parseFloat(res).toFixed(14).toString();
            res = res.replace("0.", "");
            res = res.replace(".", "");
            if (res.charAt(0) == firstDigit || firstDigit != "9") {
                if (deciIndex > res.length) {
                    res = appendZeros(res, deciIndex - res.length);
                }
                else if (deciIndex < res.length) {
                    res = res.substr(0, deciIndex) + "." + res.substr(deciIndex, res.length - deciIndex);
                }
            }
            else {
                if (deciIndex > res.length - 1) {
                    res = appendZeros(res, deciIndex - res.length + 1);
                }
                else if (deciIndex < res.length - 1) {
                    res = res.substr(0, deciIndex + 1) + "." + res.substr(deciIndex + 1, res.length - deciIndex - 1);
                }
            }
        }
        else {
            res = "0." + res;
            res = parseFloat(res).toFixed(14).toString();
            res = res.replace("0.", "");
            res = res.replace(".", "");
            if (res.charAt(0) == firstDigit) {
                if (resLength > res.length) {
                    res = appendZeros(res, resLength - res.length);
                }
                else if (resLength < res.length) {
                    res = res.substr(0, resLength);
                }
            }
            else {
                if (resLength > res.length - 1) {
                    res = appendZeros(res, resLength - res.length + 1);
                }
                else if (resLength < res.length - 1) {
                    res = res.substr(0, resLength + 1);
                }
            }
        }
    }

    if (exp) {
        res = eval(res + "e" + exp);
    }
    if (neg) {
        res = "-" + res;
    }
    return parseFloat(res);
}
function appendZeros(val, zeroCount) {
    var res = val.toString();
    var i;
    for (i = 0; i < zeroCount; i++) {
        res = res.concat("0");
    }
    return res;
}

function findNonZeroIndex(val) {
    var valStr = val.toString();
    var ind;
    var i = 0;
    for (i = 0; i < valStr.length; i++) {
        if (valStr.charAt(i) != "0" && valStr.charAt(i) != ".") {
            ind = i - 2;
            return ind;
        }
    }
    return 0;
}