

    function RemoveSpaces(txt) {
      var regExp = eval("/ /g");
      
      txt = txt.replace(regExp, "");
      
      return txt;
    }


    function BookNumToName(booknum) {
      var name;
      
      switch (booknum) {
        case 1: name = "Genesis"; break;
        case 2: name = "Exodus"; break;
        case 3: name = "Leviticus"; break;
        case 4: name = "Numbers"; break;
        case 5: name = "Deuteronomy"; break;
        default: name = "???"; break;
      }

      return name;
    }


    function TextToGenLetterArray(text, maxLen) {
      var glArray = new Array();
      var maxlen = Math.min(maxLen, text.length);
      var i;

      for (i = 0; i < maxlen; i++) {
        var c = text.charAt(i);
        var lg = TextCharToGenLetter[c] ? TextCharToGenLetter[c] : LG_NONE;
        glArray[i] = lg;
      }

      return glArray;
    }


    //
    //  GenLetterArrayToDisplayTable
    //
    //
    //
    function GenLetterArrayToDisplayTable (
      genLetArray, 
      useFinalForms, 
      displayGrid,
      firstHightlightOffset,  // offset of first char to highlight, or -1 if none
      numToHighlight,
      highlightGapLength
      ) 
    {
      var numLetters = genLetArray.length;
      var numRows = Math.floor((numLetters + DISPLAY_TEXT_LETTERS_PER_ROW - 1) / DISPLAY_TEXT_LETTERS_PER_ROW);
      var tableNode = document.createElement("TABLE");
      var r;

      // alert("> GenLetterArrayToDisplayTable: letters=" + genLetArray.length + " rows=" + numRows);

      for (r = 0; r < numRows; r++) {
        var tableRowNode = document.createElement("TR");
        var lettersThisRow = (r == numRows-1) ? 
                             numLetters%DISPLAY_TEXT_LETTERS_PER_ROW : 
                             DISPLAY_TEXT_LETTERS_PER_ROW;
        var let;

        // 
        //  First create blank spaces on the left, since Hebrew is right-to-left
        //
        for (let = 0; let < DISPLAY_TEXT_LETTERS_PER_ROW - lettersThisRow; let++) {
          var tableCellNode = document.createElement("TD");
          var imgNode = CreateImageNodeForLetter(LG_SPACE, false, false);
          tableCellNode.appendChild(imgNode);
          tableRowNode.appendChild(tableCellNode);
        }

        //
        //  Now add the actual letters for this row BACKWARDS,
        //  since they will be read right-to-left.
        //
        for (let = 0; let < lettersThisRow; let++) {
          var tableCellNode = document.createElement("TD");
          var letterIndex = r*DISPLAY_TEXT_LETTERS_PER_ROW + (lettersThisRow - let - 1);
          var genLetter = genLetArray[letterIndex];
          var useFinal = (useFinalForms && (genLetArray[letterIndex+1] == LG_SPACE));
          var doHighlight = ((firstHightlightOffset != -1) &&
                              (numToHighlight >= 1) &&
                             (letterIndex >= firstHightlightOffset) &&
                             (letterIndex <= firstHightlightOffset + (numToHighlight-1)*highlightGapLength) &&
                             (((letterIndex-firstHightlightOffset) % highlightGapLength) == 0));
          var imgNode = CreateImageNodeForLetter(genLetter, useFinal, doHighlight);  


          tableCellNode.appendChild(imgNode);
          tableRowNode.appendChild(tableCellNode);
        }
        
        tableNode.appendChild(tableRowNode);
      }

      tableNode.cellPadding = "1";
      tableNode.cellSpacing = "0";
      tableNode.border = displayGrid ? "1" : "0";
      
      // alert("< GenLetterArrayToDisplayTable");
      
      return tableNode;
    }


    //
    //  Determine the browser
    //
    var CDX_BrowserDesc = window.navigator.userAgent.toLowerCase();
    var CDX_IsIE = (CDX_BrowserDesc.indexOf('msie') != -1);

    