docs: function Reference(reference) {
    if (!reference) {
      throw new Error('You must supply a Bible reference, either a string (i.e. "Mark 2") or an object (i.e. { book: 1, chapter: 2, verse: 1 })');
    }
  
    // If reference is a string
    if (typeof reference === 'string') {
  
      // Strip out any periods, usually used for abbreviations, i.e. Mk. 2
      reference = reference.replace(/\./g,'');
  
      this.source = reference;
  
      // Match up to last letter - thats the book. Everything else === the chapter/verse
      var referenceParts = reference.match(/(.+[A-Za-z])\s+(.+)/);
      var bookName = referenceParts[1];
      var chapterAndVerse = referenceParts[2];
  
      // Lookup the book
      this.book = Reference.bookIdFromName(bookName);
  
      // Split on ":" for chapter and verse. If it's a chapter reference
      // (e.g. John 1) then @verse === undefined
      var chapterAndVerseParts = chapterAndVerse.split(':');
      this.chapter = Number(chapterAndVerseParts[0]);
      this.verse = chapterAndVerseParts[1] ? Number(chapterAndVerseParts[1]) : null;
  
    // If it's not a string, try parsing as an object
    } else {
      if (!reference.book) {
        throw new Error('The object you supplied does not seem to be a Bible reference (there is no "book" property)');
      }
  
      var hasBook = typeof reference.book === 'number';
      var hasChapter = typeof reference.chapter === 'number';
      var validVerseIfPresent = reference.verse == null || typeof reference.verse === 'number';
  
      if (hasBook && hasChapter && validVerseIfPresent) {
        this.book = reference.book;
        this.chapter = reference.chapter;
        this.verse = reference.verse;
      }
    }
  }