BemsWebApplication.RefrigeratorAnalysis = function(params, viewInfo) {
    "use strict";

    var initialized = false,
    shouldReload = false,
    datagrid = null,

    check_A = ko.observable(false),
    check_R = ko.observable(false),
    //check_s = ko.observable(true),

    currentTabIndex = ko.observable(0),
    facilityViewModel = new BWA.CmFacilityViewModel(),
    dataSource;

    var m_Facility;

    var multiViewItems = [{
        template: 'mainCharts'
    }, {
        template: 'subCharts',
        check_A: check_A,
        check_R: check_R,
        //check_s : check_s,
    }
    ];

    //var buttonInstance = $('#check_input').dxChechkBox('instance');
        
    var facilityDataSource = BWA.db.createDataSource('CmFacility'),
        facilitiesForSearch = ko.observableArray(),

        facilityCodeForSearch = ko.observable(0),

        deferredForSearch = new $.Deferred();

    var dataArraycoolingApproaches = [];

    var dataSourceCop = ko.observableArray(),
        dataSourceLoadRate = ko.observableArray(),
        dataSourceElectricityLoadRate = ko.observableArray(),
        dataSourceTemperatureCop = ko.observableArray(),
        dataSourceCoolingApproach = ko.observableArray();

        
        //todayValue = ko.observable(0)
    
    var visiblePopup = ko.observable(false);

    var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());

    //var timeBoxForSearch = BWA.SearchView.createDateTimeBox();
    // cyim 2016.08.22 : 성능분석 그래프의 경우 시간 데이타만 표시되어야 한다
    var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForHourOnly, null, false);

    var chartCop                    = BWA.Chart.Instance('chartCop', 'dxChart'),
        chartLoadRate = BWA.Chart.Instance('chartLoadRate', 'dxChart'),
        chartGasLoadRate = BWA.Chart.Instance('chartGasLoadRate', 'dxChart'),
        chartElectricityLoadRate    = BWA.Chart.Instance('chartElectricityLoadRate', 'dxChart'),
        chartTemperatureCop = BWA.Chart.Instance('chartTemperatureCop', 'dxChart'),

        chart6 = BWA.Chart.Instance('chart6', 'dxChart'),
        chartReturnEfficiency = BWA.Chart.Instance('chartReturnEfficiency', 'dxChart'),
        chartATF = BWA.Chart.Instance('chartATF', 'dxChart'),
        chartCopLoadRate = BWA.Chart.Instance('chartCopLoadRate', 'dxChart'),
        
       
        chartEFFSW = BWA.Chart.Instance('chartEFFSW', 'dxChart'),
        chartCoolingApproach = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
        //chartCoolingApproach_ChangeSeries = BWA.Chart.Instance('chartCoolingApproach', 'dxChart') 
    ;

    var m = moment();
    dataSourceCop([
        { DateTime: new Date(m.year(), m.month(), 1), Value: 50 },
        { DateTime: new Date(m.year(), m.month(), 2), Value: 50 },
        { DateTime: new Date(m.year(), m.month(), 3), Value: 60 },
        { DateTime: new Date(m.year(), m.month(), 4), Value: 80 },
        { DateTime: new Date(m.year(), m.month(), 5), Value: 100 },
        { DateTime: new Date(m.year(), m.month(), 6), Value: 40, },
        { DateTime: new Date(m.year(), m.month(), 7), Value: 120 },
        { DateTime: new Date(m.year(), m.month(), 31), Value: 120 }
    ]);

    // 추가 2015 04 20 hcLee ->
    var CODE = $Code,
    FuelType = CODE.FuelType,
    FT = CODE.FacilityType,
    FC = CODE.FacilityCode,
    F = CODE.Formula,
    TIT = CODE.TimeIntervalType;
    // 추가 2015 04 20 hcLee  <-

    var chartLayout = new BWA.ChartLayout({
        divs: [[{       //hcLee 2015 07 20 V14.1-V15.1  
                id: 'regrigeratorDetail'
            }, {
                id: 'cop',
                chartId: 'chartCop'
            }, {
                id: 'loadRate',
                chartId: 'chartLoadRate'
            }, {
                id: 'GasLoadRate',
                chartId: 'chartGasLoadRate'
            }, {
                id: 'electricityLoadRate',
                chartId: 'chartElectricityLoadRate'
            }, {
                id: 'temperatureCop',
                chartId: 'chartTemperatureCop'
            }], [{
                id: 'b6',
                chartId: 'chart6'
            },
            {
                id: 'returnEfficiency',
                chartId: 'chartReturnEfficiency'
            }, {
                id: 'ATF',
                chartId: 'chartATF'
            },

            {
                id: 'CopLoadRate',
                chartId: 'chartCopLoadRate'
            },
            {
                id: 'EFFSW',
                chartId: 'chartEFFSW'
            }, {
                id: 'coolingApproach',
                chartId: 'chartCoolingApproach'
            }]
        ],

        multiViewOptions: {
            viewIndex: currentTabIndex,
            viewCount: 2,
            PageChanged: function () { // //hcLee 2015 07 20 V14.1-V15.1  
                //alert(currentTabIndex());
                handleSearchInSearchView();
            },
        }
    });

    //dataMonthForBar(dataDayForBar());

    //dataDayForPie([
    //    { FuelTypeName: '전기', Value: 320 },
    //    { FuelTypeName: '가스', Value: 350 },
    //    { FuelTypeName: '수도', Value: 360 },
    //]);
    //dataMonthForPie(dataDayForPie());

    function handleViewShown() {

        if (initialized === false) {

            var chartOption = BWA.ChartOptions.RefrigeratorAnalysis;
            // chart 설정, 최초 한번
            chartCop = chartCop(chartOption.getCopChartOptions($Code.TimeType.HOUR));
            chartLoadRate = chartLoadRate(chartOption.getLoadRateChartOptions($Code.TimeType.HOUR));
            //chartGasLoadRate = chartGasLoadRate(chartOption.getGasLoadRateChartOptions($Code.TimeType.HOUR));
            chartGasLoadRate = chartGasLoadRate(chartOption.getChart_3_Options($Code.TimeType.HOUR));
            
            chartElectricityLoadRate = chartElectricityLoadRate(chartOption.getElectricityLoadRateChartOptions($Code.TimeType.HOUR));
            chartTemperatureCop = chartTemperatureCop(chartOption.getTemperatureCopChartOptions($Code.TimeType.HOUR));

            chart6 = chart6(chartOption.getChart_678_Options($Code.TimeType.HOUR));
            chartReturnEfficiency = chartReturnEfficiency(chartOption.getChart_678_Options($Code.TimeType.HOUR));
            chartATF = chartATF(chartOption.getChart_678_Options($Code.TimeType.HOUR));

            chartCopLoadRate = chartCopLoadRate(chartOption.getCopLoadRateChartOptions($Code.TimeType.HOUR));
            chartEFFSW = chartEFFSW(chartOption.getEFFSWChartOptions($Code.TimeType.HOUR));
            chartCoolingApproach = chartCoolingApproach(chartOption.getCoolingApproachChartOptions($Code.TimeType.HOUR));

            initialized = true;
        }

        //hcLee 2016 07 12
        timeBoxForSearch.setDefaultDate();
        //timeBoxForSearch.hour();

        var eq = BWA.DataUtil.constructEqualFilter;
        facilityDataSource.filter([
            eq('SiteId', BWA.UserInfo.SiteId()),
            'and',
            eq('FacilityTypeId', $Code.FacilityType.REFRIGERATOR) // 냉동기($Code.FacilityType.REFRIGERATOR)
        ]);

        facilityDataSource.load().done(function (facilities) {
            facilitiesForSearch(facilities);
            if (_.isEmpty(facilities) === false) {
                var f = facilities[0]; // 첫번째 설비 그려주기 위해
                handleSelectedFacilityInSearchView(f);
                handleSearchInSearchView();

                var datagrid = $('#refrigeratorDataGridViewInSearchView').dxDataGrid('instance');
                if (_.has(datagrid, 'selectRows')) {
                    datagrid.selectRows(f);
                }
            }
        });
    }

    $('#temperatureCop').css('visibility', 'hidden');
    $('#coolingApproach').css('margin-left', '10.5%');

    if (shouldReload) {
            //shouldReload = false;
            //dataSource.pageIndex(0);
            //dataSource.load();
    }

    function handleViewHidden() {
        //hideOverlay();
        //    var dataGrid = $('#gridContainer').dxDataGrid('instance');
        //    dataGrid.clearSelection();
        //chartLayout.multiViewOptions.viewCount = 1;
        //var view = $('#RefrigeratorAnalysisView');
        //view.
        //$('#RefrigeratorAnalysisView').sideOverlayVisible(false);
        //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
        //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
        var paging = BWA.ChartLayout.Paging;
        paging.sideOverlayVisible(false);
        //paging.hideNextButton(true);
        //paging.hidePrevButton(true);
        $SearchView.visibleObservable(false); // hcLee 2015 03 23
        visiblePopup(false);
    }

    function handleViewShowing() {
    }

    function refreshList() {
        //dataSource.pageIndex(0);
        //dataSource.load();
    }

    var searchViewOptions = {
        searchViewItems: [
            { id: 'FacilityCode', ignoreValue: 0, defaultValue: 0, value: facilityCodeForSearch, dataSource: facilitiesForSearch },
        ],
        promiseDataInSearchView: deferredForSearch.promise()
    };

    function handleSelectedFacilityInSearchView(facility) {
        m_Facility = facility;
        return;
    }

    function setChartElectricityByLoadRate(loadRateDataArray, electricityDataArray) {

        var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
            loadRateDataArray, electricityDataArray, 'LoadRate', 'EV');

        //chartElectricityLoadRate().option('dataSource', dataArray);
        var options = BWA.ChartOptions.RefrigeratorAnalysis.getElectricityLoadRateChartOptions(timeBoxForSearch.type());
        //chartElectricityLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartElectricityLoadRate().option(options);

    }

    function setChartGasByLoadRate(loadRateDataArray, gasDataArray) {

        var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
            loadRateDataArray, gasDataArray, 'LoadRate', 'm');

        //chartGasLoadRate().option('dataSource', dataArray); // 아래 4줄로 변경

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getGasLoadRateChartOptions(timeBoxForSearch.type());
        //chartGasLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartGasLoadRate().option(options);

    }

    // 냉열원 생산열량
    function setChart_3(DataArray1, DataArray2, maxValueatf) {
        var dataArray = [];
        _.each(DataArray1, function (x) {
            dataArray.push({
                //DateTime: moment(x.DateTime).toDate(),
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                kcal : x.Value
            });
        });
        _.each(DataArray2, function (x) {
            dataArray.push({
                //DateTime: moment(x.DateTime).toDate(),
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                temp : x.Value
            });
        });

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getChart_3_Options(timeBoxForSearch.type());
        if (maxValueatf != undefined) // 한축에 온도가 있는 경우
            options.valueAxis[0].tickInterval = Math.round(maxValueatf / 5) + 1;
        options.dataSource = dataArray;
        chartGasLoadRate().option(options);
    }

    function setChartCopByTemperature(temperatureDataArray, copDataArray, loadDataArray) {

        var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
            temperatureDataArray, copDataArray, 'Temperature', 'Cop');

        var dataArray2 = BWA.Chart.getRelationDataArrayOnDateTime(
            temperatureDataArray, loadDataArray, 'Temperature', 'load');

        _.each(dataArray2, function (x) {
            dataArray.push(x);
        });
        //console.log(dataArray);
        //chartTemperatureCop().option('dataSource', dataArray);

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getTemperatureCopChartOptions(timeBoxForSearch.type());
        //chartTemperatureCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartTemperatureCop().option(options);

    }

    function setChart_678(DataArray1, DataArray2, chart678) {
        var dataArray = [];
        _.each(DataArray1, function (x) {
            dataArray.push({
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                kw : x.Value
            });
        });
        _.each(DataArray2, function (x) {
            dataArray.push({
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                hz: x.Value
            });
        });

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getChart_678_Options(timeBoxForSearch.type());
        options.dataSource = dataArray;
        chart678().option(options);
    }

    function setChartCopLoadRates(copDataArray, loadRateDataArray) {

        var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
            copDataArray, loadRateDataArray, 'cop', 'LoadRate');

        //chartCopLoadRate().option('dataSource', dataArray);
        var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopLoadRateChartOptions(timeBoxForSearch.type());
        //chartCopLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartCopLoadRate().option(options);

    }

    function setChartReturnEfficiency(pkwDataArray, CoolAbtyDataArray) {

        var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
            pkwDataArray, CoolAbtyDataArray, 'pkwh', 'CoolAbty');

        //chartReturnEfficiency().option('dataSource', dataArray);

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getReturnEfficiencyChartOptions(timeBoxForSearch.type());
        //chartReturnEfficiency().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartReturnEfficiency().option(options);

    }

    function setChartATF(tempDataArray, atfDataArray, maxValueatf) {
        //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
        //    tempDataArray, atfDataArray, 'temp', 'atf');
        var dataArray = [];
        _.each(tempDataArray, function (x) {
            dataArray.push({
                //DateTime: moment(x.DateTime).toDate(),
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                temp: x.Value
            });
        });
        _.each(atfDataArray, function (x) {
            dataArray.push({
                //DateTime: moment(x.DateTime).toDate(),
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                atf: x.Value
            });
        });

        //chartATF().option('dataSource', dataArray);
        var options = BWA.ChartOptions.RefrigeratorAnalysis.getATFChartOptions(timeBoxForSearch.type());
        //chartATF().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.valueAxis[0].tickInterval = Math.round(maxValueatf / 5)+1;
        options.dataSource = dataArray;
        chartATF().option(options);
    }

    function setChartEFFSW(effDataArray, swDataArray) {
        //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
        //    tempDataArray, atfDataArray, 'temp', 'atf');
        var dataArray = [];
/*
        _.each(effDataArray, function (x) {
            dataArray.push({
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                eff: x.Value
            });
        }); */

        _.each(swDataArray, function (x) {
            dataArray.push({
                //DateTime: moment(x.DateTime).toDate(),
                DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                sw: x.Value
            });
        });

        //chartEFFSW().option('dataSource', dataArray);

        var options = BWA.ChartOptions.RefrigeratorAnalysis.getEFFSWChartOptions(timeBoxForSearch.type());
        //chartEFFSW().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
        options.dataSource = dataArray;
        chartEFFSW().option(options);
    }

    function handleSearchInSearchView(filter, searchViewItems) {
        //console.log(filter);
        //console.log(searchViewItems);
        if (m_Facility == null) return;

        visiblePopup(true);

        var f = m_Facility.toJS();
        facilityViewModel.fromJS(f); // 선택한 설비

        //var timeIntervalType = $Code.TimeIntervalType.QUARTERMIN;
        var timeIntervalType = timeBoxForSearch.type();
        //  $Code.FacilityType.REFRIGERATOR ->  이 화면은 냉동기 -> REFRIGERATOR: 2,  냉동기  (DB FacilityType 테이블 내용과 같아야 한다.)
        var formula = $Code.Formula[$Code.FacilityType.REFRIGERATOR]; //  1~ 6까지 
        var formulaIds = _.values(formula);

        var date = timeBoxForSearch.getDate();
/*
        timeBoxForSearch.type($Code.TimeIntervalType.DAY);
        timeIntervalType = $Code.TimeIntervalType.DAY;
        date.startDate = new Date(2015, 0, 1);
        date.endDate = new Date(2015, 11, 31); 
        */
        //        var startDate = moment().
        var promises = [];
        _.each(formulaIds, function (formulaId) {
            var p = formulaGet.apiGet({
                FacilityTypeId: f.FacilityTypeId,
                FacilityCode: f.FacilityCode, // 선택한 설비별 포뮬러를 가져온다 
                FormulaId: formulaId,

                TimeIntervalType: timeIntervalType,
                StartDate: date.startDate,
                EndDate: date.endDate

            });
            promises.push(p);
        });

        // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20  ->
        var commonParameters = {
            TimeIntervalType: timeBoxForSearch.type(),
            StartDate: date.startDate,
            EndDate: date.endDate
        };
        var temperatureParameters = {
            FacilityTypeId: FT.OUTDOOR,
            FacilityCode: FC.OUTDOOR,
            FormulaId: F[FT.OUTDOOR].TEMPERATURE,
        };
        var humidityParameters = _.extend({}, temperatureParameters, {
            FormulaId: F[FT.OUTDOOR].HUMIDITY,
        });

        promises.push(formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)));
        promises.push(formulaGet.apiGet(_.extend(humidityParameters, commonParameters)));
        // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20  <-

        $.when.apply(this, promises)
        .done(function (cops, loadRates, coolingApproaches,
            ratedCapacities, electricities, temperatures, gas, pkwh, CoolAbty, atf, eff, sw,
            c_out_temp, h_temp,
            R15, R16, R17, R18, R19, R20, R21,
            R22, // 2016 06 30 추가 쿨링레인지
            OUTtemperatures, humidities) { // done의 리턴 파라메터는 정해져 있다 2015 04 20, 끝에 2개 (OUTtemperatures, humidities)추가

            R15 = R15[0]; R16 = R16[0]; R17 = R17[0]; R18 = R18[0]; R19 = R19[0]; R20 = R20[0]; R21 = R21[0];

            R22 = R22[0]; // 2016 06 30 추가 쿨링레인지

            cops = cops[0];
            loadRates = loadRates[0];
            var maxValuecops = 0;
            var maxValueloadRates = 0;

            _.each(cops, function (x) {
                if (maxValuecops < x.Value) maxValuecops = x.Value;
            });
            _.each(loadRates, function (x) {
                if (maxValueloadRates < x.Value) maxValueloadRates = x.Value;
            });

            coolingApproaches = coolingApproaches[0];
/*
            var maxValuecoolingApproaches = 0;
            _.each(coolingApproaches, function (x) {
                if (maxValuecoolingApproaches < x.Value) maxValuecoolingApproaches= x.Value; // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
            });*/

            dataArraycoolingApproaches = coolingApproaches;

            ratedCapacities = ratedCapacities[0]; // 추가 hcLee 2015 04 20
            electricities = electricities[0]; // 전력량
            temperatures = temperatures[0]; // 냉각수 입구 온도
            gas = gas[0];

            pkwh = pkwh[0];
            CoolAbty = CoolAbty[0];
            //OUTtemperatures = OUTtemperatures[0];

            atf = atf[0];
            var maxValueatf = 0;
            _.each(atf, function (x) {
                if (maxValueatf < x.Value) maxValueatf = x.Value;
            });

            eff = eff[0];
            sw = sw[0];

            c_out_temp = c_out_temp[0];
            h_temp = h_temp[0];
/*
            var dataArray = [];
            _.each(OUTtemperatures[0], function (x) {
                dataArray.push({
                    //DateTime: moment(x.DateTime).toDate(),
                    DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                    Temperature: x.Value
                });
            });

            _.each(humidities[0], function (x) {
                dataArray.push({
                    //DateTime: moment(x.DateTime).toDate(),
                    DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                    Humidity: x.Value
                });
            }); */

            var copDataArray = BWA.Chart.mapNewWithConvertingDateTime(cops, timeBoxForSearch.type());

            var loadRateDataArray = BWA.Chart.mapNewWithConvertingDateTime(loadRates, timeBoxForSearch.type());

            //_.each(OUTtemperatures[0], function (x) {
            //    copDataArray.push({
            //        //DateTime: moment(x.DateTime).toDate(),
            //        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
            //        Temperature: x.Value
            //    });
            //    loadRateDataArray.push({
            //        //DateTime: moment(x.DateTime).toDate(),
            //        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
            //        Temperature: x.Value
            //    });

            //});

            //_.each(humidities[0], function (x) {
            //    copDataArray.push({
            //        //DateTime: moment(x.DateTime).toDate(),
            //        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
            //        Humidity: x.Value
            //    });
            //    loadRateDataArray.push({
            //        //DateTime: moment(x.DateTime).toDate(),
            //        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
            //        Humidity: x.Value
            //    });
            //});

            //hcLee 2015 07 20 V14.1-V15.1  
            if (currentTabIndex() == 0) {

                //BWA.Chart.mapWithConvertingDateTime(coolingApproaches, timeBoxForSearch.type());

                // 1차트 냉동기 COP
                // chartCop().option('dataSource', copDataArray); 2015 06 25 아래 4줄로 변경 

                var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopChartOptions(timeBoxForSearch.type());
                //chartCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
                //options.valueAxis[0].tickInterval = Math.round(maxValuecops / 5) + 1;
                options.dataSource = copDataArray;
                chartCop().option(options);


                // 2차트 부하율
                //chartLoadRate().option('dataSource', loadRateDataArray);

                options = BWA.ChartOptions.RefrigeratorAnalysis.getLoadRateChartOptions(timeBoxForSearch.type());
                //options.valueAxis[0].tickInterval = Math.round(maxValueloadRates / 5) + 1;
                //chartLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
                options.dataSource = loadRateDataArray;
                chartLoadRate().option(options);

                // 3차트 추가 가스량vs부하
                //setChartGasByLoadRate(loadRates, gas);
                setChart_3(R15, electricities, maxValueatf);

                //$('#electricityLoadRate').css('visibility', 'hidden'); // 
                //$('#electricityLoadRate').css('width', '0%');

                // 4차트 냉동기 소비전력과 부하율 관계 -> 차트4
                setChartElectricityByLoadRate(loadRates, electricities);


                // 5차트 냉각수 입구 온도와 COP, 부하율 관계
                setChartCopByTemperature(temperatures, cops, loadRates);
            }
            //hcLee 2015 07 20 V14.1-V15.1  
            else if (currentTabIndex() == 1) {

                //if (chartCopLoadRate().option == 'undefined')
                //if (chartCopLoadRate() != object)
                //BWA.Chart.mapWithConvertingDateTime(coolingApproaches, timeBoxForSearch.type());
                {
                    //hcLee 2015 07 20 V14.1-V15.1  
                    var chartOption = BWA.ChartOptions.RefrigeratorAnalysis;

                    chart6 = BWA.Chart.Instance('chart6', 'dxChart'),
                    chartReturnEfficiency = BWA.Chart.Instance('chartReturnEfficiency', 'dxChart'),
                    chartATF = BWA.Chart.Instance('chartATF', 'dxChart'),

                    chartCopLoadRate = BWA.Chart.Instance('chartCopLoadRate', 'dxChart'),
                    chartEFFSW = BWA.Chart.Instance('chartEFFSW', 'dxChart'),
                    chartCoolingApproach = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')

                    chart6 = chart6(chartOption.getChart_678_Options($Code.TimeType.HOUR));
                    chartReturnEfficiency = chartReturnEfficiency(chartOption.getChart_678_Options($Code.TimeType.HOUR));
                    chartATF = chartATF(chartOption.getChart_678_Options($Code.TimeType.HOUR));

                    chartCopLoadRate = chartCopLoadRate(chartOption.getCopLoadRateChartOptions($Code.TimeType.HOUR));
                    chartEFFSW = chartEFFSW(chartOption.getEFFSWChartOptions($Code.TimeType.HOUR));
                    chartCoolingApproach = chartCoolingApproach(chartOption.getCoolingApproachChartOptions($Code.TimeType.HOUR));
                }
                // 6차트 COP와 부하율 분석 (다음페이지 첫 차트)
                setChart_678(R16, R19, chart6);

                // 7차트 수반송 효율
                //setChartReturnEfficiency(pkwh, CoolAbty);
                setChart_678(R17, R20, chartReturnEfficiency);
                // 8차트 ATF
                //setChartATF(temperatures, atf);
                //setChartATF(OUTtemperatures[0], atf, maxValueatf);
                setChart_678(R18, R21, chartATF);

                //
                setChartCopLoadRates(cops, loadRates);

                // 9차트 EFFSW
                setChartEFFSW(eff, sw);

                // 마지막차트  냉동기 시간대별 쿨링어프로치
                var OUTtemperatures = OUTtemperatures[0];
                BWA.Chart.mapWithConvertingDateTime(OUTtemperatures, timeBoxForSearch.type());

                _.each(temperatures, function (x) {
                    OUTtemperatures.push({
                        //DateTime: moment(x.DateTime).toDate(),
                        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                        c_in_temp: x.Value
                    });
                });

                _.each(c_out_temp, function (x) {
                    OUTtemperatures.push({
                        //DateTime: moment(x.DateTime).toDate(),
                        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
                        c_out_temp: x.Value
                    });
                });

                _.each(h_temp, function (y) {
                    OUTtemperatures.push({
                        //DateTime: moment(y.DateTime).toDate(),
                        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(y.DateTime).toDate()),
                        h_temp: y.Value
                    });
                });

                _.each(coolingApproaches, function (ca) {
                    OUTtemperatures.push({
                        //DateTime: moment(y.DateTime).toDate(),
                        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(ca.DateTime).toDate()),
                        ca_value: ca.Value
                    });
                });

                _.each(R22, function (cr) {
                    OUTtemperatures.push({
                        //DateTime: moment(y.DateTime).toDate(),
                        DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(cr.DateTime).toDate()),
                        cr_value: cr.Value
                    });
                });

                //chartCoolingApproach().option('dataSource', coolingApproaches);
                options = BWA.ChartOptions.RefrigeratorAnalysis.getCoolingApproachChartOptions(timeBoxForSearch.type());
                //chartCoolingApproach().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
                //options.valueAxis[0].tickInterval = Math.round(maxValuecoolingApproaches / 10); // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
                options.dataSource = OUTtemperatures;
                chartCoolingApproach().option(options);
            }

            visiblePopup(false);
        })
        .fail(function (error) {
            //alert(error);
            visiblePopup(false);
        });

    }


    var viewModel = $.extend(BWA.CommonView.create(
            params, viewInfo, searchViewOptions, ko.observable(null),
            handleViewShown, null, handleSearchInSearchView,
            undefined, chartLayout), {

                facility: facilityViewModel,
        viewHidden: handleViewHidden, // hcLee 2015 06 03
        refreshList: refreshList,
        viewShowing: handleViewShowing,
        scrolling: { mode: 'infinite' },
        waterCoolingDataGridOptions: {
            dataSource: facilitiesForSearch,
            columns: [
                { dataField: 'Name', caption: $G('facilityName'), width: '100%', alignment: 'left' }
            ],
            filterRow: {
                visible: true,
                showOperationChooser: false
            },
            selection: {
                mode: 'single'
            },
            rowClick: function(clickRow) {
                handleSelectedFacilityInSearchView(clickRow.data);
            }
        },
        contentReadyAction: function(e) {
            datagrid = e.component;
        },
    });

    viewModel.check_A_f =  function () {
        setCheckBoxChart();
    }

    var valueAxises = [
        {
            title: {
                text: '온도 (°C)'
            }
        },
        ];

    var seriesS = [
        {
            //type: 'bar',
            type: 'spline',
            argumentField: 'DateTime',
            valueField: 'Value',
            //width: 5,
            //valueField: 'h_temp',
            name: '외기온도',
            label: {
                visible: false,
            },
            point: { size: 1 }
        },

        {
            type: 'spline',
            color: '#c96374',
            //pane: 'topPane',
            //        axis: 'intemp',
            valueField: 'c_in_temp',
            point: { size: 1 },
            //name: '냉각수 입구온도',
            name : '냉각탑 출구온도',
            label: {
                visible: false,
                font: { color: '#c96374', },
                customizeText: function () {
                    return this.valueText + ' °C';
                }
            }
        }, {
            type: 'spline',
            //pane: 'topPane',
            //        axis: 'outtemp',
            color: '#00A7C6',
            valueField: 'c_out_temp',
            point: { size: 1 },
            //name: '냉각수 출구온도',
            name: '냉각탑 입구온도',
            
            label: {
                font: { color: '#00A7C6', },
                visible: false,
                customizeText: function () {
                    return this.valueText + ' °C';
                }
            }
        }, {
            type: 'spline',
            // pane: 'topPane',
            //        axis: 'htemp',
            color: 'darkgreen',
            valueField: 'h_temp',
            point: { size: 1 },
            name: '습구온도',
            label: {
                font: { color: 'darkgreen', },
                visible: false,
                customizeText: function () {
                    return this.valueText + ' °C';
                }
            }
        },

        {
            type: 'bar',
            argumentField: 'DateTime',
            //argumentField: 'string',
            valueField: 'ca_value',
            color: 'red',
            width: 5,
            //valueField: 'h_temp',
            name: $G('coolingApproach'),
            label: {
                visible: false,
            },
            point: { size: 4 }
        },

        {
            type: 'bar',
            argumentField: 'DateTime',
            //argumentField: 'string',
            valueField: 'cr_value',
            color: 'blue',
            width: 5,
            //valueField: 'h_temp',
            name: '쿨링 레인지',
            label: {
                visible: false,
            },
            point: { size: 4 }
        },

    ];

    function setCheckBoxChart()
    {
/*
        var cO = BWA.ChartOptions.RefrigeratorAnalysis;
        var S = chartCoolingApproach(cO.getCoolingApproachSeriesOptions(check_input(), check_out(), check_s()));
        var V = chartCoolingApproach(cO.getCoolingApproachvalueAxisOptions(check_input(), check_out(), check_s()));

        var chart = $('#chartCoolingApproach').dxChart('instance');
        chart.option('valueAxis', V);
        chart.option('series', S); */  // 이렇게 옵션에서 가져오면 안됨.
        
        // OK 코드
        var chart = $('#chartCoolingApproach').dxChart('instance');

        var valueAxisNew = [];
        valueAxisNew.push(valueAxises[0]);
        //if (check_input()) valueAxisNew.push(valueAxises[1]);
        //if (check_out()) valueAxisNew.push(valueAxises[2]);
        //if (check_s()) valueAxisNew.push(valueAxises[3]);
        chart.option('valueAxis', valueAxisNew);

        var seriesNew = [];
        for (var i = 0; i < 4; i++)
            seriesNew.push(seriesS[i]); // 기본4개, 외기/입구/출구/습구
        if (check_A()) seriesNew.push(seriesS[4]);
        if (check_R()) seriesNew.push(seriesS[5]);
        chart.option('series', seriesNew); 
        // OK 코드        
    }

    viewModel.check_A_f = function () {
        setCheckBoxChart();
    }
    viewModel.check_R_f = function () {
        setCheckBoxChart();
    }

    check_A.subscribe(viewModel.check_A_f);
    check_R.subscribe(viewModel.check_R_f);
    
   
    viewModel.timeBoxForSearch = timeBoxForSearch;
    viewModel.currentTabIndex = currentTabIndex;
    viewModel.multiViewItems = [{

        facility: facilityViewModel,
        
        template: 'mainCharts'
    }, {
        template: 'subCharts',
        check_A: check_A,
        check_R: check_R,
        //check_s: check_s,
    }
    ];

    //ko.applyBindgings(viewModel, check_input);
    //ko.a
    //ko.applyBindings(viewModel, document.getElementById("multiview"));
    $HourGlassPopup(viewModel, visiblePopup);

    return viewModel;
};