var maxKeyLength = 64;
var cookieName = "SITELAN";
var siteLanguage = getLanguageCodeCookie();
var translator = new Translator();
translator.setCallback((siteLanguage == "EN" ? translateEnglish : translateFrench));
window.onload = translatePage;

function countTags(n, out_array, out_elementArray) {                         // n is a Node 
    var numtags = 0;                            // Initialize the tag counter
    
    /*if (n.nodeType == 1 && n.tagName != "SCRIPT" ) {
        // Check if n is an Element
        if (n.innerHTML.length > 0) {
            if (n.innerHTML.indexOf("<") == -1) {
                if (n.innerHTML.indexOf(".fb_") == -1) {

                    var filtered = n.innerHTML.replace("\n", "");
                    filtered = filtered.replace(/^\s+|\s+$/g, "");   // trim
                    if (filtered.length > 0) {
                        out_array[out_array.length] = filtered;
                        numtags++;                              // Increment the counter if so
                    }
                }
            }
        }
    }*/

    if (n.nodeType == 3) {
        if ((n.nodeValue.indexOf(";") == -1) && (n.nodeValue.indexOf("\'") == -1)) {
            var filtered = n.nodeValue.replace("\n", "");
            filtered = filtered.replace(/^\s+|\s+$/g, "");   // trim
            if ((filtered.length > 1) && (filtered.indexOf("$") != 0)) {
                out_array[out_array.length] = filtered;
                out_elementArray[out_elementArray.length] = n;
                numtags++;                              // Increment the counter if so
            }
        }
    }
    
    var children = n.childNodes;                // Now get all children of n
    for (var i = 0; i < children.length; i++) {    // Loop through the children
        numtags += countTags(children[i], out_array, out_elementArray);      // Recurse on each one
    }
    return numtags;                             // Return the total number of tags
}

function translatePage() {

    if (siteLanguage == "EN")
        return; // do not translate when user selects English.

/*
    var arrayTags = new Array();
    var elementArray = new Array();
    
    var bla = "Translation results:\n\n";
    bla += document.getElementsByClassName("akfooter").length;
    bla += " anchors\n";
    bla += " all elems: " + countTags(document, arrayTags, elementArray);
    bla += " \n";

    for (var i = 0; i < arrayTags.length; i++) {
        bla += arrayTags[i];
        bla += "\n";
    }*/
    
    /*
    for (var a = 0; a < document.anchors.length; a++) {
        if (document.anchors[a].innerHTML.length > 0) {
            bla += document.anchors[a].innerHTML;
            bla += " = ";
            bla += translate(document.anchors[a].innerHTML);
            bla += "\n";
        }
    }*/

    var arrayTags = new Array();
    var elementArray = new Array();
    countTags(document, arrayTags, elementArray);

    var resultString = "Result of translation:\n";
    for (var i = 0; i < arrayTags.length; i++) {

        resultString += arrayTags[i];
        resultString += " -> ";
        elementArray[i].nodeValue = translate(arrayTags[i].substring(0,maxKeyLength), elementArray[i].nodeValue);
        resultString += elementArray[i].nodeValue;
        resultString += "\n";
    }

    //alert(resultString);
    
}

function getCookie(cname) {

    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == cname) {
            return unescape(y);
        }
    }
    return null;
}

function setCookie(cname, cvalue) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + 1);
    var c_value = escape(cvalue) + ((1 == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = cname + "=" + c_value;
    
    return null;
}

function getLanguageCodeCookie() {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == cookieName) {
            return unescape(y);
        }
    }
    setLanguageCodeCookie("EN", 365);
    return "EN";    // default to english
}

function setLanguageCodeCookie(value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = cookieName + "=" + c_value;
}

function Translator() {
    this.callback = function(text) { };
    this.setCallback = function(callbackFunction) {
        this.callback = callbackFunction;
    }
}

function translateEnglish(text) {
    return text;
}

function translateFrench(text) {
    var value = frenchDictionary[text];
    if (value == undefined)
        return "";
    return value;
}

function translate(text, originalText) {
    var retval = translator.callback(text);
    if (retval.length == 0)
        return originalText;

    var div = document.createElement('div');
    var text = document.createTextNode(retval);
    div.appendChild(text);
    return div.innerHTML;
}

function injectTranslationLinks() {
    if (siteLanguage == "EN") {
        document.write("<a href=\"javascript:void(0)\" onclick=\"setLanguage('FR');\">Fran&ccedilais (en progr&egraves)</a>/<b><a href=\"javascript:void(0)\" onclick=\"setLanguage('EN');\">English</a></b>");
    } else {
    document.write("<b><a href=\"javascript:void(0)\" onclick=\"setLanguage('FR');\">Fran&ccedilais (en progr&egraves)</a></b>/<a href=\"javascript:void(0)\" onclick=\"setLanguage('EN');\">English</a>");
    }
}
function setLanguage(lan) {

    if (lan != "EN" && lan != "FR") {
        return;
    }
    
    if (lan == "EN") {
        translator.setCallback(translateEnglish);
    }
    if (lan == "FR") {
        translator.setCallback(translateFrench);
    }
    siteLanguage = lan;
    setLanguageCodeCookie(lan, 365);
    location.reload(true);

}

function outputDictionary( parentDiv ) {
    var arrayTags = new Array();
    var elementArray = new Array();
    countTags(document, arrayTags, elementArray);
    

    var newEntries = new Array();
    
    // build a dictionary of english strings found that have no translation.
    for (var t = 0; t < arrayTags.length; t++) {

        var french = frenchDictionary[arrayTags[t]];
        if (french == undefined) {  // if the french translation is undefined
                newEntries.push(arrayTags[t]);
        }
    }

    var div = document.createElement("div");
    div.innerHTML = "<b>TRANSLATION PANEL</b><br/>";
    if (newEntries.length == 0) {
        div.innerHTML += "nothing to translate.<br/>";
    }
    parentDiv.appendChild(div);
    
    var table = document.createElement("table");
    parentDiv.appendChild(table);

    for (var e = 0; e < newEntries.length; e++) {

        var row = document.createElement("tr");
        var td0 = document.createElement("td");
        var td1 = document.createElement("td");
        var td2 = document.createElement("td");

        // text to translate
        var textArea = document.createElement("textarea");
        textArea.setAttribute("id", "englishText" + e);
        textArea.setAttribute("readonly", "readonly");
        textArea.innerHTML = newEntries[e];
        td0.appendChild(textArea);

        // translated
        var translatedTextArea = document.createElement("textarea");
        translatedTextArea.setAttribute("id", "frenchText" + e);
        td1.appendChild(translatedTextArea);

        // button2
        var saveButton = document.createElement("input");
        saveButton.setAttribute("id", "saveBtn" + e);
        saveButton.setAttribute("type", "button");
        saveButton.setAttribute("value", "save");

        // key
        var tURL = "v/vspfiles/readfile.asp?k=";
        var srcText = "englishText" + e;
        var newText = "frenchText" + e;
        tURL += "' + encodeURIComponent(document.getElementById ('" + srcText + "').value.substring(0,maxKeyLength)) + '";

        // value
        tURL += "&v=";
        tURL += "' + encodeURIComponent(document.getElementById ('" + newText + "').value) + '";
                
        saveButton.setAttribute("onclick", "window.location = '" + tURL + "'");
        td1.appendChild(saveButton);
        
        var ignoreButton = document.createElement("input");
        ignoreButton.setAttribute("type", "button");
        ignoreButton.setAttribute("value", "ignore");

        var tIgnoreURL = "v/vspfiles/readfile.asp?k=";
        tIgnoreURL += "' + encodeURIComponent(document.getElementById ('" + srcText + "').value.substring(0,maxKeyLength)) + '";
        ignoreButton.setAttribute("onclick", "window.location = '" + tIgnoreURL + "'");

        td1.appendChild(ignoreButton);
        
        row.appendChild(td0);
        row.appendChild(td1);
        row.appendChild(td2);
        table.appendChild(row);
    }

    return newEntries;
}

