﻿//загружаем гугл
google.load("language", "1");

var trans_var = { "en": [{ "code": "de", "lang": "German" }, { "code": "ru", "lang": "Russian" }, { "code": "zh", "lang": "Chines" }, { "code": "en", "lang": "English"}],
    "ru": [{ "code": "de", "lang": "German" }, { "code": "en", "lang": "English" }, { "code": "zh", "lang": "Chines"}],
    "de": [{ "code": "ru", "lang": "Russian" }, { "code": "en", "lang": "English" }, { "code": "zh", "lang": "Chines" }, { "code": "de", "lang": "German"}],
    "zh": [{ "code": "de", "lang": "German" }, { "code": "en", "lang": "English" }, { "code": "ru", "lang": "Russian" }, { "code": "zh", "lang": "Chines"}]
};

var origin_text_lang = null; // код языка оригинального текста
var _tmp_original_text = null; //здесь оригинальный текст, который переводим (с фоматированием)

var text_el = 'wrapper'; //ID елемента, который переводим


//функция рендерит нужный набор переводов
function _render_translate_box(lang_source) {
    if ((lang_source == '') || (lang_source == null) || origin_text_lang == null) return false;
    else
        lang_source = origin_text_lang;

    var el = document.getElementById("translate_lang_str");
    el.innerHTML = '';

    //получим массив разрешенных языков
    var lang = trans_var[lang_source];


    el.innerHTML += '<a href="javascript:void reset_text();"><img src="/res/flags/ru.gif" alt="Русский" border="0" align="absmiddle" />' + '</a> &nbsp;';
    for (var item in lang) {
        //перебираем все языки
        el.innerHTML += '<a href="javascript:void reset_text(); void translate_text(origin_text_lang, \'' + lang[item].code + '\');">' + '<img src="/res/flags/' + lang[item].code + '.gif" alt="' + lang[item].code + '" border="0" align="absmiddle" />' + '</a> &nbsp;';
    };

}

//функция-обертка для определения языка
function _detect_lang_code(el, create_box_funct_callback) {
    //получает елемент, в котором текст
    var _el = document.getElementById(el);
    var text = document.getElementById(el).innerHTML; // получим текст без тегов

    //для IE лучше всего использовать innerText
    var tmp = document.getElementById(el).innerText;
    if (typeof (tmp) !== "undefined") { text = tmp; }

    //для больших текстов для определения выделять первые 100 символов.
    text = text.substr(0, 100);

    //определяем язык текста
    google.language.detect(text, function(result) {
        if (!result.error) {
            var language = 'unknown';
            for (l in google.language.Languages) {
                if (google.language.Languages[l] == result.language) {
                    language = l;
                    break;
                }
            }
            origin_text_lang = 'ru'; //google.language.Languages[language];
            //вызовем калбек для отрисовки выбора перевода
            create_box_funct_callback(origin_text_lang);

            return true;
        }
    });

}


//теперь, собствено, функция перевода. 
function translate_text(lang_source, lang_translate) {
    var tags = ['span', 'a', 'li', 'p', 'div', 'td', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];

    if ((typeof (lang_source) == "undefined") || (typeof (lang_translate) == "undefined")) return false;

    //проверим еще раз допустимость перевода
    var tr = trans_var[lang_source];
    var result = false; //результат проверки

    for (var i in tr) {
        if (tr[i].code == lang_translate) {
            result = true;
            break;
        }
    }

    if (result == false) return false; // нет такого языка или перевод не разрешен


    for (var tag in tags) {

        var nodes = document.getElementsByTagName(tags[tag]);
        for (var node in nodes) {
            var text = nodes[node].innerHTML;

            if (text != undefined && text != "") {
                translate(nodes[node], text, lang_source, lang_translate);
            }

        }
    }
    //set_translate('wrapper');
    return true;

}

function reset_text() {
    var tags = ['span', 'a', 'li', 'p', 'div', 'td', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
    for (var tag in tags) {
        var nodes = document.getElementsByTagName(tags[tag]);
        for (var node in nodes) {
            if (nodes[node].originalText != undefined && nodes[node].originalText != "") {
                nodes[node].innerHTML = nodes[node].originalText;
            }
        }
    }
    // 	set_translate('wrapper');
    return true;

}


function translate(obj, text, lang_source, lang_translate) {
    obj.originalText = text;
    google.language.translate(text, lang_source, lang_translate,
    function(result) {
        if (result.translation) {
            obj.innerHTML = result.translation;
        }
    });
}


//общая функция:
function set_translate(id_element) {
    //сначала найдем язык текста исходный и сразу передаем калл-бек функцию для построения бокса
    _detect_lang_code(id_element, _render_translate_box);

}
