// Script to translate existing input fields and textareas values to the existing
// system languages using Google API

var translations_in_process = 0;

/**
 * Finds the elements (inputs and textareas) with current_language postfix, translates
 * them and writes to the according multilingual elements
 * @access public
 * @return void
 **/
function FindAndTranslateDataFields(){
    // find elements to translate
    var found_elements = FindElements();
    // translate and write to according multilingual elements
    TranslateAndWriteDataFields(found_elements);
    return false;
}

/**
 * finds INPUT and TEXTAREA elements ended with mask "_en" (where "en" is current_language)
 * @access public
 * @return object
 **/
function FindElements(){
    // find INPUT and TEXTAREA elements ended with mask "_en" (where "en" is current_language)
    return $("[name$='["+current_language+"]']:input");
}

/**
  * @access public
 * @return void
 **/
function TranslateAndWriteDataFields(found_elements){
    var lang_from = current_language;
    var all_lang = allowed_language;
    translations_in_process = 0;
    for (var i = 0, el; el = found_elements[i]; i++) {
        // walk by all available languages except current_language
        for (var l = 0, lang_to; lang_to = all_lang[l]; l++) {
            if (lang_to == lang_from){
                continue;
            }
            // get element name and strip "_en" postfix
            var el_name = $(el).attr('name');
            el_name = el_name.substr(0,el_name.length-4);
            // add the neccessary lang postfix
            el_name = el_name+"["+lang_to+"]";
            // trying to find the INPUT and TEXT elements with name el_name
            found_el = $("[name='"+el_name+"']:input");
            // element exists?
            if (found_el.length !== 0) {
                // element exists - translate text and write to it
                if ($(el).val() == "") {
                    $(found_el).val("");
                }
                /**
                 * There is a limit of 5 000 characters which can be found in terms & conditions.
                 * ( http://code.google.com/intl/ru/apis/ajaxlanguage/terms.html )
                 * See http://www.devcha.com/2010/03/how-to-overcome-google-translates-get.html
                 */
                text_to_translate = $(el).val();
                if (text_to_translate.length>350) {
                    text_to_translate = text_to_translate.substr(0, 347).concat('...');
                }
                Translate(text_to_translate, lang_from, lang_to, found_el);
                translations_in_process++;
                $('#multilang_div').block({
                    message: __t("Translating")+'...',
                    fadeIn:  200,
                    overlayCSS: {backgroundColor:'#000', opacity: '0.3'},
                    css: {color:'#555', backgroundColor:'#CCC', border:'2px solid #DDD',  padding:0, margin:0}
                });
                //console.log("Translated ["+lang_from+"-"+lang_to+"] from " + $(el).attr("name") + " to " + $(found_el).attr("name"));
            }
        }
    }
}

/**
 * Uses Google API to translate string and to write it to the passed element
 * @access public
 * @return void
 **/
function Translate(text, lang_from, lang_to, element_to_write){
    // for more information see:
    // http://code.google.com/intl/ru-RU/apis/ajaxlanguage/documentation/#Examples
    google.language.translate(text, lang_from, lang_to, function(result) {
        if (!result.error) {
            // write the translated value to the element
            $(element_to_write).val(result.translation);
            //console.log("[done] Translated ["+lang_from+"-"+lang_to+"], written to " + $(element_to_write).attr("name"));
        }
        else
        {
            //console.log("[failed] Failed to translate text ["+lang_from+"-"+lang_to+"], written to " + $(element_to_write).attr("name"));
        }
        if (--translations_in_process <= 0) {
            $('#multilang_div').unblock({ fadeOut: 200 });
        }

    });
}
