/* Add here all your JS customizations */

if ($.magnificPopup) {
    $.magnificPopup.instance._onFocusIn = function (e) {
        // Do nothing if target element is select2 input
        if ($(e.target).hasClass('select2-search__field')) {
            return true;
        }
        // Else call parent method
        $.magnificPopup.proto._onFocusIn.call(this, e);
    };
}

function initSelectTwo(container) {
    $(container + ' [data-plugin-selectTwo]').each(function() {
        var $this = $( this ),
            opts = {};

        var pluginOptions = $this.data('plugin-options');
        if (pluginOptions)
            opts = pluginOptions;

        $this.themePluginSelect2(opts);

        /*
        $this.on('select2:open', function() {
            if (Modernizr.touch) {
                $('.select2-search__field').prop('focus', false);
            }
        });
        */
    });
}

function initDatePicker(container) {
    $(container + ' [data-plugin-datepicker]').each(function() {
        var $this = $( this ),
            opts = {};

        var pluginOptions = $this.data('plugin-options');
        if (pluginOptions)
            opts = pluginOptions;

        $this.themePluginDatePicker(opts);
    });
}

function initTimePicker(container) {
    $(container + ' [data-plugin-timepicker]').each(function() {
        var $this = $( this ),
            opts = {};

        var pluginOptions = $this.data('plugin-options');
        if (pluginOptions)
            opts = pluginOptions;

        $this.themePluginTimePicker(opts);
    });
}

function initDataMask(container) {
    $(container + ' [data-plugin-masked-input]').each(function() {
        var $this = $( this ),
            opts = {};

        var pluginOptions = $this.data('plugin-options');
        if (pluginOptions)
            opts = pluginOptions;

        $this.themePluginMaskedInput(opts);
    });
}

function initTabs(container) {
    // Tabs
    $(container + ' a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        $(this).parents('.nav-tabs').find('.active').removeClass('active');
        $(this).parents('.nav-pills').find('.active').removeClass('active');
        $(this).addClass('active').parent().addClass('active');
    });
}

function initMaxLength(container) {
    $(container + ' [data-plugin-maxlength]').each(function() {
        var $this = $( this ),
            opts = {};

        var pluginOptions = $this.data('plugin-options');
        if (pluginOptions)
            opts = pluginOptions;

        $this.themePluginMaxLength(opts);
    });
}

function initFiltro(datatableId, params) {
    var tableName = '#' + datatableId;
    var $table = $(tableName);

    if ($table && $.fn.DataTable.isDataTable(tableName)) {
        var filters_selectors = $table.attr('data-filters');
        var $accordions = $('.' + filters_selectors);
        var $buttons = $('.' + filters_selectors + ' .btn-filtro');
        var $buttons_pulizia = $('.' + filters_selectors + ' .btn-filtro-pulisci');
        var $selects = $('.' + filters_selectors + ' .filter-change');
        var $datepickers = $('.' + filters_selectors + ' .filter-date');
        var $items = $('.' + filters_selectors + ' :input');

        $accordions.each(function () {
            $(this).on('hidden.bs.collapse', function () {
                var api = new $.fn.dataTable.Api(tableName);
                api.state.save();
            });
            $(this).on('shown.bs.collapse', function () {
                var api = new $.fn.dataTable.Api(tableName);
                api.state.save();
            });
        });

        $buttons.each(function () {
            $(this).on('click', function() {
                $table.dataTable().fnDraw(true);
            });
        });

        $buttons_pulizia.each(function () {
            $(this).on('click', function() {
                $items.each(function () {
                    var $item = $(this);
                    $item.val('');
                    refreshSelectEl($item);
                });

                if (params.resetFunction) {
                    var resetFunction = params.resetFunction;
                    resetFunction();
                }

                $table.dataTable().fnDraw(true);
            });
        });

        $selects.each(function () {
            var $item = $(this);
            if ($item.is('select')) {
                $item.on('change', function() {
                    $table.dataTable().fnDraw(true);
                });
            }
        });
    }
}

function initLoadingOverlay(container) {
    $(container + ' [data-loading-overlay]').loadingOverlay();
}

function refreshSelect(selector) {
    var $els = $(selector);
    $els.each(function() {
        var $el = $(this);
        if ($el && $el.is('select')) {
            $el.trigger('change.select2');
            /*
            $el.select2('data', null, false);
            var select2Instance = $el.data("select2");
            if (select2Instance && select2Instance.options && select2Instance.options.options) {
                var resetOptions = select2Instance.options.options;
                $el.select2('data', null, false);
                //$el.select2("destroy").select2(resetOptions);
            }
         */
        }
    })
}

function refreshSelectEl($el) {
    if ($el && $el.is('select')) {
        $el.trigger('change.select2');
        /*
        $el.select2('data', null, false);
        var select2Instance = $el.data("select2");
        if (select2Instance && select2Instance.options && select2Instance.options.options) {
            var resetOptions = select2Instance.options.options;
            $el.select2('data', null, false);
            //$el.select2("destroy").select2(resetOptions);
        }
        */
    }
}

function clearFormElements(container) {
    $(container).find(":input").each(function() {
        switch(this.type) {
            case 'password':
            case 'text':
            case 'email':
            case 'number':
            case 'textarea':
            case 'file':
            case 'select-multiple':
            case 'select-one':
                $(this).val('');
                refreshSelectEl($(this));
                break;
            case 'checkbox':
            case 'radio':
                this.checked = false;
        }
    });

    clearFilePondInput(container);
}

function initModalPlugins(container) {
    initDataMask(container);
    initMaxLength(container);
    initDatePicker(container);
    initTimePicker(container);
    initSelectTwo(container);
}


