// source --> https://pervyebljuda.ru/wp-content/plugins/wp-recall/assets/js/core.js?ver=16.26.10 
var rcl_actions = [];
var rcl_filters = [];
var rcl_beats = [];
var rcl_beats_delay = 0;
var rcl_url_params = rcl_get_value_url_params();

jQuery(document).ready(function ($) {

    rcl_init_update_requared_checkbox();

    $.fn.extend({
        insertAtCaret: function (myValue) {
            return this.each(function (i) {
                if (document.selection) {
                    // Для браузеров типа Internet Explorer
                    this.focus();
                    var sel = document.selection.createRange();
                    sel.text = myValue;
                    this.focus();
                } else if (this.selectionStart || this.selectionStart == '0') {
                    // Для браузеров типа Firefox и других Webkit-ов
                    var startPos = this.selectionStart;
                    var endPos = this.selectionEnd;
                    var scrollTop = this.scrollTop;
                    this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length);
                    this.focus();
                    this.selectionStart = startPos + myValue.length;
                    this.selectionEnd = startPos + myValue.length;
                    this.scrollTop = scrollTop;
                } else {
                    this.value += myValue;
                    this.focus();
                }
            })
        },
        animateCss: function (animationNameStart, functionEnd) {
            var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
            this.addClass('animated ' + animationNameStart).one(animationEnd, function () {
                jQuery(this).removeClass('animated ' + animationNameStart);

                if (functionEnd) {
                    if (typeof functionEnd == 'function') {
                        functionEnd(this);
                    } else {
                        jQuery(this).animateCss(functionEnd);
                    }
                }
            });
            return this;
        }
    });

});

function rcl_do_action(action_name) {

    var callbacks_action = rcl_actions[action_name];

    if (!callbacks_action)
        return false;

    var args = [].slice.call(arguments, 1);

    callbacks_action.forEach(function (callback, i, callbacks_action) {
        if (window[callback])
            window[callback].apply(this, args);
        if (typeof callback === 'function')
            callback.apply(this, args);
    });
}

function rcl_add_action(action_name, callback) {
    if (!rcl_actions[action_name]) {
        rcl_actions[action_name] = [callback];
    } else {
        var i = rcl_actions[action_name].length;
        rcl_actions[action_name][i] = callback;
    }
}

function rcl_apply_filters(filter_name) {

    var args = [].slice.call(arguments, 1);

    var callbacks_filter = rcl_filters[filter_name];

    if (!callbacks_filter)
        return args[0];

    callbacks_filter.forEach(function (callback, i, callbacks_filter) {
        args[0] = window[callback].apply(this, args);
    });

    return args[0];
}

function rcl_add_filter(filter_name, callback) {
    if (!rcl_filters[filter_name]) {
        rcl_filters[filter_name] = [callback];
    } else {
        var i = rcl_filters[filter_name].length;
        rcl_filters[filter_name][i] = callback;
    }
}

function rcl_get_value_url_params() {
    var tmp_1 = new Array();
    var tmp_2 = new Array();
    var rcl_url_params = new Array();
    var get = location.search;
    if (get !== '') {
        tmp_1 = (get.substr(1)).split('&');
        for (var i = 0; i < tmp_1.length; i++) {
            tmp_2 = tmp_1[i].split('=');
            rcl_url_params[tmp_2[0]] = tmp_2[1];
        }
    }

    return rcl_url_params;
}

function rcl_is_valid_url(url) {
    var objRE = /http(s?):\/\/[-\w\.]{3,}\.[A-Za-z]{2,3}/;
    return objRE.test(url);
}

function setAttr_rcl(prmName, val) {
    var res = '';
    var d = location.href.split("#")[0].split("?");
    var base = d[0];
    var query = d[1];
    if (query) {
        var params = query.split("&");
        for (var i = 0; i < params.length; i++) {
            var keyval = params[i].split("=");
            if (keyval[0] !== prmName) {
                res += params[i] + '&';
            }
        }
    }
    res += prmName + '=' + val;
    return base + '?' + res;
}

function rcl_update_history_url(url) {

    if (url != window.location) {
        if (history.pushState) {
            window.history.pushState(null, null, url);
        }
    }

}

function rcl_init_cookie() {

    jQuery.cookie = function (name, value, options) {
        if (typeof value !== 'undefined') {
            options = options || {};
            if (value === null) {
                value = '';
                options.expires = -1;
            }
            var expires = '';
            if (options.expires && (typeof options.expires === 'number' || options.expires.toUTCString)) {
                var date;
                if (typeof options.expires === 'number') {
                    date = new Date();
                    date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                } else {
                    date = options.expires;
                }
                expires = '; expires=' + date.toUTCString();
            }
            var path = options.path ? '; path=' + (options.path) : '';
            var domain = options.domain ? '; domain=' + (options.domain) : '';
            var secure = options.secure ? '; secure' : '';
            document.cookie = [name, '=', encodeURIComponent(value),
                expires, path,
                domain, secure].join('');
        } else {
            var cookieValue = null;
            if (document.cookie && document.cookie !== '') {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = cookies[i].trim();
                    if (cookie.substring(0, name.length + 1) === (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
    };

}

function rcl_add_dynamic_field(e) {
    var parent = jQuery(e).parents('.dynamic-value');
    var box = parent.parent('.dynamic-values');
    var html = parent.html();
    box.append('<span class="dynamic-value">' + html + '</span>');
    jQuery(e).attr('onclick', 'rcl_remove_dynamic_field(this);return false;').children('i').toggleClass("fa-plus fa-minus");
    box.children('span').last().children('input').val('').focus();
}

function rcl_remove_dynamic_field(e) {
    jQuery(e).parents('.dynamic-value').remove();
}

function rcl_rand(min, max) {
    if (max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    } else {
        return Math.floor(Math.random() * (min + 1));
    }
}

function rcl_notice(text, type, time_close) {

    time_close = time_close || false;

    var options = {
        text: text,
        type: type,
        time_close: time_close
    };

    options = rcl_apply_filters('rcl_notice_options', options);

    var notice_id = rcl_rand(1, 1000);

    var html = '<div id="notice-' + notice_id + '" class="notice-window type-' + options.type + '"><a href="#" class="close-notice"><i class="rcli fa-times"></i></a>' + options.text + '</div>';
    if (!jQuery('#rcl-notice').length) {
        jQuery('body > div').last().after('<div id="rcl-notice">' + html + '</div>');
    } else {
        if (jQuery('#rcl-notice > div').length)
            jQuery('#rcl-notice > div:last-child').after(html);
        else
            jQuery('#rcl-notice').html(html);
    }

    if (typeof animateCss !== 'undefined') {
        jQuery('#rcl-notice > div').last().animateCss('slideInLeft');
    }

    if (time_close) {
        setTimeout(function () {
            rcl_close_notice('#rcl-notice #notice-' + notice_id)
        }, options.time_close);
    }
}

function rcl_close_notice(e) {

    var timeCook = jQuery(e).data('notice_time');

    if (timeCook) {

        var idCook = jQuery(e).data('notice_id');
        var block = jQuery(e).parents('.rcl-notice');

        if (typeof animateCss !== 'undefined') {
            jQuery(block).animateCss('flipOutX', function () {
                jQuery(block).remove();
            });
        } else {
            jQuery(block).remove();
        }

        jQuery.cookie(idCook, '1', {
            expires: timeCook,
            path: '/'
        });

    } else {

        if (typeof animateCss !== 'undefined') {
            jQuery(e).animateCss('flipOutX', function (e) {
                jQuery(e).hide();
            });
        } else {
            jQuery(e).hide();
        }

    }

    return false;
}

function rcl_preloader_show(e, size) {

    var font_size = (size) ? size : 80;
    var margin = font_size / 2;

    var options = {
        size: font_size,
        margin: margin,
        icon: 'fa-circle-o-notch',
        class: 'rcl_preloader'
    };

    options = rcl_apply_filters('rcl_preloader_options', options);

    var style = 'style="font-size:' + options.size + 'px;margin: -' + options.margin + 'px 0 0 -' + options.margin + 'px;"';

    var html = '<div class="' + options.class + '"><i class="rcli ' + options.icon + ' fa-spin" ' + style + '></i></div>';

    if (typeof (e) === 'string')
        jQuery(e).after(html);
    else
        e.append(html);
}

function rcl_preloader_hide() {
    jQuery('.rcl_preloader').remove();
}

function rcl_setup_datepicker_options() {

    jQuery.datepicker.setDefaults(jQuery.extend(jQuery.datepicker.regional["ru"]));

    var options = {
        monthNames: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
            "Июль",
            "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
        dayNamesMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
        firstDay: 1,
        dateFormat: 'yy-mm-dd',
        yearRange: "1950:c+3",
        changeYear: true
    };

    options = rcl_apply_filters('rcl_datepicker_options', options);

    return options;

}

function rcl_show_datepicker(e) {
    jQuery(e).datepicker(rcl_setup_datepicker_options());
    jQuery(e).datepicker("show");
    rcl_add_action('rcl_upload_tab', 'rcl_remove_datepicker_box');
}

function rcl_remove_datepicker_box() {
    jQuery('#ui-datepicker-div').remove();
}

function rcl_init_field_file(field_id) {
    jQuery("#" + field_id).parents('form').attr("enctype", "multipart/form-data");
}

function rcl_init_runner(props) {

    var box = jQuery('#rcl-runner-' + props.id);

    box.children('.rcl-runner-box').slider({
        value: parseInt(props.value),
        min: parseInt(props.min),
        max: parseInt(props.max),
        step: parseInt(props.step),
        create: function (event, ui) {
            var value = box.children('.rcl-runner-box').slider('value');
            box.children('.rcl-runner-value').text(value);
            box.children('.rcl-runner-field').val(value);
        },
        slide: function (event, ui) {
            box.find('.rcl-runner-value').text(ui.value);
            box.find('.rcl-runner-field').val(ui.value);
        }
    });
}

function rcl_init_range(props) {

    var box = jQuery('#rcl-range-' + props.id);

    box.children('.rcl-range-box').slider({
        range: true,
        values: [parseInt(props.values[0]), parseInt(props.values[1])],
        min: parseInt(props.min),
        max: parseInt(props.max),
        step: parseInt(props.step),
        create: function (event, ui) {
            var values = box.children('.rcl-range-box').slider('values');
            box.children('.rcl-range-value').text(values[0] + ' - ' + values[1]);
            box.children('.rcl-range-min').val(values[0]);
            box.children('.rcl-range-max').val(values[1]);
        },
        slide: function (event, ui) {
            box.children('.rcl-range-value').text(ui.values[0] + ' - ' + ui.values[1]);
            box.find('.rcl-range-min').val(ui.values[0]);
            box.find('.rcl-range-max').val(ui.values[1]);
        }
    });
}

function rcl_init_color(id, props) {
    jQuery("#" + id).wpColorPicker(props);
}

function rcl_init_field_maxlength(fieldID) {

    var field = jQuery('#' + fieldID);
    var maxlength = field.attr('maxlength');

    if (!field.parent().find('.maxlength').length) {

        if (field.val()) {
            maxlength = maxlength - field.val().length;
        }

        field.after('<span class="maxlength">' + maxlength + '</span>');
    }

    field.on('keyup', function () {
        var maxlength = jQuery(this).attr('maxlength');
        if (!maxlength)
            return false;
        var word = jQuery(this);
        var count = maxlength - word.val().length;
        jQuery(this).next().text(count);
        if (word.val().length > maxlength)
            word.val(word.val().substr(0, maxlength));
    });
}

function rcl_init_ajax_editor(id, options) {

    if (typeof QTags === 'undefined')
        return false;

    rcl_do_action('rcl_pre_init_ajax_editor', {
        id: id,
        options: options
    });

    var qt_options = {
        id: id,
        buttons: (options.qt_buttons) ? options.qt_buttons : "strong,em,link,block,del,ins,img,ul,ol,li,code,more,close"
    };

    QTags(qt_options);

    QTags._buttonsInit();

    if (options.tinymce && typeof tinyMCEPreInit != 'undefined') {

        tinyMCEPreInit.qtInit[id] = qt_options;

        tinyMCEPreInit.mceInit[id] = {
            body_class: id,
            selector: '#' + id,
            menubar: false,
            skin: "lightgray",
            theme: 'modern',
            toolbar1: "formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,unlink,wp_more,spellchecker,fullscreen,wp_adv",
            toolbar2: "strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help",
            wpautop: true
        };

        tinymce.init(tinyMCEPreInit.mceInit[id]);
        tinyMCE.execCommand('mceAddEditor', true, id);

        switchEditors.go(id, 'html');
    }

}

function rcl_setup_quicktags(newTags) {

    if (typeof QTags === 'undefined')
        return false;

    newTags.forEach(function (tagArray, i, newTags) {

        QTags.addButton(
            tagArray[0],
            tagArray[1],
            tagArray[2],
            tagArray[3],
            tagArray[4],
            tagArray[5],
            tagArray[6]
        );

    });

}

rcl_add_action('rcl_pre_init_ajax_editor', 'rcl_add_ajax_quicktags');

function rcl_add_ajax_quicktags(editor) {

    if (typeof Rcl === 'undefined' || !Rcl.QTags)
        return false;

    rcl_setup_quicktags(Rcl.QTags);

}

rcl_add_action('rcl_footer', 'rcl_add_quicktags');

function rcl_add_quicktags() {

    if (typeof Rcl === 'undefined' || !Rcl.QTags)
        return false;

    rcl_setup_quicktags(Rcl.QTags);

}

function rcl_proccess_ajax_return(result) {

    var methods = {
        redirect: function (url) {

            var urlData = url.split('#');

            if (window.location.origin + window.location.pathname === urlData[0]) {
                location.reload();
            } else {
                location.replace(url);
            }

        },
        reload: function () {
            location.reload();
        },
        current_url: function (url) {
            rcl_update_history_url(url);
        },
        dialog: function (dialog) {

            if (dialog.content) {

                if (jQuery('#ssi-modalContent').length)
                    ssi_modal.close();

                var ssiOptions = {
                    className: 'rcl-dialog-tab ' + (dialog.class ? ' ' + dialog.class : ''),
                    sizeClass: dialog.size ? dialog.size : 'auto',
                    content: dialog.content,
                    buttons: []
                };

                if (dialog.buttons) {
                    ssiOptions.buttons = dialog.buttons;
                }

                var buttonClose = true;

                if ('buttonClose' in dialog) {
                    buttonClose = dialog.buttonClose;
                }

                if (buttonClose) {

                    ssiOptions.buttons.push({
                        label: Rcl.local.close,
                        closeAfter: true
                    });

                }

                if ('onClose' in dialog) {
                    ssiOptions.onClose = function (m) {
                        window[dialog.onClose[0]].apply(this, dialog.onClose[1]);
                    };
                }

                if (dialog.title)
                    ssiOptions.title = dialog.title;

                ssi_modal.show(ssiOptions);

            }

            if (dialog.close) {
                ssi_modal.close();
            }

        }
    };

    for (var method in result) {
        if (methods[method]) {
            methods[method](result[method]);
        }
    }

}

function rcl_ajax(prop) {

    if (prop.data.ask) {
        if (!confirm(prop.data.ask)) {
            rcl_preloader_hide();
            return false;
        }
    }

    if (typeof Rcl != 'undefined') {
        if (typeof prop.data === 'string') {
            prop.data += '&ajax_nonce=' + Rcl.nonce;
        } else if (typeof prop.data === 'object') {
            prop.data.ajax_nonce = Rcl.nonce;
        }
    }

    var action = false;
    if (typeof prop.data === 'string') {
        var propData = prop.data.split('&');
        var propObj = {};
        for (var key in propData) {
            propObj[propData[key].split("=")[0]] = propData[key].split("=")[1];
        }
        action = propObj.action;
    } else if (typeof prop.data === 'object') {
        action = prop.data.action;
    }

    if (typeof tinyMCE != 'undefined')
        tinyMCE.triggerSave();

    jQuery.ajax({
        type: 'POST',
        data: prop.data,
        dataType: 'json',
        url: (typeof ajaxurl !== 'undefined') ? ajaxurl : Rcl.ajaxurl,
        success: function (result, post) {

            var noticeTime = result.notice_time ? result.notice_time : 5000;

            if (!result) {
                rcl_notice(Rcl.local.error, 'error', noticeTime);
                return false;
            }

            if (result.error || result.errors) {

                rcl_preloader_hide();

                if (result.errors) {
                    jQuery.each(result.errors, function (index, error) {
                        rcl_notice(error, 'error', noticeTime);
                    });
                } else {
                    rcl_notice(result.error, 'error', noticeTime);
                }

                if (prop.error)
                    prop.error(result);

                return false;

            }

            if (!result.preloader_live) {
                rcl_preloader_hide();
            }

            if (result.success) {
                rcl_notice(result.success, 'success', noticeTime);
            }

            if (result.warning) {
                rcl_notice(result.warning, 'warning', noticeTime);
            }

            rcl_do_action('rcl_ajax_success', result);

            if (prop.success) {

                prop.success(result);

            } else {

                rcl_proccess_ajax_return(result);

            }

            rcl_do_action(action, result);

        }
    });

}


function rcl_submit_form(e) {

    var form = jQuery(e).parents('form');

    if (rcl_check_form(form))
        form.submit();

}

function rcl_send_form_data(action, e) {

    var form = jQuery(e).parents('form');

    if (!rcl_check_form(form))
        return false;

    if (e && jQuery(e).parents('.preloader-parent')) {
        rcl_preloader_show(jQuery(e).parents('.preloader-parent'));
    }

    if (typeof tinyMCE !== 'undefined')
        tinyMCE.triggerSave();

    rcl_ajax({
        data: form.serialize() + '&action=' + action
    });

}

function rcl_check_form(form) {

    var rclFormFactory = new RclForm(form);

    return rclFormFactory.validate();

}

function rcl_add_beat(beat_name, delay, data) {

    delay = (delay < 10) ? 10 : delay;

    var data = (data) ? data : false;

    var i = rcl_beats.length;

    rcl_beats[i] = {
        beat_name: beat_name,
        delay: delay,
        data: data
    };

}

function rcl_remove_beat(beat_name) {

    if (!rcl_beats)
        return false;

    var remove = false;
    var all_beats = rcl_beats;

    all_beats.forEach(function (beat, index, all_beats) {
        if (beat.beat_name != beat_name)
            return;
        delete rcl_beats[index];
        remove = true;
    });

    return remove;

}

function rcl_exist_beat(beat_name) {

    if (!rcl_beats)
        return false;

    var exist = false;

    rcl_beats.forEach(function (beat, index, rcl_beats) {
        if (beat.beat_name != beat_name)
            return;
        exist = true;
    });

    return exist;

}

function rcl_init_table(table_id) {

    jQuery('#' + table_id).on('click', '.rcl-table__cell-must-sort', function () {

        jQuery('#' + table_id).find('.rcl-table__cell-must-sort, .rcl-table__cell-sort').removeClass('rcl-table__cell-current-sort');

        var sortCell = jQuery(this);

        var sortby = sortCell.data('sort');
        var route = sortCell.attr('data-route');

        sortCell.addClass('rcl-table__cell-current-sort');
        jQuery('#' + table_id).find('[data-' + sortby + '-value]').addClass('rcl-table__cell-current-sort');

        var list = jQuery('#' + table_id + ' .rcl-table__row-must-sort');

        list.sort(function (a, b) {
            var aVal = jQuery(a).find('[data-' + sortby + '-value]').data(sortby + '-value');
            var bVal = jQuery(b).find('[data-' + sortby + '-value]').data(sortby + '-value');

            if (route == 'desc') {
                return (aVal < bVal) - (aVal > bVal); //по возрастанию
            } else {
                return (aVal > bVal) - (aVal < bVal); //по убыванию
            }
        });

        sortCell.attr('data-route', (route == 'desc' ? 'asc' : 'desc'));

        jQuery('#' + table_id + ' .rcl-table__row-must-sort').remove();

        list.each(function (i, e) {
            jQuery('#' + table_id + ' .rcl-table__row-header').after(jQuery(this));
        });

    });

}

function rcl_table_search(e, key, submit) {

    if (submit) {

        if (typeof submit == 'string') {

            return window[submit].call(this, e, key, submit);

        } else if (key == 'Enter') {
            jQuery(e).parents('form').submit();
        }

        return;

    }

    var table_id = jQuery(e).parents('.rcl-table').attr('id');

    var inputs = jQuery(e).parents('.rcl-table').find('.rcl-table__row-search input');

    var search = [];
    inputs.each(function (i, a) {

        if (jQuery(a).val() !== '') {
            search.push([jQuery(a).parent().data('rcl-ttitle'),
                jQuery(a).val()]);
        }

    });

    jQuery('#' + table_id + ' .rcl-table__row-must-sort').show();

    if (!search.length) {
        return;
    }

    var list = jQuery('#' + table_id + ' .rcl-table__row-must-sort');

    list.each(function (i, r) {

        var success = true;

        var cells = jQuery(r).find('.rcl-table__cell');

        cells.each(function (x, c) {

            search.forEach(function (s) {

                if (jQuery(c).data('rcl-ttitle') == s[0]) {

                    var value = jQuery(c).data('value');

                    if (typeof value == 'number' && jQuery(c).data('value') != s[1] ||
                        typeof value == 'string' && value.indexOf(s[1]) < 0) {
                        success = false;
                        return;
                    }

                }

            });

            if (!success) {
                return;
            }

        });

        if (!success) {
            jQuery(r).hide();
        }

    });
}

function RclForm(form) {

    this.form = form;
    this.errors = {};

    this.validate = function () {

        var valid = true;

        for (var objKey in this.checkForm) {

            var chekObject = this.checkForm[objKey];

            if (!chekObject.isValid.call(this)) {

                valid = false;

                break;

            }

        }
        ;

        if (this.errors) {
            for (var k in this.errors) {
                this.showError(this.errors[k]);
            }
            ;
        }

        return valid;

    };

    this.addChekForm = function (id, data) {
        this.checkForm[id] = data;
    };

    this.addChekFields = function (id, data) {
        this.checkFields[id] = data;
    };

    this.addError = function (id, error) {
        this.errors[id] = error;
    };

    this.shake = function (shakeBox) {
        shakeBox.css('box-shadow', 'red 0px 0px 5px 1px inset').animateCss('shake');
    };

    this.noShake = function (shakeBox) {
        shakeBox.css('box-shadow', 'none');
    };

    this.showError = function (error) {
        rcl_notice(error, 'error', 10000);
    };

    this.checkForm = {
        checkFields: {
            isValid: function () {

                var valid = true;
                var parent = this;

                this.form.find('input,select,textarea').each(function () {

                    var field = jQuery(this);
                    var typeField = field.attr('type');

                    if (field.is('textarea')) {
                        typeField = 'textarea';
                    }

                    var checkFields = rcl_apply_filters('rcl_form_check_rules', parent.checkFields, parent);

                    for (var objKey in checkFields) {

                        var chekObject = checkFields[objKey];

                        if (chekObject.types.length && jQuery.inArray(typeField, chekObject.types) < 0) {
                            continue;
                        }

                        var shakeBox = jQuery.inArray(typeField, ['radio',
                            'checkbox']) < 0 ? field : field.next('label');

                        if (!chekObject.isValid(field)) {

                            parent.shake(shakeBox);
                            parent.addError(objKey, chekObject.errorText());
                            valid = false;
                            return;

                        } else {
                            parent.noShake(shakeBox);
                        }

                    }
                    ;

                });

                return valid;

            }

        }

    };

    this.checkFields = {
        required: {
            types: [],
            isValid: function (field) {

                var required = true;

                if (!field.prop("required"))
                    return required;

                if (field.prop("disabled"))
                    return required;

                var value = false;

                if (field.attr('type') == 'checkbox') {
                    if (jQuery('input[name="' + field.attr('name') + '"]:checked').val())
                        value = true;
                } else if (field.attr('type') == 'radio') {
                    if (jQuery('input[name="' + field.attr('name') + '"]:checked').val())
                        value = true;
                } else {
                    if (field.val())
                        value = true;
                }

                if (!value) {
                    required = false;
                }

                return required;

            },
            errorText: function () {
                return Rcl.errors.required;
            }


        },
        numberRange: {
            types: ['number'],
            isValid: function (field) {
                var range = true;

                var val = field.val();

                if (val === '')
                    return true;

                val = parseInt(val);
                var min = parseInt(field.attr('min'));
                var max = parseInt(field.attr('max'));

                if (min != 'undefined' && min > val || max != 'undefined' && max < val) {
                    range = false;
                }

                return range;
            },
            errorText: function () {
                return Rcl.errors.number_range;
            }

        },
        pattern: {
            types: ['text', 'tel'],
            isValid: function (field) {

                var val = field.val();

                if (!val)
                    return true;

                var pattern = field.attr('pattern');

                if (!pattern)
                    return true;

                var re = new RegExp(pattern);

                return re.test(val);
            },
            errorText: function () {
                return Rcl.errors.pattern;
            }

        },
        fileMaxSize: {
            types: ['file'],
            isValid: function (field) {

                var valid = true;

                field.each(function () {

                    var maxsize = jQuery(this).data("size");
                    var fileInput = jQuery(this)[0];
                    var file = fileInput.files[0];

                    if (!file)
                        return;

                    var filesize = file.size / 1024 / 1024;

                    if (filesize > maxsize) {
                        valid = false;
                        return;
                    }

                });

                return valid;
            },
            errorText: function () {
                return Rcl.errors.file_max_size;
            }

        },
        fileAccept: {
            types: ['file'],
            isValid: function (field) {

                var valid = true;

                field.each(function () {

                    var fileInput = jQuery(this)[0];
                    var file = fileInput.files[0];
                    var accept = fileInput.accept.split(',');

                    if (!file)
                        return;

                    if (accept) {

                        var fileType = false;

                        if (file.type) {

                            for (var i in accept) {
                                if (accept[i] == file.type) {
                                    fileType = true;
                                    return;
                                }
                            }

                        }

                        var exts = jQuery(this).data("ext");

                        if (!exts)
                            return;

                        if (!fileType) {

                            var exts = exts.split(',');
                            var filename = file.name;

                            for (var i in exts) {
                                if (filename.indexOf('.' + exts[i]) + 1) {
                                    fileType = true;
                                    return;
                                }
                            }

                        }

                        if (!fileType) {
                            valid = false;
                            return;
                        }

                    }

                });

                return valid;
            },
            errorText: function () {
                return Rcl.errors.file_accept;
            }

        }
    };

    this.send = function (action, success) {

        if (!this.validate())
            return false;

        rcl_preloader_show(form);

        var sendData = {
            data: form.serialize() + '&action=' + action
        };

        if (success) {
            sendData.success = success;
        }

        rcl_ajax(sendData);

    };

}

function rcl_chek_form_field(e) {

    var field = jQuery(e);

    var rclFormFactory = new RclForm(field.parents('form'));

    var result = rclFormFactory.validate({
        check_fields: [field.data('slug')]
    });

    return result;

}

function rcl_init_iconpicker() {
    jQuery('.rcl-iconpicker').iconpicker();
}

/** new uploader scripts **/

var RclUploaders = [];

(function ($) {

    $(document).ready(function () {

        jQuery('body').on('drop', function (e) {
            return false;
        });
        jQuery(document.body).on("drop", function (e) {
            e.preventDefault();
        });

        RclUploaders.init();

    });

})(jQuery);

RclUploaders = new RclClassUploaders();

function RclClassUploaders() {

    this.uploaders = [];

    this.init = function () {

        this.uploaders.forEach(function (uploader, i) {
            uploader.init();
        });

    };

    this.add = function (props, sk) {

        this.uploaders.push(new RclUploader(props, sk));

    };

    this.get = function (uploader_id) {

        var k = false;

        this.uploaders.forEach(function (uploader, i) {

            if (uploader.uploader_id == uploader_id)
                k = i;
        });

        if (k !== false)
            return this.uploaders[k];

    }

    this.isset = function (uploader_id) {

        var k = false;

        this.uploaders.forEach(function (uploader, i) {

            if (uploader.uploader_id == uploader_id)
                k = i;
        });

        if (k !== false)
            return true;

        return false;

    }

}

function RclUploader(props, sk) {

    this.uploader_id = props.uploader_id;
    this.input = jQuery("#rcl-uploader-input-" + this.uploader_id);
    this.button = this.input.parent(".rcl-uploader-button");
    this.options = props;

    this.getFormData = function (uploader) {
        if (!uploader)
            uploader = this;

        var formData = {
            options: JSON.stringify(uploader.options),
            is_wp_admin_page: typeof adminpage ? 1 : 0,
            sk: sk
        };

        formData.action = uploader.options.action;
        formData.ajax_nonce = Rcl.nonce;

        return formData;

    };

    this.init = function () {

        if (this.options.dropzone)
            rcl_init_dropzone(jQuery("#rcl-dropzone-" + this.uploader_id));

        var uploader_id = this.options.uploader_id;
        var uploader = this;

        options = {
            dataType: 'json',
            type: 'POST',
            url: Rcl.ajaxurl,
            dropZone: this.options.dropzone ? jQuery("#rcl-dropzone-" + this.uploader_id) : false,
            formData: this.getFormData(uploader),
            loadImageMaxFileSize: this.options.max_size * 1024,
            autoUpload: this.options.auto_upload,
            singleFileUploads: false,
            /*limitMultiFileUploads: this.options.max_files,*/
            maxNumberOfFiles: this.options.max_files,
            imageMinWidth: this.options.min_width,
            imageMinHeight: this.options.min_height,
            imageMaxWidth: 1920,
            imageMaxHeight: 1080,
            imageCrop: false,
            imageForceResize: false,
            previewCrop: false,
            previewThumbnail: true,
            previewCanvas: true,
            previewMaxWidth: 900,
            previewMaxHeight: 900,
            disableExifThumbnail: true,
            progressall: function (e, data) {
                RclUploaders.get(uploader_id).progressall(e, data);
            },
            processstart: function (e, data) {
                RclUploaders.get(uploader_id).processstart(e, data);
            },
            processdone: function (e, data) {
                RclUploaders.get(uploader_id).processdone(e, data);
            },
            processfail: function (e, data) {
                RclUploaders.get(uploader_id).processfail(e, data);
            },
            add: function (e, data) {
                RclUploaders.get(uploader_id).add(e, data);
            },
            submit: function (e, data) {
                RclUploaders.get(uploader_id).submit(e, data);
            },
            done: function (e, data) {
                RclUploaders.get(uploader_id).done(e, data);
            }
        };

        this.input.fileupload(options);

        /*this.initSortable();*/

        rcl_do_action('rcl_uploader_init', uploader_id);

    };

    this.initSortable = function () {
        jQuery("#rcl-upload-gallery-" + this.uploader_id).sortable({
            //connectWith: "#rcl-upload-gallery-" + this.uploader_id,
            containment: "parent",
            //handle: ".field-control .control-move",
            cursor: "move",
            placeholder: "ui-sortable-placeholder",
            distance: 5
        });
    }

    this.processstart = function (e, data) {
        console.log('processstart');
    };

    this.processdone = function (e, data) {
        console.log('processdone');
    };

    this.processfail = function (e, data) {
        console.log('processfail');
    };

    this.progressall = function (e, data) {
        var progress = parseInt(data.loaded / data.total * 100, 10);
        jQuery('#rcl-uploader-' + this.uploader_id + ' .rcl-uploader-progress').html('<div class="progress-bar" style="width:' + progress + '%;">' + progress + '%</div>');
    };

    this.add = function (e, data) {

        var uploader = this;
        var options = uploader.options;

        var errors = [];

        var inGalleryNow = jQuery('#rcl-upload-gallery-' + uploader.uploader_id + ' .gallery-attachment').length;

        jQuery.each(data.files, function (index, file) {

            inGalleryNow++;

            if (file.size > options.max_size * 1024) {
                errors.push(Rcl.errors.file_max_size + '. Max: ' + options.max_size + 'Kb');
            }

        });

        if (options.multiple && inGalleryNow > options.max_files) {
            errors.push(Rcl.errors.file_max_num + '. Max: ' + options.max_files);
        }

        errors = this.filterErrors(errors, data.files, uploader);

        if (errors.length) {
            errors.forEach(function (error, i) {
                rcl_notice(error, 'error', 10000);
            });
            return false;
        }

        if (parseInt(options.crop) != 0 && parseInt(options.multiple) == 0 && typeof jQuery.Jcrop != 'undefined') {
            if (jQuery.inArray(data.files[0].type, [
                'image/png',
                'image/jpg',
                'image/jpeg',
                'image/gif'
            ]) >= 0) {
                return this.crop(e, data);
            }
        }

        data.process().done(function () {
            data.submit();
        });

    };

    this.filterErrors = function (errors, files, uploader) {
        return errors;
    };

    this.submit = function (e, data) {

        this.animateLoading(true);

        if (this.options.crop) {
            return this.submitCrop(e, data);
        }

    };

    this.done = function (e, data) {

        rcl_preloader_hide();

        this.animateLoading(false);

        jQuery('#rcl-uploader-' + this.uploader_id + ' .rcl-uploader-progress').empty();

        if (data.result.error) {
            rcl_notice(data.result.error, 'error', 10000);
            return false;
        }

        if (data.result.success) {
            rcl_notice(data.result.success, 'success', 10000);
        }

        var uploader = this;

        if (this.options.multiple) {
            jQuery.each(data.result, function (index, file) {

                uploader.appendInGallery(file, uploader);

            });
        } else {

            jQuery('#rcl-upload-gallery-' + this.uploader_id).html('');

            uploader.appendInGallery(data.result, uploader);
        }

        this.afterDone(e, data);

        jQuery('#rcl-preview').remove();

    };

    this.appendInGallery = function (file) {

        if (file.html) {
            jQuery('#rcl-upload-gallery-' + this.uploader_id).append(file.html);
            jQuery('#rcl-gallery-' + this.uploader_id).append(file.html);
            jQuery('#rcl-upload-gallery-' + this.uploader_id + ' .gallery-attachment').last().animateCss('flipInX');
        }
    };

    this.afterDone = function (e, data) {

    };

    this.crop = function (e, data) {

        var uploader = this;
        var crop = uploader.options.crop;
        var minWidthCrop = uploader.options.min_width;
        var minHeightCrop = uploader.options.min_height;

        jQuery.each(data.files, function (index, file) {

            jQuery('#rcl-preview').remove();

            var maxSize = parseInt(uploader.options.max_size);

            if (file.size > maxSize * 1024) {
                rcl_notice(Rcl.errors.file_max_size + '. Max:' + ' ' + maxSize + 'Kb', 'error', 10000);
                return false;
            }

            var reader = new FileReader();
            reader.onload = function (event) {
                var jcrop_api;
                var imgUrl = event.target.result;

                var maxWidth = window.innerWidth * 0.9;
                var maxHeight = window.innerHeight * 0.8;

                jQuery('body > div').last().after('<div id=rcl-preview><img style="max-width:' + maxWidth + 'px;max-height:' + maxHeight + 'px;" src="' + imgUrl + '"></div>');

                var image = jQuery('#rcl-preview img');

                image.on('load', function () {

                    var img = jQuery(this);
                    var cf = 1;

                    if (img[0].naturalWidth > img.width()) {
                        cf = img.width() / img[0].naturalWidth;
                    }

                    minWidthCrop *= cf;
                    minHeightCrop *= cf;

                    var height = img.height();
                    var width = img.width();

                    if (height < minHeightCrop || width < minWidthCrop) {
                        rcl_notice(Rcl.errors.file_min_size + '. Min:' + ' ' + minWidthCrop + '*' + minHeightCrop + ' px', 'error', 10000);
                        return false;
                    }

                    var jcrop_api;

                    img.Jcrop({
                            aspectRatio: (typeof crop.ratio != 'undefined') ? crop.ratio : 1,
                            minSize: [minWidthCrop, minHeightCrop],
                            onSelect: function (c) {
                                img.attr('data-width', width).attr('data-height', height).attr('data-x', c.x).attr('data-y', c.y).attr('data-w', c.w).attr('data-h', c.h);
                            }
                        },
                        function () {
                            jcrop_api = this;
                        });

                    ssi_modal.show({
                        sizeClass: 'auto',
                        title: Rcl.local.title_image_upload,
                        className: 'rcl-hand-uploader',
                        buttons: [{
                            className: 'btn-success',
                            label: Rcl.local.upload,
                            closeAfter: true,
                            method: function () {
                                data.submit();
                            }
                        }, {
                            className: 'btn-cancel',
                            label: Rcl.local.cancel,
                            closeAfter: true,
                            method: function () {
                                jcrop_api.destroy();
                            }
                        }],
                        content: jQuery('#rcl-preview'),
                        extendOriginalContent: true
                    });

                });

            };

            reader.readAsDataURL(file);

        });

    };

    this.submitCrop = function (e, data) {

        data.formData = this.getFormData();

        var image = jQuery('#rcl-preview img');

        if (parseInt(image.data('w'))) {

            var width = image.data('width');
            var height = image.data('height');
            var x = image.data('x');
            var y = image.data('y');
            var w = image.data('w');
            var h = image.data('h');

            data.formData.crop_data = [x, y, w, h];
            data.formData.image_size = [width, height];

        }

    }

    this.animateLoading = function (status) {
        if (status)
            this.button.addClass('rcl-bttn__loading');
        else
            this.button.removeClass('rcl-bttn__loading');
    }

}

function rcl_init_uploader(props, securityKey) {
    RclUploaders.add(props, securityKey);
}

function rcl_init_dropzone(dropZone) {

    jQuery(document.body).bind("drop", function (e) {
        var node = e.target, found = false;

        if (dropZone[0]) {
            dropZone.removeClass('in-dropzone hover-dropzone');
            do {
                if (node === dropZone[0]) {
                    found = true;
                    break;
                }
                node = node.parentNode;
            } while (node != null);

            if (found) {
                e.preventDefault();
            } else {
                return false;
            }
        }
    });

    dropZone.bind('dragover', function (e) {
        var timeout = window.dropZoneTimeout;

        if (!timeout) {
            dropZone.addClass('in-dropzone');
        } else {
            clearTimeout(timeout);
        }

        var found = false, node = e.target;

        do {
            if (node === dropZone[0]) {
                found = true;
                break;
            }
            node = node.parentNode;
        } while (node != null);

        if (found) {
            dropZone.addClass('hover-dropzone');
        } else {
            dropZone.removeClass('hover-dropzone');
        }

        window.dropZoneTimeout = setTimeout(function () {
            window.dropZoneTimeout = null;
            dropZone.removeClass('in-dropzone hover-dropzone');
        }, 100);
    });
}

function rcl_delete_attachment(attachment_id, post_id, e) {

    if (e)
        rcl_preloader_show(jQuery(e).parents('.gallery-attachment'));

    var objectData = {
        action: 'rcl_ajax_delete_attachment',
        post_id: post_id,
        attach_id: attachment_id
    };

    rcl_ajax({
        rest: true,
        data: objectData,
        success: function (data) {

            jQuery('.gallery-attachment-' + attachment_id).animateCss('flipOutX', function (e) {
                jQuery(e).remove();
            });

        }
    });

    return false;
}

function rcl_add_attachment_in_editor(attach_id, editor_name, e) {

    var image = jQuery(e).data('html');
    var src = jQuery(e).data('src');

    if (src)
        image = '<a href="' + src + '">' + image + '</a>';

    jQuery("textarea[name=" + editor_name + "]").insertAtCaret(image + "&nbsp;");

    if (typeof tinyMCE != 'undefined') {
        tinyMCE.editors.forEach(function (editor) {

            if (editor.targetElm.name.length === editor_name.length) {
                editor.execCommand('mceInsertContent', false, image);
            }
        });
    }

    return false;
}

/** new uploader scripts end **/

function rcl_update_require_checkbox(e) {
    var name = jQuery(e).attr('name');
    var chekval = jQuery('form input[name="' + name + '"]:checked').val();
    if (chekval)
        jQuery('form input[name="' + name + '"]').attr('required', false);
    else
        jQuery('form input[name="' + name + '"]').attr('required', true);
}

function rcl_init_update_requared_checkbox() {

    jQuery('body form').find('.required-checkbox').each(function () {
        rcl_update_require_checkbox(this);
    });

    jQuery('body form').on('click', '.required-checkbox', function () {
        rcl_update_require_checkbox(this);
    });

};
// source --> https://pervyebljuda.ru/wp-content/plugins/wp-recall/assets/js/scripts.js?ver=16.26.10 
jQuery(function ($) {
    rcl_do_action('rcl_init');
});

jQuery(window).on('load', function () {
    jQuery('body').on('drop', function (e) {
        return false;
    });
    jQuery(document.body).on("drop", function (e) {
        e.preventDefault();
    });
});

rcl_add_action('rcl_init', 'rcl_init_ajax_tab');

function rcl_init_ajax_tab() {
    jQuery('body').on('click', '.rcl-ajax', function () {

        var e = jQuery(this);

        if (e.hasClass('tab-upload'))
            return false;

        rcl_do_action('rcl_before_upload_tab', e);

        rcl_ajax({
            data: {
                action: 'rcl_ajax_tab',
                post: e.data('post'),
                tab_url: e.attr('href') //encodeURIComponent(e.attr('href'))
            },
            success: function (data) {

                e.removeClass('tab-upload');

                data = rcl_apply_filters('rcl_upload_tab', data);

                if (data.result.error) {
                    rcl_notice(data.result.error, 'error', 10000);
                    return false;
                }

                var url = data.post.tab_url;
                var supports = data.post.supports;
                var subtab_id = data.post.subtab_id;

                if (supports && supports.indexOf('dialog') >= 0) { //если вкладка поддерживает диалог

                    if (!subtab_id) { //если загружается основная вкладка

                        ssi_modal.show({
                            className: 'rcl-dialog-tab ' + data.post.tab_id,
                            sizeClass: 'small',
                            buttons: [{
                                label: Rcl.local.close,
                                closeAfter: true
                            }],
                            content: data.result
                        });

                    } else {

                        var box_id = '#ssi-modalContent';

                    }

                } else {

                    rcl_update_history_url(url);

                    if (!subtab_id) {
                        jQuery('.rcl-tab-button .recall-button').removeClass('active').removeClass('rcl-bttn__active');
                    }

                    e.addClass('active').addClass('rcl-bttn__active');

                    var box_id = '#lk-content';

                }

                if (box_id) {

                    jQuery(box_id).html(data.result);

                    var options = rcl_get_options_url_params();

                    if (options.scroll == 1) {
                        var offsetTop = jQuery(box_id).offset().top;
                        jQuery('body,html').animate({
                                scrollTop: offsetTop - options.offset
                            },
                            1000);
                    }

                    if (data.includes) {

                        var includes = data.includes;

                        includes.forEach(function (src, i, includes) {

                            jQuery.getScript(src);

                        });

                    }

                }

                if (!data.post.subtab_id) {
                    if (typeof animateCss !== 'undefined') {
                        jQuery('#lk-content').animateCss('fadeIn');
                    }
                } else {
                    if (typeof animateCss !== 'undefined') {
                        jQuery('#lk-content .rcl-subtab-content').animateCss('fadeIn');
                    }
                }

                rcl_do_action('rcl_upload_tab', {
                    element: e,
                    result: data
                });

            }
        });

        return false;

    });
}

function rcl_get_options_url_params() {

    var options = {
        scroll: 1,
        offset: 100
    };

    options = rcl_apply_filters('rcl_options_url_params', options);

    return options;
}

function rcl_add_dropzone(idzone) {

    jQuery(document.body).on("drop", function (e) {
        var dropZone = jQuery(idzone),
            node = e.target,
            found = false;

        if (dropZone[0]) {
            dropZone.removeClass('in hover');
            do {
                if (node === dropZone[0]) {
                    found = true;
                    break;
                }
                node = node.parentNode;
            } while (node != null);

            if (found) {
                e.preventDefault();
            } else {
                return false;
            }
        }
    });

    jQuery(idzone).on('dragover', function (e) {
        var dropZone = jQuery(idzone),
            timeout = window.dropZoneTimeout;

        if (!timeout) {
            dropZone.addClass('in');
        } else {
            clearTimeout(timeout);
        }

        var found = false,
            node = e.target;

        do {
            if (node === dropZone[0]) {
                found = true;
                break;
            }
            node = node.parentNode;
        } while (node != null);

        if (found) {
            dropZone.addClass('hover');
        } else {
            dropZone.removeClass('hover');
        }

        window.dropZoneTimeout = setTimeout(function () {
            window.dropZoneTimeout = null;
            dropZone.removeClass('in hover');
        }, 100);
    });
}

function passwordStrength(password) {
    var desc = [];
    desc[0] = Rcl.local.pass0;
    desc[1] = Rcl.local.pass1;
    desc[2] = Rcl.local.pass2;
    desc[3] = Rcl.local.pass3;
    desc[4] = Rcl.local.pass4;
    desc[5] = Rcl.local.pass5;
    var score = 0;
    if (password.length > 6)
        score++;
    if ((password.match(/[a-z]/)) && (password.match(/[A-Z]/)))
        score++;
    if (password.match(/\d+/))
        score++;
    if (password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/))
        score++;
    if (password.length > 12)
        score++;
    document.getElementById("passwordDescription").innerHTML = desc[score];
    document.getElementById("passwordStrength").className = "strength" + score;
}

function rcl_manage_user_black_list(e, user_id, confirmText) {

    var class_i = jQuery(e).children('i').attr('class');

    if (class_i == 'rcli fa-refresh fa-spin')
        return false;

    if (!confirm(confirmText))
        return false;

    jQuery(e).children('i').attr('class', 'rcli fa-refresh fa-spin');

    rcl_ajax({
        data: {
            action: 'rcl_manage_user_black_list',
            user_id: user_id
        },
        success: function (data) {

            jQuery(e).children('i').attr('class', class_i);

            if (data['label']) {
                jQuery(e).find('span').text(data['label']);
            }

        }
    });

    return false;
}

function rcl_show_tab(id_block) {
    jQuery(".rcl-tab-button .recall-button").removeClass("active");
    jQuery("#lk-content .recall_content_block").removeClass("active");
    jQuery('#tab-button-' + id_block).children('.recall-button').addClass("active");
    jQuery('#lk-content .' + id_block + '_block').addClass("active");
    return false;
}

rcl_add_action('rcl_init', 'rcl_init_recallbar_hover');

function rcl_init_recallbar_hover() {
    jQuery("#recallbar .menu-item-has-children").on('hover', function () {
        jQuery(this).children(".sub-menu").css({
            'visibility': 'visible'
        });
    }, function () {
        jQuery(this).children(".sub-menu").css({
            'visibility': ''
        });
    });
}

rcl_add_action('rcl_before_upload_tab', 'rcl_add_class_upload_tab');

function rcl_add_class_upload_tab(e) {
    e.addClass('tab-upload');
}

rcl_add_action('rcl_before_upload_tab', 'rcl_add_preloader_tab');

function rcl_add_preloader_tab(e) {
    rcl_preloader_show('#lk-content > div');
    rcl_preloader_show('#ssi-modalContent > div');
}

rcl_add_action('rcl_init', 'rcl_init_get_smilies');

function rcl_init_get_smilies() {
    jQuery(document).on({
            mouseenter: function () {
                var sm_box = jQuery(this).next();
                var block = sm_box.children();
                sm_box.show();
                if (block.html())
                    return false;
                block.html(Rcl.local.loading + '...');
                var dir = jQuery(this).data('dir');

                rcl_ajax({
                    data: {
                        action: 'rcl_get_smiles_ajax',
                        area: jQuery(this).parent().data('area'),
                        dir: dir ? dir : 0
                    },
                    success: function (data) {
                        if (data['content']) {
                            block.html(data['content']);
                        }
                    }
                });

            },
            mouseleave: function () {
                jQuery(this).next().hide();
            }
        },
        "body .rcl-smiles .fa-smile-o");
}

rcl_add_action('rcl_init', 'rcl_init_hover_smilies');

function rcl_init_hover_smilies() {

    jQuery(document).on({
            mouseenter: function () {
                jQuery(this).show();
            },
            mouseleave: function () {
                jQuery(this).hide();
            }
        },
        "body .rcl-smiles > .rcl-smiles-list");

    jQuery('body').on('hover click', '.rcl-smiles > img', function () {
        var block = jQuery(this).next().children();
        if (block.html())
            return false;
        block.html(Rcl.local.loading + '...');
        var dir = jQuery(this).data('dir');

        rcl_ajax({
            data: {
                action: 'rcl_get_smiles_ajax',
                area: jQuery(this).parent().data('area'),
                dir: dir ? dir : 0
            },
            success: function (data) {
                if (data['content']) {
                    block.html(data['content']);
                }
            }
        });

        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_click_smilies');

function rcl_init_click_smilies() {
    jQuery("body").on("click", '.rcl-smiles-list img', function () {
        var alt = jQuery(this).attr("alt");
        var area = jQuery(this).parents(".rcl-smiles").data("area");
        jQuery("#" + area).val(jQuery("#" + area).val() + " " + alt + " ");
    });
}

rcl_add_action('rcl_init', 'rcl_init_close_popup');

function rcl_init_close_popup() {
    jQuery('#rcl-popup,.floatform').on('click', '.close-popup', function () {
        rcl_hide_float_login_form();
        jQuery('#rcl-overlay').fadeOut();
        jQuery('#rcl-popup').empty();
        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_click_overlay');

function rcl_init_click_overlay() {
    jQuery('#rcl-overlay').on('click', function () {
        rcl_hide_float_login_form();
        jQuery('#rcl-overlay').fadeOut();
        jQuery('#rcl-popup').empty();
        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_click_float_window');

function rcl_init_click_float_window() {
    jQuery(".float-window-recall").on('click', '.close', function () {
        jQuery(".float-window-recall").remove();
        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_loginform_shift_tabs');

function rcl_init_loginform_shift_tabs() {
    jQuery('body').on('click', '.form-tab-rcl .link-tab-rcl', function () {
        jQuery('.form-tab-rcl').hide();

        if (jQuery(this).hasClass('link-login-rcl'))
            rcl_show_login_form_tab('login');

        if (jQuery(this).hasClass('link-register-rcl'))
            rcl_show_login_form_tab('register');

        if (jQuery(this).hasClass('link-remember-rcl'))
            rcl_show_login_form_tab('remember');

        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_check_url_params');

function rcl_init_check_url_params() {

    var options = rcl_get_options_url_params();

    if (rcl_url_params['tab']) {

        if (!jQuery("#lk-content").length)
            return false;

        if (options.scroll == 1) {
            var offsetTop = jQuery("#lk-content").offset().top;
            jQuery('body,html').animate({
                    scrollTop: offsetTop - options.offset
                },
                1000);
        }

        var id_block = rcl_url_params['tab'];
        rcl_show_tab(id_block);
    }

}

rcl_add_action('rcl_init', 'rcl_init_close_notice');

function rcl_init_close_notice() {
    jQuery('#rcl-notice,body').on('click', 'a.close-notice', function () {
        rcl_close_notice(jQuery(this).parent());
        return false;
    });
}

rcl_add_action('rcl_init', 'rcl_init_cookie');

rcl_add_action('rcl_login_form', 'rcl_init_login_form');

function rcl_init_login_form(type_form) {

    if (rcl_url_params['action-rcl']) {
        jQuery('.panel_lk_recall.floatform > div').hide();
    }

    if (type_form == 'floatform') {

        jQuery("body").on('click', '.rcl-register', function () {
            rcl_show_float_login_form();
            rcl_show_login_form_tab('register', type_form);
            return false;
        });

        jQuery("body").on('click', '.rcl-login', function () {
            rcl_show_float_login_form();
            rcl_show_login_form_tab('login', type_form);
            return false;
        });

        if (rcl_url_params['action-rcl']) {
            rcl_show_float_login_form();
        }

    } else {

        if (rcl_url_params['action-rcl'] === 'login') {
            jQuery('.rcl-loginform-full.' + type_form + ' #register-form-rcl').hide();
        }

        if (rcl_url_params['action-rcl'] === 'register') {
            jQuery('.rcl-loginform-full.' + type_form + ' #login-form-rcl').hide();
        }

        if (rcl_url_params['action-rcl'] === 'remember') {
            jQuery('.rcl-loginform.' + type_form + ' #login-form-rcl').hide();
        }

    }

    if (rcl_url_params['action-rcl']) {
        rcl_show_login_form_tab(rcl_url_params['action-rcl'], type_form);
    }

}

function rcl_show_login_form_tab(tab, type_form) {
    type_form = (!type_form) ? '' : '.' + type_form;
    jQuery('.panel_lk_recall' + type_form + ' #' + tab + '-form-rcl').show();
}

function rcl_show_float_login_form() {
    jQuery('.panel_lk_recall.floatform > div').hide();
    rcl_setup_position_float_form();
    jQuery('.panel_lk_recall.floatform').show();
}

function rcl_hide_float_login_form() {
    jQuery('.panel_lk_recall.floatform').fadeOut().children('.form-tab-rcl').hide();
}

function rcl_setup_position_float_form() {
    jQuery("#rcl-overlay").fadeIn();
    var screen_top = jQuery(window).scrollTop();
    var popup_h = jQuery('.panel_lk_recall.floatform').height();
    var window_h = jQuery(window).height();
    screen_top = screen_top + 60;
    jQuery('.panel_lk_recall.floatform').css('top', screen_top + 'px');
}

rcl_add_action('rcl_footer', 'rcl_beat');

function rcl_beat() {

    var beats = rcl_apply_filters('rcl_beats', rcl_beats);

    var DataBeat = rcl_get_actual_beats_data(beats);

    if (rcl_beats_delay && DataBeat.length) {

        rcl_do_action('rcl_beat');

        rcl_ajax({
            data: {
                action: 'rcl_beat',
                databeat: JSON.stringify(DataBeat)
            },
            success: function (data) {

                data.forEach(function (result, i, data) {

                    rcl_do_action('rcl_beat_success_' + result['beat_name']);

                    new (window[result['success']])(result['result']);

                });

            }
        });

    }

    rcl_beats_delay++;

    setTimeout('rcl_beat()', 1000);
}

function rcl_get_actual_beats_data(beats) {

    var beats_actual = new Array();

    if (beats) {

        beats.forEach(function (beat, i, beats) {
            var rest = rcl_beats_delay % beat.delay;
            if (rest == 0) {

                var object = new (window[beat.beat_name])(beat.data);

                if (object.data) {

                    object = rcl_apply_filters('rcl_beat_' + beat.beat_name, object);

                    object.beat_name = beat.beat_name;

                    var k = beats_actual.length;
                    beats_actual[k] = object;
                }
            }
        });

    }

    return beats_actual;

};
// source --> https://pervyebljuda.ru/wp-content/plugins/wp-recall/add-on/rating-system/js/scripts.js?ver=16.26.10 
function rcl_close_votes_window(e) {
    jQuery(e).parent().remove();
    return false;
}

function rcl_edit_rating(e) {

    var block = jQuery(e);
    var parent = block.parents('.rcl-rating-box');

    rcl_preloader_show(jQuery(e).parents('.rating-wrapper').children('.rating-value'), 30);

    rcl_ajax({
        data: {
            action: 'rcl_edit_rating_post',
            rating: block.data('rating')
        },
        success: function (result) {

            if (result['result'] == 100) {

                parent.find('.rating-value').html(result['rating']);

                if (!block.hasClass('user-vote')) {

                    parent.find('.rating-vote').removeClass('user-vote');

                }

                block.toggleClass('user-vote');

            }

            block.animateCss('zoomIn');

            if (result.replace_box) {

                parent.replaceWith(result.replace_box);

            }

            rcl_do_action('rcl_edit_rating', {
                data: block.data('rating'),
                result: result
            });
        }
    });

    return false;
}

function rcl_get_list_votes(e) {

    if (jQuery(this).hasClass('active'))
        return false;

    rcl_preloader_show('#tab-rating .votes-list');

    jQuery('#tab-rating a.get-list-votes').removeClass('active');
    jQuery(e).addClass('active');

    rcl_ajax({
        data: {
            action: 'rcl_view_rating_votes',
            rating: jQuery(e).data('rating'),
            content: 'list-votes'
        },
        success: function (data) {

            if (data['content'])
                jQuery('#tab-rating .rating-list-votes').html(data['content']);

        }
    });

    return false;
}

function rcl_view_list_votes(e) {

    jQuery('.rating-value-block .votes-window').remove();

    var block = jQuery(e);

    rcl_preloader_show(jQuery(e), 30);

    rcl_ajax({
        data: {
            action: 'rcl_view_rating_votes',
            rating: block.data('rating')
        },
        success: function (data) {
            block.after(data['content']);
            block.next().slideDown();
        }
    });

    return false;
};
// source --> https://pervyebljuda.ru/wp-content/plugins/wp-recall/add-on/publicpost/js/scripts.js?ver=16.26.10 
var rcl_public_form = {
    required: new Array()
};

jQuery(document).ready(function ($) {

    if (RclUploaders.isset('post_thumbnail')) {

        RclUploaders.get('post_thumbnail').appendInGallery = function (file) {

            jQuery('#rcl-upload-gallery-' + this.uploader_id).html('').append(file.thumbnail.html).animateCss('flipInX');
            jQuery('#rcl-upload-gallery-post_uploader').append(file.postmedia);
            jQuery('#rcl-upload-gallery-post_uploader div').last().animateCss('flipInX');

        };

        if (RclUploaders.isset('post_uploader')) {

            RclUploaders.get('post_thumbnail').filterErrors = function (errors, files, uploader) {

                var postUploader = RclUploaders.get('post_uploader');

                var inGalleryNow = jQuery('#rcl-upload-gallery-post_uploader .gallery-attachment').length + 1;

                if (inGalleryNow > postUploader.options.max_files) {
                    errors.push(Rcl.errors.file_max_num + '. Max: ' + postUploader.options.max_files);
                }

                return errors;
            };

        }

    }

    $('body').on('click', '.rcl-public-form #insert-media-button', function () {

        var editor = $(this).data('editor');

        var parent_id = ((rcl_url_params['rcl-post-edit'])) ? rcl_url_params['rcl-post-edit'] : 0;

        wp.media.model.settings.post.id = parent_id;

        wp.media.featuredImage.set = function (thumbnail_id) {

            rcl_get_post_thumbnail_html(thumbnail_id);

        };

        wp.media.editor.open(editor);

        return false;

    });

    jQuery('body').on('click', '#rcl-delete-post .delete-toggle', function () {
        jQuery(this).next().toggle('fast');
        return false;
    });

    jQuery('body').on('click', 'form[name="public_post"] input[name="rcl-edit-post"],form[name="public_post"] input[name="add_new_task"]', function () {
        var error = 0;
        jQuery('form[name="public_post"]').find(':input').each(function () {
            for (var i = 0; i < field.length; i++) {
                if (jQuery(this).attr('name') == field[i]) {
                    if (jQuery(this).val() == '') {
                        jQuery(this).attr('style', 'border:1px solid red !important');
                        error = 1;
                    } else {
                        jQuery(this).attr('style', 'border:1px solid #E6E6E6 !important');
                    }
                }
            }
        });
        if (error == 0)
            return true;
        else
            return false;
    });

});

rcl_add_action('rcl_init_public_form', 'rcl_setup_async_upload');

function rcl_setup_async_upload() {

    if (typeof wp == 'undefined' || !wp.Uploader)
        return false;

    jQuery.extend(wp.Uploader.prototype, {
        success: function (attachment) {
            if (attachment.attributes.uploadedTo)
                return false;
            rcl_ajax({
                data: {
                    action: 'rcl_save_temp_async_uploaded_thumbnail',
                    attachment_id: attachment.id,
                    attachment_url: attachment.attributes.url
                }
            });
        }
    });

}

rcl_add_action('rcl_init', 'rcl_init_click_post_thumbnail');

function rcl_init_click_post_thumbnail() {
    jQuery(".rcl-public-form").on('click', '.thumb-foto', function () {
        jQuery(".rcl-public-form .thumb-foto").removeAttr("checked");
        jQuery(this).attr("checked", 'checked');
    });
}

function rcl_get_post_thumbnail_html(thumbnail_id) {

    rcl_preloader_show(jQuery('.rcl-public-form'));

    rcl_ajax({
        data: {
            action: 'rcl_get_post_thumbnail_html',
            thumbnail_id: thumbnail_id
        },
        success: function (result) {
            jQuery('#rcl-thumbnail-post .thumbnail-image').html(result['thumbnail_image']).animateCss('flipInX');
            jQuery('#rcl-thumbnail-post .thumbnail-id').val(thumbnail_id);
        }
    });

}

function rcl_remove_post_thumbnail() {
    jQuery('#rcl-thumbnail-post .thumbnail-image').animateCss('flipOutX', function (e) {
        jQuery(e).empty();
    });
    jQuery('#rcl-thumbnail-post .thumbnail-id').val('0');
}

function rcl_delete_post(element) {

    rcl_preloader_show(jQuery(element).parents('li'));

    var objectData = {
        action: 'rcl_ajax_delete_post',
        post_id: jQuery(element).data('post')
    };

    rcl_ajax({
        data: objectData,
        success: function (data) {

            jQuery('#' + data['post_type'] + '-' + objectData.post_id).animateCss('flipOutX', function (e) {
                jQuery(e).remove();
            });

            data.post_id = objectData.post_id;

            rcl_do_action('rcl_delete_post', data);

        }
    });

    return false;
}

rcl_add_action('rcl_delete_post', 'rcl_delete_thumbnail_attachment');

function rcl_delete_thumbnail_attachment(data) {

    if (data['post_type'] != 'attachment')
        return false;

    if (jQuery('#rcl-thumbnail-post').length) {

        var currentThumbId = jQuery('#rcl-thumbnail-post .thumbnail-id').val();

        if (currentThumbId == data['post_id'])
            rcl_remove_post_thumbnail();
    }

}

function rcl_edit_post(element) {

    rcl_preloader_show(jQuery('#lk-content'));

    rcl_ajax({
        data: {
            action: 'rcl_get_edit_postdata',
            post_id: jQuery(element).data('post')
        },
        success: function (data) {

            if (data['result'] == 100) {

                ssi_modal.show({
                    title: Rcl.local.edit_box_title,
                    className: 'rcl-edit-post-form',
                    sizeClass: 'small',
                    buttons: [{
                        label: Rcl.local.save,
                        closeAfter: false,
                        method: function () {

                            rcl_preloader_show('#rcl-popup-content form');

                            rcl_ajax({
                                data: 'action=rcl_edit_postdata&' + jQuery('#rcl-popup-content form').serialize()
                            });

                        }
                    }, {
                        label: Rcl.local.close,
                        closeAfter: true
                    }],
                    content: '<div id="rcl-popup-content">' + data['content'] + '</div>'
                });
            }
        }
    });

}

function rcl_preview(e) {

    var submit = jQuery(e);
    var formblock = submit.parents('form');
    var post_type = formblock.data('post_type');

    if (!rcl_check_required_fields(formblock))
        return false;

    rcl_preloader_show(formblock);

    var iframe = jQuery("#post_content_ifr").contents().find("#tinymce").html();
    if (iframe) {
        tinyMCE.triggerSave();
        formblock.find('textarea[name="post_content"]').html(iframe);
    }

    var button_draft = formblock.find('input[name="button-draft"]').val();
    var button_delete = formblock.find('input[name="button-delete"]').val();
    var button_preview = formblock.find('input[name="button-preview"]').val();

    rcl_ajax({
        data: 'action=rcl_preview_post&publish=0&' + formblock.serialize(),
        error: function (data) {
            submit.attr('disabled', false).val(Rcl.local.preview);
        },
        success: function (data) {

            if (data['content']) {

                var buttons = [];

                buttons[0] = {
                    className: 'btn btn-primary',
                    label: Rcl.local.edit,
                    closeAfter: true,
                    method: function () {
                        submit.attr('disabled', false).val(Rcl.local.preview);
                    }
                };

                if (button_draft) {
                    buttons[1] = {
                        className: 'btn btn-danger',
                        label: Rcl.local.save_draft,
                        closeAfter: false,
                        method: function () {
                            rcl_save_draft();
                        }
                    };
                }

                var i = buttons.length;
                buttons[i] = {
                    className: 'btn btn-danger',
                    label: Rcl.local.publish,
                    closeAfter: false,
                    method: function () {
                        rcl_publish();
                    }
                };

                ssi_modal.show({
                    sizeClass: 'small',
                    title: Rcl.local.preview,
                    className: 'rcl-preview-post',
                    buttons: buttons,
                    content: '<div id="rcl-preview">' + data['content'] + '</div>'
                });

                return true;
            }

        }
    });

    return false;

}

function rcl_save_draft(e) {

    if (!e)
        e = jQuery('#rcl-draft-post');

    if (!rcl_check_publish(e))
        return false;

    jQuery(e).after('<input type="hidden" name="save-as-draft" value=1>');

    jQuery('form.rcl-public-form').submit();
}

function rcl_check_publish(e) {

    var submit = jQuery(e);
    var formblock = submit.parents('form');

    if (!rcl_check_required_fields(formblock))
        return false;

    return true;
}

function rcl_publish(e) {

    var formblock = (e) ? jQuery(e).parents('form') : jQuery('form.rcl-public-form');

    var post_type = formblock.data('post_type');

    if (!rcl_check_required_fields(formblock))
        return false;

    rcl_preloader_show(formblock);

    var iframe = jQuery("#post_content_ifr").contents().find("#tinymce").html();
    if (iframe) {
        tinyMCE.triggerSave();
        formblock.find('textarea[name="post_content"]').html(iframe);
    }

    rcl_ajax({
        data: 'action=rcl_preview_post&publish=1&' + formblock.serialize(),
        success: function (data) {

            if (data.submit) {
                rcl_preloader_show(formblock);
                jQuery('form.rcl-public-form').submit();
            }

            rcl_do_action('rcl_publish', data, e);

        }
    });

}

function rcl_check_required_fields(form) {

    var rclFormFactory = new RclForm(form);

    rclFormFactory.addChekForm('checkCats', {
        isValid: function () {
            var valid = true;
            if (this.form.find('input[name="cats[]"]').length > 0) {
                if (form.find('input[name="cats[]"]:checked').length == 0) {
                    this.shake(form.find('input[name="cats[]"]'));
                    this.addError('checkCats', Rcl.errors.cats_important);
                    valid = false;
                } else {
                    this.noShake(form.find('input[name="cats[]"]'));
                }
            }
            return valid;
        }

    });

    return rclFormFactory.validate();

}

function rcl_get_prefiew_content(formblock, iframe) {
    formblock.find('textarea[name="post_content"]').html(iframe);
    return formblock.serialize();
}

function rcl_preview_close(e) {
    ssi_modal.close();
}

function rcl_init_public_form(post) {

    rcl_do_action('rcl_init_public_form', post);

    var post_id = post.post_id;
    var post_type = post.post_type;
    var ext_types = post.ext_types;
    var size_files = parseInt(post.size_files, 10);
    var max_files = parseInt(post.max_files, 10);
    var post_status = 'new';

    if (post.post_status)
        post_status = post.post_status;

    jQuery('form.rcl-public-form').find(':required').each(function () {
        var i = rcl_public_form.required.length;
        rcl_public_form.required[i] = jQuery(this).attr('name');
    });

    var maxsize = size_files * 1024 * 1024;

    rcl_add_dropzone('#rcl-public-dropzone-' + post_type);

    jQuery('#upload-public-form-' + post_type).fileupload({
        dataType: 'json',
        type: 'POST',
        dropZone: jQuery('#rcl-public-dropzone-' + post_type),
        url: Rcl.ajaxurl,
        formData: {
            action: 'rcl_imagepost_upload',
            post_type: post_type,
            post_id: post_id,
            form_id: post.form_id,
            ext_types: ext_types,
            size_files: size_files,
            max_files: max_files,
            ajax_nonce: Rcl.nonce
        },
        singleFileUploads: false,
        autoUpload: true,
        send: function (e, data) {
            var error = false;
            rcl_preloader_show('form.rcl-public-form');
            var cnt_now = jQuery('#temp-files-' + post_type + ' li').length;
            jQuery.each(data.files, function (index, file) {
                cnt_now++;
                if (cnt_now > max_files) {
                    rcl_notice(Rcl.local.allowed_downloads + ' ' + max_files, 'error', 10000);
                    error = true;
                }
                if (file['size'] > maxsize) {
                    rcl_notice(Rcl.local.upload_size_public + ' ' + size_files + ' MB', 'error', 10000);
                    error = true;
                }
            });
            if (error) {
                rcl_preloader_hide();
                return false;
            }
        },
        done: function (e, data) {

            rcl_preloader_hide();

            jQuery.each(data.result, function (index, file) {
                if (data.result['error']) {
                    rcl_notice(data.result['error'], 'error', 10000);
                    rcl_preloader_hide();
                    return false;
                }

                if (file['string']) {
                    jQuery('#temp-files-' + post_type).append(file['string']);
                    jQuery('#temp-files-' + post_type + ' li').last().animateCss('flipInX');
                }
            });

        }
    });
}

function rcl_init_thumbnail_uploader(e, options) {

    var form = jQuery(e).parents('form');

    var post_id = form.data('post_id');
    var post_type = form.data('post_type');
    var ext_types = 'jpg,png,jpeg';
    var maxsize_mb = options.size;

    var maxsize = maxsize_mb * 1024 * 1024;

    jQuery('#rcl-thumbnail-uploader').fileupload({
        dataType: 'json',
        type: 'POST',
        url: Rcl.ajaxurl,
        formData: {
            action: 'rcl_imagepost_upload',
            post_type: post_type,
            post_id: post_id,
            ext_types: ext_types,
            ajax_nonce: Rcl.nonce
        },
        singleFileUploads: true,
        autoUpload: true,
        send: function (e, data) {

            var error = false;

            rcl_preloader_show('form.rcl-public-form');

            jQuery.each(data.files, function (index, file) {

                if (file['size'] > maxsize) {
                    rcl_notice(Rcl.local.upload_size_public + ' ' + maxsize_mb + ' MB', 'error', 10000);
                    error = true;
                }

            });

            if (error) {
                rcl_preloader_hide();
                return false;
            }

        },
        done: function (e, data) {
            jQuery.each(data.result, function (index, file) {

                rcl_preloader_hide();

                if (data.result['error']) {
                    rcl_notice(data.result['error'], 'error', 10000);
                    return false;
                }

                if (file['string']) {
                    jQuery('#temp-files-' + post_type).append(file['string']);
                    jQuery('#temp-files-' + post_type + ' li').last().animateCss('flipInX');
                    jQuery('#rcl-thumbnail-post .thumbnail-image').html(file['thumbnail_image']).animateCss('flipInX');
                    jQuery('#rcl-thumbnail-post .thumbnail-id').val(file['attachment_id']);
                }
            });


        }
    });

}

function rcl_set_post_thumbnail(attach_id, parent_id, e) {

    rcl_preloader_show(jQuery('.gallery-attachment-' + attach_id));

    rcl_ajax({
        data: {
            action: 'rcl_set_post_thumbnail',
            thumbnail_id: attach_id,
            parent_id: parent_id,
            form_id: jQuery('form.rcl-public-form input[name="form_id"]').val(),
            post_type: jQuery('form.rcl-public-form input[name="post_type"]').val()
        },
        success: function (result) {
            jQuery('#rcl-upload-gallery-post_thumbnail').html(result.html).animateCss('flipInX');
        }
    });

}

function rcl_switch_attachment_in_gallery(attachment_id, e) {

    var button = jQuery('.rcl-switch-gallery-button-' + attachment_id);

    if (button.children('i').hasClass('fa-toggle-off')) {
        button.children('input').val(attachment_id);
    } else {
        button.children('input').val('');
    }

    button.children('i').toggleClass('fa-toggle-off fa-toggle-on');

};
// source --> https://pervyebljuda.ru/wp-content/plugins/wp-recall/add-on/rcl-chat/js/scripts.js?ver=16.26.10 
var rcl_chat_last_activity = {}; //последняя запрос новых сообщений
var rcl_chat_beat = new Array; //массив открытых чатов
var rcl_chat_write = 0; //юзер пишет
var rcl_chat_contact_token = 0; //открытый контакт
var rcl_chat_inactive_counter = -1; //счетчик простоя пользователя
var rcl_chat_important = 0;
var rcl_chat_max_words = 300;
var rcl_chat_sound = {};

jQuery(function ($) {

    rcl_chat_init_sound();

    rcl_chat_inactivity_counter();

    jQuery('.chat-new-messages').parents('#rcl-chat-noread-box').animateCss('tada');

    if (RclUploaders.isset('rcl_chat_uploader')) {

        RclUploaders.get('rcl_chat_uploader').animateLoading = function (status) {
            status ? rcl_preloader_show(jQuery('.rcl-chat .chat-form')) : rcl_preloader_hide();
        };

    }

});

function rcl_chat_init_sound() {

    var options = {
        sounds: ['e-oh'],
        path: Rcl.chat.sounds,
        multiPlay: false,
        volume: '0.5'
    };

    rcl_chat_sound = rcl_apply_filters('rcl_chat_sound_options', options);
    if (typeof jQuery.ionSound !== 'undefined') {
        jQuery.ionSound(rcl_chat_sound);
    }
}

function rcl_chat_inactivity_cancel() {
    rcl_chat_inactive_counter = -1;
}

function rcl_chat_inactivity_counter() {
    rcl_chat_inactive_counter++;
    setTimeout('rcl_chat_inactivity_counter()', 60000);
}

function rcl_chat_scroll_bottom(token) {
    jQuery('.rcl-chat[data-token="' + token + '"] .chat-messages').scrollTop(jQuery('.rcl-chat[data-token="' + token + '"] .chat-messages').get(0).scrollHeight);
}

function rcl_reset_active_mini_chat() {
    jQuery('.rcl-noread-users .rcl-chat-user > a ').removeClass('active-chat');
}

function rcl_chat_counter_reset(form) {
    form.children('.words-counter').text(Rcl.chat.words).removeAttr('style');
}

function rcl_chat_add_message(e) {
    var form = jQuery(e).parents('form');
    rcl_chat_add_new_message(form);
}

function rcl_chat_clear_beat(token) {

    var all_beats = rcl_beats;
    var all_chats = rcl_chat_beat;

    all_beats.forEach(function (beat, index, rcl_beats) {
        if (beat.beat_name != 'rcl_chat_beat_core')
            return;
        if (beat.data.token != token)
            return;
        delete rcl_beats[index];
    });

    all_chats.forEach(function (chat_token, index, chats) {
        if (chat_token != token)
            return;
        delete rcl_chat_beat[index];
    });

    console.log('chat beat ' + token + ' clear');

}

function rcl_set_active_mini_chat(e) {
    rcl_reset_active_mini_chat();
    jQuery(e).addClass('active-chat').children('i').remove();
}

function rcl_init_chat(chat) {
    jQuery(function ($) {

        chat = rcl_apply_filters('rcl_init_chat', chat);

        rcl_chat_scroll_bottom(chat.token);

        var user_id = parseInt(Rcl.user_ID);

        rcl_chat_max_words = chat.max_words;
        rcl_chat_last_activity[chat.token] = chat.open_chat;

        var i = rcl_chat_beat.length;
        rcl_chat_beat[i] = chat.token;

        rcl_do_action('rcl_init_chat', chat);

    });
}

function rcl_chat_close(e) {

    rcl_reset_active_mini_chat();
    var token = jQuery(e).parents('.rcl-mini-chat').find('.rcl-chat').data('token');
    rcl_chat_clear_beat(token);
    var minichat_box = jQuery('#rcl-chat-noread-box');
    minichat_box.removeClass('active-chat');
    var animationName = minichat_box.hasClass('left-panel') ? 'fadeOutLeft' : 'fadeOutRight';
    minichat_box.children('.rcl-mini-chat').animateCss(animationName, function (e) {
        jQuery(e).empty();
    });
    rcl_do_action('rcl_chat_close', token);

}

function rcl_chat_write_status(token) {
    var chat = jQuery('.rcl-chat[data-token="' + token + '"]');
    var chat_status = chat.find('.chat-status');
    chat_status.css({
        width: 12
    });
    chat_status.animate({
            width: 35
        },
        1000);
    rcl_chat_write = setTimeout('rcl_chat_write_status("' + token + '")', 3000);

    rcl_do_action('rcl_add_chat_write', token);

}

function rcl_chat_write_status_cancel(token) {
    clearTimeout(rcl_chat_write);
    var chat = jQuery('.rcl-chat[data-token="' + token + '"]');
    var chat_status = chat.find('.chat-status');
    chat_status.css({
        width: 0
    });

    rcl_do_action('rcl_remove_chat_write', token);
}

function rcl_chat_add_new_message(form) {

    rcl_chat_inactivity_cancel();

    var token = form.children('[name="chat[token]"]').val();
    var chat = jQuery('.rcl-chat[data-token="' + token + '"]');
    var message_text = form.children('textarea').val();

    if (!message_text.length) {
        rcl_notice(Rcl.local.empty_mess, 'error', 10000);
        return false;
    }

    if (message_text.length > Rcl.chat.words) {
        rcl_notice(Rcl.local.max_words, 'error', 10000);
        return false;
    }

    rcl_preloader_show('.rcl-chat .chat-form > form');

    rcl_ajax({
        data: 'action=rcl_chat_add_message&'
            + form.serialize()
            + '&office_ID=' + Rcl.office_ID
            + '&last_activity=' + rcl_chat_last_activity[token],
        success: function (data) {

            if (data['content']) {
                form.find('textarea').val('');
                jQuery("#rcl-upload-gallery-rcl_chat_uploader").html('');

                chat.find('.chat-messages').append(data['content']).find('.chat-message').last().animateCss('zoomIn');
                chat.find('.rcl-chat-uploader').show();
                chat.find('.chat-preloader-file').empty();

                rcl_chat_scroll_bottom(token);
                rcl_chat_counter_reset(form);

                if (data.new_messages) {
                    if (typeof jQuery.ionSound !== 'undefined') {
                        jQuery.ionSound.play(rcl_chat_sound.sounds[0]);
                    }
                }

                rcl_chat_last_activity[token] = data.last_activity;

                rcl_do_action('rcl_chat_add_message', {
                    token: token,
                    result: data
                });
            }
        }
    });

    return false;
}

function rcl_chat_navi(e) {

    rcl_chat_inactivity_cancel();

    var token = jQuery(e).parents('.rcl-chat').data('token');

    rcl_preloader_show('.rcl-chat .chat-form > form');

    rcl_ajax({
        data: {
            action: 'rcl_get_chat_page',
            token: token,
            page: jQuery(e).data('page'),
            'pager-id': jQuery(e).data('pager-id'),
            in_page: jQuery(e).parents('.rcl-chat').data('in_page'),
            important: rcl_chat_important
        },
        success: function (data) {

            if (data['content']) {

                jQuery(e).parents('.chat-messages-box').html(data['content']).animateCss('fadeIn');

                rcl_chat_scroll_bottom(token);

            }
        }
    });

    return false;
}

function rcl_get_mini_chat(e, user_id) {

    if (rcl_chat_contact_token) {
        rcl_chat_clear_beat(rcl_chat_contact_token);
    }

    rcl_preloader_show('#rcl-chat-noread-box > div');

    rcl_ajax({
        data: {
            action: 'rcl_get_chat_private_ajax',
            user_id: user_id
        },
        success: function (data) {

            if (data['content']) {
                var minichat_box = jQuery('#rcl-chat-noread-box');
                var animationName = minichat_box.hasClass('left-panel') ? 'fadeInLeft' : 'fadeInRight';
                minichat_box.children('.rcl-mini-chat').html(data['content']).animateCss(animationName);
                minichat_box.addClass('active-chat');
                rcl_chat_contact_token = data['chat_token'];
                rcl_set_active_mini_chat(e);
                rcl_chat_scroll_bottom(rcl_chat_contact_token);
            }
        }
    });

    return false;
}

function rcl_chat_words_count(e, elem) {

    evt = e || window.event;

    var key = evt.keyCode;

    if (key == 13 && evt.ctrlKey) {
        var form = jQuery(elem).parents('form');
        rcl_chat_add_new_message(form);
        return false;
    }

    var words = jQuery(elem).val();
    var counter = rcl_chat_max_words - words.length;
    var color;

    if (counter > (rcl_chat_max_words - 1))
        return false;

    if (counter < 0) {
        jQuery(elem).val(words.substr(0, (rcl_chat_max_words - 1)));
        return false;
    }

    if (counter > 150)
        color = 'green';
    else if (50 < counter && counter < 150)
        color = 'orange';
    else if (counter < 50)
        color = 'red';

    jQuery(elem).parent('form').children('.words-counter').css('color', color).text(counter);
}

function rcl_chat_remove_contact(e, chat_id) {

    rcl_preloader_show('.rcl-chat-contacts');

    var contact = jQuery(e).parents('.contact-box').data('contact');

    rcl_ajax({
        data: {
            action: 'rcl_chat_remove_contact',
            chat_id: chat_id
        },
        success: function (data) {

            if (data['remove']) {
                jQuery('[data-contact="' + contact + '"]').animateCss('flipOutX', function (e) {
                    jQuery(e).remove();
                });

                rcl_do_action('rcl_chat_remove_contact', chat_id);

            }
        }
    });

    return false;
}

function rcl_chat_message_important(message_id) {

    rcl_preloader_show('.chat-message[data-message="' + message_id + '"] > div');

    rcl_ajax({
        data: {
            action: 'rcl_chat_message_important',
            message_id: message_id
        },
        success: function (data) {

            jQuery('.chat-message[data-message="' + message_id + '"]').find('.message-important').toggleClass('active-important');

        }
    });

    return false;
}

function rcl_chat_important_manager_shift(e, status) {

    rcl_preloader_show('.rcl-chat');

    rcl_chat_important = status;

    var token = jQuery(e).parents('.rcl-chat').data('token');

    rcl_ajax({
        data: {
            action: 'rcl_chat_important_manager_shift',
            token: token,
            status_important: status
        },
        success: function (data) {

            if (data['content']) {

                jQuery(e).parents('.chat-messages-box').html(data['content']).animateCss('fadeIn');

                rcl_chat_scroll_bottom(token);

            }
        }
    });

    return false;
}

function rcl_chat_delete_message(message_id) {

    rcl_preloader_show('.chat-message[data-message="' + message_id + '"] > div');

    rcl_ajax({
        data: {
            action: 'rcl_chat_ajax_delete_message',
            message_id: message_id
        },
        success: function (data) {

            if (data['remove']) {
                jQuery('.chat-message[data-message="' + message_id + '"]').animateCss('flipOutX', function (e) {
                    jQuery(e).remove();
                });

                rcl_do_action('rcl_chat_delete_message', message_id);

            }
        }
    });

    return false;
}

function rcl_chat_delete_attachment(e, attachment_id) {

    rcl_preloader_show('.chat-form > form');

    rcl_ajax({
        data: {
            action: 'rcl_chat_delete_attachment',
            attachment_id: attachment_id
        },
        success: function (data) {

            if (data['remove']) {
                var form = jQuery(e).parents('form');
                form.find('.rcl-chat-uploader').show();
                form.find('.chat-preloader-file').empty();
            }
        }
    });

    return false;
}

function rcl_chat_shift_contact_panel() {

    var box = jQuery('#rcl-chat-noread-box');

    if (box.hasClass('active-chat'))
        return true;

    var view = (jQuery.cookie('rcl_chat_contact_panel') == 1) ? 0 : 1;

    if (view) {
        box.removeClass('hidden-contacts').animateCss('slideInUp');
    } else {
        box.addClass('hidden-contacts');
    }

    jQuery.cookie('rcl_chat_contact_panel', view, {
        expires: 30,
        path: '/'
    });

    return false;
}

rcl_add_action('rcl_init_chat', 'rcl_chat_init_beat');

function rcl_chat_init_beat(chat) {
    var delay = (chat.delay != 0) ? chat.delay : Rcl.chat.delay, chat;
    rcl_add_beat('rcl_chat_beat_core', delay, chat);
}

function rcl_chat_beat_core(chat) {

    if (chat.timeout == 1) {
        if (rcl_chat_inactive_counter >= Rcl.chat.inactivity) {
            console.log('inactive:' + rcl_chat_inactive_counter);
            return false;
        }
    }

    var chatBox = jQuery('.rcl-chat[data-token="' + chat.token + '"]');

    var chat_form = chatBox.find('form');

    var beat = {
        action: 'rcl_chat_get_new_messages',
        success: 'rcl_chat_beat_success',
        data: {
            last_activity: rcl_chat_last_activity[chat.token],
            token: chat.token,
            update_activity: 1,
            user_write: (chat_form.find('textarea').val()) ? 1 : 0
        }
    };

    return beat;

}

function rcl_chat_beat_success(data) {

    var chat = jQuery('.rcl-chat[data-token="' + data.token + '"]');

    if (!chat.length) {
        rcl_chat_clear_beat(data.token);
        return;
    }

    var user_write = 0;
    chat.find('.chat-users').html('');
    rcl_chat_write_status_cancel(data.token);

    if (data['errors']) {
        jQuery.each(data['errors'], function (index, error) {
            rcl_notice(error, 'error', 10000);
        });
    }

    if (data['success']) {

        rcl_chat_last_activity[data.token] = data['current_time'];

        if (data['users']) {
            jQuery.each(data['users'], function (index, data) {
                chat.find('.chat-users').append(data['link']);
                if (data['write'] == 1)
                    user_write = 1;
            });
        }

        if (data['content']) {
            if (typeof jQuery.ionSound !== 'undefined') {
                jQuery.ionSound.play(rcl_chat_sound.sounds[0]);
            }
            chat.find('.chat-messages').append(data['content']);
            rcl_chat_scroll_bottom(data.token);
        } else {
            if (user_write)
                rcl_chat_write_status(data.token);
        }
    }

    rcl_do_action('rcl_chat_get_messages', {
        token: data.token,
        result: data
    });

}

function rcl_get_chat_window(e, user_id) {

    if (e && jQuery(e).parents('.preloader-parent')) {
        rcl_preloader_show(jQuery(e).parents('.preloader-parent'));
    }

    rcl_ajax({
        data: {
            action: 'rcl_get_ajax_chat_window',
            user_id: user_id
        }
    });

};