buildDaysArrayForMonth: function() {
		const calendarDate = this.get('calendarDate');
    const minDate =	this.get('minDate');
    const maxDate = this.get('maxDate');

		const currentCalendar = TimePicker.getMomentDate(calendarDate);
    const currentTime = TimePicker.getMomentDate(this.get('timestamp'));
    const firstDay = TimePicker.getMomentDate(calendarDate).startOf('month');
    const lastDay = TimePicker.getMomentDate(calendarDate).endOf('month').date();

		const start = firstDay.day();
    let currentDay = firstDay;
		currentDay.subtract(start, 'days');

		let daysInCalendar = 28;
		if ((start + lastDay) > 35) {
			daysInCalendar = 42;
		} else if ((start + lastDay) > 28) {
			daysInCalendar = 35;
		}

		const daysArray = Ember.A();
    for (let i=0; i<daysInCalendar; i++) {
			const paper = createPaperDate({timestamp: currentDay.valueOf(), minDate, maxDate});
			paper.set('weekNumber', Math.ceil((i+1)/7));

			if (paper.get('date').year() === currentCalendar.year()) {
				paper.set('isCurrentYear', true);

				if (paper.get('date').month() === currentCalendar.month()) {
					paper.set('isCurrentMonth', true);
				}
			}

			if (paper.get('date').year() === currentTime.year() && paper.get('date').month() === currentTime.month() && paper.get('date').date() === currentTime.date()) {
				paper.set('isCurrentDay', true);
			}

			daysArray.pushObject(paper);
			currentDay.add(1, 'days');
    }

    this.groupByWeeks(daysArray);
  },
  resetCalendarDate: Ember.observer('timestamp', function() {
		const timestamp = this.get('timestamp');
		Assert.isNumber(timestamp);

		// get moment timestamp
		const time = TimePicker.getMomentDate(this.get('timestamp'));
		if (TimePicker.isValidDate(time)) {
			this.set('calendarDate', this.get('timestamp'));
			this.set('year', time.format('YYYY'));
			this.set('month', time.format('MMM'));
			this.set('day', time.format('DD'));
			this.set('dayOfWeek', time.format('ddd'));
		} else {
			Assert.throw("timestamp must be a valid unix timestamp");
		}
  }),
	meridian: Ember.computed('timestamp', function() {
		return TimePicker.getMomentDate(this.get('timestamp')).format('A');
	}).readOnly(),
	currentDate: Ember.computed('timestamp', 'format', function() {
		return TimePicker.getMomentDate(this.get('timestamp')).format(this.get('format'));
	}).readOnly(),
	 * @method observesAmPm
	 */
	observesAmPm: Ember.observer('meridian', function() {
		if (this.$() && this.$().length) {
			this.$('.am-pm-container > .button').removeClass('active');

			if(this.get('meridian') === 'AM') {
				this.$('.am-pm-container > .button.am').addClass('active');
			} else {
				this.$('.am-pm-container > .button.pm').addClass('active');
			}
		}
	}),

	getCurrentHour() {
		const time = TimePicker.getMomentDate(this.get('timestamp'));
		let hour = time.hour();
		if (this.get('meridian') === 'PM') {
			hour = time.hour() - 12;
		}

		if (hour === 0) {
			hour = 12;
		}

		return hour;
	},

	getCurrentMinute() {
		const time = TimePicker.getMomentDate(this.get('timestamp'));
		return time.minute();
 keepCalendarUpdated: Ember.observer('calendarDate', function() {
   const calendarObject = TimePicker.getMomentDate(this.get('calendarDate'));
   this.buildDaysArrayForMonth();
   this.set('monthYear', calendarObject.format('MMMM YYYY'));
 }),
     * sets the timestamp to the clicked day
     *
     * @param day {object} moment object of the clicked day
     * @event dayClicked
     */
    dayClicked(paper) {
			if (!paper.get('isDisabled')) {
				const day = paper.get('date');

				Assert.isMoment(day);

				const newDay = day.date();
				const newMonth = day.month();
				const newYear = day.year();

				let timestamp = TimePicker.getMomentDate(this.get('timestamp'));
				timestamp.date(newDay);
				timestamp.month(newMonth);
				timestamp.year(newYear);

				this.setTimestamp(timestamp);

				this.sendAction('onUpdate', 'day', this.get('timestamp'));
			}
    },

    /**
     * subtracts 1 month to the calendarDate
     *
     * @event subtractMonth
     */