define( function() {

    var fallbackLanguage = "en-us",
        texts = {
            "player": {
                "navigation": {
                    "modes": {
                        "interactive": {
                            "bg-bg": "Интерактивен режим",
                            "cs-cz": "Interaktivní režim",
                            "da-dk": "Interaktiv tilstand",
                            "de-at": "Interaktiver Modus",
                            "de-ch": "Interaktiver Modus",
                            "de-de": "Interaktiver Modus",
                            "el-gr": "Διαδραστική λειτουργία",
                            "en-ie": "Interactive mode",
                            "en-gb": "Interactive mode",
                            "en-us": "Interactive mode",
                            "eo-de": "Interaktiver Modus",
                            "eo-en": "Interaktiver Modus",
                            "es-es": "Modo interactivo",
                            "es-ar": "Modo interactivo",
                            "et-ee": "Interaktiivne režiim",
                            "fi-fi": "Interaktiivinen tila",
                            "fr-be": "Mode interactif",
                            "fr-fr": "Mode interactif",
                            "hi-in": "इंटरएक्टिव मोड",
                            "hr-hr": "Interaktivni način",
                            "hu-hu": "Interaktív mód",
                            "it-it": "Modalità interattiva",
                            "ja-jp": "インタラクティブモード",
                            "ko-kr": "대화 형 모드",
                            "lt-lt": "Interaktyvus režimas",
                            "mk-mk": "Интерактивен режим",
                            "mn-mn": "Интерактив горим",
                            "ms-id": "Mod interaktif",
                            "nl-be": "Interactieve modus",
                            "nl-nl": "Interactieve modus",
                            "no-no": "Interactieve modus",
                            "pl-pl": "Tryb interaktywny",
                            "pt-pt": "Modo interativo",
                            "pt-br": "Modo interativo",
                            "ro-ro": "Mod interactiv",
                            "ru-ru": "Интерактивный режим",
                            "sk-sk": "Interaktívny režim",
                            "sl-si": "Interaktivni način",
                            "sr-rs": "Интерактивни режим",
                            "sv-se": "Interaktivt läge",
                            "th-th": "โหมดโต้ตอบ",
                            "tr-tr": "Etkileşimli mod",
                            "zh-tw": "互動模式",
                            "zh-cn": "互动模式"
                        },
                        "presentation": {
                            "bg-bg": "Режим на презентация",
                            "cs-cz": "Režim prezentace",
                            "da-dk": "Præsentationstilstand",
                            "de-at": "Präsentationsmodus",
                            "de-ch": "Präsentationsmodus",
                            "de-de": "Präsentationsmodus",
                            "el-gr": "Λειτουργία παρουσίασης",
                            "en-ie": "Presentation mode",
                            "en-gb": "Presentation mode",
                            "en-us": "Presentation mode",
                            "eo-de": "Präsentationsmodus",
                            "eo-en": "Präsentationsmodus",
                            "es-es": "Modo presentación",
                            "es-ar": "Modo presentación",
                            "et-ee": "Esitlusrežiim",
                            "fi-fi": "Esitystila",
                            "fr-be": "Mode de présentation",
                            "fr-fr": "Mode de présentation",
                            "hi-in": "प्रस्तुति मोड",
                            "hr-hr": "Način prezentacije",
                            "hu-hu": "Bemutató mód",
                            "it-it": "Modalità presentazione",
                            "ja-jp": "プレゼンテーションモード",
                            "ko-kr": "프레젠테이션 모드",
                            "lt-lt": "Pristatymo režimas",
                            "mk-mk": "Режим на презентација",
                            "mn-mn": "Танилцуулах горим",
                            "ms-id": "Mod persembahan",
                            "nl-be": "Presentatiemodus",
                            "nl-nl": "Presentatiemodus",
                            "no-no": "Presentasjonsmodus",
                            "pl-pl": "Tryb prezentacji",
                            "pt-pt": "Modo de apresentação",
                            "pt-br": "Modo de apresentação",
                            "ro-ro": "Mod de prezentare",
                            "ru-ru": "Режим презентации",
                            "sk-sk": "Prezentačný režim",
                            "sl-si": "Predstavitveni način",
                            "sr-rs": "Режим презентације",
                            "sv-se": "Presentationsläge",
                            "th-th": "โหมดการนำเสนอ",
                            "tr-tr": "Sunum modu",
                            "zh-tw": "簡報模式",
                            "zh-cn": "简报模式"
                        },
                        "film": {
                            "bg-bg": "Филмова мода",
                            "cs-cz": "Filmová móda",
                            "da-dk": "Film mode",
                            "de-at": "Film-Modus",
                            "de-ch": "Film-Modus",
                            "de-de": "Film-Modus",
                            "el-gr": "Μόδα ταινιών",
                            "en-ie": "Film mode",
                            "en-gb": "Film mode",
                            "en-us": "Film mode",
                            "eo-de": "Film-Modus",
                            "eo-en": "Film-Modus",
                            "es-es": "Modo de película",
                            "es-ar": "Modo de película",
                            "et-ee": "Filmimood",
                            "fi-fi": "Elokuva muoti",
                            "fr-be": "Mode Film",
                            "fr-fr": "Mode Film",
                            "hi-in": "फिल्म फैशन",
                            "hr-hr": "Filmska moda",
                            "hu-hu": "Film divat",
                            "it-it": "Moda cinematografica",
                            "ja-jp": "映画のファッション",
                            "ko-kr": "영화 패션",
                            "lt-lt": "Kino mados",
                            "mk-mk": "Филмска мода",
                            "mn-mn": "Кино загвар",
                            "ms-id": "Fesyen filem",
                            "nl-be": "Film mode",
                            "nl-nl": "Film mode",
                            "no-no": "Filmmote",
                            "pl-pl": "Moda filmowa",
                            "pt-pt": "Moda cinematográfica",
                            "pt-br": "Moda cinematográfica",
                            "ro-ro": "Moda filmului",
                            "ru-ru": "Кино мода",
                            "sk-sk": "Filmová móda",
                            "sl-si": "Filmska moda",
                            "sr-rs": "Филмска мода",
                            "sv-se": "Film mode",
                            "th-th": "แฟชั่นภาพยนตร์",
                            "tr-tr": "Film modası",
                            "zh-tw": "電影時尚",
                            "zh-cn": "电影时尚"
                        },
                        "tooltip": {
                            "bg-bg": "Игрален режим",
                            "cs-cz": "Režim přehrávání",
                            "da-dk": "Afspilningstilstand",
                            "de-at": "Abspielmodus",
                            "de-ch": "Abspielmodus",
                            "de-de": "Abspielmodus",
                            "el-gr": "Λειτουργία αναπαραγωγής",
                            "en-ie": "Play mode",
                            "en-gb": "Play mode",
                            "en-us": "Play mode",
                            "eo-de": "Abspielmodus",
                            "eo-en": "Abspielmodus",
                            "es-es": "El modo de reproducción",
                            "es-ar": "El modo de reproducción",
                            "et-ee": "Esitusrežiim",
                            "fi-fi": "Toistotila",
                            "fr-be": "Mode de lecture",
                            "fr-fr": "Mode de lecture",
                            "hi-in": "खेल विधा",
                            "hr-hr": "Mod igre",
                            "hu-hu": "Játék mód",
                            "it-it": "Modalità di gioco",
                            "ja-jp": "プレイモード",
                            "ko-kr": "플레이 모드",
                            "lt-lt": "Leidimo režimas",
                            "mk-mk": "Режим на репродукција",
                            "mn-mn": "Тоглуулах горим",
                            "ms-id": "Mod main",
                            "nl-be": "Speelmodus",
                            "nl-nl": "Speelmodus",
                            "no-no": "Spillemodus",
                            "pl-pl": "Tryb gry",
                            "pt-pt": "Modo de jogo",
                            "pt-br": "Modo de jogo",
                            "ro-ro": "Mod de joc",
                            "ru-ru": "Игровой режим",
                            "sk-sk": "Hrací režim",
                            "sl-si": "Način predvajanja",
                            "sr-rs": "Мод играња",
                            "sv-se": "Spel läge",
                            "th-th": "โหมดการเล่น",
                            "tr-tr": "Oyun modu",
                            "zh-tw": "遊戲模式",
                            "zh-cn": "游戏模式"
                        }
                    }
                }
            }
        };

    /**
     * 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;
        }
    }
});
