Source: backbone-x/source/alarm.js

/*jshint indent:2, curly:true, eqeqeq:true, immed:true, latedef:true,
newcap:true, noarg:true, regexp:true, undef:true, strict:true, trailing:true,
white:true*/
/*global XT:true, XM:true, Backbone:true, _:true, console:true */

(function () {
  "use strict";

  /**
    @class
    @name XM.Alarm
    @extends XM.Document
  */
  XM.Alarm = XM.Document.extend(/** @lends XM.Alarm# */{

    numberPolicy: XM.Document.AUTO_NUMBER,

    bindEvents: function () {
      XM.Document.prototype.bindEvents.apply(this, arguments);
      this.on('change:offset change:qualifier change:time', this.alarmDidChange);
    },

    alarmDidChange: function (model, value, options) {
      var offset,
        qualifier,
        time,
        trigger;

      // Recalculate trigger time based on alarm settings
      offset = this.get('offset');
      qualifier = this.get('qualifier');
      time = this.get('time');
      trigger = this.get('trigger');
      if (offset) {
        switch (qualifier) {
        case 'MB':
        case 'MA':
          if (qualifier.indexOf('B') !== -1) {
            trigger.setMinutes(time.getMinutes() - offset);
          } else {
            trigger.setMinutes(time.getMinutes() + offset);
          }
          break;
        case 'HB':
        case 'HA':
          if (qualifier.indexOf('B') !== -1) {
            trigger.setHours(time.getHours() - offset);
          } else {
            trigger.setHours(time.getHours() + offset);
          }
          break;
        default:
          if (qualifier.indexOf('B') !== -1) {
            trigger.setDate(time.getDate() - offset);
          } else {
            trigger.setDate(time.getDate() + offset);
          }
          break;
        }
      } else {
        trigger.setMinutes(time.getMinutes());
      }
    }

  });

}());