/* Minification failed. Returning unminified contents.
(125,49-50): run-time error JS1100: Expected ',': =
(125,52-53): run-time error JS1002: Syntax error: ,
(125,62-63): run-time error JS1100: Expected ',': =
(125,67-68): run-time error JS1002: Syntax error: ,
(125,79-80): run-time error JS1100: Expected ',': =
 */
var Utilities = {
    SetupValidation: function (formSelector) {
        var form = $(formSelector);
        $(form).removeData("validator");
        $.validator.unobtrusive.parse(form);

        var formData = $.data(form[0])
            , settings = formData.validator.settings
            // Store existing event handlers in local variables
            , oldErrorPlacement = settings.errorPlacement
            , oldSuccess = settings.success;

        settings.errorPlacement = function (label, element) {

            // Call old handler so it can update the HTML
            oldErrorPlacement(label, element);

            // Add Bootstrap classes to newly added elements
            label.parents('.form-group').addClass('has-error');
            label.addClass('text-danger');
        };

        settings.success = function (label) {
            // Remove error class from <div class="form-group">, but don't worry about
            // validation error messages as the plugin is going to remove it anyway
            label.parents('.form-group').removeClass('has-error');

            // Call old handler to do rest of the work
            oldSuccess(label);
        };

        var indicateRequiredFields = function () {
            // Find all the required form controls
            $(formSelector + ' [data-val-required]').each(function (index) {
                // Find the .form-group div that the required field is contained within
                var formGroup = $(this).closest('.form-group');

                // Get the first label in the form group
                var label = $(formGroup).find('label').first();

                // Append an asterisk
                label.append('<span class="required"> *</span>');
            });
        };

        indicateRequiredFields();

    },
    AjaxForm: {
        onSuccess: function (btnSelector, callback) {
            $(btnSelector).button('reset');
            typeof callback === 'function' && callback();
        },
        onFailure: function (btnSelector, callback) {
            $(btnSelector).button('reset');
            typeof callback === 'function' && callback();
        },
        onBegin: function (btnSelector) {
            $(btnSelector).button('loading');
        }
    },
    EndlessScroll: function (listContainer, dataUrl, callback) {
        var currentPage = 0;
        var allPagesLoaded = false;
        var loadingPage = false;

        var readyForNextPage = function () {
            var first = $(window).scrollTop();
            var second = $(document).height() - $(window).height();
            var atBottom = first > second ? first - second : second - first;
            return (atBottom < 60 || currentPage === 0) && !allPagesLoaded && !loadingPage;
        };

        var renderPage = function (data) {
            if (data.length === 0) {
                $('.loading').hide();
                allPagesLoaded = true;
                loadingPage = false;
            }
            else {
                currentPage++;
                loadingPage = false;
                callback(data, currentPage);
                loadNextPage();
            }
        };

        var loadNextPage = function () {
            if (readyForNextPage()) {
                loadingPage = true;

                $('.loading').show();

                var url = dataUrl + '&page=' + currentPage;
                $.get(url, null, function (data) { $('.loading').hide(); renderPage(data); });
            }
        };

        $(window).scroll(loadNextPage);
        loadNextPage();
    },
    ParseJSONDate: function (jsonDateString) {
        return new Date(parseInt(jsonDateString.replace('/Date(', '')));
    },
    GetQueryStringParams: function (param) {
        const urlParams = new URLSearchParams(window.location.search);
        const myParam = urlParams.get(param);
        return myParam;
    },
    //TrackEvent: function (category, action, label, nonInteraction) {
    //    ga('send', {
    //        hitType: 'event',
    //        eventCategory: category,
    //        eventAction: action,
    //        eventLabel: label,
    //        nonInteraction: nonInteraction
    //    });
    //},
    //TrackPageView: function (path) {
    //    ga('send', {
    //        hitType: 'pageview',
    //        page: path
    //    });
    //},
    FormatMoney: function (amount, decimalCount = 2, decimal = ".", thousands = ",") {
        try {
            decimalCount = Math.abs(decimalCount);
            decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

            const negativeSign = amount < 0 ? "-" : "";

            let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
            let j = (i.length > 3) ? i.length % 3 : 0;

            return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
        } catch (e) {
            console.log(e)
        }
    }
};
;
