google.load("language", "1");
google.setOnLoadCallback(init);

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
};

function init() {
    var src = document.getElementById('src');
    var dst = document.getElementById('dst');
    var dl = new Option("Detect language", "");
    dl.className = "line-below";
    src.options.add(dl);
    for (var l in google.language.Languages) {
        var lng = formatLanguage(l);
        var lngCode = google.language.Languages[l];
        if (google.language.isTranslatable(lngCode)) {
            if (lngCode != "") {
                src.options.add(new Option(lng, lngCode));
                dst.options.add(new Option(lng, lngCode));
            }
        }
    }

    document.getElementById("dest").value = "";

    var userLang = getUserLanguage();
    var langWithoutRegion = getLanguageWithoutRegion(userLang)
    if (!selectLng(dst, userLang)) {
        selectLng(dst, langWithoutRegion);
    }

    if (langWithoutRegion != "en") {
        selectLng(src, "en");
    }

    google.language.getBranding('branding');
}

function getParam(url, paramName) {
    var paramMarkerPos = url.indexOf("?");

    var paramPos = url.indexOf(paramName + "=", paramMarkerPos + 1);

    if (paramPos > 0) {
        var paramValuePos = paramPos + (paramName + "=").length;

        var value = "";

        var nextParamMarker = url.indexOf("&", paramValuePos);

        if (nextParamMarker > 0) {
            value = url.substring(paramValuePos, nextParamMarker)
        }
        else {
            value = url.substring(paramValuePos);
        }

        return value;
    }
    else {
        return null;
    }
}

function selectLng(s, lngCode) {
    for (var i = 0; i < s.options.length; i++) {
        if (s.options[i].value == lngCode) {
            s.selectedIndex = i;

            return true;
        }
    }

    return false;
}


function formatLanguage(lng) {
    lng = capitalize(lng);

    var p = lng.indexOf("_");
    if (p != -1) {
        lng = lng.substr(0, p) + " (" + capitalize(lng.substr(p + 1, lng.length - p - 1)) + ")";
    }

    return lng
}

function capitalize(str) {
    return str.substr(0, 1).toUpperCase() + str.substr(1, str.length - 1).toLowerCase();
}

function submitChange() {
   var value = document.getElementById('source').value;

    if (value != "") {
       var src = document.getElementById('src').value;
        var dest = document.getElementById('dst').value;
        google.language.translate(value, src, dest, translateResult);
        return false;
    }
}

function translateResult(result) {
    var resultBody = document.getElementById("dest");
    if (!result.error) {
        resultBody.value = result.translation.trim();
        document.getElementById("transLoaderInd").src = "";
    } else {
        resultBody.value = 'Error Translating';
    }
}

function getUserLanguage() {
    return (navigator.language) ? navigator.language : navigator.userLanguage;
}

function getLanguageWithoutRegion(langWithRegion) {
    return langWithRegion.substr(0, 2);
}