<?xml version="1.0" encoding="utf-8"?>
<configuration version="1" date="2018-03-27 14:56:58" synergyVersion="3.15">
    <objects version="1" date="2018-03-27 14:56:58" synergyVersion="3.15">
        <customComponent code="tree_registry_chooser"
            name="Иерархический справочник на основе реестров" use_in_forms="true">
            <javascript>/**
 * пример настройки:
 *
 model.config = {
    code: 'reestr_colvir_tariffs',      // код реестра
    nameField: 'colvir_name_tariff',    // поле отображаемое в окне выбора записи. должен быть в столбцах реестра
    parentField: 'parent_tarif_link',   // поле со ссылкой на родительскую запись
    parentFieldType: 'key',             // тип поля parentField
    sortCmpID: 'colvir_code_tariff',    // поле сортировки записей, необязательное
    sortDesc: true,                 // тип сортировки, необязательное

    browseDisable: false,   // деактивировать выбор, необязательное
    deleteDisable: false,   // деактивировать удаление, необязательное
    createDisable: false    // деактивировать создание, необязательное
};
 */

/**
 * обновить текстовое представление записи реестра
 */
model.updateTextView = function (fromInit) {
    if (!model.getValue()) {
        model.textValue = "";
        model.asfDataId = null;
        model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]);
        return;
    }
    if (!registry || !registry.registryID) {
        return;
    }
    AS.FORMS.ApiUtils.getAsfDataUUID(model.getValue(), function (newAsfDataId) {
        model.asfDataId = newAsfDataId;
        AS.FORMS.ApiUtils.getDocMeaningContent(registry.registryID, newAsfDataId, function (text) {
            if (text === null || text === '') {
                model.textValue = i18n.tr('Документ');
            } else {
                model.textValue = text;
            }
            model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]);
            if (fromInit) {
                model.trigger('loadFromInit', [model]);
            }
        });
    });
};

/**
 * получить тесктовое представление записи реестра
 * @returns {string|string|*}
 */
model.getTextValue = function () {
    return model.textValue;
};

// подписываемся на событие модели об изменении содержания, чтобы подгрузить дополнительные данные
model.on(AS.FORMS.EVENT_TYPE.valueChange, function () {
    model.updateTextView();
});

/**
 * метод реализовывает вставку asfData
 * @param asfData
 */
model.setAsfData = function (asfData) {
    model.setValue(asfData.key);
};

/**
 * метод реализовывает получение данных компонента для сохранения
 * @param blockNumber
 * @returns {*}
 */
model.getAsfData = function (blockNumber) {
    return AS.FORMS.ASFDataUtils.getBaseAsfData(model.asfProperty, blockNumber, model.textValue, model.value);
};

/**
 * реестр
 * @type {object}
 */
var registry = null;
/**
 * видимые колонки реестра
 * @type {Array}
 */
var registryColumns = [];


/**
 * поле ввода для поиска записей реестра
 * @type {XMLList|*}
 */
var input = jQuery(view.container).children("[innerId='name']");
/**
 * поле для отображения выбранной записи реестра
 * @type {XMLList|*}
 */
var textView = jQuery(view.container).children("[innerId='textView']");
/**
 * кнопка добавления записи
 * @type {XMLList|*}
 */
var addIcon = jQuery(view.container).children("[innerId='add']");
/**
 * кнопка выбора записи из реестра
 * @type {XMLList|*}
 */
var browseIcon = jQuery(view.container).children("[innerId='browse']");
/**
 * кнопка удаления текущей выбранной записи
 * @type {XMLList|*}
 */
var deleteIcon = jQuery(view.container).children("[innerId='delete']");

// кнопку удаления текущей выбраннйо записи скрываем
deleteIcon.hide();

// по нажатию на кнопку "выбрать из реестра" открываем стандартный диалог выбра записи реестра
browseIcon.click(function () {
    model.showDialog(registry);
});

/**
 * компонента выбора записи реестра
 *
 */
function TreeRegistryChooser(locale, registry, config){
    var instance = this;

    var hasChildField = 'hasChilds';
    var dialog = new AS.FORMS.BasicChooserDialog();
    dialog.init({
        showListItemIcon : false,
        showListItemInfo : false,
        showListItemStatus : false,
        multiSelect : false,
        showSearchField : false,
        title : i18n.tr("Выбор записи реестра"),
        showSelectedStack : false
    });

    var treeItem;

    this.setTreeItem = function(item) {
        this.treeItem = item;
    }

    this.getTreeItem = function() {
        return this.treeItem;
    }

    this.correctListArray = function(records) {
        if(!records) {
            return [];
        }
        records.forEach(function (record) {
            record.id = record.documentID;
            record.name = record.fieldValue[config.nameField];
        });
        return records;
    };

    // получить записи реестра по ID родительской записи
    this.fetchData = function(parentId, locale, handler){
        var registryCode = model.config.code;
        var params = {
            registryCode : registryCode,
            locale: locale
        };
        if(config.sortCmpID) {
            params.sortCmpID = config.sortCmpID;
        }
        if(config.sortDesc) {
            params.sortDesc = config.sortDesc;
        }

        var parentQuery = '';
        if(parentId) {
            parentQuery = "&amp;field=" + config.parentField + "&amp;condition=CONTAINS&amp;" + config.parentFieldType + "=" + parentId;
        } else {
            parentQuery = "&amp;field=" + config.parentField + "&amp;condition=NOT_CONTAINS&amp;" + config.parentFieldType + "=-";
        }
        AS.FORMS.ApiUtils.simpleAsyncGet('rest/api/registry/data_ext?' + $.param(params) + parentQuery, handler);
    }

    // есть ли дочерние записи
    this.hasChildsDeferred = function(nodeId, locale) {
        var dfd = new $.Deferred();
        this.fetchData(nodeId, locale, function(data){
            dfd.resolve({
                nodeId: nodeId,
                hasChild: data.result.length &gt; 0
            });
        });
        return dfd.promise();
    }

    // получение дочерних записей
    this.fetchChilds = function(parentId, locale, handler) {
        var me = this;
        this.fetchData(parentId, locale, function(data){
            var requests = [];
            $.each(data.result, function(i, record){
                record[config.nameField] = record.fieldValue[config.nameField];
                requests.push(me.hasChildsDeferred(record.documentID, locale));
            });
            $.when.apply($, requests).done(function () {
                var total = 0;
                $.each(arguments, function (i, details) {
                    data.result[i][hasChildField] = details.hasChild;
                });
                handler(data);
            });
        });
    }

    dialog.addTree("treeRecords", function(parentNode, tree){
        var nodeID = undefined;
        if(parentNode) {
            nodeID = parentNode.id;
        }
        instance.fetchChilds(nodeID, locale, function(data){
            dialog.setTreeNodeData("treeRecords", nodeID, instance.correctListArray(data.result), "documentID", config.nameField, hasChildField);
        });
    }, function(parentNode, tree){
        instance.setTreeItem(parentNode);
        dialog.setListTitle(parentNode.name);
        dialog.showList("listRecords", parentNode, true);
    });

    dialog.addListType("listRecords", function(search, startRecord, recordsCount, selectedNodeId, stackId){
        instance.fetchChilds(selectedNodeId, locale, function(data){
            var listToShow = data.result.length &gt; 0 ? data.result : [instance.getTreeItem()];
            dialog.setListData("listRecords", instance.correctListArray(listToShow), false);
        });
    }, function(search, selectedNodeId, stackId){

    });

    dialog.addStack("registry", registry.name, "treeRecords", false, false, function(){});
    dialog.showStack("registry");

    this.setSelectedItems = function(newSelectedPersons){
        dialog.setSelectedItems(instance.correctListArray(newSelectedPersons));
    };

    this.getSelectedItems = function(){
        return dialog.getSelectedItems();
    };

    this.showDialog = function(){
        dialog.show();
    };

    /**
     *
     * @param event SEE BasicChooserEvent
     * @param handler
     */
    this.on = function(event, handler) {
        dialog.on(event, handler);
    };

}

model.getDataByDocumentId = function (handler) {
    if (!registry || !registry.registryID) {
        handler(null);
    }
    jQuery.when(AS.FORMS.ApiUtils.loadAsfData(model.asfDataId, 0)).then(function (data) {
        handler(data);
    });
};

model.showDialog = function (registry) {
    var locale = 'ru';
    var config = model.config;

    model.getDataByDocumentId(function(data) {
        if(!data.fieldValue){
            data.fieldValue = {};
        }
        $.each(data.data, function(item){
            if(item.id === config.nameField){
                data.fieldValue[config.nameField] = item.value;
            }
        });
        var chooser = new TreeRegistryChooser(locale, registry, config);
        if(data &amp;&amp; data.uuid) {
            chooser.setSelectedItems([data]);
        }
        chooser.showDialog();
        chooser.on(AS.FORMS.BasicChooserEvent.applyClicked, function(){
            model.setValue(chooser.getSelectedItems()[0].id);
        });
    });
};

var advancedSearch = function (sf) {
    AS.FORMS.ApiUtils.getRegistryFilterDataOriginal = AS.FORMS.ApiUtils.getRegistryFilterData;
    AS.FORMS.ApiUtils.getRegistryDataOriginal = AS.FORMS.ApiUtils.getRegistryData;
    var docId = model.playerModel.getModelWithId(sf.from).getValue();

    AS.FORMS.ApiUtils.getRegistryData = function (registryID, pageNumber, countInPart, searchText, sortCmpID, sortDesc, handler) {
        var params = {
            registryID: registryID,
            pageNumber: pageNumber,
            countInPart: countInPart,
            searchString: searchText,
            sortCmpID: sortCmpID,
            sortDesc: sortDesc
        };

        AS.SERVICES.showWaitWindow();

        this.simpleAsyncGet('rest/api/registry/data_ext?' + $.param(params) + "&amp;field=" + sf.field + "&amp;condition=CONTAINS&amp;key=" + docId, AS.FORMS.ApiUtils.getHandler(handler, true));
    };

    AS.FORMS.ApiUtils.getRegistryFilterData = function (registryID, filterID, pageNumber, countInPart, searchText, sortCmpID, sortDesc, handler) {
        var params = {
            registryID: registryID,
            filterID: filterID,
            pageNumber: pageNumber,
            countInPart: countInPart,
            searchString: searchText,
            sortCmpID: sortCmpID,
            sortDesc: sortDesc
        };

        AS.SERVICES.showWaitWindow();

        this.simpleAsyncGet('rest/api/registry/data_ext?' + $.param(params) + "&amp;field=" + sf.field + "&amp;condition=CONTAINS&amp;key=" + docId, AS.FORMS.ApiUtils.getHandler(handler, true));
    };
};

var pmodel = model.playerModel;
// по нажатию на кнопку "создать" открываем форму создания записи реестра

model.createRegistryRecord = function () {
    if (!registry.rr_create) {
        alert("У вас нет прав на создание записей данного реестра");
        return;
    }

    var createPlayerDiv = jQuery("&lt;div&gt;");
    createPlayerDiv.css("width", view.width ? view.width + "px" : "1000px");
    createPlayerDiv.css("height", view.height ? view.height + "px" : "700px");

    createPlayerDiv.css("border", "1px solid #afafaf");

    var saveButton = jQuery("&lt;button&gt;", {class: "ns-approveButton ns-basicChooserApplyButton"});
    saveButton.button();
    saveButton.html(i18n.tr("Создать"));
    saveButton.css("margin", "auto");
    saveButton.css("display", "block");
    saveButton.css("margin-top", "10px");
    saveButton.css("margin-bottom", "10px");

    var player = AS.FORMS.createPlayer();
    player.model.isCreate = true;
    createPlayerDiv.on('dialogbeforeclose', function () {
        if (model.onDialogClose) {
            model.onDialogClose(player);
        }
    });

    player.view.setEditable(true);
    player.showFormData(registry.formId);
    player.view.appendTo(createPlayerDiv);

    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        var registryModel = null;
        if (player.model.formCode === 'crm_form_contact') {
            registryModel = player.model.getModelWithId('crm_form_contact_lead_lead', 'crm_form_contact_lead');
        }
        if (player.model.formCode === 'crm_form_account') {
            registryModel = player.model.getModelWithId('crm_form_account_lead_lead', 'crm_form_account_lead');
        }
        if (player.model.formCode === 'crm_form_dealActivity') {
            registryModel = player.model.getModelWithId('crm_form_dealActivity_main_deal');
        }
        if (player.model.formCode === 'crm_form_leadActivity') {
            registryModel = player.model.getModelWithId('crm_form_leadActivity_main_lead');
        }
        if (registryModel != null) {
            registryModel.setValue(AS.SERVICES.getParameterByName("document_identifier", window.location.href));
        }
        if (player.model.formCode === 'crm_form_activity') {
            var org = player.model.getModelWithId('crm_form_activity_organization');

            var fromOrg = pmodel.getModelWithId('crm_form_lead_main_account');
            if (fromOrg != null &amp;&amp; fromOrg.getValue() != null &amp;&amp; !fromOrg.getValue().isEmpty()) {
                org.setValue(fromOrg.getValue());
            }
            fromOrg = pmodel.getModelWithId('crm_form_deal_main_account');
            if (fromOrg != null &amp;&amp; fromOrg.getValue() != null &amp;&amp; !fromOrg.getValue().isEmpty()) {
                org.setValue(fromOrg.getValue());
            }
        }

        if (model.onDataLoad) {
            model.onDataLoad(player);
        }
    });

    createPlayerDiv.append(saveButton);
    createPlayerDiv.dialog({
        width: view.width ? view.width : 1000,
        height: view.height ? view.height : 700,
        modal: true
    });

    collateLinksData(player, model.links);
    collateCurrentData(player, model.cmpMap, model.asfProperty.tableBlockIndex);
    collateFixedData(player, model.fixedData);

    saveButton.click(function () {
        var valid = player.model.isValid();
        if (!valid &amp;&amp; model.showErrorMessage) {
            model.showErrorMessage(i18n.tr("Введите все обязательные поля"));
            return;
        } else if (!valid) {
            AS.SERVICES.showErrorMessage(i18n.tr("Введите все обязательные поля"));
            return;
        }

        AS.SERVICES.showWaitWindow();
        AS.FORMS.ApiUtils.simpleAsyncGet("rest/api/registry/create_doc?registryID=" + registry.registryID, function (result) {
            if (result.errorCode != 0) {
                AS.SERVICES.hideWaitWindow();
                alert(i18n.tr("Во время сохранения данных по форме произошли ошибки. Обратитесь к администратору"));
                return;
            }
            player.model.asfDataId = result.dataUUID;
            player.saveFormData(function (result) {
                AS.SERVICES.hideWaitWindow();
                if (_.isUndefined(result)) {
                    alert(i18n.tr("Во время сохранения данных по форме произошли ошибки. Обратитесь к администратору"));
                    return;
                }
                player.model.saved = true;
                AS.SERVICES.showWaitWindow();
                AS.FORMS.ApiUtils.getDocumentIdentifier(result, function (documentID) {
                    AS.SERVICES.hideWaitWindow();
                    model.setValue(documentID);
                    createPlayerDiv.dialog("close");
                    createPlayerDiv.dialog("destroy");
                });
            });
        });
    });
};

model.createOrShowRecord = function (asfDataId) {
    if (!model.getValue()) {
        model.createRegistryRecord();
    } else {
        model.showRegistryRecord(asfDataId);
    }
};

addIcon.click(function () {
    model.createRegistryRecord();
});

// по нажатию на кнопку удалить  - удаляем выбранное значение
deleteIcon.click(function () {
    model.setValue(null);
});

model.showRegistryRecord = function (asfDataId, editableChooser) {
    var createPlayerDiv = jQuery("&lt;div&gt;");
    createPlayerDiv.css("width", view.width ? view.width + "px" : "1000px");
    createPlayerDiv.css("height", view.height ? view.height + "px" : "700px");

    var editButton = jQuery('&lt;div class="edit"&gt;&lt;/div&gt;');

    var saveButton = jQuery("&lt;button&gt;", {class: "ns-approveButton ns-basicChooserApplyButton"});
    saveButton.button();
    saveButton.html(i18n.tr("Сохранить"));
    saveButton.css("margin", "auto");
    saveButton.css("display", "block");
    saveButton.css("margin-top", "10px");
    saveButton.css("margin-bottom", "10px");
    saveButton.hide();
    createPlayerDiv.css("border", "1px solid #afafaf");

    var player = AS.FORMS.createPlayer();
    createPlayerDiv.on('dialogbeforeclose', function () {
        if (model.onDialogClose) {
            model.onDialogClose(player);
        }
    });

    player.view.setEditable(editableChooser);
    player.showFormData(null, null, asfDataId, 0);

    if (registry.code == 'crm_registry_activity' || registry.code == 'crm_registry_accounts' || registry.code == 'crm_registry_contacts' || editableChooser) {
        createPlayerDiv.append(editButton);

        if (player.view.editable) {
            editButton.addClass('edited');
            saveButton.show();
        } else {
            editButton.removeClass('edited');
            saveButton.hide();
        }

        editButton.click(function () {
            if (player.view.editable) {
                player.view.setEditable(false);
                editButton.removeClass('edited');
                saveButton.hide();
            } else {
                player.view.setEditable(true);
                editButton.addClass('edited');
                saveButton.show();
            }
        });
    }

    player.view.appendTo(createPlayerDiv);
    createPlayerDiv.append(saveButton);

    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        if (model.onDataLoad) {
            model.onDataLoad(player);
        }
    });

    createPlayerDiv.dialog({
        width: view.width ? view.width : 1000,
        height: view.height ? view.height : 700,
        modal: true
    });

    collateOnShowFixedData(player, model.showFixedData);
    saveButton.click(function () {
        var valid = player.model.isValid();
        if (!valid &amp;&amp; model.showErrorMessage) {
            model.showErrorMessage(i18n.tr("Введите все обязательные поля"));
            return;
        } else if (!valid) {
            AS.SERVICES.showErrorMessage(i18n.tr("Введите все обязательные поля"));
            return;
        }


        AS.SERVICES.showWaitWindow();
        player.saveFormData(function (result) {
            AS.SERVICES.hideWaitWindow();
            if (_.isUndefined(result)) {
                alert(i18n.tr("Во время сохранения данных по форме произошли ошибки. Обратитесь к администратору"));
                return;
            }

            player.model.saved = true;

            AS.SERVICES.showWaitWindow();
            AS.FORMS.ApiUtils.getDocumentIdentifier(result, function (documentID) {
                AS.SERVICES.hideWaitWindow();
                model.setValue();
                model.setValue(documentID);
                createPlayerDiv.dialog("close");
                createPlayerDiv.dialog("destroy");
            });
        });
    });
};


// по нажатию на текстовое отображение  - открываем запись реестра на просмотр
textView.click(function () {
    model.showRegistryRecord(model.asfDataId);
});

collateFixedData = function (player, fixedData) {
    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        if (fixedData) {
            fixedData.forEach(function (fixedItem) {
                player.model.getModelWithId(fixedItem.id).setValue(fixedItem.value);
            });
        }
    });
};

collateOnShowFixedData = function (player, fixedData) {
    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        if (fixedData) {
            fixedData.forEach(function (fixedItem) {
                player.model.getModelWithId(fixedItem.id).setValue(fixedItem.value);
            });
            fixedData = [];
        }
    });
};

collateCurrentData = function (player, map, tableBlockIndex) {
    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        var data = model.playerModel.getAsfData();
        if (map) {
            map.forEach(function (map) {
                if (map.fromTable) {
                    data.data.forEach(function (item) {
                        if (item.id === map.fromTable) {
                            replaceValue(player, item.data, map.from + '-b' + tableBlockIndex, map.to, map.disabled, map.entityField);
                        }
                    });
                } else {
                    replaceValue(player, data.data, map.from, map.to, map.disabled, map.entityField);
                }
            });
        }
    });
};

var pmodel = model.playerModel;
collateLinksData = function (player, links) {
    player.model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
        if (links) {
            links.forEach(function (link) {
                var model = pmodel.getModelWithId(link.from);
                AS.FORMS.ApiUtils.getAsfDataUUID(model.getValue(), function (dataUUID) {
                    jQuery.when(AS.FORMS.ApiUtils.loadAsfData(dataUUID)).then(function (data) {
                        replaceValue(player, data.data, link.valueCmp, link.toCmp, link.disabled, link.entityField);
                    });
                });
            });
        }
    });
};

replaceValue = function (player, data, fromCmp, toCmp, disabled) {
    data.forEach(function (item) {
        if (item.id === fromCmp) {
            var m = player.model.getModelWithId(toCmp);
            var v = player.view.getViewWithId(toCmp);
            if (m !== null) {
                if (item.type === "entity" &amp;&amp; m.asfProperty.type !== "entity") {
                    m.setValue(item.value + "");
                } else {
                    if (item.key &amp;&amp; item.key !== null &amp;&amp; item.key !== '') {
                        if (m.asfProperty.type == "entity") {
                            if (item.id.indexOf('position_head') === 0) {
                                m.setValue({elementID: item.key + "", elementName: item.value, tagName: item.value});
                            } else {
                                m.setValue({personID: item.key + "", personName: item.value});
                            }
                        } else {
                            m.setValue(item.key + "");
                        }
                    } else if (item.value) {
                        m.setValue(item.value + "");
                    }
                }
                if (disabled) {
                    v.setEnabled(false);
                }
            }
        }
    });
};

// скрываем или отображаем поля ввода в зависимости от того режим чтения это или редактирования
if (editable) {
    if (model.config.browseDisable) {
        browseIcon.hide();
    }
} else {
    input.hide();
    addIcon.hide();
    browseIcon.hide();
    deleteIcon.hide();
}
addIcon.text('+' + i18n.tr('Создать'));
browseIcon.text(i18n.tr('Выбрать из реестра'));
deleteIcon.html('&lt;div style="color:#606060; margin-left:10px; text-decoration:underline" class="asf-InlineBlock asf-cursorPointer" innerId="delete"&gt;' + i18n.tr('Удалить') + '&lt;/div&gt;');

// реализовываем метод обновления отображения согласно изменившимся данным модели
view.updateValueFromModel = function () {
    input.val("");
    if (model.getValue()) {
        textView.css("display", "");
        input.hide();
        textView.html(model.getTextValue());
        input.hide();
        if (editable) {
            if (!model.config.deleteDisable) {
                deleteIcon.css("display", "");
            } else {
                browseIcon.hide();
            }
            if (model.config.browseDisable) {
                browseIcon.hide();
            }

            if (model.config.createDisable) {
                addIcon.hide();
            }
        } else {
            input.hide();
            addIcon.hide();
            browseIcon.hide();
            deleteIcon.hide();
        }
    } else {

        if (editable) {
            input.css("display", "");
            if (model.config.browseDisable) {
                browseIcon.hide();
            }
        } else {
            input.hide();
            addIcon.hide();
            browseIcon.hide();
            deleteIcon.hide();
        }

        textView.html("");
        input.text("");
        deleteIcon.hide();
    }
};

// подписываем на событие подгрузки дополнительных данных значения
model.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
    view.updateValueFromModel();
});

/**
 * если нет прав создания записи реестра, то кнопки создать не должно быть видно
 */
function validateIconsState() {
    addIcon.hide();
    if (registry.rr_create &amp;&amp; editable &amp;&amp; !model.onlyRead) {
        addIcon.css("display", "");
    }
}

model.initComponent = function () {
    initComponent();
};
/**
 * инициализируем компонент (получаем реестр, колонки)
 */
function initComponent() {
    AS.FORMS.ApiUtils.simpleAsyncGet('rest/api/registry/info?code=' + model.config.code, function (reg) {
        registry = reg;
        registry.registryID = reg.registryID;

        registryColumns = [];
        if (!registry.columns) {
            return;
        }
        registry.columns.forEach(function (col) {
            if (col.visible != 1) {
                return;
            }
            registryColumns.push(col);
        });

        registryColumns = registryColumns.sort(function (item1, item2) {
            var number1 = item1.order;
            var number2 = item2.order;
            if (number1 === number2) {
                if (item1.name &lt; item2.name) {
                    return -1;
                } else if (item1.name &gt; item2.name) {
                    return 1;
                }
            } else {
                if (number1 === 0) {
                    return 1;
                } else if (number2 === 0) {
                    return -1;
                } else if (number1 &lt; number2) {
                    return -1;
                } else {
                    return 1;
                }
            }
            return 0;
        });
        model.updateTextView(true);
        view.updateValueFromModel();
        validateIconsState();

        model.trigger('registryChooserLoaded', [model]);
    });

}

// при вводе пользователя отображаем первые 10 результатов поиска
input.on("input", function () {
    var search = input.val();
    if (search.length === 0 || !registry) {
        AS.SERVICES.showDropDown([]);
        return;
    }
    AS.FORMS.ApiUtils.getRegistryFilterDataOriginal = AS.FORMS.ApiUtils.getRegistryFilterData;
    AS.FORMS.ApiUtils.getRegistryDataOriginal = AS.FORMS.ApiUtils.getRegistryData;
    var sf = model.seachField;
    if (sf) {
        advancedSearch(sf);
    }

    AS.FORMS.ApiUtils.getRegistryData(registry.registryID, 0, 10, search, null, null, function (foundData) {
        var values = [];
        foundData.result.forEach(function (record) {
            var value = {value: record.documentID};
            var label = "";

            registryColumns.forEach(function (column) {
                if (record.fieldValue[column.columnID] !== undefined) {
                    label += record.fieldValue[column.columnID] + " - ";
                }
            });

            value.title = label;
            values.push(value);
        });
        AS.FORMS.ApiUtils.getRegistryFilterData = AS.FORMS.ApiUtils.getRegistryFilterDataOriginal;
        AS.FORMS.ApiUtils.getRegistryData = AS.FORMS.ApiUtils.getRegistryDataOriginal;

        AS.SERVICES.showDropDown(values, input, null, function (selectedValue) {
            model.setValue(selectedValue);
            view.updateValueFromModel();
            AS.FORMS.ApiUtils.getRegistryFilterData = AS.FORMS.ApiUtils.getRegistryFilterDataOriginal;
            AS.FORMS.ApiUtils.getRegistryData = AS.FORMS.ApiUtils.getRegistryDataOriginal;
        });
    });
});

initComponent();

AS.SERVICES.getParameterByName = function (name, url) {
    if (!url) {
        url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&amp;");
    var regex = new RegExp("[?&amp;]" + name + "(=([^&amp;#]*)|&amp;|#|$)"),
            results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
};</javascript>
            <html>&lt;style&gt;
    .edit {border: 1px solid black;float: right;background: url('light/images/buttons/dark.gray/edit.png') 50%;width: 30px;height: 22px;background-repeat: no-repeat;border-radius: 5px;border-color: gray;position: relative;z-index: 99999;}
    .edited{background-color: #efefef;}
&lt;/style&gt;
&lt;div innerId="textView" style="text-decoration:underline; cursor:pointer;width:calc(100% ); color:#06f; margin-bottom:2px"&gt;&lt;/div&gt;
    &lt;input type="text" class="asf-textBox" innerId="name" style="width:calc(100% )"/&gt;
    &lt;div style="color:#606060; margin-right:10px; text-decoration:underline" class="asf-InlineBlock asf-cursorPointer" innerId="add"&gt;+Создать&lt;/div&gt;
    &lt;div style="color:#606060; margin-right:10px; text-decoration:underline" class="asf-InlineBlock asf-cursorPointer" innerId="browse"&gt;Выбрать из реестра&lt;/div&gt;
&lt;div style="color:#606060; text-decoration:underline" class="asf-InlineBlock asf-cursorPointer" innerId="delete"&gt;&amp;#10005; Удалить&lt;/div&gt;
</html>
        </customComponent>
    </objects>
    <dependencies/>
</configuration>
