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

    var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true);
    var corporationDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeCorporation', true, true);
    var businessFields = ko.observableArray();
    var corporations = ko.observableArray();

    var searchBusinessFields = ko.observableArray();
    var selectedSeniorData = ko.observable();

    var deferredForSearch = new $.Deferred();

    var factory = BemsWebApplication.Factory.LegalCheckGroup;

    var selectedCheckGroupId;

    function formatSenior(seniorItemName, seniorItemPeopleCount, seniorUserName) {
        return '{0} / {1}({2})'.formati(seniorItemName, seniorUserName, seniorItemPeopleCount);
    }

    var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsFacilityScheduleCheckGroup', {
        dataSourceOptions: factory.getDataSourceOptions(),
        columns: factory.defaultColumns,
        cellPrepared: factory.cellPrepared,

        promiseDataInSearchView: deferredForSearch.promise(),
        searchViewItems: [
            { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: searchBusinessFields },
            { id: 'Name' }
        ],

        handleViewShowing: function(dataViewModel) {

            businessFieldDataSource.load().done(function(result) {
                businessFields(result);
                searchBusinessFields($SearchView.createDefaultArray('BusinessFieldId').slice(0).concat(businessFields()));

                deferredForSearch.resolve();
            });

            dataViewModel.Senior = $KoSet(dataViewModel.Senior);
        },

        handlePopupShowing: function() {

            corporationDataSource.load().done(function(result) {
                corporations(result);
            });
            //targetFacilityDataSource.load().done( function( result ) {
            //    var targetFacilityDataGrid = $( '#gridTargetFacilityContainer' ).dxDataGrid( 'instance' );
            //    targetFacilityDataGrid.refresh();
            //});
        },

        handlePopupShown: function() {

            var targetFacilityDataGrid = $('#gridTargetFacilityContainer').dxDataGrid('instance');
            targetFacilityDataGrid.filter([
                ['SiteId', '=', BWA.UserInfo.SiteId()],
                'and',
                ['CheckGroupId', '=', selectedCheckGroupId]
            ]);
            //            targetFacilityDataGrid.refresh();
        },

        handleDataGridRowClick: function(id, dataGrid, clickRow, popupVisible) {
            
            dataGrid.clearSelection();

            var data = clickRow.data;
            var dm = viewModel.dataModel;

            dm.BusinessFieldName = $KoSet(dm.BusinessFieldName, data.BusinessFieldName);
            dm.CorporationName = $KoSet(dm.CorporationName, data.CorporationName);
            dm.Senior = $KoSet(dm.Senior, formatSenior(data.SeniorItemName(),
                                                       data.SeniorItemPeopleCount(),
                                                       data.SeniorUserName())
            );

            //var targetFacilityDataGrid = $( '#gridTargetFacilityContainer' ).dxDataGrid( 'instance' );

            //targetFacilityDataGrid.filter( [ 
            //    [ 'SiteId', '=', BWA.UserInfo.SiteId() ], 
            //    'and',
            //    [ 'CheckGroupId', '=', data.CheckGroupId() ]
            //] );
            selectedCheckGroupId = data.CheckGroupId();
            popupVisible(true);
        },
        handleSaveButtonInPopup: function(isInsert) {
            return BemsWebApplication.api.postWithDataGrid('FmsFacilityScheduleCheckGroupToFacility', 'gridFacilityContainer', {
                SiteId: BWA.UserInfo.SiteId(),
                CheckGroupId: selectedCheckGroupId,
                FacilityCode: null
            });

        },
        handleInitializeDataModelValue: function(v) {
            v.WorkTypeId($Code.WorkCodeType.LegalCheckGroup);
        }
    });

    var facilityFactory = BemsWebApplication.Factory.Facility;
    var targetFacilityDataSource = BWA.DataUtil.createDataSource({
        dataSourceOptions: {
            store: BemsWebApplication.odata.CheckGroupTargetFacility,
            select: facilityFactory.selectItemsInDataSource
        }
    });

    var facilityDataSource = BWA.DataUtil.createDataSource({
        dataSourceOptions: facilityFactory.getDataSourceForRefDataGrid()
    }, 'CmFacility');

    var cellPrepared = facilityFactory.cellPrepared;

    var dataGridOptions = {
        dxDataSource: targetFacilityDataSource,
        columns: facilityFactory.getColumns([
            /*
            { dataField: 'ClassName', width: '35%' },
            { dataField: 'Name', width: '30%' },
            { dataField: 'Location', width: '30%' } */
/*
            { dataField: 'FirstClassName', caption: '대분류', width: '7%', alignment: 'center', allowFiltering: false },
            { dataField: 'SecondClassName', caption: '중분류', width: '10%', alignment: 'center', allowFiltering: false },
            { dataField: 'ThirdClassName', caption: '소분류', width: '10%', alignment: 'center', allowFiltering: false },
            { dataField: 'Name', width: '30%' },
            { dataField: 'FloorName', caption: $G('facilityLocation'), width: '20%', alignment: 'center' } */
        ]),
        height: 400,
    };

    viewModel.isNewInPopup.subscribe(function(value) {

        if (value) {
            var facilityDataGrid = $('#gridFacilityContainer').dxDataGrid('instance');
            if (_.isUndefined(facilityDataGrid) === false) facilityDataGrid.clearSelection();
        }
    });
    viewModel.isEditModeInPopup.subscribe(function(value) {

        var facilityDataGrid = $('#gridFacilityContainer').dxDataGrid('instance');
        var targetFacilityDataGrid = $('#gridTargetFacilityContainer').dxDataGrid('instance');
        if (facilityDataGrid !== undefined && value) {
            facilityDataGrid.clearSelection();
            var items = targetFacilityDataGrid._controllers.data._dataSource._items;
            var keys = [];
            $.each(items, function(i, item) {
                keys.push({
                    FacilityCode: item.FacilityCode(),
                    SiteId: item.SiteId()
                });
            });
            facilityDataGrid.selectRows(keys);
        }
        else {
        }
    });
    viewModel.tabsItems = [
        { text: '기본 정보' },
        { text: '대상 시설' }
    ];
    viewModel.currentTabIndex = ko.observable(0);
    var dataModel = viewModel.dataModel;
    viewModel.multiViewItems = [
        {
            dataModel: dataModel,
            viewModel: viewModel,
            template: 'generalInfo'
        },
        {
            dataModel: dataModel,
            viewModel: viewModel,
            facilityDataGridOptions: utils.datagrid.defaultOptions($.extend({}, dataGridOptions, {
                visible: viewModel.isEditModeInPopup,
                dxDataSource: facilityDataSource,
                selection: { mode: 'multiple', allowSelectAll: true },
                cellPrepared: cellPrepared
            })),
            targetFacilityDataGridOptions: utils.datagrid.defaultOptions($.extend({}, dataGridOptions, {
                visible: viewModel.isViewModeInPopup,
                dxDataSource: targetFacilityDataSource,
                cellPrepared: cellPrepared,
                contentReadyAction: function(e) {
                    //console.log(e.model);
                }
            })),
            template: 'targetFacility'
        }
    ];

    selectedSeniorData.subscribe(function(value) {
        if (_.isEmpty(value)) return;
        viewModel.dataModel.SeniorId(value.SeniorId);
        viewModel.dataModel.Senior(formatSenior(value.SeniorItemName, value.SeniorItemPeopleCount, value.SeniorItemUserName));
    });

    viewModel.businessFields = businessFields;
    viewModel.corporations = corporations;
    viewModel.seniorSearchPopup = $SeniorSearchPopup(viewModel, selectedSeniorData);
    viewModel.handleButtonSearchSenior = function() {
        viewModel.seniorSearchPopup.show();
    };
    return viewModel;
};