Source: tools/extensions/LanguageManagerV1Compatibility.js

define(['mmirf/commonUtils', 'mmirf/presentationManager', 'mmirf/dialogManager'],
	/**
	 * Set to "backwards compatibility mode v1" (for pre version 2.0) for LanguageManager.
	 * NOTE: needs {@link mmir.compat.v1.CoreCompat} to be set first!
	 *
	 * This function re-adds deprecated and removed functions and
	 * properties to the CommonUtils instance.
	 *
	 * NOTE that once set to compatibility mode, it cannot be reset to
	 * non-compatibility mode.
	 *
	 * <p>
	 * In addition, the following functions of LanguageManager are made accessible
	 * on the <code>mmir.LanguageManager</code> instance with these additional names
	 * <ul>
	 * 	<li> {@link mmir.LanguageManager#getLanguage} as
	 *          <b><u>getCurrentLanguage() : String</u></b>
	 *  </li><li>
	 *  	 {@link mmir.LanguageManager#existsGrammar} as
	 *          <b><u>existsGrammarForLanguage(String: lang) : Boolean</u></b>
	 * </li><li>
	 * 		 {@link mmir.LanguageManager#existsDictionary} as
	 *          <b><u>existsDictionaryForLanguage(String: lang) : Boolean</u></b>
	 * </li><li>
	 * 		 {@link mmir.LanguageManager#existsSpeechConfig} as
	 *          <b><u>existsSpeakerForLanguage(String: lang) : Boolean</u></b>
	 * </li><li>
	 * 		 {@link mmir.LanguageManager#setNextLanguage} as
	 *          <b><u>cycleLanguages()</u></b>
	 * </li>
	 * </ul>
	 *
	 * @param {mmir.LanguageManager} compatibilitySelf
	 * 			the instance of mmir.LanguageManager to which the compatibility functions etc.
	 * 			will be attached
	 *
	 *
	 * @class
	 * @name mmir.compat.v1.LanguageManager
	 * @static
	 *
	 * @example
	 * mmir.require(['mmirf/core3Compatibility', 'mmirf/languageManagerCompatibility', 'mmirf/core', 'mmirf/languageManager'], function(setCoreCompatibility, setLanguageManagerCompatibility, mmir, languageManager){
	 * 		setCoreCompatibility(mmir);
	 * 		setLanguageManagerCompatibility(languageManager);
	 * });
	 *
	 * @public
	 */
	function(
		commonUtils, presentationManager, dialogManager
) {

		/**
		 * Set to "backwards compatibility mode" (for pre version 2.0).
		 *
		 * This function re-adds deprecated and removed functions and
		 * properties to the CommonUtils instance.
		 *
		 * NOTE that once set to compatibility mode, it cannot be reset to
		 * non-compatibility mode.
		 *
		 * @param {mmir.LanguageManager} compatibilitySelf
		 * 			the instance of mmir.LanguageManager to which the compatibility functions etc.
		 * 			will be attached
		 *
		 * @constructs mmir.compat.v1.LanguageManager
		 *
		 * @borrows mmir.LanguageManager#getLanguage as
		 *          this.getCurrentLanguage
		 * @borrows mmir.LanguageManager#existsGrammar as
		 *          this.existsGrammarForLanguage
		 * @borrows mmir.LanguageManager#existsDictionary as
		 *          this.existsDictionaryForLanguage
		 * @borrows mmir.LanguageManager#existsSpeechConfig as
		 *          this.existsSpeakerForLanguage
		 * @borrows mmir.LanguageManager#setNextLanguage as
		 *          this.cycleLanguages
		 */
		return setToCompatibilityMode = function(compatibilitySelf) {

			/** @scope mmir.compat.v1.LanguageManager.prototype *///for jsdoc2

//            /**
//             * The instance that holds the extensions for compatibility
//             * mode, which really is the LanguageManager instance.
//             *
//             * @type mmir.compat.v1.LanguageManager
//             * @private
//             */
//            var compatibilitySelf = this;

		/**
		 * This function is used to localize the view description
		 * (ehtml) before they are displayed.
		 *
		 * @function
		 * @param {String}
		 *            html The (HTML) string which is to be localized
		 *            into the currently used language
		 * @returns {String} The localized (HTML) string
		 * @throws {Error} if {@link mmir.CommonUtils#getTranslationRegExp} is not
		 * 			available (i.e. commonUtils has not been set to compatibility mode)
		 *
		 * @public
		 * @deprecated used for old template format
		 *
		 *
		 * @requires mmir.CommonUtils
		 * @requires requires that CommonUtils is set to
		 *           setToCompatibilityMode:
		 *           {@link mmir.CommonUtils#setToCompatibilityMode}
		 *
		 * @memberOf mmir.compat.v1.LanguageManager#
		 */
		var translateHTML = function(html) {

			if(commonUtils && !commonUtils.getTranslationRegExp){
				throw new Error('No function CommonUtils.getTranslationRegExp(): need to set commonUtils to compatibility mode too!');
			}

			var translationRegExp = commonUtils.getTranslationRegExp();
			if (html.match(translationRegExp)) {
				while (tre = translationRegExp.exec(html)) {
					var translated = internalGetText(tre[1]);
					html = html.replace(tre[0], translated);
				}
			}
			return html;
		};
		compatibilitySelf.translateHTML = translateHTML;

		/**
		 * FIXME does not work, since PresentationManager.reRenderView was removed!
		 *
		 * This function changes the application language and, if
		 * requested, renders the current view again, so that the change
		 * of the language is applied to the currently displayed view.
		 * After changing the language (and re-rendering the view) an
		 * event "language_choosen" is raised on the DialogManager.<br>
		 *
		 * <div class="box important"> <b>Note:</b> Momentarily this
		 * function is used by 'controllers/application.js' to generate
		 * a menu to choose the application language.<br>
		 * This should better be implemented as a partial. </div>
		 *
		 * @requires mmir.PresentationManager
		 * @requires mmir.DialogManager
		 *
		 * @function
		 * @param {String}
		 *            newLang The new language which is to be used
		 *            henceforth
		 * @param {Boolean}
		 *            doReRenderView Should the currently displayed view
		 *            be rendered again in the new language?
		 * @returns {String} The translation of the keyword
		 * @public
		 *
		 * @memberOf mmir.compat.v1.LanguageManager#
		 */
		var changeLanguage = function(newLang, doReRenderView) {

			console.debug("[Language] selected " + newLang);// debug

			// instance.setLanguage(newLang);
			this.setLanguage(newLang);

			if (doReRenderView == true) {
				presentationManager.reRenderView();
			}
			dialogManager.raise("language_choosen", newLang);
		};
		compatibilitySelf.changeLanguage = changeLanguage;

		compatibilitySelf.getCurrentLanguage = compatibilitySelf.getLanguage;
		compatibilitySelf.cycleLanguages = compatibilitySelf.setNextLanguage;

		};//END: setToCompatibilityMode()

});