function loadSelectD(aElementId, aParams) {

    var aUrl = aParams.url;
    var aAjaxFunction = aParams.ajaxFunction;
    var aAdditionalData = aParams.additionalData;
    var aDefaultPrepend = aParams.defaultPrepend;
    var aPrepend = aParams.prepend;
    var aDefaultValue = aParams.defaultValue;
    var aUniqueOptionSelected = aParams.uniqueOptionSelected;
    var aFirstOptionSelected = aParams.firstOptionSelected;
    var aObject = aParams.object?aParams.object:false;

    var $el = $(aElementId);
    if (!$el) return;

    var readonly = $el.prop('readonly');
    $el.prop('readonly', true);
    $el.empty();

    $.ajax({
        url: aUrl,
        dataType: 'json',
        type: 'POST',
        data: aAdditionalData,
        success: function(data) {
            if (aDefaultPrepend) $el.append($("<option/>").attr("value", '0').text('--'));
            if (aPrepend) $el.append($("<option/>").attr("value", aPrepend[0]).text(aPrepend[1]));

            var i = 0;
            if (aObject) {
                $.each(data, function() {
                    i++;
                    var option = $("<option/>").attr("value", this.id).text(this.text);
                    if (((aDefaultValue) && (this.id.toString() === aDefaultValue.toString())) || (data.length === 1 && aUniqueOptionSelected) || (i === 1 && aFirstOptionSelected)) {
                        option.attr("selected", "selected");
                    }
                    $el.append(option);
                });
            } else {
                $.each(data, function(code, description) {
                    i++;
                    var option = $("<option/>").attr("value", code).text(description);
                    if (((aDefaultValue) && (code.toString() === aDefaultValue.toString())) || (Object.keys(data).length === 1 && aUniqueOptionSelected) || (i === 1 && aFirstOptionSelected)) {
                        option.attr("selected", "selected");
                    }
                    $el.append(option);
                });
            }

            $el.prop('readonly', readonly);

            if (aAjaxFunction) {
                return aAjaxFunction();
            }

            refreshSelect(aElementId);
        },
        error: function(x, e) {
        }
    });
}

function initSelectTwoAsync(aElementId, aParams) {

    var aUrl = aParams.url;
    var aDelay = aParams.delay;

    aDelay = aDelay == null?250:aDelay;

    var $el = $(aElementId);
    if (!$el) return;

    if ($el.is('select')) {
        var opts = [];
        opts['theme'] = 'bootstrap';
        opts['allowClear'] = true;
        opts['placeholder'] = "--";
        opts['minimumInputLength'] = 2;
        opts['language'] = 'it';
        opts['ajax'] = {
                url: aUrl,
                type: "POST",
                dataType: 'json',
                delay: aDelay,
                data: function (params) {
                    return {
                        search: params.term,
                        filtri: aParams.filtri
                    };
                },
                processResults: function (response) {
                    return {
                        results: response.items
                    };
                },
                cache: true
            };
        $el.select2(opts);

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


function multiselect_selected($el) {
    var ret = true;
    $('option', $el).each(function(element) {
        if (!!!$(this).prop('selected')) {
            ret = false;
        }
    });
    return ret;
}

function multiselect_selectAll($el) {
    $('option', $el).each(function(element) {
        $el.multiselect('select', $(this).val());
    });
}

function multiselect_deselectAll($el) {
    $('option', $el).each(function(element) {
        $el.multiselect('deselect', $(this).val());
    });
}

function multiselect_toggle($el, $btn, translates) {
    if (multiselect_selected($el)) {
        multiselect_deselectAll($el);
        $btn.text(translates.seleziona_tutti);
    }
    else {
        multiselect_selectAll($el);
        $btn.text(translates.deseleziona_tutti);
    }
}
