/// <summary>
		/// Returns a list of items that are in this journal, but not the "other"
		/// </summary>
		/// <param name="other"></param>
		/// <returns></returns>
		public List<SpecialPoint> Compare(CollectionJournal other)
		{
			List<SpecialPoint> unique = new List<SpecialPoint>();

			for (int i = 0; i < width; i++)
				for (int j = 0; j < height; j++)
					if (obtained[i, j] > 0 && other.obtained[i, j] == 0)
						unique.Add(new SpecialPoint(i, j));

			return unique;
		}
		/// <summary>
		/// Copy Constructor
		/// </summary>
		/// <param name="copyJournal"></param>
		public CollectionJournal(CollectionJournal copyJournal)
			: this()
		{
			for (int i = 0; i < width; i++)
				for (int j = 0; j < height; j++)
					obtained[i, j] = copyJournal.obtained[i, j];
		}
		/// <summary>
		/// Copy constructor
		/// </summary>
		/// <param name="copyPlayer"></param>
		public CollectionPlayer(CollectionPlayer copyPlayer) : this()
		{
			coins = copyPlayer.coins;
			totalCoinsCollected = copyPlayer.totalCoinsCollected;
			stars = copyPlayer.stars;
			lastRestock = copyPlayer.lastRestock;
			inventory = new CollectionStorage(copyPlayer.inventory);
			journal = new CollectionJournal(copyPlayer.journal);
			foreverJournal = new CollectionJournal(copyPlayer.foreverJournal);
         loveList = new List<int>(copyPlayer.loveList);
		}
		/// <summary>
		/// Attempt to rank up. Returns false if unsuccessful
		/// </summary>
		/// <returns></returns>
		public bool RankUp()
		{
			if (!journal.JournalComplete())
				return false;

			ResetRarities();
			journal = new CollectionJournal();
			inventory = new CollectionStorage();
			coins = CollectionManager.CoinRestockAmount;
			lastRestock = DateTime.Now;
			stars++;

			return true;
		}
		/// <summary>
		/// Used for testing journal output, this creates a fully complete journal
		/// </summary>
		/// <returns></returns>
		public static CollectionJournal CompleteJournal()
		{
			CollectionJournal journal = new CollectionJournal();

			for (int i = 0; i < Width; i++)
				for (int j = 0; j < Height; j++)
					journal.ObtainItem(new SpecialPoint(i, j));

			return journal;
		}