﻿var vowelComponent;
var consonantComponent = {};
var markComponent;
var syllableInRoman;
var xliteratedSyllable;
var restOfRoman;

var Vowels = [{"Key":'`a',"Value":'A'},{"Key":'`e',"Value":'H'},{"Key":'`i',"Value":'C'},{"Key":'`o',"Value":'J'},{"Key":'`u',"Value":'E'},{"Key":'a',"Value":'A'},{"Key":'aa',"Value":'B'},{"Key":'A',"Value":'B'},{"Key":'ayaa',"Value":'AÉ¡'},{"Key":'ayA',"Value":'AÉ¡'},{"Key":'e',"Value":'H'},{"Key":'ee',"Value":'D'},{"Key":'I',"Value":'D'},{"Key":'i',"Value":'C'},{"Key":'o',"Value":'J'},{"Key":'oi',"Value":'I'},{"Key":'ou',"Value":'K'},{"Key":'R',"Value":'G'},{"Key":'u',"Value":'E'},{"Key":'oo',"Value":'F'},{"Key":'U',"Value":'F'},{"Key":'Ri',"Value":'G'}];
var Consonants = [{"Key":'`M',"Value":'P'},{"Key":'`N',"Value":'U'},{"Key":'b',"Value":'h'},{"Key":'ch',"Value":'Q'},{"Key":'chh',"Value":'R'},{"Key":'D',"Value":'X'},{"Key":'d',"Value":'c'},{"Key":'dh',"Value":'d'},{"Key":'Dh',"Value":'Y'},{"Key":'g',"Value":'N'},{"Key":'gh',"Value":'O'},{"Key":'h',"Value":'q'},{"Key":'j',"Value":'S'},{"Key":'J',"Value":'k'},{"Key":'k',"Value":'L'},{"Key":'kh',"Value":'M'},{"Key":'l',"Value":'m'},{"Key":'m',"Value":'j'},{"Key":'N',"Value":'Z'},{"Key":'n',"Value":'e'},{"Key":'p',"Value":'f'},{"Key":'ph',"Value":'g'},{"Key":'r',"Value":'l'},{"Key":'`r',"Value":'l'},{"Key":'rh',"Value":'s'},{"Key":'rhh',"Value":'t'},{"Key":'s',"Value":'p'},{"Key":'sh',"Value":'n'},{"Key":'shh',"Value":'o'},{"Key":'`t',"Value":'v'},{"Key":'T',"Value":'V'},{"Key":'t',"Value":'a'},{"Key":'Th',"Value":'W'},{"Key":'th',"Value":'b'},{"Key":'w',"Value":'u'},{"Key":'x',"Value":'r'},{"Key":'y',"Value":'u'}];
var Matras = [{"Key":'A',"Value":'¡'},{"Key":'aa',"Value":'¡'},{"Key":'oi',"Value":'¯'},{"Key":'e',"Value":'®'},{"Key":'I',"Value":'£'},{"Key":'ee',"Value":'£'},{"Key":'i',"Value":'Ï'},{"Key":'O',"Value":'±'},{"Key":'R',"Value":'ª'},{"Key":'Ri',"Value":'ª'},{"Key":'U',"Value":'§'},{"Key":'oo',"Value":'§'},{"Key":'u',"Value":'¤'},{"Key":'y',"Value":'É'},{"Key":'r',"Value":'Ë'},{"Key":'`r',"Value":'Ñ'}];
var Conjuncts = [{"Key":'`rh',"Value":'qÑ'},{"Key":'`Mg',"Value":'Â'},{"Key":'`Mgh',"Value":'´O'},{"Key":'`Mk',"Value":'ˆ'},{"Key":'`Mkh',"Value":'´M'},{"Key":'`Mkshh',"Value":'´r'},{"Key":'`Mx',"Value":'´r'},{"Key":'`Mm',"Value":'´j'},{"Key":'`Nch',"Value":'’'},{"Key":'`Nchh',"Value":'“'},{"Key":'`Nj',"Value":'”'},{"Key":'`Njh',"Value":'•'},{"Key":'bb',"Value":'î'},{"Key":'bd',"Value":'ë'},{"Key":'bdh',"Value":'ì'},{"Key":'bh',"Value":'i'},{"Key":'bhl',"Value":'iÔ'},{"Key":'bhr',"Value":'ï'},{"Key":'bj',"Value":'ê'},{"Key":'bl',"Value":'hÔ'},{"Key":'br',"Value":'hË'},{"Key":'ch`N',"Value":'Š'},{"Key":'chch',"Value":'µQ'},{"Key":'chchh',"Value":'µR'},{"Key":'chchhb',"Value":'µRÄ'},{"Key":'db',"Value":'à'},{"Key":'dbh',"Value":'á'},{"Key":'DD',"Value":'Î'},{"Key":'dd',"Value":'Ÿ'},{"Key":'ddh',"Value":'Ü'},{"Key":'ddhb',"Value":'Þ'},{"Key":'dhb',"Value":'dÄ'},{"Key":'dhr',"Value":'dË'},{"Key":'dm',"Value":'cÈ'},{"Key":'dr',"Value":'â'},{"Key":'Dr',"Value":'XÌ'},{"Key":'gb',"Value":'NÄ'},{"Key":'gdh',"Value":'‡'},{"Key":'gg',"Value":'†'},{"Key":'ghn',"Value":'OÀ'},{"Key":'ghr',"Value":'OË'},{"Key":'gl',"Value":'NÔ'},{"Key":'gm',"Value":'³j'},{"Key":'gn',"Value":'NÀ'},{"Key":'gr',"Value":'NË'},{"Key":'hb',"Value":'qÄ'},{"Key":'hl',"Value":'qÔ'},{"Key":'hm',"Value":'þ'},{"Key":'hn',"Value":'q²'},{"Key":'j`N',"Value":'‘'},{"Key":'jb',"Value":'SÄ'},{"Key":'jh',"Value":'T'},{"Key":'jj',"Value":'‹'},{"Key":'jjb',"Value":'‹Ä'},{"Key":'jjh',"Value":'Œ'},{"Key":'jjhb',"Value":'ŒÄ'},{"Key":'jr',"Value":'SË'},{"Key":'kb',"Value":'LÅ'},{"Key":'khr',"Value":'MË'},{"Key":'kk',"Value":'‚'},{"Key":'kl',"Value":'LÓ'},{"Key":'km',"Value":'LÈ'},{"Key":'kr',"Value":'œ²'},{"Key":'ks',"Value":'„'},{"Key":'kshh',"Value":'r'},{"Key":'kshhm',"Value":'rÈ'},{"Key":'kshhN',"Value":'rÁ'},{"Key":'kt',"Value":'š²'},{"Key":'kT',"Value":'ƒ'},{"Key":'lb',"Value":'Òh'},{"Key":'lD',"Value":'ô'},{"Key":'lg',"Value":'ÒN'},{"Key":'lk',"Value":'ó'},{"Key":'ll',"Value":'õ'},{"Key":'lm',"Value":'Òj'},{"Key":'lp',"Value":'Òf'},{"Key":'lph',"Value":'Òg'},{"Key":'lT',"Value":'ÒV'},{"Key":'mb',"Value":'ð'},{"Key":'mbh',"Value":'ñ'},{"Key":'mbhr',"Value":'ò'},{"Key":'ml',"Value":'Çm'},{"Key":'mm',"Value":'Çj'},{"Key":'mn',"Value":'Çe'},{"Key":'mp',"Value":'Çf'},{"Key":'mph',"Value":'Çg'},{"Key":'mpr',"Value":'ÇfË'},{"Key":'mr',"Value":'jË'},{"Key":'nb',"Value":'eÄ'},{"Key":'Nb',"Value":'ZÄ'},{"Key":'ND',"Value":'™'},{"Key":'nD',"Value":'ä'},{"Key":'nd',"Value":'¾c'},{"Key":'ndb',"Value":'¾cÄ'},{"Key":'ndh',"Value":'å'},{"Key":'ndr',"Value":'¾cË'},{"Key":'ng',"Value":'Â'},{"Key":'nm',"Value":'¾j'},{"Key":'Nm',"Value":'ZÈ'},{"Key":'NN',"Value":'ZÀ'},{"Key":'nn',"Value":'æ'},{"Key":'Nn',"Value":'ZÀ'},{"Key":'ns',"Value":'¾p'},{"Key":'NT',"Value":'¸V'},{"Key":'nT',"Value":'¾V'},{"Key":'nt',"Value":'¿¹'},{"Key":'ntb',"Value":'¿¹Ä'},{"Key":'nTh',"Value":'ã'},{"Key":'NTh',"Value":'˜'},{"Key":'nth',"Value":'¾b'},{"Key":'ntr',"Value":'¿»'},{"Key":'phl',"Value":'gÓ'},{"Key":'phr',"Value":'gË'},{"Key":'pl',"Value":'fÔ'},{"Key":'pn',"Value":'fÀ'},{"Key":'pp',"Value":'è'},{"Key":'pr',"Value":'fË'},{"Key":'ps',"Value":'Ãp'},{"Key":'pT',"Value":'ÃV'},{"Key":'pt',"Value":'ç'},{"Key":'rtr',"Value":'œÑ'},{"Key":'ry',"Value":'lÉ'},{"Key":'sb',"Value":'ü'},{"Key":'shb',"Value":'nÄ'},{"Key":'shch',"Value":'ÕQ'},{"Key":'shchh',"Value":'ÕR'},{"Key":'shh`N',"Value":'o·'},{"Key":'shhb',"Value":'Öh'},{"Key":'shhk',"Value":'×L'},{"Key":'shhm',"Value":'Öj'},{"Key":'shhp',"Value":'Öf'},{"Key":'shhph',"Value":'Ög'},{"Key":'shhT',"Value":'ø'},{"Key":'shhTh',"Value":'ù'},{"Key":'shl',"Value":'nÔ'},{"Key":'shm',"Value":'nÈ'},{"Key":'shn',"Value":'nÀ'},{"Key":'shr',"Value":'nË'},{"Key":'sht',"Value":'÷'},{"Key":'sk',"Value":'ú'},{"Key":'skh',"Value":'ØM'},{"Key":'skr',"Value":'û'},{"Key":'sl',"Value":'pÔ'},{"Key":'sm',"Value":'Øj'},{"Key":'sn',"Value":'Øe'},{"Key":'sp',"Value":'Øf'},{"Key":'sph',"Value":'Øg'},{"Key":'sr',"Value":'pË'},{"Key":'sT',"Value":'ØV'},{"Key":'st',"Value":'Ù¹'},{"Key":'sth',"Value":'Øb'},{"Key":'str',"Value":'Øœ'},{"Key":'sTr',"Value":'ØVÌ'},{"Key":'tb',"Value":'aÄ'},{"Key":'tm',"Value":'aÈ'},{"Key":'tn',"Value":'aÁ'},{"Key":'Tr',"Value":'VÌ'},{"Key":'tr',"Value":'œ'},{"Key":'tt',"Value":'š'},{"Key":'TT',"Value":'Í'},{"Key":'thb',"Value":'bÄ'},{"Key":'ttb',"Value":'šÄ'},{"Key":'tth',"Value":'›'},{"Key":'xm',"Value":'rÈ'},{"Key":'xN',"Value":'rÁ'}];
var CVLigatures = [{"Key":'bhru',"Value":'ï¦'},{"Key":'bhrU',"Value":'ï©'},{"Key":'gu',"Value":'¬'},{"Key":'hRi',"Value":'q©'},{"Key":'hu',"Value":'ý'},{"Key":'ntu',"Value":'¿º'},{"Key":'pru',"Value":'fË¦'},{"Key":'rU',"Value":'l©'},{"Key":'ru',"Value":'l¦'},{"Key":'shu',"Value":'ö'}];
var Marks = [{"Key":'`m',"Value":'w'},{"Key":'`n',"Value":'y'},{"Key":'`h',"Value":'x'},{"Key":':',"Value":'x'},{"Key":'.',"Value":'z'},{"Key":'_',"Value":'Ú'},{"Key":'}',"Value":'}'},{"Key":'}',"Value":'}'},{"Key":'-',"Value":'-'},{"Key":' ',"Value":' '},{"Key":'\r\n',"Value":'\r\n'},{"Key":'1',"Value":'1'},{"Key":'2',"Value":'2'},{"Key":'3',"Value":'3'},{"Key":'4',"Value":'4'},{"Key":'5',"Value":'5'},{"Key":'6',"Value":'6'},{"Key":'7',"Value":'7'},{"Key":'8',"Value":'8'},{"Key":'9',"Value":'9'},{"Key":'0',"Value":'0'},{"Key":'?',"Value":'?'},{"Key":'!',"Value":'!'},{"Key":'*',"Value":'*'},{"Key":'[',"Value":'['},{"Key":']',"Value":']'},{"Key":'%',"Value":'%'},{"Key":'\\',"Value":'\\'},{"Key":'(',"Value":'('},{"Key":')',"Value":')'},{"Key":'+',"Value":'+'},{"Key":'=',"Value":'='},{"Key":'#',"Value":'#'},{"Key":'/',"Value":'/'},{"Key":'×',"Value":'^'},{"Key":'­',"Value":'_'},{"Key":'·',"Value":'|'},{"Key":'¡',"Value":',"Value":'},{"Key":'\'',"Value":'\''},{"Key":'\'\'',"Value":'\'\''},{"Key":'Ý',"Value":'É'},{"Key":'¦',"Value":'¡'},{"Key":'¢',"Value":'Ë'}];
var Auxilieries = [{"Key":'c',"Value":'k'},{"Key":'f',"Value":'ph'},{"Key":'q',"Value":'k'},{"Key":'v',"Value":'bh'},{"Key":'z',"Value":'j'},{"Key":'B',"Value":'b'},{"Key":'C',"Value":'k'},{"Key":'F',"Value":'ph'},{"Key":'G',"Value":'g'},{"Key":'H',"Value":'h'},{"Key":'J',"Value":'j'},{"Key":'K',"Value":'k'},{"Key":'L',"Value":'l'},{"Key":'M',"Value":'m'},{"Key":'P',"Value":'p'},{"Key":'Q',"Value":'k'},{"Key":'S',"Value":'s'},{"Key":'T',"Value":'t'},{"Key":'V',"Value":'bh'},{"Key":'W',"Value":'w'},{"Key":'X',"Value":'x'},{"Key":'Y',"Value":'y'},{"Key":'Z',"Value":'j'}];

function getVowelComponent() {
    return vowelComponent;
}

function getConsonantComponent() {
    var sConsonants = "";
    for (var i = 0; i < consonantComponent.length; i++) {
        sConsonants = sConsonants + consonantComponent[i];
    }
    return sConsonants;
}

function getMarkComponent() {
    return markComponent;
}

function getSyllableInRoman() {
    return syllableInRoman;
}

function getXliteratedSyllable() {
    return xliteratedSyllable;
}

function getRestOfRoman() {
    return restOfRoman;
}

function ContainsKey(map, text) {
    var contains = false;
    $.each(map, function (i, obj) {
        if (obj.Key == text) {
            contains = true;
        }
    });
    return contains;
};

function getValue(map, text) {
    var keyValue = "";
    $.each(map, function (i, obj) {
        if (obj.Key == text) {
            keyValue = obj.Value;
        }
    });
    return keyValue;
};

function GetTokenLength(map, banglish) {
    var tmpTokenLength = 0;
    var token = "";
    if (banglish.length > 2) {
        token = banglish.substr(0, 3);
        $.each(map, function (i, obj) {
            if (obj.Key == token) {
                tmpTokenLength = 3;
            }
        });
    }
    if (tmpTokenLength > 0)
        return tmpTokenLength;
    if (banglish.length > 1) {
        token = "";
        token = banglish.substr(0, 2);
        $.each(map, function (i, obj) {
            if (obj.Key == token) {
                tmpTokenLength = 2;
            }
        });
    }
    if (tmpTokenLength > 0)
        return tmpTokenLength;
    if (banglish.length > 0) {
        token = "";
        token = banglish.substr(0, 1);
        $.each(map, function (i, obj) {
            if (obj.Key == token) {
                tmpTokenLength = 1;
            }
        });
    }
    return tmpTokenLength;
};

function ConvertPattern(vowel, consonants) {
    var retVal = "";

    if (consonants.length == 0) {
        retVal = getValue(Vowels, vowel);
        return retVal;
    }

    var consonant = "";
    var tmp = "";
    var ligature = "";
    var pre = "";
    var post = "";
    var conjunct = "";
    var converted = false;

    for (var index = 0; index < consonants.length; index++) {
        tmp = consonants[index];
        if (index > 0 && tmp == "w") {
            consonants[index] = "b";
        }
        consonant += consonants[index];
    }
    ligature = consonant + vowel;

    if (ContainsKey(CVLigatures, ligature))
    {
        retVal = getValue(CVLigatures, ligature);
    }

    if (vowel == "A" || vowel == "aa" || vowel == "I" || vowel == "ee" || vowel == "u" || vowel == "U" || vowel == "oo" || vowel == "Ri") {
        post = getValue(Matras, vowel);
    }
    else if (vowel == "e" || vowel == "i" || vowel == "oi") {
        pre = getValue(Matras, vowel);
    }
    else if (vowel == "o") {
        pre = getValue(Matras, "e");
        post = getValue(Matras, "aa");
    }
    else if (vowel == "ou") {
        pre = getValue(Matras, "e");
        post = getValue(Matras, "O");
    }

    if (ContainsKey(Consonants, consonant)) {
        conjunct = getValue(Consonants, consonant);
        converted = true;
    }
    else if (ContainsKey(Conjuncts, consonant)) {
        conjunct = getValue(Conjuncts, consonant);
        converted = true;
    }

    if (!converted && consonants.length > 0) {
        var phalaa = false;
        var reff = false;

        if (consonants[consonants.length - 1] == "y" || consonants[consonants.length - 1] == "r") {
            phalaa = true;
        }
        if (consonants[0] == "r" || consonants[0] == "`r") {
            reff = true;
        }

        var beginPos = 0;
        var endPos = consonants.length;

        if (reff) { beginPos++; }
        if (phalaa) { endPos--; }
        consonant = "";
        for (var counter = beginPos; counter < endPos; counter++) {
            consonant += consonants[counter];
        }
        if (ContainsKey(Consonants, consonant) || ContainsKey(Conjuncts, consonant)) {
            if (ContainsKey(Consonants, consonant)) {
                conjunct = getValue(Consonants, consonant);
            }
            if (ContainsKey(Conjuncts, consonant)) {
                conjunct = getValue(Conjuncts, consonant);
            }
            converted = true;
            var temp = "";
            if (phalaa) {
                temp = getValue(Matras, consonants[consonants.length - 1]);
                conjunct += temp;
            }
            if (reff) {
                temp = getValue(Matras, "`r");
                conjunct += temp;
            }
        }
    }

    if (!converted) {
        for (var iindex = 0; iindex < consonants.length; iindex++) {
            if (ContainsKey(Consonants, consonants[iindex])) {
                var temp = "";
                if (conjunct == "") {
                    temp = getValue(Consonants, consonants[iindex]);
                    conjunct = temp;
                }
                else {
                    temp = getValue(Marks, "_");
                    conjunct += temp;
                    temp = getValue(Consonants, consonants[iindex]);
                    conjunct += temp;
                }
            }
        }
    }

    return pre + conjunct + post;
};

function clearSyllableComponents() {
    vowelComponent = "";
    consonantComponent = {};
    markComponent = "";
    syllableInRoman = "";
    xliteratedSyllable = "";
    restOfRoman = "";
};

function parseNextSyllable(workArea) {
    var vowel = "";
    var consonants = [];
    var original = "";
    clearSyllableComponents();
//    var tmpStr = "";
//    var str = "";

    retVal = GetTokenLength(Marks, workArea);
    if (retVal != 0) {
        original = workArea.substr(0, retVal);
        workArea = workArea.substr(retVal);
        xliteratedSyllable = getValue(Marks, original);
        syllableInRoman = original;
        markComponent = original;
        restOfRoman = workArea;
        //        $.each(Marks, function (i, obj) {
        //            if (obj.Key == tmpStr) {
        //                str = obj.Value;
        //                //break;
        //            }
        //        });
        //        returnValue += str;
        return;
    }
    else {
        var khandataFound = false;
        while (true) {
            retVal = GetTokenLength(Consonants, workArea);
            if (retVal != 0) {
                original = workArea.substr(0, retVal);
                syllableInRoman += original;
                consonants[consonants.length] = original;
                workArea = workArea.substr(retVal);
                if (original == "`t") {
                    khandataFound = true;
                    break;
                }
            }
            else {
                retVal = GetTokenLength(Auxilieries, workArea);
                if (retVal != 0) {
                    original = workArea.substr(0, retVal);
                    syllableInRoman += original;
                    var val = getValue(Auxilieries, original);
                    //                    $.each(Auxilieries, function (i, obj) {
                    //                        if (obj.Key == original) {
                    //                            val = obj.Value;
                    //                        }
                    //                    });
                    consonants[consonants.length] = val;
                    workArea = workArea.substr(retVal + 1);
                }
                else {
                    break;
                }
            }
        }
        if (!khandataFound) {
            retVal = GetTokenLength(Vowels, workArea);
            if (retVal != 0) {
                original = workArea.substr(0, retVal);
                syllableInRoman += original;
                vowel = original;
                workArea = workArea.substr(retVal);
            }
        }
        if (vowel.length == 0 && consonants.length == 0) {
            workArea = workArea.substr(1);
        }
        else {
            vowelComponent = vowel;
            consonantComponent = consonants;
            xliteratedSyllable = ConvertPattern(vowel, consonants);
        }
        restOfRoman = workArea;
    }
};

function Xliterate(banglish) {
    if (banglish == "") {
        return "";
    }
    var returnValue = "";
    var workArea = banglish;
    for (; workArea.length > 0 ; workArea = restOfRoman) {
        parseNextSyllable(workArea);
        returnValue += xliteratedSyllable;
    }
    return returnValue;
};

function takeCareOfBlanks(sNormal) {
    var i = sNormal.search(" [ ]+");
    while (-1 != i) {
        var sWithFirstBlank = sNormal.substr(0, i + 1);
        var sOnlyBlank = "";
        var sRest = "";
        sNormal = sNormal.substr(i + 1);
        i = sNormal.search("[^ ]");
        if (-1 != i) {
            sOnlyBlank = sNormal.substr(0, i);
            sOnlyBlank = sOnlyBlank.replace(/ /g, "&nbsp;");
            sRest = sNormal.substr(i);
            sNormal = sWithFirstBlank + sOnlyBlank + sRest;
        }
        else {
            sOnlyBlank = sNormal
            sOnlyBlank = sOnlyBlank.replace(/ /g, "&nbsp;");
            sNormal = sWithFirstBlank + sOnlyBlank;
        }
        i = sNormal.search(" [ ]+");
    }
    return sNormal;
};

function Convert(raw) {
    var sPlainText = raw;
    var iNextAt = -1;
    var sWillEndWith = "B";
    var sDelimiter = "";
    var sExtract = "";
    var sCipher = "";

    sPlainText = sPlainText.replace(/\n\r?/g, "~");
    aLines = sPlainText.split("~");
    for (i = 0; i < aLines.length; i++) {
        sPlainText = aLines[i];
        if ("" != sCipher)
            sCipher = sCipher + "<br/>";
        while ("" != sPlainText) {
            iNextAt = sPlainText.search("[<>]");
            if (iNextAt == -1) {
                sExtract = sPlainText;
                sDelimiter = "";
                sPlainText = "";
            }
            else {
                sExtract = sPlainText.substr(0, iNextAt);
                sDelimiter = sPlainText.charAt(iNextAt);
                sPlainText = sPlainText.substr(iNextAt + 1);
            }

            if (sWillEndWith == "E") {
                sCipher = sCipher + '<font face="\"Lucida Sans Unicode\", \"Lucida Grande\", Sans-Serif" size=2>' + takeCareOfBlanks(sExtract) + "</font>";
            }
            else {
                sCipher = sCipher + '<font face="BanglaFontNormal" size=3>' + takeCareOfBlanks(Xliterate(sExtract)) + "</font>";
            }

            if (sDelimiter == "<") {
                if (sWillEndWith == "B") {
                    sWillEndWith = "E";
                    sDelimiter = "";
                }
                else {
                    sDelimiter = "&lt;"
                }
            }
            else if (sDelimiter == ">") {
                if (sWillEndWith == "E") {
                    sWillEndWith = "B";
                    sDelimiter = "";
                }
                else {
                    sDelimiter = "&gt;"
                }
            }
            sCipher = sCipher + sDelimiter;
        }
    }
    return sCipher;
};

function ConvertWithStyle(raw, engStyle, bngStyle) {
    var sPlainText = raw;
    var iNextAt = -1;
    var sWillEndWith = "B";
    var sDelimiter = "";
    var sExtract = "";
    var sCipher = "";

    sPlainText = sPlainText.replace(/\n\r?/g, "~");
    aLines = sPlainText.split("~");
    for (i = 0; i < aLines.length; i++) {
        sPlainText = aLines[i];
        if ("" != sCipher)
            sCipher = sCipher + "<br/>";
        while ("" != sPlainText) {
            iNextAt = sPlainText.search("[<>]");
            if (iNextAt == -1) {
                sExtract = sPlainText;
                sDelimiter = "";
                sPlainText = "";
            }
            else {
                sExtract = sPlainText.substr(0, iNextAt);
                sDelimiter = sPlainText.charAt(iNextAt);
                sPlainText = sPlainText.substr(iNextAt + 1);
            }

            if (sWillEndWith == "E") {
                sCipher = sCipher + '<span class="' + engStyle + '">' + takeCareOfBlanks(sExtract) + "</span>";
            }
            else {
                sCipher = sCipher + '<span class="' + bngStyle + '">' + takeCareOfBlanks(Xliterate(sExtract)) + "</span>";
            }

            if (sDelimiter == "<") {
                if (sWillEndWith == "B") {
                    sWillEndWith = "E";
                    sDelimiter = "";
                }
                else {
                    sDelimiter = "&lt;"
                }
            }
            else if (sDelimiter == ">") {
                if (sWillEndWith == "E") {
                    sWillEndWith = "B";
                    sDelimiter = "";
                }
                else {
                    sDelimiter = "&gt;"
                }
            }
            sCipher = sCipher + sDelimiter;
        }
    }
    return sCipher;
};
