/* Scripts for the Bible

   These functions, and all files reffering to these functions,
   fall under the Copyright of Peter Crom, february 16th, 2001.

*/

var NS = navigator.appName.indexOf("Netscape") != -1;
var MSIE = navigator.appVersion.indexOf("MSIE") != -1;
var ren = /([0-9])\./
    ren.test (navigator.appVersion)
var VS = RegExp.$1

var enq_loads = 15	// overall variables, kop related
var pagecnt
var Books
var libsize
var cut
var ls
var Hits
var Logon
var enquete
var from
var vpart
var printing = 1

var romped = false
var schermen = 2

var vsnumbers = '51'
var rep	= 4
var freshtext = false
var TV = -1
var TL = -1
var blauw1 = '#daecfe'
var blauw2 = '#87b5fa'
var blauw3 = '#1384f4'
var blauw4 = '#064f97'
var blauw5 = '#032b52'
var beige1 = '#fde9bd'
var beige2 = '#fab932'
var beige3 = '#9f6d04'

var histo = new Array;
var hisnr = -1;

var lastframe = self.name

function dump (obj, objName)
{
 var result = ""
 for (var i in obj)
 {
   result += objName + "." + i + " = " + obj[i] + "\n"
 }
 return result
}

function setup_css (pagina)
{
  if (pagina == undefined) pagina = document
  histo[++top.hisnr] = pagina.name

function linkdef (linkname, deco, weight, style, li, vi, ho, ac)
{
  if (typeof(li) == 'undefined') li="darkgreen"
  if (typeof(vi) == 'undefined') vi="purple"
  if (typeof(ho) == 'undefined') ho="blue"
  if (typeof(ac) == 'undefined') ac="red"
  tail = ""
  for (i = 8; i < arguments.length; i++) tail += arguments[i]+'; ';

//alert ('li: '+li+', vi: '+vi+', ho: '+ho+', ac: '+ac)
  st = linkname+':link { text-decoration: '+deco+'; font-weight: '+weight+'; font-style: '+style+'; color: '+li+'; '+tail+'} '
     + linkname+':visited { text-decoration: '+deco+'; font-weight: '+weight+'; font-style: '+style+'; color: '+vi+'; '+tail+'} '
     + linkname+':hover { text-decoration: '+deco+'; font-weight: '+weight+'; font-style: '+style+'; color: '+ho+'; '+tail+'} '
     + linkname+':active { text-decoration: '+deco+'; font-weight: '+weight+'; font-style: '+style+'; color: '+ac+'; '+tail+'} ';
  return st;
}

function normdef (name)
{
  st = name+' { font-family: '+css_ft+'; font-size: '+css_sz+'; ';
  for (i = 1; i < arguments.length; i++)
  {
    st += arguments[i]+'; ';
  }
  st += '}\n';
  return st;
}

function ali (arg) { return 'text-align: '+arg }
function bck (arg) { return 'background: '+arg }
function bcl (arg) { return 'border-color: '+arg }
function bgc (arg) { return 'background-color: '+arg }
function bgi (arg, raam) { ls = levelstring(raam); st = "background-image: url('"+ls+arg+"')"; return st }
function bgr (arg) { return 'background-repeat: '+arg }
function bor (arg) { return 'border: '+arg }
function bot (arg) { return 'bottom: '+arg }
function bwd (arg) { return 'border-width: '+arg }
function col (arg) { return 'color: '+arg }
function cur (arg) { return 'cursor: '+arg}
function dec (arg) { return 'text-decoration: '+arg }
function dis (arg) { return 'display: '+arg }
function fam (arg) { return 'font-family: '+arg }
function flt (arg) { return 'float: '+arg }
function hgt (arg) { return 'height: '+arg }
function ind (arg) { return 'text-indent: '+arg }
function lft (arg) { return 'left: '+arg }
function lht (arg) { return 'line-height: '+arg }
function mar (arg) { return 'margin: '+arg }
function mlf (arg) { return 'margin-left: '+arg }
function mtp (arg) { return 'margin-top: '+arg }
function ovf (arg) { return 'overflow'+arg }
function pad (arg) { return 'padding: '+arg }
function pdt (arg) { return 'padding-top: '+arg }
function pos (arg) { return 'position: '+arg }
function rgt (arg) { return 'right: '+arg }
function scf (arg) { return 'scrollbar-face-color: '+arg }
function sca (arg) { return 'scrollbar-arrow-color: '+arg } 
function siz (arg) { return 'text-size: '+arg }
function stl (arg) { return 'font-style: '+arg }
function top (arg) { return 'top: '+arg }
function vri (arg) { return 'font-variant: '+arg }
function wgt (arg) { return 'font-weight: '+arg }
function wid (arg) { return 'width: '+arg }
function zin (arg) { return 'z-index: '+arg }
function hovdef (name, nbg, nc, hbg, hc, auto)
{
  var wd = (auto) ? wid('auto') : wid('6em')
  var ds = (auto) ? dis('inline') : dis('block')
  var h = (NS) ? '18pt' : '15pt'
  var st =  normdef (name,          ali('center'), bck(nbg), bor('2px outset'), col(nc), dec('none'), ds, hgt(h), lht(h), mtp('1px'), pad('3px'), wd, wgt('bold'))
  st += normdef (name+':hover', ali('center'), bck(hbg), bor('2px inset'),  col(hc), dec('none'), ds, hgt(h), lht(h), mtp('1px'), pad('3px'), wd, wgt('bold'))
  return st
}
  var breedte = 100;
  if (pagina.innerWidth)
  {
//alert ('pagina')
    breedte = pagina.innerWidth; // all except Explorer
  }
  else if (pagina.document.documentElement) // && document.documentElement.clientHeight)
  {
//alert ('documentElement: '+pagina.document.documentElement.scrollWidth)
    breedte = pagina.document.documentElement.scrollWidth; // Explorer 6 Strict Mode
  }
  else if (pagina.document.body)
  {
//alert ('body')
    breedte = pagina.document.body.scrollWidth; // other Explorers
  }
  else alert ('No width possibility detected')
//alert ('breedte: '+breedte)
  wide = (breedte > 400)
//alert (window.self)
  if (arguments.length == 2 && arguments[1] == 'main') // e.g. setup_css (self, 'main') for overall page
  {
    s = "<title>Bijbelse Bibliotheek door Peter Crom</title>\n";
    s += '<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=windows-1252">\n'
    s += '<META name="Author" content="Peter Crom">\n'
    s += '<meta name="keywords" lang="nl" content="bijbel, bijbels, bijbelse, christelijk, bibliotheek, boek, boeken, studie, NBG, literatuur, bijbelstudie, geschiedenis ';
    for (i=0; i < Books.length; i++) {s += Books[i].name+', '; }
    s += '">\n';
  } else {
    s = '<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=windows-1252">\n'
    s += '<META name="Author" content="Peter Crom">\n'
  }
//alert (s)
  s += '<STYLE  TYPE="text/css">'
var css_ft = 'sans-serif';
var css_sz = '10pt'

  if (wide)
    s += (NS) ? normdef ('BODY.index', stl('sans-serif'), scf(blauw3), ali('justify'), bck(beige1), bgi('button.png', pagina), bgr('repeat-y'), pad('2em 2px 2px 2px'), pos('absolue'))
	      : normdef ('BODY.index', stl('sans-serif'), scf(blauw3), ali('justify'), bck(beige1), bgi('button.png', pagina), bgr('repeat-y'), pad('4em 2px 2px 2px'), pos('absolute'))
  else
    s += (NS) ? normdef ('BODY.index', stl('sans-serif'), scf(blauw3), ali('left'), bck(beige1), bgi('button.png', pagina), bgr('repeat-y'), pad('2em 2px 2px 2px'), pos('absolute'))
	      : normdef ('BODY.index', stl('sans-serif'), scf(blauw3), ali('left'), bck(beige1), bgi('button.png', pagina), bgr('repeat-y'), pad('4em 2px 2px 2px'), pos('absolute'))
  s += normdef ('.knoppen', dis('block'), pos('absolute'), top('10px'), lft('10px'), col(blauw5), zin('3'))
  s += linkdef ('.knop A', 'none', 'bold', 'normal', 'white', blauw1, 'yellow', 'red', bck(blauw4))
  s += normdef ('.knop', dis('inline'), hgt('1em'), wid('auto'), bck(blauw4), col(blauw1), pad('2px 4'), mar('2px'), wgt('bold'), bor('2px'))
  s += normdef ('.tinyfield', bck(blauw1), col('blauw4'), wgt('bold'))
  s += normdef ('.tinybutton', dis('inline'), bck(blauw1), col('blauw4'), wgt('bold'))
  css_sz = '10pt'  
  s += (wide) ? normdef ('BODY.grondtekst', stl('sans-serif'), scf(beige2), ali('justify'), bck('white'), col('black'), pad('4em 2px 2px 2px')) // , pos('absolute')
              : normdef ('BODY.grondtekst', stl('sans-serif'), scf(beige2), ali('left'),    bck('white'), col('black'), pad('4em 2px 2px 2px')) // , pos('absolute')
  s += normdef ('DL', mar('0px'), dis('compact'))
  s += normdef ('DT', wgt('bold'), col('black'), flt('left'))
  s += normdef ('DD', wgt('normal'), col('black'), mlf('15%'))
  s += normdef ('OL', col('black'), wgt('normal'))
  s += normdef ('UL', col('black'), mlf('1em'))
  s += linkdef ('.note', 'underline', 'none', 'normal') // (name, deco, weight, style, link, visited, hover, active, ...)
  s += linkdef ('.cite', 'underline', 'none', 'italic')
  s += hovdef ('.bruineknop','#FFC000','black','brown','#FFC000',true)
  s += hovdef ('.geleknop', blauw3, beige1, blauw1, beige3, true)
  css_sz = '110%'
  s += normdef ('TH', bck('#FFE0B0'))
  s += normdef ('.subkop', ali('center'), wgt('bold'))
  css_sz = '120%'
  s += normdef ('.kop', pos('relative'), ali('center'), wgt('bold'))
  css_sz = '140%'
  s += (MSIE) ? normdef ('.grondtekst .titelkop', col('black'), bgc('white'), vri('small-caps'), pad('3 10 3 10px'), pos('absolute'), wgt('bold'), top('20px'), rgt('20px'))
              : normdef ('.grondtekst .titelkop', col('black'), bgc('white'), vri('small-caps'), pad('3 10 3 10px'), pos('fixed'), zin('10'), wgt('bold'), top('20px'), rgt('20px'))
  s += (MSIE) ? normdef ('.index .titelkop', col('black'), bgc(beige1), vri('small-caps'), pad('3 10 3 10px'), pos('absolute'), wgt('bold'), top('20px'), rgt('20px'))
              : normdef ('.index .titelkop', col('black'), bgc(beige1), vri('small-caps'), pad('3 10 3 10px'), pos('fixed'), zin('10'), wgt('bold'), top('20px'), rgt('20px'))
  s += normdef ('.titel2kop', col('black'), vri('small-caps'), dis('block'), mar('10px'), wgt('bold'))
  css_sz = '10pt'
  s += (NS) ? normdef ('.roze-blok', dis('block'), pos('relative'), lft('0px'), wid ('95%'), flt('center'), mar('20px 0 0 0'), pad('10px'), bck(blauw3), col(beige1))
            : normdef ('.roze-blok', dis('block'), pos('relative'), lft('0px'), wid ('100%'), flt('center'), mar('80px 0 0 0'), pad('10px'), bck(blauw3), col(beige1))
  s += linkdef ('.roze-blok A', 'none', 'bold', 'normal', beige1, beige2, blauw1, 'red')
  s += normdef ('.pericoop', flt('right'), wid('80%'), dis('block')) 
  s += normdef ('.perilink', flt('left'), dis('block'), wid('20%'))
  s += linkdef ('DT A', 'none', 'bold', 'normal', beige1, beige2, 'black', 'red')
  s += normdef ('B.wide', wgt('bold'), dis('inline'), lht('20pt'))
  s += normdef ('I.wide', stl('italic'), lht('10pt'), pdt('0px'))
  s += normdef ('.knopN4', wgt('bold'))
  s += normdef ('.zwart', col('black'), bck('white'))
  s += normdef ('.text', col('black'))
  s += normdef ('.bruin2', col('brown'), bck('white'))
  s += normdef ('.normtext', col('black'), stl('sans-serif'), wgt('normal'), siz('10pt'))
  s += normdef ('.wit', bck('white'))
  s += linkdef ('#footnote A', 'none', 'bold', 'normal', 'white', blauw1, 'yellow', 'pink', pad('1px 3'), bck(blauw4))
  s += normdef ('.bruin', col('black'), bck(blauw1))
  s += linkdef ('.bruin A', 'none', 'bold', 'normal', blauw3, blauw4, beige3, 'red', mar('1px 3'))
  s += normdef ('.geel', col('black'), bck('yellow'))
  s += normdef ('.textkop', pos('relative'), top('1px'), lft('1px'), bck('#FFC000'), bwd('0px'), bcl('#CC00EE'), wid('50%'))
  css_sz = '8pt'
  s += normdef ('.klein')
  css_sz = '11pt'
  s += normdef ('.kopje', pos('relative'), lft('0'), flt('none'), wgt('bold'), ali('left'))
  css_sz = '12pt'
  s += normdef ('.voetnoot', bck('#FFFFC0'), ali('center'), pos('static'), zin('5'), top('100px'))
  css_sz = '25pt'
  s += normdef ('.groot')
  css_sz = '10pt'
  s += normdef ('.title', ali('center'), bck(beige1))
  s += normdef ('.gevaar', pos('relative'), flt('center'), wid('100%'), bck('#FF4000'), col('white'), pad('10'))
  s += normdef ('.indent', ind('5%'), pad('0%'))
 
  s += normdef ('.dikkopje', bck('#FFB570'), col('black'))
  s += normdef ('.rechts', pos ('relative'), ali('right'))
  css_ft = 'serif'
  css_sz = '60pt'
  s += normdef ('.titel', pos('relative'), top('200px'), col(blauw4), mar('2px 80'), zin('3'))
  css_sz = '30pt'
  s += normdef ('.titel1', pos('relative'), top('20px'), col(blauw4), mar('2px 80'), zin('2'))
  css_sz = '15pt'
  s += normdef ('.titel2', pos('relative'), top('50px'), col('black'), mar('2px 100'), zin('2'))
  css_sz = '20pt'
  s += normdef ('.titel3', pos('relative'), top('80px'), col(blauw3), mar('2px 100'), zin('2'))
  css_sz = '25pt'
  s += normdef ('.titel4', pos('relative'), top('110px'), col(blauw3), mar('2px 100'), zin('2'))
  css_sz = '40pt'
  s += normdef ('.titel5', pos('relative'), top('140px'), col(beige3), mar('2px 100'), zin('2'))
  css_sz = '35pt'
  s += normdef ('.titel6', pos('relative'), top('170px'), col(blauw2), mar('2px 100'), zin('2'))
  css_sz = '30pt'
  s += normdef ('.titel7', pos('relative'), top('200px'), col(blauw4), mar('2px 100'), zin('2'))
  css_sz = '25pt'
  s += normdef ('.titel8', pos('relative'), top('230px'), col(blauw4), mar('2px 100'), zin('2'))
  css_sz = '45pt'
  s += normdef ('.titel9', pos('relative'), top('260px'), col(blauw4), mar('2px 100'), zin('2'))
  s += '</STYLE>';
  pagina.document.writeln (s)
}

function Mouser (text)
{
  var line
  if (NS && VS > 4) {
    line = ' onMouseOver="setTimeout(\'window.status=\\\'' + text + '\\\'\', 1); return true;\" '
    return line
  }
  line = ' onMouseOver=\"window.status=\'' + text + '\'; return true;\"'
  line += ' onMouseOut=\"window.status=\'\'; return true;\" '
  return line
}	// Mouser (text) for '' strings

function knop (kleur, help, text, dest)
{
  var s
  if (NS && VS < 5)
    s = '<INPUT TYPE="button" CLASS="knopN4" VALUE="' + text + '" onClick="' + dest + '">'
  else
    s = '<A' + Mouser (help) + ' CLASS="' + kleur + 'knop" HREF="Javascript:void(' + dest + ');">&nbsp;' + text + '&nbsp;</A>'
  return s
}

function depth (raam)
{
  var level_re = /literatuur(.*)/
  var x = level_re.exec (raam.document.location)
// alert ('depth 235: x: '+x)
  var tail = RegExp.$1
  var l = 0
  for (var i = 0; i < tail.length; i++)
    if (tail.charAt(i) == '/') l++
  return l-1
}	// depth: determines current position in literatuur directory tree

function levelstring (raam)
{
  var ls = new String ()
  var d = depth (raam)
// alert ('levelstring 247: d: '+d)
  for (var i = 0; i < d; i++)
    ls += '../'
  return ls
}	// levelstring: creates string to move to 'literatuur'

function book (name,dir,size,abbr,vref)
{
  this.name = name	// name of the book
  this.dir  = dir	// where can we find it
  this.size = size	// number of digits of chapters
  this.abbr = abbr	// abbreviation used for a book
  this.vref = vref	// cees van veelens reference
}	// book: definitions needed to handle a book

function filler ()
{
  var b = new Array
  var n = 0
  b[n++] = new book("Gene&shy;sis",	"bijbel/Genesis/",	2,	"gen",	"gen");	// bijbel
  b[n++] = new book("Exodus",	"bijbel/Exodus/",	2,	"exo",	"exo");
  b[n++] = new book("Levi&shy;ticus",	"bijbel/Leviticus/",	2,	"lev",	"lev");
  b[n++] = new book("Numeri",	"bijbel/Numeri/",	2,	"num",	"num");
  b[n++] = new book("Deutero&shy;nomium", "bijbel/Deuteronomium/", 2,	"deu",	"deu");
  b[n++] = new book("Jozua",	"bijbel/Jozua/",	2,	"joz",	"joz");
  b[n++] = new book("Rich&shy;teren",	"bijbel/Richteren/",	2,	"rich",	"ri");
  b[n++] = new book("Ruth",	"bijbel/Ruth/",		1,	"ruth",	"ru");
  b[n++] = new book("1 Samuël", "bijbel/1_Samuel/",	2,	"1sam",	"1sa");
  b[n++] = new book("2 Samuël", "bijbel/2_Samuel/",	2,	"2sam", "2sa");
  b[n++] = new book("1 Koningen", "bijbel/1_Koningen/",	2,	"1kon",	"1ko");
  b[n++] = new book("2 Koningen", "bijbel/2_Koningen/",	2,	"2kon",	"2ko");
  b[n++] = new book("1 Kro&shy;nieken", "bijbel/1_Kronieken/", 2,	"1kro",	"1kr");
  b[n++] = new book("2 Kro&shy;nieken", "bijbel/2_Kronieken/", 2,	"2kro",	"2kr");
  b[n++] = new book("Ezra",	"bijbel/Ezra/",		2,	"ezra",	"ezr");
  b[n++] = new book("Nehe&shy;mia",	"bijbel/Nehemia/",	2,	"neh",	"neh");
  b[n++] = new book("Ester",	"bijbel/Ester/",	2,	"est",	"est");
  b[n++] = new book("Job",	"bijbel/Job/",		2,	"job",	"job");
  b[n++] = new book("Psalmen",	"bijbel/Psalmen/",	3,	"ps",	"psa");
  b[n++] = new book("Spreuken",	"bijbel/Spreuken/",	2,	"spr",	"spr");
  b[n++] = new book("Prediker",	"bijbel/Prediker/",	2,	"pred",	"pre");
  b[n++] = new book("Hoog&shy;lied",	"bijbel/Hooglied/",	1,	"hoog",	"hgl");
  b[n++] = new book("Jesaja",	"bijbel/Jesaja/",	2,	"jes",	"jes");
  b[n++] = new book("Jeremia",	"bijbel/Jeremia/",	2,	"jer",	"jer");
  b[n++] = new book("Klaag&shy;liederen", "bijbel/Klaagliederen/", 1,	"klaag", "kla");
  b[n++] = new book("Ezechiël", "bijbel/Ezechiel/",	2,	"eze",	"eze");
  b[n++] = new book("Daniël",	"bijbel/Daniel/",	2,	"dan",	"dan");
  b[n++] = new book("Hosea",	"bijbel/Hosea/",	2,	"hos",	"hos");
  b[n++] = new book("Joël",	"bijbel/Joel/",		1,	"joel",	"jl");
  b[n++] = new book("Amos",	"bijbel/Amos/",		1,	"amos",	"amo");
  b[n++] = new book("Obadja",	"bijbel/Obadja/",	0,	"obad", "oba");
  b[n++] = new book("Jona",	"bijbel/Jona/",		1,	"jona",	"jon");
  b[n++] = new book("Micha",	"bijbel/Micha/",	1,	"micha", "mi");
  b[n++] = new book("Nahum",	"bijbel/Nahum/",	1,	"nahum", "nah");
  b[n++] = new book("Haba&shy;kuk",	"bijbel/Habakuk/",	1,	"hab",	"hab");
  b[n++] = new book("Sefanja",	"bijbel/Sefanja/",	1,	"sef",	"zef");
  b[n++] = new book("Haggai",	"bijbel/Haggai/",	1,	"hag",	"hag");
  b[n++] = new book("Zacha&shy;ria",	"bijbel/Zacharia/",	2,	"zach",	"zac");
  b[n++] = new book("Maleachi",	"bijbel/Maleachi/",	1,	"mal",	"mal");
  b[n++] = new book("Matteüs",	"bijbel/Matteus/",	2,	"mat",	"mt");
  b[n++] = new book("Marcus",	"bijbel/Marcus/",	2,	"marc",	"mc");
  b[n++] = new book("Lucas",	"bijbel/Lucas/",	2,	"luc",	"lc");
  b[n++] = new book("Johannes",	"bijbel/Johannes/",	2,	"joh",	"joh");
  b[n++] = new book("Hande&shy;lingen", "bijbel/Handelingen/", 2,	"hand",	"han");
  b[n++] = new book("Romeinen",	"bijbel/Romeinen/",	2,	"rom",	"rom");
  b[n++] = new book("1 Korintiërs", "bijbel/1_Korintiers/", 2, "1kor", "1co");
  b[n++] = new book("2 Korintiërs", "bijbel/2_Korintiers/", 2, "2kor", "2co");
  b[n++] = new book("Galaten",	"bijbel/Galaten/",	1,	"gal",	"gal");
  b[n++] = new book("Efeziërs", "bijbel/Efeziers/",	1,	"efez",	"efe");
  b[n++] = new book("Filip&shy;penzen", "bijbel/Filippenzen/", 1,	"filip", "fil");
  b[n++] = new book("Kolos&shy;senzen", "bijbel/Kolossenzen/", 1,	"kol",	"col");
  b[n++] = new book("1 Tessa&shy;loni&shy;cenzen", "bijbel/1_Tessalonicenzen/", 1, "1tes", "1te");
  b[n++] = new book("2 Tessa&shy;loni&shy;cenzen", "bijbel/2_Tessalonicenzen/", 1, "2tes", "2te");
  b[n++] = new book("1 Timo&shy;teüs", "bijbel/1_Timoteus/", 1,	"1tim",	"1ti");
  b[n++] = new book("2 Timo&shy;teüs", "bijbel/2_Timoteus/", 1,	"2tim", "2ti")
  b[n++] = new book("Titus",	"bijbel/Titus/",	1,	"tit",	"tit")
  b[n++] = new book("File&shy;mon",	"bijbel/Filemon/"	,0,	"filem", "flm")
  b[n++] = new book("Hebreeën", "bijbel/Hebreeen/",	2,	"heb", "heb")
  b[n++] = new book("Jako&shy;bus",	"bijbel/Jakobus/",	1,	"jak", "jac")
  b[n++] = new book("1 Petrus",	"bijbel/1_Petrus/",	1,	"1pet",	"1pe")
  b[n++] = new book("2 Petrus",	"bijbel/2_Petrus/",	1,	"2pet",	"2pe")
  b[n++] = new book("1 Johan&shy;nes", "bijbel/1_Johannes/",	1,	"1joh",	"1jo")
  b[n++] = new book("2 Johan&shy;nes", "bijbel/2_Johannes/",	0,	"2joh",	"2jo")
  b[n++] = new book("3 Johan&shy;nes", "bijbel/3_Johannes/",	0,	"3joh",	"3jo")
  b[n++] = new book("Judas",	"bijbel/Judas/",	0,	"judas", "jud")
  b[n++] = new book("Open&shy;baring", "bijbel/Openbaring/",	2,	"open",	"op")
  b[n++] = new book("Baruch",	"deutero_canonieken/Baruch/", 1, "bar", "-")	// deutero canonieken
  b[n++] = new book("Daniël (aan&shy;vul&shy;lingen)", "deutero_canonieken/Daniel/", 2, "dn2", "-")
  b[n++] = new book("Ester (aan&shy;vul&shy;lingen)", "deutero_canonieken/Ester/", 2, "es2", "-")
  b[n++] = new book("4 Ezra",	"deutero_canonieken/4ezra/", 2,	"4ezra", "-")
  b[n++] = new book("Judit",	"deutero_canonieken/Judit/", 2,	"judit", "-")
  b[n++] = new book ("Psalmen van Salomo","deutero_canonieken/PsalmenSalomo/", 2, "sps", "-")
  b[n++] = new book("1 Makka&shy;beeën", "deutero_canonieken/1Makkabeeen/", 2,	"1mak", "-")
  b[n++] = new book("2 Makka&shy;beeën", "deutero_canonieken/2Makkabeeen/", 2,	"2mak", "-")
  b[n++] = new book("Manasse",	"deutero_canonieken/Manasse/", 0, "man", "-")
  b[n++] = new book("Tobit",	"deutero_canonieken/Tobit/", 2,	"tobit", "-")
  b[n++] = new book("Wijs&shy;heid van Salomo", "deutero_canonieken/Wijsheid/", 2, "wijs", "-")
  b[n++] = new book("Wijs&shy;heid van Jezus Sirach", "deutero_canonieken/JezusSirach/", 2,"js", "-")
  b[n++] = new book("Agrapha",  "apocriefen/Agrapha/", 1, "agr", "-")		// apocrieven
  b[n++] = new book("1 Henoch (Ethiop. Apok.)", "apocriefen/1_Henoch/", 3, "1hen", "-")
  b[n++] = new book("Testa&shy;ment van Ruben", "apocriefen/TestRuben/", 1, "t_rub", "-")
  b[n++] = new book("Testa&shy;ment van Levi", "apocriefen/TestLevi/", 2, "t_levi", "-")
  b[n++] = new book("Jubileeën", "apocriefen/Jubileeen/", 2, "jub", "-")
  b[n++] = new book("Marty&shy;rium van Jesaja","apocriefen/MartJesaja/", 1, "mjs", "-")
  b[n++] = new book("Hande&shy;lingen van Paulus", "apocriefen/ActaPauli/", 2, "ap", "-")
  b[n++] = new book("Evangelie van de Nazorenen", "apocriefen/Nazorenen/", 0, "e_naz", "-")
  b[n++] = new book("Evangelie van de Ebionieten", "apocriefen/Ebionieten/", 0, "e_ebi", "-")
  b[n++] = new book("Evangelie van de Hebreeën", "apocriefen/Hebreeen/", 0, "e_heb", "-")
  b[n++] = new book("Evangelie van de Egypte&shy;naren","apocriefen/Egyptenaren/", 0, "e_egyp", "-")
  b[n++] = new book("Evangelie van Petrus", "apocriefen/Petrus/", 0, "e_pet", "-")
  b[n++] = new book("Evangelie van Judas", "apocriefen/Judas/", 0, "e_jud","-")
  b[n++] = new book("Protevangelie van Jakobus", "apocriefen/Jakobus/", 2, "p_jak", "-")
  b[n++] = new book("Thomas",	"apocriefen/Thomas/",	0,	"tom", "-")
  b[n++] = new book("Gilga&shy;mesj",	"Verhalen/Gilgamesj/",	2,	"gilga", "-")
  b[n++] = new book("Apos&shy;tolicum", "Credoos/Apostolicum/", 0,	"apost", "-")	// symbolica
  b[n++] = new book("Didachè", "Credoos/Didache/", 2, "did", "-")
  b[n++] = new book("Niceno-Con&shy;stanti&shy;nopoli&shy;tanum", "Credoos/Nicea/", 0, "nicea", "-")
  b[n++] = new book("Atha&shy;nasi&shy;anum", "Credoos/Athanasius/", 0,	"athan", "-")
  b[n++] = new book("Barmer Thesen", "Credoos/Barmen/",	0,	"barm",	"-")
  b[n++] = new book("Neder&shy;landse Geloofs&shy;belijdenis", "Credoos/NGB/", 2, "ngb", "-")
  b[n++] = new book("Con&shy;fes&shy;sio Augus&shy;tana", "Credoos/Augustana/", 2, "aug", "-")
  b[n++] = new book("Heidel&shy;bergse Cate&shy;chismus", "Credoos/HC/", 2, "hc",	"-")
  b[n++] = new book("Dordtse Leer&shy;regels", "Credoos/DL/",	1,	"dl", "-")
  b[n++] = new book("Cène Secrète", "Catharen/Cene_Secrete/", 0, "cs", "-")
  b[n++] = new book("Apparel&shy;hamentum", "Catharen/Apparelhamentum/", 0, "appa", "-")
  b[n++] = new book("Synode Rapporten", "http://www.sowkerken.nl/synode/synode.html#Synoderapporten", 0, "sr", "-")
  b[n++] = new book("In aanbouw", "aanbouw.html",	0,	"ia",	"-")
  libsize = n
//alert ('libsize: '+libsize+', b[libsize-1]: '+b[libsize-1].name)
  return b
}	// filler: fills top.Books with relevant data


function URL_found (newline)
{
  var re_1 = /^\{([^}]+)\}/	// { ... }
  if (re_1.test (newline))
  {
    return RegExp.$1
  } else {
    var re_2 = /[^']{1}\{([^\}]+)\}[^']{1}/	// '{ ... }'
    if (re_2.test (newline))
    {
      return RegExp.$1
    }
  }
  return ""
}	// URL-found: returns a {(coded) URL} if there is one

function book_found (bookstring)
{
  for (var b = 0; b < top.libsize ; b++)		// check for which book
  {
    var re_book = new RegExp ('^' + top.Books[b].abbr + '([ 0-9]|$)');
    if (re_book.test (bookstring)) return b	// we found one!
  }
  return -1					// no book found
}	// book_found: returns the index in Books for a {coded URL}, or -1 if no legal code was found

function chap_found (bookstring)
{
  var chap1 = / (\d+):/	// search for chapter
  if (chap1.test (bookstring))
  {
    chap1.exec (bookstring)
    return RegExp.$1
  } else {
    var chap2 = / (\d+)$/
    if (chap2.test (bookstring))
    {
      chap2.exec (bookstring)
      return RegExp.$1
    } else return -1
  }
}	// chap_found: returns the chapter of a {coded URL}, or -1 if none was found.
	// a chapter is found in {book ch:vs} or {book ch}

function verse_found (bookstring)
{
  var vers = /:([0-9]+)/
  if (vers.test (bookstring))
  {		// no verse? OK
    vers.exec (bookstring)
    return RegExp.$1
  } else return -1
}	// verse_found: returns the verse of a {coded URL}, or -1 if none was found.
	// a verse is found in {book ch:vs} only!

function nextframe (origin)
{
//alert ('nextframe: origin: '+origin+', schermen: '+top.schermen+', hisnr: '+top.hisnr+', histo[hisnr]: '+top.histo[top.hisnr])

  switch (top.schermen)
  {
    case 1: return origin;
    case 2: switch (origin)
            {
              case 'f1': return 'f2'
              case 'f2': return 'f1'
            }
    case 3: switch (origin)
            {
              case 'f1': if (top.hisnr < 0) return 'f3'
			 else switch (top.histo[top.hisnr-1])
			 {
			   case 'f2': return 'f3'
			   case 'f3': return 'f2'
			 }
              case 'f2': if (top.hisnr < 0) return 'f3'
			 else switch (top.histo[top.hisnr-1])
			 {
			   case 'f1': return 'f3'
			   case 'f3': return 'f1'
			 }
              case 'f3': if (top.hisnr < 0) return 'f1'
			 else switch (top.histo[top.hisnr-1])
			 {
			   case 'f1': return 'f2'
			   case 'f2': return 'f1'
			 }
            }
    case 4: switch (origin)
            {
              case 'f1': if (top.hisnr < 1) return 'f2'
			 else switch (top.histo[top.hisnr-1])
			 {
			   case 'f2': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f3': return 'f4'
					case 'f4': return 'f3'
				      }
			   case 'f3': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f2': return 'f4'
					case 'f4': return 'f2'
				      }
                           case 'f4': if (top.hisnr < 2) return 'f3'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f2': return 'f3'
					case 'f3': return 'f2'
				      }
			 }
              case 'f2': if (top.hisnr < 1) return 'f3'
			 else switch (top.histo[top.hisnr-1])
			 {
			   case 'f1': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f3': return 'f4'
					case 'f4': return 'f3'
				      }
			   case 'f3': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f1': return 'f4'
					case 'f4': return 'f1'
				      }
                           case 'f4': if (top.hisnr < 2) return 'f3'
				      else switch (top.histo[top.hisnr-2])
				      {
					case 'f1': return 'f3'
					case 'f3': return 'f1'
				      }
			 }
              case 'f3': if (top.hisnr < 1) return 'f4'
			 else switch (top.histo[top.hisnr-1])
			 {
			    case 'f1': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.hisnr-2])
				       {
					 case 'f2': return 'f4'
					 case 'f4': return 'f2'
				       }
			    case 'f2': if (top.hisnr < 2) return 'f4'
				      else switch (top.histo[top.top.hisnr-2])
				       {
					 case 'f1': return 'f4'
					 case 'f4': return 'f1'
				       }
                            case 'f4': if (top.hisnr < 2) return 'f2'
				      else switch (top.histo[top.hisnr-2])
				       {
					 case 'f1': return 'f2'
					 case 'f2': return 'f1'
				       }
			 }
              case 'f4': if (top.hisnr < 2) return 'f1'
			 else switch (top.histo[top.hisnr-1])
			 {
			    case 'f1': if (top.hisnr < 2) return 'f3'
				      else switch (top.histo[top.hisnr-2])
				       {
					 case 'f2': return 'f3'
					 case 'f3': return 'f2'
				       }
			    case 'f2': if (top.hisnr < 2) return 'f3'
				      else switch (top.histo[top.hisnr-2])
				       {
					 case 'f1': return 'f3'
					 case 'f3': return 'f1'
				       }
			    case 'f3': if (top.hisnr < 2) return 'f2'
				      else switch (top.histo[top.hisnr-2])
				       {
					 case 'f1': return 'f2'
					 case 'f2': return 'f1'
				       }
			 }
            }
  }
}

function reffed (from, footnote)
{
  var lastbook = -1
  var lastchap = -1
  var chap
  var b = -1
  var loc_1 = /(\w+)\.htm/i
  var loc_2 = /http([a-z0-9:.\/]+)/i
  var build_URL
  var omitted
  var name
  var link2 = "', self))\">"
  rest_re = /([-.,][^}]*)/

  while ((code=URL_found (footnote)) != "")	// is there any URL?
  {
    build_URL = new String ("<A CLASS='note'" + Mouser('klik voor tekst')
              + "HREF=\"JavaScript:void(swap(" + from.name + ", '")	// first part of replacement
    if (loc_1.test (code))
    {			// is there a real URL?
      build_URL += code + link2			// so be it (BEWARE: ADD </A> YOURSELF!!! as in '{x.html}word</A>' )
    }
    else if (loc_2.test (code))
    {
      build_URL += code + link2
    }
    else {
      b = book_found (code)
      omitted = (b == -1)			// omitted as in A: '{6:8}' (in same book as text) or B: '{gen 1:3}, {5:7}' (in Genesis)
      if (omitted)
      { 					// No book between braces
	      b = lastbook				// cope with omitted book
	      if (b == -1)
	      {					// No book before mentioned!
	        loc_1.exec (from.document.location.href)
          name = RegExp.$1
	        b = book_found (name)			// Try to conclude from ourselves
	        if (b != -1)
	          omitted = false			// Book omitted, but implied.
	      }
	      if (b != -1) code = top.Books[b].abbr+' '+code
      }
      if (b == -1)
      {
	
        alert ("reffed: No book found in: " + code)
        build_URL = code 
      }
      else
      {
	      lastbook = b				// remember this
	      build_URL += '{'+code+'}' + link2		// make book URL
	      chap = chap_found (code)
	      lastchap = chap
	      if (top.Books[b].size > 0) verse = verse_found (code)
	      else verse = chap
        rest = (rest_re.test(code)) ? RegExp.$1 : ''
	      if (!omitted)
	      build_URL += top.Books[b].name // recall only if specified
        build_URL += " " + lastchap
	      if (top.Books[b].size > 0 && verse != -1)
	      build_URL += ':' + verse + rest
        build_URL += "</A>"
      }
    }
    re_link = /([^']|^)\{([^\}]*)\}([^']|$)/
    footnote = footnote.replace (re_link, "$1"+build_URL+"$3")
  }
  return footnote
}	// reffed: converts footnotes with {(coded) URL}s into text with relevant links (references).

// LOADING FUNCTIONS

function show (me)
{
  if (MSIE)
  {
    var root = (me.document.documentElement && me.document.compatMode == "CSS1Compat") ? me.document.documentElement : me.document.body;
    root.all['sticker'].style.top = (root.scrollTop+30)+'px';
  }

// TIME FOR INTERROGATION?

  if (top.enquete == 'new' && eval(top.Hits) >= 3 && top.pagecnt > enq_loads)
    swap(self, ls+'vragen.html')
  return true
}	// show

function foot (from, note)	// string, string
{
  var footnote = document.getElementById('footnote')
  var comment = reffed (from, note) // , 'top'
//alert (comment)
  footnote.innerHTML = comment
}	//foot

function uncode (code, ls)
{
  b = book_found (code)
  if (b == -1)
    alert ("uncode: No book found in: "+code)
  else
  {
    html = (top.Books[b].dir.indexOf(".html") > 1)	// some dirs are actually .html files: check
    build = ls + top.Books[b].dir
    chap = chap_found (code)
    if (chap == -1)
    {
      build += (html) ? "" : "index"
      var verse = -1
    } else {
      build += top.Books[b].abbr
      if (top.Books[b].size > 0)
      {
      	while (chap.length < top.Books[b].size) chap = "0" + chap
	      build += chap
	      verse = verse_found (code)
      } else verse = chap
    }
    build += (html) ? "" : ".html"
    if (verse != -1 && verse != 1) build += "#" + verse
    return build;
  }
}	// uncode

function loading (ns, tg)
{
//alert ('loading, ns: '+ns+', tg: '+tg)
  switch (ns)
  {
    case 'f1': window.f1.location.href=tg;
	       break;
    case 'f2': window.f2.location.href=tg;
	       break;
    case 'f3': window.f3.location.href=tg;
	       break;
    case 'f4': window.f4.location.href=tg;
	       break;
  }
}

function swap (from, target, me)
{
//alert (target)
  var code = URL_found (target)
  ls = (from.name == me.name) ? levelstring(from) : levelstring(me)
  if (code != "") target = uncode (code, ls)
  var re = /[0-9]\.html/
  if ((TV == 4) && re.test(target)) {
    target = target.replace (/([0-9a-z]+)\.html/, version+'$1.html')
  }
  re = /text\.html/
  if (re.test(target)) freshtext = false
  var newscreen = nextframe (from.name)
  loading (newscreen, target)
}	// swap window for target

function same (raam, target)
{
  var code = top.URL_found (target)
  if (code != "") target = uncode (code, '')
  raam.location.href = target
}	// same window for target

function getCookie (Name)
{
  var search = Name + "="
  if (document.cookie.length > 0)
  {
    var offset = document.cookie.indexOf(search)
    if (offset != -1)	// Yes!! We found Name
    {
      offset += search.length
      var end = document.cookie.indexOf (";", offset)
      if (end == -1) end = document.cookie.length	// no ';', this will be the last one
      return unescape(document.cookie.substring (offset, end))
    }
  }
  return ""
}	// getCookie

function getStart (Source, Name)
{
  var search = Name + "="
  if (Source.length > 0)
  {
    var offset = Source.indexOf(search)
    if (offset != -1)	//Yes!!
    {
      offset += search.length
      var end = Source.indexOf (";", offset)
      if (end == -1) end = Source.length
      return Source.substring (offset, end)
    }
  }
  return ""
}	// extract the value of Name from Source ("... Name=value; ...")

function setCookie ()
{
  var source = new String()

  function add (Name, Value)
  {
    if (source != "") source += ";"
    source += Name + "=" + Value
  }

  for (var i = 0; i < arguments.length; i += 2)
  {
    if (arguments[i] == 'LOGON')
    {
      var exp = new Date()
      exp.setTime (eval(arguments[i+1]) + 2635200000 * 6)	// expires after 6 month
    }
    add (arguments[i], arguments[i+1])
  }
  top.cookie = 'START=' + escape(source) + '; expires=' + exp.toGMTString()
}

function starter ()
{
  pagecnt = 1			// nr of pages seen today
  Books = new filler()
  cut = false		// screen not yet split
  var start = getCookie ('START')
  var today = new Date()
  if (start == "")
  {
    Hits = 1			// no cookie found: new to this site
    enquete = 'new'
    from = document.referrer
    Logon = today.getTime()	// store date we first met
  } else {
    Hits = eval(getStart (start, 'HITS'))	// follow_up
    if (Hits == 'NaN')
      Hits = 1
    else Hits++
    from = getStart (start, 'FROM')
    if (from == '')
      from = referrer
    enquete = getStart (start, 'ENQ')
    if (enquete == '')
      enquete = 'new'
    Logon = getStart (start, 'LOGON')
    setCookie ('HITS', Hits, 'LOGON', Logon, 'FROM', from, 'ENQ', enquete)
  }
}	// starter: setup

function setup_page (raam)
{
//alert ('setup')
  top.lastframe = raam.name
//  top.show (raam);
  raam.document.body.innerHTML = top.make (raam);
}

function welcome (abbr)
{
//alert (abbr)
  if (abbr == 'undefined') abbr = 'gen'
  var s = ""
  var w = 99/top.schermen
  var d = top.document.getElementById('framespace')
//  d.innerHTML = 'Klaar';
  var range  = top.document.forms['f1'].a
  var items  = top.document.forms['f1'].b
  
  for (i = 1; i <= top.schermen; i++)
  { 
    if (i == 1) b = bs (abbr)	// book[abbr]
//alert ('welcome, i: '+i+', hisnr: '+hisnr+', b: '+b+', abbr: '+abbr+', schermen: '+top.schermen)
    if (hisnr > 0)
    {
//alert (hisnr)
      var newurl = Books[b].dir + 'index.html'
//alert ('newurl: '+newurl)
      loading ('f1',newurl)
      return;
    }
    else
    { 
      s += '<IFRAME ID="f'+i+'" NAME="f'+i+'" WIDTH="'+w+'%" HEIGHT="90%" SRC="'
      s += Books[b].dir  +'index.html'
    }
    b++
    if (b >= libsize) b = 0
    s += '">Jammer, uw browser ondersteunt geen IFRAME.<br>Moderniseer uw browser.</IFRAME>' 
  }
//alert (s)
  d.innerHTML = s
}	// welcome: frames were installed, help now goes to 'rechts'.

function scherm (isc, inum, irp, prt)
{
  top.schermen = isc
  top.vsnumbers = inum
  top.rep = irp
  top.printing = prt
  top.romp.location.replace('romp.html')
}	// scherm

function help (t)
{
//alert ('hisnr: '+top.hisnr)
  if (hisnr > 0)
  {
    last = histo[hisnr]
    newframe = nextframe(last)
//alert ('hisnr: '+hisnr+', last: '+last+', newframe: '+newframe)
    switch (newframe)
    {
      case 'f1': window.f1.document.body.innerHTML = t; break
      case 'f2': window.f2.document.body.innerHTML = t; break
      case 'f3': window.f3.document.body.innerHTML = t; break
      case 'f4': window.f4.document.body.innerHTML = t; break
    }
  }
  else
  { 
    f = top.document.getElementById('framespace')
//alert (f.innerHTML)
    f.innerHTML = t
  }
}	// help: check where to display help.

function uc (s)
{
  s = s.toUpperCase()
  s = s.replace (/UML;/g, 'uml;')
  s = s.replace (/ACUTE;/g, 'acute;')
  s = s.replace (/GRAVE;/g, 'grave;')
  s = s.replace (/&SHY;/g, '&shy;')
  return s
}	// uc: convert to uppercase

function new_me (me)
{
  switch (me)
  {
    case 'hb':  return '51'
    case '51':  return 'sv'
    case 'sv':  return 'vg'
    case 'vg':  return 'lxx'
    case 'gn':  return 'mt'
    case 'lxx': return 'mt'
    case 'mt':  return '*'
  }
}

function search_bk_ch (s)
{
  var re
  var me = top.vsnumbers
  while (me != '*') {
    re = new RegExp (me + '=([0-9]+)')
    if (re.test (s)) return RegExp.$1
    re = new RegExp (me + '-')
    if (re.test (s)) return '-'
    me = new_me (me)
  }
  return ''
}	// search_bk_ch in: bk = n [, bk = n]...

function search_ch (s)
{
  var ch = search_bk_ch (s)
  if (ch != '') return ch
  var re = new RegExp ('^([0-9]+)')
  if (re.test (s)) return RegExp.$1
  return ''
}	// search_ch:	returns n [,b=n] chapter


function search_vs (s)	//
{
  var me = top.vsnumbers
  var re
  while (me != '*') {
    re = new RegExp (me+'-')
    if (re.test (s)) break
    re = new RegExp (me+'=([^,>]+)')
    if (re.test (s)) return RegExp.$1
    me = new_me (me)
  }
  re = /^([^,>]*)/
  if (re.test (s)) return RegExp.$1
  else return ''
}	// search_vs	returns c1[:v1[-c2[:v2]]] verse definition

function slasher (s)
{
 var re = /'/g
 var s2 = s.replace (re, '\\\'')
 re = /"/g
 s2 = s2.replace (re, '\\"')
 return s2
}	// slasher

function bs (s)
{
  for (var b=0; b < top.libsize; b++)
  {
    if (s == top.Books[b].abbr) return b
  }
  return -1
}

function make (raam)
{
  var page = raam.document.body.innerHTML
  var start = 0
  var vstart = 0
  var vrep = 1
  var lname = ''
  var uname = ''
  var chap = ''
  var adder = ''
  var brakes = ''
  var blok
  var contents
  var b
  var def
  var re
  var re2
  var re3
  var re4
  var brakes
  var liend
  var listart
  var lastline = ''
  var noot
  var tgc
  var tgv
  var shc
  var lshc = -1
  var shv
  var van
  var tot
  var tail
  var wit = '&nbsp;&nbsp;&nbsp;'
  var woord
//alert ('make')
// pre-make
  re = /&lt;([^&]*)&gt;/g;
  page = page.replace (re, '<$1>')
//alert ('\< xxx \>');
//  re = /=""/g
//  page = page.replace (re, ' ')
  switch (top.rep)
  {
    case 1:
    case 2:
    case 3: re = /<#[|]><[*][*]>/g
	    page = page.replace (re, '<P><#><**>')
	    re = /[|]<#[|]>/g
	    page = page.replace (re, '<P><#>')
	    break
    default:
  }
//alert ('past premake, rep: '+top.rep)

//	<blok [,in=true]> <ch n [ , bk = n] [- n [ , bk = n]] " tekst ">...</blok>

  re = /<blok([^@]*)<\/blok>/i
  if (re.test(page))
  {
    def = RegExp.$1
    blok = '<P CLASS="roze-blok">'
    re3 = / in="?true"?/i
    if (re3.test(def))
      blok += '<SPAN CLASS="bruin"><A CLASS="note"' + Mouser('Klik voor info')
            + 'HREF="Javascript:void(top.swap(self, \'Inleiding.html\', self));">Inleiding</A></SPAN><BR>'
    var om = ''
    re2 = /<ch ([^->]+)-*([^>]*)>([^<]*)<\/ch>/i
    while (re2.test (def))
    {
      van = RegExp.$1
      tot = RegExp.$2
      woord = RegExp.$3
      van = search_ch (van)
      tot = search_ch (tot)
      if (tot == '') tot = van
      blok += om + woord
      if (van == 0 ) {
        if (woord != '') blok += '\n<A CLASS="note"' + Mouser('') + 'HREF="#0">'+woord+'</A>'
      } else for (var i = eval(van); i <= eval(tot); i++) blok += '\n<A CLASS="note"' + Mouser('Kijk verder') + 'HREF="#'+i+'">'+i+'</A>'
      def = def.replace (re2,'')
      om = '<BR>'
    }
    blok += '</P>'
    page = page.replace(re, blok)
  }

//	[=evt, 'xx'=literal, in[]=set.
//
//	< ## abbr [ , n] [ , bk = n ] ... >
//	< # bk = n [ , bk = n ] ... > ; bk in ['lxx','mt','sv','51','gn','hb']
//	< # >

  re = /<#([^>]*>)/			// <# ...>
//alert ('Roze blok gereed, TV: '+TV+', schermen: '+schermen+', rep: '+rep+', vsnumbers: '+vsnumbers);
  while (re.test (page))
  {
    def = RegExp.$1
    if (def.charAt(0) == '#')		// <## ... > chapter ?
    {
      re2 = /:/				// <## boek , n:n-n:n [, bk = n:n-n:n]! ... > versref in index
      if (re2.test (def))
      {
//alert ('def: '+def)
	re2 = /#([^,]*),([^;!>]*);*([a-z]*)!([^>]*)>/
	//	 lname	 tail	  language  contents
	re2.exec (def)
	tail = RegExp.$2
	language = RegExp.$3
	contents = RegExp.$4
        blok = ''
        if (RegExp.$1 != '')
        { 
          abrname = RegExp.$1
          if (lname == '') lname = abrname; else alert ('wrong name:'+abrname);
          b = book_found (abrname)
	  if (b == -1) alert ('def: '+def+', abrname: '+abrname+', b: '+b +', blok: '+blok)
	  uname = top.Books[b].name
          lastline = '<div id="sticker" class="titelkop">'+uname+'</div>'
          blok = '<DL COMPACT>'
	}
//alert ('tail: '+tail)		// vr [, vr]
	b = bs(lname)
	if (b < 0) alert ('Error in <#'+def+'>')
	var def2 = search_vs (tail)
	if (top.Books[b].size == 0)
	{
	  re3 = /:([0-9]*)(-*:*[0-9]*)/
//                 verse till verse
	  tgc = 0; shc = 0; // chapter = 0
	  re3.exec (tail)
	  tgv = RegExp.$1   // target verse
	  shv = tgv         // show verse
	  tot = RegExp.$2   // till ...
	} else {
	  re3 = /([0-9]+):([0-9]*)([^,>]*)/
//                chapter verse    till rest
	  re3.exec (tail)
	  tgc = RegExp.$1   // target chapter
	  shc = tgc         // show chapter
	  tgv = RegExp.$2   // target verse
	  if (tgv == '') tgv = '1'
	  shv = tgv         // show verse
	  tot = RegExp.$3   // till ...
	}
	if (top.Books[b].size == 0)
	{
	  re3 = /:([0-9]*)(-*:*[0-9]*)/
	  if (re3.test (def2))
	  { shv = RegExp.$1; tot = RegExp.$2 }
	} else {
	  re3 = /([0-9]+):([0-9]*)([^,>]*)/
	  if (re3.test (def2))
	  { shc = RegExp.$1; shv = RegExp.$2; tot = RegExp.$3 }
	}
	blok += brakes
        blok += '<DT>' // <DIV CLASS="perilink">
	blok += (shc != lshc) ? '<A NAME="'+shc+'">' : ''
	lshc = shc
	blok += '<A ' + Mouser('Klik voor tekst') + 'HREF="Javascript:void(top.swap(self, \'{'+lname+' '
	if (tgc != 0)
	{
	  blok += tgc
	  if (tgv != '1') blok += ':' + tgv
	} else blok += tgv
	blok += '}\',self,\''+language+'\'));">'
	if (shc != 0) blok += shc+':'+shv
	else blok += shv
	blok += tot+'</a></dt>' // </div>
	blok += ' <DD>'+contents+'</dd>' // <DIV CLASS=pericoop>..</DIV>
	page = page.replace (re, blok)
      }
      else				// <## [ name | "|"... ] [ , n] [ , bk - ] | [ , bk = n ]... > in textfile
      {
//        alert (def)
	re2 = /#([^,>\|]*)(\|*),*([^>]*)/	// creates header
	//	 lname     brk,   tail
	re2.exec (def)
	var abrname = RegExp.$1		// lowercase abbr name
	if (abrname != '') lname = abrname
	brakes = RegExp.$2		// some ||
	if (lname == '') alert ('No book specified in: <#'+def)
	tail = RegExp.$3
	b = book_found (lname)
	if (b == -1) alert ('No book found in textfile, def: '+def+', lname: '+lname+', b: '+b +', blok: '+blok)
	uname = top.Books[b].name	// long name
//	if (tail == '' && top.Books[b].size != 0)
//	  alert ('Error in chapter definition: '+def+': tail: '+tail)
	chap = search_ch (tail)
//alert('chap: '+chap)
	if (chap == '-') 		// no longer header needed, wipe out and skip this
	  page = page.replace (re, brakes)
	else				// we need a header here
	{
	  frameName = self.name
	  if (top.rep == 3)		// 3: <OL>, start: versnummer
	  {
	    if (start == 0)
	      liend = ''
            else
	      liend = '</OL><div class="titel2kop">'+uname+' '+chap+'</div>'	// new chapter
	    listart = '<OL CLASS="zwart">'
	  }
	  else				// no <LI> but straight texts
	  {
            if (start == 0)
            {
              listart = '';
    	      if (abrname != '')	// the first in the page: floating
	      {
	        vstart = 0
	        page = page.replace (re, '')
                chap = (chap == '') ? tail : chap
	        lastline += '<div id="sticker" class="titelkop"><A CLASS="note"' +
                Mouser('') + 'HREF="Javascript:void(top.swap(self, \'{'+lname+'}\', self));">'+uname+'</A> '+chap+'</div>'
	      }
	      else			// not the first, not floating
                page = page.replace (re, '<div class="titel2kop"><A  CLASS="note"' +
                Mouser('') + 'HREF="Javascript:void(top.swap(self, \'{'+lname+'}\', self));">'+uname+'</A> '+chap+'</div>')
	    }
	    else
	    {
// alert('start: '+start)
              page = page.replace (re, '<div class="titel2kop"><A  CLASS="note"' +
              Mouser('') + 'HREF="Javascript:void(top.swap(self, \'{'+lname+'}\', self));">'+uname+'</A> '+chap+'</div>')
	      vstart = 0;
//	      page = page.replace (re, '')
	    }
	  }
	}
      }

    } else {
      start++
      if (def == '>' || def == '|>')		// <# [ | ] > verse -id
      {
	vstart++
	switch (top.rep)
	{
	  case 1:
	  case 2:
          {
	    if ((vstart == 1) || (vrep == 1) || ((vstart % vrep) == 0))
	      page = page.replace (re, '<BR><A CLASS="note"' + Mouser('') + 'NAME="'+start+'">'+vstart+' ')
	    else
	      page = page.replace (re, '<BR><A CLASS="note"' + Mouser('') + 'NAME="'+start+'"> ')
	    break
	  }
	  case 3: {
	    liend = ((start == 1) || (vstart == 1)) ? '' : '</SPAN></LI>'
	    if ((vstart == 1) || (vrep == 1) || ((vstart % vrep) == 0))
	      page = page.replace (re, liend + '<A CLASS="note"' + Mouser('') + 'NAME="'+start+'"><LI CLASS="zwart"><SPAN CLASS="zwart">')
	    else
	      page = page.replace (re, liend + '<A CLASS="note"' + Mouser('') + 'NAME="'+start+'"><LI CLASS="wit"><SPAN CLASS="zwart">')
	    break
	  }
	  case 4:
	  case 6: {
	    if (def == '|>') {
	      if ((vstart == 1) || (vrep == 1) || ((vstart % vrep) == 0))
		page = page.replace (re, '<BR><A NAME="'+start+'">'+vstart+' ')
	      else
		page = page.replace (re, '<BR><A NAME="'+start+'"> ')
	    } else {
	      if ((vstart == 1) || (vrep == 1) || ((vstart % vrep) == 0))
		page = page.replace (re, ' <A NAME="'+start+'">'+vstart+' ')
	      else
		page = page.replace (re, ' <A NAME="'+start+'"> ')
	    }
	    break
	  }
	  case 5:
	  case 7: {
	    if (def == '|>') {
	      page = page.replace (re, '<BR><A NAME="'+start+'">')
	    } else {
	      page = page.replace (re, ' <A NAME="'+start+'">')
	    }
	    break
	  }
	}
      } else {				// <# [ bk ] = n [, bk = n ]... >
	if (def.indexOf ("?") != -1) {	// <# [ | ]n bk?x>	ALLEEN vers x bij bk
	  re4 = new RegExp ('([|]*).*' + top.vsnumbers + '\\?([0-9]+)')
	  if (re4.test (def)) {
	    listart = RegExp.$1
	    vstart = RegExp.$2
	    switch (top.rep)
	    {
	      case 1:
	      case 2:
	      case 4:
	      case 6: {
	        page = page.replace (re, listart + '<A NAME="'+start+'">'+vstart+' ')
	        break
	      }
	      case 3: {
	        liend = ((start == 1) || (vstart == 1)) ? '' : '</LI>'
	        page = page.replace (re, liend+'\n<A NAME="'+start+'"><LI VALUE="'+vstart+'">')
	        break
	      }
	      case 5:
	      case 7: {
	        page = page.replace (re, listart + ' <A NAME="'+start+'">')
		break
	      }
	    }
	  } else page = page.replace (re, '')
	} else {
	  vpart = ""
	  vstart++
	  var me = top.vsnumbers
	  while (me != '*') {
	    re2 = new RegExp (me+'=([0-9]+)([a-z]*)') // <#bk=n[a]> altijd vers, maar bij bk apart nummer
	    if (re2.test (def)) {
	      vstart = RegExp.$1
	      vpart = RegExp.$2
	      break
	    }
	    me = new_me (me)
	  }
	  if (me == '*')			// nothing found yet
	  {
	    re3 = new RegExp ('^=([0-9]+)')	// <#=n> altijd...
	    if (re3.test (def)) {
	      vstart = RegExp.$1;
	      start = vstart
	    }
	  }
	  re4 = new RegExp ('%([0-9]+)')	// modulo function: show verse after n verses
	  if (re4.test (def)) { vrep = RegExp.$1 }
	  switch (top.rep)
	  {
	    case 1:
	    case 2:
	    case 4:
	    case 6: {
	      if ((vstart == 1) || (vrep == 1) || ((vstart % vrep) == 0))
		page = page.replace (re, ' <A NAME="'+start+'">'+vstart+vpart+' ')
	      else
		page = page.replace (re, ' <A NAME="'+start+'">')
	      break
	    }
	    case 3: {
	      liend = ((start == 1) || (vstart == 1)) ? '' : '</LI>'
	      vpart = (vpart != '') ? vpart + ' ' : ''
	      page = page.replace (re, liend+'\n<A NAME="'+start+'"><LI VALUE="'+vstart+'">'+vpart)
	      break
	    }
	    case 5:
	    case 7: {
	      page = page.replace (re, ' <A NAME="'+start+'">')
	      break
	    }
	  }
	}
      }
    }
  }

// | als nieuwe regel

  re = /[|]<\/LI>/g
  page = page.replace (re, '</LI><P>')
  re = /([^\\])[|]/g
  page = page.replace (re, '$1<BR>')
  re = /\\[|]/g
  page = page.replace (re, '|')

// <F B|C =" ... "> ... </F> footnote B: retype words in boldface, C: don't retype

  re = /<[fF] ([bBcC])="([^"]*)">/
  while (re.test (page))
  { var dash = RegExp.$1
    noot = slasher (RegExp.$2)
    re3 = /([^.!;:,?])$/
    noot = noot.replace (re3, '$1.')
    page = (top.rep == 6 || top.rep == 7) ? page.replace(re, '') : page.replace (re, '|1')
    re2 = /<\/[fF]>/
    page = (top.rep == 6 || top.rep == 7) ? page.replace(re, '') : page.replace (re2, '|2')
    if (top.rep != 6 && top.rep != 7) {
      re2 = /\|1([^|]*)\|2/
      if (re2.test (page))
      {
        woord = slasher (RegExp.$1)
      } else alert ('Cannot find woord in noot: '+noot)
      re2 = /\|1/
      page = (dash == 'b' || dash == 'B')	// body
             ? page.replace (re2, '<A CLASS="note"' + Mouser('klik voor voetnoot')
               + 'HREF="Javascript:void(top.foot(self, \'<B>' + woord + ':</B> ' + noot + '\'));">')
	     : page.replace (re2, '<A CLASS="note"' + Mouser('klik voor voetnoot')
	       + 'HREF="Javascript:void(top.foot(self, \'' + noot + '\'));">')
      re2 = /\|2/
      if (re2.test (page))
      {
        page = page.replace (re2, '</A>')
//alert(page)
      }
      else alert ('Cannot find </F> in noot: '+noot)
    }
  }

// <C C=" ... "> ... </C> citation

  re = /<[cC] [cC]="([^"]*)">/
  re2 = /<[\/][cC]>/
  while (re.test (page))
  {
    noot = slasher (RegExp.$1)
//alert (noot)
    page = (top.rep == 6 || top.rep == 7)
           ? page.replace (re, '<I>')
	   : page.replace (re, '<A CLASS="cite"' + Mouser('klik voor citaat')
             + 'HREF="Javascript:void(top.foot(self, \'<B>Citaat:</B> '+noot+'.\'));">')
    if (re2.test (page))
      page = (top.rep == 6 || top.rep == 7) ? page.replace (re2, '</I>') : page.replace (re2, '</A>')
    else alert ('Cannot find </C> in page:\n'+page)
  }

//	<*>	indent in poetry

  switch (top.rep) {
    case 1:
    case 3: {
      re = /<[*]->(.*\n.*<LI.*>)/g
      page = page.replace (re, '$1'+wit)
      re = /<[*]->(.*[0-9]+) /g
      page = page.replace (re, '$1'+wit)
      re = /<[*]-*>/g
      page = page.replace (re, wit)
      break
    }
    case 2: {
      re = /<[*]->(.*[0-9]+ )/g
      page = page.replace (re, wit+'$1')
      re = /<[*]-*>/g
      page = page.replace (re, wit)
      break
    }
    case 4:
    case 5:
    case 6:
    case 7: {
      re = /<BR>([^<]*)<[*]>/g
      page = page.replace (re, '<BR>'+wit+'$1')
      re = /(<A NAME[^>]+)>([^<]*)<[*]>/g
      page = page.replace (re, '<BR>'+'$1'+'>'+wit+'$2')
      re = /<[*]->/g
      page = page.replace (re, wit)
      break
    }
  }

//	<**>	indent

  wit = wit + wit
  switch (top.rep) {
    case 1:
    case 3: {
      re = /<[*][*]>/g
      page = page.replace (re, wit)
      break
    }
    case 2: {
      re = /<BR>(.*)<[*][*]>/
      while (re.test(page)) page = page.replace (re, '<BR>'+wit+'$1')
      break
    }
    case 4:
    case 5:
    case 6:
    case 7: {
      re = /<[*][*]->/g
      page = page.replace (re, wit)
      re = /<BR>([^<]*)<[*][*]>/g
      page = page.replace (re, '<BR>'+wit+'$1')
      re = /(<A NAME[^>]+)>([^<]*)<[*][*]>/g
      page = page.replace (re, '<BR>'+'$1'+'>'+wit+'$2')
      re = /<[*][*]>/g
      page = page.replace (re,'<BR>'+wit)
      break
    }
  }

//	H-eren -> HEREN

  re = new RegExp ('H-eren','g')
  page = page.replace (re, 'H<SPAN CLASS=klein>EREN</SPAN>')

//	H-ere -> HERE

  re = new RegExp ('H-ere','g')
  page = page.replace (re, 'H<SPAN CLASS=klein>ERE</SPAN>')

//	<VO T= filename >	Vorig

  re = /<VO T="*([^">#]+)([^">]*)"*>/i
  page = page.replace (re, '\n<FORM>' + knop ('gele', 'Klik voor voorafgaande', 'Vorig', 'top.same(self, \'$1.html$2\')') + '</FORM>')

//	<VV T= filename >	Vervolg

  re = /<VV T="*([^">#]+)([^">]*)"*>/i
  page = page.replace (re, '\n<FORM>' + knop ('gele', 'Klik voor vervolg', 'Vervolg', 'top.same(self, \'$1.html$2\')') + '</FORM>')

//	%...%	boldface

  re = /([^\\])%([^%]*)%/g
  page = page.replace (re, '$1<B CLASS="wide">$2</B>')
  re = /\\%/g
  page = page.replace (re, '%')

//	^...^	italics

  re = /([^\\])\^([^\^]*)\^/g
  page = page.replace (re, '$1<I CLASS="wide">$2</I>')
  re = /\\\^/g
  page = page.replace (re, '^')

// superfluous for some browsers

  if (NS)
  {
    re = new RegExp ('&shy;','g')
    page = page.replace (re, '')
  }
  page += lastline
  return page
}	// make ('page')

