//#region Активы
function AssetItemData(observer) {
    var that = this;

    var args = [];
    args.push(observer);
    args.push({
        group: 'assetids',
        name: 'assetids',
        selector: '#assetids',
        useDefaultEvent: true,
        //initConflictAfterSubmit: {
        //    compareEqualsCurrentWithSubmitValue: false,
        //    canConflict: false
        //},
    });
    ItemData.apply(this, args);
}
AssetItemData.prototype = Object.create(ItemData.prototype);

AssetItemData.prototype.InitTaskRightsDisplayType = function () {
    this.taskRightsDisplayType = ItemDataHelper.TaskRightsDisplayType[$('#assets').attr(ItemData.taskRightsDisplayTypeKey)] || ItemDataHelper.TaskRightsDisplayType.None; // || 'None';
}

AssetItemData.prototype.GetBlockTitle = function () {
    return $('[taskassettitle]').clone().children().remove().end().text().replace(':','');
}
AssetItemData.prototype.GetCurrentVal = function () {
    return $(this._options.selector).val() || [];
}
AssetItemData.prototype.IsChanged = function () {
    var cur = this.GetCurrentVal();
    var old = this.GetOldValue();
    var result = ItemDataHelper.ArraysIsEquals(cur, old);
    return !result;
}
//part2 - пользовательская
AssetItemData.prototype.Append2 = function (userConnectionId, userId, userName, data, existUserConnectionId) {
    var $parent = $('[taskassettitle]').parent();
    $parent.find('span.taskFormHub-blockInfo').remove();
    var $span = this.GetSpanTemplate(userConnectionId, userId);
    $parent.append($span);
    this.Highlight();
}
//удалить инфу о всех юзерах которые изменили блок
//вызывает при дисконекте
AssetItemData.prototype.ResetAll = function () {
    this.usersEditThisBlock = [];
    var $parent = $('[taskassettitle]').parent();
    //удалить текущий span
    $parent.find('span.taskFormHub-blockInfo').remove();
    this.Unhighlight();
}
//part2 - пользовательская
AssetItemData.prototype.Reset2 = function (userConnectionId, userId, userName) {
    var $parent = $('[taskassettitle]').parent();
    //удалить текущий span
    $parent.find('span.taskFormHub-blockInfo').remove();
    //если есть еще пользователи которые редактируют блок
    if (this.usersEditThisBlock.length > 0 && this.TaskRightsDisplayType() != ItemDataHelper.TaskRightsDisplayType.None) {
        //сделать новый span
        var $span = this.GetSpanTemplate(userConnectionId, userId);
        $parent.append($span);
        //подстветить
        this.Highlight();
    }
    else {
        this.Unhighlight();
    }
}
//функция подсветки блока
AssetItemData.prototype.Highlight = function () {
    $('#assets').addClass('taskFormHub-highlightBlock');
}

//функция убирает подсветку блока
AssetItemData.prototype.Unhighlight = function () {
    $('#assets').removeClass('taskFormHub-highlightBlock');
}
AssetItemData.prototype.InitConflictAfterSubmit = function (submitData) {

    if (this.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.None)
        return false;

    var that = this;
    var $parent = $('[taskassettitle]').parent();
    //удалить старую инфу
    this.isConflict = false;
    this.$conflictMessageElement = undefined;
    $parent.find('[conflict-block="' + this._options.name + '"]').remove();



    if (submitData != null) {

        var submitArray = submitData.map(function (p) { return p.id; });
        var curArray = that.GetCurrentVal();
        var oldArray = that.GetOldValue();
        var myAddedArray = curArray.filter(function (item) { return oldArray.indexOf(item) < 0 });
        var myRemovedArray = oldArray.filter(function (item) { return curArray.indexOf(item) < 0 });
        var isChanged = this.IsChanged();

        //удаляем инфу о конфликте
        that.isConflict = false;
        that.$conflictMessageElement = undefined;
        $parent.find('[conflict-block="' + that._options.name + '"]').remove();

        var $select = $(this._options.selector);
        //var promises = [];
        var serverData = [];

        if (that.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.Edit) {
            var names = [];
            $.each(submitData, function (k, v) {
                serverData.push(v.id);
                names['id' + v.id] = v.name;
            });

            assetSelected(serverData, names);
        }
        else {
            var $items = $('#assets ul.items');
            $.each(submitData, function (k, v) {
                serverData.push(v.id);
                if ($select.find('option[value="' + v.id + '"]').length == 0) {
                    $select.append('<option selected value="' + v.id + '">' + v.name + '</option>');
                    var $li = $('<li data-id="' + v.id + '" class="changed">' + v.name + '</li>');
                    $items.append($li);
                }
            });

            getWorkflowAndSLA(null, 'AssetType');
            $select.trigger('change');
        }

        if (curArray.length) {
            for (var i = 0; i < curArray.length; i++) {
                var curItem = curArray[i];
                if (serverData.indexOf(curItem) == -1 && myAddedArray.indexOf(curItem) == -1 && myRemovedArray.indexOf(curItem) == -1) {
                    $('#assets ul.items li[data-id="' + curArray[i] + '"]').remove();
                    $select.find('option[value="' + curArray[i] + '"]').remove();
                }
            }
        }

        var $activesnotsetmessage = $('#assets [activesnotset]');
        if (that.GetCurrentVal().length == 0) {
            $('#assets .items').hide();
            if ($activesnotsetmessage.length > 0) {
                $activesnotsetmessage.show();
            }
        }
        else {
            $('#assets .items').show();
            if ($activesnotsetmessage.length > 0) {
                $activesnotsetmessage.hide();
            }

        }



        var $notconflictMessage = $(that.tmpl_notconflictMessageBase({ blockName: that._options.name }));
        //добавить новую инфу
        $parent.append($notconflictMessage);

        that.SetOldValue($(ItemDataHelper.ArraysMergeDistinct(that.GetCurrentVal(), myRemovedArray)).not(myAddedArray).get());
        $select.trigger('change');
        that.SendBlockChange();

        return false;
    }

    return false;
}
AssetItemData.prototype.AppendNotConflict = function () { }
AssetItemData.prototype.AppendNotConflictUpdate = function () { }
AssetItemData.prototype.AppendConflict1 = function () { }
AssetItemData.prototype.AppendConflict2 = function () { }
//#endregion