// ===================================================================
/** 
  @fileoverview Handle "canonical" bible book names
  
  @author Helmut Steeb hs2009@bible.net (insert current year)
  @version $Id: BookNames.js 3499 2009-05-14 19:29:34Z helmut $
**/

var Bible20;
if (!Bible20) {
  Bible20 = {};
}
else if (typeof Bible20 != "object") {
  throw new Error("Bible20 already exists and is not an object");
}

if (!Bible20.Bible) {
  Bible20.Bible = {};
}
else if (typeof Bible20.Bible != "object") {
  throw new Error("Bible20.Bible already exists and is not an object");
}

/**
  Names of bible books.
  Taken from Nestle-Aland, e.g. "Gn", "Ex", ... "Ap".
**/
Bible20.Bible.BookNames = {
  _OT: [
      "Gn", "Ex", "Lv", "Nu", "Dt", "Jos", "Jdc", "Rth", "1Sm", "2Sm", 
      "1Rg", "2Rg", "1Chr", "2Chr", "Esr", "Neh", "Esth", "Job", "Ps", "Prv", "Eccl", 
      "Ct", "Is", "Jr", "Thr", "Ez", "Dn", "Hos", "Joel", "Am", "Ob", "Jon",
      "Mch", "Nah", "Hab", "Zph", "Hgg", "Zch", "Ml"
    ],
  _NT: [
      "Mt", "Mc", "L", "J", "Act", "R", "1K", "2K", "G", "E", "Ph", "Kol",
      "1Th", "2Th", "1T", "2T", "Tt", "Phm", "H", "Jc", "1P", "2P", "1J",
      "2J", "3J", "Jd", "Ap"
    ],
  _name2index: {},
  _string: "",
  _name2isSingleChapterBookName: {
    "Ob": true,
    "Phm": true,
    "2J": true,
    "3J": true,
    "Jd": true
  },

  getOT: function() {
    return Bible20.Bible.BookNames._OT;
  },
  getNT: function() {
    return Bible20.Bible.BookNames._NT;
  },
  get: function() {
    return Bible20.Bible.BookNames._all;
  },
  toString: function() {
    return Bible20.Bible.BookNames._string;
  },
  getBookIndex: function(bookName) {
    return Bible20.Bible.BookNames._name2index[bookName];
  },
  getBookNameForIndex: function(index) {
    return Bible20.Bible.BookNames._all[index];
  },
  getSingleChapterBookNames: function() {
    return [ "Ob", "Phm", "2J", "3J", "Jd"];
  },
  isSingleChapterBookName: function(bookName) {
    return bookName in Bible20.Bible.BookNames._name2isSingleChapterBookName;
  }
  // adding trailing comma here makes IE6 fail
};

(function() {
  Bible20.Bible.BookNames._all = Bible20.Bible.BookNames._OT.concat(Bible20.Bible.BookNames._NT);

  for (var i = 0; i < Bible20.Bible.BookNames._all.length; ++i) {
    var bookName = Bible20.Bible.BookNames._all[i];
    Bible20.Bible.BookNames._name2index[bookName] = i;
    if (i > 0) {
      Bible20.Bible.BookNames._string += " ";
    }
    Bible20.Bible.BookNames._string += i + ":" + bookName;
  }
})();

