//#region доп. поле - файл
function FieldFileItemData(observer, id) {
    var that = this;
    var $field = $('#' + id).closest('.field');
    $field.attr('fieldfilecontainer' + id, id);

    var args = [];
    args.push(observer);
    args.push({
        group: 'fieldfilecontainer',
        name: id,
        selector: '[fieldfilecontainer' + id + ']',
        useDefaultEvent: false,
        initConflictAfterSubmit: {
            compareEqualsCurrentWithSubmitValue: false
        },
        fieldId: id.replace('field', '')
    });
    FieldItemData.apply(this, args);

    this.removedFiles = [];

    if (this.IsOnForm() && this.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.Edit) {
        $('#' + id).change(function () {
            that.SendBlockChange();
        });
    }
}
FieldFileItemData.prototype = Object.create(FieldItemData.prototype);
//функция подсветки блока
FieldFileItemData.prototype.Highlight = function () {
    $(this._options.selector).find('[fieldfilehighlightcontainer]').addClass('taskFormHub-highlightBlock');
}

//функция убирает подсветку блока
FieldFileItemData.prototype.Unhighlight = function () {
    $(this._options.selector).find('[fieldfilehighlightcontainer]').removeClass('taskFormHub-highlightBlock');
}
FieldFileItemData.prototype.GetSelectorType = function () {
    return 'file';
}
FieldFileItemData.prototype.getFileIdsFromContainer = function (selector) {
    if (this.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.None)
        return [];
    return $(selector).find('a[fileid]:not(.selectdeletedfile)').map(function (i, el) { return el.getAttribute('fileid'); }).get() || [];
};
FieldFileItemData.prototype.GetCurrentVal = function () {
    //var curVal = $(this._options.selector).find('a[fileid]').attr('fileid') || [];
    var curVal = this.getFileIdsFromContainer(this._options.selector); //$(this._options.selector).find('a[fileid]:not(.selectdeletedfile)').map(function (i, el) { return el.getAttribute('fileid'); }).get() || [];
    return curVal;
}
FieldFileItemData.prototype.GetSubmitVal = function (submitData) {
    if (submitData == '')
        return [];
    
    var sVal = this.getFileIdsFromContainer(submitData);// $(submitData).attr('fileid') || 0;
    return sVal;
}
//функция определяет было ли изменение значения блока или инпута
FieldFileItemData.prototype.IsChanged = function () {
    var oldValue = this.GetOldValue();
    ////если файлов не было при загрузке,но в инпуте есть файлы
    ////или если текущее значение не совпадает со старым
    //return (/*oldValue.length == 0 &&*/ $('#' + this._options.name)[0].files.length > 0) || !ItemDataHelper.ArraysIsEquals(this.GetCurrentVal(), oldValue);

    //если в инпуте есть файлы или чето поменялось или чето удалили
    return ($('#' + this._options.name)[0].files.length > 0) || !ItemDataHelper.ArraysIsEquals(this.GetCurrentVal(), oldValue) || this.removedFiles.length > 0;
}

FieldFileItemData.prototype.InitConflictAfterSubmit = function (submitData) {
    if (this.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.None)
        return false;

    var that = this;

    //удалить старую инфу
    this.isConflict = false;
    this.RemoveConflictMessage();

    var $selector = $(this._options.selector);
    //var $fileInput = $selector.find('input[type="file"]');
    var canRemove = this.TaskRightsDisplayType() == ItemDataHelper.TaskRightsDisplayType.Edit; //$fileInput.length > 0;
    var $submitData = $('<div/>').append(submitData);
    var $ul = $selector.find('[fieldfilehighlightcontainer] ul');
    $ul.empty();

    var tmpMyRemovedFiles = this.removedFiles.slice();
    this.removedFiles = [];

    $submitData.find('a').each(function (i, a) {
        var $a = $(a);
        var fileid = $a.attr('fileid');
        var $li = $('<li class="file" id="filefield' + fileid + '"></li>');
        if (tmpMyRemovedFiles.indexOf(parseInt(fileid)) != -1) {
            $a.removeClass('noul').addClass('selectdeletedfile');
            that.removedFiles.push(fileid);
        }
        $li.append($a);
        if (canRemove) {
            $li.append('<a class="noul" href="#" onclick="GLOBAL_taskFormHubObserver.getBlocks()[\'' + that._options.name + '\'].removeAdditionalFile(' + fileid + '); return false;"><img src="img/trash.gif" title="Удалить"></a>');
        }
        $ul.append($li);
    });

    this.SetOldValue();
    this.SendBlockChange();


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

    return false;
}

FieldFileItemData.prototype.removeAdditionalFile = function (fileid) {
    removeAdditionalFile(fileid);
    
    var index = this.removedFiles.indexOf(fileid);
    if (index == -1) {
        //добавляем
        this.removedFiles.push(fileid);
    }
    else {
        //удаляем
        this.removedFiles.splice(index, 1);
    }
    this.SendBlockChange();
}
//#endregion