'use strict'; define( [ 'marionette', 'backgrid', 'Series/SeasonCollection' ], function (Marionette, Backgrid, SeasonCollection) { return Marionette.Layout.extend({ template: 'SeasonPass/SeriesLayoutTemplate', ui: { seasonSelect: '.x-season-select', expander : '.x-expander', seasonGrid : '.x-season-grid' }, events: { 'change .x-season-select': '_seasonSelected', 'click .x-expander' : '_expand', 'click .x-latest' : '_latest', 'click .x-monitored' : '_toggleSeasonMonitored' }, regions: { seasonGrid: '.x-season-grid' }, initialize: function () { this.seasonCollection = new SeasonCollection(this.model.get('seasons')); this.expanded = false; }, onRender: function () { if (!this.expanded) { this.ui.seasonGrid.hide(); } this._setExpanderIcon(); }, _seasonSelected: function () { var seasonNumber = parseInt(this.ui.seasonSelect.val()); if (seasonNumber == -1 || isNaN(seasonNumber)) { return; } this._setMonitored(seasonNumber) }, _expand: function () { if (this.expanded) { this.ui.seasonGrid.slideUp(); this.expanded = false; } else { this.ui.seasonGrid.slideDown(); this.expanded = true; } this._setExpanderIcon(); }, _setExpanderIcon: function () { if (this.expanded) { this.ui.expander.removeClass('icon-chevron-right'); this.ui.expander.addClass('icon-chevron-down'); } else { this.ui.expander.removeClass('icon-chevron-down'); this.ui.expander.addClass('icon-chevron-right'); } }, _latest: function () { var season = _.max(this.model.get('seasons'), function (s) { return s.seasonNumber; }); this._setMonitored(season.seasonNumber); }, _setMonitored: function (seasonNumber) { var self = this; this.model.setSeasonPass(seasonNumber); var promise = this.model.save(); promise.done(function (data) { self.seasonCollection = new SeasonCollection(data); self.render(); }); }, _toggleSeasonMonitored: function (e) { var seasonNumber = 0; var element; if (e.target.localName === 'i') { seasonNumber = parseInt($(e.target).parent('td').attr('data-season-number')); element = $(e.target); } else { seasonNumber = parseInt($(e.target).attr('data-season-number')); element = $(e.target).children('i'); } this.model.setSeasonMonitored(seasonNumber); var savePromise =this.model.save() .always(this.render.bind(this)); element.spinForPromise(savePromise); }, _afterToggleSeasonMonitored: function () { this.render(); } }); });