define([
    'jquery',
    '/customize/messages.js'
], function($, Messages) {
    var LS_LANG = "CRYPTPAD_LANG";

    var Msg = {};

    Msg.getLanguage = Messages._getLanguage;

    // Add handler to the language selector
    Msg.setLanguage = function (l, sframeChan, cb) {
        if (sframeChan) {
            // We're in the sandbox
            sframeChan.query("Q_LANGUAGE_SET", l, cb);
            return;
        }
        localStorage.setItem(LS_LANG, l);
        cb();
    };

    Msg.initSelector = function ($select, sfcommon) {
        var selector = $select || $('#cp-language-selector');

        if (!selector.length) { return; }

        var language = Messages._getLanguage();

        // Select the current language in the list
        selector.setValue(language || 'en');

        // Listen for language change
        $(selector).find('a.cp-language-value').on('click', function () {
            var newLanguage = $(this).attr('data-value');
            Msg.setLanguage(newLanguage, sfcommon && sfcommon.getSframeChannel(), function () {
                if (newLanguage !== language) {
                    if (sfcommon) {
                        sfcommon.gotoURL();
                        return;
                    }
                    window.location.reload();
                }
            });
        });
    };

    Msg.applyTranslation = function () {
        var translateText = function (i, e) {
            var $el = $(e);
            var key = $el.data('localization');
            $el.html(Messages[key]);
        };
        var translateTitle = function () {
            var $el = $(this);
            var key = $el.data('localization-title');
            $el.attr('title', Messages[key]);
        };
        var translatePlaceholder = function () {
            var $el = $(this);
            var key = $el.data('localization-placeholder');
            $el.attr('placeholder', Messages[key]);
        };
        $('[data-localization]').each(translateText);
        $('[data-localization-title]').each(translateTitle);
        $('[data-localization-placeholder]').each(translatePlaceholder);
        $('#pad-iframe').contents().find('[data-localization]').each(translateText);
        $('#pad-iframe').contents().find('[data-localization-title]').each(translateTitle);
        $('#pad-iframe').contents().find('[data-localization-placeholder]').each(translatePlaceholder);
    };

    return Msg;

});