define( function() {

    var fallbackLanguage = "en-us",
        texts = {
    "player": {
        "navigation": {
            "button": {
                "next": {
                    "et-ee": "Järgmine",
                    "bg-bg": "Продължи",
                    "cs-cz": "Dále",
                    "da-dk": "Næste",
                    "de-de": "Weiter",
                    "en-us": "Next",
                    "es-es": "Siguiente",
                    "es-ar": "Siguiente",
                    "fi-fi": "Seuraava",
                    "fr-fr": "Suivant",
                    "el-gr": "Επόμενο",
                    "hi-in": "आगे",
                    "hr-hr": "Dalje",
                    "hu-hu": "Tovább",
                    "it-it": "Avanti",
                    "ja-jp": "詳細",
                    "ko-kr": "다음",
                    "lt-lt": "Tolesnis",
                    "mk-mk": "Следно",
                    "mn-mn": "Дараах",
                    "ms-id": "Berikutnya",
                    "nl-nl": "Verder",
                    "no-no": "Neste",
                    "pl-pl": "Dalej",
                    "pt-pt": "Avançar",
                    "pt-br": "Avançar",
                    "ro-ro": "Mai departe",
                    "ru-ru": "Дальше",
                    "sk-sk": "Ďalej",
                    "sl-si": "Naprej",
                    "sr-rs": "Dalje",
                    "sv-se": "Nästa",
                    "th-th": "ถัดไป",
                    "tr-tr": "Devam",
                    "zh-tw": "下一步",
                    "zh-cn": "下一步",
                    "de-at": "Weiter",
                    "de-ch": "Weiter",
                    "eo-de": "Weiter",
                    "nl-be": "Verder",
                    "en-ie": "Next",
                    "en-gb": "Next",
                    "eo-en": "Weiter",
                    "fr-be": "Suivant"
                },
                "close": {
                    "et-ee": "Sulge",
                    "bg-bg": "Прекрати",
                    "cs-cz": "Ukončit",
                    "da-dk": "Afslut",
                    "de-de": "Beenden",
                    "en-us": "Close",
                    "es-es": "Cerrar",
                    "es-ar": "Cerrar",
                    "fi-fi": "Lopeta",
                    "fr-fr": "Fermer",
                    "el-gr": "Έξοδος",
                    "hi-in": "बंद करें",
                    "hr-hr": "Završi",
                    "hu-hu": "Befejezés",
                    "it-it": "Chiudi",
                    "ja-jp": "終了する",
                    "ko-kr": "닫기",
                    "lt-lt": "Užverti",
                    "mk-mk": "Затвори",
                    "mn-mn": "Хаах",
                    "ms-id": "Tutup",
                    "nl-nl": "Afsluiten",
                    "no-no": "Lukk",
                    "pl-pl": "Zakończ",
                    "pt-pt": "Terminar",
                    "pt-br": "Terminar",
                    "ro-ro": "Închidere",
                    "ru-ru": "Выход",
                    "sk-sk": "Ukončiť",
                    "sl-si": "Končaj",
                    "sr-rs": "Izlaz",
                    "sv-se": "Stäng",
                    "th-th": "ปิด",
                    "tr-tr": "Bitir",
                    "zh-tw": "關閉",
                    "zh-cn": "关闭",
                    "de-at": "Beenden",
                    "de-ch": "Beenden",
                    "eo-de": "Beenden",
                    "nl-be": "Afsluiten",
                    "en-ie": "Close",
                    "en-gb": "Close",
                    "eo-en": "Beenden",
                    "fr-be": "Fermer"
                },
                "text": {
                    "et-ee": "Kas soovite õppetunnist väljuda?",
                    "bg-bg": "Желаете ли да приключите урока?",
                    "cs-cz": "Přejete si výukovou jednotku ukončit?",
                    "da-dk": "Ønsker du at afslutte undervisningsmodulet?",
                    "de-de": "Möchten Sie die Lerneinheit beenden?",
                    "en-us": "Do you want to exit the lesson?",
                    "es-es": "¿Desea finalizar la unidad didáctica?",
                    "es-ar": "¿Desea finalizar la unidad didáctica?",
                    "fi-fi": "Haluatko lopettaa opettelujakson?",
                    "fr-fr": "Souhaitez-vous mettre fin à l’unité d’apprentissage?",
                    "el-gr": "Θέλετε να κλείσετε τη μονάδα μάθησης;",
                    "hi-in": "क्या आप शिक्षण इकाई समाप्त करना चाहते हैं?",
                    "hr-hr": "Želite li završiti jedinicu učenja?",
                    "hu-hu": "Szeretné befejezni a tanulási egységet?",
                    "it-it": "Volete terminare la lezione?",
                    "ja-jp": "本単元を完全に修得されました",
                    "ko-kr": "튜토리얼 유닛을 종료하시겠습니다?",
                    "lt-lt": "Ar norite iš šios pamokos išeiti?",
                    "mk-mk": "Дали сакате да излезете од лекцијата?",
                    "mn-mn": "Та хичээлээс гарах уу?",
                    "ms-id": "Apakah Anda ingin mengakhiri unit pelajaran?",
                    "nl-nl": "Wenst u deze leereenheid te beëindigen?",
                    "no-no": "Vil du avslutte leksjonen?",
                    "pl-pl": "Czy chcesz zakończyć lekcję?",
                    "pt-pt": "Deseja terminar a unidade de aprendizagem?",
                    "pt-br": "Deseja terminar a unidade de aprendizagem?",
                    "ro-ro": "Doriţi să închideţi unitatea de învăţare?",
                    "ru-ru": "Хотите выйти из учебного блока?",
                    "sk-sk": "Chcete učivo ukončiť?",
                    "sl-si": "Ali želite učne vsebine zaključiti?",
                    "sr-rs": "Da li želite da završite jedinicu učenja?",
                    "sv-se": "Önskar Ni avsluta denna lektion?",
                    "th-th": "ต้องการออกจากบทเรียนหรือไม่",
                    "tr-tr": "Eğitim modülünü sonlandırmak istiyor musunuz?",
                    "zh-tw": "想退出教育單元嗎？",
                    "zh-cn": "想退出教育单元吗？",
                    "de-at": "Möchten Sie die Lerneinheit beenden?",
                    "de-ch": "Möchten Sie die Lerneinheit beenden?",
                    "eo-de": "Möchten Sie die Lerneinheit beenden?",
                    "nl-be": "Wenst u deze leereenheid te beëindigen?",
                    "en-ie": "Do you want to exit the lesson?",
                    "en-gb": "Do you want to exit the lesson?",
                    "eo-en": "Do you want to exit the lesson?",
                    "fr-be": "Souhaitez-vous mettre fin à l’unité d’apprentissage?"
                },
                "labelNoButton": {
                    "et-ee": "Ei",
                    "bg-bg": "Не",
                    "cs-cz": "Ne",
                    "da-dk": "Nej",
                    "de-de": "Nein",
                    "en-us": "No",
                    "es-es": "No",
                    "es-ar": "No",
                    "fi-fi": "Ei",
                    "fr-fr": "Non",
                    "el-gr": "Όχι",
                    "hi-in": "नहीं",
                    "hr-hr": "Ne",
                    "hu-hu": "Nem",
                    "it-it": "No",
                    "ja-jp": "いいえ",
                    "ko-kr": "아니오",
                    "lt-lt": "Ne",
                    "mk-mk": "Не",
                    "mn-mn": "Үгүй",
                    "ms-id": "Tidak",
                    "nl-nl": "Neen",
                    "no-no": "Nei",
                    "pl-pl": "Nie",
                    "pl-br": "Nie",
                    "pt-pt": "Não",
                    "ro-ro": "Nu",
                    "ru-ru": "Нет",
                    "sk-sk": "Nie",
                    "sl-si": "Ne",
                    "sr-rs": "Ne",
                    "sv-se": "Nej",
                    "th-th": "ไม่",
                    "tr-tr": "Hayır",
                    "zh-tw": "否",
                    "zh-cn": "否",
                    "de-at": "Nein",
                    "de-ch": "Nein",
                    "eo-de": "Nein",
                    "nl-be": "Neen",
                    "en-ie": "No",
                    "en-gb": "No",
                    "eo-en": "No",
                    "fr-be": "Non"
                },
                "labelYesButton": {
                    "et-ee": "Jah",
                    "bg-bg": "Да",
                    "cs-cz": "Ano",
                    "da-dk": "Ja",
                    "de-de": "Ja",
                    "en-us": "Yes",
                    "es-es": "Si",
                    "es-ar": "Si",
                    "fi-fi": "Kyllä",
                    "fr-fr": "Oui",
                    "el-gr": "Ναι",
                    "hi-in": "हाँ",
                    "hr-hr": "Da",
                    "hu-hu": "Igen",
                    "it-it": "Sì",
                    "ja-jp": "はい",
                    "ko-kr": "예",
                    "lt-lt": "Taip",
                    "mk-mk": "Да",
                    "mn-mn": "Тийм",
                    "ms-id": "Ya",
                    "nl-nl": "Ja",
                    "no-no": "Ja",
                    "pl-pl": "Tak",
                    "pt-pt": "Sim",
                    "pt-br": "Sim",
                    "ro-ro": "Da",
                    "ru-ru": "Да",
                    "sk-sk": "Áno",
                    "sl-si": "Da",
                    "sr-rs": "Da",
                    "sv-se": "Ja",
                    "th-th": "ใช่",
                    "tr-tr": "Evet",
                    "zh-tw": "是",
                    "zh-cn": "是",
                    "de-at": "Ja",
                    "de-ch": "Ja",
                    "eo-de": "Ja",
                    "nl-be": "Ja",
                    "en-ie": "Yes",
                    "en-gb": "Yes",
                    "eo-en": "Yes",
                    "fr-be": "Oui"
                }
            }
        }
    }
};

    /**
     * Gets data from a nested object
     *
     * @private
     * @param {string} key - a dot separated representation of the objectstructure e.g.("cmi.core.lesson_status")
     * @param {object|string} data - the data object where the value should be got from
     */
    function getData( key, data ) {

        var parts = key.split("."),
            i = 0,
            parent = data;

        for(; i < parts.length; ++i) {
            if (!parent[parts[i]]) {
                return null;
            }
            parent = parent[parts[i]];
        }

        return parent;
    }

    // revealing public API
    return {

        /**
         * Gets a text in a given language
         * If the text is not defined in the given language, the text in teh fallback "en-us" is used, otherwise "null".
         *
         * @public
         * @param {string} key - a dot separated representation of the resource e.g.("quiz.evaluate")
         * @param {string} [language] - the language for the text e.g.("en-us")
         */
        get : function( key, language ){

            var text = getData( key, texts );
            if( text ){
                return getData( language, text ) || getData( fallbackLanguage, text );
            }

            return null;
        }
    }
});