/*global window false */

var UNIa = []; // array of unicode chars in alphabetical order - important for not replacing part of a combination, I think...
var brat = []; // the nefarious braille array, until something better comes along
var ITMa = []; // the ITM characters

// all arrays are synched, so you just add three entries on to the end if you want a new entry, and delete all three entries to get rid of one set.

UNIa.push('');
brat.push('⠼');
ITMa.push('Á');

UNIa.push('');
brat.push('⡕');
ITMa.push('Ú');

UNIa.push('');
brat.push('⡈');
ITMa.push('Í');

UNIa.push('');
brat.push('⠷');
ITMa.push('¦');

UNIa.push('');
brat.push('⠤');
ITMa.push('¼');

UNIa.push('');
brat.push('⡄');
ITMa.push('É');

UNIa.push('×');
brat.push('⡤');
ITMa.push('é');

UNIa.push('⏔');
brat.push('⡃');
ITMa.push('È');

UNIa.push('⏓');
brat.push('⡀');
ITMa.push('Å');

UNIa.push('⏒');
brat.push('⡓');
ITMa.push('Ø');

UNIa.push('⏑');
brat.push('⡖');
ITMa.push('Û');

UNIa.push('≠');
brat.push('⡂');
ITMa.push('Ç');

UNIa.push('≈');
brat.push('⡍');
ITMa.push('Ò');

UNIa.push('√');
brat.push('⡌');
ITMa.push('Ñ');

UNIa.push('·');
brat.push('⡅');
ITMa.push('Ê');

UNIa.push('”');
brat.push('⠁');
ITMa.push('û');

UNIa.push('“');
brat.push('⡚');
ITMa.push('ß');

UNIa.push('’');
brat.push('⠒');
ITMa.push('’');

UNIa.push('‘');
brat.push('⠑');
ITMa.push('‘');

UNIa.push('—');
brat.push('⡙');
ITMa.push('Þ');

UNIa.push('–');
brat.push('⡘');
ITMa.push('Ý');

UNIa.push('−');
brat.push('⡗');
ITMa.push('Ü');

UNIa.push('ẖ');
brat.push('⡲');
ITMa.push('÷');

UNIa.push('ṭ');
brat.push('⡬');
ITMa.push('ñ');

UNIa.push('Ṭ');
brat.push('⡭');
ITMa.push('ò');

UNIa.push('ṣ');
brat.push('⡴');
ITMa.push('ù');

UNIa.push('Ṣ');
brat.push('⡵');
ITMa.push('ú');

UNIa.push('ṛ');
brat.push('⡢');
ITMa.push('ç');

UNIa.push('ṇ');
brat.push('⡰');
ITMa.push('õ');

UNIa.push('ṅ');
brat.push('⡪');
ITMa.push('ï');

UNIa.push('ṃ');
brat.push('⠥');
ITMa.push('§');

UNIa.push('ṁ');
brat.push('⠂');
ITMa.push('ü');

UNIa.push('ḷ');
brat.push('⡦');
ITMa.push('ë');

UNIa.push('ḫ');
brat.push('⠢');
ITMa.push('¤');

UNIa.push('ḥ');
brat.push('⠄');
ITMa.push('þ');

UNIa.push('ḡ');
brat.push('⡇');
ITMa.push('Ì');

UNIa.push('ḍ');
brat.push('⡮');
ITMa.push('ó');

UNIa.push('Ḍ');
brat.push('⡯');
ITMa.push('ô');

UNIa.push('');
brat.push('⡱');
ITMa.push('ö');

UNIa.push('');
brat.push('⠃');
ITMa.push('ý');

UNIa.push('́́');
brat.push('⡫');
ITMa.push('ð');

UNIa.push('ǵ');
brat.push('⡔');
ITMa.push('Ù');

UNIa.push('ǣ');
brat.push('⠙');
ITMa.push('™');

UNIa.push('Ǣ');
brat.push('⡆');
ITMa.push('Ë');

UNIa.push('ŭ');
brat.push('⠛');
ITMa.push('›');

UNIa.push('ĭ');
brat.push('⠜');
ITMa.push('œ');

UNIa.push('¦');
brat.push('⡋');
ITMa.push('Ð');

UNIa.push('ū');
brat.push('⡠');
ITMa.push('å');

UNIa.push('Ū');
brat.push('⡡');
ITMa.push('æ');

UNIa.push('ś');
brat.push('⡣');
ITMa.push('è');

UNIa.push('Ś');
brat.push('⡳');
ITMa.push('ø');

UNIa.push('ŏ');
brat.push('⡑');
ITMa.push('Ö');

UNIa.push('ō');
brat.push('⠵');
ITMa.push('º');

UNIa.push('Ō');
brat.push('⠿');
ITMa.push('Ä');

UNIa.push('ī');
brat.push('⡞');
ITMa.push('ã');

UNIa.push('Ī');
brat.push('⡟');
ITMa.push('ä');

UNIa.push('ĕ');
brat.push('⡐');
ITMa.push('Õ');

UNIa.push('ē');
brat.push('⠴');
ITMa.push('¹');

UNIa.push('Ē');
brat.push('⠾');
ITMa.push('Ã');

UNIa.push('ă');
brat.push('⡊');
ITMa.push('Ï');

UNIa.push('ā');
brat.push('⡛');
ITMa.push('à');

UNIa.push('Ā');
brat.push('⡝');
ITMa.push('â');

UNIa.push('ü');
brat.push('⠌');
ITMa.push('ˆ');

UNIa.push('ú');
brat.push('⠡');
ITMa.push('£');

UNIa.push('ù');
brat.push('⠖');
ITMa.push('–');

UNIa.push('ö');
brat.push('⠐');
ITMa.push('Œ');

UNIa.push('ô');
brat.push('⠓');
ITMa.push('“');

UNIa.push('ó');
brat.push('⠠');
ITMa.push('¢');

UNIa.push('ò');
brat.push('⠕');
ITMa.push('•');

UNIa.push('ñ');
brat.push('⠅');
ITMa.push('ÿ');

UNIa.push('ï');
brat.push('⠏');
ITMa.push('‹');

UNIa.push('î');
brat.push('⠔');
ITMa.push('”');

UNIa.push('í');
brat.push('⠟');
ITMa.push('¡');

UNIa.push('ë');
brat.push('⠍');
ITMa.push('‰');

UNIa.push('é');
brat.push('⠆');
ITMa.push('‚');

UNIa.push('è');
brat.push('⠎');
ITMa.push('Š');

UNIa.push('ç');
brat.push('⠋');
ITMa.push('‡');

UNIa.push('æ');
brat.push('⠘');
ITMa.push('˜');

UNIa.push('ä');
brat.push('⠈');
ITMa.push('„');

UNIa.push('â');
brat.push('⠊');
ITMa.push('†');

UNIa.push('á');
brat.push('⠇');
ITMa.push('ƒ');

UNIa.push('à');
brat.push('⠉');
ITMa.push('…');

UNIa.push('ß');
brat.push('⡜');
ITMa.push('á');

UNIa.push('Ñ');
brat.push('⠣');
ITMa.push('¥');

UNIa.push('Æ');
brat.push('⠚');
ITMa.push('š');

UNIa.push('§');
brat.push('⡁');
ITMa.push('Æ');

UNIa.push('');
brat.push('⠨');
ITMa.push('ª');

UNIa.push('');
brat.push('⠸');
ITMa.push('½');

UNIa.push('');
brat.push('⠹');
ITMa.push('¾');

UNIa.push('');
brat.push('⠽');
ITMa.push('Â');

UNIa.push('s̄');
brat.push('⠩');
ITMa.push('«');

UNIa.push('');
brat.push('⡨');
ITMa.push('í');

UNIa.push('');
brat.push('⠰');
ITMa.push('³');

UNIa.push('');
brat.push('⡒');
ITMa.push('×');

UNIa.push('');
brat.push('⠫');
ITMa.push('®');

UNIa.push('');
brat.push('⠮');
ITMa.push('±');

UNIa.push('');
brat.push('⠯');
ITMa.push('²');

UNIa.push('');
brat.push('⡧');
ITMa.push('ì');

UNIa.push('ṛ');
brat.push('⡏');
ITMa.push('Ô');

UNIa.push('');
brat.push('⠻');
ITMa.push('À');

UNIa.push('n̆');
brat.push('⡩');
ITMa.push('î');

//UNIa.push('m̆̇');
//brat.push('⠪');
//ITMa.push('­');

UNIa.push('');
brat.push('⠱');
ITMa.push('´');

UNIa.push('');
brat.push('⠭');
ITMa.push('°');

UNIa.push('');
brat.push('⠗');
ITMa.push('—');

UNIa.push('');
brat.push('⡎');
ITMa.push('Ó');

UNIa.push('');
brat.push('⠬');
ITMa.push('¯');

UNIa.push('');
brat.push('⠝');
ITMa.push('ž');

UNIa.push('°');
brat.push('⠞');
ITMa.push('Ÿ');

UNIa.push('');
brat.push('⠧');
ITMa.push('©');

UNIa.push('');
brat.push('⡥');
ITMa.push('ê');

UNIa.push('');
brat.push('⠳');
ITMa.push('¸');

UNIa.push('');
brat.push('⡉');
ITMa.push('Î');

UNIa.push('');
brat.push('⠺');
ITMa.push('¿');

UNIa.push('');
brat.push('⠦');
ITMa.push('¨');

UNIa.push('');
brat.push('⠲');
ITMa.push('µ');

UNIa.push('Ṛ');
brat.push('⠶');
ITMa.push('»');

var StranLink_Obj=document.getElementById("StranLink");
var sck;

function createCookie(name,value,days) {
    var expires;
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires="+date.toGMTString();
    }
    else {
        expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)===' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
}

function ITM(cc) { // if we're switching from ITM
    var Ui,Bi,Ii;
    for (var i=0;i<brat.length;i++) { // convert all to braille
        Ii = new RegExp(ITMa[i],"g");
        Bi = brat[i];
        cc = cc.replace(Ii,Bi);
    }
    for (i=0;i<brat.length;i++) { // convert braille to UNI
        Ui = UNIa[i];
        Bi = new RegExp(brat[i],"g");
        cc = cc.replace(Bi,Ui);
    }
    return cc;
}

function Unicode(cc) { // if we're switching from Unicode
    var Ui,Bi,Ii;
    for (var i=0;i<brat.length;i++) { // convert all to braille
        Ui = new RegExp(UNIa[i],"g");
        Bi = brat[i];
        cc = cc.replace(Ui,Bi);
    }
    for (i=0;i<brat.length;i++) { // convert braille to ITM
        Ii = ITMa[i];
        Bi = new RegExp(brat[i],"g");
        cc = cc.replace(Bi,Ii);
    }
    return cc;
}

function StranText(txt)
{
    if (txt=="" || txt===null) {
        return "";
    }
    var output=sck=="ITM"?Unicode(txt):ITM(txt);
    return output;
}

function StranBody() // my preferred method of conversion... quick.
{
    var OO = document.body.innerHTML; // get the whole body, seems easiest
    sck = readCookie("ABT-style"); // get the single cookie

    eval('document.body.innerHTML = '+sck+'(OO)'); // switch text
    sck=sck=="ITM"?"Unicode":"ITM"; // determine new cookie name

    setActiveStyleSheet(sck);
    document.getElementById("StranLink").innerHTML=sck; // Button Text
    document.getElementById("StranLink").title=sck=="ITM"?"Set the Font Style to Unicode":"Set the Font Style to ITM"; // insert opposite
    createCookie("ABT-style", sck, 36500); // 100 year cookie
}


function StranBodyx(fobj) // the safer way, but slower.
{
    var obj;
    if (typeof(fobj)=="object") {
        obj=fobj.childNodes;    // if we're dealing with a childNode already
    }
    else // this is the first iteration, no data yet
    {
        sck = readCookie("ABT-style"); // get the single cookie
        if (sck == "ITM") // already at ITM
        {
            sck = "Unicode"; // determine new cookie name
            setActiveStyleSheet('Unicode');
        }
        else if (sck == "Unicode")
        {
            sck = "ITM"; // determine new cookie name
            setActiveStyleSheet('ITM');
        }
        StranLink_Obj.innerHTML=sck; // new setting
        StranLink_Obj.title=sck=="ITM"?"Set the Font Style to Unicode":"Set the Font Style to ITM"; // insert opposite
        createCookie("ABT-style", sck, 36500); // 100 year cookie
        obj=document.body.childNodes;
    }

    if (!obj) {
        return;
    }
    for (var i=0;i<obj.length;i++)
    {
        var OO=obj.item(i);

        // if("||BR|HR|EMBED|OBJECT|".indexOf("|"+OO.tagName+"|")>0||OO==StranLink_Obj){continue;} // comment out just this line to remove safety
        if (OO.title!=""&&OO.title) {
            OO.title=StranText(OO.title);
        }
        if (OO.alt!=""&&OO.alt) {
            OO.alt=StranText(OO.alt);
        }
        if (OO.tagName=="INPUT"&&OO.value!=""&&OO.type!="text"&&OO.type!="hidden") {
            OO.value=StranText(OO.value);
        }
        if (OO.nodeType==3) {
            OO.data=StranText(OO.data);
        }
        else {
            StranBody(OO);
        }
    }
}

// get all tags of a class

getclass = function(cl) {
    var retnode = [];
    var myclass = new RegExp('\\b'+cl+'\\b');
    var elem = document.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) {
            retnode.push(elem[i]);
        }
    }
    return retnode;
};


window.onload = function(e) {
    sck=readCookie("ABT-style");
    if (!sck) {
        createCookie("ABT-style", "ITM", 36500);
        sck=readCookie("ABT-style");
    }

    if (sck=="undefined") {
        createCookie("ABT-style", "ITM", 36500);
        sck=readCookie("ABT-style");
    }

	   if (StranLink_Obj)
    {
        StranLink_Obj.href="#StranLink";
        StranLink_Obj.name="StranLink";
        StranLink_Obj.setAttribute('onclick','StranBody();');
        StranLink_Obj.title=sck=="ITM"?"Set the Font Style to Unicode":"Set the Font Style to ITM";
        StranLink_Obj.innerHTML=sck;
    }

    var title = sck ? sck : getPreferredStyleSheet();
    setActiveStyleSheet(title);

    if (sck == "Unicode") {
        createCookie("ABT-style", "ITM", 36500); // fudge it back to ITM and then switch
        StranBody();
    }
    if (sck == "null") {
        createCookie("ABT-style", "ITM", 36500); // fudge it back to ITM and then switch
        StranBody();
    }
    if (sck == "English") {
        createCookie("ABT-style", "ITM", 36500); // fudge it back to ITM and then switch
        StranBody();
    }
    if (sck == "Chinese") {
        createCookie("ABT-style", "ITM", 36500); // fudge it back to ITM and then switch
        StranBody();
    }
	
window.onunload = function(e) {
    createCookie("ABT-style", sck, 36500); // I thought to keep this simple, always getting the value from var sck
};



// add javascript to TT class

    var TT = getclass('TT');
    for (i = 0; i < TT.length; i++) {
        TT[i].setAttribute("onMouseover","this.childNodes[0].style.display='block'");
        TT[i].setAttribute("onMouseout","if (!this.set) {this.childNodes[0].style.display='none';}");
        TT[i].setAttribute("onClick","if (this.set) { this.set = null; } else {this.set = 1;}");
    }
};

function setActiveStyleSheet(title) {
    var i, a;
    for (i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
            a.disabled = true;
            if (a.getAttribute("title") == title) {
                a.disabled = false;
            }
        }
    }
}

function getActiveStyleSheet() {
    var i, a;
    for (i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) {
            return a.getAttribute("title");
        }
    }
    return null;
}

function getPreferredStyleSheet() {
    var i, a;
    for (i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) {
            return a.getAttribute("title");
        }
    }
    return null;
}

