protected function setup_item( $post = false, $max = 10 ) {

		// Calculate start day
		if ( ! empty( $this->item_start ) ) {
			$start_day  = date_i18n( 'j', $this->item_start );
			$start_hour = date_i18n( 'G', $this->item_start );
		} else {
			$start_day  = 0;
			$start_hour = 0;
		}

		// Calculate end day
		if ( ! empty( $this->item_end ) ) {
			$end_day  = date_i18n( 'j', $this->item_end );
			$end_hour = date_i18n( 'G', $this->item_end );
		} else {
			$end_day  = $start_day;
			$end_hour = $start_hour;
		}

		// All day events (and days that overlap multiple days)
		if ( ( true === $this->item_all_day ) || ( $this->item_days > 1 ) || ( $start_day !== $end_day ) ) {

			// What type of item is this?
			$type = ( true === $this->item_all_day )
				? 'all_day_items'
				: 'multi_day_items';

			// Math the heck out of this
			$interval = 1;
			$offset   = 0;
			$cell     = $offset;
			$end_cell = ( $end_day * $start_day ) + $offset;

		// Regular single-day events
		} else {
			$type     = 'items';
			$interval = 1;

			// Calculate the cell offset
			$offset   = intval( ( $this->item_start - $this->day_start ) / DAY_IN_SECONDS );
			$cell     = ( $start_hour * $interval ) + $offset;
			$end_cell = ( $end_hour   * $interval ) + $offset;
		}

		// Loop through days
		while ( $cell <= $end_cell ) {

			// Setup the pointer for each day
			$this->setup_pointer( $post, $cell );

			// Add post to items for each day in it's duration
			if ( empty( $this->{$type}[ $cell ] ) || ( $max > count( $this->{$type}[ $cell ] ) ) ) {
				$this->{$type}[ $cell ][ $post->ID ] = $post;
			}

			// Bump the hour
			$cell = intval( $cell + $interval );
		}
	}