function roundToPrecision(value, precision) {
    var multiplier = Math.pow(10, precision);
    return Math.round(value * multiplier) / multiplier;
}
function calculateYieldStress(column) {
    var density = parseFloat($('#divSlumpCalculator #tbSlurryD' + column).val());
    var height = parseFloat($('#divSlumpCalculator #tbSlurryC' + column).val());
    var slump = parseFloat($('#divSlumpCalculator #tbSlurryM' + column).val());

    if (isNaN(density) || isNaN(height) || isNaN(slump))
        return;

    if (slump == density && density == height && height == 0)
        return '';

    if (slump > height)
        return 'The measured slump must be less than the cylinder height';
    if (density < 900)
        return 'The slurry density is too low for the slump calculation.';

    $('#divSlumpCalculator #tbSlurryY' + column).val('');

    var lower = 0;
    var upper = 1000;
    var count = 0;
    var ty = 10000;
    while (Math.abs(upper - lower) >= 0.01 && count < 1000) {
        count++;
        ty = (lower + upper) / 2;
        var tvp = ty / (density * 9.81 * height / 1000);
        var rhs = 1 - 2 * tvp * (1 - Math.log(2 * tvp));
        if (rhs - slump / height > 0)
            lower = ty;
        else
            upper = ty;
    }
    if (ty < 999)
        return roundToPrecision(ty, 1);
    else
        return 'One of the entered fields makes the calculation impossible.';
}

function resetSlumpCalculator(ev) {
    $('#divSlumpCalculator input[type=text]').val('');
}
function calculateSlumpCalculator(ev) {
    for (var ii = 1; ii < 4; ii++) {
        $('#divSlumpCalculator #tbSlurryY' + ii).val('');
        var result = calculateYieldStress(ii);
        if (result)
            if (!isNaN(result))
                $('#divSlumpCalculator #tbSlurryY' + ii).val(result);
            else if (result.length > 0)
                alert('For column ' + ii + ': ' + result);
            
    }
}
function printSlumpCalculator(ev) {
    var url = 'print_slumpcalculator.php?print=true&' + jQuery.param($('#divSlumpCalculator :input, select').serializeArray());
    window.open(url, 'calculatorprint', '');
}
$(document).ready(function (ev) {
    $('#divSlumpCalculator input[type=text]').focus(function (ev) { $(this).get(0).select(); }).change(function (ev) { calculateSlumpCalculator(ev); }); ;
    $('#divSlumpCalculator #btnSlumpReset').unbind().click(resetSlumpCalculator);
    $('#divSlumpCalculator #btnSlumpRecalculate').unbind().click(calculateSlumpCalculator);
    $('#divSlumpCalculator #btnSlumpPrint').unbind().click(printSlumpCalculator);
});
