public function getAvailability($excludeId = null) {
		if (!$this->Active) {
			return array(
				'available' => false,
				'reason' => 'Ticket is not active.'
			);
		}
		$start = strtotime($this->StartDate);
		if ($this->StartDate && $start >= time()) {
			return array(
				'available'    => false,
				'reason'       => 'Tickets are not yet available.',
				'available_at' => $start
			);
		}
		$end = strtotime($this->EndDate);
		if ($this->EndDate && time() >= $end) {
			return array(
				'available' => false,
				'reason'    => 'Tickets are no longer available.'
			);
		}
		if (!$quantity = $this->Available) {
			return array(
				'available' => true
			);
		}
		$bookings = $this->getBookedAttendees();
		if ($excludeId) {
			$bookings = $bookings->filter('EventRegistration.ID:not', $excludeId);
		}
		$bookedcount = $bookings->count();
		if ($bookedcount >= $quantity) {
			return array(
				'available' => false,
				'reason'    => 'All tickets have been booked.');
		}
		return array(
			'available' => $quantity - $bookedcount
		);
	}