﻿//Karthitron Consultancy Services Pvt. Ltd.

//////////////////////////////////////////////////////
// Description  :   Function to load initial data
//////////////////////////////////////////////////////
function LoadInitialData()
{
    document.getElementById('txtServings').value = document.getElementById('spnServingsPlanned').innerHTML;
    //Calculate the values according to selected unit.
    Calculate();
}

//////////////////////////////////////////////////////
// Description  :   Function to validate valid numeric
//                  in keypress event
// Input        :   Event calling this method(KeyPress)
//////////////////////////////////////////////////////
function validateNumeric(eventRef)
{
    var lintKeyCode = eventRef.keyCode ? eventRef.keyCode : ((eventRef.charCode) ? eventRef.charCode : eventRef.which);
    if(!((lintKeyCode >= 48 && lintKeyCode <=57) || lintKeyCode == 8 || lintKeyCode == 37 || lintKeyCode == 39 || lintKeyCode == 46))
    {
        return false;
    }
}
//////////////////////////////////////////////////////
// Description  :   Function to remove DOT character.
// Input        :   Input Textbox calling this function.
// Note         :   Keycode 46 is used by DEL and DOT.
//////////////////////////////////////////////////////
function validateNumericKeyUp(txtInput)
{
    if(txtInput.value.indexOf('.')!='-1')
    {
        txtInput.value = txtInput.title;
    }
    else
    {
        txtInput.title = txtInput.value;
    }
}

////////////////////////////////////////////////////////////
// Description  :   Function to interate through each
//                  item and set the calculated value
//                  and unit.
// History      :   Fraction is placed if deimal value falls in
//                  range instead of matching exact value.
////////////////////////////////////////////////////////////
function Calculate()
{
    var lintPlannedServings = document.getElementById('spnServingsPlanned').innerHTML;
    var lintActualServings = document.getElementById('txtServings').value;
    var ldcUnitConversionFactor = 1;
    var ldcConversionFactor = lintActualServings/ lintPlannedServings;
    
    var intIngredientsCount = document.getElementById('spnIngredientsCount').innerHTML;

    for(intIndex = 1; intIndex <= intIngredientsCount; intIndex++)
    {
        if(document.getElementById('spnIngredient'+intIndex+'ValueV')!=null)
        {
            if(document.getElementById('spnIngredient'+intIndex+'Value').innerHTML!='')
            {
                var IngredientValue = document.getElementById('spnIngredient'+intIndex+'Value').innerHTML*ldcConversionFactor*getUnitConverionFactor(intIndex);
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = (Math.round(IngredientValue*100)/100);
                document.getElementById('spnIngredient'+intIndex+'ValueV').title = '';

                if(!document.getElementById('rdbMetric').checked)
                {
                    var Value = '' + IngredientValue; 
                    if(Value.indexOf('.')!='-1')
                    {
                        var Base = Value.substring(0, Value.indexOf('.'));
                        var Decimal = Value.substring(Value.indexOf('.')+1, Value.length);
                        document.getElementById('spnIngredient'+intIndex+'ValueV').title = 'Rounded Value: ' + (Math.round(Value*100)/100) + '\nValue: ' + Value + '\nBase :' + Base + '\nDecimal :' + Decimal + '\nSource: Without Round';
                        var alternateText = '';
                        
                        var lintDecimalPart = parseFloat('.'+Decimal);
                        if(lintDecimalPart<0.06)
                        {
                            
                        }
                        else if(lintDecimalPart>=0.06 && lintDecimalPart<0.25)
                        {
                            alternateText = '<font size=4em>⅛</font>';
                        }
                        else if(lintDecimalPart>=0.25 && lintDecimalPart<0.33)
                        {
                            alternateText = '&frac14;';
                        }
                        else if(lintDecimalPart>=0.33 && lintDecimalPart<0.5)
                        {
                            alternateText = '<font size=4em>⅓</font>';
                        }
                        else if(lintDecimalPart>=0.5 && lintDecimalPart<0.66)
                        {
                            alternateText = '&frac12;';
                        }
                        else if(lintDecimalPart>=0.66 && lintDecimalPart<0.75)
                        {
                            alternateText = '<font size=4em>⅔</font>';
                        }
                        else if(lintDecimalPart>=0.75 && lintDecimalPart<0.875)
                        {
                            alternateText = '&frac34;';
                        }
                        else
                        {
                            document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = Math.round(IngredientValue);
                        }
                        if(alternateText != '')
                        {
                            if(Base>0)
                            {
                                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = Base + '';
                            }
                            else
                            {
                                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '';
                            }
                        }
                        document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML + alternateText;
                  }
                }
            }
            else
            {
                //This &nbsp; fix is for IE only. For other browsers, border is coming without this part of code.
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '&nbsp';
                document.getElementById('spnIngredient'+intIndex+'UnitV').innerHTML = '&nbsp';
            }
        }
    }
}
////////////////////////////////////////////////////////////
// Description  :   Function to interate through each
//                  item and set the calculated value
//                  and unit.
// History      :   Created basic feature.
////////////////////////////////////////////////////////////
function CalculateV1()
{
    var lintPlannedServings = document.getElementById('spnServingsPlanned').innerHTML;
    var lintActualServings = document.getElementById('txtServings').value;
    var ldcUnitConversionFactor = 1;
    var ldcConversionFactor = lintActualServings/ lintPlannedServings;
    
    var intIngredientsCount = document.getElementById('spnIngredientsCount').innerHTML;

    for(intIndex = 1; intIndex <= intIngredientsCount; intIndex++)
    {
        if(document.getElementById('spnIngredient'+intIndex+'ValueV')!=null)
        {
            if(document.getElementById('spnIngredient'+intIndex+'Value').innerHTML!='')
            {
                var IngredientValue = document.getElementById('spnIngredient'+intIndex+'Value').innerHTML*ldcConversionFactor*getUnitConverionFactor(intIndex);
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = (Math.round(IngredientValue*100)/100);
            }
            else
            {
                //This &nbsp; fix is for IE only. For other browsers, border is coming without this part of code.
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '&nbsp';
                document.getElementById('spnIngredient'+intIndex+'UnitV').innerHTML = '&nbsp';
            }
        }
    }
}

////////////////////////////////////////////////////////////
// Description  :   Function to interate through each item
//                  and set the calculated value and unit.
// History      :   Replace decimal value with fraction if
//                  exact match found for US unit value.
////////////////////////////////////////////////////////////
function CalculateV2()
{
    var lintPlannedServings = document.getElementById('spnServingsPlanned').innerHTML;
    var lintActualServings = document.getElementById('txtServings').value;
    var ldcUnitConversionFactor = 1;
    var ldcConversionFactor = lintActualServings/ lintPlannedServings;
    
    var intIngredientsCount = document.getElementById('spnIngredientsCount').innerHTML;

    for(intIndex = 1; intIndex <= intIngredientsCount; intIndex++)
    {
        if(document.getElementById('spnIngredient'+intIndex+'ValueV')!=null)
        {
            if(document.getElementById('spnIngredient'+intIndex+'Value').innerHTML!='')
            {
                var IngredientValue = document.getElementById('spnIngredient'+intIndex+'Value').innerHTML*ldcConversionFactor*getUnitConverionFactor(intIndex);
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = (Math.round(IngredientValue*100)/100);
                document.getElementById('spnIngredient'+intIndex+'ValueV').title = '';

                if(!document.getElementById('rdbMetric').checked)
                {
                    var Value = '' + IngredientValue; 
                    if(Value.indexOf('.')!='-1')
                    {
                        var Base = Value.substring(0, Value.indexOf('.'));
                        var Decimal = Value.substring(Value.indexOf('.')+1, Value.length);
                        //document.getElementById('spnIngredient'+intIndex+'ValueV').title = 'Rounded Value: ' + (Math.round(Value*100)/100) + '\nValue: ' + Value + '\nBase :' + Base + '\nDecimal :' + Decimal + '\nSource: Without Round';
                        var alternateText = '';
                        switch (Decimal.substring(0, 3))
                        {
                            case '25' || '250':
                                alternateText = '&frac14;';
                                break;
                            case '5' || '50' || '500':
                                alternateText = '&frac12;';
                                break;
                            case '75' || '750':
                                alternateText = '&frac34;';
                                break;
                            case '125':
                                alternateText = '1/8';
                                break;
                            case '333':
                                alternateText = '1/3';
                                break;
                            case '666':
                                alternateText = '2/3';
                                break;
                        }
                        if(alternateText != '')
                        {
                            if(Base>0)
                            {
                                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = Base + ' '; // + ' and '; ' &amp; ';
                            }
                            else
                            {
                                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '';
                            }
                        }
                        else//If the value without rouning is not fallen in above switch, try to check after rounding.
                        {
                            Value = '' + (Math.round(IngredientValue*100)/100);
                            if(Value.indexOf('.')!='-1')
                            {
                                Base = Value.substring(0, Value.indexOf('.'));
                                Decimal = Value.substring(Value.indexOf('.')+1, Value.length);
                                //document.getElementById('spnIngredient'+intIndex+'ValueV').title = 'Rounded Value: ' + (Math.round(Value*100)/100) + '\nValue: ' + Value + '\nBase :' + Base + '\nDecimal :' + Decimal + '\nSource: With Round';
                                switch (Decimal.substring(0, 3))
                                {
                                    case '25' || '250':
                                        alternateText = '&frac14;';
                                        break;
                                    case '5' || '50' || '500':
                                        alternateText = '&frac12;';
                                        break;
                                    case '75' || '750':
                                        alternateText = '&frac34;';
                                        break;
                                    case '125':
                                        alternateText = '1/8';
                                        break;
                                    case '333':
                                        alternateText = '1/3';
                                        break;
                                    case '666':
                                        alternateText = '2/3';
                                        break;
                                }
                                if(alternateText != '')
                                {
                                    if(Base>0)
                                    {
                                        document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = Base + ' ';
                                    }
                                    else
                                    {
                                        document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '';
                                    }
                                }
                            }
                        }
                        document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML + alternateText;
                  }
                }
            }
            else
            {
                //This &nbsp; fix is for IE only. For other browsers, border is coming without this part of code.
                document.getElementById('spnIngredient'+intIndex+'ValueV').innerHTML = '&nbsp';
                document.getElementById('spnIngredient'+intIndex+'UnitV').innerHTML = '&nbsp';
            }
        }
    }
}

////////////////////////////////////////////////////////////
// Description  :   Function to return unit conversion
//                  factor depending on current Item's
//                  standard unit and selected Unit.
// Input        :   Index of Indegredient Item.
////////////////////////////////////////////////////////////
function getUnitConverionFactor(ItemIndex)
{
    //Set the default Unit Conversion value as 1
    var ldcUnitConversionFactorValue = 1;
    
    //Change converion if unit is seleted as Metric
    if(document.getElementById('rdbMetric').checked)
    {
        //Check current item's standard Unit
        switch(document.getElementById('spnIngredient'+ItemIndex+'Unit').innerHTML)
        {
            case 'lb.':
                //Set the Unit Conversion value
                ldcUnitConversionFactorValue = 454;
                //Set the Unit Conversion Unit in metric
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'gms.';
                break;
            case 'teaspoon':
                ldcUnitConversionFactorValue = 5;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'ml.';
                break;
            case 'tablespoon':
                ldcUnitConversionFactorValue = 15;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'ml.';
                break;
            case 'cup':
                ldcUnitConversionFactorValue = 236;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'ml.';
                break;
            case 'oz.':
                ldcUnitConversionFactorValue = 28.3;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'gms.';
                break;
            case 'fl. Oz.':
                ldcUnitConversionFactorValue = 29.56;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = 'ml.';
                break;
            default:
                ldcUnitConversionFactorValue = 1;
                document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = document.getElementById('spnIngredient'+ItemIndex+'Unit').innerHTML;
                break;
        }
    }
    else
    {
        //Set the Unit Conversion Unit in US
        document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = document.getElementById('spnIngredient'+ItemIndex+'Unit').innerHTML;
    }
    //This &nbsp; fix is for IE only. For other browsers, border is coming without this part of code.
    if(document.getElementById('spnIngredient'+ItemIndex+'Unit').innerHTML == '')
    {
        document.getElementById('spnIngredient'+ItemIndex+'UnitV').innerHTML = '&nbsp;';
    }
    return ldcUnitConversionFactorValue;
}

LoadInitialData();
