        function playMouseOver() {
            playOrOpenSound('../bopomofo/sounds/thinbell.au');
        }


        function symbolClicked(num) {
            var numstr = '' + num;
            if (numstr.length == 1) {
                numstr = '0' + num;
            }
            playOrOpenSound('../bopomofo/sounds/' + numstr + '.au');
        }

        function getSymbolNameByNum(num) {
            switch(num) {
            case 0:
                return "buh";
            case 1:
                return "puh";
            case 2:
                return "muh";
            case 3:
                return "fuh";
            case 4:
                return "duh";
            case 5:
                return "tuh";
            case 6:
                return "nuh";
            case 7:
                return "luh";
            case 8:
                return "guh";
            case 9:
                return "kuh";
            case 10:
                return "huh";
            case 11:
                return "jee";
            case 12:
                return "chee";
            case 13:
                return "shee";
            case 14:
                return "jzer";
            case 15:
                return "chzer";
            case 16:
                return "shzer";
            case 17:
                return "zhe";
            case 18:
                return "dze";
            case 19:
                return "tze";
            case 20:
                return "sze";
            case 21:
                return "ee";
            case 22:
                return "oo";
            case 23:
                return "euu";
            case 24:
                return "ah";
            case 25:
                return "oh";
            case 26:
                return "uh";
            case 27:
                return "ey";
            case 28:
                return "ay";
            case 29:
                return "eh";
            case 30:
                return "aow";
            case 31:
                return "owe";
            case 32:
                return "ahn";
            case 33:
                return "uhn";
            case 34:
                return "ang";
            case 35:
                return "ong";
            case 36:
                return "ur";
            default:
                return "n/a";
            };
        }

        function bpmf2uni(num) {
            if (num < 21) {
            } else if (num >= 21 && num <= 23) {
                num += 13;
            } else if (num <= 36) {
                num -= 3;
            }
            return num;
        }

        function uni2bpmf(num) {
            if (num >= 34 && num <= 36) {
                return num - 13;
            } else if (num >= 21 && num <= 33) {
                return num + 3;
            } else {
                return num;
            }
        }



        function writeSymbol(bpmfnum) {
            document.write('<a href="#" style="text-decoration:none"');
            document.write('   onclick="symbolClicked(' + bpmfnum + '); return false;"');
            document.write('>');
            document.write('&#' + (12549 + bpmf2uni(bpmfnum)) + ';');
            document.write('</a>');
        }


        /*
         * Returns the number of the bopomofo
         * in UNICODE ordering.
         */
        function getNumByPinyin(letter) {
            letter = letter.toLowerCase();
            if (letter == 'b') {
                return 0;
            } else if (letter == 'p') {
                return 1;
            } else if (letter == 'm') {
                return 2;
            } else if (letter == 'f') {
                return 3;
            } else if (letter == 'd') {
                return 4;
            } else if (letter == 't') {
                return 5;
            } else if (letter == 'n') {
                return 6;
            } else if (letter == 'l') {
                return 7;
            } else if (letter == 'g') {
                return 8;
            } else if (letter == 'k') {
                return 9;
            } else if (letter == 'h') {
                return 10;
            } else if (letter == 'j') {
                return 11;
            } else if (letter == 'q') {
                return 12;
            } else if (letter == 'x') {
                return 13;
            } else if (letter == 'z') {
                //return 14;
                return 18;
            } else if (letter == 'c') {
                //return 15;
                return 19;
            } else if (letter == 's') {
                //return 16;
                return 20;
            } else if (letter == 'zh') {
                //return 17;
                return 14;
            } else if (letter == 'ch') {
                //return 18;
                return 15;
            } else if (letter == 'sh') {
                //return 19;
                return 16;
            } else if (letter == 'r') {
                //return 20;
                return 17;

            } else if (letter == 'a') {
                return 21;
            } else if (letter == 'o') {
                return 22
            } else if (letter == 'e') {
                return 23;
            } else if (letter == 'i') {
                return 24;

            } else if (letter == 'y') {
                return 34;
            } else if (letter == 'u') {
                return 35;
            } else if (letter == 'ü') {
                return 36;


            } else if (letter == 'ai') {
                return 25;
            } else if (letter == 'ei') {
                return 26;
            } else if (letter == 'ao') {
                return 27;
            } else if (letter == 'ou') {
                return 28;
            } else if (letter == 'an') {
                return 29;
            } else if (letter == 'en') {
                return 30;
            } else if (letter == 'ang') {
                return 31;
            } else if (letter == 'eng') {
                return 32;
            } else if (letter == 'er') {
                return 33;
            } else {
                return -1;
            }
        }


        function writeSymbolForPinyin(letter) {
            var uninum = getNumByPinyin(letter);
            var num = -1;
            if (uninum >= 0) {
                num = uni2bpmf(uninum);
            }
            if (num >= 0) {
                writeSymbol(num);
            } else {
                document.write('---');
            }
        }
