///////////////////////////////////////////////////////////////////////
//
//   This program is free software; you can redistribute it and/or
//   modify it under the terms of the GNU General Public License (GPL)
//   as published by the Free Software Foundation; either version
//   2 of the License, or (at your option) any later version.
//
//   This program is distributed in the hope that it will be
//   useful, but WITHOUT ANY WARRANTY; without even the implied
//   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
//   PURPOSE. See the GNU General Public License for more details.
//
//   You can read the terms of GPL at http://www.gnu.org/copyleft/gpl.html
//   if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
//   Cambridge, MA 02139, USA.
//
//   NOTES
//
//   - IE 5.00.29 does not understand non-grouping regular expressions: '?:'
//
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//
//  Generic Window class
//
///////////////////////////////////////////////////////////////////////

function LibWin(strName, strTitle, strAttrib, msg)
{
    this.lib        = "LibWin.";
    var id          = this.lib + "constructor";

    this.win        = null;
    this.name       = strName  ? strName  : "window";
    this.title      = strTitle ? strTitle : "window";
    this.mime       = "text/html";
    this.msg        = msg;

    this.attrib = strAttrib
        ? strAttrib
        : "width=500,height=400,resizable,status";
}

LibWin.prototype.Window = function()
{
    var id = this.lib + "Window";

    if ( (this.win == null) || this.win.closed )
    {
        if ( this.msg != null )
        {
            status = this.msg;
        }

        this.win = window.open("", this.name, this.attrib);
        this.win.document.open( this.mime );

        if ( ! this.opener )
        {
            //  This browser version does not support Javascript 1.2
            //  and `opener' property, so add it

            this.opener = self;
        }

        if ( this.msg != null )
        {
            status = '';
        }

    }

    return this.win;
}

LibWin.prototype.WriteMsg = function(strMsg)
{
    var id = this.lib + "WriteMsg";

    var win = this.Window();
    win.document.write( strMsg );
    win.document.close();
}

///////////////////////////////////////////////////////////////////////
//
//  Utility functions
//
///////////////////////////////////////////////////////////////////////

function FillZeroes(str, max)
{
    var ret = '';

    for ( var i = str.length; i < max; i++ )
    {
        ret += '0';
    }

    return ret + str;
}

function Is(val)
{
    if (  (val == null)  || (val == '' ) )
    {
        return null;
    }
    else
    {
        return val;
    }
}

function MySleep(count, msg)
{
    if ( msg )
    {
        msg += ' / ';
    }
    else
    {
        msg = '';
    }

    for (var i = 0; i < count; i++)
    {
        i++;
        var x = Math.sqrt(100 / 2);        //  Doing something
        window.status = msg + i;
    }
}

function GetVerse()
{
    return LAST_VERSE;
}

function IsVerse( re )
{
    reg = new RegExp( re );

    if ( Is(LAST_VERSE)  &&  (reg.exec(LAST_VERSE) != null) )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

function StringReplace(str, replace, start, len)
{
    //  STR     = input string, like "abc12cde"
    //  REPLACE = Added string, like "--"
    //  START   = Replace position start, say 3
    //  LEN     = How much to replace, say 2
    //
    //  StringReplace( "abc12cde", "--", 3, 2)  => "abc--cde"

    var ret = str;

    if ( (start != null)  &&  (start > -1) )
    {
        if ( start > str.length )
        {
            ret = ret + replace;        // Add to the end
        }
        else
        {
            var left = str.substring( 0, start);
            var pos  = start + len;

            if ( pos > str.length )
            {
                ret = left + replace;
            }
            else
            {
                var right = str.substring( pos, str.length);
                ret = left + replace + right;
            }
        }
    }

    return ret;
}

function MyPrint()
{
    window.print();
    // parent.frames[1].focus();
    // parent.frames[1].print();
}

///////////////////////////////////////////////////////////////////////
//
//  Array regexp data types
//
//  'Some regexp here{extra message}!modifier'
//
///////////////////////////////////////////////////////////////////////

function StrRegexpMatcher(str)
{
    //  any character before !  or {

    var result;

    if ( result = str.match( /(.*)\{/ )  )
    {
        str = result[1];
    }
    else if ( result = str.match( /(.*)\!/ )  )
    {
        str = result[1];
    }

    return str;
}

function StrRegexpExtraString(str)
{
    //  anything inside { ... }

    var ret    = null;
    var result = str.match( /(\{[^}!]+\})/ );

    if ( result != null )
    {
        ret = result[1];
    }

    return ret;
}

function StrRegexpModifier(str)
{
    //  The string "g" or "gi" after !

    var pos      = str.indexOf('!');
    var modifier = '';

    if ( pos != -1 )
    {
        modifier = str.slice(pos + 1, str.length);
    }

    return modifier;
 }

///////////////////////////////////////////////////////////////////////
//
//  Book, Chapter, Verse parsing
//
///////////////////////////////////////////////////////////////////////

function BibleVerseParseBookVerse(str)
{
    var ret    = null;
    var result = str.match( /[12]*[A-Z][^ ]+\s+\d+:(\d+)/ );

    if ( result != null )
    {
        ret = result[1];
    }

    return ret;
}

function BibleVerseParseBookChapter(str)
{
    var ret    = null;
    var result = str.match( /^[12]*[A-Z][^ ]+\s+(\d+):/ );

    if ( result != null )
    {
        ret = result[1];
    }

    return ret;
}

function BibleVerseParseBookName(str)
{
    var ret    = null;
    var result = str.match( /^[12]*[A-Z][^ .]+/ );

    if ( result != null )
    {
        ret = result[0];
    }

    return ret;
}

///////////////////////////////////////////////////////////////////////
//
//  Blue Letter Bible interface: Original Greek text
//
///////////////////////////////////////////////////////////////////////

var bibleBlue_fi_en = new Array();

bibleBlue_fi_en['1Moos'] = 'Gen';
bibleBlue_fi_en['2Moos'] = 'Exd';
bibleBlue_fi_en['3Moos'] = 'Lev';
bibleBlue_fi_en['4Moos'] = 'Num';
bibleBlue_fi_en['5Moos'] = 'Deu';
bibleBlue_fi_en['Joosua'] = 'Jos';
bibleBlue_fi_en['Tuom'] = 'Jdg';
bibleBlue_fi_en['Ruut'] = 'Rth';
bibleBlue_fi_en['1Sam'] = '1Sa';
bibleBlue_fi_en['2Sam'] = '2Sa';
bibleBlue_fi_en['1Kun'] = '1Ki';
bibleBlue_fi_en['2Kun'] = '2Ki';
bibleBlue_fi_en['1Aik'] = '1Ch';
bibleBlue_fi_en['2Aik'] = '2Ch';
bibleBlue_fi_en['Esra'] = 'Ezr';
bibleBlue_fi_en['Neh'] = 'Neh';
bibleBlue_fi_en['Ester'] = 'Est';
bibleBlue_fi_en['Job'] = 'Job';
bibleBlue_fi_en['Ps'] = 'Psa';
bibleBlue_fi_en['Snl'] = 'Pro';
bibleBlue_fi_en['Srn'] = 'Ecc';
bibleBlue_fi_en['Kv'] = 'Sgs';
bibleBlue_fi_en['Jes'] = 'Isa';
bibleBlue_fi_en['Jer'] = 'Jer';
bibleBlue_fi_en['Val'] = 'Lam';
bibleBlue_fi_en['Hes'] = 'Eze';
bibleBlue_fi_en['Dan'] = 'Dan';
bibleBlue_fi_en['Hoos'] = 'Hsa';
bibleBlue_fi_en['Joel'] = 'Joe';
bibleBlue_fi_en['Aam'] = 'Amo';
bibleBlue_fi_en['Obad'] = 'Oba';
bibleBlue_fi_en['Joona'] = 'Jon';
bibleBlue_fi_en['Miika'] = 'Mic';
bibleBlue_fi_en['Naah'] = 'Nah';
bibleBlue_fi_en['Hab'] = 'Hab';
bibleBlue_fi_en['Sef'] = 'Zep';
bibleBlue_fi_en['Hag'] = 'Hag';
bibleBlue_fi_en['Sak'] = 'Zec';
bibleBlue_fi_en['Mal'] = 'Mal';
bibleBlue_fi_en['Matt'] = 'Mat';
bibleBlue_fi_en['Mark'] = 'Mar';
bibleBlue_fi_en['Luuk'] = 'Luk';
bibleBlue_fi_en['Joh'] = 'Jhn';
bibleBlue_fi_en['Apt'] = 'Act';
bibleBlue_fi_en['Room'] = 'Rom';
bibleBlue_fi_en['1Kor'] = '1Cr';
bibleBlue_fi_en['2Kor'] = '2Cr';
bibleBlue_fi_en['Gal'] = 'Gal';
bibleBlue_fi_en['Ef'] = 'Eph';
bibleBlue_fi_en['Fil'] = 'Phl';
bibleBlue_fi_en['Kol'] = 'Col';
bibleBlue_fi_en['1Tess'] = '1Th';
bibleBlue_fi_en['2Tess'] = '2Th';
bibleBlue_fi_en['1Tim'] = '1Ti';
bibleBlue_fi_en['2Tim'] = '2Ti';
bibleBlue_fi_en['Tiit'] = 'Tts';
bibleBlue_fi_en['Filemon'] = 'Phm';
bibleBlue_fi_en['Hepr'] = 'Hbr';
bibleBlue_fi_en['Jaak'] = 'Jam';
bibleBlue_fi_en['1Piet'] = '1Pe';
bibleBlue_fi_en['2Piet'] = '2Pe';
bibleBlue_fi_en['1Joh'] = '1Jo';
bibleBlue_fi_en['2Joh'] = '2Jo';
bibleBlue_fi_en['3Joh'] = '3Jo';
bibleBlue_fi_en['Juud'] = 'Jud';
bibleBlue_fi_en['Ilm'] = 'Rev';

function BibleBookTranslateFI_EN(book)
{
    var ret = null;
    var en = bibleBlue_fi_en[ book ];

    if ( en == null )
    {
        window.status = "Error: FI_EN " + book;
    }
    else
    {
        ret = en;
    }

    return en;
}

function UrlBlueFillZeroes(str)
{
     return FillZeroes(str, 3);
}

function UrlBlueHtmlPagePrimitive(book, chap, verse)
{
    var page    = book + UrlBlueFillZeroes( chap) + '.html';
    var section = '#' + verse;
    var ret     = page + section;

    return ret;
}

function UrlBlueHtmlPageKjv(book, chapter, verse)
{
    var url  = "http://www.blueletterbible.com/kjv/";
    var page = UrlBlueHtmlPagePrimitive(book, chapter, verse);
    var ret  = null;

    if ( Is(page) )
    {
        // Gen/Gen001.html#20
        ret = url + book + '/' + page;
    }

    return url;
}

function UrlBlueHtmlPageGreek(book, chapter, verse)
{
    // book=1Cr&chapter=6&verse=19&version=kjv
    var url = "http://www.blueletterbible.org/cgi-bin/c.pl";

    var ret = url
            + '?book='      + book
            + '&chapter='   + chapter
            + '&verse='     + verse
            + '&version=kjv'
            ;

    return ret;
}

function UrlBlueHtmlPageMain(str, type)
{
    //  TYPE = greek

    var ret     = null;

    if ( str == null )
    {
        return ret;
    }

    var book    = BibleVerseParseBookName(str);
    var chapter = BibleVerseParseBookChapter(str);
    var verse   = BibleVerseParseBookVerse(str);

    if ( (book != null)  &&  (chapter != null)  &&  (verse != null) )
    {
        var book  = BibleBookTranslateFI_EN(book);

        if ( Is(book) )
        {
            if ( (type != null)  &&  (type == 'greek') )
            {
                ret = UrlBlueHtmlPageGreek(book, chapter, verse);
            }
            else
            {
                ret = UrlBlueHtmlPageKjv(book, chapter, verse);
            }
        }
    }

    return ret;
}

function UrlBlueWindowOpenGreek(ref)
{
    // REF = Bible verse in Finnish

    var url  = UrlBlueHtmlPageMain(ref, 'greek');

    if ( Is(url) )
    {
        window.open( url, "blueletter" );
    }
}

function UrlBlueWindowOpenKjv(ref)
{
    var url  = UrlBlueHtmlPageMain(ref, 'kjv');

    if ( Is(url) )
    {
        window.open( url, "blueletter" );
    }
}

///////////////////////////////////////////////////////////////////////
//
//  Blue Letter Bible interface: Strong's words
//
///////////////////////////////////////////////////////////////////////

function UrlStrongHtmlPage(num)
{
    //  Blue Letter Bible - Strong's word search service

    var url = '';

    if ( Is(num) )
    {
        url  = 'http://www.blueletterbible.org/cgi-bin/strongs.pl';

        var lang = 'G';
        var stat = num.search( /^0\d/ );

        //  Strong numbers that start with 0 are Hebrew
        if (  stat != null  &&   stat > -1 )
        {
            lang = 'H';
        }

        url += '?language=' + lang + '&strongs=' + num;
    }

    return url;
}

function UrlStrongHref(msg)
{
    var ret     = msg;
    var re      = /&lt;\[(\d+)\]/g;
    var reLen   = "&lt;[]".length;
    var str     = '';
    var loop    = 0;
    var result  = '';

    while ( (result = re.exec(msg)) != null )
    {
        var num     = result[1];
        var href    = '<A HREF="javascript:opener.UrlStrongWindowOpen(\''
                    + num
                    + '\');">';

        //  Note: Opera 7, does not support IE 5.5 RegExp.leftContext
        //  or RegExp.rightContext

        var left    = msg.substring(0, result.index);

        str += left        //  RegExp.leftContext
            + '&lt;['
            + href
            + num
            + '</A>'
            + ']'
            ;

        //  Search only the rightmost string
        //  "msg  = RegExp.rightContext" does not work in all
        //  browsers.

        var len   = reLen + num.length + result.index;
        var right = msg.substring(len);

        // Force searching rest of the string again
        // reset the search index in regexp object.

        re.lastIndex = 0;
        msg          = right;
        loop         = 1;
    }

    if ( loop  &&  (right != null) )
    {
        ret = str + right;
    }

    return ret;
}

function UrlStrongWindowOpen(num)
{
    var url     = UrlStrongHtmlPage(num);

    if ( Is(url) )
    {
        //  This will not open new window if there is already
        //  window identified by "strong"

        window.open( url, "strong" );
    }
}

///////////////////////////////////////////////////////////////////////
//
//  Text: highlighting and marking bible verses
//
///////////////////////////////////////////////////////////////////////

// .................................................................
// Greek

function HighlightGreekMarkings(msg)
{
    var style, end, re;

    // 1Sam. 19:20. And Saul <[07586] Sha'uwl> sent

    style = '<SPAN STYLE="color:teal;">';
    end   = '</SPAN>';
    re    = /(&lt;\[(\d*)([^;]+)&gt;)/g;
    msg   = msg.replace( re, style + '$1' + end );

    return msg;
}

function HighlightGreekWords(msg)
{
    var style, end, re;

    //  Definitive article

    style = '<SPAN STYLE="color:blue;font-style:italic;">';
    end   = '</SPAN>';
    re    = /\b(ho|ton)\b/g;
    msg   = msg.replace( re, style + '$1' + end );

    return msg;
}

function HighlightGreekPrepositions(msg)
{
    var style, end, re;

    // In Finnish: kreikan prepositiot
    // en   = -ssa, sisalla jossakin
    // ek   = -sta, pois jostakin
    // eis  = -een, -aan, -iin, johonkin (esim. haneen)
    // hypo = -lta

    style = '<SPAN STYLE="text-decoration:underline;">';
    end   = '</SPAN>';
    re    = /\b(en|ek|eis|dia|hutos|hupo|huper|para|kata)([& ])/g;
    msg   = msg.replace( re, style + ' $1' + end + '$2');

    return msg;
}

function HighlightGreekPrepositionsFinnish(msg)
{
    var style, end, re;

    style = '<SPAN STYLE="text-decoration:underline;">';
    end   = '</SPAN>';
    re = /\B(lla|ll&auml;|lta|l&auml;|lle|ssa|ss&auml;|sta|st&auml;aan|een|iin|oon)( +&[^ ]+ +(en|eks?|eis|dia|hutos|para|kata|hupo)\b)/g;
    msg   = msg.replace( re, style + '$1' + end + '$2');

    return msg;
}

function HighlightGreekPrepositionsEnglish(msg)
{
    var style, end, re;

    style = '<SPAN STYLE="text-decoration:underline;">';
    end   = '</SPAN>';
    re    = /\b(in|from|by|under|above|below|whereby|at)\b/g;
    msg   = msg.replace( re, style + ' $1' + end );

    return msg;
}

function highlightBlueEnglish(msg)
{
    var style, end, re;

    style = '<SPAN STYLE="font-family=Arial;font-style:italic;font-size:1.1em;color:red;font-weight:bold;">';
    end   = '</SPAN>';
    re = /\b(punish[^ ]*|torment|kolazo|kolasis|glory|glorious|doxa|spirit|pneuma|ruwach|salvation|soteria[^& ]*|[lL]ord|kyri[^& ]+|kurio[^& ]*|worship|proskyn[^& ]+|latreuo|magnif[^ ]+|megalun[^& ]+|power|dunamis|Y.hovah|LORD|redeem[^ ]*|lutro[^ ]+|proseuchomai|marturia|witness)\b/g;
    msg = msg.replace( re, style + '$1' + end );


    style = '<SPAN STYLE="font-size:1.0em;color:navy;font-weight:bold;">';
    end   = '</SPAN>';
    re    = /\b(grace|charis|euaggeli[^ ]+|gospel|onoma|name)\b/g;
    msg   = msg.replace( re, style + '$1' + end );

    return msg;
}

function HighlightGreekBlue(msg)
{
    msg = highlightBlueEnglish(msg);
    msg = HighlightGreekMarkings(msg);
    msg = HighlightGreekPrepositions(msg);
    msg = HighlightGreekPrepositionsEnglish(msg);

    //  Add STRONG links

    msg = UrlStrongHref(msg);

    return msg;
}

function HighlightGreekNovum(msg)
{
    msg = HighlightGreekPrepositionsFinnish(msg);
    msg = HighlightGreekWords(msg);
    msg = HighlightGreekMarkings(msg);
    msg = HighlightGreekPrepositions(msg);

    return msg;
}

function HighlightGreekKit(msg)
{
    msg = HighlightGreekPrepositionsEnglish(msg);
    msg = HighlightGreekWords(msg);

    return msg;
}

// .................................................................
//  UM

var UMwordAdded = new Array();

//UMwordAdded['']       = '';
UMwordAdded['Matt. 5:19']       = '(n&auml;hden)!g';
UMwordAdded['Matt. 10:32']      = '(yhteyden)!g';
UMwordAdded['Matt. 11:25']      = '(julkisesti)';
UMwordAdded['Mark. 1:4']        = '(vertauskuvaksi)';
UMwordAdded['Luuk. 1:3']        = '(johdonmukaisessa)';
UMwordAdded['Luuk. 1:37']       = '(julistus)';
UMwordAdded['Luuk. 1:80']       = '(julkisesti)';
UMwordAdded['Luuk. 10:21']      = '(julkisesti)';
UMwordAdded['Luuk. 24:47']      = '(perusteella)';
UMwordAdded['Joh. 3:21']        = '(sopusoin[^ ]+)';
UMwordAdded['Joh. 4:22']        = '(l&auml;ht&ouml;isin)';
UMwordAdded['Joh. 8:42']        = '(luota|omasta aloitteestani)!g';
UMwordAdded['Joh. 10:38']       = '(yhteyd[^,. ]+)!g';
UMwordAdded['Joh. 17:3']        = '(hankkivat)';
UMwordAdded['Joh. 17:11']       = '(takia)';
UMwordAdded['Joh. 17:12']       = '(takia)';
UMwordAdded['Joh. 20:31']       = '(avulla)';
UMwordAdded['Apt. 2:22']        = '(julkisesti|v&auml;lit[^ ]+)!g';
UMwordAdded['Apt. 3:12']        = '(jumal.*antaum[^,. ]+)';
UMwordAdded['Apt. 4:12']        = '(ihmisten +keskuudessa)';
UMwordAdded['Apt. 5:28']        = '(perusteella)';
UMwordAdded['Apt. 10:36']       = '\\b(muu[^ ]*|mui[^ ]+|v&auml;l[^ ]+)!g';
UMwordAdded['Apt. 13:2']        = '(julkisesti)';
UMwordAdded['Apt. 13:24']       = '(julkisesti)';
UMwordAdded['Apt. 17:23']       = '(huolellisesti|jumal.*antaum[^,. ]+)!g';
UMwordAdded['Apt. 18:25']       = '(suullisesti|koskevia asioita)!g';
UMwordAdded['Apt. 20:20']       = '(julkisesti)';
UMwordAdded['Apt. 23:8']        = '(julkisesti)';
UMwordAdded['Apt. 20:24']       = '(perusteellisen)';
UMwordAdded['Room. 1:28']       = '\\b(t&uml;sm[^,. ]+)';
UMwordAdded['Room. 3:20']       = '\\b(t&uml;sm[^,. ]+)';
UMwordAdded['Luuk. 3:22']       = '(v&auml;lityksell[^,. ]+){?}';
UMwordAdded['Room. 8:8']        = '(sopusoin[^ ]+)';
UMwordAdded['Room. 8:9']        = '(sopusoin[^ ]+|todella)!g';
UMwordAdded['Room. 8:11']       = '(yhteyd[^,. ]+)!g';
UMwordAdded['Room. 8:12']       = '(yhteyd[^,. ]+)!g';
UMwordAdded['Room. 8:32']       = '(huomaavaisesti|muuta)!g';
UMwordAdded['Room. 12:15']      = '(yhteyd[^,. ]+)!g';
UMwordAdded['Room. 10:9']       = '(julkisesti)';
UMwordAdded['Room. 15:27']      = '(julkisesti)';
UMwordAdded['1. Kor. 1:2']      = '(yhteyd[^,. ]+)!g';
UMwordAdded['1. Kor. 1:30']     = '(yhteyd[^,. ]+|vap.*perusteella|ansiostaan)!g';
UMwordAdded['1. Kor. 14:14']    = '(lahj[ao][^,. ]*)!g';
UMwordAdded['1. Kor. 14:15']    = '(lahj[ao][^,. ]*)!g';
UMwordAdded['1. Kor. 14:16']    = '(lahj[ao][^,. ]*)!g';
UMwordAdded['2. Kor. 4:6']      = '(v&auml;lityksell[^,. ]+)';
UMwordAdded['2. Kor. 5:19']     = '(v&auml;lityksell[^,. ]+)';
UMwordAdded['2. Kor. 9:13']     = '(julkisesti|koskevalle|antamassanne +avustuksessa)!g';
// UMwordAdded['2. Kor. 11:2']     = '(siveellisesti)';
UMwordAdded['Gal. 2:16']        = '(kohdistuv[^ ]+)';
UMwordAdded['Gal. 5:4']         = '(h&auml;nen)';
UMwordAdded['Ef. 1:6']          = '(v&auml;lityksell[^,. ]+)';
UMwordAdded['Ef. 1:10']         = '(hallinto|rajalla)!g';
UMwordAdded['Ef. 1:12']         = '(palvelisimme)';
UMwordAdded['Ef. 1:17']         = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Ef. 2:3']          = '(sopusoin[^ ]+)';
UMwordAdded['Ef. 2:21']         = '(sopusoin[^ ]+|yhteyde[^ ]+)';
UMwordAdded['Ef. 3:12']         = '(jonka.*vapaasti|kohdistuv[^ ]+)';
UMwordAdded['Ef. 4:13']         = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Ef. 4:16']         = '(sopusoin[^ ]+)';
UMwordAdded['Fil. 1:9']         = '(t&auml;sm&auml;l[^,. ]+|jatkuvasti)!g';
UMwordAdded['Fil. 1:20']        = '(sopusoin[^ ]+|avulla)!g';
UMwordAdded['Fil. 1:29']        = '(etu)';
UMwordAdded['Fil. 2:9']         = '\\b(mu[ui][^,. ]*|huomaavai[^ ]+)!g';
UMwordAdded['Kol. 1:6']         = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Kol. 1:9']         = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Kol. 1:10']        = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Kol. 1:15']        = '\\b(muu[^,. ]*)!g';
UMwordAdded['Kol. 1:16']        = '\\b(muu)!g';
UMwordAdded['Kol. 1:17']        = '\\b(mu[iu][^,. ]*|v&auml;lityk[^,. ]+)!g';
UMwordAdded['Kol. 2:2']         = '(t&auml;sm&auml;l[^,. ]+|sopusoin[^ ]+|sopusoin[^ ]+|silm[^ ]+)!g';
UMwordAdded['Kol. 2:3']         = '(huolellisesti)';
UMwordAdded['Kol. 2:9']         = '(ominai[^ ]+)';
UMwordAdded['Kol. 2:10']        = '(v&auml;lityk[^,. ]+)';
UMwordAdded['Kol. 2:12']        = '(yhteyd[^,. ]+|kohdistuv[^ ]+)';
UMwordAdded['Kol. 2:19']        = '(sopusoin[^ ]+)';
UMwordAdded['Kol. 3:10']        = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Gal. 6:18']        = '(ilmaisemanne)';
UMwordAdded['2. Tess. 2:4']     = '(julkisesti)';
UMwordAdded['1. Tim. 2:2']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 2:4']      = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['1. Tim. 3:16']     = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 4:3']      = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['1. Tim. 4:7']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 4:8']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 4:13']     = '(Kiinnit.*huomiota.*julkise[^ ]+)';
UMwordAdded['1. Tim. 4:16']     = '(alitajuisesti)';
UMwordAdded['1. Tim. 5:4']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 5:24']     = '(julkisesti)';
UMwordAdded['1. Tim. 5:25']     = '(julkisesti)';
UMwordAdded['1. Tim. 6:3']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 6:5']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 6:6']      = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 6:11']     = '(antaum[^,. ]+)';
UMwordAdded['1. Tim. 6:15']     = '(hallitsevien)';
UMwordAdded['2. Tim. 2:1']      = '(yhteyd[^,. ]+)';
UMwordAdded['2. Tim. 2:10']     = '(yhteyd[^,. ]+|ohella)!g';
UMwordAdded['2. Tim. 2:25']     = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['2. Tim. 3:5']      = '(antaum[^,. ]+|n&auml;hden)!g';
UMwordAdded['2. Tim. 3:7']      = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['2. Tim. 3:12']     = '(antaum[^,. ]+|yhteyde[^,. ]+)!g';
UMwordAdded['Tiit. 1:1']        = '(t&auml;sm&auml;l[^,. ]+|antaumuksen)!g';
UMwordAdded['Tiit. 1:16']       = '(julistavat +julkisesti)';
UMwordAdded['Tiit. 2:12']       = '(antaum.*osoittaen)';
UMwordAdded['Hepr. 10:32']      = '(jatkuvasti)';
UMwordAdded['Hepr. 11:13']      = '(julkisesti)';
UMwordAdded['Hepr. 10:26']      = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['Hepr. 12:28']      = '(jatkuvasti)';
UMwordAdded['1. Piet. 4:19']    = '(sopusoin[^ ]+)';
UMwordAdded['2. Piet. 1:2']     = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['2. Piet. 1:3']     = '(t&auml;sm&auml;l[^,. ]+|auliisti|antaumusta)!g';
UMwordAdded['2. Piet. 1:8']     = '(t&auml;sm&auml;l[^,. ]+|suhteen)!g';
UMwordAdded['2. Piet. 1:6']     = '(antaum[^,. ]+)';
UMwordAdded['2. Piet. 1:7']     = '(antaum[^,. ]+)';
UMwordAdded['2. Piet. 2:9']     = '(antaum[^,. ]+)';
UMwordAdded['2. Piet. 2:20']    = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['2. Piet. 2:21']    = '(t&auml;sm&auml;l[^,. ]+)';
UMwordAdded['2. Piet. 3:11']    = '(antaum[^,. ]+ +teoissa)';
UMwordAdded['1. Joh. 4:4']      = '(yhteyde[^,. ]+)';
UMwordAdded['1. Joh. 3:24']     = '(yhteyde[^,. ]+)!g';
UMwordAdded['Ilm. 1:4']         = '(piirikunnassa)';


var UMwordDeleted = new Array();
UMwordDeleted['Mark. 9:41']     = '(perusteella){&lt;=muutos/puuttuu:minun nimess&auml;ni}';
UMwordDeleted['Room. 8:1']      = '(t&auml;hden){puuuttu:nyt}';
UMwordDeleted['Room. 15:20']    = '(Kristus){puuuttu:nimi}';
UMwordDeleted['2. Kor. 5:18']   = '(meid&auml;t){puuttuu:itsens&auml;}';
UMwordDeleted['2. Kor. 5:19']   = '(kanssaan){puuttuu:itsens&auml;}';
UMwordDeleted['Hepr. 10:34']    = '(on){puuttuu:taivaissa}';


var UMwordModified = new Array();
UMwordModified['1. Moos. 1:2']  = '(vaikut[^ ]+ +voima){&lt;=muutos:Henki}';
UMwordModified['1. Moos. 1:30'] = '(sieleuna){&lt;=muutos:henki}';
UMwordModified['1. Aik. 12:18'] = '(verhosi){&lt;=tarkemmin:vaatettaa,pukeutua,t&auml;ytt&auml;&auml;}';
UMwordModified['Matt. 2:8']     = '(kumartamaan){&lt;=muutos:palvoa}';
UMwordModified['Matt. 22:43']   = '(henkey[^,. ]+){&lt;=muutos:hengess&auml;}';
// UMwordModified['Mark. 9:41']    = '(perusteella){&lt;=muutos:minun nimess&auml;ni}';
UMwordModified['Luuk. 4:22']    = '(miellyttäviä){&lt;=muutos:armo)';
UMwordModified['Luuk. 2:38']    = '(vapaut[^,. ]+){&lt;=muutos:lunastusta}';
UMwordModified['Luuk. 24:21']   = '(vapaut[^,. ]+){&lt;=muutos:lunastaa}';
UMwordModified['Luuk. 18:13']   = '(suosiollinen){&lt;=armollinen)';
UMwordModified['Luuk. 24:47']   = '(saarnattaisiin){&lt;=muutos:k&auml;sky?}';
UMwordModified['Joh. 1:4']      = '(v&auml;[^ ]){&lt;=muutos:oli}';
UMwordModified['Joh. 5:36']     = '(m&auml;&auml;r&auml;si){&lt;=muutos:antoi}';
UMwordModified['Joh. 17:3']     = '(tuntem[^ ]){{&lt;=muutos:tuntevat}';
UMwordModified['Joh. 20:31']    = '\\b(takia)';
UMwordModified['Apt. 3:16']     = '(tulee +h&auml;nen +kauttaan){&lt;=muutos:h&auml;n vaikuttaa}';
UMwordModified['Apt. 6:8']      = '(miellytt&auml;vyytt[^ ]+){&lt;=muutos:armoa,uskoa}';
UMwordModified['Apt. 7:10']     = '(miellytt[^ ]+){&lt;=armon)';
UMwordModified['Apt. 7:59']     = '(esitt.*vetoomusta){&lt;=muutos:huutaa avuksi}';
UMwordModified['Apt. 13:48']    = '(asetetut ehdolle){&lt;=muutos:m&auml;&auml;r&auml;t&auml;}';
UMwordModified['Apt. 20:24']    = '(sieluani){&lt;=tarkemmin:el&auml;m&auml;ni,henkeni}';
UMwordModified['Room. 3:25']    = '(uhriksi|jolloin.*noudatti +k[^ ]+)!g';
UMwordModified['Room. 8:26']    = '(puhuu){&lt;=muutos:rukoilee}';
UMwordModified['Room. 8:34']    = '(puhuu){&lt;=muutos:rukoilee}';
UMwordModified['Room. 11:12']   = '(kansakuntien +ihmi[^ ]+|t&auml;ysi lukunsa)!g';
UMwordModified['Room. 15:27']   = '(kansakuntien +ihmi[^ ]+){&lt;=muutos:pakanat}';
UMwordModified['Ef. 1:6']       = '(rakkaansa){muutos:-ssa}';
UMwordModified['Ef. 4:16']      = '(yhteistoim[^ ]+)';
UMwordModified['Fil. 1:9']      = '(t&auml;yden.*ohella)';
UMwordModified['Fil. 1:20']     = '(tulee.*julist[^ ]+){&lt;=muutos:ylist&auml;&auml;}';
UMwordModified['Kol. 2:10']     = '\\b(teil.*eys)\\b';
UMwordModified['1. Tim. 3:16']  = '(kansakuntien){&lt;=muutos:pakanoiden}';
UMwordModified['1. Tim. 4:1']   = '(henkey[^ ]+ +ilma[^ ]+){&lt;=muutos:henki}!g';
UMwordModified['1. Tim. 4:14']  = '(lahjaa){&lt;=muutos:armolahjaa}';

UMwordModified['2. Tim. 3:5']   = '(osoittautuvat +pettymykseksi){&lt;=muutos:kielt&auml;&auml;}';
UMwordModified['Tiit. 2:11']    = '(kaikenlaisille){&lt;=muutos:kaikille}';
UMwordModified['Hepr. 9:12']    = '(vapaut[^ ]+){&lt;=muutos:lunastuksen}';
UMwordModified['Hepr. 11:7']    = '(jumalallinen){&lt;=muutos:Jumalan}';
UMwordModified['Hepr. 11:7']    = '(vapauttanne){&lt;=muutos:luottamus,rohkeus,uskallus}';
UMwordModified['Hepr. 12:9']    = '(hengellisen +el[^ ]+){&lt;=muutos:henkien}';
UMwordModified['Hepr. 12:23']   = '(hengell[^ ]+ +el[^ ]+){&lt;=muutos:henkien luo}';
UMwordModified['1. Piet. 1:18'] = '(vapaut[^ ]+){&lt;=muutos:lunastettu}';
UMwordModified['1. Piet. 1:11'] = '(henki +Kristuksesta){&lt;=Kristuksen henki}';
UMwordModified['1. Piet. 5:12'] = '(pysyk[^ ]+ lujina){&lt;=muutos:jossa olette}';
UMwordModified['2. Piet. 2:9']  = '(vapaut[^ ]+){&lt;=muutos:pelastaa}';
UMwordModified['2. Piet. 3:11'] = '(k&auml;t[^ ]+){&lt;=tarkemmin:vaellus,el&auml;mel&auml;}';
UMwordModified['Juud. 1:19']      = '(hengellisy[^,. ]+){&lt;=muutos:Henke&auml;}';
UMwordModified['1. Joh. 4:1']   = '(henkey[^ ]+ +ilma[^,. ]+){&lt;=muutos:henki}!g';
UMwordModified['1. Joh. 4:2']   = '(henkey[^ ]+ +ilma[^,. ]+){&lt;=muutos:henki}!g';
UMwordModified['1. Joh. 4:3']   = '(henkey[^ ]+ +ilma[^,. ]+){&lt;=muutos:henki}!g';
UMwordModified['1. Joh. 4:4']   = '(teid&auml;n){&lt;=muutos:teiss&auml;}!g';
UMwordModified['1. Joh. 4:6']   = '(henkey[^ ]+ +ilma[^,. ]+){&lt;=muutos:henki}!g';
UMwordModified['Ilm. 1:9']      = '(puhumisen){&lt;=muutos:sana}';
UMwordModified['Ilm. 1:10']     = '(henkeytyksest[^ ]+){&lt;=muutos:hengess&auml;}';
UMwordModified['Ilm. 6:9']      = '(todistus[^ ]+){&lt;=muutos:todistuksen}';
UMwordModified['Ilm. 16:14']    = '(henkeytt&auml;mi&auml; +ilmauksia){&lt;=muutos:henki&auml;}';
UMwordModified['Ilm. 12:17']    = '(Jees.*todistamis[^ ]+ +ty[^ ]+){&lt;=muutos:Jeesuksen todistus}';
UMwordModified['Ilm. 19:10']    = '(Jees.*todistamis[^ ]+ +ty[^ ]+){&lt;=muutos:Jeesuksen todistus}';


function HighlightWordChange(verse, msg, type, array)
{
    var style   = '<SPAN STYLE="color:blue;">';
    var end     = '</SPAN>';

    var str     = array[verse];

    if ( str != null )
    {

        // alert( type + ' ' + str);


        var modifier = StrRegexpModifier( str );
        var re1      = StrRegexpMatcher( str);
        var re       = new RegExp( re1, modifier);
        var add      = StrRegexpExtraString( str );

        if ( type == 'added' )
        {

            msg     = msg.replace( re,
                    style
                    + '$1'
                    + '{&lt;=lis&auml;ys}'
                    + end
                    , modifier);

        }
        else if ( type == 'deleted' )
        {
            add     = add ? add : '{}';

            msg     = msg.replace( re, '$1'
                    + style
                    + ' ' + add + ' '
                    + end
                    , modifier);

        }
        else if ( type == 'modified' )
        {
            add         = add ? add : '{&lt;=muutos}';
            var style2  = '<SPAN STYLE="text-decoration:underline;">';

            msg     = msg.replace( re,
                    style
                        + style2
                        + '$1'
                        + end
                    + add
                    + end
                    , modifier);
        }
    }

    return msg;
}

function HighlightUMwords(msg)
{
    var verse = GetVerse();

    msg = HighlightWordChange(verse, msg, 'added'   , UMwordAdded);
    msg = HighlightWordChange(verse, msg, 'deleted' , UMwordDeleted);
    msg = HighlightWordChange(verse, msg, 'modified', UMwordModified);

    return msg;
}

function HighlightUMwords2(msg, verse, one, two, type)
{
    if ( IsVerse(verse) )
    {
        var arr = new Array();
        arr[verse] = one;
        msg = HighlightWordChange(verse, msg, type, arr);

        arr[verse] = two;
        msg = HighlightWordChange(verse, msg, type, arr);
    }

    return msg;
}

function HighlightUM (msg)
{

    var style, end, re;

    msg = HighlightUMwords(msg);


    msg = HighlightUMwords2(  msg
                        , 'Luuk. 1:68'
                        , '(vapaut[^,. ]+){&lt;=muutos:lunastuksen}'
                        , '(toteuttanut){&lt;=tarkemmin:valmistanut}'
                        , 'modified'
                        );

    msg = HighlightUMwords2(  msg
                        , 'Joh. 14:14'
                        , '(tahansa){&lt;=poistettu:minulta}'
                        , '(niin){&lt;=poistettu:min&auml;}'
                        , 'deleted'
                        );

    msg = HighlightUMwords2(  msg
                        , 'Room. 8:27'
                        , '(puhuu){&lt;=muutos:rukoilee}'
                        , '(tarkoitus){&lt;=muutos:mieli}'
                        , 'modified'
                        );

    msg = HighlightUMwords2(  msg
                        , '2. Tim. 1:10'
                        , '(luonut valoa +el[^ ]+){&lt;=muutos:tuoda p&auml;iv&auml;nvaloon,}'
                        , '(ja turmeltumattomuuteen){&lt;=muutos:el&auml;m&auml;n ja kuolemattomuuden}'
                        , 'modified'
                        );


    msg = HighlightUMwords2(  msg
                        , 'Tiit. 2:14'
                        , '(vapaut[^ ]+){&lt;=muutos:lunastaa}'
                        , '(kaikenlaisesta){&lt;=tarkemmin:kaikesta}'
                        , 'modified'
                        );

    //      Other Changes

    if ( ! GetVerse().match( /(Aik|Moos|Sam|Job)\./ ))
    {
        style   = '<SPAN STYLE="color:blue;">';
        end     = '</SPAN>';
        re      = /(Jehov[^,. ]+)/g;
        msg     = msg.replace( re, style + '$1{&lt;=lis&auml;ys}' + end );
    }

    //  if ( IsVerse('Room. 8:39') )
    //  Jeesuksessa, Kristuksessa
    style   = '<SPAN STYLE="color:teal;">';
    end     = '</SPAN>';
    re      = /\b([JK][^{,. ]+se)(s[st]a)\b/g;
    msg     = msg.replace( re, '$1' + style + '$2' + end );


    style   = '<SPAN STYLE="color:blue;">';
    end     = '</SPAN>';
    re      = /(v&auml;lity[^,.{ ]+)([ ,.])/g;
    msg     = msg.replace( re, style + '$1{?}$2' + end );


    style   = '<SPAN STYLE="color:blue;">';
    end     = '</SPAN>';
    re      = /(yhteydess&auml;) /g;
    msg     = msg.replace( re, style + '$1{?} ' + end );


    re = /([Vv]aikuttava voima|elämän voima|harjoittaa|ominaisuus|alitajuisesti|uudelleen luominen|omasta aloitteestani|rinnallasi|loistoisaa [Hh]erraa|tarkoitti|persoonallisuu[^ ]+|vapauttamista|Jumalan toimintaan|täytyy olla|puolueellisuutta|vastuunalaiseksi|pelastukseen kohdistuvan uskon|sen vaikutuksesta|ikuinen elämä silm&amul;m&amul;&amul;r&amul;n&amul;|todistamisen.*ty&ouml;[^ ]*|vaikutuksella|rangaistustuomio|teh[^ ]+ palvelu[^ ]+|kumar[^ ]+|asetetut ehdolle)/g;

    style   = '<SPAN STYLE="color:blue;">';
    end     = '</SPAN>';
    msg     = msg.replace( re, style + '$1' + end );


    style = '<SPAN STYLE="color:red;">';
    end   = '</SPAN>';
    re = /(rangais[^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );



    style = '<SPAN STYLE="color:Teal;">';
    end   = '</SPAN>';
    re = /(\bte[kh][^ ]+ ilmeiseksi|tul[^ ]+ ilmeiseksi|ilmeiseksi tul[^ ]*|pois karsi[^ ]+|kirkkau[^ ]+|kirkast[^ ]+|loisto[^ ]+|hyv&auml;[^ ]* +uuti[^ ]+|ennuste[^ ]*|ainosynty[^ ]+|riiva[^ ]+|asiainj[^ ]+|armo[^ ]*|\btaiva[^ ]+|Jumalan +[Hh]enki|\bhenki\b)/g;
    msg = msg.replace( re, style + '$1' + end );


    style = '<SPAN STYLE="text-decoration:underline;">';
    end   = '</SPAN>';
    re = /([Aa]nsaitsem[^ ]+ +hyv[^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );

    style = '<SPAN STYLE="font-style:italic;">';
    end   = '</SPAN>';
    re = /(ikui[ns][^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );


    style = '<SPAN STYLE="color:blue;font-style:italic;">';
    end   = '</SPAN>';
    re = /(\[[^][]+\])/g;
    msg = msg.replace( re, style + '$1' + end );

    return msg;
}

// .................................................................
//  KR38

var KRwordAdded = new Array();
KRwordAdded['Fil. 2:9']     = '\\b(muita|muutakin)';
KRwordAdded['Room. 8:32']   = '\\b(muita|muutakin)';

var KRwordDeleted = new Array();
KRwordDeleted['Ef. 1:12']     = '(panneet){tarkemmin:ensiksi}';
KRwordDeleted['Hepr. 11:7']   = '(saatuaan){puuttuu:Jumalan}';
KRwordDeleted['Hepr. 12:28']  = '(arkuudella +ja +){(Jumalan)}';
KRwordDeleted['Hepr. 10:34']  = '(on){puuttuu:taivaissa}';

var KRwordModified = new Array();
KRwordModified['Matt. 2:8']     = '(kumartamaan){&lt;=tarkemmin:palvoa}';
KRwordModified['1. Piet. 1:11'] = '(kunniasta){&lt;=tarkemmin:kirkkaudesta}';



function HighlightKRwords(msg)
{
    var verse = GetVerse();

    msg = HighlightWordChange(verse, msg, 'added'   , KRwordAdded);
    msg = HighlightWordChange(verse, msg, 'deleted' , KRwordDeleted);
    msg = HighlightWordChange(verse, msg, 'modified', KRwordModified);

    return msg;
}

function HighlightKR(msg)
{
    var re, style, end;


    msg = HighlightKRwords(msg);

    // Kristuksessa, Jeesuksessa, Jumalasta, Isässä

    re    = /\b((J[ue]|Kr|Is|He|heng)[^ ]+)(s[st]a|s[st]&auml;)/g;

    if ( msg.match( re ) )
    {
        style = '<SPAN STYLE="text-decoration:underline">';
        end   = '</SPAN>';
        msg = msg.replace( re,
                        '<SPAN STYLE="font-style:italic;">'
                        +  '$1'
                        + style
                        + '$3'
                        + end + end);

    }
    else
    {
        re    = /(J[ue][^ ]+|Kristu[^ ]+|Is&auml;[^ ]*|Is&auml[^ ]*|henge[^ ]+)/g;
        style = '<SPAN STYLE="font-style:italic;font-size:1.1em;">';
        end   = '</SPAN>';
        msg   = msg.replace( re, style + '$1' + end );
    }


    var re = /(Messia[^ ]+|Voidel[^ ]+|[kK]arit[^ ]+|[Kk]irkkauden +Herra[^ ]*|herrain|Sebaot|Luoja|Ihmisen Poi[^ ]+|Jumalan Po[^ ]+|Poika[^ ]*|Poja[^ ]+|Pyh[^ ]+ +Hen[gk][^ ]+|Henk[^ ]+|Puolust[^ ]+|Jumal[^ ]+ hen[^ ]+|Herran [hH]enki|\b[Mm]in&auml;[^ ]*|katse[^ ]+ kiint[^ ´]+)/g;

    // Forest Green
    // font-weight:bold;color:#809F69;font-family:Georgia, Arial;
    style = '<SPAN STYLE="font-style:italic;">';
    end   = '</SPAN>';
    msg   = msg.replace( re, style + '$1' + end );

    style = '<SPAN STYLE="color:navy;font-weight:bold;">';
    end   = '</SPAN>';
    //  EI: uskottomat, uskontomme
    re = /(\bnim[ie][^ ]*|\buskon\b|\buskoi?tt?e?\b|usko[^t ][^t ]+)/g;
    msg = msg.replace( re, style + '$1' + end );

    style   = '<SPAN STYLE="color:teal;">';
    end     = '</SPAN>';
    re      = /(lunast[^ ]+|saarna[^ ]+|julis[^ ]+|opetta[^ ]+|tunte[^ ]+|kumar[^ ]+ +rukoi[^ ]+|rukoi[^ ]+|iankaik[^ ]+el[^ ]+|iankaik[^ ]+ +autu[^ ]+|iankaik[^ ]+ +kirkkau[^ ]+|[tT]aiva[^ ]+|iankaik[^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );

    style   = '<SPAN STYLE="color:Teal;">';
    end     = '</SPAN>';
    re      = /(kirkkau[^ ]+|kirkast[^ ]+|valkeu[^ ]+)/g;
    msg     = msg.replace( re, style + '$1' + end );

    style = '<SPAN STYLE="color:red;font-weight:bold;">';
    end   = '</SPAN>';
    re = /(evankelium[^ ]+|hyvä[^ ]* +sanom[^ ]+|ilosanom[^ ]+|\bkaikk?i[^ ]*|jokai[^ ]+|yksik..n|\byh&tauml[^ ]*|yhdelle[^ ]+|yhdess.k..n|[^>(]muuta[^ ]*|\bmit&auml;&auml;n|\btoista\b|\bmik&auml;&auml;n|pelas[^ ]+|\bver[ie][^ ]*|rangais[^ ]+|todist[^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );

    style = '<SPAN STYLE="text-decoration:underline;">';
    end   = '</SPAN>';
    re = /(armolah[^ ]+|armo[^ ]*|lahja[^ ]*|synti[^ ]* +anteek[^ ]+|synnit +anteek[^ ]+|syn[tn]i[^ ]*|salais[^ ]+|aarte[^ ]+|rikkaud[^ ]+|(opetus)?laps[^ ]+)/g;
    msg = msg.replace( re, style + '$1' + end );

    return msg;
}

///////////////////////////////////////////////////////////////////////
//
//  Text: Make HTML
//
///////////////////////////////////////////////////////////////////////

function HtmlifyStyle(attrib)
{
    return '<SPAN STYLE="' + attrib + '">';
}

function HtmlifyHrefJSopen(str, func, param)
{
    return '<A HREF="javascript:'
                    + 'opener.'
                    + func + '('
                    + param
                    + ');">'
                    + str
                    + '</A>'
                    ;
}

function HtmlifyHrefBasic(url, str)
{
    return '<A HREF="' + url  + '">' + str + '</A>';
}

function HtmlifyGreekHeading(verse, func, str, attrib)
{
    var ret   = str;

    var beg   = HtmlifyStyle
                (
                    attrib
                    ? attrib
                    : 'font-family:Georgia, Trebuchet MS, Times New Roman;'
                    + 'font-style:italic;'
                );

    if ( Is(verse) &&  Is(func) )
    {
        ret   = HtmlifyHrefJSopen( str, func,   '\'' + verse + '\'');
    }

    return beg + ret;
}

function HtmlifyMain(msg, type)
{

    var verse  = '';
    var verseMatch = '';
    var rest   = '';

    var result = msg.match( /^([1234]*[^0-9]+[0-9]+:[0-9]+)[.]?(.*)/ );

    if ( result != null )
    {
       verse        = result[1];
       rest         = result[2];
    }
    else
    {
        result = msg.match( /^((Juud|Jaak)\. [0-9]+)[.]?(.*)/ );

        if ( result != null )
        {
            verse   = result[1];
            rest    = result[3];
        }
    }

    if ( verse != '' )
    {
        verseMatch   = verse;          // Make copy

        if ( type == 'um' )
        {
            rest = HighlightUM(rest);
        }
        else if ( type == 'greek-blue' )
        {

            rest  = HighlightGreekBlue(rest);

            verse = HtmlifyHrefJSopen(verse,
                                      'UrlBlueWindowOpenKjv',
                                      '\'' + verse + '\'' );
        }

        else if ( type == 'greek-novum' )
        {
            rest  = HighlightGreekNovum(rest);
        }
        else if ( type == 'greek-kit' )
        {
            rest  = HighlightGreekKit(rest);
        }
        else if ( type == 'kr' )
        {
            rest = HighlightKR(rest);
        }


        msg =   '<B><SPAN STYLE="font-size:1.1em;">'
                + verse + '</SPAN></B>'
                + ': &ndash; '
                + rest;
    }

    var bible = '';
    var tmp   = '';

    if ( type == 'kr' )
    {
        bible = '<I>KR38; </I>';
    }
    else if ( type == 'um' )
    {
        bible = '<I>UM95; </I>';
    }
    else if ( type == 'greek-blue' )
    {
        tmp = 'Greek/Textus Receptus 1550';

        tmp = HtmlifyGreekHeading( verseMatch
                                   , 'UrlBlueWindowOpenGreek'
                                   , tmp);

        bible = tmp + '/Blue Letter Bible;' + '</SPAN><BR>';
    }
    else if ( type == 'greek-novum' )
    {
        tmp = 'Kreikka/Textus Receptus 1550 - Nestle Aland 25';

        tmp = HtmlifyGreekHeading( ''
                                   , ''
                                   , tmp);

        bible = tmp + '/Novum-interlineaari;' + '</SPAN><BR>';
    }
    else if ( type == 'greek-kit' )
    {
        tmp = 'Greek/Wescott and Hort 1881';

        tmp = HtmlifyGreekHeading( ''
                                   , ''
                                   , tmp);

        bible = tmp + '/Kingdom Interlinear Translation;' + '</SPAN><BR>';
    }

    return bible + msg;
}

function MyFormat(message, type)
{
    var msg  = '';          // KR38 basic format
    var bg   = '#AFB';
    var size = '14';
    var font = 'Arial';


    if ( type == 'um' )
    {
        bg   = '#FFFFFF';
        size = '14';
    }
    else if ( type == 'greek-novum' )
    {
        bg   = '#E6F1FD';
        size = '14';
        font = 'Trebuchet MS, Times New Roman';
    }
    else if ( type == 'greek-blue' )
    {
        bg   = '#D8EAFD';
        size = '14';
        font = 'Trebuchet MS, Times New Roman';
    }
    else if ( type == 'greek-kit' )
    {
        bg   = '#D2E6FC';
        size = '12';
        font = 'Trebuchet MS, Times New Roman';
    }

    if ( Is(message) )
    {
        var html = HtmlifyMain(message, type);

        msg  =   '<DIV STYLE="'
                + 'font-size:'      + size + ';'
                + 'font-family:'    + font + ';'
                + 'background:'     + bg   + ';'
                + '">'
                +  html
                + '</DIV>'
                ;
    }

    return msg;
}

///////////////////////////////////////////////////////////////////////
//
//  DISPLAY
//
///////////////////////////////////////////////////////////////////////

var myWin = null;

function HelpWindowOpen()
{
    var url =  "ohje/";
    window.open( url );
}

function HomePageOpen()
{
    var url =  "http://raamattu.cante.net";
    window.open( url );
}

function MyDisplay(msg)
{
    if ( dyn != null )
    {
        dyn.setBody(msg);
    }

    myWin.WriteMsg(msg);
}

function MyBibleKR38(arg)
{
    var verse = kr38[arg];

    if ( verse == null )
    {
        verse = '';
    }
    else
    {
        verse = MyFormat( verse, 'kr');
    }

    return verse;
}

function MyBibleUM(arg)
{
    var verse = um95[arg];

    if ( verse == null )
    {
        verse = '';
    }
    else
    {
        verse = MyFormat( verse, 'um');
    }

    return verse;
}

function MyBibleGreekBlue(arg)
{
    var verse = blue[arg];

    if ( verse == null )
    {
        verse = '';
    }
    else
    {
        verse = MyFormat( verse, 'greek-blue');
    }

    return verse;
}

function MyBibleGreekKit(arg)
{
    var verse = kit_[arg];

    if ( verse == null )
    {
        verse = '';
    }
    else
    {
        verse = MyFormat( verse, 'greek-kit');
    }

    return verse;
}

function MyBibleGreekNovum(arg)
{
    var verse = novu[arg];

    if ( verse == null )
    {
        verse = '';
    }
    else
    {
        verse = MyFormat( verse, 'greek-novum');
    }

    return verse;
}

function BibleGreekText(verse)
{
    var ret   = '';
    var greek = '';

    greek  = MyBibleGreekNovum(verse);

    if ( Is(greek) )
    {
        ret +=  greek + '<BR>';
    }

    greek = MyBibleGreekBlue(verse);

    if ( Is(greek) )
    {
        ret += greek + '<BR>';
    }

    greek = MyBibleGreekKit(verse);

    if ( Is(greek) )
    {
        ret += greek + '<BR>';
    }

    if ( ret != '' )
    {
        ret = '<BR>' + ret;
    }

    return ret;
}

function MyDisplayText(arg)
{
    var txt = '';


    txt += "<HTML>";
    txt += "<HEAD><TITLE>Jae</TITLE></HEAD>";
    txt += "<BODY>";


    var button1 = '';

    if ( IsBibleNOVUM() )
    {
        button1 = HtmlifyHrefJSopen( '[ohje]',
                                     'HelpWindowOpen', '');
    }

    var button2 = HtmlifyHrefJSopen( '[tulosta]',
                                     'MyPrint', '');
    var button3 = HtmlifyHrefJSopen( '[kotisivu]',
                                     'HomePageOpen', '');

    var style  = HtmlifyStyle( "font-size=0.8em;");

    txt +=  style
            + button1
            + button2
            + button3
            + '</SPAN>'
            + '<BR>'
            ;

    var kr = MyBibleKR38(arg);

    if ( Is(kr) )
    {
        txt += '<BR>' + kr;
    }

    var um = MyBibleUM(arg);

    if ( Is(um) )
    {
        txt += '<BR>' + um;
    }

    var greek = BibleGreekText(arg);

    if ( Is(greek) )
    {
        txt += greek;
    }
    else
    {
        // var url    = UrlBlueHtmlPageMain(arg, 'greek');
        // var urlAdd = HtmlifyHrefBasic(url, url);

        var urlAdd = '';
        var verse  = arg;

        urlAdd = HtmlifyHrefJSopen(
                    'Blue Letter Bible (jakeen rivienv&auml;linen sanasta sanaan teksti)'
                    , 'UrlBlueWindowOpenGreek'
                    ,  '\'' + verse + '\'');

        // urlAdd += ' Paina sivulla nappia [C]';

        txt += urlAdd;
    }

    txt += "</BODY></HTML>";


    return txt;
}

///////////////////////////////////////////////////////////////////////
//
//      Global variables and instance classes
//
///////////////////////////////////////////////////////////////////////

var LAST_VERSE  = '';

//  Bibles in finnish

var kr38        = new Array();
var um95        = new Array();

//  Greek interlinears

var blue        = new Array();  // www.blueletterbible.org
var novu        = new Array();  // Novum 1-5 book series, ISBN 951-605-650-4

// Kingdom interlinear Translation of the Greek Scriptures
// Publisher: Jehovah's Witnesses (Watchtower society)

var kit_        = new Array();

//  When the arrays are filled, each array conatains a 'check'
//  item to say that "I'm alive, you can use this array".

function IsBibleCheck(arrayName)
{
    var code = arrayName + '["used"]';

    var stat  = eval(code);
    var ret   = false;

    if ( stat == 'ok' )
    {
        ret = true;
    }

//    alert( code + ' ' + stat + ' = ' + ret);

    return ret;
}

function IsBibleKR38 ()
{
    return IsBibleCheck("kr38");
}

function IsBibleUM95 ()
{
    return IsBibleCheck("um95");
}

function IsBibleKIT ()
{
    return IsBibleCheck("kit_");
}

function IsBibleNOVUM ()
{
    return IsBibleCheck("novu");

}

function IsBibleBLUE ()
{
    return IsBibleCheck("blue");
}

///////////////////////////////////////////////////////////////////////
//
//      WINDOW INIT
//
///////////////////////////////////////////////////////////////////////

var dyn   = null;

function InitializeWindowHeight()
{
    var height = 0;

    //  find out how many bibles are available and set initial window
    //  height

    var arr = ['KR38', 'UM95', 'KIT', 'NOVUM', 'BLUE'];
    var inc = [ 140,    120,    120,   140,     160  ];

    var str = '';

    for ( var i =0; i < arr.length; i++ )
    {
        var bible = arr[i];
        var func  = 'IsBible' + bible + '()';
        var ret   = eval(func);          // Call function, see if bible is present.

// alert( str + ' - ' + bible + ' ' + func + ' ' + ret);

        if ( ret )
        {
            str    += ' ' + bible;
            height += inc[i];
        }
    }

    if ( ! height )
    {
        height = 150;
    }


    if ( str != '' )
    {
        status = "Raamatut: " + str;
    }

    return height;
}

function InitializeWindowClass()
{
    var height = InitializeWindowHeight();

    var attrib = "width=500,"
                 + "height=" + height
                 + ",resizable,status"
                 ;

    var msg = "Avataan raamatunjakeen ikkunaa, "
              + "odota hetki (5-15 sekuntia) ..."
              ;

    // This only sets parameters, does not actually yet open the window

    myWin = new LibWin( "window", "window", attrib, msg);
}

function test ()
{
    return "abc123";
}

// dyn = new DynEl( window, "d1", '', 10, 10);


///////////////////////////////////////////////////////////////////////
//
//  MOUSE
//
///////////////////////////////////////////////////////////////////////

function MyClear()
{
    if ( dyn != null )
    {
        MyMsg('');
    }
}

function MyMouseDoIt(arg)
{
    //  If same as last time, do not try to fetch
    //  Avoid extra work.

    if ( LAST_VERSE !=  arg )
    {
        LAST_VERSE = arg;

        var verse = kr38[arg];

        if ( verse == null )
        {
            MyDisplay( arg + ' <I>jae ei ole saatavilla</I>' );
        }
        else
        {
            var txt = MyDisplayText(arg);

            MyDisplay(txt);
        }
    }

    return true;
}

var BUSY = null;

function MyMouse(arg)
{
    MyMouseDoIt(arg);

    if ( 0 )
    {
        //  Non-working code commented out.

        if ( BUSY == null )             //  Make a delay
        {
            BUSY = true;
            // MySleep(1.5 * 1000, arg);
            MyMouseDoIt(arg);
            BUSY = null;
        }
    }

    return true;
}

// This call is appended to the end of file, do not TOUCH!
// LAST_CODE: InitializeWindowClass();


kr38['Apt. 4:12']='Apt. 4:12. Eik&auml; ole pelastusta yhdess&auml;k&auml;&auml;n toisessa; sill&auml; ei ole taivaan alla muuta nime&auml; ihmisille annettu, jossa meid&auml;n pit&auml;isi pelastuman.&quot;';
kr38['Matt. 6:24']='Matt. 6:24. Ei kukaan voi palvella kahta herraa; sill&auml; h&auml;n on joko t&auml;t&auml; vihaava ja toista rakastava, taikka t&auml;h&auml;n liittyv&auml; ja toista halveksiva. Ette voi palvella Jumalaa ja mammonaa.';
kr38['Joh. 1:6']='Joh. 1:6. Oli mies, Jumalan l&auml;hett&auml;m&auml;; h&auml;nen nimens&auml; oli Johannes.';
kr38['Joh. 1:12']='Joh. 1:12. Mutta kaikille, jotka ottivat h&auml;net vastaan, h&auml;n antoi voiman tulla Jumalan lapsiksi, niille, jotka uskovat h&auml;nen nimeens&auml;,';
kr38['Joh. 1:13']='Joh. 1:13. jotka eiv&auml;t ole syntyneet verest&auml; eik&auml; lihan tahdosta eik&auml; miehen tahdosta, vaan Jumalasta.';
kr38['Luuk. 11:2']='Luuk. 11:2. Niin h&auml;n sanoi heille: &quot;Kun rukoilette, sanokaa: Is&auml;, pyhitetty olkoon sinun nimesi; tulkoon sinun valtakuntasi; (tapahtukoon sinun tahtosi my&ouml;s maan p&auml;&auml;ll&auml; niinkuin taivaassa;)';
kr38['Matt. 28:19']='Matt. 28:19. Menk&auml;&auml; siis ja tehk&auml;&auml; kaikki kansat minun opetuslapsikseni, kastamalla heit&auml; Is&auml;n ja Pojan ja Pyh&auml;n Hengen nimeen';
kr38['Joh. 20:22']='Joh. 20:22. Ja t&auml;m&auml;n sanottuaan h&auml;n puhalsi heid&auml;n p&auml;&auml;llens&auml; ja sanoi heille: &quot;Ottakaa Pyh&auml; Henki.';
kr38['Apt. 19:2']='Apt. 19:2. Ja h&auml;n sanoi heille: &quot;Saitteko Pyh&auml;n Hengen silloin, kun te tulitte uskoon?&quot; Niin he sanoivat h&auml;nelle: &quot;Emme ole edes kuulleet, ett&auml; Pyh&auml;&auml; Henke&auml; on olemassakaan&quot;.';
kr38['Apt. 19:3']='Apt. 19:3. Ja h&auml;n sanoi: &quot;Mill&auml; kasteella te sitten olette kastetut?&quot; He vastasivat: &quot;Johanneksen kasteella&quot;.';
kr38['Apt. 19:4']='Apt. 19:4. Niin Paavali sanoi: &quot;Johannes kastoi parannuksen kasteella, kehoittaen kansaa uskomaan h&auml;neen, joka oli tuleva h&auml;nen j&auml;lkeens&auml;, se on, Jeesukseen&quot;.';
kr38['Apt. 19:5']='Apt. 19:5. Sen kuultuaan he ottivat kasteen Herran Jeesuksen nimeen.';
kr38['Apt. 19:6']='Apt. 19:6. Ja kun Paavali pani k&auml;tens&auml; heid&auml;n p&auml;&auml;lleen, tuli heid&auml;n p&auml;&auml;llens&auml; Pyh&auml; Henki, ja he puhuivat kielill&auml; ja ennustivat.';
kr38['1. Kor. 6:19']='1Kor. 6:19. Vai ettek&ouml; tied&auml;, ett&auml; teid&auml;n ruumiinne on Pyh&auml;n Hengen temppeli, joka Henki teiss&auml; on ja jonka te olette saaneet Jumalalta, ja ettette ole itsenne omat?';
kr38['Joh. 14:23']='Joh. 14:23. Jeesus vastasi ja sanoi h&auml;nelle: &quot;Jos joku rakastaa minua, niin h&auml;n pit&auml;&auml; minun sanani, ja minun Is&auml;ni rakastaa h&auml;nt&auml;, ja me tulemme h&auml;nen tyk&ouml;ns&auml; ja j&auml;&auml;mme h&auml;nen tyk&ouml;ns&auml; asumaan.';
kr38['Ef. 1:13']='Ef. 1:13. H&auml;ness&auml; on teihinkin, sittenkuin olitte kuulleet totuuden sanan, pelastuksenne evankeliumin, uskoviksi tultuanne pantu luvatun Pyh&auml;n Hengen sinetti,';
kr38['Joh. 16:13']='Joh. 16:13. Mutta kun h&auml;n tulee, totuuden Henki, johdattaa h&auml;n teid&auml;t kaikkeen totuuteen. Sill&auml; se, mit&auml; h&auml;n puhuu, ei ole h&auml;nest&auml; itsest&auml;&auml;n; vaan mink&auml; h&auml;n kuulee, sen h&auml;n puhuu, ja tulevaiset h&auml;n teille julistaa.';
kr38['Matt. 19:26']='Matt. 19:26. Niin Jeesus katsoi heihin ja sanoi heille: &quot;Ihmisille se on mahdotonta, mutta Jumalalle on kaikki mahdollista&quot;.';
kr38['Joh. 14:26']='Joh. 14:26. Mutta Puolustaja, Pyh&auml; Henki, jonka Is&auml; on l&auml;hett&auml;v&auml; minun nimess&auml;ni, h&auml;n opettaa teille kaikki ja muistuttaa teit&auml; kaikesta, mink&auml; min&auml; olen teille sanonut.';
kr38['Matt. 12:30']='Matt. 12:30. Joka ei ole minun kanssani, se on minua vastaan; ja joka ei minun kanssani kokoa, se hajottaa.';
kr38['Matt. 12:31']='Matt. 12:31. Sent&auml;hden min&auml; sanon teille: jokainen synti ja pilkka annetaan ihmisille anteeksi, mutta Hengen pilkkaamista ei anteeksi anneta.';
kr38['Matt. 12:32']='Matt. 12:32. Ja jos joku sanoo sanan Ihmisen Poikaa vastaan, niin h&auml;nelle annetaan anteeksi; mutta jos joku sanoo jotakin Pyh&auml;&auml; Henke&auml; vastaan, niin h&auml;nelle ei anteeksi anneta, ei t&auml;ss&auml; maailmassa eik&auml; tulevassa.';
kr38['Apt. 13:1']='Apt. 13:1. Ja Antiokian seurakunnassa oli profeettoja ja opettajia: Barnabas ja Simeon, jota kutsuttiin Nigeriksi, ja Lukius, kyrenel&auml;inen, ja Manaen, nelj&auml;nnysruhtinas Herodeksen kasvinkumppani, ja Saulus.';
kr38['Apt. 13:2']='Apt. 13:2. Ja heid&auml;n toimittaessaan palvelusta Herralle ja paastotessaan Pyh&auml; Henki sanoi: &quot;Erottakaa minulle Barnabas ja Saulus siihen ty&ouml;h&ouml;n, johon min&auml; olen heid&auml;t kutsunut&quot;.';
kr38['Apt. 15:14']='Apt. 15:14. Simeon on kertonut, kuinka Jumala ensi kerran katsoi pakanain puoleen ottaakseen heist&auml; kansan omalle nimellens&auml;.';
kr38['Apt. 8:16']='Apt. 8:16. sill&auml; h&auml;n ei ollut viel&auml; tullut yhteenk&auml;&auml;n heist&auml;, vaan he olivat ainoastaan kastetut Herran Jeesuksen nimeen.';
kr38['Apt. 16:16']='Apt. 16:16. Ja tapahtui meid&auml;n menness&auml;mme rukouspaikkaan, ett&auml; meit&auml; vastaan tuli er&auml;s palvelijatar, jossa oli tiet&auml;j&auml;henki ja joka tuotti paljon tuloja is&auml;nnilleen ennustamisellaan.';
kr38['Room. 8:26']='Room. 8:26. Samoin my&ouml;s Henki auttaa meid&auml;n heikkouttamme. Sill&auml; me emme tied&auml;, mit&auml; meid&auml;n pit&auml;&auml; rukoileman, niinkuin rukoilla tulisi, mutta Henki itse rukoilee meid&auml;n puolestamme sanomattomilla huokauksilla.';
kr38['Room. 8:27']='Room. 8:27. Mutta syd&auml;nten tutkija tiet&auml;&auml;, mik&auml; Hengen mieli on, sill&auml; Henki rukoilee Jumalan tahdon mukaan pyhien edest&auml;.';
kr38['Hepr. 7:25']='Hepr. 7:25. jonka t&auml;hden h&auml;n my&ouml;s voi t&auml;ydellisesti pelastaa ne, jotka h&auml;nen kauttaan Jumalan tyk&ouml; tulevat, koska h&auml;n aina el&auml;&auml; rukoillakseen heid&auml;n puolestansa.';
kr38['Luuk. 8:27']='Luuk. 8:27. Ja kun h&auml;n oli noussut maihin, tuli h&auml;nt&auml; vastaan kaupungista mies, jossa oli riivaajia; ja h&auml;n ei ollut pitk&auml;&auml;n aikaan pukenut vaatteita ylleen eik&auml; asunut huoneessa, vaan haudoissa.';
kr38['Luuk. 8:28']='Luuk. 8:28. Kun h&auml;n n&auml;ki Jeesuksen, parkaisi h&auml;n ja lankesi maahan h&auml;nen eteens&auml; ja huusi suurella &auml;&auml;nell&auml;: &quot;Mit&auml; sinulla on minun kanssani tekemist&auml;, Jeesus, Jumalan, Korkeimman, Poika? Min&auml; rukoilen sinua: &auml;l&auml; minua vaivaa.&quot;';
kr38['Luuk. 8:29']='Luuk. 8:29. Sill&auml; h&auml;n oli k&auml;skem&auml;isill&auml;&auml;n saastaista henke&auml; menem&auml;&auml;n ulos siit&auml; miehest&auml;. Sill&auml; pitk&auml;t ajat se oli temponut h&auml;nt&auml; mukaansa; h&auml;net oli sidottu kahleisiin ja jalkanuoriin, ja h&auml;nt&auml; oli vartioitu, mutta h&auml;n oli katkaissut siteet ja kulkeutunut riivaajan ajamana er&auml;maihin.';
kr38['Luuk. 8:30']='Luuk. 8:30. Niin Jeesus kysyi silt&auml; sanoen: &quot;Mik&auml; on nimesi?&quot; H&auml;n vastasi: &quot;Legio&quot;; sill&auml; monta riivaajaa oli mennyt h&auml;neen.';
kr38['Joh. 4:24']='Joh. 4:24. Jumala on Henki; ja jotka h&auml;nt&auml; rukoilevat, niiden tulee rukoilla hengess&auml; ja totuudessa.&quot;';
kr38['2. Kor. 3:17']='2Kor. 3:17. Sill&auml; Herra on Henki, ja miss&auml; Herran Henki on, siin&auml; on vapaus.';
kr38['2. Kor. 4:13']='2Kor. 4:13. Mutta koska meill&auml; on sama uskon Henki, niinkuin kirjoitettu on: &quot;Min&auml; uskon, sent&auml;hden min&auml; puhun&quot;, niin mekin uskomme, ja sent&auml;hden me my&ouml;s puhumme,';
kr38['used']='ok'


InitializeWindowClass();
