      function AtStart(i, text) {
        return ((i == 0) || (text.charAt(i-1) == ' '));
      }

      function PrevChar(i, text) {
        if (AtStart(i, text)) {
          return "";
        }
        return text.charAt(i-1);
      }

      function IsVowel(c) {
        return c==cap_a || c==cap_ye || c==cap_ee || c==cap_o || c==cap_u ||
               c==cap_yeru || c==cap_e || c==cap_yu || c==cap_ya;
      }

      function DisplayEnglish(encoding, text) {

//      encoding determines how the character names (cap_a, cap_be etc) are encoded
//        encoding 0 = 16-bit unicode
//        encoding 1 = &# notation for unicode

        var result = "";
        var ampersandEncoded = (text.substr(0, 2) == "&#"); // determines how the input is encoded

        for (var i=0; i<text.length; i++) {
          var lowerCase = false;
          var charCode;
          var russianLetter;

          // obtain the character code

          if (ampersandEncoded) {
            charCodeStart = text.indexOf("&#", i);
            charCodeStart += 2;
            charCodeEnd = text.indexOf(";", i);
            i = charCodeEnd;
            charCode = text.substr(charCodeStart, charCodeEnd-charCodeStart);
          } else {
            charCode = text.charCodeAt(i);
          }

          // convert to lower case

          if (charCode == 0x0451) { // lower case YO
            lowerCase = true;
            charCode = 0x0401;
          } else if (charCode >= 0x0430 && charCode <= 0x044F) {
            lowerCase = true;
            charCode -= 0x20;
          }

          // put into ampersand notation if requested (encoding of 1)

          russianLetter = charCode;
          if (encoding == 1) {
            russianLetter = "&#" + russianLetter + ";";
          } else {
            russianLetter = String.fromCharCode(charCode);
          }

          var englishLetter = '';
          if (russianLetter == cap_a) {
            englishLetter = 'A';
          } else if (russianLetter == cap_be) {
            englishLetter = 'B';
          } else if (russianLetter == cap_ve) {
            englishLetter = 'V';
          } else if (russianLetter == cap_ge) {
            englishLetter = 'G';
          } else if (russianLetter == cap_de) {
            englishLetter = 'D';
          } else if (russianLetter == cap_ye) {
            if (AtStart(i, text) || IsVowel(PrevChar(i, text)) ||
                PrevChar(i, text) == cap_hard || PrevChar(i, text) == cap_soft) {
              englishLetter = 'Ye';
            } else {
              englishLetter = 'E';
            }
          } else if (russianLetter == cap_zhe) {
            englishLetter = 'Zh';
          } else if (russianLetter == cap_ze) {
            englishLetter = 'Z';
          } else if (russianLetter == cap_ee) {
            englishLetter = 'I';
          } else if (russianLetter == cap_i) {
            englishLetter = 'Y'; // J ???
          } else if (russianLetter == cap_ka) {
            englishLetter = 'K';
          } else if (russianLetter == cap_el) {
            englishLetter = 'L';
          } else if (russianLetter == cap_em) {
            englishLetter = 'M';
          } else if (russianLetter == cap_en) {
            englishLetter = 'N';
          } else if (russianLetter == cap_o) {
            englishLetter = 'O';
          } else if (russianLetter == cap_pe) {
            englishLetter = 'P';
          } else if (russianLetter == cap_er) {
            englishLetter = 'R';
          } else if (russianLetter == cap_es) {
            englishLetter = 'S';
          } else if (russianLetter == cap_te) {
            englishLetter = 'T';
          } else if (russianLetter == cap_u) {
            englishLetter = 'U';
          } else if (russianLetter == cap_ef) {
            englishLetter = 'F';
          } else if (russianLetter == cap_kha) {
            englishLetter = 'Kh';
          } else if (russianLetter == cap_tse) {
            englishLetter = 'Ts';
          } else if (russianLetter == cap_che) {
            englishLetter = 'Ch';
          } else if (russianLetter == cap_sha) {
            englishLetter = 'Sh';
          } else if (russianLetter == cap_shcha) {
            englishLetter = 'Shch';
          } else if (russianLetter == cap_soft) {
            englishLetter = "'";
          } else if (russianLetter == cap_yeru) {
            englishLetter = 'Y';
          } else if (russianLetter == cap_hard) {
            englishLetter = '"';
          } else if (russianLetter == cap_e) {
            englishLetter = 'E';
          } else if (russianLetter == cap_yu) {
            englishLetter = 'Yu';
          } else if (russianLetter == cap_ya) {
            englishLetter = 'Ya';
          } else if (russianLetter == cap_yo) {
            englishLetter = 'Yo';
          } else if (russianLetter == BLANK) {
            englishLetter = ' ';
          }
          if (lowerCase) {
            englishLetter = englishLetter.toLowerCase();
          }
          result += englishLetter;
        }
        return result;
      }

