$(function () {
    'use strict';

    //var AH = getAH(80/100, 30);
    //alert(AH);
    function GetMonthAirTempSetValue(month, ft) {
        //var now = new Date();
        //switch (now.getMonth)
        switch (month) {
            case 0: return ft.T1;
            case 1: return ft.T2;
            case 2: return ft.T3;
            case 3: return ft.T4;
            case 4: return ft.T5;
            case 5: return ft.T6;
            case 6: return ft.T7;
            case 7: return ft.T8;
            case 8: return ft.T9;
            case 9: return ft.T10;
            case 10: return ft.T11;
            case 11: return ft.T12;
        }
        return 0;
    }

    function GetMonthZoneTempHumiSetValue(month, ft) {
        //var now = new Date();
        var value = {
            temp: 0, humi: 0
        };
        switch (month) {
            case 0: value.temp = ft.T1; value.humi = ft.H1; break;
            case 1: value.temp = ft.T2; value.humi = ft.H2; break;
            case 2: value.temp = ft.T3; value.humi = ft.H3; break;
            case 3: value.temp = ft.T4; value.humi = ft.H4; break;
            case 4: value.temp = ft.T5; value.humi = ft.H5; break;
            case 5: value.temp = ft.T6; value.humi = ft.H6; break;
            case 6: value.temp = ft.T7; value.humi = ft.H7; break;
            case 7: value.temp = ft.T8; value.humi = ft.H8; break;
            case 8: value.temp = ft.T9; value.humi = ft.H9; break;
            case 9: value.temp = ft.T10; value.humi = ft.H10; break;
            case 10: value.temp = ft.T11; value.humi = ft.H11; break;
            case 11: value.temp = ft.T12; value.humi = ft.H12; break;
        }
        return value;
    }

    function getENTHALPY(humi, temp) {

        var height = 101325 * Math.pow((1 - 2.25577 * Math.pow(10, -5) * 50), 5.2559);
        //alert(height);
        /*
            //절대습도
            var ahl = 0.62198 * 80 * sapl / (height - 80 * sapl);
            alert(ahl);
            var ahh = 0.62198 * 80 * saph / (height - 80 * saph);
            alert(ahh);
            */
        //포화공기 압력
        function getSAP(temp) {
            var cl = new Array(-5674.5359, 6.3925247, -0.009677843, 6.22157E-07, 2.07478E-09, -9.48402E-13, 4.1635019);
            var ch = new Array(-5800.2206, 1.3914993, -0.048640239, 4.17648E-05, -1.44521E-08, 6.5459673);
            var at = temp + 273.15;

            if (temp < 0)
                return Math.exp(cl[0] / at + cl[1] + cl[2] * at + cl[3] * Math.pow(at, 2) + cl[4] * Math.pow(at, 3) + cl[5] * Math.pow(at, 4) + cl[6] * Math.log(at));
            return Math.exp(ch[0] / at + ch[1] + ch[2] * at + ch[3] * Math.pow(at, 2) + ch[4] * Math.pow(at, 3) + ch[5] * Math.log(at));
        }

        //var SAP = getSAP(80/100, 30.0);
        //alert(SAP);
        // 절대습도
        function getAH(humi, temp) {
            return (0.62198 * humi * getSAP(temp)) / (height - humi * getSAP(temp));
        }
        return 1.006 * temp + (2501 + (1.86 * temp)) * getAH(humi, temp);
    }


    function calculateCo2Func(objCo2) {
        return function (x, fuelTypeId) {
            //return Math.round(x * objCo2[fuelTypeId] / 1000);
            //return Math.round(x * objCo2[fuelTypeId]);

            //return x * objCo2[fuelTypeId];  hcLee 2017 02 17
            if (objCo2[fuelTypeId] === undefined) return 0; // hcLee 2017 02 17
            return x * objCo2[fuelTypeId];  // hcLee 2017 02 17

            //var v = x * objCo2[fuelTypeId];
            //return Math.floor(v * 100) / 100;
        };
    }

    function calculateToeFunc(objToe) {
        return function (x, fuelTypeId) {
            //return x * objToe[fuelTypeId].pureFactor;  hcLee 2017 02 17
            if (objToe[fuelTypeId] === undefined) return 0;// hcLee 2017 02 17
            return x * objToe[fuelTypeId].pureFactor;// hcLee 2017 02 17
        };
    }

    function calculateKCALFunc(objToe) {
        return function (x, fuelTypeId) {
            if (x == 0) return 0; //hcLee 2016 07 06
            //return x * objToe[fuelTypeId].KCAL; hcLee 2017 02 17
            if (objToe[fuelTypeId] === undefined) return 0; // hcLee 2017 02 17
            return x * objToe[fuelTypeId].KCAL;// hcLee 2017 02 17
        };
    }

    BWA.Bems = {

        refineFactorCo2DataArray: function (factorCo2Array) {
            var objCo2 = {};
            _.each(factorCo2Array, function (factor) {
                objCo2[factor.FuelTypeId()] = factor.Factor();
            });
            objCo2.calculate = calculateCo2Func(objCo2);
            return objCo2;
        },

        refineFactorToeDataArray: function (factorToeArray) {
            var objToe = {};
            _.each(factorToeArray, function (factor) {
                objToe[factor.FuelTypeId()] = {
                    totalFactor: factor.TotalFactor(),
                    pureFactor: factor.PureFactor(),
                    KCAL: factor.kcal() // hcLee 2016 07 13 추가
                };
            });
            objToe.calculate = calculateToeFunc(objToe);
            return objToe;
        },

        refineFactorKCalDataArray: function (factorToeArray) {
            var objToe = {};
            _.each(factorToeArray, function (factor) {
                objToe[factor.FuelTypeId()] = {
                    totalFactor: factor.TotalFactor(),
                    pureFactor: factor.PureFactor(),
                    KCAL: factor.kcal()
                };
            });
            objToe.calculate = calculateKCALFunc(objToe);
            return objToe;
        },

        refinegetENTHALPY: function (t, h) {
            return getENTHALPY(h, t);
        },

        refineGetMonthAirTempSetValue: function (month, ft) {
            return GetMonthAirTempSetValue(month, ft);
        },

        refineGetMonthZoneTempHumiSetValue: function (month, ft) {
            return GetMonthZoneTempHumiSetValue(month, ft);
        },
    };
});