function createElementHack (e) {
    if (navigator.appName == "Microsoft Internet Explorer")
        return document.createElement(e);
    else
        return document.createElementNS("http://www.w3.org/1999/xhtml", e);
}


function loadExample () {
    var es = "Утром рано подошел,\nк самовару подошел,\nдядя Петя подошел.\n\nДядя Петя говорит:\n«Дай-ка выпью, — говорит, выпью чаю», — говорит.";
    var textArea = document.getElementById("textArea");
    textArea.value = es;
    transliterate ();
}

var ASCII = 0;
var DIACRITICS = 1;
var mode = 0;

function asciiMode () {
    mode = ASCII;
}

function diacriticMode () {
    mode = DIACRITICS;
}

/* ASCII */
function asciiTable () {
    var tbl =
        ["а", "a",
         "б", "b",
         "в", "v",
         "г", "g",
         "д", "d",
         "е", "e",
         "ё", "jo",
         "ж", "zh",
         "з", "z",
         "и", "i",
         "й", "j",
         "к", "k",
         "л", "l",
         "м", "m",
         "н", "n",
         "о", "o",
         "п", "p",
         "р", "r",
         "с", "s",
         "т", "t",
         "у", "u",
         "ф", "f",
         "х", "kh",
         "ц", "c",
         "ч", "ch",
         "ш", "sh",
         "щ", "shh",
         "ъ", "\"",
         // "ъ", "'",
         "ы", "y",
         "ь", "'",
         // "ь", "j",
         "э", "eh",
         "ю", "yu",
         "я", "ya"];
    return tbl;
}

/* With diacritics */
function diacriticsTable () {
    var tbl =
        ["а", "a",
         "б", "b",
         "в", "v",
         "г", "g",
         "д", "d",
         "е", "e",
         "ё", "ë",
         "ж", "ž",
         "з", "z",
         "и", "i",
         "й", "j",
         "к", "k",
         "л", "l",
         "м", "m",
         "н", "n",
         "о", "o",
         "п", "p",
         "р", "r",
         "с", "s",
         "т", "t",
         "у", "u",
         "ф", "f",
         "х", "h",
         "ц", "c",
         "ч", "č",
         "ш", "š",
         "щ", "ŝ",
         // "ъ", "\"",
         "ъ", "’",
         "ы", "y",
         // "ь", "'",
         "ь", "j",
         "э", "è",
         "ю", "û",
         "я", "â"];
    return tbl;
}

function symTrans (s) {

    var tbl;

    if (mode == ASCII)
        tbl = asciiTable ();
    else if (mode == DIACRITICS)
        tbl = diacriticsTable ();

    for (var i = 0; i < tbl.length; i+=2) {
        if (s == tbl[i])
            return tbl[i+1];
        else if (s == tbl[i].toUpperCase())
            return tbl[i+1].toUpperCase();
    }

    return s;
}

function transliterate () {
    var textArea = document.getElementById("textArea");
    var translitResult = document.getElementById("transliterationResult");

    while (translitResult.hasChildNodes())
        translitResult.removeChild(translitResult.childNodes[0]);

    for (var i = 0; i < textArea.value.length; i++) {
        var s = textArea.value.substr(i,1);
        if (s == "\n")
            translitResult.appendChild(createElementHack("br"));
        else
            translitResult.appendChild(document.createTextNode(symTrans(s)));
    }
}

function init () {
    var JSNeeded = document.getElementById("JSNeeded");

    JSNeeded.style.display = "none";
    JSNeeded.style.speak = "none";

    var transForm = createElementHack("form");
    var transFieldset = createElementHack("fieldset");

    var textArea = createElementHack("textarea");
    textArea.setAttribute("rows", "10");
    textArea.setAttribute("cols", "80");
    textArea.id = "textArea";

    var btn = createElementHack("input");
    btn.setAttribute("type", "button");
    btn.setAttribute("value", "Transliterate");
    btn.setAttribute("onclick", "transliterate()");

    var resetBtn = createElementHack("input");
    resetBtn.setAttribute("type", "reset");
    resetBtn.setAttribute("value", "Reset Form");

    var asciiInput = createElementHack("input");
    asciiInput.setAttribute("type", "radio");
    asciiInput.setAttribute("name", "mode");
    asciiInput.setAttribute("checked", "checked");
    asciiInput.setAttribute("value", "");
    asciiInput.id = "ascii";
    asciiInput.setAttribute("onclick", "asciiMode()");

    var asciiLabel = createElementHack("label");
    asciiLabel.setAttribute("for", "ascii");
    asciiLabel.setAttribute("title", "ASCII");
    asciiLabel.setAttribute("onclick", "asciiMode()");
    asciiLabel.appendChild(document.createTextNode("ASCII"));

    var diacriticsInput = createElementHack("input");
    diacriticsInput.setAttribute("type", "radio");
    diacriticsInput.setAttribute("name", "mode");
    diacriticsInput.setAttribute("value", "");
    diacriticsInput.id = "diacritics";
    diacriticsInput.setAttribute("onclick", "diacriticMode()");

    var diacriticsLabel = createElementHack("label");
    diacriticsLabel.setAttribute("for", "diacritics");
    diacriticsLabel.setAttribute("title", "With diacritics");
    diacriticsLabel.setAttribute("onclick", "diacriticMode()");
    diacriticsLabel.appendChild(document.createTextNode("With diacritics"));

    var translitResult = createElementHack("p");
    translitResult.id = "transliterationResult";

    var iHdr = createElementHack("h2");
    iHdr.appendChild(document.createTextNode("Input"));
    var oHdr = createElementHack("h2");
    oHdr.appendChild(document.createTextNode("Output"));

    transFieldset.appendChild(textArea);
    transFieldset.appendChild(createElementHack("br"));
    transFieldset.appendChild(asciiInput);
    transFieldset.appendChild(asciiLabel);
    transFieldset.appendChild(diacriticsInput);
    transFieldset.appendChild(diacriticsLabel);
    transFieldset.appendChild(createElementHack("br"));
    transFieldset.appendChild(btn);
    transFieldset.appendChild(document.createTextNode(" "));
    transFieldset.appendChild(resetBtn);

    transForm.appendChild(transFieldset);

    (JSNeeded.parentNode).insertBefore(translitResult, JSNeeded);
    (JSNeeded.parentNode).insertBefore(transForm, translitResult);
    // (JSNeeded.parentNode).insertBefore(iHdr, transForm);
    (JSNeeded.parentNode).insertBefore(oHdr, translitResult);

    // loadExample ();
}

