// ===================================================================
// Class for storing data of one Bible.
// $Id: ZefReader.js 3549 2009-05-29 13:36:40Z 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");
}

Bible20.Bible.ZefReader = function()
{
  try {
  }
  catch (e) {
    alert("Bible.ZefReader: " + e);
  }
}

// <?xml version='1.0' encoding='UTF-8'?>
// <XMLBIBLE>
// <BIBLEBOOK bname='Phm' bnumber='57'>
// <CHAPTER cnumber='1'>
// <VERS vnumber='1'>Paulus, ein Gefangener Christi Jesu, und Timotheus, der Bruder, an Philemon, unseren geliebten Mitarbeiter,</VERS>
// ...
// </CHAPTER>
// </BIBLEBOOK>
// </XMLBIBLE>

Bible20.Bible.ZefReader.prototype.read = function(text, aBible)
{
  try {
    var BookTagMatch = text.match(/<BIBLEBOOK\s+(.*?)>/);
    if (!BookTagMatch) {
      return null;
    }
    var BookMatch = BookTagMatch[1].match(/bname\s*=\s*['\"](.*?)[\"']/);
    if (!BookMatch) {
      return null;
    }
    var bookName = BookMatch[1];
    var aBook = aBible.findAddBook(bookName);

    var pattern = new RegExp(
        "(?:<(C)HAPTER\\s+cnumber\\s*=\\s*['\"](\\d+)[\"']>"
      + "|"
      + "(V)ERS\\s+vnumber\\s*=\\s*['\"](\\d+)[\"'].*?>([^\0]*?)</VERS>)",// use ^\0 => match \n also!
      "g");
    var ElementMatch;
    var aChapter;
    while ( (ElementMatch = pattern.exec(text)) != null) {
      if (ElementMatch[1] == "C") {
        var ch = ElementMatch[2];
        aChapter = aBook.findAddChapter(ch);
      }
      else {
        aChapter.setVerse(new Bible20.Bible.Verse(ElementMatch[4], ElementMatch[5]));
      }
    }
    return 1;
  }
  catch (e) {
    alert("ZefReader.read: " + e);
  }
}

