/**
 * A source for events for {@link Ext.calendar.view.Weeks}.
 * 
 * @private
 */
Ext.define('Ext.calendar.dd.WeeksSource', {
    extend: 'Ext.drag.Source',

    requires: [
        'Ext.calendar.dd.WeeksProxy'
    ],

    activateOnLongPress: 'touch',

    config: {
        proxy: {
            type: 'calendar-weeks',
            width: 200
        },
        view: null
    },

    describe: function(info) {
        var view = this.getView();

        info.event = view.getEvent(info.eventTarget);
        info.widget = view.getEventWidget(info.eventTarget);
        info.setData('calendar-event', info.event);
        info.view = view;
    },

    beforeDragStart: function(info) {
        return this.getView().handleChangeStart('drag', info.event);
    },

    onDragStart: function(info) {
        var view = info.view,
            cursor = info.cursor.current,
            cell = view.getCellByPosition(cursor.x, cursor.y),
            event = info.event;

        info.span = view.getEventDaysSpanned(event);
        info.startDate = view.getDateFromCell(cell);

        this.callParent([info]);
    },

    updateView: function(view) {
        if (view) {
            this.setHandle('.' + view.$eventCls);
            this.setElement(view.element);
        }
    },

    destroy: function() {
        this.setView(null);
        this.callParent();
    }
});
