/**
 * Компонент поля даты.
 * Добавлена кнопа установки текущий даты
 */
Ext.define('Ext.m3.AdvancedDataField', {
    extend: 'Ext.form.DateField',
    xtype: 'm3-date',

    baseTriggers: [
        {
            iconCls: 'x-form-date-trigger', handler: null, hide: null
        },
        {
            iconCls: 'x-form-current-date-trigger', handler: null, hide: null
        }
    ],

    initComponent: function () {
        this.callParent();

        this.triggerConfig = {
            tag: 'span', cls: 'x-form-twin-triggers', cn: []};

        Ext.each(this.baseTriggers, function (item, index, all) {
            this.triggerConfig.cn.push(
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + item.iconCls}
            );
        }, this);

        this.initBaseTrigger()
    },
    initTrigger: function () {

        var ts = this.trigger.select('.x-form-trigger', true);
        var triggerField = this;
        ts.each(function (t, all, index) {

            var triggerIndex = 'Trigger' + (index + 1);
            t.hide = function () {
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = 'none';
                triggerField.el.setWidth(w - triggerField.trigger.getWidth());
                this['hidden' + triggerIndex] = true;
            };
            t.show = function () {
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = '';
                triggerField.el.setWidth(w - triggerField.trigger.getWidth());
                this['hidden' + triggerIndex] = false;
            };

            if (this.baseTriggers[index].hide) {
                t.dom.style.display = 'none';
                this['hidden' + triggerIndex] = true;
            }
            this.mon(t, 'click', this.baseTriggers[index].handler, this, {preventDefault: true});
            t.addClassOnOver('x-form-trigger-over');
            t.addClassOnClick('x-form-trigger-click');
        }, this);

        this.triggers = ts.elements;
    },
    initBaseTrigger: function () {
        this.baseTriggers[0].handler = this.onTriggerClick;
        this.baseTriggers[1].handler = function () {
            if (!this.readOnly && !this.disabled) {
                var today = new Date();
                this.setValue(today);
                this.fireEvent('select', this, today);
            }
        };
        this.baseTriggers[1].hide = this.hideTriggerToday;
    },
    onBlur: function () {
        /*
         В суперклассе Ext.form.TriggerField данный метод перекрывается пустой функцией,
         видимо для того, чтобы все изменения и событие change происходили только при нажатии на триггеры,
         но данное поведение весьма неудобно в колоночных фильтрах, где требуется корректное срабатывание
         blur и change при потере фокуса.
         Данная реализация метода взята из базового класса Ext.formField
         */
        this.beforeBlur();
        if (this.focusClass) {
            this.el.removeClass(this.focusClass);
        }
        this.hasFocus = false;
        if (this.validationEvent !== false && (this.validateOnBlur || this.validationEvent == 'blur')) {
            this.validate();
        }
        var v = this.getValue();
        if (String(v) !== String(this.startValue)) {
            this.fireEvent('change', this, v, this.startValue);
        }
        this.fireEvent('blur', this);
        this.postBlur();
    }

});