/*
 *
 * (c) Copyright Ascensio System Limited 2010-2017
 *
 * This program is a free software product. You can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License (AGPL)
 * version 3 as published by the Free Software Foundation. In accordance with
 * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
 * that Ascensio System SIA expressly excludes the warranty of non-infringement
 * of any third-party rights.
 *
 * This program is distributed WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PURPOSE. For
 * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
 *
 * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
 * EU, LV-1021.
 *
 * The  interactive user interfaces in modified source and object code versions
 * of the Program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU AGPL version 3.
 *
 * Pursuant to Section 7(b) of the License you must retain the original Product
 * logo when distributing the program. Pursuant to Section 7(e) we decline to
 * grant you any rights under trademark law for use of our trademarks.
 *
 * All the Product's GUI elements, including illustrations and icon sets, as
 * well as technical writing content are licensed under the terms of the
 * Creative Commons Attribution-ShareAlike 4.0 International. See the License
 * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
 *
*/
/**
 *  TableSettingsAdvanced.js
 *
 *  Created by Julia Radzhabova on 2/27/14
 *  Copyright (c) 2014 Ascensio System SIA. All rights reserved.
 *
 */

define([    'text!documenteditor/main/app/template/TableSettingsAdvanced.template',
    'common/main/lib/view/AdvancedSettingsWindow',
    'common/main/lib/component/ComboBox',
    'common/main/lib/component/MetricSpinner',
    'common/main/lib/component/CheckBox',
    'common/main/lib/component/RadioBox',
    'common/main/lib/component/ThemeColorPalette',
    'common/main/lib/component/ColorButton',
    'common/main/lib/component/ListView',
    'common/main/lib/component/TableStyler'
], function (contentTemplate) {
    'use strict';

    DE.Views.TableSettingsAdvanced = Common.Views.AdvancedSettingsWindow.extend(_.extend({
        options: {
            contentWidth: 340,
            height: 436,
            toggleGroup: 'table-adv-settings-group',
            storageName: 'de-table-settings-adv-category'
        },

        initialize : function(options) {
            _.extend(this.options, {
                title: this.textTitle,
                items: [
                    {panelId: 'id-adv-table-width',      panelCaption: this.textTable},
                    {panelId: 'id-adv-table-cell-props', panelCaption: this.textCellProps},
                    {panelId: 'id-adv-table-borders',    panelCaption: this.textBordersBackgroung},
                    {panelId: 'id-adv-table-position',   panelCaption: this.textTablePosition},
                    {panelId: 'id-adv-table-wrap',       panelCaption: this.textWrap},
                    {panelId: 'id-adv-table-alttext',    panelCaption: this.textAlt}
                ],
                contentTemplate: _.template(contentTemplate)({
                    scope: this
                })
            }, options);
            Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options);

            this.spinners = [];

            this._changedProps = null;
            this._cellBackground = null;

            this._state = {
                HAlignType: Asc.c_oAscXAlign.Left,
                HAlignFrom: Asc.c_oAscHAnchor.Margin,
                HPositionFrom: Asc.c_oAscHAnchor.Margin,
                VAlignType: Asc.c_oAscYAlign.Top,
                VAlignFrom: Asc.c_oAscVAnchor.Margin,
                VPositionFrom: Asc.c_oAscVAnchor.Margin,
                spnXChanged: false,
                spnYChanged: false,
                fromWrapInline: false,
                verticalPropChanged: false,
                horizontalPropChanged: false,
                alignChanged: false
            };

            this._allTable = false;
            this.TableMargins = {
                Left   : 0.19,
                Right  : 0.19,
                Top    : 0,
                Bottom : 0
            };
            this.CellMargins = {
                Left   : 0.19,
                Right  : 0.19,
                Top    : null,
                Bottom : null,
                Flag   : 0  // 0(checked) - как в таблице, 1(indeterminate) - разные значения, не определено, 2 (unchecked) - собственные
            };

            this.TableBorders = {};
            this.CellBorders = {};
            this.ChangedTableBorders = undefined; // undefined - не менялись, null - применялись пресеты, отправлять TableBorders, object - менялись отдельные границы, отправлять ChangedTableBorders
            this.ChangedCellBorders = undefined; // undefined - не менялись, null - применялись пресеты, отправлять CellBorders, object - менялись отдельные границы, отправлять ChangedCellBorders
            this.BorderSize = {ptValue: 0, pxValue: 0};

            this.TableColor = {Value: 1, Color: 'transparent'};  // value=1 - цвет определен - прозрачный или другой
            this.CellColor = {Value: 1, Color: 'transparent'};  // value=1 - цвет определен - прозрачный или другой, value=0 - цвет не определен, рисуем прозрачным
            this.IndeterminateColor = '#C8C8C8';
            this.IndeterminateSize = 4.5;

            this.tableStylerRows = this.options.tableStylerRows;
            this.tableStylerColumns = this.options.tableStylerColumns;
            this.borderProps = this.options.borderProps;
            this.pageWidth = 210;
            this._originalProps = new Asc.CTableProp(this.options.tableProps);
        },

        render: function() {
            Common.Views.AdvancedSettingsWindow.prototype.render.call(this);

            var me = this;

            this._marginsChange = function(field, newValue, oldValue, eOpts, source, property){
                if (source=='table')
                    this.TableMargins[property] = field.getNumberValue();
                else
                    this.CellMargins[property] = field.getNumberValue();
            };

            this.chWidth = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-width'),
                value: true,
                labelText: ''
            });
            this.chWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                var value = (newValue=='checked');
                this.nfWidth.setDisabled(!value);
                this.cmbUnit.setDisabled(!value);
                if (this._changedProps) {
                    if (value && this.nfWidth.getNumberValue()>0)
                        this._changedProps.put_Width(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(this.nfWidth.getNumberValue()));
                    else
                        this._changedProps.put_Width(null);
                }
            }, this));

            this.nfWidth = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-width'),
                step: .1,
                width: 115,
                defaultUnit : "cm",
                value: '10 cm',
                maxValue: 55.88,
                minValue: 0
            });
            this.nfWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps)
                    this._changedProps.put_Width(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
            }, this));

            var currmetric = Common.Utils.Metric.getCurrentMetric();
            this.cmbUnit = new Common.UI.ComboBox({
                el          : $('#tableadv-cmb-unit'),
                style       : 'width: 115px;',
                menuStyle   : 'min-width: 115px;',
                editable    : false,
                cls         : 'input-group-nr',
                data        : [
                    { value: 0, displayValue: (currmetric == Common.Utils.Metric.c_MetricUnits.pt) ? this.txtPt : ((currmetric == Common.Utils.Metric.c_MetricUnits.inch) ? this.txtInch : this.txtCm) },
                    { value: 1, displayValue: this.txtPercent }
                ]
            });
            this.cmbUnit.on('selected', _.bind(function(combo, record) {
                if (this._changedProps) {
                    var maxwidth = Common.Utils.Metric.fnRecalcFromMM(558);
                    this.nfWidth.setDefaultUnit(record.value ? '%' : Common.Utils.Metric.getCurrentMetricName());
                    this.nfWidth.setMaxValue(record.value ? parseFloat((100 * maxwidth/this.pageWidth).toFixed(2)) : maxwidth);
                    this.nfWidth.setStep((record.value || Common.Utils.Metric.getCurrentMetric()==Common.Utils.Metric.c_MetricUnits.pt) ? 1 : 0.1);
                    this.nfWidth.setValue((record.value) ? 100*this.nfWidth.getNumberValue()/this.pageWidth : this.pageWidth*this.nfWidth.getNumberValue()/100);
                    this._changedProps.put_Width(record.value ? -this.nfWidth.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(this.nfWidth.getNumberValue()));
                }
            }, this));

            this.chAllowSpacing = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-spacing'),
                value: true,
                labelText: ''
            });
            this.chAllowSpacing.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                var value = (newValue=='checked');
                if (this._changedProps) {
                    this.nfSpacing.setDisabled(!value);
                    this.ShowHideSpacing(value);

                    if (this._changedProps) {
                        if (value && this.nfSpacing.getNumberValue()>0)
                            this._changedProps.put_Spacing(Common.Utils.Metric.fnRecalcToMM(this.nfSpacing.getNumberValue()));
                        else
                            this._changedProps.put_Spacing(null);
                    }
                }
            }, this));

            this.nfSpacing = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-spacing'),
                step: .1,
                width: 115,
                defaultUnit : "cm",
                value: '0.5 cm',
                maxValue: 2.14,
                minValue: 0
            });
            this.nfSpacing.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps)
                    this._changedProps.put_Spacing(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
            }, this));
            this.spinners.push(this.nfSpacing);

            this.chAutofit = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-autofit'),
                value: true,
                labelText: this.textAutofit
            });
            this.chAutofit.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    this._changedProps.put_TableLayout((field.getValue()=='checked') ? Asc.c_oAscTableLayout.AutoFit : Asc.c_oAscTableLayout. Fixed);
                }
            }, this));

            // Margins
            this.spnTableMarginTop = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-table-top'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnTableMarginTop.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'table', 'Top');
                if (this._changedProps)  {
                    if (this._changedProps.get_DefaultMargins()===undefined)
                        this._changedProps.put_DefaultMargins(new Asc.asc_CPaddings());
                    this._changedProps.get_DefaultMargins().put_Top((this.TableMargins.Top!==null) ? Common.Utils.Metric.fnRecalcToMM(this.TableMargins.Top) : null);
                    this.TableMargins.isChanged = true;
                }
            }, this));
            this.spinners.push(this.spnTableMarginTop);

            this.spnTableMarginBottom = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-table-bottom'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnTableMarginBottom.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'table', 'Bottom');
                if (this._changedProps)  {
                    if (this._changedProps.get_DefaultMargins()===undefined)
                        this._changedProps.put_DefaultMargins(new Asc.asc_CPaddings());
                    this._changedProps.get_DefaultMargins().put_Bottom((this.TableMargins.Bottom!==null) ? Common.Utils.Metric.fnRecalcToMM(this.TableMargins.Bottom) : null);
                    this.TableMargins.isChanged = true;
                }
            }, this));
            this.spinners.push(this.spnTableMarginBottom);

            this.spnTableMarginLeft = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-table-left'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0.19 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnTableMarginLeft.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'table', 'Left');
                if (this._changedProps)  {
                    if (this._changedProps.get_DefaultMargins()===undefined)
                        this._changedProps.put_DefaultMargins(new Asc.asc_CPaddings());
                    this._changedProps.get_DefaultMargins().put_Left((this.TableMargins.Left!==null) ? Common.Utils.Metric.fnRecalcToMM(this.TableMargins.Left) : null);
                    this.TableMargins.isChanged = true;
                }
            }, this));
            this.spinners.push(this.spnTableMarginLeft);

            this.spnTableMarginRight = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-table-right'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0.19 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnTableMarginRight.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'table', 'Right');
                if (this._changedProps)  {
                    if (this._changedProps.get_DefaultMargins()===undefined)
                        this._changedProps.put_DefaultMargins(new Asc.asc_CPaddings());
                    this._changedProps.get_DefaultMargins().put_Right((this.TableMargins.Right!==null) ? Common.Utils.Metric.fnRecalcToMM(this.TableMargins.Right) : null);
                    this.TableMargins.isChanged = true;
                }
            }, this));
            this.spinners.push(this.spnTableMarginRight);

           // Cell Margins
            var setCellFlag = function() {
                if (me.CellMargins.Flag=='indeterminate')
                    me._changedProps.get_CellMargins().put_Flag(1);
                else if (me.CellMargins.Flag=='checked')
                    me._changedProps.get_CellMargins().put_Flag(0);
                else
                    me._changedProps.get_CellMargins().put_Flag(2);
            };

            this.chCellMargins = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-margins'),
                value: true,
                labelText: this.textCheckMargins
            });
            this.chCellMargins.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if ( oldValue=='checked' && this._originalProps && this._originalProps.get_CellMargins().get_Flag()==1 ) { // позволяем выставлять значение indeterminate только если исходные значения не совпадали
                    field.setValue('indeterminate', true);
                }
                this.fillMargins.call( this, field.getValue());
                this.CellMargins.Flag = field.getValue();
                if (this._changedProps) {
                    if (this._changedProps.get_CellMargins()===undefined)
                        this._changedProps.put_CellMargins(new Asc.CMargins());
                    this._changedProps.get_CellMargins().put_Left( ( this.CellMargins.Left!== null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Left) : null);
                    this._changedProps.get_CellMargins().put_Top((this.CellMargins.Top!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Top) : null);
                    this._changedProps.get_CellMargins().put_Bottom((this.CellMargins.Bottom!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Bottom) : null);
                    this._changedProps.get_CellMargins().put_Right((this.CellMargins.Right!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Right) : null);
                    setCellFlag();
                }
            }, this));

            this.spnMarginTop = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-top'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnMarginTop.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'cell', 'Top');
                if (this._changedProps)  {
                    if (this._changedProps.get_CellMargins()===undefined)
                        this._changedProps.put_CellMargins(new Asc.CMargins());
                    this._changedProps.get_CellMargins().put_Top((this.CellMargins.Top!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Top) : null);
                    setCellFlag();
                }
            }, this));
            this.spinners.push(this.spnMarginTop);

            this.spnMarginBottom = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-bottom'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnMarginBottom.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'cell', 'Bottom');
                if (this._changedProps)  {
                    if (this._changedProps.get_CellMargins()===undefined)
                        this._changedProps.put_CellMargins(new Asc.CMargins());
                    this._changedProps.get_CellMargins().put_Bottom((this.CellMargins.Bottom!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Bottom) : null);
                    setCellFlag();
                }
            }, this));
            this.spinners.push(this.spnMarginBottom);

            this.spnMarginLeft = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-left'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0.19 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnMarginLeft.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'cell', 'Left');
                if (this._changedProps)  {
                    if (this._changedProps.get_CellMargins()===undefined)
                        this._changedProps.put_CellMargins(new Asc.CMargins());
                    this._changedProps.get_CellMargins().put_Left((this.CellMargins.Left!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Left) : null);
                    setCellFlag();
                }
            }, this));
            this.spinners.push(this.spnMarginLeft);

            this.spnMarginRight = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-margin-right'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0.19 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnMarginRight.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                this._marginsChange( field, newValue, oldValue, eOpts, 'cell', 'Right');
                if (this._changedProps)  {
                    if (this._changedProps.get_CellMargins()===undefined)
                        this._changedProps.put_CellMargins(new Asc.CMargins());
                    this._changedProps.get_CellMargins().put_Right((this.CellMargins.Right!==null) ? Common.Utils.Metric.fnRecalcToMM(this.CellMargins.Right) : null);
                    setCellFlag();
                }
            }, this));
            this.spinners.push(this.spnMarginRight);

            // Cell Size
            this.chPrefWidth = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-prefwidth'),
                value: false,
                labelText: ''
            });
            this.chPrefWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                var value = (newValue=='checked');
                this.nfPrefWidth.setDisabled(!value);
                this.cmbPrefWidthUnit.setDisabled(!value);
                if (this._changedProps) {
                    if (value && this.nfPrefWidth.getNumberValue()>0)
                        this._changedProps.put_CellsWidth(this.cmbPrefWidthUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(this.nfPrefWidth.getNumberValue()));
                    else
                        this._changedProps.put_CellsWidth(null);
                }
            }, this));

            this.nfPrefWidth = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-prefwidth'),
                step: .1,
                width: 115,
                defaultUnit : "cm",
                value: '10 cm',
                maxValue: 55.88,
                minValue: 0
            });
            this.nfPrefWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps)
                    this._changedProps.put_CellsWidth(this.cmbPrefWidthUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
            }, this));

            this.cmbPrefWidthUnit = new Common.UI.ComboBox({
                el          : $('#tableadv-combo-prefwidth-unit'),
                style       : 'width: 115px;',
                menuStyle   : 'min-width: 115px;',
                editable    : false,
                cls         : 'input-group-nr',
                data        : [
                    { value: 0, displayValue: (currmetric == Common.Utils.Metric.c_MetricUnits.pt) ? this.txtPt : ((currmetric == Common.Utils.Metric.c_MetricUnits.inch) ? this.txtInch : this.txtCm) },
                    { value: 1, displayValue: this.txtPercent }
                ]
            });
            this.cmbPrefWidthUnit.on('selected', _.bind(function(combo, record) {
                if (this._changedProps) {
                    var defUnit = (record.value) ? '%' : Common.Utils.Metric.getCurrentMetricName();
                    if (this.nfPrefWidth.getUnitValue() !== defUnit) {
                        var maxwidth = Common.Utils.Metric.fnRecalcFromMM(558);
                        this.nfPrefWidth.setDefaultUnit(defUnit);
                        this.nfPrefWidth.setMaxValue(record.value ? parseFloat((100 * maxwidth/this.pageWidth).toFixed(2)) : maxwidth);
                        this.nfPrefWidth.setStep((record.value || Common.Utils.Metric.getCurrentMetric()==Common.Utils.Metric.c_MetricUnits.pt) ? 1 : 0.1);
                        this.nfPrefWidth.setValue((record.value) ? 100*this.nfPrefWidth.getNumberValue()/this.pageWidth : this.pageWidth*this.nfPrefWidth.getNumberValue()/100);
                        this._changedProps.put_CellsWidth(record.value ? -this.nfPrefWidth.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(this.nfPrefWidth.getNumberValue()));
                    }
                }
            }, this));

            this.chWrapText = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-wrap'),
                value: false,
                labelText: this.textWrapText
            });
            this.chWrapText.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    this._changedProps.put_CellsNoWrap((field.getValue()!='checked'));
                }
            }, this));

            // Wrapping

            this.btnWrapNone = new Common.UI.Button({
                cls: 'btn-options huge',
                iconCls: 'icon-right-panel btn-wrap-none',
                posId: c_tableWrap.TABLE_WRAP_NONE,
                hint: this.textWrapNoneTooltip,
                enableToggle: true,
                allowDepress: false,
                toggleGroup : 'advtablewrapGroup'
            });
            this.btnWrapNone.render( $('#tableadv-button-wrap-none')) ;
            this.btnWrapNone.on('click', _.bind(this.onBtnInlineWrapClick, this));

            this.btnWrapParallel = new Common.UI.Button({
                cls: 'btn-options huge',
                iconCls: 'icon-right-panel btn-wrap-parallel',
                posId: c_tableWrap.TABLE_WRAP_PARALLEL,
                hint: this.textWrapParallelTooltip,
                enableToggle: true,
                allowDepress: false,
                toggleGroup : 'advtablewrapGroup'
            });
            this.btnWrapParallel.render( $('#tableadv-button-wrap-parallel')) ;
            this.btnWrapParallel.on('click', _.bind(this.onBtnFlowWrapClick, this));

            this.btnAlignLeft = new Common.UI.Button({
                cls: 'btn-options huge',
                iconCls: 'icon-right-panel btn-table-align-left',
                posId: c_tableAlign.TABLE_ALIGN_LEFT,
                hint: this.textLeftTooltip,
                enableToggle: true,
                allowDepress: false,
                toggleGroup : 'advtablealignGroup'
            });
            this.btnAlignLeft.render( $('#tableadv-button-align-left')) ;
            this.btnAlignLeft.on('click', _.bind(function(btn){
                if (this._changedProps && btn.pressed) {
                    this._changedProps.put_TableAlignment(btn.options.posId);
                    this._changedProps.put_TableIndent(Common.Utils.Metric.fnRecalcToMM(this.spnIndentLeft.getNumberValue()));
                    this.spnIndentLeft.setDisabled(!btn.pressed);
                    this._state.alignChanged = true;
                }
            }, this));

            this.btnAlignCenter = new Common.UI.Button({
                cls: 'btn-options huge',
                iconCls: 'icon-right-panel btn-table-align-center',
                posId: c_tableAlign.TABLE_ALIGN_CENTER,
                hint: this.textCenterTooltip,
                enableToggle: true,
                allowDepress: false,
                toggleGroup : 'advtablealignGroup'
            });
            this.btnAlignCenter.render( $('#tableadv-button-align-center')) ;
            this.btnAlignCenter.on('click', _.bind(function(btn){
                if (this._changedProps && btn.pressed) {
                    this._changedProps.put_TableAlignment(btn.options.posId);
                    this._changedProps.put_TableIndent(0);
                    this.spnIndentLeft.setDisabled(btn.pressed);
                    this._state.alignChanged = true;
                }
            }, this));

            this.btnAlignRight = new Common.UI.Button({
                cls: 'btn-options huge',
                iconCls: 'icon-right-panel btn-table-align-right',
                posId: c_tableAlign.TABLE_ALIGN_RIGHT,
                hint: this.textRightTooltip,
                enableToggle: true,
                allowDepress: false,
                toggleGroup : 'advtablealignGroup'
            });
            this.btnAlignRight.render( $('#tableadv-button-align-right')) ;
            this.btnAlignRight.on('click', _.bind(function(btn){
                if (this._changedProps && btn.pressed) {
                    this._changedProps.put_TableAlignment(btn.options.posId);
                    this._changedProps.put_TableIndent(0);
                    this.spnIndentLeft.setDisabled(btn.pressed);
                    this._state.alignChanged = true;
                }
            }, this));

            this.spnIndentLeft = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-indent'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                defaultValue : 0,
                value: '0 cm',
                maxValue: 38.09,
                minValue: -38.09
            });
            this.spnIndentLeft.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps)  {
                    this._changedProps.put_TableIndent(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                }
            }, this));
            this.spinners.push(this.spnIndentLeft);

            this.spnDistanceTop = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-distance-top'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '1 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnDistanceTop.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_TablePaddings()===undefined)
                        this._changedProps.put_TablePaddings(new Asc.asc_CPaddings());
                    this._changedProps.get_TablePaddings().put_Top(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                }
            }, this));
            this.spinners.push(this.spnDistanceTop);

            this.spnDistanceBottom = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-distance-bottom'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '1 cm',
                maxValue: 55.87,
                minValue: 0
            });
            this.spnDistanceBottom.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_TablePaddings()===undefined)
                        this._changedProps.put_TablePaddings(new Asc.asc_CPaddings());
                    this._changedProps.get_TablePaddings().put_Bottom(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                }
            }, this));
            this.spinners.push(this.spnDistanceBottom);

            this.spnDistanceLeft = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-distance-left'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '1 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnDistanceLeft.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_TablePaddings()===undefined)
                        this._changedProps.put_TablePaddings(new Asc.asc_CPaddings());
                    this._changedProps.get_TablePaddings().put_Left(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                }
            }, this));
            this.spinners.push(this.spnDistanceLeft);

            this.spnDistanceRight = new Common.UI.MetricSpinner({
                el: $('#tableadv-number-distance-right'),
                step: .1,
                width: 85,
                defaultUnit : "cm",
                value: '0.19 cm',
                maxValue: 9.34,
                minValue: 0
            });
            this.spnDistanceRight.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_TablePaddings()===undefined)
                        this._changedProps.put_TablePaddings(new Asc.asc_CPaddings());
                    this._changedProps.get_TablePaddings().put_Right(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                }
            }, this));
            this.spinners.push(this.spnDistanceRight);

            // Position

            this.spnX = new Common.UI.MetricSpinner({
                el: $('#tableadv-spin-x'),
                step: .1,
                width: 115,
                disabled: true,
                defaultUnit : "cm",
                defaultValue : 0,
                value: '1 cm',
                maxValue: 55.87,
                minValue: -55.87
            });
            this.spnX.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                        this._changedProps.put_PositionH(new Asc.CTablePositionH());

                    this._changedProps.get_PositionH().put_UseAlign(false);
                    this._changedProps.get_PositionH().put_RelativeFrom(this._state.HPositionFrom);
                    this._changedProps.get_PositionH().put_Value(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                    this._state.spnXChanged = true;
                }
            }, this));
            this.spinners.push(this.spnX);

            this.spnY = new Common.UI.MetricSpinner({
                el: $('#tableadv-spin-y'),
                step: .1,
                width: 115,
                disabled: true,
                defaultUnit : "cm",
                defaultValue : 0,
                value: '1 cm',
                maxValue: 55.87,
                minValue: -55.87
            });
            this.spnY.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                        this._changedProps.put_PositionV(new Asc.CTablePositionV());

                    this._changedProps.get_PositionV().put_UseAlign(false);
                    this._changedProps.get_PositionV().put_RelativeFrom(this._state.VPositionFrom);
                    this._changedProps.get_PositionV().put_Value(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
                    this._state.spnYChanged = true;
                }
            }, this));
            this.spinners.push(this.spnY);

            // Horizontal
            this._arrHAlign = [
                {displayValue: this.textLeft,   value: Asc.c_oAscXAlign.Left},
                {displayValue: this.textCenter, value: Asc.c_oAscXAlign.Center},
                {displayValue: this.textRight,  value: Asc.c_oAscXAlign.Right}
            ];

            this.cmbHAlign = new Common.UI.ComboBox({
                el: $('#tableadv-combo-halign'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrHAlign
            });
            this.cmbHAlign.setValue(this._state.HAlignType);
            this.cmbHAlign.on('selected', _.bind(this.onHAlignSelect, this));

            this._arrHRelative = [
                {displayValue: this.textMargin,     value: Asc.c_oAscHAnchor.Margin},
                {displayValue: this.textPage,       value: Asc.c_oAscHAnchor.Page},
                {displayValue: this.textAnchorText, value: Asc.c_oAscHAnchor.Text}
            ];

            this.cmbHRelative = new Common.UI.ComboBox({
                el: $('#tableadv-combo-hrelative'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrHRelative
            });
            this.cmbHRelative.setValue(this._state.HAlignFrom);
            this.cmbHRelative.on('selected', _.bind(this.onHRelativeSelect, this));

            this.cmbHPosition = new Common.UI.ComboBox({
                el: $('#tableadv-combo-hposition'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrHRelative
            });
            this.cmbHPosition.setDisabled(true);
            this.cmbHPosition.setValue(this._state.HPositionFrom);
            this.cmbHPosition.on('selected', _.bind(this.onHPositionSelect, this));

            // Vertical
            this._arrVAlign = [
                {displayValue: this.textTop,   value: Asc.c_oAscYAlign.Top},
                {displayValue: this.textCenter, value: Asc.c_oAscYAlign.Center},
                {displayValue: this.textBottom,  value: Asc.c_oAscYAlign.Bottom}
            ];

            this.cmbVAlign = new Common.UI.ComboBox({
                el: $('#tableadv-combo-valign'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrVAlign
            });
            this.cmbVAlign.setValue(this._state.VAlignType);
            this.cmbVAlign.on('selected', _.bind(this.onVAlignSelect, this));

            this._arrVRelative = [
                {displayValue: this.textMargin,     value: Asc.c_oAscVAnchor.Margin},
                {displayValue: this.textPage,       value: Asc.c_oAscVAnchor.Page},
                {displayValue: this.textAnchorText, value: Asc.c_oAscVAnchor.Text}
            ];

            this.cmbVRelative = new Common.UI.ComboBox({
                el: $('#tableadv-combo-vrelative'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrVRelative
            });
            this.cmbVRelative.setValue(this._state.VAlignFrom);
            this.cmbVRelative.on('selected', _.bind(this.onVRelativeSelect, this));

            this.cmbVPosition = new Common.UI.ComboBox({
                el: $('#tableadv-combo-vposition'),
                cls: 'input-group-nr',
                menuStyle: 'min-width: 115px;',
                editable: false,
                data: this._arrVRelative
            });
            this.cmbVPosition.setDisabled(true);
            this.cmbVPosition.setValue(this._state.VPositionFrom);
            this.cmbVPosition.on('selected', _.bind(this.onVPositionSelect, this));

            this.radioHAlign = new Common.UI.RadioBox({
                el: $('#tableadv-radio-halign'),
                name: 'asc-radio-horizontal',
                checked: true
            });
            this.radioHAlign.on('change', _.bind(this.onRadioHAlignChange, this));

            this.radioHPosition = new Common.UI.RadioBox({
                el: $('#tableadv-radio-hposition'),
                name: 'asc-radio-horizontal'
            });
            this.radioHPosition.on('change', _.bind(this.onRadioHPositionChange, this));

            this.radioVAlign = new Common.UI.RadioBox({
                el: $('#tableadv-radio-valign'),
                name: 'asc-radio-vertical',
                checked: true
            });
            this.radioVAlign.on('change', _.bind(this.onRadioVAlignChange, this));

            this.radioVPosition = new Common.UI.RadioBox({
                el: $('#tableadv-radio-vposition'),
                name: 'asc-radio-vertical'
            });
            this.radioVPosition.on('change', _.bind(this.onRadioVPositionChange, this));

            this.chMove = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-move'),
                labelText: this.textMove
            });
            this.chMove.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    var value = this._arrVRelative[(field.getValue()=='checked') ? 2 : 1].value;
                    if (this.cmbVRelative.isDisabled()) {
                        this.cmbVPosition.setValue(value);
                        var rec = this.cmbVPosition.getSelectedRecord();
                        if (rec) this.onVPositionSelect(this.cmbVPosition, rec);
                    } else {
                        this.cmbVRelative.setValue(value);
                        var rec = this.cmbVRelative.getSelectedRecord();
                        if (rec) this.onVRelativeSelect(this.cmbVRelative, rec);
                    }
                }
            }, this));

            this.chOverlap = new Common.UI.CheckBox({
                el: $('#tableadv-checkbox-overlap'),
                labelText: this.textOverlap
            });
            this.chOverlap.on('change', _.bind(function(field, newValue, oldValue, eOpts){
                if (this._changedProps) {
                    this._changedProps.put_AllowOverlap(field.getValue()=='checked');
                }
            }, this));

            // Borders

            this.cmbBorderSize = new Common.UI.ComboBorderSize({
                el: $('#tableadv-combo-border-size'),
                style: "width: 93px;"
            });
            var rec = this.cmbBorderSize.store.at(1);
            this.BorderSize = {ptValue: rec.get('value'), pxValue: rec.get('pxValue')};
            this.cmbBorderSize.setValue(this.BorderSize.ptValue);
            this.cmbBorderSize.on('selected', _.bind(this.onBorderSizeSelect, this));

            this.btnBorderColor = new Common.UI.ColorButton({
                style: "width:45px;",
                menu        : new Common.UI.Menu({
                    items: [
                        { template: _.template('<div id="tableadv-border-color-menu" style="width: 169px; height: 220px; margin: 10px;"></div>') },
                        { template: _.template('<a id="tableadv-border-color-new" style="padding-left:12px;">' + me.textNewColor + '</a>') }
                    ]
                })
            });

            this.btnBorderColor.on('render:after', function(btn) {
                me.colorsBorder = new Common.UI.ThemeColorPalette({
                    el: $('#tableadv-border-color-menu')
                });
                me.colorsBorder.on('select', _.bind(me.onColorsBorderSelect, me));
            });
            this.btnBorderColor.render( $('#tableadv-border-color-btn'));
            this.btnBorderColor.setColor('000000');
            $('#tableadv-border-color-new').on('click', _.bind(this.addNewColor, this, this.colorsBorder, this.btnBorderColor));

            this.btnBackColor = new Common.UI.ColorButton({
                style: "width:45px;",
                menu        : new Common.UI.Menu({
                    items: [
                        { template: _.template('<div id="tableadv-back-color-menu" style="width: 169px; height: 220px; margin: 10px;"></div>') },
                        { template: _.template('<a id="tableadv-back-color-new" style="padding-left:12px;">' + me.textNewColor + '</a>') }
                    ]
                })
            });

            this.btnBackColor.on('render:after', function(btn) {
                me.colorsBack = new Common.UI.ThemeColorPalette({
                    el: $('#tableadv-back-color-menu'),
                    transparent: true
                });
                me.colorsBack.on('select', _.bind(me.onColorsBackSelect, me));
            });
            this.btnBackColor.render( $('#tableadv-button-back-color'));
            $('#tableadv-back-color-new').on('click', _.bind(this.addNewColor, this, this.colorsBack, this.btnBackColor));

            this.btnTableBackColor = new Common.UI.ColorButton({
                style: "width:45px;",
                menu        : new Common.UI.Menu({
                    items: [
                        { template: _.template('<div id="tableadv-table-back-color-menu" style="width: 169px; height: 220px; margin: 10px;"></div>') },
                        { template: _.template('<a id="tableadv-table-back-color-new" style="padding-left:12px;">' + me.textNewColor + '</a>') }
                    ]
                })
            });

            this.btnTableBackColor.on('render:after', function(btn) {
                me.colorsTableBack = new Common.UI.ThemeColorPalette({
                    el: $('#tableadv-table-back-color-menu'),
                    transparent: true
                });
                me.colorsTableBack.on('select', _.bind(me.onColorsTableBackSelect, me));
            });
            this.btnTableBackColor.render( $('#tableadv-button-table-back-color'));
            $('#tableadv-table-back-color-new').on('click', _.bind(this.addNewColor, this, this.colorsTableBack, this.btnTableBackColor));

            this.tableBordersImageSpacing = new Common.UI.TableStyler({
                el: $('#id-detablestyler-spacing'),
                width: 200,
                height: 200,
                rows: this.tableStylerRows,
                columns: this.tableStylerColumns,
                spacingMode: true
            });

            this.tableBordersImage = new Common.UI.TableStyler({
                el: $('#id-detablestyler'),
                width: 200,
                height: 200,
                rows: this.tableStylerRows,
                columns: this.tableStylerColumns,
                spacingMode: false
            });

            var _arrBorderPresets = [
                ['cm',      'btn-borders-large btn-adv-position-inner', 'tableadv-button-border-inner',     this.tipInner],
                ['lrtb',    'btn-borders-large btn-adv-position-outer', 'tableadv-button-border-outer',     this.tipOuter],
                ['lrtbcm',  'btn-borders-large btn-adv-position-all',   'tableadv-button-border-all',       this.tipAll],
                ['',        'btn-borders-large btn-adv-position-none',  'tableadv-button-border-none',      this.tipNone]
            ];

            this._btnsBorderPosition = [];
            _.each(_arrBorderPresets, function(item, index, list){
                var _btn = new Common.UI.Button({
                    style: 'margin-left: 5px; margin-bottom: 4px;',
                    cls: 'btn-options large',
                    iconCls: item[1],
                    strId   :item[0],
                    hint: item[3]
                });
                _btn.render( $('#'+item[2])) ;
                _btn.on('click', _.bind(this._ApplyBorderPreset, this));
                this._btnsBorderPosition.push( _btn );
            }, this);


            var _arrTableBorderPresets = [
                ['cm', '',          'btn-borders-large btn-adv-position-inner-none',    'tableadv-button-border-inner-none',    this.tipCellInner],
                ['lrtb', '',        'btn-borders-large btn-adv-position-outer-none',    'tableadv-button-border-outer-none',    this.tipCellOuter],
                ['lrtbcm', '',      'btn-borders-large btn-adv-position-all-none',      'tableadv-button-border-all-none',      this.tipCellAll],
                ['', '',            'btn-borders-large btn-adv-position-none-none',     'tableadv-button-border-none-none',     this.tipNone],
                ['lrtbcm', 'lrtb',  'btn-borders-large btn-adv-position-all-table',     'tableadv-button-border-all-table',     this.tipTableOuterCellAll],
                ['', 'lrtb',        'btn-borders-large btn-adv-position-none-table',    'tableadv-button-border-none-table',    this.tipOuter],
                ['cm', 'lrtb',      'btn-borders-large btn-adv-position-inner-table',   'tableadv-button-border-inner-table',   this.tipTableOuterCellInner],
                ['lrtb', 'lrtb',    'btn-borders-large btn-adv-position-outer-table',   'tableadv-button-border-outer-table',   this.tipTableOuterCellOuter]
            ];

            this._btnsTableBorderPosition = [];
            _.each(_arrTableBorderPresets, function(item, index, list){
                var _btn = new Common.UI.Button({
                    style: 'margin-left: 5px; margin-bottom: 4px;',
                    cls: 'btn-options large',
                    iconCls: item[2],
                    strCellId  :item[0],
                    strTableId :item[1],
                    hint: item[4]
                });
                _btn.render( $('#'+item[3])) ;
                _btn.on('click', _.bind(this._ApplyBorderPreset, this));
                this._btnsTableBorderPosition.push( _btn );
            }, this);

            // Alt Text

            this.inputAltTitle = new Common.UI.InputField({
                el          : $('#table-advanced-alt-title'),
                allowBlank  : true,
                validateOnBlur: false,
                style       : 'width: 100%;'
            }).on('changed:after', function() {
                me.isAltTitleChanged = true;
            });

            this.textareaAltDescription = this.$window.find('textarea');
            this.textareaAltDescription.keydown(function (event) {
                if (event.keyCode == Common.UI.Keys.RETURN) {
                    event.stopPropagation();
                }
                me.isAltDescChanged = true;
            });

            this.AlignContainer = $('#tableadv-panel-align');
            this.DistanceContainer = $('#tableadv-panel-distance');

            this.BordersContainer = $('#tableadv-panel-borders');
            this.BordersSpacingContainer = $('#tableadv-panel-borders-spacing');
            this.CellBackContainer = $('#tableadv-panel-cell-back');
            this.TableBackContainer = $('#tableadv-panel-table-back');

            this.btnsCategory[1].on('click', _.bind(this.onCellCategoryClick, this));
            this.afterRender();
        },

        afterRender: function() {
            this.updateMetricUnit();
            this.updateThemeColors();

            this._setDefaults(this._originalProps);

            if (this.borderProps !== undefined) {
                this.btnBorderColor.setColor(this.borderProps.borderColor);
                var colorstr = (typeof(this.borderProps.borderColor) == 'object') ? this.borderProps.borderColor.color : this.borderProps.borderColor;
                this.tableBordersImageSpacing.setVirtualBorderColor(colorstr);
                this.tableBordersImage.setVirtualBorderColor(colorstr);

                this.cmbBorderSize.setValue(this.borderProps.borderSize.ptValue);
                var rec = this.cmbBorderSize.getSelectedRecord();
                if (rec)
                    this.onBorderSizeSelect(this.cmbBorderSize, rec);

                this.colorsBorder.select(this.borderProps.borderColor, true);
            }

            for (var i=0; i<this.tableBordersImageSpacing.rows; i++) {
                for (var j=0; j<this.tableBordersImageSpacing.columns; j++) {
                    this.tableBordersImageSpacing.getCell(j, i).on('borderclick', function(ct, border, size, color){
                        if (this.ChangedCellBorders===undefined) {
                            this.ChangedCellBorders = new Asc.CBorders();
                        }
                        this._UpdateCellBordersStyle(ct, border, size, color, this.CellBorders, this.ChangedCellBorders);
                    }, this);
                }
            }
            this.tableBordersImageSpacing.on('borderclick', function(ct, border, size, color){
                if (this.ChangedTableBorders===undefined) {
                    this.ChangedTableBorders = new Asc.CBorders();
                }
                this._UpdateTableBordersStyle(ct, border, size, color, this.TableBorders, this.ChangedTableBorders);
            }, this);

            for (i=0; i<this.tableBordersImage.rows; i++) {
                for (j=0; j<this.tableBordersImage.columns; j++) {
                    this.tableBordersImage.getCell(j, i).on('borderclick', function(ct, border, size, color){
                        if (this._allTable) {
                            if (this.ChangedTableBorders===undefined) {
                                this.ChangedTableBorders = new Asc.CBorders();
                            }
                        } else {
                            if (this.ChangedCellBorders===undefined) {
                                this.ChangedCellBorders = new Asc.CBorders();
                            }
                        }
                        this._UpdateCellBordersStyle(ct, border, size, color, (this._allTable) ? this.TableBorders : this.CellBorders, (this._allTable) ? this.ChangedTableBorders : this.ChangedCellBorders);
                    }, this);
                }
            }
            this.tableBordersImage.on('borderclick', function(ct, border, size, color){
                if (this._allTable) {
                    if (this.ChangedTableBorders===undefined) {
                        this.ChangedTableBorders = new Asc.CBorders();
                    }
                } else {
                    if (this.ChangedCellBorders===undefined) {
                        this.ChangedCellBorders = new Asc.CBorders();
                    }
                }
                this._UpdateTableBordersStyle(ct, border, size, color, (this._allTable) ? this.TableBorders : this.CellBorders, (this._allTable) ? this.ChangedTableBorders : this.ChangedCellBorders);
            }, this);

            var cellcolorstr = (typeof(this.CellColor.Color) == 'object') ? this.CellColor.Color.color : this.CellColor.Color,
                tablecolorstr = (typeof(this.TableColor.Color) == 'object') ? this.TableColor.Color.color : this.TableColor.Color;
            this.tableBordersImageSpacing.setTableColor(tablecolorstr);
            this.tableBordersImage.setTableColor(tablecolorstr);
            this.tableBordersImageSpacing.setCellsColor(cellcolorstr);
            this.tableBordersImage.setCellsColor((this._allTable) ? tablecolorstr : cellcolorstr);

            if (this.storageName) {
                var value = Common.localStorage.getItem(this.storageName);
                this.setActiveCategory((value!==null) ? parseInt(value) : 0);
            }
        },

        getSettings: function() {
            if (this._cellBackground) {
                if (this._allTable) {
                    if ( this._changedProps.get_Spacing() === null || (this._changedProps.get_Spacing() === undefined && this._originalProps.get_Spacing()===null))
                        this._changedProps.put_CellsBackground(null);
                    else
                        this._changedProps.put_CellsBackground(this._cellBackground);
                } else
                    this._changedProps.put_CellsBackground(this._cellBackground);
            }

            if ( this.ChangedTableBorders === null ) {
                this._changedProps.put_TableBorders(this.TableBorders);
            } else if (this.ChangedTableBorders !== undefined) {
                this._changedProps.put_TableBorders(this.ChangedTableBorders);
            }

            if ( this.ChangedCellBorders === null ) {
                this._changedProps.put_CellBorders(this.CellBorders);
            } else if (this.ChangedCellBorders !== undefined) {
                this._changedProps.put_CellBorders(this.ChangedCellBorders);
            }

            if (this.isAltTitleChanged)
                this._changedProps.put_TableCaption(this.inputAltTitle.getValue());

            if (this.isAltDescChanged)
                this._changedProps.put_TableDescription(this.textareaAltDescription.val());

            return { tableProps: this._changedProps, borderProps: {borderSize: this.BorderSize, borderColor: this.btnBorderColor.color} };
        },

        _setDefaults: function(props) {
            if (props ){
                this._allTable = !props.get_CellSelect();
                this.pageWidth = Common.Utils.Metric.fnRecalcFromMM(props.get_PercentFullWidth());

                var value,
                    TableWidth = props.get_Width(),
                    currmetric = Common.Utils.Metric.getCurrentMetric();

                // main props
                this.cmbUnit.store.at(0).set('displayValue', (currmetric == Common.Utils.Metric.c_MetricUnits.pt) ? this.txtPt : ((currmetric == Common.Utils.Metric.c_MetricUnits.inch) ? this.txtInch : this.txtCm));
                this.cmbUnit.setValue(TableWidth<0 ? 1 : 0);
                this.nfWidth.setDefaultUnit(TableWidth<0 ? '%' : Common.Utils.Metric.getCurrentMetricName());
                if (TableWidth<0) //%
                    this.nfWidth.setMaxValue(parseFloat((100 * Common.Utils.Metric.fnRecalcFromMM(558)/this.pageWidth).toFixed(2)));
                this.nfWidth.setStep((TableWidth<0 || Common.Utils.Metric.getCurrentMetric()==Common.Utils.Metric.c_MetricUnits.pt) ? 1 : 0.1);
                if (TableWidth !== null)
                    this.nfWidth.setValue(TableWidth>0 ? Common.Utils.Metric.fnRecalcFromMM(TableWidth) : -TableWidth , true);

                this.chWidth.setValue(TableWidth !== null, true);
                value = (this.chWidth.getValue()!=='checked');
                this.nfWidth.setDisabled(value);
                this.cmbUnit.setDisabled(value);

                var TableSpacing = props.get_Spacing();
                if (TableSpacing !== null) {
                    this.nfSpacing.setValue(Common.Utils.Metric.fnRecalcFromMM(TableSpacing), true);
                }

                this.chAllowSpacing.setValue(TableSpacing !== null, true);
                this.nfSpacing.setDisabled(this.chAllowSpacing.getValue()!=='checked');

                var autoFit = props.get_TableLayout();
                this.chAutofit.setDisabled(autoFit===undefined);
                this.chAutofit.setValue(autoFit===Asc.c_oAscTableLayout.AutoFit, true);

                // margins
                var margins = props.get_DefaultMargins();
                if (margins) {
                    this.TableMargins = {
                        Left   : (margins.get_Left() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Left()) : null,
                        Right  : (margins.get_Right() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Right()) : null,
                        Top    : (margins.get_Top() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Top()) : null,
                        Bottom : (margins.get_Bottom() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Bottom()) : null
                    };
                }

                margins = props.get_CellMargins();
                var flag = undefined;
                if (margins) {
                    this.CellMargins = {
                        Left   : (margins.get_Left() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Left()) : null,
                        Right  : (margins.get_Right() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Right()) : null,
                        Top    : (margins.get_Top() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Top()) : null,
                        Bottom : (margins.get_Bottom() !==null) ? Common.Utils.Metric.fnRecalcFromMM(margins.get_Bottom()) : null
                    };
                    flag = margins.get_Flag();
                    this.CellMargins.Flag = (flag==1) ? 'indeterminate' : ((flag==0) ? 'checked' : 'unchecked');
                    this.chCellMargins.setValue( this.CellMargins.Flag, true);
                }

                if ( flag===0 ) {
                    // Если для всех выделенных ячеек пришло одинаковое значение Flag=0 (Use Default Margins), выставим в поля для Cell Margins значения DefaultMargins
                    if (this.CellMargins.Left=== null) this.CellMargins.Left = this.TableMargins.Left;
                    if (this.CellMargins.Top=== null) this.CellMargins.Top = this.TableMargins.Top;
                    if (this.CellMargins.Right=== null) this.CellMargins.Right = this.TableMargins.Right;
                    if (this.CellMargins.Bottom=== null) this.CellMargins.Bottom = this.TableMargins.Bottom;
                }

                this.fillMargins(this.CellMargins.Flag);

                // Cell Size
                var cellWidth = props.get_CellsWidth();

                this.cmbPrefWidthUnit.store.at(0).set('displayValue', (currmetric == Common.Utils.Metric.c_MetricUnits.pt) ? this.txtPt : ((currmetric == Common.Utils.Metric.c_MetricUnits.inch) ? this.txtInch : this.txtCm));
                this.cmbPrefWidthUnit.setValue(cellWidth<0 ? 1 : 0);
                this.nfPrefWidth.setDefaultUnit(cellWidth<0 ? '%' : Common.Utils.Metric.getCurrentMetricName());
                if (cellWidth<0) //%
                    this.nfPrefWidth.setMaxValue(parseFloat((100 * Common.Utils.Metric.fnRecalcFromMM(558)/this.pageWidth).toFixed(2)));
                this.nfPrefWidth.setStep((cellWidth<0 || Common.Utils.Metric.getCurrentMetric()==Common.Utils.Metric.c_MetricUnits.pt) ? 1 : 0.1);
                if (cellWidth !== null)
                    this.nfPrefWidth.setValue(cellWidth>0 ? Common.Utils.Metric.fnRecalcFromMM(cellWidth) : -cellWidth , true);

                this.chPrefWidth.setValue((props.get_CellsWidthNotEqual()) ? 'indeterminate' : (cellWidth !== null), true);
                value = (this.chPrefWidth.getValue()!=='checked');
                this.nfPrefWidth.setDisabled(value);
                this.cmbPrefWidthUnit.setDisabled(value);

                var wrapText = !props.get_CellsNoWrap();
                this.chWrapText.setValue(wrapText, true);

                // wrapping props
                this._TblWrapStyleChanged(props.get_TableWrap());
                this.ShowHideWrap(props.get_TableWrap()===c_tableWrap.TABLE_WRAP_NONE);
                this.btnWrapParallel.setDisabled(!props.get_CanBeFlow());
                // align props
                var tableAlign = props.get_TableAlignment();
                if ( tableAlign !== null ) {
                    this._TblAlignChanged(tableAlign);
                    this.spnIndentLeft.setValue(tableAlign !== c_tableAlign.TABLE_ALIGN_LEFT ? 0 : Common.Utils.Metric.fnRecalcFromMM(props.get_TableIndent()), true);
                    this.spnIndentLeft.setDisabled(tableAlign !== c_tableAlign.TABLE_ALIGN_LEFT);
                }
                this._state.alignChanged = false;

                // distances & position
                var paddings = props.get_TablePaddings();
                if (paddings) {
                    this.spnDistanceTop.setValue(Common.Utils.Metric.fnRecalcFromMM(paddings.get_Top()), true);
                    this.spnDistanceLeft.setValue(Common.Utils.Metric.fnRecalcFromMM(paddings.get_Left()), true);
                    this.spnDistanceBottom.setValue(Common.Utils.Metric.fnRecalcFromMM(paddings.get_Bottom()), true);
                    this.spnDistanceRight.setValue(Common.Utils.Metric.fnRecalcFromMM(paddings.get_Right()), true);
                }

                var Position = props.get_PositionH();
                if (Position) {
                    value = Position.get_RelativeFrom();
                    for (var i=0; i<this._arrHRelative.length; i++) {
                        if (value == this._arrHRelative[i].value) {
                            this.cmbHRelative.setValue(value);
                            this.cmbHPosition.setValue(value);
                            this._state.HPositionFrom = value;
                            this._state.HAlignFrom = value;
                            break;
                        }
                    }

                    if (Position.get_UseAlign()) {
                        value = Position.get_Align();
                        for (var i=0; i<this._arrHAlign.length; i++) {
                            if (value == this._arrHAlign[i].value) {
                                this.cmbHAlign.setValue(value);
                                this._state.HAlignType = value;
                                break;
                            }
                        }
                        value = this._originalProps.get_Value_X(this._state.HPositionFrom);
                        this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                    } else {
                        this.radioHPosition.setValue(true);
                        value = Position.get_Value();
                        this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                    }
                } else {
                    value = this._originalProps.get_Value_X(this._state.HPositionFrom);
                    this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                }

                Position = props.get_PositionV();
                if (Position) {
                    value = Position.get_RelativeFrom();
                    for (i=0; i<this._arrVRelative.length; i++) {
                        if (value == this._arrVRelative[i].value) {
                            this.cmbVRelative.setValue(value);
                            this.cmbVPosition.setValue(value);
                            this._state.VAlignFrom = value;
                            this._state.VPositionFrom = value;
                            break;
                        }
                    }
                    if (value==Asc.c_oAscVAnchor.Text)
                        this.chMove.setValue(true, true);

                    if (Position.get_UseAlign()) {
                        value = Position.get_Align();
                        for (i=0; i<this._arrVAlign.length; i++) {
                            if (value == this._arrVAlign[i].value) {
                                this.cmbVAlign.setValue(value);
                                this._state.VAlignType = value;
                                break;
                            }
                        }
                        value = props.get_Value_Y(this._state.VPositionFrom);
                        this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                    } else {
                        this.radioVPosition.setValue(true);
                        value = Position.get_Value();
                        this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                    }
                } else {
                    value = props.get_Value_Y(this._state.VPositionFrom);
                    this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(value));
                }

                this.chOverlap.setValue((props.get_AllowOverlap() !== null ) ? props.get_AllowOverlap() : 'indeterminate', true);
                this._state.verticalPropChanged = false;
                this._state.horizontalPropChanged = false;

                // borders
                this.TableBorders = new Asc.CBorders(props.get_TableBorders());

                this.CellBorders = new Asc.CBorders(props.get_CellBorders());

                this._UpdateBordersNoSpacing_();
                this._UpdateBordersSpacing_();

                var disable_inner = (this.CellBorders.get_InsideV()=== null && this.CellBorders.get_InsideH()=== null);
                this._btnsBorderPosition[0].setDisabled(disable_inner && !this._allTable);
                this._btnsTableBorderPosition[0].setDisabled(disable_inner && !this._allTable);
                this._btnsTableBorderPosition[6].setDisabled(disable_inner && !this._allTable);

                // background colors
                var background = props.get_TableBackground();
                if (background && background.get_Value()==0) {
                    var color = background.get_Color();
                    if (color) {
                        if (color.get_type() == Asc.c_oAscColor.COLOR_TYPE_SCHEME) {
                            this.TableColor = {Value: 1, Color: {color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()), effectValue: color.get_value() }};
                        } else {
                            this.TableColor = {Value: 1, Color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b())};
                        }
                    } else
                        this.TableColor = {Value: 1, Color: 'transparent'};
                } else
                    this.TableColor = {Value: 0, Color: 'transparent'};

                background = props.get_CellsBackground();
                if (background) {
                    if (background.get_Value()==0) {
                        var color = background.get_Color();
                        if (color) {
                            if (color.get_type() == Asc.c_oAscColor.COLOR_TYPE_SCHEME) {
                                this.CellColor = {Value: 1, Color: {color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()), effectValue: color.get_value() }};
                            } else {
                                this.CellColor = {Value: 1, Color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b())};
                            }
                        } else
                            this.CellColor = {Value: 1, Color: 'transparent'};
                    } else
                        this.CellColor = {Value: 1, Color: 'transparent'};
                } else
                    this.CellColor = {Value: 0, Color: 'transparent'};

                this.btnBackColor.setColor(this.CellColor.Color);
                if ( typeof(this.CellColor.Color) == 'object' ) {
                    var isselected = false;
                    for (var i=0; i<10; i++) {
                        if ( Common.Utils.ThemeColor.ThemeValues[i] == this.CellColor.Color.effectValue ) {
                            this.colorsBack.select(this.CellColor.Color,true);
                            isselected = true;
                            break;
                        }
                    }
                    if (!isselected) this.colorsBack.clearSelection();
                } else
                    this.colorsBack.select(this.CellColor.Color,true);

                this.btnTableBackColor.setColor(this.TableColor.Color);
                if ( typeof(this.TableColor.Color) == 'object' ) {
                    var isselected = false;
                    for (var i=0; i<10; i++) {
                        if ( Common.Utils.ThemeColor.ThemeValues[i] == this.TableColor.Color.effectValue ) {
                            this.colorsTableBack.select(this.TableColor.Color,true);
                            isselected = true;
                            break;
                        }
                    }
                    if (!isselected) this.colorsTableBack.clearSelection();
                } else
                    this.colorsTableBack.select(this.TableColor.Color,true);

                this.ShowHideSpacing(this.chAllowSpacing.getValue()==='checked');

                value = props.get_TableCaption();
                this.inputAltTitle.setValue(value ? value : '');

                value = props.get_TableDescription();
                this.textareaAltDescription.val(value ? value : '');
            }
            this._changedProps = new Asc.CTableProp();
            this._changedProps.put_CellSelect(!this._allTable);
            this._cellBackground = null;
            this.ChangedTableBorders = undefined;
            this.ChangedCellBorders = undefined;
        },

        fillMargins : function (checkMarginsState) {
            this.spnMarginLeft.setValue((this.CellMargins.Left!== null) ? this.CellMargins.Left : '', true);
            this.spnMarginTop.setValue((this.CellMargins.Top!== null) ? this.CellMargins.Top : '', true);
            this.spnMarginRight.setValue((this.CellMargins.Right!== null) ? this.CellMargins.Right : '', true);
            this.spnMarginBottom.setValue((this.CellMargins.Bottom!== null) ? this.CellMargins.Bottom : '', true);
            var disabled = (checkMarginsState=='checked');
            this.spnMarginTop.setDisabled(disabled);
            this.spnMarginBottom.setDisabled(disabled);
            this.spnMarginLeft.setDisabled(disabled);
            this.spnMarginRight.setDisabled(disabled);
            this.spnTableMarginLeft.setValue((this.TableMargins.Left!== null) ? this.TableMargins.Left : '', true);
            this.spnTableMarginTop.setValue((this.TableMargins.Top!== null) ? this.TableMargins.Top : '', true);
            this.spnTableMarginRight.setValue((this.TableMargins.Right!== null) ? this.TableMargins.Right : '', true);
            this.spnTableMarginBottom.setValue((this.TableMargins.Bottom!== null) ? this.TableMargins.Bottom : '', true);
        },

        _TblWrapStyleChanged: function(style) {
            if (style==c_tableWrap.TABLE_WRAP_NONE)
                this.btnWrapNone.toggle(true);
            else
                this.btnWrapParallel.toggle(true);
            this._state.fromWrapInline = (style==c_tableWrap.TABLE_WRAP_NONE);
        },

        _TblAlignChanged: function(style) {
            if (style==c_tableAlign.TABLE_ALIGN_LEFT)
                this.btnAlignLeft.toggle(true, true);
            else if (style==c_tableAlign.TABLE_ALIGN_CENTER)
                this.btnAlignCenter.toggle(true, true);
            else
                this.btnAlignRight.toggle(true, true);
        },

        onBtnInlineWrapClick: function(btn, e) {
            this.ShowHideWrap(true);
            if (this._changedProps && btn.pressed) {
                if (this._state.alignChanged) {
                    if (this._state.HAlignType===Asc.c_oAscXAlign.Left)
                        this.btnAlignLeft.toggle(true);
                    else if (this._state.HAlignType==Asc.c_oAscXAlign.Center)
                        this.btnAlignCenter.toggle(true);
                    else if (this._state.HAlignType==Asc.c_oAscXAlign.Right)
                        this.btnAlignRight.toggle(true);
                    this._state.alignChanged = false;
                }

                this._changedProps.put_TableWrap(btn.options.posId);
                if (this.btnAlignLeft.pressed) this._changedProps.put_TableAlignment(c_tableAlign.TABLE_ALIGN_LEFT);
                else if (this.btnAlignCenter.pressed) this._changedProps.put_TableAlignment(c_tableAlign.TABLE_ALIGN_CENTER);
                else  this._changedProps.put_TableAlignment(c_tableAlign.TABLE_ALIGN_RIGHT);
                this.spnIndentLeft.setDisabled(!this.btnAlignLeft.pressed);
                this._changedProps.put_TableIndent(Common.Utils.Metric.fnRecalcToMM(this.spnIndentLeft.getNumberValue()));
            }
        },

        onBtnFlowWrapClick: function(btn, e) {
            this.ShowHideWrap(false);
            if (this._changedProps && btn.pressed) {
                this._changedProps.put_TableWrap(btn.options.posId);
                this._changedProps.put_TableAlignment(null);
                this._changedProps.put_TableIndent(null);
                if (this._state.fromWrapInline && !this._state.verticalPropChanged) {
                    this.radioVPosition.setValue(true);
                }
                if (this._state.alignChanged) {
                    if (this.btnAlignLeft.pressed) this._state.HAlignType = Asc.c_oAscXAlign.Left;
                    else if (this.btnAlignCenter.pressed) this._state.HAlignType = Asc.c_oAscXAlign.Center;
                    else  this._state.HAlignType = Asc.c_oAscXAlign.Right;
                    this.cmbHAlign.setValue(this._state.HAlignType);
                    this.radioHAlign.setValue(true);
                    if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                        this._changedProps.put_PositionH(new Asc.CTablePositionH());

                    this._changedProps.get_PositionH().put_UseAlign(true);
                    this._changedProps.get_PositionH().put_Align(this._state.HAlignType);
                    this._changedProps.get_PositionH().put_RelativeFrom(this._state.HAlignFrom);
                    this._state.alignChanged = false;
                    this._state.horizontalPropChanged = true;
                } else if (this._state.fromWrapInline && !this._state.horizontalPropChanged) {
                    this.radioHPosition.setValue(true);
                }
            }
        },

        onHAlignSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                    this._changedProps.put_PositionH(new Asc.CTablePositionH());

                this._state.HAlignType = record.value;
                this._changedProps.get_PositionH().put_UseAlign(true);
                this._changedProps.get_PositionH().put_RelativeFrom(this._state.HAlignFrom);
                this._changedProps.get_PositionH().put_Align(this._state.HAlignType);
                this._state.alignChanged = true;
            }
        },

        onHRelativeSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                    this._changedProps.put_PositionH(new Asc.CTablePositionH());

                this._state.HAlignFrom = record.value;
                this._changedProps.get_PositionH().put_UseAlign(true);
                this._changedProps.get_PositionH().put_RelativeFrom(this._state.HAlignFrom);
                this._changedProps.get_PositionH().put_Align(this._state.HAlignType);
            }
        },

        onHPositionSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                    this._changedProps.put_PositionH(new Asc.CTablePositionH());

                this._state.HPositionFrom = record.value;
                this._changedProps.get_PositionH().put_UseAlign(false);
                this._changedProps.get_PositionH().put_RelativeFrom(this._state.HPositionFrom);
                if (!this._state.spnXChanged) {
                    var val = this._originalProps.get_Value_X(this._state.HPositionFrom);
                    this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(val), true);
                }
                this._changedProps.get_PositionH().put_Value(Common.Utils.Metric.fnRecalcToMM(this.spnX.getNumberValue()));
            }
        },

        onVAlignSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                    this._changedProps.put_PositionV(new Asc.CTablePositionV());

                this._state.VAlignType = record.value;
                this._changedProps.get_PositionV().put_UseAlign(true);
                this._changedProps.get_PositionV().put_RelativeFrom(this._state.VAlignFrom);
                this._changedProps.get_PositionV().put_Align(this._state.VAlignType);
            }
        },

        onVRelativeSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                    this._changedProps.put_PositionV(new Asc.CTablePositionV());

                this._state.VAlignFrom = record.value;
                this._changedProps.get_PositionV().put_UseAlign(true);
                this._changedProps.get_PositionV().put_RelativeFrom(this._state.VAlignFrom);
                this._changedProps.get_PositionV().put_Align(this._state.VAlignType);

                this.chMove.setValue(this._state.VAlignFrom==Asc.c_oAscVAnchor.Text, true);
            }
        },

        onVPositionSelect: function(combo, record){
            if (this._changedProps) {
                if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                    this._changedProps.put_PositionV(new Asc.CTablePositionV());

                this._state.VPositionFrom = record.value;
                this._changedProps.get_PositionV().put_UseAlign(false);
                this._changedProps.get_PositionV().put_RelativeFrom(this._state.VPositionFrom);
                if (!this._state.spnYChanged) {
                    var val = this._originalProps.get_Value_Y(this._state.VPositionFrom);
                    this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(val), true);
                }
                this._changedProps.get_PositionV().put_Value(Common.Utils.Metric.fnRecalcToMM(this.spnY.getNumberValue()));
                this.chMove.setValue(this._state.VPositionFrom==Asc.c_oAscVAnchor.Text, true);
            }
        },

        onRadioHAlignChange: function(field, newValue, eOpts) {
            if (this._changedProps) {
                if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                    this._changedProps.put_PositionH(new Asc.CTablePositionH());

                this._changedProps.get_PositionH().put_UseAlign(newValue);
                if (newValue) {
                    this._changedProps.get_PositionH().put_Align(this._state.HAlignType);
                    this._changedProps.get_PositionH().put_RelativeFrom(this._state.HAlignFrom);
                }
            }
            if (newValue) {
                this.cmbHAlign.setDisabled(false);
                this.cmbHRelative.setDisabled(false);
                this.spnX.setDisabled(true);
                this.cmbHPosition.setDisabled(true);
                this._state.horizontalPropChanged = true;
                this._state.alignChanged = true;
            }
        },

        onRadioHPositionChange: function(field, newValue, eOpts) {
            if (this._changedProps) {
                if (this._changedProps.get_PositionH()===null || this._changedProps.get_PositionH()===undefined)
                    this._changedProps.put_PositionH(new Asc.CTablePositionH());

                this._changedProps.get_PositionH().put_UseAlign(!newValue);
                if (newValue) {
                    if (!this._state.spnXChanged) {
                        var val = this._originalProps.get_Value_X(this._state.HPositionFrom);
                        this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(val));
                    }
                    this._changedProps.get_PositionH().put_Value(Common.Utils.Metric.fnRecalcToMM(this.spnX.getNumberValue()));
                    this._changedProps.get_PositionH().put_RelativeFrom(this._state.HPositionFrom);
                }
            }
            if (newValue) {
                this.cmbHAlign.setDisabled(true);
                this.cmbHRelative.setDisabled(true);
                this.spnX.setDisabled(false);
                this.cmbHPosition.setDisabled(false);
                this._state.alignChanged = false;
            }
        },

        onRadioVAlignChange: function(field, newValue, eOpts) {
            if (this._changedProps) {
                if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                    this._changedProps.put_PositionV(new Asc.CTablePositionV());

                this._changedProps.get_PositionV().put_UseAlign(newValue);
                if (newValue) {
                    this._changedProps.get_PositionV().put_Align(this._state.VAlignType);
                    this._changedProps.get_PositionV().put_RelativeFrom(this._state.VAlignFrom);
                    this._state.verticalPropChanged = true;
                }
            }
            if (newValue) {
                this.cmbVAlign.setDisabled(false);
                this.cmbVRelative.setDisabled(false);
                this.spnY.setDisabled(true);
                this.cmbVPosition.setDisabled(true);
                this.chMove.setValue(this._state.VAlignFrom==Asc.c_oAscVAnchor.Text, true);
            }
        },

        onRadioVPositionChange: function(field, newValue, eOpts) {
            if (this._changedProps) {
                if (this._changedProps.get_PositionV()===null || this._changedProps.get_PositionV()===undefined)
                    this._changedProps.put_PositionV(new Asc.CTablePositionV());

                this._changedProps.get_PositionV().put_UseAlign(!newValue);
                if (newValue) {
                    if (!this._state.spnYChanged) {
                        var val = this._originalProps.get_Value_Y(this._state.VPositionFrom);
                        this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(val));
                    }
                    this._changedProps.get_PositionV().put_Value(Common.Utils.Metric.fnRecalcToMM(this.spnY.getNumberValue()));
                    this._changedProps.get_PositionV().put_RelativeFrom(this._state.VPositionFrom);
                }
            }
            if (newValue) {
                this.cmbVAlign.setDisabled(true);
                this.cmbVRelative.setDisabled(true);
                this.spnY.setDisabled(false);
                this.cmbVPosition.setDisabled(false);
                this.chMove.setValue(this._state.VPositionFrom==Asc.c_oAscVAnchor.Text, true);
            }
        },

        onBorderSizeSelect: function(combo, record) {
            this.BorderSize = {ptValue: record.value, pxValue: record.pxValue};
            this.tableBordersImage.setVirtualBorderSize( this.BorderSize.pxValue );
            this.tableBordersImageSpacing.setVirtualBorderSize( this.BorderSize.pxValue );
        },

        addNewColor: function(picker, btn) {
            picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color);
        },

        onColorsBorderSelect: function(picker, color) {
            this.btnBorderColor.setColor(color);
            var colorstr = (typeof(color) == 'object') ? color.color : color;
            this.tableBordersImage.setVirtualBorderColor(colorstr);
            this.tableBordersImageSpacing.setVirtualBorderColor(colorstr);
        },

        onColorsBackSelect: function(picker, color) {
            this.btnBackColor.setColor(color);
            this.CellColor = {Value: 1, Color: color};

            if (this._cellBackground === null)
                this._cellBackground = new Asc.CBackground();

            if (this.CellColor.Color=='transparent') {
                this._cellBackground.put_Value(1);
                this._cellBackground.put_Color(new Asc.asc_CColor(0,0,0));
            } else {
                this._cellBackground.put_Value(0);
                this._cellBackground.put_Color(Common.Utils.ThemeColor.getRgbColor(this.CellColor.Color));
            }
            var colorstr = (typeof(color) == 'object') ? color.color : color;
            this.tableBordersImageSpacing.setCellsColor(colorstr);
            if (!this._allTable)
                this.tableBordersImage.setCellsColor(colorstr);
        },

        onColorsTableBackSelect: function(picker, color) {
            this.btnTableBackColor.setColor(color);
            this.TableColor.Color = color;

            if (this._changedProps) {
                var background = this._changedProps.get_TableBackground();
                if (background===undefined) {
                    background = new Asc.CBackground();
                    this._changedProps.put_TableBackground(background);
                }
                if (this.TableColor.Color=='transparent') {
                    background.put_Value(1);
                    background.put_Color(new Asc.asc_CColor(0, 0,0));
                } else {
                    background.put_Value(0);
                    background.put_Color(Common.Utils.ThemeColor.getRgbColor(this.TableColor.Color));
                }
            }
            var colorstr = (typeof(color) == 'object') ? color.color : color;
            this.tableBordersImageSpacing.setTableColor(colorstr);
            this.tableBordersImage.setTableColor(colorstr);
            if (this._allTable)
                this.tableBordersImage.setCellsColor(colorstr);
        },

        _UpdateBordersSpacing_: function (){
            var source = this.TableBorders;

            var oldSize = this.BorderSize;
            var oldColor = this.btnBorderColor.color;

            this._UpdateTableBorderSpacing_(source.get_Left(), 'l');
            this._UpdateTableBorderSpacing_(source.get_Top(), 't');
            this._UpdateTableBorderSpacing_(source.get_Right(), 'r');
            this._UpdateTableBorderSpacing_(source.get_Bottom(), 'b');

            source = this.CellBorders;

            for (var i=0; i<this.tableBordersImageSpacing.rows; i++) {
                this._UpdateCellBorderSpacing_(source.get_Left(), 'l', this.tableBordersImageSpacing.getCell(0, i));
            }

            for (i=0; i<this.tableBordersImageSpacing.rows; i++) {
                this._UpdateCellBorderSpacing_(source.get_Right(), 'r', this.tableBordersImageSpacing.getCell(this.tableBordersImageSpacing.columns-1, i));
            }

            for (i=0; i<this.tableBordersImageSpacing.columns; i++) {
                this._UpdateCellBorderSpacing_(source.get_Top(), 't', this.tableBordersImageSpacing.getCell(i, 0));
            }

            for (i=0; i<this.tableBordersImageSpacing.columns; i++) {
                this._UpdateCellBorderSpacing_(source.get_Bottom(), 'b', this.tableBordersImageSpacing.getCell(i, this.tableBordersImageSpacing.rows-1));
            }
            if (this._allTable && source.get_InsideV() === null) {
                source.put_InsideV(new Asc.asc_CTextBorder());
            }
            if (source.get_InsideV() !== null) {
                for (i=0; i<this.tableBordersImageSpacing.rows; i++) {
                    this._UpdateCellBorderSpacing_(source.get_InsideV(), 'r', this.tableBordersImageSpacing.getCell(0, i));
                    this._UpdateCellBorderSpacing_(source.get_InsideV(), 'l', this.tableBordersImageSpacing.getCell(1, i));
                }
            }

            if (this._allTable && source.get_InsideH() === null) {
                source.put_InsideH(new Asc.asc_CTextBorder());
            }
            if (source.get_InsideH() !== null) {
                for (i=0; i<this.tableBordersImageSpacing.columns; i++) {
                    this._UpdateCellBorderSpacing_(source.get_InsideH(), 'b', this.tableBordersImageSpacing.getCell(i, 0));
                    this._UpdateCellBorderSpacing_(source.get_InsideH(), 't', this.tableBordersImageSpacing.getCell(i, 1));
                }
            }

            this.tableBordersImageSpacing.setVirtualBorderSize(oldSize.pxValue);
            this.tableBordersImageSpacing.setVirtualBorderColor((typeof(oldColor) == 'object') ? oldColor.color : oldColor);
        },

        _UpdateCellBorderSpacing_: function(BorderParam, borderName, cell){
            if (null !== BorderParam && undefined !== BorderParam){
                if (null !== BorderParam.get_Value() && null !== BorderParam.get_Size() && null !== BorderParam.get_Color()){
                    if (1 == BorderParam.get_Value()) {
                        cell.setBordersSize(borderName, this._BorderPt2Px(BorderParam.get_Size() * 72 / 25.4));
                        cell.setBordersColor(borderName, 'rgb(' + BorderParam.get_Color().get_r() + ',' + BorderParam.get_Color().get_g() + ',' + BorderParam.get_Color().get_b() + ')');
                    } else
                        cell.setBordersSize(borderName, 0);
                } else {
                    cell.setBordersSize(borderName, this.IndeterminateSize);
                    cell.setBordersColor(borderName, this.IndeterminateColor);
                }
            }
            else {
                cell.setBordersSize(borderName, this.IndeterminateSize);
                cell.setBordersColor(borderName, this.IndeterminateColor);
            }
        },

        _UpdateTableBorderSpacing_: function(BorderParam, borderName){
            if (null !== BorderParam && undefined !== BorderParam){
                if (null !== BorderParam.get_Value() && null !== BorderParam.get_Size() && null !== BorderParam.get_Color()){
                    if (1 == BorderParam.get_Value()) {
                        this.tableBordersImageSpacing.setBordersSize(borderName, this._BorderPt2Px(BorderParam.get_Size() * 72 / 25.4));
                        this.tableBordersImageSpacing.setBordersColor(borderName, 'rgb(' + BorderParam.get_Color().get_r() + ',' + BorderParam.get_Color().get_g() + ',' + BorderParam.get_Color().get_b() + ')');
                    } else
                        this.tableBordersImageSpacing.setBordersSize(borderName, 0);
                } else {
                    this.tableBordersImageSpacing.setBordersSize(borderName, this.IndeterminateSize);
                    this.tableBordersImageSpacing.setBordersColor(borderName, this.IndeterminateColor);
                }
            }
            else {
                this.tableBordersImageSpacing.setBordersSize(borderName, this.IndeterminateSize);
                this.tableBordersImageSpacing.setBordersColor(borderName, this.IndeterminateColor);
            }
        },

        _UpdateBordersNoSpacing_: function (){
            var source = (this._allTable) ? this.TableBorders : this.CellBorders;

            var oldSize = this.BorderSize;
            var oldColor = this.btnBorderColor.color;

            this._UpdateTableBorderNoSpacing_(source.get_Left(), 'l');
            this._UpdateTableBorderNoSpacing_(source.get_Top(), 't');
            this._UpdateTableBorderNoSpacing_(source.get_Right(), 'r');
            this._UpdateTableBorderNoSpacing_(source.get_Bottom(), 'b');

            if (this._allTable && source.get_InsideV() == null) {
                source.put_InsideV(new Asc.asc_CTextBorder());
            }
            if (source.get_InsideV() !== null) {
                for (var i=0; i<this.tableBordersImage.rows; i++) {
                    this._UpdateCellBorderNoSpacing_(source.get_InsideV(), 'r', this.tableBordersImage.getCell(0, i));
                    this._UpdateCellBorderNoSpacing_(source.get_InsideV(), 'l', this.tableBordersImage.getCell(1, i));
                }
            }

            if (this._allTable && source.get_InsideH() == null) {
                source.put_InsideH(new Asc.asc_CTextBorder());
            }
            if (source.get_InsideH() !== null) {
                for (i=0; i<this.tableBordersImage.columns; i++) {
                    this._UpdateCellBorderNoSpacing_(source.get_InsideH(), 'b', this.tableBordersImage.getCell(i, 0));
                    this._UpdateCellBorderNoSpacing_(source.get_InsideH(), 't', this.tableBordersImage.getCell(i, 1));
                }
            }

            this.tableBordersImage.setVirtualBorderSize(oldSize.pxValue);
            this.tableBordersImage.setVirtualBorderColor((typeof(oldColor) == 'object') ? oldColor.color : oldColor);
        },

        _UpdateCellBorderNoSpacing_: function(BorderParam, borderName, cell){
            if (null !== BorderParam && undefined !== BorderParam){
                if (null !== BorderParam.get_Value() && null !== BorderParam.get_Size() && null !== BorderParam.get_Color()){
                    if (1 == BorderParam.get_Value()) {
                        cell.setBordersSize(borderName, this._BorderPt2Px(BorderParam.get_Size() * 72 / 25.4));
                        cell.setBordersColor(borderName, 'rgb(' + BorderParam.get_Color().get_r() + ',' + BorderParam.get_Color().get_g() + ',' + BorderParam.get_Color().get_b() + ')');
                    } else
                        cell.setBordersSize(borderName, 0);
                } else {
                    cell.setBordersSize(borderName, this.IndeterminateSize);
                    cell.setBordersColor(borderName, this.IndeterminateColor);
                }
            }
            else {
                cell.setBordersSize(borderName, this.IndeterminateSize);
                cell.setBordersColor(borderName, this.IndeterminateColor);
            }
        },

        _UpdateTableBorderNoSpacing_: function(BorderParam, borderName){
            if (null !== BorderParam && undefined !== BorderParam){
                if (null !== BorderParam.get_Value() && null !== BorderParam.get_Size() && null !== BorderParam.get_Color() ){
                    if (1 == BorderParam.get_Value()) {
                        this.tableBordersImage.setBordersSize(borderName, this._BorderPt2Px(BorderParam.get_Size() * 72 / 25.4));
                        this.tableBordersImage.setBordersColor(borderName, 'rgb(' + BorderParam.get_Color().get_r() + ',' + BorderParam.get_Color().get_g() + ',' + BorderParam.get_Color().get_b() + ')');
                    } else
                        this.tableBordersImage.setBordersSize(borderName, 0);
                } else {
                    this.tableBordersImage.setBordersSize(borderName, this.IndeterminateSize);
                    this.tableBordersImage.setBordersColor(borderName, this.IndeterminateColor);
                }
            }
            else {
                this.tableBordersImage.setBordersSize(borderName, this.IndeterminateSize);
                this.tableBordersImage.setBordersColor(borderName, this.IndeterminateColor);
            }
        },

        _BorderPt2Px: function(value) {
            if (value==0) return 0;
            if (value <0.6) return 0.5;
            if (value <=1) return 1;
            if (value <=1.5) return 2;
            if (value <=2.25) return 3;
            if (value <=3) return 4;
            if (value <=4.5) return 5;
            return 6;
        },

        _ApplyBorderPreset: function(btn) {
            var cellborder = (btn.options.strId !== undefined) ? btn.options.strId : btn.options.strCellId;
            var tableborder = btn.options.strTableId;

            var updateBorders;
            if (this._allTable && tableborder===undefined) {
                updateBorders = this.TableBorders;
                this.ChangedTableBorders = null;
            } else {
                updateBorders = this.CellBorders;
                this.ChangedCellBorders = null;
            }

            this._UpdateBorderStyle(updateBorders.get_Left(),    (cellborder.indexOf('l') > -1));
            this._UpdateBorderStyle(updateBorders.get_Top(),    (cellborder.indexOf('t') > -1));
            this._UpdateBorderStyle(updateBorders.get_Right(),    (cellborder.indexOf('r') > -1));
            this._UpdateBorderStyle(updateBorders.get_Bottom(),    (cellborder.indexOf('b') > -1));
            this._UpdateBorderStyle(updateBorders.get_InsideV(),    (cellborder.indexOf('c') > -1));
            this._UpdateBorderStyle(updateBorders.get_InsideH(),    (cellborder.indexOf('m') > -1));

            if (tableborder===undefined) {
                this._UpdateBordersNoSpacing_();

                if (this._allTable) {
                    updateBorders = this.CellBorders;
                    this.ChangedCellBorders = null;
                    this._UpdateBorderStyle(updateBorders.get_Left(),    (cellborder.indexOf('l') > -1));
                    this._UpdateBorderStyle(updateBorders.get_Top(),    (cellborder.indexOf('t') > -1));
                    this._UpdateBorderStyle(updateBorders.get_Right(),    (cellborder.indexOf('r') > -1));
                    this._UpdateBorderStyle(updateBorders.get_Bottom(),    (cellborder.indexOf('b') > -1));
                    this._UpdateBorderStyle(updateBorders.get_InsideV(),    (cellborder.indexOf('c') > -1));
                    this._UpdateBorderStyle(updateBorders.get_InsideH(),    (cellborder.indexOf('m') > -1));
                }
                return;
            }

            updateBorders = this.TableBorders;
            this.ChangedTableBorders = null;

            this._UpdateBorderStyle (updateBorders.get_Left(),    (tableborder.indexOf('l') > -1));
            this._UpdateBorderStyle (updateBorders.get_Top(),    (tableborder.indexOf('t') > -1));
            this._UpdateBorderStyle (updateBorders.get_Right(),    (tableborder.indexOf('r') > -1));
            this._UpdateBorderStyle (updateBorders.get_Bottom(),    (tableborder.indexOf('b') > -1));

            this._UpdateBordersSpacing_();
        },

        _UpdateCellBordersStyle: function(ct, border, size, color, destination, changed_destination) {
            var updateBorders = destination;

            if ( ct.col==0 && border.indexOf('l') > -1 ) {
                this._UpdateBorderStyle(updateBorders.get_Left(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Left(new Asc.asc_CTextBorder(updateBorders.get_Left()));
                }
            }

            if ( ct.col== this.tableStylerColumns-1 && border.indexOf('r') > -1 ) {
                this._UpdateBorderStyle(updateBorders.get_Right(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Right(new Asc.asc_CTextBorder(updateBorders.get_Right()));
                }
            }

            if ( ct.row==0 && border.indexOf('t') > -1 ) {
                this._UpdateBorderStyle(updateBorders.get_Top(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Top(new Asc.asc_CTextBorder(updateBorders.get_Top()));
                }
            }

            if ( ct.row== this.tableStylerRows-1 && border.indexOf('b') > -1 )  {
                this._UpdateBorderStyle(updateBorders.get_Bottom(), (size>0));
                if (changed_destination)  {
                    changed_destination.put_Bottom(new Asc.asc_CTextBorder(updateBorders.get_Bottom()));
                }
            }

            if ( ct.col==0 && border.indexOf('r') > -1 || ct.col== this.tableStylerColumns-1 && border.indexOf('l') > -1) {
                this._UpdateBorderStyle(updateBorders.get_InsideV(), (size>0));
                if (changed_destination)  {
                    changed_destination.put_InsideV(new Asc.asc_CTextBorder(updateBorders.get_InsideV()));
                }
            }

            if ( ct.row==0 && border.indexOf('b') > -1 || ct.row== this.tableStylerRows-1 && border.indexOf('t') > -1) {
                this._UpdateBorderStyle(updateBorders.get_InsideH(), (size>0));
                if (changed_destination)  {
                    changed_destination.put_InsideH(new Asc.asc_CTextBorder(updateBorders.get_InsideH()));
                }
            }
        },

        _UpdateTableBordersStyle: function(ct, border, size, color, destination, changed_destination) {
            var updateBorders = destination;

            if (border.indexOf('l') > -1) {
                this._UpdateBorderStyle(updateBorders.get_Left(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Left(new Asc.asc_CTextBorder(updateBorders.get_Left()));
                }
            }
            if (border.indexOf('t') > -1) {
                this._UpdateBorderStyle(updateBorders.get_Top(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Top(new Asc.asc_CTextBorder(updateBorders.get_Top()));
                }
            }
            if (border.indexOf('r') > -1) {
                this._UpdateBorderStyle(updateBorders.get_Right(), (size>0));
                if (changed_destination) {
                    changed_destination.put_Right(new Asc.asc_CTextBorder(updateBorders.get_Right()));
                }
            }
            if (border.indexOf('b') > -1) {
                this._UpdateBorderStyle(updateBorders.get_Bottom(), (size>0));
                if (changed_destination)  {
                    changed_destination.put_Bottom(new Asc.asc_CTextBorder(updateBorders.get_Bottom()));
                }
            }
        },

        _UpdateBorderStyle: function(border, visible) {
            if (null == border)
                return 0;
            if (visible && this.BorderSize.ptValue > 0){
                var size = parseFloat(this.BorderSize.ptValue);
                border.put_Value(1);
                border.put_Size(size * 25.4 / 72.0);
                var color = Common.Utils.ThemeColor.getRgbColor(this.btnBorderColor.color);
                border.put_Color(color);
            }
            else {
                border.put_Color(new Asc.asc_CColor());
                border.put_Value(0);
            }
            return border.get_Value();
        },

        onCellCategoryClick: function(btn) {
            if (this.CellMargins.Flag=='checked' && this.TableMargins.isChanged) {
                this.CellMargins.Left = this.TableMargins.Left;
                this.CellMargins.Top = this.TableMargins.Top;
                this.CellMargins.Right = this.TableMargins.Right;
                this.CellMargins.Bottom = this.TableMargins.Bottom;
                this.spnMarginRight.setValue(this.CellMargins.Right, true);
                this.spnMarginLeft.setValue(this.CellMargins.Left, true);
                this.spnMarginBottom.setValue(this.CellMargins.Bottom, true);
                this.spnMarginTop.setValue(this.CellMargins.Top, true);
            }
            this.TableMargins.isChanged = false;
        },

        updateMetricUnit: function() {
            if (this.spinners) {
                for (var i=0; i<this.spinners.length; i++) {
                    var spinner = this.spinners[i];
                    spinner.setDefaultUnit(Common.Utils.Metric.getCurrentMetricName());
                    spinner.setStep(Common.Utils.Metric.getCurrentMetric()==Common.Utils.Metric.c_MetricUnits.pt ? 1 : 0.1);
                }
            }
        },

        updateThemeColors: function() {
            this.colorsBorder.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors());
            this.colorsBack.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors());
            this.colorsTableBack.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors());
        },

        ShowHideWrap: function(inline) {
            this.AlignContainer.toggleClass('settings-hidden', !inline);
            this.DistanceContainer.toggleClass('settings-hidden', inline);
            this.btnsCategory[3].setDisabled(inline);
        },

        ShowHideSpacing: function(spacing) {
            this.BordersContainer.toggleClass('settings-hidden', spacing);
            this.BordersSpacingContainer.toggleClass('settings-hidden', !spacing);
            this.TableBackContainer.css('display', (!spacing && !this._allTable) ? 'none' : 'inline-block');
            this.CellBackContainer.css('display', (!spacing && this._allTable) ? 'none' : 'inline-block');
            this.TableBackContainer.css('float', (!spacing && this._allTable) ? 'none' : 'right');
            (spacing) ? this._UpdateBordersSpacing_() : this._UpdateBordersNoSpacing_();
        },

        textWidth:          'Width',
        textAllowSpacing:   'Spacing between cells',
        textAlign:          'Alignment',
        textIndLeft:        'Indent from Left',
        textWidthSpaces:    'Width & Spaces',
        textWrap:           'Text Wrapping',
        textMargins:        'Cell Margins',
        textTop:            'Top',
        textLeft:           'Left',
        textBottom:         'Bottom',
        textRight:          'Right',
        textDistance:       'Distance From Text',
        textPosition:       'Position',
        textWrapParallelTooltip: 'Flow table',
        textWrapNoneTooltip: 'Inline table',
        textLeftTooltip:    'Left',
        textRightTooltip:   'Right',
        textCenterTooltip:  'Center',
        textTitle:          'Table - Advanced Settings',
        textDefaultMargins: 'Default Cell Margins',
        textCheckMargins:   'Use default margins',
        textBordersBackgroung: 'Borders & Background',
        textOnlyCells:      'For selected cells only',
        textBorderWidth:    'Border Size',
        textBorderColor:    'Border Color',
        textBackColor:      'Cell Background',
        textPreview:        'Preview',
        textBorderDesc:     'Click on diagramm or use buttons to select borders',
        textTableBackColor: 'Table Background',
        cancelButtonText:   'Cancel',
        okButtonText:       'Ok',
        txtNoBorders:       'No borders',
        textNewColor:       'Add New Custom Color',
        textCenter: 'Center',
        textMargin: 'Margin',
        textPage: 'Page',
        textHorizontal: 'Horizontal',
        textVertical: 'Vertical',
        textAlignment: 'Alignment',
        textRelative: 'relative to',
        textRightOf: 'to the right Of',
        textBelow: 'below',
        textOverlap: 'Allow overlap',
        textMove: 'Move object with text',
        textOptions: 'Options',
        textAnchorText: 'Text',
        textAutofit: 'Automatically resize to fit contents',
        textCellProps: 'Cell',
        tipAll:             'Set Outer Border and All Inner Lines',
        tipNone:            'Set No Borders',
        tipInner:           'Set Inner Lines Only',
        tipOuter:           'Set Outer Border Only',
        tipCellAll: 'Set Borders for Inner Cells Only',
        tipTableOuterCellAll: 'Set Outer Border and Borders for All Inner Cells',
        tipCellInner: 'Set Vertical and Horizontal Lines for Inner Cells Only',
        tipTableOuterCellInner: 'Set Outer Border and Vertical and Horizontal Lines for Inner Cells',
        tipCellOuter: 'Set Outer Borders for Inner Cells Only',
        tipTableOuterCellOuter: 'Set Table Outer Border and Outer Borders for Inner Cells',
        txtPercent: 'Percent',
        txtCm: 'Centimeter',
        txtPt: 'Point',
        txtInch: 'Inch',
        textCellSize: 'Cell Size',
        textPrefWidth: 'Preferred width',
        textMeasure: 'Measure in',
        textCellOptions: 'Cell Options',
        textWrapText: 'Wrap text',
        textTable: 'Table',
        textTableSize: 'Table Size',
        textTablePosition: 'Table Position',
        textWrappingStyle: 'Wrapping Style',
        textAlt: 'Alternative Text',
        textAltTitle: 'Title',
        textAltDescription: 'Description',
        textAltTip: 'The alternative text-based representation of the visual object information, which will be read to the people with vision or cognitive impairments to help them better understand what information there is in the image, autoshape, chart or table.'

    }, DE.Views.TableSettingsAdvanced || {}));
});
