Antworten
Ergebnis 1 bis 5 von 5

Thema: AOA + Guide

  1. #1

    Registriert seit
    May 2013
    Beiträge
    4
    Server
    Meerjungfrau

    AOA + Guide

    Hallo liebe Anno Online - Community!

    Hiermit präsentiere ich offiziell:
    • Einen "How to" Steamguide sowie
    • Das Anno Online - Addon kurz "AOA" für Steam.

    ================= Vorwort ====================
    Ich spiele AO schon seit einigen Jahren (mit Unterbrechungen) und bin weiterhin begeistert.
    Allerdings gibt es hier und da Probleme und Nöte die viele Spieler haben, aber das ist ja bei jedem Spiel so.
    Als der Slimbrowser zum Download bereit stand, gab es endlich eine Möglichkeit (für mich und warscheinlich auch für Andere) dieses Spiel schneller zu laden und flüssiger zu Spielen.
    Mit der Steamveröffentlichung, einige Zeit später, erhoffte ich mir eine größere Community - leider aber gibt es hier einen bekannten Haken.

    Schon seit einiger Zeit haben mich gewisse Dinge gestört.
    Zum einen das große Navi sowie die fehlende Unterstützung für die Nicht-Steam-Accounts.
    Daher habe ich in mühsamer Kleinarbeit versucht diese Defiziehte auszumergeln und herraus kahm 2 Dinge.
    Ein Steamguide für die Nutzung des alten Acounts in Steam sowie dieses Addon.

    Mit beiden Dingen will ich vorallem versuchen, der Steamcommunity etwas entgegen zu kommen.
    ============================================


    ================ Der Guide ===================

    Anno Online - How to


    In diesem Guide versuche ich:
    • Den Leute zu zeigen wie man AO mit Steam verknüpfen kann. bzw.
    • Den AO Client mit dem alten Account zu verbinden.
    • FAQ's zu liefern.
    • Den Leuten zu zeigen wie man den Client ein wenig anpasst.
    • Das AOA zu bewerben.
    ============================================


    ================ Das Addon ===================

    Mit diesem Addon komme folgende Funktionen.
    • Die Möglichkeit beides - den Normalen- und den Steam-Account - zu benutzen.
    • Mit einer viel kleineren Navileiste zu zocken.
    • Tastenkürzel zur Navigation zu benutzen. (Nur die Mini-Navi-Version.)

    Links: Hauptmenu | Rechts: Login-Menu mit Mininavi

    (Bilder anklicken für volle Auslösung)


    Leider spiele ich nicht mit einem Steam-Account und konnte somit die Steam-Version nicht ausgiebig testen.

    Einen Hacken hat das Ganze allerdings:
    Da Steam keinen Workshop für AO bereit hält und Bluebyte sich Sorgen um Viren oder andere Schadsoftware macht gibt es keinen Download Link.
    Um das Addon nutzen zu können müsst ihr das Ding, üben den Quellcode den ich hier in "Spoiler" packe, selber zusammensetzen.
    Sollte sich doch noch eine andere Möglichkeit finden werde ich diese hier zur Verfügung stellen.
    ============================================


    ============== Installation - Beta=================
    • Zuerst muss die Steamversion natürlich installliert werden/sein.
    • Danach sucht ihr das Installationverzeichniss (Standart: "X:\Program Files (x86)\Steam\SteamApps\common\Anno Online\")
    • Am besten ihr macht ein Backup um zu verhindern dass, solltet ihr einen Fehler machen, das Spiel nicht mehr startet.
    • Als nächstes Überschreibt ihr alle alten Files mit den Neuen.
    • Die Ordnerstrucktur ist folgende:
      • Anno Online
      • Anno Online/css
      • Anno Online/img
      • Anno Online/img/client
      • Anno Online/js
    • Beim erstellen der Dateien welche unten folgen, benutzt ihr den Editor. Datei -> Speichern unter -> Als "Dateityp" wählt ihr "Alle Dateien" und speichert unter dem Namen der jeweils im Spoiler angegeben ist.
    • Am besten im Unicode oder als UTF speichern da gewisse Zeichen unter ANSI nicht funktionieren.
    • Insgesammt sind es 14 Dateien - darunter 2 Bilder. (Die Datei "index - Simple.html" ist eine abgespeckte Version der neuen Index-Datei, welche ihr als Alternative nutzen könnt.
    ============================================


    Dieses Addon wurde mit freundlicher Genehmigung von BB_Awondel online gestellt.
    ============================================

    Ich hoffe, dass ich der AO-Community hiermit wenigstens, eine kleine Freude mache.

    Viel Erfolg!




    ========
    Leider bin ich in letzter Zeit etwas beschäftig. Sollte etwas sein dann bitte ins Forum schreiben. (Oder per PN wenns "wichtig" ist.)
    ========
    Geändert von Seldaron (14.04.17 um 12:23 Uhr)

  2. #2

    Registriert seit
    May 2013
    Beiträge
    4
    Server
    Meerjungfrau

    Files

    Addon v1.0 - 12.04.2017
    Wichtig bei der Installation ist, dass ihr beim Erstellen der Dateien darauf achtet, das die Endungen korreckt sind.

    css/addon.css

    @charset "UTF-8";

    /* Formatierung der Main-Menu Buttons */
    body {
    margin: 0;
    padding: 0;
    border: 0;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    }

    .addon-menu-left {
    float: left;
    }

    .addon-menu-right {
    float: right;
    }

    a.addon-normal {
    background-image: url(../img/backgrounds/bg-1.jpg);
    width:200px;
    height:120px;
    margin-top:60px;
    margin-left:140px;
    margin-right:20px;
    margin-bottom:20px;
    display: block;
    background-repeat: no-repeat;
    background-size: contain;
    text-align: center;
    font-size: 1.8em;
    color: rgba(050,050,050,0.6);
    text-decoration: none;
    }
    a.addon-normal:hover {
    color: rgba(250,250,250,0.8);
    }

    a.addon-normal-mini {
    background-image: url(../img/backgrounds/bg-1.jpg);
    width:200px;
    height:120px;
    margin-top:40px;
    margin-left:140px;
    margin-right:20px;
    margin-bottom:20px;
    float: left;
    display: block;
    background-repeat: no-repeat;
    background-size: contain;
    text-align: center;
    font-size: 1.8em;
    color: rgba(050,050,050,0.6);
    text-decoration: none;
    }
    a.addon-normal-mini:hover {
    color: rgba(250,250,250,0.8);
    }

    a.addon-steam {
    background-image: url(../img/backgrounds/bg-2.jpg);
    width:200px;
    height:120px;
    margin-top:60px;
    margin-left:60px;
    margin-right:140px;
    margin-bottom:20px;
    display: block;
    background-repeat: no-repeat;
    background-size: contain;
    text-align: center;
    font-size: 1.8em;
    color: rgba(050,050,050,0.6);
    text-decoration: none;
    }
    a.addon-steam:hover {
    color: rgba(250,250,250,0.8);
    }

    a.addon-steam-mini {
    background-image: url(../img/backgrounds/bg-2.jpg);
    width:200px;
    height:120px;
    margin-top:40px;
    margin-left:60px;
    margin-right:140px;
    margin-bottom:20px;
    float: right;
    display: block;
    background-repeat: no-repeat;
    background-size: contain;
    text-align: center;
    font-size: 1.8em;
    color: rgba(050,050,050,0.6);
    text-decoration: none;
    }
    a.addon-steam-mini:hover {
    color: rgba(250,250,250,0.8);
    }


    /* Navi-Leiste zusätzliche Buttons */
    #steamnav .buttons .button.return {
    background-image: url('../img/client/icon_play.png');
    }
    #steamnav .buttons .button.faq {
    background-image: url('../img/client/icon_help.png');
    }
    #steamnav .buttons .button.steam {
    background-image: url('../img/icon2.png');
    }
    #steamnav .buttons .button.anno {
    background-image: url('../img/icon.png');
    }


    /* Mini-Navi-Leiste */
    #mini-iframe-wrapper {
    display: table-cell;
    padding-right: 6px;
    }
    #mini-nav {
    display: table-cell;
    position: fixed;
    right: 0;
    width: 11px;
    height: 100%;
    margin-left: 10px;
    background-image: url('../img/client/panel_bg.png');
    }


    /* Helpfunktion der Nomalen Version */
    .options-layer > .middle > .middle > span a {
    color: #f9f5e0;
    font-size: 13px;
    padding-top: 3px;
    display: inline-block;
    text-decoration: none;
    }
    .options-layer > .middle > .middle > span a:hover {
    text-decoration: underline;
    }
    .h1_help {
    margin: 25px 0 10px;
    font-size: 16px;
    }
    #p_help_text {
    margin-bottom: 10px;
    }





    js/debugger_addon.js

    jQuery.fn.extend({
    appDebug: function () {
    return {
    "help": function (e) {
    if (e.ctrlKey || e.metaKey) {
    $("#debug").slideToggle();
    }
    },
    "traceIFrame": function (src) {
    var t = $('#nwiframe-trace');
    t.append('<a href="#" onclick="$(\'#nwiframe\').attr(\'src\', \'' + src + '\');">' + src + '</a><br />');
    t.scrollTop(100000);
    },
    "toggleSessionData": function(a) {
    $('#debug-a-issues').removeClass("active");
    $('#debug-a-history').removeClass("active");
    $('#debug .configureLanguages').hide();
    $('#debug-known-issues').hide();
    $('#nwiframe-trace-wrapper').hide();
    if (a.hasClass("active")) {
    a.removeClass("active");
    $('#debug .userdata').hide();
    } else {
    a.addClass("active");
    $('#debug .userdata').show();
    }
    },
    "toggleConfigureLanguages" : function() {
    $.fn.appDebug().loadLanguagesToInput();
    $('#debug .userdata').hide();
    $('#debug .configureLanguages').show();
    },
    "cancelConfigureLanguages" : function() {
    $('#debug .configureLanguages').hide();
    $('#debug .userdata').show();
    },
    "saveLanguages": function() {
    var fs = require('fs');
    var data = $('#debug .configureLanguages textarea').val();
    availableLanguages = undefined;
    try {
    eval(data);
    }
    catch (e) {
    alert('The code contains errors. Unable to save. Please check the syntax.');
    $.fn.appDebug().reloadApplication();
    return;
    }
    if (availableLanguages == undefined || availableLanguages["default"] == undefined) {
    alert('The code contains errors. Unable to save. Please check the syntax.');
    $.fn.appDebug().reloadApplication();
    return;
    }
    fs.writeFile("js/languages_addon.js", data, {}, function(err) {
    if(err) {
    alert('Error: could not write data to "languages_addon.js".');
    $.fn.appDebug().reloadApplication();
    return;
    }
    $.fn.appDebug().reloadApplication();
    });
    },
    "loadLanguagesToInput": function() {
    var fs = require('fs');
    fs.readFile("js/languages_addon.js", {}, function(err, data) {
    if(err) {
    console.log('Error: could not read "languages_addon.js" from disk.');
    $('#debug .configureLanguages').remove();
    return;
    }
    $('#debug .configureLanguages textarea').val(data);
    });
    },
    "initLanguageSelector": function() {
    for (var k in availableLanguages) {
    if (k == "default") {
    continue;
    }
    $('#debugLanguageSelector').html(
    $('#debugLanguageSelector').html() + "\n <a href=\"#\" onclick=\"$.fn.appDebug().setLang('"+k+"');return false;\">"+k+"</a>"
    );
    }
    },
    "restoreDefaults": function() {
    var fs = require('fs');
    fs.readFile("js/languages_defaults_normal.js", {}, function(err, data) {
    if(err) {
    console.log('Error: could not read "languages_defaults_normal.js" from disk.');
    $('#debug .configureLanguages').remove();
    return;
    }
    fs.writeFile("js/languages_addon.js", data, {}, function(err) {
    if(err) {
    alert('Error: could not write data to "languages_addon.js".');
    $.fn.appDebug().reloadApplication();
    return;
    }
    $.fn.appDebug().reloadApplication();
    });
    });
    },
    "toggleHistory": function(a) {
    $('#debug-a-issues').removeClass("active");
    $('#debug-a-session').removeClass("active");
    $('#debug .configureLanguages').hide();
    $('#debug-known-issues').hide();
    $('#debug .userdata').hide();
    if (a.hasClass("active")) {
    a.removeClass("active");
    $('#nwiframe-trace-wrapper').hide();
    } else {
    a.addClass("active");
    $('#nwiframe-trace-wrapper').show();
    }
    },
    "toggleIssues": function(a) {
    $('#debug-a-session').removeClass("active");
    $('#debug-a-history').removeClass("active");
    $('#debug .configureLanguages').hide();
    $('#debug .userdata').hide();
    $('#nwiframe-trace-wrapper').hide();
    if (a.hasClass("active")) {
    a.removeClass("active");
    $('#debug-known-issues').hide();
    } else {
    a.addClass("active");
    $('#debug-known-issues').show();
    }
    },
    "reloadApplication": function() {
    gui.App.clearCache();
    win.reloadIgnoringCache();
    },
    "clearCache": function() {
    gui.App.clearCache();
    },
    "reloadFrame": function() {
    var i = $("#nwiframe");
    var src = i.attr("src");
    i.attr("src", "about:blank;");
    setTimeout(function(){i.attr("src", src); }, 1);
    },
    "setLang": function(lang) {
    setLanguage(lang);
    initDom();
    }
    };
    }
    });


    js/languages_addon.js



    // list of languages that are available.
    // Other languages will be redirected to the default language instance
    availableLanguages = {
    "xx": "http://test.anno-online.com/en-XX/partner/uplay/home",
    "lo": "http://ao-de-trunk-jan.bbtest/partner/uplay/home",
    "de": "http://de.anno-online.com/de/partner/uplay/home",
    "dk": "http://dk.anno-online.com/da/partner/uplay/home",
    "hu": "http://hu.anno-online.com/hu/partner/uplay/home",
    "gb": "http://en.anno-online.com/en-GB/partner/uplay/home",
    "en": "http://en.anno-online.com/en-GB/partner/uplay/home",
    "nl": "http://en.anno-online.com/nl-NL/partner/uplay/home",
    "us": "http://us.anno-online.com/en-US/partner/uplay/home",
    "es": "http://us.anno-online.com/es-ES/partner/uplay/home",
    "pl": "http://pl.anno-online.com/pl-PL/partner/uplay/home",
    "cz": "http://pl.anno-online.com/cs-CZ/partner/uplay/home",
    "fr": "http://fr.anno-online.com/fr-FR/partner/uplay/home",
    "it": "http://fr.anno-online.com/it-IT/partner/uplay/home",
    "ru": "http://ru.anno-online.com/ru/partner/uplay/home",
    "default": "en"
    };


    js/languages_defaults_addon.js


    // list of languages that are available.
    // Other languages will be redirected to the default language instance
    availableLanguages = {
    "xx": "http://test.anno-online.com/en-XX/partner/uplay/home",
    "lo": "http://ao-de-trunk-jan.bbtest/partner/uplay/home",
    "de": "http://de.anno-online.com/de/partner/uplay/home",
    "dk": "http://dk.anno-online.com/da/partner/uplay/home",
    "hu": "http://hu.anno-online.com/hu/partner/uplay/home",
    "gb": "http://en.anno-online.com/en-GB/partner/uplay/home",
    "en": "http://en.anno-online.com/en-GB/partner/uplay/home",
    "nl": "http://en.anno-online.com/nl-NL/partner/uplay/home",
    "us": "http://us.anno-online.com/en-US/partner/uplay/home",
    "es": "http://us.anno-online.com/es-ES/partner/uplay/home",
    "pl": "http://pl.anno-online.com/pl-PL/partner/uplay/home",
    "cz": "http://pl.anno-online.com/cs-CZ/partner/uplay/home",
    "fr": "http://fr.anno-online.com/fr-FR/partner/uplay/home",
    "it": "http://fr.anno-online.com/it-IT/partner/uplay/home",
    "ru": "http://ru.anno-online.com/ru/partner/uplay/home",
    "default": "en"
    };


    js/localization.js

    localization = {
    "h1_options": {
    "de": "Optionen",
    "en": "Options",
    "us": "Options",
    "cz": "Nastavení",
    "dk": "Muligheder",
    "es": "Opciones",
    "fr": "Options",
    "hu": "Beállítások",
    "it": "Opzioni",
    "nl": "Opties",
    "pl": "Opcje",
    "ru": "Настройки"
    },
    "p_options_intro": {
    "de": "Hier kannst du Einstellungen für die Steam-App vornehmen. Beachte, dass du Einstellungen für das Spiel nur direkt im Spiel vornehmen kannst!",
    "en": "Here you can configure this Steam app. Please keep in mind that you can configure the game itself from inside the game!",
    "us": "Here you can configure this Steam app. Please keep in mind that you can configure the game itself from inside the game!",
    "cz": "Zde si můžete upravit nastavení této Steam aplikace. Mějte na paměti, že to samé můžete nastavit i ve hře samotné!",
    "dk": "Her kan du konfigurere denne Steam-app. Bemærk venligst, at du kan konfigurere selve spillet inde i spillet!",
    "es": "Aquí puedes configurar esta aplicación de Steam. ¡Recuerda que también puedes cambiar estas opciones en el juego!",
    "fr": "Ici, vous pouvez configurer cette application Steam. Accédez au jeu pour en modifier les paramètres.",
    "hu": "Itt a Steam alkalmazás beállításait adhatod meg. Ne feledd, hogy a játékot a szoftveren belül konfigurálhatod.",
    "it": "Qui puoi configurare questa app Steam. Ricorda che puoi configurare il gioco dal suo interno!",
    "nl": "Hier kun je de Steam-app configureren. De game configureer je vanuit de game zelf.",
    "pl": "W tym miejscu możesz skonfigurować tę aplikację na Steamie. Prosimy pamiętać, że opcje konfiguracyjne dotyczące gry znajdują się w niej samej!",
    "ru": "Здесь вы можете настроить данное приложение Steam. Не забывайте, что игру можно настроить в самой игре!"
    },
    "h2_zoom": {
    "de": "Zoom",
    "en": "Zoom",
    "us": "Zoom",
    "cz": "Přiblížení",
    "dk": "Zoom",
    "es": "Zoom",
    "fr": "Zoom",
    "hu": "Nagyítás",
    "it": "Zoom",
    "nl": "Zoomen",
    "pl": "Przybliżenie",
    "ru": "Приближение"
    },
    "p_zoom": {
    "de": "Wähle eine Zoomstufe:",
    "en": "Choose a zoom level:",
    "us": "Choose a zoom level:",
    "cz": "Vyberte úroveň přiblížení:",
    "dk": "Vælg et zoom-niveau:",
    "es": "Elige nivel de zoom:",
    "fr": "Choisissez un niveau de zoom :",
    "hu": "Válassz nagyítási szintet",
    "it": "Scegli un livello di zoom:",
    "nl": "Kies een zoomniveau:",
    "pl": "Proszę wybrać poziom przybliżenia:",
    "ru": "Выберите уровень приближения:"
    },
    "span_zoom_standard": {
    "de": "Standard",
    "en": "Standard",
    "us": "Standard",
    "cz": "Standardní",
    "dk": "Standard",
    "es": "Normal",
    "fr": "Normal",
    "hu": "Normál",
    "it": "Standard",
    "nl": "Standaard",
    "pl": "Standardowy",
    "ru": "Обычный"
    },
    "span_zoom_bigger": {
    "de": "Größer",
    "en": "Bigger",
    "us": "Bigger",
    "cz": "Větší",
    "dk": "Større",
    "es": "Cerca",
    "fr": "Plus grand",
    "hu": "Nagyobb",
    "it": "Più grande",
    "nl": "Groter",
    "pl": "Większy",
    "ru": "Больше"
    },
    "span_zoom_very_big": {
    "de": "Sehr groß",
    "en": "Very big",
    "us": "Very big",
    "cz": "Ještě větší",
    "dk": "Meget stort",
    "es": "Muy cerca",
    "fr": "Très grand",
    "hu": "Nagyon nagy",
    "it": "Molto grande",
    "nl": "Erg groot",
    "pl": "Bardzo duży",
    "ru": "Очень большой"
    },
    "h2_background": {
    "de": "Hintergrund",
    "en": "Background",
    "us": "Background",
    "cz": "Pozadí",
    "dk": "Baggrund",
    "es": "Fondo",
    "fr": "Arrière-plan",
    "hu": "Háttér",
    "it": "Sfondo",
    "nl": "Achtergrond",
    "pl": "Tło",
    "ru": "Фон"
    },
    "p_background": {
    "de": "Wähle ein Hintergrundbild:",
    "en": "Choose a background image:",
    "us": "Choose a background image:",
    "cz": "Vyberte obrázek do pozadí:",
    "dk": "Vælg et baggrundsbillede:",
    "es": "Elige una imagen de fondo:",
    "fr": "Choisissez une image d'arrière-plan :",
    "hu": "Válassz háttérképet:",
    "it": "Scegli un'immagine di sfondo:",
    "nl": "Kies een achtergrondafbeelding:",
    "pl": "Wybierz obrazek w tle:",
    "ru": "Выберите фоновое изображение:"
    },
    "span_options_close_apply": {
    "de": "Annehmen",
    "en": "Apply",
    "us": "Apply",
    "cz": "Použít",
    "dk": "Anvend",
    "es": "Aplicar",
    "fr": "Appliquer",
    "hu": "Alkalmazás",
    "it": "Applica",
    "nl": "Toepassen",
    "pl": "Zastosuj",
    "ru": "Применить"
    },
    "span_options_close_cancel": {
    "de": "Abbrechen",
    "en": "Cancel",
    "us": "Cancel",
    "cz": "Storno",
    "dk": "Annullér",
    "es": "Cancelar",
    "fr": "Annuler",
    "hu": "Mégse",
    "it": "Annulla",
    "nl": "Annuleren",
    "pl": "Anuluj",
    "ru": "Отмена"
    },
    "h1_noFlash": { // Windows, Linux, Mac
    "de": "Installation",
    "en": "Setup",
    "us": "Setup",
    "cz": "Nastavení",
    "dk": "Opsætning",
    "es": "Configuración",
    "fr": "Configuration",
    "hu": "Telepítés",
    "it": "Installazione",
    "nl": "Installatie",
    "pl": "Ustawienia",
    "ru": "Настройки"
    },
    "p_noFlash_intro": { // Windows
    "de": "Dieses Spiel benötigt das Adobe Flash Player-Plugin.<br />Bitte installiere wahlweise den Adobe Flash Player<br />oder den Webbrowser „Google Chrome“.",
    "en": "This game requires the Adobe Flash Player plugin.<br />Please install either the Adobe Flash Player,<br />or the web browser \"Google Chrome\".",
    "us": "This game requires the Adobe Flash Player plugin.<br />Please install either the Adobe Flash Player,<br />or the web browser \"Google Chrome\".",
    "cz": "Hra vyžaduje plugin Adobe Flash Player.<br />Nainstalujte si, prosím, buď Adobe Flash Player<br />nebo webový prohlížeč \"Google Chrome\".",
    "dk": "Dette spil kræver et Adobe Flash Player-plugin.<br />Installér venligst enten Adobe Flash Player<br />eller internetbrowseren \"Google Chrome\".",
    "es": "Este juego necesita el plugin de Adobe Flash Player.<br />Instala Adobe Flash Player o el navegador \"Google Chrome\".",
    "fr": "Ce jeu nécessite l'extension Adobe Flash Player.<br />Installez Adobe Flash Player ou le navigateur Web Google Chrome.",
    "hu": "A játékhoz az Adobe Flash Player beépülő modul szükséges.<br />Kérjük, telepítsd az Adobe Flash Player beépülő modult vagy<br />a Google Chrome böngészőt.",
    "it": "Questo gioco richiede il plugin Adobe Flash Player.<br />Installa Adobe Flash Player o il browser web \"Google Chrome\".",
    "nl": "Voor deze game heb je de plugin Adobe Flash Player nodig.<br />Installeer Adobe Flash Player of de webbrowser Google Chrome.",
    "pl": "Ta gra wymaga wtyczki Adobe Flash Player.<br />Prosimy zainstalować wtyczkę Adobe Flash Player<br />albo przeglądarkę internetową \"Google Chrome\".",
    "ru": "Для игры необходим плагин Adobe Flash Player.<br />Установите Adobe Flash Player или обозреватель Google Chrome."
    },
    "h2_noFlash_chrome": { // Windows, Linux
    "de": "Google Chrome",
    "en": "Google Chrome",
    "us": "Google Chrome",
    "cz": "Google Chrome",
    "dk": "Google Chrome",
    "es": "Google Chrome",
    "fr": "Google Chrome",
    "hu": "Google Chrome",
    "it": "Google Chrome",
    "nl": "Google Chrome",
    "pl": "Google Chrome",
    "ru": "Google Chrome"
    },
    "p_noFlash_chrome": { // Windows
    "de": "Google Chrome enthält bereits ein Flash Player-Plugin.<br />Das Spiel funktioniert optimal, wenn du Google Chrome installierst:",
    "en": "Google Chrome comes with an embedded Flash Player plugin.<br />This game will perform best if you install Google Chrome:",
    "us": "Google Chrome comes with an embedded Flash Player plugin.<br />This game will perform best if you install Google Chrome:",
    "cz": "Google Chrome obsahuje vestavěný plugin pro přehrávání Flash.<br />Tato hra poběží nejlépe, pokud si nainstalujete Google Chrome:",
    "dk": "Google Chrome indeholder et Flash Player-plugin.<br />Dette spil spilles bedst via Google Chrome:",
    "es": "Google Chrome tiene integrado un plugin de Flash Player.<br />Este juego mejorará su rendimiento si instalas Google Chrome:",
    "fr": "L'extension Flash Player est intégrée à Google Chrome.<br />Les performances du jeu seront optimales sous Google Chrome :",
    "hu": "A Google Chrome integrált Flash Player beépülő modullal rendelkezik.<br />A játék a Google Chrome telepítése esetén nyújtja a legjobb teljesítményt:",
    "it": "Google Chrome è fornito di un plugin Flash Player integrato.<br />Questo gioco funzionerà al meglio se installerai Google Chrome:",
    "nl": "Google Chrome bevat een ingebouwde Flash Player-plugin.<br />Deze game draait het best als je Google Chrome installeert:",
    "pl": "Google Chrome zawiera wbudowaną wtyczkę Flash Player.<br />Ta gra będzie działać najlepiej, gdy zainstalujesz Google Chrome:",
    "ru": "Google Chrome оснащен встроенным плагином Flash Player.<br />Наилучшая производительность игры достигается после установки Google Chrome:"
    },
    "h2_noFlash_adobe": { // Windows, Mac
    "de": "Adobe Flash Player",
    "en": "Adobe Flash Player",
    "us": "Adobe Flash Player",
    "cz": "Adobe Flash Player",
    "dk": "Adobe Flash Player",
    "es": "Adobe Flash Player",
    "fr": "Adobe Flash Player",
    "hu": "Adobe Flash Player",
    "it": "Adobe Flash Player",
    "nl": "Adobe Flash Player",
    "pl": "Adobe Flash Player",
    "ru": "Adobe Flash Player"
    },
    "p_noFlash_adobe": { // Windows
    "de": "Wenn du Google Chrome nicht installieren möchtest,<br />installiere bitte den Adobe Flash Player:",
    "en": "If you do not want to install Google Chrome,<br />please install the Adobe Flash Player:",
    "us": "If you do not want to install Google Chrome,<br />please install the Adobe Flash Player:",
    "cz": "Pokud si Google Chrome nainstalovat nechcete,<br />nainstalujte si, prosím, Adobe Flash Player:",
    "dk": "Hvis du ikke vil bruge Google Chrome,<br />så kan du installere Adobe Flash Player:",
    "es": "Si no quieres instalar Google Chrome,<br />instala Adobe Flash Player:",
    "fr": "Si vous ne souhaitez pas installer Google Chrome,<br />veuillez installer Adobe Flash Player :",
    "hu": "Ha nem szeretnéd telepíteni a Google Chrome böngészőt, kérjük,<br />telepítsd az Adobe Flash Player beépülő modult:",
    "it": "Se non vuoi installare Google Chrome,<br />installa Adobe Flash Player:",
    "nl": "Als je Google Chrome niet wilt installeren,<br />installeer dan Adobe Flash Player:",
    "pl": "Jeśli nie chcesz instalować Google Chrome,<br />prosimy o zainstalowanie Adobe Flash Player.",
    "ru": "Если вы не хотите устанавливать Google Chrome,<br />установите Adobe Flash Player:"
    },
    "p_noFlash_restart": { // Windows, Linux, Mac
    "de": "Bitte starte nach der Installation das Spiel erneut über Steam.",
    "en": "After installation, please restart the game from Steam.",
    "us": "After installation, please restart the game from Steam.",
    "cz": "Po instalaci, prosím, restartujte hru ze Steamu.",
    "dk": "Når installationen er færdig, skal du genstarte spillet.",
    "es": "Después de la instalación, reinicia el juego desde Steam.",
    "fr": "Après l'installation, redémarrez le jeu depuis Steam.",
    "hu": "A telepítést követően indítsd újra a játékot a Steamen keresztül.",
    "it": "Dopo l'installazione, riavvia il gioco da Steam.",
    "nl": "Na de installatie herstart je de game via Steam.",
    "pl": "Po instalacji prosimy o ponowne uruchomienie gry z poziomu usługi Steam.",
    "ru": "После установки перезапустите игру из Steam."
    },
    "span_noFlash_quit": { // Windows, Linux, Mac
    "de": "Verlassen",
    "en": "Quit",
    "us": "Quit",
    "cz": "Ukončit",
    "dk": "Afslut",
    "es": "Salir",
    "fr": "Quitter",
    "hu": "Kilépés",
    "it": "Esci",
    "nl": "Stoppen",
    "pl": "Wyjdź",
    "ru": "Выйти"
    },
    "p_noFlash_linux_intro": { // Linux
    "de": "Dieses Spiel benötigt das Adobe Flash Player-Plugin von Google Chrome.<br />Bitte lade Google Chrome herunter und installiere es.<br />Es sollte sich im Verzeichnis „/opt/google/chrome“ befinden.<br />(Standard bei den meisten Linux-Distributionen, wie Ubuntu)",
    "en": "This game requires the Adobe Flash Player plugin for Google Chrome.<br />Please download and install Google Chrome.<br />It should be located in \"/opt/google/chrome\"<br/ >(default on most Linux distributions, like Ubuntu).",
    "us": "This game requires the Adobe Flash Player plugin for Google Chrome.<br />Please download and install Google Chrome.<br />It should be located in \"/opt/google/chrome\"<br/ >(default on most Linux distributions, like Ubuntu).",
    "cz": "Tato hra vyžaduje plugin Adobe Flash Player pro Google Chrome.<br />Stáhněte a nainstalujte, prosím, Google Chrome.<br />Měl by být umístěn v \"/opt/google/chrome\"<br />(standard na většině Linuxových distribucí, jako je Ubuntu).",
    "dk": "This game requires the Adobe Flash Player plugin for Google Chrome.<br />Please download and install Google Chrome.<br />It should be located in \"/opt/google/chrome\"<br/ >(default on most Linux distributions, like Ubuntu).",
    "es": "Este juego necesita el plugin de Adobe Flash Player para Google Chrome.<br />Descarga e instala Google Chrome. Debería estar en \"/opt/google/chrome\"<br />(por defecto en la mayoría de distribuciones de Linux, como Ubuntu).",
    "fr": "Ce jeu nécessite l'extension Adobe Flash Player de Google Chrome.<br />Veuillez télécharger et installer Google Chrome.<br />Il devrait se trouver à l'emplacement \"/opt/google/chrome\"<br />(par défaut sur la plupart des distributions Linux, comme Ubuntu).",
    "hu": "A játékhoz a Google Chrome Adobe Flash Player<br />beépülő modulja szükséges.<br />Kérjük, töltsd le és telepítsd a Google Chrome böngészőt.<br />A telepítés helye a következő legyen: „/opt/google/chrome”<br />(alapértelmezett célkönyvtár a legtöbb Linux-disztribúció,<br />például Ubuntu alatt).",
    "it": "Questo gioco richiede il plugin Adobe Flash Player di Google Chrome.<br />Scarica e installa Google Chrome.<br />Dovresti trovarlo in \"/opt/google/chrome\"<br />(posizione predefinita in molte distribuzioni di Linux, come Ubuntu).",
    "nl": "Voor deze game heb je de plugin Adobe Flash Player<br />van Google Chrome nodig.<br />Download en installeer Google Chrome. Je vindt het in /opt/google/chrome<br />(standaard bij de meeste versies van Linux, zoals Ubuntu).",
    "pl": "Ta gra wymaga wtyczki Adobe Flash Player,<br />dostępnej w przeglądarce Google Chrome.<br />Prosimy pobrać i zainstalować Google Chrome.<br />Przeglądarka powinna się znajdować w \"/opt/google/chrome\"<br />(ustawienie domyślne w większości dystrybucji Linuxa, takiej jak Ubuntu).",
    "ru": "Для игры необходим плагин Adobe Flash Player или Google Chrome.<br />Загрузите и установите Google Chrome.<br />Путь установки программы: \"/opt/google/chrome\"<br />(задается по умолчанию для большинства дистрибутивов Linux, например, Ubuntu)."
    },
    "p_noFlash_linux_chrome": { // Linux
    "de": "Du kannst Google Chrome auf dieser Webseite<br />herunterladen und von dort installieren:",
    "en": "You can download and install Google Chrome from this site:",
    "us": "You can download and install Google Chrome from this site:",
    "cz": "Stáhnout a nainstalovat Google Chrome můžete z této stránky:",
    "dk": "You can download and install Google Chrome from this site:",
    "es": "Puedes descargar e instalar Google Chrome aquí:",
    "fr": "Vous pouvez télécharger et installer Google Chrome depuis ce site :",
    "hu": "A Google Chrome letöltéséhez és telepítéséhez keresd fel<br />a következő webhelyet:",
    "it": "Puoi scaricare e installare Google Chrome da questo sito:",
    "nl": "Je kunt Google Chrome downloaden en installeren via deze website:",
    "pl": "Możesz pobrać i zainstalować Google Chrome z tej strony:",
    "ru": "Google Chrome можно загрузить и установить с этого сайта:"
    },
    "p_noFlash_mac_intro": { // Mac
    "de": "Dieses Spiel benötigt das Adobe Flash Player-Plugin.",
    "en": "This game requires the Adobe Flash Player plugin.",
    "us": "This game requires the Adobe Flash Player plugin.",
    "cz": "Tato hra vyžaduje plugin Adobe Flash Player.",
    "dk": "This game requires the Adobe Flash Player plugin.",
    "es": "Este juego necesita el plugin de Adobe Flash Player.",
    "fr": "Ce jeu nécessite l'extension Adobe Flash Player.",
    "hu": "A játékhoz az Adobe Flash Player beépülő modul szükséges.",
    "it": "Questo gioco richiede il plugin Adobe Flash Player.",
    "nl": "Voor deze game heb je de plugin Adobe Flash Player nodig.",
    "pl": "Ta gra wymaga wtyczki Adobe Flash Player.",
    "ru": "Для игры необходим плагин Adobe Flash Player."
    },
    "p_noFlash_mac_adobe": { // Mac
    "de": "Du kannst den Adobe Flash Player von dieser Website herunterladen<br />und von dort installieren:",
    "en": "You can download and install the Adobe Flash Player from this site:",
    "us": "You can download and install the Adobe Flash Player from this site:",
    "cz": "Stáhnout a nainstalovat Adobe Flash Player můžete z této stránky:",
    "dk": "You can download and install the Adobe Flash Player from this site:",
    "es": "Puedes descargar e instalar Adobe Flash Player aquí:",
    "fr": "Vous pouvez télécharger et installer Adobe Flash Player depuis ce site :",
    "hu": "Az Adobe Flash Player letöltéséhez és telepítéséhez keresd fel<br />a következő webhelyet:",
    "it": "Puoi scaricare e installare Adobe Flash Player da questo sito:",
    "nl": "Je kunt Adobe Flash Player downloaden en installeren via deze website:",
    "pl": "Możesz pobrać i zainstalować Adobe Flash Player z tej strony:",
    "ru": "Adobe Flash Player можно загрузить и установить с этого сайта:"
    },
    "h2_plugin": { // Windows Flash plugin options
    "de": "Plugin Settings",
    "en": "Plugin Settings",
    "us": "Plugin Settings",
    "cz": "Nastavení pluginu",
    "dk": "Plugin-indstillinger",
    "es": "Opciones de plugin",
    "fr": "Paramètres d'extension",
    "hu": "Bővítmény beállítások",
    "it": "Impostazioni plugin",
    "nl": "Plugin-instellingen",
    "pl": "Ustawienia wtyczki",
    "ru": "Настройки подключаемого модуля"
    },
    "p_plugin": { // Windows Flash plugin options
    "de": "Hier kannst du wählen, welches Flash-Plugin verwendet wird.<br />Ändere diese Einstellung, wenn du einen Fehler bekommst \"Couldn't load plug-in\".<br /><strong>Hinweis:</strong> Wenn du das Plugin wechselst, startet das Spiel neu.",
    "en": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "us": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "cz": "Zde si můžete vybrat, který Flash plugin chcete použít.<br />Pokud uvidíte chybu \"Couldn't load plug-in\", změňte toto nastavení.<br /><strong>Poznámka:</strong> Změna pluginu vyvolá restartování hry.",
    "dk": "Her kan du vælge, hvilket Flash-plugin du vil anvende.<br />Justér disse indstillinger, hvis du får fejlmeddelelsen \"Couldn't load plug-in\".<br /><strong>Bemærk:</strong> Hvis du ændrer dine plugin-indstillinger, bliver spillet genstartet.",
    "es": "Aquí puedes elegir qué plugin de Flash quieres usar.<br />Cambia esta opción si te aparece el error \"Couldn't load plug-in\".<br /><strong>Atención:</strong> si cambias el plugin se reiniciará el juego.",
    "fr": "Vous pouvez choisir ici quelle extension Flash utiliser.<br />Changez ce paramètre si vous recevez le message d'erreur suivant : \"Couldn't load plug-in\".<br /><strong>Remarque :</strong> changer d'extension provoquera le redémarrage du jeu.",
    "hu": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "it": "Qui puoi scegliere quale plugin Flash utilizzare.<br />Cambia questa impostazione se ricevi il messaggio d'errore: \"Couldn't load plug-in\".<br /><strong>Nota:</strong> cambiare plugin farà riavviare il gioco.",
    "nl": "Hier kun je kiezen welke Flash-plugin je gebruikt.<br />Pas deze instelling als je de volgende foutmelding krijgt: \"Couldn't load plug-in\".<br /><strong>Let op:</strong> als je de plugin aanpast, wordt de game opnieuw opgestart.",
    "pl": "W tym miejscu możesz określić, która z wtyczek Flash ma zostać użyta.<br />Zmień ustawienie, jeśli pojawi się komunikat o błędzie: \"Couldn't load plug-in\".<br />Ważne: Zmiana wtyczki spowoduje zrestartowanie gry.",
    "ru": "Здесь вы можете выбрать модуль Flash.<br />При получении ошибки с текстом \"Couldn't load plug-in\" измените настройки.<br />Примечание: выбор другого модуля приведет к перезапуску игры."
    },
    "span_plugin_chrome": { // Windows Flash plugin options
    "de": "Google Chrome<br />Flash-Plugin",
    "en": "Google Chrome<br />Flash plugin",
    "us": "Google Chrome<br />Flash plugin",
    "cz": "Google Chrome<br />Flash plugin",
    "dk": "Google Chrome<br />Flash plugin",
    "es": "Plugin de<br />Google Chrome",
    "fr": "Extension Google<br />Chrome Flash",
    "hu": "Google Chrome<br />Flash plugin",
    "it": "Plugin Google<br />Chrome Flash",
    "nl": "Flash-plugin<br />van Google Chrome",
    "pl": "Wtyczka Google<br />Chrome Flash",
    "ru": "Google Chrome Flash"
    },
    "span_plugin_adobe": { // Windows Flash plugin options
    "de": "Adobe Flash<br />Player-Plugin",
    "en": "Adobe Flash<br />Player plugin",
    "us": "Adobe Flash<br />Player plugin",
    "cz": "Adobe Flash<br />Player plugin",
    "dk": "Adobe Flash<br />Player plugin",
    "es": "Plugin de Adobe<br />Flash Player",
    "fr": "Extension Adobe<br />Flash Player",
    "hu": "Adobe Flash<br />Player plugin",
    "it": "Plugin Adobe<br />Flash Player",
    "nl": "Plugin van<br />Adobe Flash Player",
    "pl": "Wtyczka Adobe<br />Flash Player",
    "ru": "Adobe Flash Player"
    }
    };

    function translate(key) {
    if (localization[key] == undefined) {
    return key;
    }
    var lang = gameLanguage;
    if (localization[key][lang] == undefined) {
    lang = availableLanguages["default"];
    }
    if (localization[key][lang] == undefined) {
    return key;
    }
    return localization[key][lang];
    }


    js/localization_addon.js

    localization = {
    // Hier die Addon-Übersetzungen
    "addon_anno_homepage": {
    "de": "<a href='#' onclick=gui.Shell.openExternal('http://de.anno-online.com/de/startseite');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "en": "<a href='#' onclick=gui.Shell.openExternal('http://en.anno-online.com/en-GB/homepage');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "us": "<a href='#' onclick=gui.Shell.openExternal('http://us.anno-online.com/en-US/homepage');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "cz": "<a href='#' onclick=gui.Shell.openExternal('http://pl.anno-online.com/cs-CZ/domovsk%C3%A1-str%C3%A1nka');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "dk": "<a href='#' onclick=gui.Shell.openExternal('http://dk.anno-online.com/da/hjemmeside');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "es": "<a href='#' onclick=gui.Shell.openExternal('http://us.anno-online.com/es-ES/homepage');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "fr": "<a href='#' onclick=gui.Shell.openExternal('http://fr.anno-online.com/fr-FR/page-daccueil');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "hu": "<a href='#' onclick=gui.Shell.openExternal('http://hu.anno-online.com/hu/honlap');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "it": "<a href='#' onclick=gui.Shell.openExternal('http://fr.anno-online.com/it-IT/homepage');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "nl": "<a href='#' onclick=gui.Shell.openExternal('http://en.anno-online.com/nl-NL/home');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "pl": "<a href='#' onclick=gui.Shell.openExternal('http://pl.anno-online.com/pl-PL/strona-g%C5%82%C3%B3wna');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    "ru": "<a href='#' onclick=gui.Shell.openExternal('http://ru.anno-online.com/ru/homepage');return&nbsp;false; title='Anno Online - Homepage'><div class='button anno'></div></a>",
    },
    "addon_anno_update": {
    "de": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Forenpost einsehen. Jetzt auf Updates prüfen!'><div class='button anno'></div></a>",
    "en": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "us": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "cz": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "dk": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "es": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "fr": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "hu": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "it": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "nl": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "pl": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    "ru": "<a href='#' onclick=gui.Shell.openExternal('http://forum.de.anno-online.com/threads/43748-AOA-Guide');return&nbsp;false; title='Visit BoardThread. Checking for Updates!'><div class='button anno'></div></a>",
    },
    "addon_return": {
    "de": "Zum Hauptmenu zurückkehren",
    "en": "Return to the Main-Menu",
    "us": "Return to the Main-Menu",
    "cz": "Return to the Main-Menu",
    "dk": "Return to the Main-Menu",
    "es": "Return to the Main-Menu",
    "fr": "Return to the Main-Menu",
    "hu": "Return to the Main-Menu",
    "it": "Return to the Main-Menu",
    "nl": "Return to the Main-Menu",
    "pl": "Return to the Main-Menu",
    "ru": "Return to the Main-Menu",
    },
    "addon_open_normal": {
    "de": "<a class=addon-normal href=index_normal.html title='Öffnet den Non-Steam-Client'>Normal</a>",
    "en": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "us": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "cz": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "dk": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "es": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "fr": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "hu": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "it": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "nl": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "pl": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    "ru": "<a class=addon-normal href=index_normal.html title='Opens the Non-Steam-Client'>Normal</a>",
    },
    "addon_open_normal_mini": {
    "de": "<a class=addon-normal-mini href=index_normal_mini.html title='Öffnet den Non-Steam-Client'>Normal Mini</a>",
    "en": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "us": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "cz": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "dk": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "es": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "fr": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "hu": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "it": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "nl": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "pl": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    "ru": "<a class=addon-normal-mini href=index_normal_mini.html title='Opens the Non-Steam-Client'>Normal Mini</a>",
    },
    "addon_open_steam": {
    "de": "<a class=addon-steam href=index_steam.html title=Öffnet&nbsp;den&nbsp;Steam-Client>Steam</a>",
    "en": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "us": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "cz": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "dk": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "es": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "fr": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "hu": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "it": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "nl": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "pl": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>",
    "ru": "<a class=addon-steam href=index_steam.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam</a>"
    },
    "addon_open_steam_mini": {
    "de": "<a class=addon-steam-mini href=index_steam_mini.html title=Öffnet&nbsp;den&nbsp;Steam-Client>Steam Mini</a>",
    "en": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "us": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "cz": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "dk": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "es": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "fr": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "hu": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "it": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "nl": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "pl": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>",
    "ru": "<a class=addon-steam-mini href=index_steam_mini.html title=Opens&nbsp;the&nbsp;Steam-Client>Steam Mini</a>"
    },

    // Hier die Normalen-Übersetzungen
    "h1_options": {
    "de": "Optionen",
    "en": "Options",
    "us": "Options",
    "cz": "Nastavení",
    "dk": "Muligheder",
    "es": "Opciones",
    "fr": "Options",
    "hu": "Beállítások",
    "it": "Opzioni",
    "nl": "Opties",
    "pl": "Opcje",
    "ru": "Настройки"
    },
    "p_options_intro": {
    "de": "Hier kannst du Einstellungen für die App vornehmen. Beachte, dass du Einstellungen für das Spiel nur direkt im Spiel vornehmen kannst!",
    "en": "Here you can configure this app. Please keep in mind that you can configure the game itself from inside the game!",
    "us": "Here you can configure this app. Please keep in mind that you can configure the game itself from inside the game!",
    "cz": "Zde si můžete upravit nastavení této aplikace. Mějte na paměti, že to samé můžete nastavit i ve hře samotné!",
    "dk": "Her kan du konfigurere denne app. Bemærk venligst, at du kan konfigurere selve spillet inde i spillet!",
    "es": "Aquí puedes configurar esta aplicación. ¡Recuerda que también puedes cambiar estas opciones en el juego!",
    "fr": "Ici, vous pouvez configurer cette application. Accédez au jeu pour en modifier les paramètres.",
    "hu": "Itt a alkalmazás beállításait adhatod meg. Ne feledd, hogy a játékot a szoftveren belül konfigurálhatod.",
    "it": "Qui puoi configurare questa app. Ricorda che puoi configurare il gioco dal suo interno!",
    "nl": "Hier kun je de app configureren. De game configureer je vanuit de game zelf.",
    "pl": "W tym miejscu możesz skonfigurować tę aplikację. Prosimy pamiętać, że opcje konfiguracyjne dotyczące gry znajdują się w niej samej!",
    "ru": "Здесь вы можете настроить данное приложение. Не забывайте, что игру можно настроить в самой игре!"
    },
    "h2_zoom": {
    "de": "Zoom",
    "en": "Zoom",
    "us": "Zoom",
    "cz": "Přiblížení",
    "dk": "Zoom",
    "es": "Zoom",
    "fr": "Zoom",
    "hu": "Nagyítás",
    "it": "Zoom",
    "nl": "Zoomen",
    "pl": "Przybliżenie",
    "ru": "Приближение"
    },
    "p_zoom": {
    "de": "Wähle eine Zoomstufe:",
    "en": "Choose a zoom level:",
    "us": "Choose a zoom level:",
    "cz": "Vyberte úroveň přiblížení:",
    "dk": "Vælg et zoom-niveau:",
    "es": "Elige nivel de zoom:",
    "fr": "Choisissez un niveau de zoom :",
    "hu": "Válassz nagyítási szintet",
    "it": "Scegli un livello di zoom:",
    "nl": "Kies een zoomniveau:",
    "pl": "Proszę wybrać poziom przybliżenia:",
    "ru": "Выберите уровень приближения:"
    },
    "span_zoom_standard": {
    "de": "Standard",
    "en": "Standard",
    "us": "Standard",
    "cz": "Standardní",
    "dk": "Standard",
    "es": "Normal",
    "fr": "Normal",
    "hu": "Normál",
    "it": "Standard",
    "nl": "Standaard",
    "pl": "Standardowy",
    "ru": "Обычный"
    },
    "span_zoom_bigger": {
    "de": "Größer",
    "en": "Bigger",
    "us": "Bigger",
    "cz": "Větší",
    "dk": "Større",
    "es": "Cerca",
    "fr": "Plus grand",
    "hu": "Nagyobb",
    "it": "Più grande",
    "nl": "Groter",
    "pl": "Większy",
    "ru": "Больше"
    },
    "span_zoom_very_big": {
    "de": "Sehr groß",
    "en": "Very big",
    "us": "Very big",
    "cz": "Ještě větší",
    "dk": "Meget stort",
    "es": "Muy cerca",
    "fr": "Très grand",
    "hu": "Nagyon nagy",
    "it": "Molto grande",
    "nl": "Erg groot",
    "pl": "Bardzo duży",
    "ru": "Очень большой"
    },
    "h2_background": {
    "de": "Hintergrund",
    "en": "Background",
    "us": "Background",
    "cz": "Pozadí",
    "dk": "Baggrund",
    "es": "Fondo",
    "fr": "Arrière-plan",
    "hu": "Háttér",
    "it": "Sfondo",
    "nl": "Achtergrond",
    "pl": "Tło",
    "ru": "Фон"
    },
    "p_background": {
    "de": "Wähle ein Hintergrundbild:",
    "en": "Choose a background image:",
    "us": "Choose a background image:",
    "cz": "Vyberte obrázek do pozadí:",
    "dk": "Vælg et baggrundsbillede:",
    "es": "Elige una imagen de fondo:",
    "fr": "Choisissez une image d'arrière-plan :",
    "hu": "Válassz háttérképet:",
    "it": "Scegli un'immagine di sfondo:",
    "nl": "Kies een achtergrondafbeelding:",
    "pl": "Wybierz obrazek w tle:",
    "ru": "Выберите фоновое изображение:"
    },
    "span_options_close_apply": {
    "de": "Annehmen",
    "en": "Apply",
    "us": "Apply",
    "cz": "Použít",
    "dk": "Anvend",
    "es": "Aplicar",
    "fr": "Appliquer",
    "hu": "Alkalmazás",
    "it": "Applica",
    "nl": "Toepassen",
    "pl": "Zastosuj",
    "ru": "Применить"
    },
    "span_options_close_cancel": {
    "de": "Abbrechen",
    "en": "Cancel",
    "us": "Cancel",
    "cz": "Storno",
    "dk": "Annullér",
    "es": "Cancelar",
    "fr": "Annuler",
    "hu": "Mégse",
    "it": "Annulla",
    "nl": "Annuleren",
    "pl": "Anuluj",
    "ru": "Отмена"
    },
    "h1_noFlash": {
    "de": "Installation",
    "en": "Setup",
    "us": "Setup",
    "cz": "Nastavení",
    "dk": "Opsætning",
    "es": "Configuración",
    "fr": "Configuration",
    "hu": "Telepítés",
    "it": "Installazione",
    "nl": "Installatie",
    "pl": "Ustawienia",
    "ru": "Настройки"
    },
    "p_noFlash_intro": {
    "de": "Dieses Spiel benötigt das Adobe Flash Player-Plugin.<br />Bitte installiere wahlweise den Adobe Flash Player<br />oder den Webbrowser „Google Chrome“.",
    "en": "This game requires the Adobe Flash Player plugin.<br />Please install either the Adobe Flash Player,<br />or the web browser \"Google Chrome\".",
    "us": "This game requires the Adobe Flash Player plugin.<br />Please install either the Adobe Flash Player,<br />or the web browser \"Google Chrome\".",
    "cz": "Hra vyžaduje plugin Adobe Flash Player.<br />Nainstalujte si, prosím, buď Adobe Flash Player<br />nebo webový prohlížeč \"Google Chrome\".",
    "dk": "Dette spil kræver et Adobe Flash Player-plugin.<br />Installér venligst enten Adobe Flash Player<br />eller internetbrowseren \"Google Chrome\".",
    "es": "Este juego necesita el plugin de Adobe Flash Player.<br />Instala Adobe Flash Player o el navegador \"Google Chrome\".",
    "fr": "Ce jeu nécessite l'extension Adobe Flash Player.<br />Installez Adobe Flash Player ou le navigateur Web Google Chrome.",
    "hu": "A játékhoz az Adobe Flash Player beépülő modul szükséges.<br />Kérjük, telepítsd az Adobe Flash Player beépülő modult vagy<br />a Google Chrome böngészőt.",
    "it": "Questo gioco richiede il plugin Adobe Flash Player.<br />Installa Adobe Flash Player o il browser web \"Google Chrome\".",
    "nl": "Voor deze game heb je de plugin Adobe Flash Player nodig.<br />Installeer Adobe Flash Player of de webbrowser Google Chrome.",
    "pl": "Ta gra wymaga wtyczki Adobe Flash Player.<br />Prosimy zainstalować wtyczkę Adobe Flash Player<br />albo przeglądarkę internetową \"Google Chrome\".",
    "ru": "Для игры необходим плагин Adobe Flash Player.<br />Установите Adobe Flash Player или обозреватель Google Chrome."
    },
    "h2_noFlash_chrome": {
    "de": "Google Chrome",
    "en": "Google Chrome",
    "us": "Google Chrome",
    "cz": "Google Chrome",
    "dk": "Google Chrome",
    "es": "Google Chrome",
    "fr": "Google Chrome",
    "hu": "Google Chrome",
    "it": "Google Chrome",
    "nl": "Google Chrome",
    "pl": "Google Chrome",
    "ru": "Google Chrome"
    },
    "p_noFlash_chrome": {
    "de": "Google Chrome enthält bereits ein Flash Player-Plugin.<br />Das Spiel funktioniert optimal, wenn du Google Chrome installierst:",
    "en": "Google Chrome comes with an embedded Flash Player plugin.<br />This game will perform best if you install Google Chrome:",
    "us": "Google Chrome comes with an embedded Flash Player plugin.<br />This game will perform best if you install Google Chrome:",
    "cz": "Google Chrome obsahuje vestavěný plugin pro přehrávání Flash.<br />Tato hra poběží nejlépe, pokud si nainstalujete Google Chrome:",
    "dk": "Google Chrome indeholder et Flash Player-plugin.<br />Dette spil spilles bedst via Google Chrome:",
    "es": "Google Chrome tiene integrado un plugin de Flash Player.<br />Este juego mejorará su rendimiento si instalas Google Chrome:",
    "fr": "L'extension Flash Player est intégrée à Google Chrome.<br />Les performances du jeu seront optimales sous Google Chrome :",
    "hu": "A Google Chrome integrált Flash Player beépülő modullal rendelkezik.<br />A játék a Google Chrome telepítése esetén nyújtja a legjobb teljesítményt:",
    "it": "Google Chrome è fornito di un plugin Flash Player integrato.<br />Questo gioco funzionerà al meglio se installerai Google Chrome:",
    "nl": "Google Chrome bevat een ingebouwde Flash Player-plugin.<br />Deze game draait het best als je Google Chrome installeert:",
    "pl": "Google Chrome zawiera wbudowaną wtyczkę Flash Player.<br />Ta gra będzie działać najlepiej, gdy zainstalujesz Google Chrome:",
    "ru": "Google Chrome оснащен встроенным плагином Flash Player.<br />Наилучшая производительность игры достигается после установки Google Chrome:"
    },
    "h2_noFlash_adobe": {
    "de": "Adobe Flash Player",
    "en": "Adobe Flash Player",
    "us": "Adobe Flash Player",
    "cz": "Adobe Flash Player",
    "dk": "Adobe Flash Player",
    "es": "Adobe Flash Player",
    "fr": "Adobe Flash Player",
    "hu": "Adobe Flash Player",
    "it": "Adobe Flash Player",
    "nl": "Adobe Flash Player",
    "pl": "Adobe Flash Player",
    "ru": "Adobe Flash Player"
    },
    "p_noFlash_adobe": {
    "de": "Wenn du Google Chrome nicht installieren möchtest,<br />installiere bitte den Adobe Flash Player:",
    "en": "If you do not want to install Google Chrome,<br />please install the Adobe Flash Player:",
    "us": "If you do not want to install Google Chrome,<br />please install the Adobe Flash Player:",
    "cz": "Pokud si Google Chrome nainstalovat nechcete,<br />nainstalujte si, prosím, Adobe Flash Player:",
    "dk": "Hvis du ikke vil bruge Google Chrome,<br />så kan du installere Adobe Flash Player:",
    "es": "Si no quieres instalar Google Chrome,<br />instala Adobe Flash Player:",
    "fr": "Si vous ne souhaitez pas installer Google Chrome,<br />veuillez installer Adobe Flash Player :",
    "hu": "Ha nem szeretnéd telepíteni a Google Chrome böngészőt, kérjük,<br />telepítsd az Adobe Flash Player beépülő modult:",
    "it": "Se non vuoi installare Google Chrome,<br />installa Adobe Flash Player:",
    "nl": "Als je Google Chrome niet wilt installeren,<br />installeer dan Adobe Flash Player:",
    "pl": "Jeśli nie chcesz instalować Google Chrome,<br />prosimy o zainstalowanie Adobe Flash Player.",
    "ru": "Если вы не хотите устанавливать Google Chrome,<br />установите Adobe Flash Player:"
    },
    "p_noFlash_restart": {
    "de": "Bitte starte nach der Installation das Spiel erneut.",
    "en": "After installation, please restart the game.",
    "us": "After installation, please restart the game.",
    "cz": "Po instalaci, prosím, restartujte hru.",
    "dk": "Når installationen er færdig, skal du genstarte spillet.",
    "es": "Después de la instalación, reinicia el juego.",
    "fr": "Après l'installation, redémarrez le jeu.",
    "hu": "A telepítést követően indítsd újra a játékot keresztül.",
    "it": "Dopo l'installazione, riavvia il gioco.",
    "nl": "Na de installatie herstart je de game.",
    "pl": "Po instalacji prosimy o ponowne uruchomienie gry.",
    "ru": "После установки перезапустите игру."
    },
    "span_noFlash_quit": {
    "de": "Verlassen",
    "en": "Quit",
    "us": "Quit",
    "cz": "Ukončit",
    "dk": "Afslut",
    "es": "Salir",
    "fr": "Quitter",
    "hu": "Kilépés",
    "it": "Esci",
    "nl": "Stoppen",
    "pl": "Wyjdź",
    "ru": "Выйти"
    },
    "h2_plugin": { // Windows Flash plugin options
    "de": "Plugin Settings",
    "en": "Plugin Settings",
    "us": "Plugin Settings",
    "cz": "Nastavení pluginu",
    "dk": "Plugin-indstillinger",
    "es": "Opciones de plugin",
    "fr": "Paramètres d'extension",
    "hu": "Bővítmény beállítások",
    "it": "Impostazioni plugin",
    "nl": "Plugin-instellingen",
    "pl": "Ustawienia wtyczki",
    "ru": "Настройки подключаемого модуля"
    },
    "p_plugin": { // Windows Flash plugin options
    "de": "Hier kannst du wählen, welches Flash-Plugin verwendet wird.<br />Ändere diese Einstellung, wenn du einen Fehler bekommst \"Couldn't load plug-in\".<br /><strong>Hinweis:</strong> Wenn du das Plugin wechselst, startet das Spiel neu.",
    "en": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "us": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "cz": "Zde si můžete vybrat, který Flash plugin chcete použít.<br />Pokud uvidíte chybu \"Couldn't load plug-in\", změňte toto nastavení.<br /><strong>Poznámka:</strong> Změna pluginu vyvolá restartování hry.",
    "dk": "Her kan du vælge, hvilket Flash-plugin du vil anvende.<br />Justér disse indstillinger, hvis du får fejlmeddelelsen \"Couldn't load plug-in\".<br /><strong>Bemærk:</strong> Hvis du ændrer dine plugin-indstillinger, bliver spillet genstartet.",
    "es": "Aquí puedes elegir qué plugin de Flash quieres usar.<br />Cambia esta opción si te aparece el error \"Couldn't load plug-in\".<br /><strong>Atención:</strong> si cambias el plugin se reiniciará el juego.",
    "fr": "Vous pouvez choisir ici quelle extension Flash utiliser.<br />Changez ce paramètre si vous recevez le message d'erreur suivant : \"Couldn't load plug-in\".<br /><strong>Remarque :</strong> changer d'extension provoquera le redémarrage du jeu.",
    "hu": "Here you can choose which Flash plugin to use.<br />Change this setting if you get an error \"Couldn't load plug-in\".<br /><strong>Note:</strong> Changing the plugin will trigger a restart of the game.",
    "it": "Qui puoi scegliere quale plugin Flash utilizzare.<br />Cambia questa impostazione se ricevi il messaggio d'errore: \"Couldn't load plug-in\".<br /><strong>Nota:</strong> cambiare plugin farà riavviare il gioco.",
    "nl": "Hier kun je kiezen welke Flash-plugin je gebruikt.<br />Pas deze instelling als je de volgende foutmelding krijgt: \"Couldn't load plug-in\".<br /><strong>Let op:</strong> als je de plugin aanpast, wordt de game opnieuw opgestart.",
    "pl": "W tym miejscu możesz określić, która z wtyczek Flash ma zostać użyta.<br />Zmień ustawienie, jeśli pojawi się komunikat o błędzie: \"Couldn't load plug-in\".<br />Ważne: Zmiana wtyczki spowoduje zrestartowanie gry.",
    "ru": "Здесь вы можете выбрать модуль Flash.<br />При получении ошибки с текстом \"Couldn't load plug-in\" измените настройки.<br />Примечание: выбор другого модуля приведет к перезапуску игры."
    },
    "span_plugin_chrome": { // Windows Flash plugin options
    "de": "Google Chrome<br />Flash-Plugin",
    "en": "Google Chrome<br />Flash plugin",
    "us": "Google Chrome<br />Flash plugin",
    "cz": "Google Chrome<br />Flash plugin",
    "dk": "Google Chrome<br />Flash plugin",
    "es": "Plugin de<br />Google Chrome",
    "fr": "Extension Google<br />Chrome Flash",
    "hu": "Google Chrome<br />Flash plugin",
    "it": "Plugin Google<br />Chrome Flash",
    "nl": "Flash-plugin<br />van Google Chrome",
    "pl": "Wtyczka Google<br />Chrome Flash",
    "ru": "Google Chrome Flash"
    },
    "span_plugin_adobe": { // Windows Flash plugin options
    "de": "Adobe Flash<br />Player-Plugin",
    "en": "Adobe Flash<br />Player plugin",
    "us": "Adobe Flash<br />Player plugin",
    "cz": "Adobe Flash<br />Player plugin",
    "dk": "Adobe Flash<br />Player plugin",
    "es": "Plugin de Adobe<br />Flash Player",
    "fr": "Extension Adobe<br />Flash Player",
    "hu": "Adobe Flash<br />Player plugin",
    "it": "Plugin Adobe<br />Flash Player",
    "nl": "Plugin van<br />Adobe Flash Player",
    "pl": "Wtyczka Adobe<br />Flash Player",
    "ru": "Adobe Flash Player"
    },

    // Help section:
    "title_help": {
    "de": "Hilfe",
    "en": "Help",
    "us": "Help",
    "cz": "Nápověda",
    "dk": "Hjælp",
    "es": "Ayuda",
    "fr": "Aide",
    "hu": "Súgó",
    "it": "Aiuto",
    "nl": "Hulp",
    "pl": "Pomoc",
    "ru": "Справка"
    },
    "h1_help": {
    "de": "Technische Hilfe",
    "en": "Technical help",
    "us": "Technical help",
    "cz": "Technická podpora",
    "dk": "Teknisk hjælp",
    "es": "Soporte técnico",
    "fr": "Aide technique",
    "hu": "Technikai segítségnyújtás",
    "it": "Assistenza tecnica",
    "nl": "Technische ondersteuning",
    "pl": "Pomoc techniczna",
    "ru": "Техническая поддержка"
    },
    "p_help_text": {
    "de": "Bei technischen Problemen mit dieser \"Anno Online\" Anwendung können wir dir unter folgendem Link Hilfe anbieten:",
    "en": "In case of a technical issue with this \"Anno Online\" client, we can offer you support if you click on this link:",
    "us": "In case of a technical issue with this \"Anno Online\" client, we can offer you support if you click on this link:",
    "cz": "V případě technických potíží s tímto klientem hry \"Anno Online\" vám můžeme nabídnout podporu na tomto odkaze:",
    "dk": "Hvis du har tekniske problemer med denne \"Anno Online\"-klient, kan vi tilbyde teknisk support, hvis du klikker på dette link:",
    "es": "En caso de problema técnico con este cliente de \"Anno Online\", haz clic en el siguiente enlace para que podamos ayudarte:",
    "fr": "En cas de problème technique avec ce client \"Anno Online\", cliquez sur le lien suivant pour bénéficier d'une aide :",
    "hu": "Ha technikai probléma merül fel az Anno Online klienssel kapcsolatban, az alábbi linkre kattintva kérhet segítséget:",
    "it": "Nel caso si verifichino problemi tecnici con il client di \"Anno Online\", clicca su questo link per ottenere supporto:",
    "nl": "Heb je technische problemen met deze 'Anno Online'-client? Klik dan op deze link voor hulp:",
    "pl": "W wypadku wystąpienia problemów technicznych z tym klientem \"Anno Online\", możemy ci pomóc, jeśli klikniesz na ten link:",
    "ru": "В случае возникновения проблем с клиентом игры \"Anno Онлайн\" наша служба поддержки сможет вам помочь, если вы перейдете по этой ссылке:"
    },
    "a_help_link": {
    "de": "Technische Hilfe öffnen",
    "en": "Open technical help",
    "us": "Open technical help",
    "cz": "Otevřít technickou podporu",
    "dk": "Åbn teknisk hjælp",
    "es": "Abrir soporte técnico",
    "fr": "Ouvrir l'aide technique",
    "hu": "Technika súgó megnyitása",
    "it": "Apri assistenza tecnica",
    "nl": "Technische ondersteuning openen",
    "pl": "Otwórz pomoc techniczną",
    "ru": "На страницу технической поддержки"
    },
    "button_help_close": {
    "de": "Schließen",
    "en": "Close",
    "us": "Close",
    "cz": "Zavřít",
    "dk": "Luk",
    "es": "Cerrar",
    "fr": "Fermer",
    "hu": "Bezárás",
    "it": "Chiudi",
    "nl": "Sluiten",
    "pl": "Zamknij",
    "ru": "закрыть"
    },


    // Update mechanism:
    "title_update": {
    "de": "Update",
    "en": "Update",
    "us": "Update",
    "cz": "Update",
    "dk": "Update",
    "es": "Update",
    "fr": "Update",
    "hu": "Update",
    "it": "Update",
    "nl": "Update",
    "pl": "Zmodernizować",
    "ru": "Обновить"
    },
    "h1_update": {
    "de": "Update benötigt",
    "en": "Update required",
    "us": "Update required",
    "cz": "Vyžadována aktualizace",
    "dk": "Opdatering påkrævet",
    "es": "Actualización requerida",
    "fr": "Mise à jour requise",
    "hu": "Frissítés szükséges",
    "it": "Aggiornamento richiesto",
    "nl": "Update vereist",
    "pl": "Wymagana aktualizacja",
    "ru": "Рекомендуется обновить игру"
    },
    // Update mechanism:
    "p_update_intro": {
    "de": "Eine neue Version ist verfügbar! Bitte lade das Update herunter.",
    "en": "A new version is available! Please download the update.",
    "us": "A new version is available! Please download the update.",
    "cz": "Je dostupná nová verze! Stáhněte si, prosím, aktualizaci.",
    "dk": "En ny version er tilgængelig! Download venligst opdateringen.",
    "es": "¡Hay disponible una nueva versión! Descarga la actualización.",
    "fr": "Une nouvelle version est disponible ! Téléchargez la mise à jour.",
    "hu": "Új verzió vált elérhetővé! Kérjük, töltsd le a frissítést.",
    "it": "Una nuova versione è disponibile! Scarica l'aggiornamento.",
    "nl": "Er is een nieuwe versie beschikbaar! Download de update.",
    "pl": "Dostępna jest nowa wersja! Prosimy o pobranie uaktualnienia.",
    "ru": "Доступна новая версия! Загрузите обновление с ней!"
    },
    "button_update": {
    "de": "Update herunterladen",
    "en": "Download update",
    "us": "Download update",
    "cz": "Stáhnout aktualizaci",
    "dk": "Download opdatering",
    "es": "Descargar actualización",
    "fr": "Télécharger la MàJ",
    "hu": "Frissítés letöltése",
    "it": "Scarica aggiornamento",
    "nl": "Update downloaden",
    "pl": "Pobierz uaktualnienie",
    "ru": "Загрузить обновление"
    },
    "p_update_bottom": {
    "de": "Nachdem du das Update heruntergeladen hast, beende bitte das Spiel. Installiere dann das Update und starte das Spiel erneut.",
    "en": "After downloading the update, please exit this game. Install the update and then restart the game.",
    "us": "After downloading the update, please exit this game. Install the update and then restart the game.",
    "cz": "Po stažení aktualizace hru, prosím, ukončete. Aktualizaci nainstalujte a hru restartujte.",
    "dk": "Når du har downloadet opdateringen, skal du gå ud af spillet. Installér så opdateringen, og genstart derefter spillet.",
    "es": "Después de descargar la actualización, sal del juego. Instala la actualización y reinicia el juego.",
    "fr": "Après avoir téléchargé la mise à jour, quittez ce jeu. Installez la mise à jour puis redémarrez le jeu.",
    "hu": "A frissítés letöltése után lépj ki a játékból, majd indítsd újra a frissítés telepítését követően.",
    "it": "Dopo aver scaricato l'aggiornamento, esci dal gioco, installa l'aggiornamento e riavvia il gioco.",
    "nl": "Sluit de game af na het downloaden van de update. Installeer de update en herstart de game.",
    "pl": "Po pobraniu uaktualnienia prosimy o wyjście z gry, zainstalowanie uaktualnienia i ponowne uruchomienie gry.",
    "ru": "После загрузки обновления выйдите из игры, установите обновление и снова запустите ее."
    }
    };

    function translate(key) {
    if (localization[key] == undefined) {
    return key;
    }
    var lang = gameLanguage;
    if (localization[key][lang] == undefined) {
    lang = availableLanguages["default"];
    }
    if (localization[key][lang] == undefined) {
    return key;
    }
    return localization[key][lang];
    }


    index.html

    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
    <meta charset="utf-8"/>

    <link rel="stylesheet" href="css/styles.css"/>
    <link rel="stylesheet" href="css/debugger.css"/>

    <script src="js/jquery-2.1.3.min.js"></script>
    <script src="js/swfobject.js"></script>
    <script src="js/flashDetect.js"></script>


    <!-- Anfang - Die Scripte, die für dieses Addon entscheidend sind. -->
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    <script src="js/debugger_addon.js"></script>
    <script src="js/languages_addon.js"></script>
    <script src="js/localization_addon.js"></script>
    <link rel="stylesheet" href="css/addon.css"/>
    <!-- Ende -->


    <script>

    // globals and definitions:
    util = require("util");
    fs = require("fs");
    gui = require('nw.gui');
    win = gui.Window.get();

    flashDetect();

    appVersion = "1.0";
    appPartner = "bluebyte";
    updateVersion = null;
    updateUrl = null;
    updateCheck = true;
    iFrameUrl = '';
    languageFile = "language.dat";
    zoomLevelFile = "zoom.dat";
    backgroundFile = "background.dat";
    pluginType = undefined;
    gameLanguage = undefined;
    zoomLevel = undefined;
    currentBackground = undefined;
    oldBackground = undefined; // used for "cancel" button in options dialog
    oldZoomLevel = undefined; // used for "cancel" button in options dialog
    maxZoomLevel = 2; // number of zoom levels, starting at 0
    maxBackgrounds = 2; // number of backgrounds, starting at 0
    optionsDisplayed = false; // flag if the "Options" are opened.
    helpDisplayed = false; // flag if the "Help" layer is opened.
    gameLayerState = false; // Whether or not the GameLayer is opened.


    <!-- Anfang - Zusätze für das Steamoverlay. -->
    shopMode = false; // set to 'true' just before opening the Steam overlay with the payment url, so the Steam event listener will listen.
    overlayEnabled = false; // set to 'true' if Steam overlay is working as intended (opens).
    <!-- Ende -->


    <!-- Minimalanzahl an Scripten damit das Menu überhaupt läuft. -->
    <!-- Flash-Plugin/Cockies löschen/Sprache/Background/Startscript/Übersetzungen/Steamoverlay-Boost -->
    function readPluginType() {
    // Read plugin type from file. Defaults to "adobe".
    pluginType = "";
    try {
    pluginType = fs.readFileSync("togglePlugin.dat");
    pluginType = pluginType.toString();
    } catch(e) {}
    if (pluginType != "chrome") {
    pluginType = "adobe";
    }
    $('.plugin_span.'+pluginType).addClass('active');
    }


    // delete cookies from previous visits ...
    function removeCookie(cookie) {
    var cookieUrl = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain + cookie.path;
    if (cookieUrl.indexOf('steampowered.com') > -1 || cookieUrl.indexOf('steamcommunity.com') > -1 ) {
    if(cookie.name.indexOf('steamMachineAuth') > -1) {
    // ... but keep "Steam Guard" cookies to prevent it from triggering every time:
    return;
    }
    // remark: it is VERY IMPORTANT to also delete the steam shop's cookies. Otherwise, in case of
    // switching the user, the new user could still use the old user's login to confirm his purchases.
    // So if you change anything here regarding the cookies, please make sure the steam shop login
    // is gone once you restart the game!
    }
    if(cookie.name.indexOf('cookies_policy_accepted') > -1) {
    // ... but keep the cookie that saves the cookie policy acceptance status:
    return;
    }
    win.cookies.remove({ url: cookieUrl, name: cookie.name }, function(result) {});
    }
    win.cookies.getAll( {},
    function(cookies) {
    for (var i=0; i<cookies.length; i++) {
    removeCookie(cookies[i]);
    }
    });

    function readGameLanguage() {
    // Read language setting. If not present, map user's OS language.
    var content = "";
    try {
    content = fs.readFileSync(languageFile);
    } catch (e) {}
    if (content.length == 0) {
    initLanguage();
    } else if (content.length != 2) {
    gameLanguage = availableLanguages["default"];
    } else if (availableLanguages[content] == undefined) {
    gameLanguage = availableLanguages["default"];
    } else {
    gameLanguage = content.toString();
    }
    $("#debug_gameLanguage").text(gameLanguage);
    }

    function readZoomLevel() {
    // Read zoom level setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(zoomLevelFile);
    } catch (e) {}
    if (content.length != 1) {
    content = 0;
    }
    setZoomLevel(parseInt(content));
    }

    function setZoomLevel(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxZoomLevel) {
    n = maxZoomLevel;
    }
    if (n === zoomLevel) {
    return;
    }
    zoomLevel = n;
    win.zoomLevel = zoomLevel;
    for (var i=0; i<=maxZoomLevel; i++) {
    $('.zoom_' + i).removeClass('active');
    }
    $('.zoom_' + zoomLevel).addClass('active');
    fs.writeFileSync(zoomLevelFile, zoomLevel.toString());
    }

    function readBackground() {
    // Read background setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(backgroundFile);
    } catch(e) {}
    if (content.length != 1) {
    content = 0;
    }
    setBackground(parseInt(content));
    }

    function setBackground(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxBackgrounds) {
    n = maxBackgrounds;
    }
    if (n === currentBackground) {
    return;
    }
    currentBackground = n;
    updateBackground();
    for (var i=0; i<=maxBackgrounds; i++) {
    $('.background_' + i).removeClass('active');
    }
    $('.background_' + currentBackground).addClass('active');
    fs.writeFileSync(backgroundFile, currentBackground.toString());
    }

    function updateBackground() {
    var wrapper = $("#wrapper");
    for (var i=0; i<=maxBackgrounds; i++) {
    wrapper.removeClass('bg_'+i);
    }
    wrapper.addClass('bg_'+currentBackground);
    }

    function closeOptionsCancel() {
    if (oldBackground !== undefined && oldBackground !== currentBackground) {
    setBackground(oldBackground);
    }
    if (oldZoomLevel !== undefined && oldZoomLevel !== zoomLevel) {
    setZoomLevel(oldZoomLevel);
    }
    closeOptions();
    }

    function closeOptions() {
    if (optionsDisplayed === false) {
    return;
    }
    optionsDisplayed = false;
    $('#options-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleOptions() {
    if (optionsDisplayed === true) {
    closeOptions();
    return;
    }
    closeHelp();
    oldBackground = currentBackground;
    oldZoomLevel = zoomLevel;
    optionsDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#options-layer').show();
    }

    function closeHelp() {
    if (helpDisplayed === false) {
    return;
    }
    helpDisplayed = false;
    $('#help-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleHelp() {
    if (helpDisplayed === true) {
    closeHelp();
    return;
    }
    closeOptions();
    helpDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#help-layer').show();
    }

    function openExternalHelp() {
    var url;
    if (externalHelpUrls[gameLanguage]) {
    url = externalHelpUrls[gameLanguage];
    } else {
    url = externalHelpUrls[externalHelpUrls["default"]];
    }
    gui.Shell.openExternal(url);
    }

    /**
    * Sort-of "bootstrap":
    */
    function startApplication() {
    if (!updateCheck) {
    $.fn.updateApp().checkForUpdate();
    return;
    }
    readGameLanguage();
    readZoomLevel();
    readBackground();
    if (isWindows() && pluginType == undefined) {
    readPluginType();
    }
    initDom();
    }

    // This function is being called once all variables have been loaded from the local hard disk
    // (language, security token, zoom level and background image). It then localized the text strings (see
    // localization.js) and prepares the iFrame that contains the website.
    function initDom() {
    // localize text strings (the "options" box):
    localizeContents();
    // initialize iFrame url:
    iFrameUrl = availableLanguages[gameLanguage] + '?pseudo_standaloneuplay=1';
    iFrameUrl += '&pid=ANO_WW_00_1000_10_500_55_1115_00&cid=&utm_so urce=0175&utm_campaign=ANO_WW_00_1000_10_500_55_11 15_00&utm_medium=contentintegration';
    // write the iFrame to this web page:
    }

    function setLanguage(lang) {
    if (availableLanguages[lang] == undefined) {
    lang = availableLanguages["default"];
    }
    gameLanguage = lang;
    $("#debug_gameLanguage").text(gameLanguage);
    fs.writeFileSync(languageFile, gameLanguage);
    }

    // This function will find the DOM elements with the IDs written in the list and get the right translation.
    // See "localization.js" for the actual strings.
    function localizeContents() {
    var contents = [
    'addon_return', 'addon_anno_homepage', 'addon_anno_update', 'addon_open_normal', 'addon_open_normal_mini', 'addon_open_steam', 'addon_open_steam_mini', 'button_help_close',
    'h1_options', 'p_options_intro', 'h2_zoom', 'p_zoom', 'span_zoom_standard',
    'span_zoom_bigger', 'span_zoom_very_big', 'h2_background', 'p_background',
    'span_options_close_apply', 'span_options_close_cancel',
    'h2_plugin', 'p_plugin', 'span_plugin_chrome', 'span_plugin_adobe',
    'title_help', 'h1_help', 'p_help_text', 'a_help_link', 'button_help_close'
    ], s;
    for (var i=0; i<contents.length; i++) {
    s = $('#'+contents[i]);
    if (s) {
    s.html(translate(contents[i]));
    }
    }
    }

    var fps = 30;
    function forceRefresh() {
    // this function updates the renderer at a given frame rate, even if the user is idle.
    // without this function, the Steam overlay would feel like "frozen".
    setTimeout(function() {
    document.getElementById("forceRefresh").getContext ("2d").clearRect(0, 0, 1, 1);
    window.requestAnimationFrame(forceRefresh);
    }, 1000 / fps);
    }

    </script>
    </head>

    <body onload="forceRefresh();startApplication();">

    <div id="wrapper">

    <!-- Anfang - Das Menu ist mit der localization_addon.js-Datei verbunden. -->
    <div>
    <div class="addon-menu-left">
    <div id="addon_open_normal"></div>
    <div id="addon_open_normal_mini"></div>
    </div>
    <div class="addon-menu-right">
    <div id="addon_open_steam"></div>
    <div id="addon_open_steam_mini"></div>
    </div>
    </div>
    <!-- Ende -->

    <div id="iframe-wrapper"></div>

    <div id="steamnav">

    <table class="vertical-line">
    <tr>
    <td class="top"></td>
    </tr>
    <tr>
    <td class="middle"></td>
    </tr>
    <tr>
    <td class="bottom"></td>
    </tr>
    </table>

    <!-- Anfang - Die Hauptmenu-Navi-Leiste. -->
    <div class="buttons">
    <div class="divider"></div>
    <div class="button fullscreen" onclick="win.toggleFullscreen();"></div>
    <div class="divider"></div>
    <a href="#" onclick="gui.Shell.openExternal('https://steamcommunity.com/app/336510');return false;" title="Comunity-Hub"><div class="button steam"></div></a>
    <div class="divider"></div>
    <a href="#" onclick="gui.Shell.openExternal('https://steamcommunity.com/sharedfiles/filedetails/?id=717745989');return false;" title="Anno Online - Guide"><div class="button steam"></div></a>
    <div class="divider"></div>
    <div id="addon_anno_homepage"></div>
    <div class="divider"></div>
    <div id="addon_anno_update"></div>
    <div class="divider"></div>
    <div class="button options" onclick="toggleOptions();"></div>
    <div class="divider"></div>
    <div class="button quit" onclick="gui.App.quit();"></div>
    <div class="divider"></div>
    <a href="#" accesskey="w" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="f" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="o" onclick="toggleOptions();"></a>
    <a href="#" accesskey="q" onclick="gui.App.quit();"></a>
    </div>
    <!-- Ende -->

    <div class="button help" onclick="$.fn.steamDebug().help(event);"></div>

    <canvas id="forceRefresh" width="1" height="1"></canvas>

    </div>

    <div class="options-layer" id="options-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="p_options_intro"></span>
    <span id="h2_zoom"></span>
    <span class="divider"></span>
    <span id="p_zoom"></span>
    <span class="zoom_wrap">
    <span class="zoom_buttons">
    <span class="zoom_span zoom_0"><span id="span_zoom_standard" onclick="setZoomLevel(0);"></span></span>
    <span class="zoom_span zoom_1"><span id="span_zoom_bigger" onclick="setZoomLevel(1);"></span></span>
    <span class="zoom_span zoom_2"><span id="span_zoom_very_big" onclick="setZoomLevel(2);"></span></span>
    </span>
    </span>
    <span id="h2_background"></span>
    <span class="divider"></span>
    <span id="p_background"></span>
    <span>
    <span class="background_buttons">
    <span class="background_span background_0" onclick="setBackground(0);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_1" onclick="setBackground(1);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_2" onclick="setBackground(2);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    </span>
    </span>

    <span id="h2_plugin"></span>
    <span class="divider"></span>
    <span id="p_plugin"></span>
    <span class="plugin_wrap">
    <span class="plugin_buttons">
    <span class="plugin_span chrome"><span id="span_plugin_chrome" onclick="setPlugin('chrome');"></span></span>
    <span class="plugin_span adobe"><span id="span_plugin_adobe" onclick="setPlugin('adobe');"></span></span>
    </span>
    </span>
    <br />


    <div class="button_wrap">
    <span class="button close" onclick="closeOptions();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_apply"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    <div class="button_wrap">
    <span class="button cancel" onclick="closeOptionsCancel();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_cancel"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="h1_options"></span>
    </div>
    <div class="close" onclick="closeOptionsCancel();"></div>
    </div>

    </div>

    </body>


    index_normal.html

    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
    <script src="js/jquery-2.1.3.min.js"></script>
    <script src="js/swfobject.js"></script>
    <link rel="stylesheet" href="css/styles.css"/>

    <script src="js/flashDetect.js"></script>
    <link rel="stylesheet" href="css/debugger.css"/>

    <meta charset="utf-8"/>


    <!-- Anfang - Die Scripte, die für dieses Addon entscheidend sind. -->
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    <script src="js/debugger_addon.js"></script>
    <script src="js/languages_addon.js"></script>
    <script src="js/localization_addon.js"></script>
    <link rel="stylesheet" href="css/addon.css"/>
    <!-- Ende -->


    <script>

    // globals and definitions:
    util = require("util");
    fs = require("fs");
    gui = require('nw.gui');
    win = gui.Window.get();

    flashDetect();

    appVersion = "1.0";
    appPartner = "bluebyte";
    updateVersion = null;
    updateUrl = null;
    updateCheck = true;
    iFrameUrl = '';
    languageFile = "language.dat";
    zoomLevelFile = "zoom.dat";
    backgroundFile = "background.dat";
    pluginType = undefined;
    gameLanguage = undefined;
    zoomLevel = undefined;
    currentBackground = undefined;
    oldBackground = undefined; // used for "cancel" button in options dialog
    oldZoomLevel = undefined; // used for "cancel" button in options dialog
    maxZoomLevel = 2; // number of zoom levels, starting at 0
    maxBackgrounds = 2; // number of backgrounds, starting at 0
    optionsDisplayed = false; // flag if the "Options" are opened.
    helpDisplayed = false; // flag if the "Help" layer is opened.
    gameLayerState = false; // Whether or not the GameLayer is opened.


    <!-- Anfang - Zusätze für das Steamoverlay. -->
    shopMode = false; // set to 'true' just before opening the Steam overlay with the payment url, so the Steam event listener will listen.
    overlayEnabled = false; // set to 'true' if Steam overlay is working as intended (opens).
    <!-- Ende -->


    // Force every "new window" or "new tab" to be opened in the same iFrame (instead of a
    // new window), so the user never loses our left navigation bar:
    function newWindowPolicy(frame, url, policy) {
    policy.forceCurrent();
    }
    win.removeAllListeners('new-win-policy');
    win.on('new-win-policy', newWindowPolicy);

    var isFocused = true;
    win.removeAllListeners('focus');
    win.on('focus', function () {
    isFocused = true;
    });
    win.removeAllListeners('blur');
    win.on('blur', function () {
    isFocused = false;
    });

    // prevent dragging & dropping links into this application:
    function handleDragEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
    }
    var dragEvents = ['dragend', 'dragstart', 'drop', 'dragenter', 'dragleave', 'dragover'];
    for (var i=0; i<dragEvents.length; i++) {
    window.addEventListener(dragEvents[i], handleDragEvent);
    }

    function readGameLanguage() {
    // Read language setting. If not present, map user's OS language.
    var content = "";
    try {
    content = fs.readFileSync(languageFile);
    } catch (e) {}
    if (content.length == 0) {
    initLanguage();
    } else if (content.length != 2) {
    gameLanguage = availableLanguages["default"];
    } else if (availableLanguages[content] == undefined) {
    gameLanguage = availableLanguages["default"];
    } else {
    gameLanguage = content.toString();
    }
    $("#debug_gameLanguage").text(gameLanguage);
    }

    function readZoomLevel() {
    // Read zoom level setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(zoomLevelFile);
    } catch (e) {}
    if (content.length != 1) {
    content = 0;
    }
    setZoomLevel(parseInt(content));
    }

    function setZoomLevel(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxZoomLevel) {
    n = maxZoomLevel;
    }
    if (n === zoomLevel) {
    return;
    }
    zoomLevel = n;
    win.zoomLevel = zoomLevel;
    for (var i=0; i<=maxZoomLevel; i++) {
    $('.zoom_' + i).removeClass('active');
    }
    $('.zoom_' + zoomLevel).addClass('active');
    fs.writeFileSync(zoomLevelFile, zoomLevel.toString());
    }

    function readBackground() {
    // Read background setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(backgroundFile);
    } catch(e) {}
    if (content.length != 1) {
    content = 0;
    }
    setBackground(parseInt(content));
    }

    function setBackground(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxBackgrounds) {
    n = maxBackgrounds;
    }
    if (n === currentBackground) {
    return;
    }
    currentBackground = n;
    updateBackground();
    for (var i=0; i<=maxBackgrounds; i++) {
    $('.background_' + i).removeClass('active');
    }
    $('.background_' + currentBackground).addClass('active');
    fs.writeFileSync(backgroundFile, currentBackground.toString());
    }

    function updateBackground() {
    var wrapper = $("#wrapper");
    for (var i=0; i<=maxBackgrounds; i++) {
    wrapper.removeClass('bg_'+i);
    }
    wrapper.addClass('bg_'+currentBackground);
    }

    function closeOptionsCancel() {
    if (oldBackground !== undefined && oldBackground !== currentBackground) {
    setBackground(oldBackground);
    }
    if (oldZoomLevel !== undefined && oldZoomLevel !== zoomLevel) {
    setZoomLevel(oldZoomLevel);
    }
    closeOptions();
    }

    function closeOptions() {
    if (optionsDisplayed === false) {
    return;
    }
    optionsDisplayed = false;
    $('#options-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleOptions() {
    if (optionsDisplayed === true) {
    closeOptions();
    return;
    }
    closeHelp();
    oldBackground = currentBackground;
    oldZoomLevel = zoomLevel;
    optionsDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#options-layer').show();
    }

    function closeHelp() {
    if (helpDisplayed === false) {
    return;
    }
    helpDisplayed = false;
    $('#help-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleHelp() {
    if (helpDisplayed === true) {
    closeHelp();
    return;
    }
    closeOptions();
    helpDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#help-layer').show();
    }

    function openExternalHelp() {
    var url;
    if (externalHelpUrls[gameLanguage]) {
    url = externalHelpUrls[gameLanguage];
    } else {
    url = externalHelpUrls[externalHelpUrls["default"]];
    }
    gui.Shell.openExternal(url);
    }

    // Dispatches a postMessage event to the embedded website, forcing it to "hide" the game layer.
    // The "game layer" is the overlay that contains the flash game. It covers the whole screen except for the
    // application's navigation bar (the one from this file).
    function hideGameLayer() {
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "closeGameLayer"}', "*");
    }

    // Dispatches a postMessage event to the website display the "About" layer that contains the legal information.
    function showAbout() {
    closeOptions();
    closeHelp();
    hideGameLayer();
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "showAbout"}', "*");
    }

    /**
    * Try to initialize the user's language by taking a look at "navigator.language".
    * "navigator.language" will be set to the user's OS language automatically by node-webkit.
    * Usually only done once when running the game for the first time.
    */
    function initLanguage() {
    var l = navigator.language;
    l = l.toLowerCase();
    if (l.indexOf("-") > -1) {
    l = l.substr(0, l.indexOf("-"));
    }
    setLanguage(l);
    }

    // This function is triggered once the iFrame with the website is being loaded.
    function iFrameLoaded() {
    var iFrame = document.getElementById("nwiframe");

    // Write functions to the child window, since it has no access to "top" due to Node-Webkit's iFrame option "nwfaketop":
    iFrame.contentWindow["appSetLanguage"] = fromChildSetLanguage;
    iFrame.contentWindow["appLogout"] = fromChildAppLogout;
    iFrame.contentWindow["openExternalBrowser"] = fromChildOpenExternalBrowser;
    iFrame.contentWindow["setGameLayerState"] = fromChildGameLayerState;
    iFrame.contentWindow["triggerApplicationRestart"] = fromChildTriggerApplicationRestart;

    // tracing the history for the debug menu:
    $.fn.appDebug().traceIFrame(iFrame.contentWindow.l ocation.href);
    }

    function fromChildTriggerApplicationRestart() {
    gameLayerState = false;
    startGameButton();
    }

    function fromChildAppLogout() {
    var cookie, cookieUrl;
    win.cookies.getAll( {},
    function(cookies) {
    for (var i=0; i<cookies.length; i++) {
    cookie = cookies[i];
    cookieUrl = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain + cookie.path;
    if (
    cookieUrl.indexOf('facebook') > -1 ||
    cookieUrl.indexOf('google') > -1 ||
    cookieUrl.indexOf('vk.com') > -1 ||
    cookieUrl.indexOf('nk.pl') > -1
    ) {
    win.cookies.remove({url: cookieUrl, name: cookie.name}, function (result) {});
    }
    }
    }
    );
    gameLayerState = false;
    startGameButton();
    }

    // Stores whether the game layer is open (true) or closed (false).
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "setGameLayerState" and be called from within the "appScripts.php" file.
    function fromChildGameLayerState(state) {
    gameLayerState = state;
    }

    // Triggers a change of the game language from within the website, and will force a reload of the iFrame.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "appSetLanguage" and be called from within the "appScripts.php" file.
    function fromChildSetLanguage(language) {
    setLanguage(language);
    initDom();
    }

    // This will trigger to open an external browser window (system's default browser).
    // Currently used on the "About" page of the website.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "openExternalBrowser" and be called from within the "appScripts.php" file.
    function fromChildOpenExternalBrowser(url) {
    gui.Shell.openExternal(url);
    }

    // This function is being called once all variables have been loaded from the local hard disk
    // (language, security token, zoom level and background image). It then localized the text strings (see
    // localization.js) and prepares the iFrame that contains the website.
    function initDom() {
    // localize text strings (the "options" box):
    localizeContents();
    // initialize iFrame url:
    iFrameUrl = availableLanguages[gameLanguage] + '?pseudo_standaloneuplay=1';
    iFrameUrl += '&pid=ANO_WW_00_1000_10_500_55_1115_00&cid=&utm_so urce=0175&utm_campaign=ANO_WW_00_1000_10_500_55_11 15_00&utm_medium=contentintegration';
    // write the iFrame to this web page:
    $("#iframe-wrapper").html(
    '<iframe nwfaketop allowfullscreen="true" id="nwiframe" src="' + iFrameUrl + '" frameBorder="0" onload="iFrameLoaded();"></iframe>'
    );
    }

    function setLanguage(lang) {
    if (availableLanguages[lang] == undefined) {
    lang = availableLanguages["default"];
    }
    gameLanguage = lang;
    $("#debug_gameLanguage").text(gameLanguage);
    fs.writeFileSync(languageFile, gameLanguage);
    }

    // This function will find the DOM elements with the IDs written in the list and get the right translation.
    // See "localization.js" for the actual strings.
    function localizeContents() {
    var contents = [
    'h1_options', 'p_options_intro', 'h2_zoom', 'p_zoom', 'span_zoom_standard',
    'span_zoom_bigger', 'span_zoom_very_big', 'h2_background', 'p_background',
    'span_options_close_apply', 'span_options_close_cancel',
    'h2_plugin', 'p_plugin', 'span_plugin_chrome', 'span_plugin_adobe',
    'title_help', 'h1_help', 'p_help_text', 'a_help_link', 'button_help_close'
    ], s;
    for (var i=0; i<contents.length; i++) {
    s = $('#'+contents[i]);
    if (s) {
    s.html(translate(contents[i]));
    }
    }
    }

    // This function is called then the user clicks the "Home" button in our app's nav.
    // If the game layer is opened, it will close the game layer.
    // If the game layer is not opened, it will force reload the iFrame with the original iFrame url.
    function startGameButton() {
    closeOptions();
    closeHelp();
    if (gameLayerState == true) {
    // just close the game layer on click if it's open:
    hideGameLayer();
    } else {
    // user is probably stuck on some external site; reload the SPA home page:
    var i = $("#nwiframe");
    i.attr("src", "about:blank;");
    // with timeout to have the browser hide the old content first (show "about:blank" for 1 millisecond):
    setTimeout(function(){i.attr("src", iFrameUrl); }, 1);
    }
    }

    function readPluginType() {
    // Read plugin type from file. Defaults to "adobe".
    pluginType = "";
    try {
    pluginType = fs.readFileSync("togglePlugin.dat");
    pluginType = pluginType.toString();
    } catch(e) {}
    if (pluginType != "chrome") {
    pluginType = "adobe";
    }
    $('.plugin_span.'+pluginType).addClass('active');
    }

    function setPlugin(p) {
    if (!isWindows()) {
    return;
    }
    if (p != "chrome" && p != "adobe") {
    p = "adobe";
    }
    fs.writeFile(
    "togglePlugin.dat",
    p,
    {"encoding": "utf8"},
    function(err) {
    if (err) {
    alert("Critical error writing 'togglePlugin.dat':\n" + err);
    gui.App.quit();
    }
    restoreDefaults();
    restartApplication();
    }
    );
    }

    /**
    * Sort-of "bootstrap":
    */
    function startApplication() {
    if (!updateCheck) {
    $.fn.updateApp().checkForUpdate();
    return;
    }
    readGameLanguage();
    readZoomLevel();
    readBackground();
    if (isWindows() && pluginType == undefined) {
    readPluginType();
    }
    initDom();
    }

    function jsonpResponse(payload) {
    if (payload["anno"] && payload["anno"][appPartner]) {
    updateVersion = payload["anno"][appPartner]["version"];
    updateUrl = payload["anno"][appPartner]["url"];
    } else {
    updateCheck = true;
    }
    }


    <!-- Anfang - Overlay-Boost -->
    var fps = 30;
    function forceRefresh() {
    // this function updates the renderer at a given frame rate, even if the user is idle.
    // without this function, the Steam overlay would feel like "frozen".
    setTimeout(function() {
    document.getElementById("forceRefresh").getContext ("2d").clearRect(0, 0, 1, 1);
    window.requestAnimationFrame(forceRefresh);
    }, 1000 / fps);
    }
    <!-- Ende -->


    </script>
    <script src="http://de.anno-online.com/appVersion.js"></script>
    </head>


    <!-- Anfang - ForceRefresh -->
    <body onload="forceRefresh();startApplication();">
    <!-- Ende -->


    <div id="debug">

    <div id="nwiframe-trace-wrapper">
    <div id="nwiframe-trace">
    </div>
    Navigate to:
    <input type="text" id="nwiframe-url-input" name="nwiframe-url-input"/>
    <button id="nwiframe-url-input-button">Go</button>
    <script>
    $('#nwiframe-url-input-button').on('click', function() {
    var target = $('#nwiframe-url-input').val();
    if (target.length > 0) {
    if (target.indexOf("://") == -1) {
    target = 'http://' + target;
    }
    }
    $('#nwiframe-url-input').val('');
    $('#nwiframe').attr('src', target);
    });
    $('#nwiframe-url-input').on('keyup', function(e){
    if (e.keyCode == 13) {
    $('#nwiframe-url-input-button').click();
    }
    });
    </script>
    </div>

    <div id="debug-known-issues">
    <p><strong>Known issues</strong></p>
    <ul>
    <li>JavaScript alert boxes look kind of <a href="#" onclick="alert('Believe me?');return false;">weird</a> on Windows computers (this is a <a href="#" onclick="gui.Shell.openExternal('https://github.com/nwjs/nw.js/issues/433');return false;">known</a> Node-Webkit bug).</li>
    <li>The Steam overlay does not work on Mac due to some unknown reason.</li>
    <li>The Steam overlay does not work on Linux due to some unknown reason.</li>
    </ul>
    </div>

    <table class="userdata">
    <tr>
    <td>Build info</td>
    <td>
    Version 1.0 (bluebyte), 2015-12-15 17:24:16<br />
    ANO_WW_00_1000_10_500_55_1115_00
    </td>
    </tr>
    <tr>
    <td>User's OS language</td>
    <td><script>document.write(navigator.language);</script></td>
    </tr>
    <tr>
    <td>Chosen game language</td>
    <td>
    <strong><span id="debug_gameLanguage"></span></strong><br />
    Set language to:<br />
    <span id="debugLanguageSelector">
    </span>
    <script>
    $.fn.appDebug().initLanguageSelector();
    </script>
    <br />
    <a href="#" onclick="$.fn.appDebug().toggleConfigureLanguages( );return false;">Configure languages</a>
    </td>
    </tr>
    </table>

    <div class="configureLanguages">
    <strong>Configure languages</strong><br />
    <textarea cols="60" rows="10" id="configureLanguagesInput"></textarea>
    <button onclick="$.fn.appDebug().saveLanguages();">Save</button>
    <button onclick="$.fn.appDebug().loadLanguagesToInput();"> Undo changes</button>
    <button onclick="$.fn.appDebug().cancelConfigureLanguages( );">Cancel</button>
    <button onclick="$.fn.appDebug().restoreDefaults();">Resto re defaults</button>
    </div>

    <div id="debug-buttons">
    <a href="#" onclick="$('#debug').slideToggle()">Hide this panel</a>
    <a href="#" id="debug-a-session" onclick="$.fn.appDebug().toggleSessionData($(this) );">View session data</a>
    <a href="#" onclick="$.fn.appDebug().reloadApplication();">Res tart application</a>
    <a href="#" onclick="win.toggleFullscreen();return false;">Toggle fullscreen</a>
    <a href="#" onclick="win.showDevTools();return false;">Dev tools</a>
    <a href="#" id="debug-a-history" onclick="$.fn.appDebug().toggleHistory($(this));"> History</a>
    <a href="#" onclick="$.fn.appDebug().clearCache();">Clear cache</a>
    <a href="#" onclick="$.fn.appDebug().reloadFrame();">Reload current page</a>
    <a href="#" id="debug-a-issues" onclick="$.fn.appDebug().toggleIssues($(this));">K nown issues</a>
    <br clear="all"/>
    </div>

    </div><!-- #debug -->




    <div id="wrapper">

    <div id="iframe-wrapper"></div>


    <!-- Anfang - Navianpassung -->
    <div id="steamnav">
    <!-- Ende -->


    <table class="vertical-line">
    <tr>
    <td class="top"></td>
    </tr>
    <tr>
    <td class="middle"></td>
    </tr>
    <tr>
    <td class="bottom"></td>
    </tr>
    </table>


    <!-- Anfang - Menu minimal überarbeitet. -->
    <div class="buttons">
    <div class="divider"></div>
    <div class="button home" onclick="startGameButton();"></div>
    <div class="divider"></div>
    <div class="button fullscreen" onclick="win.toggleFullscreen();"></div>
    <div class="divider"></div>
    <div class="button options" onclick="toggleOptions();"></div>
    <div class="divider"></div>
    <div class="button about" onclick="showAbout();"></div>
    <div class="divider"></div>
    <div class="button faq" onclick="toggleHelp();"></div>
    <div class="divider"></div>
    <div class="button quit" onclick="gui.App.quit();"></div>
    <div class="divider"></div>
    <a href="index.html" title="Return to the Main-Menu"><div class="button return"></div></a>
    <div class="divider"></div>
    </div>
    <!-- Ende -->


    <div class="button help" onclick="$.fn.appDebug().help(event);"></div>


    <!-- Anfang - Steamoverlaybooster. -->
    <canvas id="forceRefresh" width="1" height="1"></canvas>
    <!-- Ende -->


    </div>

    <div class="options-layer" id="options-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="p_options_intro"></span>
    <span id="h2_zoom"></span>
    <span class="divider"></span>
    <span id="p_zoom"></span>
    <span class="zoom_wrap">
    <span class="zoom_buttons">
    <span class="zoom_span zoom_0"><span id="span_zoom_standard" onclick="setZoomLevel(0);"></span></span>
    <span class="zoom_span zoom_1"><span id="span_zoom_bigger" onclick="setZoomLevel(1);"></span></span>
    <span class="zoom_span zoom_2"><span id="span_zoom_very_big" onclick="setZoomLevel(2);"></span></span>
    </span>
    </span>
    <span id="h2_background"></span>
    <span class="divider"></span>
    <span id="p_background"></span>
    <span>
    <span class="background_buttons">
    <span class="background_span background_0" onclick="setBackground(0);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_1" onclick="setBackground(1);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_2" onclick="setBackground(2);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    </span>
    </span>

    <span id="h2_plugin"></span>
    <span class="divider"></span>
    <span id="p_plugin"></span>
    <span class="plugin_wrap">
    <span class="plugin_buttons">
    <span class="plugin_span chrome"><span id="span_plugin_chrome" onclick="setPlugin('chrome');"></span></span>
    <span class="plugin_span adobe"><span id="span_plugin_adobe" onclick="setPlugin('adobe');"></span></span>
    </span>
    </span>
    <br />


    <div class="button_wrap">
    <span class="button close" onclick="closeOptions();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_apply"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    <div class="button_wrap">
    <span class="button cancel" onclick="closeOptionsCancel();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_cancel"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="h1_options"></span>
    </div>
    <div class="close" onclick="closeOptionsCancel();"></div>
    </div>

    <div class="options-layer" id="help-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="h1_help" class="h1_help"></span>

    <span id="p_help_text" class="p_help_text"></span>

    <span class="divider"></span>
    <span>
    <a href="#" onclick="openExternalHelp();return false;" id="a_help_link"></a>
    </span>

    <span class="divider"></span>

    <div class="button_wrap">
    <span class="button close" onclick="toggleHelp();">
    <span class="left"></span>
    <span class="middle">
    <span id="button_help_close"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="title_help"></span>
    </div>
    </div>

    </div>

    </body>


    index_normal_mini.html

    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
    <script src="js/jquery-2.1.3.min.js"></script>
    <script src="js/swfobject.js"></script>
    <link rel="stylesheet" href="css/styles.css"/>

    <script src="js/flashDetect.js"></script>
    <link rel="stylesheet" href="css/debugger.css"/>

    <meta charset="utf-8"/>


    <!-- Anfang - Die Scripte, die für dieses Addon entscheidend sind. -->
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    <script src="js/debugger_addon.js"></script>
    <script src="js/languages_addon.js"></script>
    <script src="js/localization_addon.js"></script>
    <link rel="stylesheet" href="css/addon.css"/>
    <!-- Ende -->


    <script>

    // globals and definitions:
    util = require("util");
    fs = require("fs");
    gui = require('nw.gui');
    win = gui.Window.get();

    flashDetect();

    appVersion = "1.0";
    appPartner = "bluebyte";
    updateVersion = null;
    updateUrl = null;
    updateCheck = true;
    iFrameUrl = '';
    languageFile = "language.dat";
    zoomLevelFile = "zoom.dat";
    backgroundFile = "background.dat";
    pluginType = undefined;
    gameLanguage = undefined;
    zoomLevel = undefined;
    currentBackground = undefined;
    oldBackground = undefined; // used for "cancel" button in options dialog
    oldZoomLevel = undefined; // used for "cancel" button in options dialog
    maxZoomLevel = 2; // number of zoom levels, starting at 0
    maxBackgrounds = 2; // number of backgrounds, starting at 0
    optionsDisplayed = false; // flag if the "Options" are opened.
    helpDisplayed = false; // flag if the "Help" layer is opened.
    gameLayerState = false; // Whether or not the GameLayer is opened.


    <!-- Anfang - Zusätze für das Steamoverlay. -->
    shopMode = false; // set to 'true' just before opening the Steam overlay with the payment url, so the Steam event listener will listen.
    overlayEnabled = false; // set to 'true' if Steam overlay is working as intended (opens).
    <!-- Ende -->


    // Force every "new window" or "new tab" to be opened in the same iFrame (instead of a
    // new window), so the user never loses our left navigation bar:
    function newWindowPolicy(frame, url, policy) {
    policy.forceCurrent();
    }
    win.removeAllListeners('new-win-policy');
    win.on('new-win-policy', newWindowPolicy);

    var isFocused = true;
    win.removeAllListeners('focus');
    win.on('focus', function () {
    isFocused = true;
    });
    win.removeAllListeners('blur');
    win.on('blur', function () {
    isFocused = false;
    });

    // prevent dragging & dropping links into this application:
    function handleDragEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
    }
    var dragEvents = ['dragend', 'dragstart', 'drop', 'dragenter', 'dragleave', 'dragover'];
    for (var i=0; i<dragEvents.length; i++) {
    window.addEventListener(dragEvents[i], handleDragEvent);
    }

    function readGameLanguage() {
    // Read language setting. If not present, map user's OS language.
    var content = "";
    try {
    content = fs.readFileSync(languageFile);
    } catch (e) {}
    if (content.length == 0) {
    initLanguage();
    } else if (content.length != 2) {
    gameLanguage = availableLanguages["default"];
    } else if (availableLanguages[content] == undefined) {
    gameLanguage = availableLanguages["default"];
    } else {
    gameLanguage = content.toString();
    }
    $("#debug_gameLanguage").text(gameLanguage);
    }

    function readZoomLevel() {
    // Read zoom level setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(zoomLevelFile);
    } catch (e) {}
    if (content.length != 1) {
    content = 0;
    }
    setZoomLevel(parseInt(content));
    }

    function setZoomLevel(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxZoomLevel) {
    n = maxZoomLevel;
    }
    if (n === zoomLevel) {
    return;
    }
    zoomLevel = n;
    win.zoomLevel = zoomLevel;
    for (var i=0; i<=maxZoomLevel; i++) {
    $('.zoom_' + i).removeClass('active');
    }
    $('.zoom_' + zoomLevel).addClass('active');
    fs.writeFileSync(zoomLevelFile, zoomLevel.toString());
    }

    function readBackground() {
    // Read background setting. If not present, set to default "0".
    var content = "";
    try {
    content = fs.readFileSync(backgroundFile);
    } catch(e) {}
    if (content.length != 1) {
    content = 0;
    }
    setBackground(parseInt(content));
    }

    function setBackground(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxBackgrounds) {
    n = maxBackgrounds;
    }
    if (n === currentBackground) {
    return;
    }
    currentBackground = n;
    updateBackground();
    for (var i=0; i<=maxBackgrounds; i++) {
    $('.background_' + i).removeClass('active');
    }
    $('.background_' + currentBackground).addClass('active');
    fs.writeFileSync(backgroundFile, currentBackground.toString());
    }

    function updateBackground() {
    var wrapper = $("#wrapper");
    for (var i=0; i<=maxBackgrounds; i++) {
    wrapper.removeClass('bg_'+i);
    }
    wrapper.addClass('bg_'+currentBackground);
    }

    function closeOptionsCancel() {
    if (oldBackground !== undefined && oldBackground !== currentBackground) {
    setBackground(oldBackground);
    }
    if (oldZoomLevel !== undefined && oldZoomLevel !== zoomLevel) {
    setZoomLevel(oldZoomLevel);
    }
    closeOptions();
    }

    function closeOptions() {
    if (optionsDisplayed === false) {
    return;
    }
    optionsDisplayed = false;
    $('#options-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleOptions() {
    if (optionsDisplayed === true) {
    closeOptions();
    return;
    }
    closeHelp();
    oldBackground = currentBackground;
    oldZoomLevel = zoomLevel;
    optionsDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#options-layer').show();
    }

    function closeHelp() {
    if (helpDisplayed === false) {
    return;
    }
    helpDisplayed = false;
    $('#help-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleHelp() {
    if (helpDisplayed === true) {
    closeHelp();
    return;
    }
    closeOptions();
    helpDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('#help-layer').show();
    }

    function openExternalHelp() {
    var url;
    if (externalHelpUrls[gameLanguage]) {
    url = externalHelpUrls[gameLanguage];
    } else {
    url = externalHelpUrls[externalHelpUrls["default"]];
    }
    gui.Shell.openExternal(url);
    }

    // Dispatches a postMessage event to the embedded website, forcing it to "hide" the game layer.
    // The "game layer" is the overlay that contains the flash game. It covers the whole screen except for the
    // application's navigation bar (the one from this file).
    function hideGameLayer() {
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "closeGameLayer"}', "*");
    }

    // Dispatches a postMessage event to the website display the "About" layer that contains the legal information.
    function showAbout() {
    closeOptions();
    closeHelp();
    hideGameLayer();
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "showAbout"}', "*");
    }

    /**
    * Try to initialize the user's language by taking a look at "navigator.language".
    * "navigator.language" will be set to the user's OS language automatically by node-webkit.
    * Usually only done once when running the game for the first time.
    */
    function initLanguage() {
    var l = navigator.language;
    l = l.toLowerCase();
    if (l.indexOf("-") > -1) {
    l = l.substr(0, l.indexOf("-"));
    }
    setLanguage(l);
    }

    // This function is triggered once the iFrame with the website is being loaded.
    function iFrameLoaded() {
    var iFrame = document.getElementById("nwiframe");

    // Write functions to the child window, since it has no access to "top" due to Node-Webkit's iFrame option "nwfaketop":
    iFrame.contentWindow["appSetLanguage"] = fromChildSetLanguage;
    iFrame.contentWindow["appLogout"] = fromChildAppLogout;
    iFrame.contentWindow["openExternalBrowser"] = fromChildOpenExternalBrowser;
    iFrame.contentWindow["setGameLayerState"] = fromChildGameLayerState;
    iFrame.contentWindow["triggerApplicationRestart"] = fromChildTriggerApplicationRestart;

    // tracing the history for the debug menu:
    $.fn.appDebug().traceIFrame(iFrame.contentWindow.l ocation.href);
    }

    function fromChildTriggerApplicationRestart() {
    gameLayerState = false;
    startGameButton();
    }

    function fromChildAppLogout() {
    var cookie, cookieUrl;
    win.cookies.getAll( {},
    function(cookies) {
    for (var i=0; i<cookies.length; i++) {
    cookie = cookies[i];
    cookieUrl = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain + cookie.path;
    if (
    cookieUrl.indexOf('facebook') > -1 ||
    cookieUrl.indexOf('google') > -1 ||
    cookieUrl.indexOf('vk.com') > -1 ||
    cookieUrl.indexOf('nk.pl') > -1
    ) {
    win.cookies.remove({url: cookieUrl, name: cookie.name}, function (result) {});
    }
    }
    }
    );
    gameLayerState = false;
    startGameButton();
    }

    // Stores whether the game layer is open (true) or closed (false).
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "setGameLayerState" and be called from within the "appScripts.php" file.
    function fromChildGameLayerState(state) {
    gameLayerState = state;
    }

    // Triggers a change of the game language from within the website, and will force a reload of the iFrame.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "appSetLanguage" and be called from within the "appScripts.php" file.
    function fromChildSetLanguage(language) {
    setLanguage(language);
    initDom();
    }

    // This will trigger to open an external browser window (system's default browser).
    // Currently used on the "About" page of the website.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "openExternalBrowser" and be called from within the "appScripts.php" file.
    function fromChildOpenExternalBrowser(url) {
    gui.Shell.openExternal(url);
    }

    // This function is being called once all variables have been loaded from the local hard disk
    // (language, security token, zoom level and background image). It then localized the text strings (see
    // localization.js) and prepares the iFrame that contains the website.
    function initDom() {
    // localize text strings (the "options" box):
    localizeContents();
    // initialize iFrame url:
    iFrameUrl = availableLanguages[gameLanguage] + '?pseudo_standaloneuplay=1';
    iFrameUrl += '&pid=ANO_WW_00_1000_10_500_55_1115_00&cid=&utm_so urce=0175&utm_campaign=ANO_WW_00_1000_10_500_55_11 15_00&utm_medium=contentintegration';
    // write the iFrame to this web page:
    $("#mini-iframe-wrapper").html(
    '<iframe nwfaketop allowfullscreen="true" id="nwiframe" src="' + iFrameUrl + '" frameBorder="0" onload="iFrameLoaded();"></iframe>'
    );
    }

    function setLanguage(lang) {
    if (availableLanguages[lang] == undefined) {
    lang = availableLanguages["default"];
    }
    gameLanguage = lang;
    $("#debug_gameLanguage").text(gameLanguage);
    fs.writeFileSync(languageFile, gameLanguage);
    }

    // This function will find the DOM elements with the IDs written in the list and get the right translation.
    // See "localization.js" for the actual strings.
    function localizeContents() {
    var contents = [
    'h1_options', 'p_options_intro', 'h2_zoom', 'p_zoom', 'span_zoom_standard',
    'span_zoom_bigger', 'span_zoom_very_big', 'h2_background', 'p_background',
    'span_options_close_apply', 'span_options_close_cancel',
    'h2_plugin', 'p_plugin', 'span_plugin_chrome', 'span_plugin_adobe',
    'title_help', 'h1_help', 'p_help_text', 'a_help_link', 'button_help_close'
    ], s;
    for (var i=0; i<contents.length; i++) {
    s = $('#'+contents[i]);
    if (s) {
    s.html(translate(contents[i]));
    }
    }
    }

    // This function is called then the user clicks the "Home" button in our app's nav.
    // If the game layer is opened, it will close the game layer.
    // If the game layer is not opened, it will force reload the iFrame with the original iFrame url.
    function startGameButton() {
    closeOptions();
    closeHelp();
    if (gameLayerState == true) {
    // just close the game layer on click if it's open:
    hideGameLayer();
    } else {
    // user is probably stuck on some external site; reload the SPA home page:
    var i = $("#nwiframe");
    i.attr("src", "about:blank;");
    // with timeout to have the browser hide the old content first (show "about:blank" for 1 millisecond):
    setTimeout(function(){i.attr("src", iFrameUrl); }, 1);
    }
    }

    function readPluginType() {
    // Read plugin type from file. Defaults to "adobe".
    pluginType = "";
    try {
    pluginType = fs.readFileSync("togglePlugin.dat");
    pluginType = pluginType.toString();
    } catch(e) {}
    if (pluginType != "chrome") {
    pluginType = "adobe";
    }
    $('.plugin_span.'+pluginType).addClass('active');
    }

    function setPlugin(p) {
    if (!isWindows()) {
    return;
    }
    if (p != "chrome" && p != "adobe") {
    p = "adobe";
    }
    fs.writeFile(
    "togglePlugin.dat",
    p,
    {"encoding": "utf8"},
    function(err) {
    if (err) {
    alert("Critical error writing 'togglePlugin.dat':\n" + err);
    gui.App.quit();
    }
    restoreDefaults();
    restartApplication();
    }
    );
    }

    /**
    * Sort-of "bootstrap":
    */
    function startApplication() {
    if (!updateCheck) {
    $.fn.updateApp().checkForUpdate();
    return;
    }
    readGameLanguage();
    readZoomLevel();
    readBackground();
    if (isWindows() && pluginType == undefined) {
    readPluginType();
    }
    initDom();
    }

    function jsonpResponse(payload) {
    if (payload["anno"] && payload["anno"][appPartner]) {
    updateVersion = payload["anno"][appPartner]["version"];
    updateUrl = payload["anno"][appPartner]["url"];
    } else {
    updateCheck = true;
    }
    }


    <!-- Anfang - Overlay-Boost -->
    var fps = 30;
    function forceRefresh() {
    // this function updates the renderer at a given frame rate, even if the user is idle.
    // without this function, the Steam overlay would feel like "frozen".
    setTimeout(function() {
    document.getElementById("forceRefresh").getContext ("2d").clearRect(0, 0, 1, 1);
    window.requestAnimationFrame(forceRefresh);
    }, 1000 / fps);
    }
    <!-- Ende -->


    </script>
    <script src="http://de.anno-online.com/appVersion.js"></script>
    </head>


    <!-- Anfang - ForceRefresh -->
    <body onload="forceRefresh();startApplication();">
    <!-- Ende -->


    <div id="debug">

    <div id="nwiframe-trace-wrapper">
    <div id="nwiframe-trace">
    </div>
    Navigate to:
    <input type="text" id="nwiframe-url-input" name="nwiframe-url-input"/>
    <button id="nwiframe-url-input-button">Go</button>
    <script>
    $('#nwiframe-url-input-button').on('click', function() {
    var target = $('#nwiframe-url-input').val();
    if (target.length > 0) {
    if (target.indexOf("://") == -1) {
    target = 'http://' + target;
    }
    }
    $('#nwiframe-url-input').val('');
    $('#nwiframe').attr('src', target);
    });
    $('#nwiframe-url-input').on('keyup', function(e){
    if (e.keyCode == 13) {
    $('#nwiframe-url-input-button').click();
    }
    });
    </script>
    </div>

    <div id="debug-known-issues">
    <p><strong>Known issues</strong></p>
    <ul>
    <li>JavaScript alert boxes look kind of <a href="#" onclick="alert('Believe me?');return false;">weird</a> on Windows computers (this is a <a href="#" onclick="gui.Shell.openExternal('https://github.com/nwjs/nw.js/issues/433');return false;">known</a> Node-Webkit bug).</li>
    <li>The Steam overlay does not work on Mac due to some unknown reason.</li>
    <li>The Steam overlay does not work on Linux due to some unknown reason.</li>
    </ul>
    </div>

    <table class="userdata">
    <tr>
    <td>Build info</td>
    <td>
    Version 1.0 (bluebyte), 2015-12-15 17:24:16<br />
    ANO_WW_00_1000_10_500_55_1115_00
    </td>
    </tr>
    <tr>
    <td>User's OS language</td>
    <td><script>document.write(navigator.language);</script></td>
    </tr>
    <tr>
    <td>Chosen game language</td>
    <td>
    <strong><span id="debug_gameLanguage"></span></strong><br />
    Set language to:<br />
    <span id="debugLanguageSelector">
    </span>
    <script>
    $.fn.appDebug().initLanguageSelector();
    </script>
    <br />
    <a href="#" onclick="$.fn.appDebug().toggleConfigureLanguages( );return false;">Configure languages</a>
    </td>
    </tr>
    </table>

    <div class="configureLanguages">
    <strong>Configure languages</strong><br />
    <textarea cols="60" rows="10" id="configureLanguagesInput"></textarea>
    <button onclick="$.fn.appDebug().saveLanguages();">Save</button>
    <button onclick="$.fn.appDebug().loadLanguagesToInput();"> Undo changes</button>
    <button onclick="$.fn.appDebug().cancelConfigureLanguages( );">Cancel</button>
    <button onclick="$.fn.appDebug().restoreDefaults();">Resto re defaults</button>
    </div>

    <div id="debug-buttons">
    <a href="#" onclick="$('#debug').slideToggle()">Hide this panel</a>
    <a href="#" id="debug-a-session" onclick="$.fn.appDebug().toggleSessionData($(this) );">View session data</a>
    <a href="#" onclick="$.fn.appDebug().reloadApplication();">Res tart application</a>
    <a href="#" onclick="win.toggleFullscreen();return false;">Toggle fullscreen</a>
    <a href="#" onclick="win.showDevTools();return false;">Dev tools</a>
    <a href="#" id="debug-a-history" onclick="$.fn.appDebug().toggleHistory($(this));"> History</a>
    <a href="#" onclick="$.fn.appDebug().clearCache();">Clear cache</a>
    <a href="#" onclick="$.fn.appDebug().reloadFrame();">Reload current page</a>
    <a href="#" id="debug-a-issues" onclick="$.fn.appDebug().toggleIssues($(this));">K nown issues</a>
    <br clear="all"/>
    </div>

    </div><!-- #debug -->


    <!-- Anfang - Die Mini-Navi-Leiste + Steamoverlaybooster. -->
    <div id="wrapper">
    <div id="mini-iframe-wrapper"></div>
    <div id="mini-nav" title="Game-Keys (ALT+): S|H = Startpage W|F = Toggle Fullscreen O = Options M = Mainmenu Q = Quit Global-Keys: Win+Arrow Up/Down = Window Max/Min Alt+F4 = Quit">
    <a href="#" accesskey="s" onclick="startGameButton();"></a>
    <a href="#" accesskey="h" onclick="startGameButton();"></a>
    <a href="#" accesskey="w" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="f" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="o" onclick="toggleOptions();"></a>
    <a href="index.html" accesskey="m"></a>
    <a href="#" accesskey="q" onclick="gui.App.quit();"></a>
    <canvas id="forceRefresh" width="1" height="1"></canvas>
    </div>
    <!-- Ende -->


    <div class="options-layer" id="options-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="p_options_intro"></span>
    <span id="h2_zoom"></span>
    <span class="divider"></span>
    <span id="p_zoom"></span>
    <span class="zoom_wrap">
    <span class="zoom_buttons">
    <span class="zoom_span zoom_0"><span id="span_zoom_standard" onclick="setZoomLevel(0);"></span></span>
    <span class="zoom_span zoom_1"><span id="span_zoom_bigger" onclick="setZoomLevel(1);"></span></span>
    <span class="zoom_span zoom_2"><span id="span_zoom_very_big" onclick="setZoomLevel(2);"></span></span>
    </span>
    </span>
    <span id="h2_background"></span>
    <span class="divider"></span>
    <span id="p_background"></span>
    <span>
    <span class="background_buttons">
    <span class="background_span background_0" onclick="setBackground(0);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_1" onclick="setBackground(1);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_2" onclick="setBackground(2);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    </span>
    </span>

    <span id="h2_plugin"></span>
    <span class="divider"></span>
    <span id="p_plugin"></span>
    <span class="plugin_wrap">
    <span class="plugin_buttons">
    <span class="plugin_span chrome"><span id="span_plugin_chrome" onclick="setPlugin('chrome');"></span></span>
    <span class="plugin_span adobe"><span id="span_plugin_adobe" onclick="setPlugin('adobe');"></span></span>
    </span>
    </span>
    <br />


    <div class="button_wrap">
    <span class="button close" onclick="closeOptions();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_apply"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    <div class="button_wrap">
    <span class="button cancel" onclick="closeOptionsCancel();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_cancel"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="h1_options"></span>
    </div>
    <div class="close" onclick="closeOptionsCancel();"></div>
    </div>
    </div>


    </body>


    index_steam.html

    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
    <script src="js/jquery-2.1.3.min.js"></script>
    <script src="js/swfobject.js"></script>
    <link rel="stylesheet" href="css/styles.css"/>

    <script src="js/debugger.js"></script>
    <script src="js/flashDetect.js"></script>
    <script src="js/localization.js"></script>
    <script src="js/languages.js"></script>
    <link rel="stylesheet" href="css/debugger.css"/>

    <meta charset="utf-8"/>


    <!-- Anfang - Die Scripte, die für dieses Addon entscheidend sind. -->
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    <link rel="stylesheet" href="css/addon.css"/>
    <!-- Ende -->


    <script>

    // globals and definitions:
    util = require("util");
    greenworks = require('./greenworks');
    gui = require('nw.gui');
    win = gui.Window.get();

    flashDetect();

    iFrameUrl = '';
    tokenFile = "savegame.dat";
    languageFile = "language.dat";
    zoomLevelFile = "zoom.dat";
    backgroundFile = "background.dat";
    pluginType = undefined;
    gameLanguage = undefined;
    securityToken = undefined;
    zoomLevel = undefined;
    currentBackground = undefined;
    oldBackground = undefined; // used for "cancel" button in options dialog
    oldZoomLevel = undefined; // used for "cancel" button in options dialog
    maxZoomLevel = 2; // number of zoom levels, starting at 0
    maxBackgrounds = 2; // number of backgrounds, starting at 0
    securityTokenLength = 16;
    optionsDisplayed = false; // flag if the "Options" are opened.
    gameLayerState = false; // Whether or not the GameLayer is opened.
    shopMode = false; // set to 'true' just before opening the Steam overlay with the payment url, so the Steam event listener will listen.
    overlayEnabled = false; // set to 'true' if Steam overlay is working as intended (opens).


    // delete cookies from previous visits ...
    function removeCookie(cookie) {
    var cookieUrl = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain + cookie.path;
    if (cookieUrl.indexOf('steampowered.com') > -1 || cookieUrl.indexOf('steamcommunity.com') > -1 ) {
    if(cookie.name.indexOf('steamMachineAuth') > -1) {
    // ... but keep "Steam Guard" cookies to prevent it from triggering every time:
    return;
    }
    // remark: it is VERY IMPORTANT to also delete the steam shop's cookies. Otherwise, in case of
    // switching the user, the new user could still use the old user's login to confirm his purchases.
    // So if you change anything here regarding the cookies, please make sure the steam shop login
    // is gone once you restart the game!
    }
    if(cookie.name.indexOf('cookies_policy_accepted') > -1) {
    // ... but keep the cookie that saves the cookie policy acceptance status:
    return;
    }
    win.cookies.remove({ url: cookieUrl, name: cookie.name }, function(result) {});
    }
    win.cookies.getAll( {},
    function(cookies) {
    for (var i=0; i<cookies.length; i++) {
    removeCookie(cookies[i]);
    }
    });

    var initApi = greenworks.initAPI();

    if(!initApi){
    alert("Steam is not running.\n\nThis application requires your Steam client to be running.");
    gui.App.quit();
    } else {
    var steamId = greenworks.getSteamId();
    if (false == steamId.hasOwnProperty("staticAccountId") || parseInt(steamId.staticAccountId) == 0) {
    alert("Please log into your Steam account.\n\nThis application requires a valid Steam account.");
    gui.App.quit();
    }
    }

    // Force every "new window" or "new tab" to be opened in the same iFrame (instead of a
    // new window), so the user never loses our left navigation bar:
    function newWindowPolicy(frame, url, policy) {
    policy.forceCurrent();
    }
    win.removeAllListeners('new-win-policy');
    win.on('new-win-policy', newWindowPolicy);

    var isFocused = true;
    win.removeAllListeners('focus');
    win.on('focus', function () {
    isFocused = true;
    });
    win.removeAllListeners('blur');
    win.on('blur', function () {
    isFocused = false;
    });

    // prevent dragging & dropping links into this application:
    function handleDragEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
    }
    var dragEvents = ['dragend', 'dragstart', 'drop', 'dragenter', 'dragleave', 'dragover'];
    for (var i=0; i<dragEvents.length; i++) {
    window.addEventListener(dragEvents[i], handleDragEvent);
    }

    var fps = 30;
    function forceRefresh() {
    // this function updates the renderer at a given frame rate, even if the user is idle.
    // without this function, the Steam overlay would feel like "frozen".
    setTimeout(function() {
    document.getElementById("forceRefresh").getContext ("2d").clearRect(0, 0, 1, 1);
    window.requestAnimationFrame(forceRefresh);
    }, 1000 / fps);
    }

    // This will create a "security token" to be linked with this account.
    // @see https://mdc-web-tomcat17.ubisoft.org...geId=302416061
    function createSecurityToken() {
    var chars = '0123456789abcdefghijklmnopqrstuvwxyz';
    securityToken = '';
    for (var i = securityTokenLength; i > 0; --i) securityToken += chars[Math.round(Math.random() * (chars.length - 1))];
    greenworks.saveTextToFile(
    tokenFile,
    securityToken,
    function() {
    startApplication();
    },
    function(err) {
    alert("Critical error:\n" + err);
    gui.App.quit();
    }
    );
    }

    // Read security token. If not present, create one.
    function readSecurityToken() {
    greenworks.readTextFromFile(
    tokenFile,
    function (content) {
    if (content.length == 0) {
    createSecurityToken();
    } else {
    securityToken = content;
    }
    startApplication();
    $("#debug_token").text(securityToken);
    },
    function () {
    createSecurityToken();
    }
    );
    }

    function readGameLanguage() {
    // Read language setting. If not present, map Steam client's language.
    greenworks.readTextFromFile(
    languageFile,
    function (content) {
    if (content.length == 0) {
    initLanguage();
    } else if (content.length != 2) {
    gameLanguage = availableLanguages["default"];
    } else if (availableLanguages[content] == undefined) {
    gameLanguage = availableLanguages["default"];
    } else {
    gameLanguage = content;
    }
    $("#debug_gameLanguage").text(gameLanguage);
    startApplication();
    },
    function () {
    initLanguage();
    startApplication();
    }
    );
    }

    function readZoomLevel() {
    // Read zoom level setting. If not present, set to default "0".
    greenworks.readTextFromFile(
    zoomLevelFile,
    function (content) {
    if (content.length != 1) {
    content = 0;
    }
    setZoomLevel(content);
    startApplication();
    },
    function () {
    setZoomLevel(0);
    startApplication();
    }
    );
    }

    function setZoomLevel(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxZoomLevel) {
    n = maxZoomLevel;
    }
    if (n === zoomLevel) {
    return;
    }
    zoomLevel = n;
    win.zoomLevel = zoomLevel;
    for (var i=0; i<=maxZoomLevel; i++) {
    $('.zoom_' + i).removeClass('active');
    }
    $('.zoom_' + zoomLevel).addClass('active');
    greenworks.saveTextToFile(
    zoomLevelFile,
    zoomLevel.toString(),
    function() {},
    function(err) {
    alert("Critical error writing 'zoom.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    function readBackground() {
    // Read background setting. If not present, set to default "0".
    greenworks.readTextFromFile(
    backgroundFile,
    function (content) {
    if (content.length != 1) {
    content = 0;
    }
    setBackground(content);
    startApplication();
    },
    function () {
    setBackground(0);
    startApplication();
    }
    );
    }

    function setBackground(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxBackgrounds) {
    n = maxBackgrounds;
    }
    if (n === currentBackground) {
    return;
    }
    currentBackground = n;
    updateBackground();
    for (var i=0; i<=maxBackgrounds; i++) {
    $('.background_' + i).removeClass('active');
    }
    $('.background_' + currentBackground).addClass('active');
    greenworks.saveTextToFile(
    backgroundFile,
    currentBackground.toString(),
    function() {},
    function(err) {
    alert("Critical error writing 'background.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    function updateBackground() {
    var wrapper = $("#wrapper");
    for (var i=0; i<=maxBackgrounds; i++) {
    wrapper.removeClass('bg_'+i);
    }
    wrapper.addClass('bg_'+currentBackground);
    }

    function closeOptionsCancel() {
    if (oldBackground !== undefined && oldBackground !== currentBackground) {
    setBackground(oldBackground);
    }
    if (oldZoomLevel !== undefined && oldZoomLevel !== zoomLevel) {
    setZoomLevel(oldZoomLevel);
    }
    closeOptions();
    }

    function closeOptions() {
    if (optionsDisplayed === false) {
    return;
    }
    optionsDisplayed = false;
    $('.options-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleOptions() {
    if (optionsDisplayed === true) {
    closeOptions();
    return;
    }
    oldBackground = currentBackground;
    oldZoomLevel = zoomLevel;
    optionsDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('.options-layer').show();
    }

    // Dispatches a postMessage event to the embedded website, forcing it to "hide" the game layer.
    // The "game layer" is the overlay that contains the flash game. It covers the whole screen except for the
    // application's navigation bar (the one from this file).
    function hideGameLayer() {
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "closeGameLayer"}', "*");
    }

    // Dispatches a postMessage event to the website display the "About" layer that contains the legal information.
    function showAbout() {
    closeOptions();
    hideGameLayer();
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "showAbout"}', "*");
    }

    /**
    * Try to initialize the user's language by taking a look at his Steam client's language.
    * Usually only done once when running the game for the first time.
    */
    function initLanguage() {
    switch (greenworks.getCurrentUILanguage()) {
    case "german":
    setLanguage("de");
    break;
    case "english":
    setLanguage("en");
    break;
    case "french":
    setLanguage("fr");
    break;
    case "italian":
    setLanguage("fr");
    break;
    case "polish":
    setLanguage("pl");
    break;
    case "dutch":
    setLanguage("nl");
    break;
    case "danish":
    setLanguage("dk");
    break;
    case "spanish":
    setLanguage("es");
    break;
    case "czech":
    setLanguage("cz");
    break;
    case "russian":
    setLanguage("ru");
    break;
    default:
    setLanguage(availableLanguages["default"]);
    }
    }

    // This function is triggered once the iFrame with the website is being loaded.
    function iFrameLoaded() {
    var iFrame = document.getElementById("nwiframe");

    // Write functions to the child window, since it has no access to "top" due to Node-Webkit's iFrame option "nwfaketop":
    iFrame.contentWindow["steamSetLanguage"] = fromChildSetLanguage;
    iFrame.contentWindow["openExternalBrowser"] = fromChildOpenExternalBrowser;
    iFrame.contentWindow["setGameLayerState"] = fromChildGameLayerState;
    iFrame.contentWindow["openShopInOverlay"] = fromChildOpenShopInOverlay;
    iFrame.contentWindow["triggerApplicationRestart"] = fromChildTriggerApplicationRestart;

    // tracing the history for the debug menu:
    $.fn.steamDebug().traceIFrame(iFrame.contentWindow .location.href);
    }

    greenworks.on('game-overlay-activated', function(is_active) {
    if (!shopMode) {
    return;
    }
    if (is_active) {
    overlayEnabled = true;
    } else {
    shopMode = false;
    }
    });

    function fromChildTriggerApplicationRestart() {
    gameLayerState = false;
    startGameButton();
    }

    function fromChildOpenShopInOverlay(url, shopObject) {
    shopMode = true;
    greenworks.activateGameOverlayToWebPage(url);
    setTimeout(function() {
    // check after 1000ms if Steam overlay opens (event: "game-overlay-activated").
    // If not, open regular iFrame overlay as a fallback.
    if (!overlayEnabled) {
    shopObject.steamOverlayIsDisabled();
    shopObject.openIframe(url, 990, 600);
    } else {
    // Force a reload of the SPA page to reset the shop. Bad UX, but currently no other way.
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "resetShop"}', "*");
    }
    }, 1000);
    }

    // Stores whether the game layer is open (true) or closed (false).
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "setGameLayerState" and be called from within the "steamScripts.php" file.
    function fromChildGameLayerState(state) {
    gameLayerState = state;
    }

    // Triggers a change of the game language from within the website, and will force a reload of the iFrame.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "steamSetLanguage" and be called from within the "steamScripts.php" file.
    function fromChildSetLanguage(language) {
    setLanguage(language);
    initDom();
    }

    // This will trigger to open an external browser window (system's default browser).
    // Currently used on the "About" page of the website.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "openExternalBrowser" and be called from within the "steamScripts.php" file.
    function fromChildOpenExternalBrowser(url) {
    gui.Shell.openExternal(url);
    }

    // This function is being called once all variable have been loaded from the Steam Cloud or local hard disk
    // (language, security token, zoom level and background image). It then localized the text strings (see
    // localization.js) and prepares the iFrame that contains the website.
    function initDom() {
    // localize text strings (the "options" box):
    localizeContents();
    // initialize iFrame url:
    iFrameUrl = availableLanguages[gameLanguage] + '?steam_id=' + greenworks.getSteamId().accountId + '&steam_token=' + securityToken;
    iFrameUrl += '&pid=ANO_WW_02_0175_02_119_22_0415_00&cid=&utm_so urce=0175&utm_campaign=ANO_WW_02_0175_02_119_22_04 15_00&utm_medium=contentintegration';
    // write the iFrame to this web page:
    $("#iframe-wrapper").html(
    '<iframe nwfaketop allowfullscreen="true" id="nwiframe" src="' + iFrameUrl + '" frameBorder="0" onload="iFrameLoaded();"></iframe>'
    );
    }

    function setLanguage(lang) {
    if (availableLanguages[lang] == undefined) {
    lang = availableLanguages["default"];
    }
    gameLanguage = lang;
    $("#debug_gameLanguage").text(gameLanguage);
    greenworks.saveTextToFile(
    languageFile,
    gameLanguage,
    function() {},
    function(err) {
    alert("Critical error writing 'language.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    // This function will find the DOM elements with the IDs written in the list and get the right translation.
    // See "localization.js" for the actual strings.
    function localizeContents() {
    var contents = [
    'h1_options', 'p_options_intro', 'h2_zoom', 'p_zoom', 'span_zoom_standard',
    'span_zoom_bigger', 'span_zoom_very_big', 'h2_background', 'p_background',
    'span_options_close_apply', 'span_options_close_cancel',
    'h2_plugin', 'p_plugin', 'span_plugin_chrome', 'span_plugin_adobe'
    ], s;
    for (var i=0; i<contents.length; i++) {
    s = $('#'+contents[i]);
    if (s) {
    s.html(translate(contents[i]));
    }
    }
    }

    // This function is called then the user clicks the "Home" button in our Steam app nav.
    // If the game layer is opened, it will close the game layer.
    // If the game layer is not opened, it will force reload the iFrame with the original iFrame url.
    function startGameButton() {
    closeOptions();
    if (gameLayerState == true) {
    // just close the game layer on click if it's open:
    hideGameLayer();
    } else {
    // user is probably stuck on some external site; reload the SPA home page:
    var i = $("#nwiframe");
    i.attr("src", "about:blank;");
    // with timeout to have the browser hide the old content first (show "about:blank" for 1 millisecond):
    setTimeout(function(){i.attr("src", iFrameUrl); }, 1);
    }
    }

    function readPluginType() {
    // Read plugin type from file. On error, defaults to "adobe".
    pluginType = "adobe";
    fs.readFile(
    "togglePlugin.dat",
    {"encoding": "utf8"},
    function (err, content) {
    if (!err) {
    if (content == "chrome") {
    pluginType = content;
    }
    }
    $('.plugin_span.'+pluginType).addClass('active');
    startApplication();
    }
    );
    }

    function setPlugin(p) {
    if (!isWindows()) {
    return;
    }
    if (p != "chrome" && p != "adobe") {
    p = "adobe";
    }
    fs.writeFile(
    "togglePlugin.dat",
    p,
    {"encoding": "utf8"},
    function(err) {
    if (err) {
    alert("Critical error writing 'togglePlugin.dat':\n" + err);
    gui.App.quit();
    }
    restoreDefaults();
    restartApplication();
    }
    );
    }

    /**
    * This function is called on load. It will be called again and again until all variables are no
    * longer 'undefined'. This is necessary because reading from external files via Greenworks is an
    * asynchronous process.
    *
    * We may not render the website ("initDom") until all asynchronous requests have been completed.
    */
    function startApplication() {
    if (gameLanguage == undefined) {
    readGameLanguage();
    return;
    }
    if (securityToken == undefined) {
    readSecurityToken();
    return;
    }
    if (zoomLevel == undefined) {
    readZoomLevel();
    return;
    }
    if (currentBackground == undefined) {
    readBackground();
    return;
    }
    if (isWindows() && pluginType == undefined) {
    readPluginType();
    return;
    }
    initDom();
    }

    </script>

    </head>

    <body onload="forceRefresh();startApplication();">

    <div id="debug">

    <div id="nwiframe-trace-wrapper">
    <div id="nwiframe-trace">
    </div>
    Navigate to:
    <input type="text" id="nwiframe-url-input" name="nwiframe-url-input"/>
    <button id="nwiframe-url-input-button">Go</button>
    <script>
    $('#nwiframe-url-input-button').on('click', function() {
    var target = $('#nwiframe-url-input').val();
    if (target.length > 0) {
    if (target.indexOf("://") == -1) {
    target = 'http://' + target;
    }
    }
    $('#nwiframe-url-input').val('');
    $('#nwiframe').attr('src', target);
    });
    $('#nwiframe-url-input').on('keyup', function(e){
    if (e.keyCode == 13) {
    $('#nwiframe-url-input-button').click();
    }
    });
    </script>
    </div>

    <div id="debug-known-issues">
    <p><strong>Known issues</strong></p>
    <ul>
    <li>JavaScript alert boxes look kind of <a href="#" onclick="alert('Believe me?');return false;">weird</a> on Windows computers (this is a <a href="#" onclick="gui.Shell.openExternal('https://github.com/nwjs/nw.js/issues/433');return false;">known</a> Node-Webkit bug).</li>
    <li>Sometimes the Developer Tools open with an error message. In this case close and reopen them.</li>
    <li>If the Developer Tools are opened, the Steam overlay sometimes acts strange.</li>
    <li>The Steam overlay does not work on Mac due to some unknown reason.</li>
    <li>The Steam overlay does not work on Linux due to some unknown reason.</li>
    </ul>
    </div>

    <table class="userdata">
    <tr>
    <td>User's steam id</td>
    <td><script>document.write(greenworks.getSteamId() .staticAccountId);</script></td>
    </tr>
    <tr>
    <td>User's steam account id</td>
    <td><script>document.write(greenworks.getSteamId() .accountId);</script></td>
    </tr>
    <tr>
    <td>Security token</td>
    <td>
    <span id="debug_token"></span><br />
    <span id="debug_token_new">&bull; <a href="#" onclick="$.fn.steamDebug().forceNewToken();">gener ate new token</a><br /></span>
    <span id="debug_token_set">&bull; <a href="#" onclick="$.fn.steamDebug().setToken();">set token to value</a></span>
    </td>
    </tr>
    <tr>
    <td>User's steam screen name</td>
    <td><script>document.write(greenworks.getSteamId() .screenName);</script></td>
    </tr>
    <tr>
    <td>Steam client's language</td>
    <td><script>document.write(greenworks.getCurrentUI Language());</script></td>
    </tr>
    <tr>
    <td>Chosen game language</td>
    <td>
    <strong><span id="debug_gameLanguage"></span></strong><br />
    Set language to:<br />
    <span id="debugLanguageSelector">
    </span>
    <script>
    $.fn.steamDebug().initLanguageSelector();
    </script>
    <br />
    <a href="#" onclick="$.fn.steamDebug().toggleConfigureLanguage s();return false;">Configure languages</a>
    </td>
    </tr>
    <tr>
    <td>Steam cloud enabled</td>
    <td>
    <strong><script>document.write(greenworks.isCloudE nabledForUser() ? 'yes' : 'no');</script></strong> (for this Steam account)
    <strong><script>document.write(greenworks.isCloudE nabled() ? 'yes' : 'no');</script></strong> (for this game)<br />
    </td>
    </tr>
    <tr>
    <td>Cloud quota</td>
    <td id="debug_quota">
    <script>
    if (greenworks.isCloudEnabled()) {
    greenworks.getCloudQuota(
    function (total_bytes, available_bytes) {
    $('#debug_quota').html(available_bytes + ' / ' + total_bytes + ' bytes available');
    },
    function() {}
    );
    } else {
    $('#debug_quota').html('n/A');
    }
    </script>
    </td>
    </tr>
    <tr>
    <td>Greenworks user object</td>
    <td>
    <a id="showGreenworksObjectDump" href="#" onclick="$(this).hide();$('#greenworksObjectDump') .show();$('#hideGreenworksObjectDump').show();retu rn false;">show</a>
    <a id="hideGreenworksObjectDump" href="#" onclick="$(this).hide();$('#greenworksObjectDump') .hide();$('#showGreenworksObjectDump').show();retu rn false;" style="display: none;">hide</a>
    <div id="greenworksObjectDump" class="greenworksObjectDump">
    <pre><script>document.write(util.inspect(steamId)) ;</script></pre>
    </div>
    </td>
    </tr>
    </table>

    <div class="configureLanguages">
    <strong>Configure languages</strong><br />
    <textarea cols="60" rows="10" id="configureLanguagesInput"></textarea>
    <button onclick="$.fn.steamDebug().saveLanguages();">Save</button>
    <button onclick="$.fn.steamDebug().loadLanguagesToInput(); ">Undo changes</button>
    <button onclick="$.fn.steamDebug().cancelConfigureLanguage s();">Cancel</button>
    <button onclick="$.fn.steamDebug().restoreDefaults();">Res tore defaults</button>
    </div>

    <div id="debug-buttons">
    <a href="#" onclick="$('#debug').slideToggle()">Hide this panel</a>
    <a href="#" id="debug-a-session" onclick="$.fn.steamDebug().toggleSessionData($(thi s));">View session data</a>
    <a href="#" onclick="$.fn.steamDebug().reloadApplication();">R estart application</a>
    <a href="#" onclick="win.toggleFullscreen();return false;">Toggle fullscreen</a>
    <a href="#" onclick="win.showDevTools();return false;">Dev tools</a>
    <a href="#" id="debug-a-history" onclick="$.fn.steamDebug().toggleHistory($(this)); ">History</a>
    <a href="#" onclick="$.fn.steamDebug().clearCache();">Clear cache</a>
    <a href="#" onclick="$.fn.steamDebug().reloadFrame();">Reload current page</a>
    <a href="#" id="debug-a-issues" onclick="$.fn.steamDebug().toggleIssues($(this));" >Known issues</a>
    <br clear="all"/>
    </div>

    </div><!-- #debug -->




    <div id="wrapper">

    <div id="iframe-wrapper"></div>

    <div id="steamnav">

    <table class="vertical-line">
    <tr>
    <td class="top"></td>
    </tr>
    <tr>
    <td class="middle"></td>
    </tr>
    <tr>
    <td class="bottom"></td>
    </tr>
    </table>


    <!-- Anfang - Menu minimal überarbeitet. -->
    <div class="buttons">
    <div class="divider"></div>
    <div class="button home" onclick="startGameButton();"></div>
    <div class="divider"></div>
    <div class="button fullscreen" onclick="win.toggleFullscreen();"></div>
    <div class="divider"></div>
    <div class="button options" onclick="toggleOptions();"></div>
    <div class="divider"></div>
    <div class="button about" onclick="showAbout();"></div>
    <div class="divider"></div>
    <div class="button quit" onclick="gui.App.quit();"></div>
    <div class="divider"></div>
    <a href="index.html" title="Return to the Main-Menu"><div class="button return"></div></a>
    <div class="divider"></div>
    </div>
    <!-- Ende -->


    <div class="button help" onclick="$.fn.steamDebug().help(event);"></div>

    <canvas id="forceRefresh" width="1" height="1"></canvas>

    </div>

    <div class="options-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="p_options_intro"></span>
    <span id="h2_zoom"></span>
    <span class="divider"></span>
    <span id="p_zoom"></span>
    <span class="zoom_wrap">
    <span class="zoom_buttons">
    <span class="zoom_span zoom_0"><span id="span_zoom_standard" onclick="setZoomLevel(0);"></span></span>
    <span class="zoom_span zoom_1"><span id="span_zoom_bigger" onclick="setZoomLevel(1);"></span></span>
    <span class="zoom_span zoom_2"><span id="span_zoom_very_big" onclick="setZoomLevel(2);"></span></span>
    </span>
    </span>
    <span id="h2_background"></span>
    <span class="divider"></span>
    <span id="p_background"></span>
    <span>
    <span class="background_buttons">
    <span class="background_span background_0" onclick="setBackground(0);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_1" onclick="setBackground(1);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_2" onclick="setBackground(2);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    </span>
    </span>

    <span id="h2_plugin"></span>
    <span class="divider"></span>
    <span id="p_plugin"></span>
    <span class="plugin_wrap">
    <span class="plugin_buttons">
    <span class="plugin_span chrome"><span id="span_plugin_chrome" onclick="setPlugin('chrome');"></span></span>
    <span class="plugin_span adobe"><span id="span_plugin_adobe" onclick="setPlugin('adobe');"></span></span>
    </span>
    </span>
    <br />


    <div class="button_wrap">
    <span class="button close" onclick="closeOptions();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_apply"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    <div class="button_wrap">
    <span class="button cancel" onclick="closeOptionsCancel();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_cancel"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="h1_options"></span>
    </div>
    <div class="close" onclick="closeOptionsCancel();"></div>
    </div>

    </div>

    </body>


    index_steam_mini.html

    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
    <script src="js/jquery-2.1.3.min.js"></script>
    <script src="js/swfobject.js"></script>
    <link rel="stylesheet" href="css/styles.css"/>

    <script src="js/debugger.js"></script>
    <script src="js/flashDetect.js"></script>
    <script src="js/localization.js"></script>
    <script src="js/languages.js"></script>
    <link rel="stylesheet" href="css/debugger.css"/>

    <meta charset="utf-8"/>


    <!-- Anfang - Die Scripte, die für dieses Addon entscheidend sind. -->
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    <link rel="stylesheet" href="css/addon.css"/>
    <!-- Ende -->


    <script>

    // globals and definitions:
    util = require("util");
    greenworks = require('./greenworks');
    gui = require('nw.gui');
    win = gui.Window.get();

    flashDetect();

    iFrameUrl = '';
    tokenFile = "savegame.dat";
    languageFile = "language.dat";
    zoomLevelFile = "zoom.dat";
    backgroundFile = "background.dat";
    pluginType = undefined;
    gameLanguage = undefined;
    securityToken = undefined;
    zoomLevel = undefined;
    currentBackground = undefined;
    oldBackground = undefined; // used for "cancel" button in options dialog
    oldZoomLevel = undefined; // used for "cancel" button in options dialog
    maxZoomLevel = 2; // number of zoom levels, starting at 0
    maxBackgrounds = 2; // number of backgrounds, starting at 0
    securityTokenLength = 16;
    optionsDisplayed = false; // flag if the "Options" are opened.
    gameLayerState = false; // Whether or not the GameLayer is opened.
    shopMode = false; // set to 'true' just before opening the Steam overlay with the payment url, so the Steam event listener will listen.
    overlayEnabled = false; // set to 'true' if Steam overlay is working as intended (opens).


    // delete cookies from previous visits ...
    function removeCookie(cookie) {
    var cookieUrl = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain + cookie.path;
    if (cookieUrl.indexOf('steampowered.com') > -1 || cookieUrl.indexOf('steamcommunity.com') > -1 ) {
    if(cookie.name.indexOf('steamMachineAuth') > -1) {
    // ... but keep "Steam Guard" cookies to prevent it from triggering every time:
    return;
    }
    // remark: it is VERY IMPORTANT to also delete the steam shop's cookies. Otherwise, in case of
    // switching the user, the new user could still use the old user's login to confirm his purchases.
    // So if you change anything here regarding the cookies, please make sure the steam shop login
    // is gone once you restart the game!
    }
    if(cookie.name.indexOf('cookies_policy_accepted') > -1) {
    // ... but keep the cookie that saves the cookie policy acceptance status:
    return;
    }
    win.cookies.remove({ url: cookieUrl, name: cookie.name }, function(result) {});
    }
    win.cookies.getAll( {},
    function(cookies) {
    for (var i=0; i<cookies.length; i++) {
    removeCookie(cookies[i]);
    }
    });

    var initApi = greenworks.initAPI();

    if(!initApi){
    alert("Steam is not running.\n\nThis application requires your Steam client to be running.");
    gui.App.quit();
    } else {
    var steamId = greenworks.getSteamId();
    if (false == steamId.hasOwnProperty("staticAccountId") || parseInt(steamId.staticAccountId) == 0) {
    alert("Please log into your Steam account.\n\nThis application requires a valid Steam account.");
    gui.App.quit();
    }
    }

    // Force every "new window" or "new tab" to be opened in the same iFrame (instead of a
    // new window), so the user never loses our left navigation bar:
    function newWindowPolicy(frame, url, policy) {
    policy.forceCurrent();
    }
    win.removeAllListeners('new-win-policy');
    win.on('new-win-policy', newWindowPolicy);

    var isFocused = true;
    win.removeAllListeners('focus');
    win.on('focus', function () {
    isFocused = true;
    });
    win.removeAllListeners('blur');
    win.on('blur', function () {
    isFocused = false;
    });

    // prevent dragging & dropping links into this application:
    function handleDragEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
    }
    var dragEvents = ['dragend', 'dragstart', 'drop', 'dragenter', 'dragleave', 'dragover'];
    for (var i=0; i<dragEvents.length; i++) {
    window.addEventListener(dragEvents[i], handleDragEvent);
    }

    var fps = 30;
    function forceRefresh() {
    // this function updates the renderer at a given frame rate, even if the user is idle.
    // without this function, the Steam overlay would feel like "frozen".
    setTimeout(function() {
    document.getElementById("forceRefresh").getContext ("2d").clearRect(0, 0, 1, 1);
    window.requestAnimationFrame(forceRefresh);
    }, 1000 / fps);
    }

    // This will create a "security token" to be linked with this account.
    // @see https://mdc-web-tomcat17.ubisoft.org...geId=302416061
    function createSecurityToken() {
    var chars = '0123456789abcdefghijklmnopqrstuvwxyz';
    securityToken = '';
    for (var i = securityTokenLength; i > 0; --i) securityToken += chars[Math.round(Math.random() * (chars.length - 1))];
    greenworks.saveTextToFile(
    tokenFile,
    securityToken,
    function() {
    startApplication();
    },
    function(err) {
    alert("Critical error:\n" + err);
    gui.App.quit();
    }
    );
    }

    // Read security token. If not present, create one.
    function readSecurityToken() {
    greenworks.readTextFromFile(
    tokenFile,
    function (content) {
    if (content.length == 0) {
    createSecurityToken();
    } else {
    securityToken = content;
    }
    startApplication();
    $("#debug_token").text(securityToken);
    },
    function () {
    createSecurityToken();
    }
    );
    }

    function readGameLanguage() {
    // Read language setting. If not present, map Steam client's language.
    greenworks.readTextFromFile(
    languageFile,
    function (content) {
    if (content.length == 0) {
    initLanguage();
    } else if (content.length != 2) {
    gameLanguage = availableLanguages["default"];
    } else if (availableLanguages[content] == undefined) {
    gameLanguage = availableLanguages["default"];
    } else {
    gameLanguage = content;
    }
    $("#debug_gameLanguage").text(gameLanguage);
    startApplication();
    },
    function () {
    initLanguage();
    startApplication();
    }
    );
    }

    function readZoomLevel() {
    // Read zoom level setting. If not present, set to default "0".
    greenworks.readTextFromFile(
    zoomLevelFile,
    function (content) {
    if (content.length != 1) {
    content = 0;
    }
    setZoomLevel(content);
    startApplication();
    },
    function () {
    setZoomLevel(0);
    startApplication();
    }
    );
    }

    function setZoomLevel(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxZoomLevel) {
    n = maxZoomLevel;
    }
    if (n === zoomLevel) {
    return;
    }
    zoomLevel = n;
    win.zoomLevel = zoomLevel;
    for (var i=0; i<=maxZoomLevel; i++) {
    $('.zoom_' + i).removeClass('active');
    }
    $('.zoom_' + zoomLevel).addClass('active');
    greenworks.saveTextToFile(
    zoomLevelFile,
    zoomLevel.toString(),
    function() {},
    function(err) {
    alert("Critical error writing 'zoom.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    function readBackground() {
    // Read background setting. If not present, set to default "0".
    greenworks.readTextFromFile(
    backgroundFile,
    function (content) {
    if (content.length != 1) {
    content = 0;
    }
    setBackground(content);
    startApplication();
    },
    function () {
    setBackground(0);
    startApplication();
    }
    );
    }

    function setBackground(n) {
    n = parseInt(n);
    if (n < 0) {
    n = 0;
    }
    if (n > maxBackgrounds) {
    n = maxBackgrounds;
    }
    if (n === currentBackground) {
    return;
    }
    currentBackground = n;
    updateBackground();
    for (var i=0; i<=maxBackgrounds; i++) {
    $('.background_' + i).removeClass('active');
    }
    $('.background_' + currentBackground).addClass('active');
    greenworks.saveTextToFile(
    backgroundFile,
    currentBackground.toString(),
    function() {},
    function(err) {
    alert("Critical error writing 'background.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    function updateBackground() {
    var wrapper = $("#wrapper");
    for (var i=0; i<=maxBackgrounds; i++) {
    wrapper.removeClass('bg_'+i);
    }
    wrapper.addClass('bg_'+currentBackground);
    }

    function closeOptionsCancel() {
    if (oldBackground !== undefined && oldBackground !== currentBackground) {
    setBackground(oldBackground);
    }
    if (oldZoomLevel !== undefined && oldZoomLevel !== zoomLevel) {
    setZoomLevel(oldZoomLevel);
    }
    closeOptions();
    }

    function closeOptions() {
    if (optionsDisplayed === false) {
    return;
    }
    optionsDisplayed = false;
    $('.options-layer').hide();
    $('#nwiframe').css('margin-top', '0');
    }

    function toggleOptions() {
    if (optionsDisplayed === true) {
    closeOptions();
    return;
    }
    oldBackground = currentBackground;
    oldZoomLevel = zoomLevel;
    optionsDisplayed = true;
    $('#nwiframe').css('margin-top', '-10000px');
    $('.options-layer').show();
    }

    // Dispatches a postMessage event to the embedded website, forcing it to "hide" the game layer.
    // The "game layer" is the overlay that contains the flash game. It covers the whole screen except for the
    // application's navigation bar (the one from this file).
    function hideGameLayer() {
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "closeGameLayer"}', "*");
    }

    // Dispatches a postMessage event to the website display the "About" layer that contains the legal information.
    function showAbout() {
    closeOptions();
    hideGameLayer();
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "showAbout"}', "*");
    }

    /**
    * Try to initialize the user's language by taking a look at his Steam client's language.
    * Usually only done once when running the game for the first time.
    */
    function initLanguage() {
    switch (greenworks.getCurrentUILanguage()) {
    case "german":
    setLanguage("de");
    break;
    case "english":
    setLanguage("en");
    break;
    case "french":
    setLanguage("fr");
    break;
    case "italian":
    setLanguage("fr");
    break;
    case "polish":
    setLanguage("pl");
    break;
    case "dutch":
    setLanguage("nl");
    break;
    case "danish":
    setLanguage("dk");
    break;
    case "spanish":
    setLanguage("es");
    break;
    case "czech":
    setLanguage("cz");
    break;
    case "russian":
    setLanguage("ru");
    break;
    default:
    setLanguage(availableLanguages["default"]);
    }
    }

    // This function is triggered once the iFrame with the website is being loaded.
    function iFrameLoaded() {
    var iFrame = document.getElementById("nwiframe");

    // Write functions to the child window, since it has no access to "top" due to Node-Webkit's iFrame option "nwfaketop":
    iFrame.contentWindow["steamSetLanguage"] = fromChildSetLanguage;
    iFrame.contentWindow["openExternalBrowser"] = fromChildOpenExternalBrowser;
    iFrame.contentWindow["setGameLayerState"] = fromChildGameLayerState;
    iFrame.contentWindow["openShopInOverlay"] = fromChildOpenShopInOverlay;
    iFrame.contentWindow["triggerApplicationRestart"] = fromChildTriggerApplicationRestart;

    // tracing the history for the debug menu:
    $.fn.steamDebug().traceIFrame(iFrame.contentWindow .location.href);
    }

    greenworks.on('game-overlay-activated', function(is_active) {
    if (!shopMode) {
    return;
    }
    if (is_active) {
    overlayEnabled = true;
    } else {
    shopMode = false;
    }
    });

    function fromChildTriggerApplicationRestart() {
    gameLayerState = false;
    startGameButton();
    }

    function fromChildOpenShopInOverlay(url, shopObject) {
    shopMode = true;
    greenworks.activateGameOverlayToWebPage(url);
    setTimeout(function() {
    // check after 1000ms if Steam overlay opens (event: "game-overlay-activated").
    // If not, open regular iFrame overlay as a fallback.
    if (!overlayEnabled) {
    shopObject.steamOverlayIsDisabled();
    shopObject.openIframe(url, 990, 600);
    } else {
    // Force a reload of the SPA page to reset the shop. Bad UX, but currently no other way.
    document.getElementById("nwiframe").contentWindow. postMessage('{"method": "resetShop"}', "*");
    }
    }, 1000);
    }

    // Stores whether the game layer is open (true) or closed (false).
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "setGameLayerState" and be called from within the "steamScripts.php" file.
    function fromChildGameLayerState(state) {
    gameLayerState = state;
    }

    // Triggers a change of the game language from within the website, and will force a reload of the iFrame.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "steamSetLanguage" and be called from within the "steamScripts.php" file.
    function fromChildSetLanguage(language) {
    setLanguage(language);
    initDom();
    }

    // This will trigger to open an external browser window (system's default browser).
    // Currently used on the "About" page of the website.
    // This function will be written into the iFrame's DOM (see "iFrameLoaded()").
    // It will be named "openExternalBrowser" and be called from within the "steamScripts.php" file.
    function fromChildOpenExternalBrowser(url) {
    gui.Shell.openExternal(url);
    }

    // This function is being called once all variable have been loaded from the Steam Cloud or local hard disk
    // (language, security token, zoom level and background image). It then localized the text strings (see
    // localization.js) and prepares the iFrame that contains the website.
    function initDom() {
    // localize text strings (the "options" box):
    localizeContents();
    // initialize iFrame url:
    iFrameUrl = availableLanguages[gameLanguage] + '?steam_id=' + greenworks.getSteamId().accountId + '&steam_token=' + securityToken;
    iFrameUrl += '&pid=ANO_WW_02_0175_02_119_22_0415_00&cid=&utm_so urce=0175&utm_campaign=ANO_WW_02_0175_02_119_22_04 15_00&utm_medium=contentintegration';
    // write the iFrame to this web page:
    $("#mini-iframe-wrapper").html(
    '<iframe nwfaketop allowfullscreen="true" id="nwiframe" src="' + iFrameUrl + '" frameBorder="0" onload="iFrameLoaded();"></iframe>'
    );
    }

    function setLanguage(lang) {
    if (availableLanguages[lang] == undefined) {
    lang = availableLanguages["default"];
    }
    gameLanguage = lang;
    $("#debug_gameLanguage").text(gameLanguage);
    greenworks.saveTextToFile(
    languageFile,
    gameLanguage,
    function() {},
    function(err) {
    alert("Critical error writing 'language.dat':\n" + err);
    gui.App.quit();
    }
    );
    }

    // This function will find the DOM elements with the IDs written in the list and get the right translation.
    // See "localization.js" for the actual strings.
    function localizeContents() {
    var contents = [
    'h1_options', 'p_options_intro', 'h2_zoom', 'p_zoom', 'span_zoom_standard',
    'span_zoom_bigger', 'span_zoom_very_big', 'h2_background', 'p_background',
    'span_options_close_apply', 'span_options_close_cancel',
    'h2_plugin', 'p_plugin', 'span_plugin_chrome', 'span_plugin_adobe'
    ], s;
    for (var i=0; i<contents.length; i++) {
    s = $('#'+contents[i]);
    if (s) {
    s.html(translate(contents[i]));
    }
    }
    }

    // This function is called then the user clicks the "Home" button in our Steam app nav.
    // If the game layer is opened, it will close the game layer.
    // If the game layer is not opened, it will force reload the iFrame with the original iFrame url.
    function startGameButton() {
    closeOptions();
    if (gameLayerState == true) {
    // just close the game layer on click if it's open:
    hideGameLayer();
    } else {
    // user is probably stuck on some external site; reload the SPA home page:
    var i = $("#nwiframe");
    i.attr("src", "about:blank;");
    // with timeout to have the browser hide the old content first (show "about:blank" for 1 millisecond):
    setTimeout(function(){i.attr("src", iFrameUrl); }, 1);
    }
    }

    function readPluginType() {
    // Read plugin type from file. On error, defaults to "adobe".
    pluginType = "adobe";
    fs.readFile(
    "togglePlugin.dat",
    {"encoding": "utf8"},
    function (err, content) {
    if (!err) {
    if (content == "chrome") {
    pluginType = content;
    }
    }
    $('.plugin_span.'+pluginType).addClass('active');
    startApplication();
    }
    );
    }

    function setPlugin(p) {
    if (!isWindows()) {
    return;
    }
    if (p != "chrome" && p != "adobe") {
    p = "adobe";
    }
    fs.writeFile(
    "togglePlugin.dat",
    p,
    {"encoding": "utf8"},
    function(err) {
    if (err) {
    alert("Critical error writing 'togglePlugin.dat':\n" + err);
    gui.App.quit();
    }
    restoreDefaults();
    restartApplication();
    }
    );
    }

    /**
    * This function is called on load. It will be called again and again until all variables are no
    * longer 'undefined'. This is necessary because reading from external files via Greenworks is an
    * asynchronous process.
    *
    * We may not render the website ("initDom") until all asynchronous requests have been completed.
    */
    function startApplication() {
    if (gameLanguage == undefined) {
    readGameLanguage();
    return;
    }
    if (securityToken == undefined) {
    readSecurityToken();
    return;
    }
    if (zoomLevel == undefined) {
    readZoomLevel();
    return;
    }
    if (currentBackground == undefined) {
    readBackground();
    return;
    }
    if (isWindows() && pluginType == undefined) {
    readPluginType();
    return;
    }
    initDom();
    }

    </script>

    </head>

    <body onload="forceRefresh();startApplication();">

    <div id="debug">

    <div id="nwiframe-trace-wrapper">
    <div id="nwiframe-trace">
    </div>
    Navigate to:
    <input type="text" id="nwiframe-url-input" name="nwiframe-url-input"/>
    <button id="nwiframe-url-input-button">Go</button>
    <script>
    $('#nwiframe-url-input-button').on('click', function() {
    var target = $('#nwiframe-url-input').val();
    if (target.length > 0) {
    if (target.indexOf("://") == -1) {
    target = 'http://' + target;
    }
    }
    $('#nwiframe-url-input').val('');
    $('#nwiframe').attr('src', target);
    });
    $('#nwiframe-url-input').on('keyup', function(e){
    if (e.keyCode == 13) {
    $('#nwiframe-url-input-button').click();
    }
    });
    </script>
    </div>

    <div id="debug-known-issues">
    <p><strong>Known issues</strong></p>
    <ul>
    <li>JavaScript alert boxes look kind of <a href="#" onclick="alert('Believe me?');return false;">weird</a> on Windows computers (this is a <a href="#" onclick="gui.Shell.openExternal('https://github.com/nwjs/nw.js/issues/433');return false;">known</a> Node-Webkit bug).</li>
    <li>Sometimes the Developer Tools open with an error message. In this case close and reopen them.</li>
    <li>If the Developer Tools are opened, the Steam overlay sometimes acts strange.</li>
    <li>The Steam overlay does not work on Mac due to some unknown reason.</li>
    <li>The Steam overlay does not work on Linux due to some unknown reason.</li>
    </ul>
    </div>

    <table class="userdata">
    <tr>
    <td>User's steam id</td>
    <td><script>document.write(greenworks.getSteamId() .staticAccountId);</script></td>
    </tr>
    <tr>
    <td>User's steam account id</td>
    <td><script>document.write(greenworks.getSteamId() .accountId);</script></td>
    </tr>
    <tr>
    <td>Security token</td>
    <td>
    <span id="debug_token"></span><br />
    <span id="debug_token_new">&bull; <a href="#" onclick="$.fn.steamDebug().forceNewToken();">gener ate new token</a><br /></span>
    <span id="debug_token_set">&bull; <a href="#" onclick="$.fn.steamDebug().setToken();">set token to value</a></span>
    </td>
    </tr>
    <tr>
    <td>User's steam screen name</td>
    <td><script>document.write(greenworks.getSteamId() .screenName);</script></td>
    </tr>
    <tr>
    <td>Steam client's language</td>
    <td><script>document.write(greenworks.getCurrentUI Language());</script></td>
    </tr>
    <tr>
    <td>Chosen game language</td>
    <td>
    <strong><span id="debug_gameLanguage"></span></strong><br />
    Set language to:<br />
    <span id="debugLanguageSelector">
    </span>
    <script>
    $.fn.steamDebug().initLanguageSelector();
    </script>
    <br />
    <a href="#" onclick="$.fn.steamDebug().toggleConfigureLanguage s();return false;">Configure languages</a>
    </td>
    </tr>
    <tr>
    <td>Steam cloud enabled</td>
    <td>
    <strong><script>document.write(greenworks.isCloudE nabledForUser() ? 'yes' : 'no');</script></strong> (for this Steam account)
    <strong><script>document.write(greenworks.isCloudE nabled() ? 'yes' : 'no');</script></strong> (for this game)<br />
    </td>
    </tr>
    <tr>
    <td>Cloud quota</td>
    <td id="debug_quota">
    <script>
    if (greenworks.isCloudEnabled()) {
    greenworks.getCloudQuota(
    function (total_bytes, available_bytes) {
    $('#debug_quota').html(available_bytes + ' / ' + total_bytes + ' bytes available');
    },
    function() {}
    );
    } else {
    $('#debug_quota').html('n/A');
    }
    </script>
    </td>
    </tr>
    <tr>
    <td>Greenworks user object</td>
    <td>
    <a id="showGreenworksObjectDump" href="#" onclick="$(this).hide();$('#greenworksObjectDump') .show();$('#hideGreenworksObjectDump').show();retu rn false;">show</a>
    <a id="hideGreenworksObjectDump" href="#" onclick="$(this).hide();$('#greenworksObjectDump') .hide();$('#showGreenworksObjectDump').show();retu rn false;" style="display: none;">hide</a>
    <div id="greenworksObjectDump" class="greenworksObjectDump">
    <pre><script>document.write(util.inspect(steamId)) ;</script></pre>
    </div>
    </td>
    </tr>
    </table>

    <div class="configureLanguages">
    <strong>Configure languages</strong><br />
    <textarea cols="60" rows="10" id="configureLanguagesInput"></textarea>
    <button onclick="$.fn.steamDebug().saveLanguages();">Save</button>
    <button onclick="$.fn.steamDebug().loadLanguagesToInput(); ">Undo changes</button>
    <button onclick="$.fn.steamDebug().cancelConfigureLanguage s();">Cancel</button>
    <button onclick="$.fn.steamDebug().restoreDefaults();">Res tore defaults</button>
    </div>

    <div id="debug-buttons">
    <a href="#" onclick="$('#debug').slideToggle()">Hide this panel</a>
    <a href="#" id="debug-a-session" onclick="$.fn.steamDebug().toggleSessionData($(thi s));">View session data</a>
    <a href="#" onclick="$.fn.steamDebug().reloadApplication();">R estart application</a>
    <a href="#" onclick="win.toggleFullscreen();return false;">Toggle fullscreen</a>
    <a href="#" onclick="win.showDevTools();return false;">Dev tools</a>
    <a href="#" id="debug-a-history" onclick="$.fn.steamDebug().toggleHistory($(this)); ">History</a>
    <a href="#" onclick="$.fn.steamDebug().clearCache();">Clear cache</a>
    <a href="#" onclick="$.fn.steamDebug().reloadFrame();">Reload current page</a>
    <a href="#" id="debug-a-issues" onclick="$.fn.steamDebug().toggleIssues($(this));" >Known issues</a>
    <br clear="all"/>
    </div>

    </div><!-- #debug -->


    <!-- Anfang - Die Mini-Navi-Leiste + Steamoverlaybooster. -->
    <div id="wrapper">
    <div id="mini-iframe-wrapper"></div>
    <div id="mini-nav" title="Game-Keys (ALT+): S|H = Startpage W|F = Toggle Fullscreen O = Options M = Mainmenu Q = Quit Global-Keys: Win+Arrow Up/Down = Window Max/Min Alt+F4 = Quit">
    <a href="#" accesskey="s" onclick="startGameButton();"></a>
    <a href="#" accesskey="h" onclick="startGameButton();"></a>
    <a href="#" accesskey="w" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="f" onclick="win.toggleFullscreen();"></a>
    <a href="#" accesskey="o" onclick="toggleOptions();"></a>
    <a href="index.html" accesskey="m"></a>
    <a href="#" accesskey="q" onclick="gui.App.quit();"></a>
    <canvas id="forceRefresh" width="1" height="1"></canvas>
    </div>
    <!-- Ende -->


    <div class="options-layer" id="options-layer">
    <div class="top">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="middle">
    <div class="left"></div>
    <div class="middle">
    <span id="p_options_intro"></span>
    <span id="h2_zoom"></span>
    <span class="divider"></span>
    <span id="p_zoom"></span>
    <span class="zoom_wrap">
    <span class="zoom_buttons">
    <span class="zoom_span zoom_0"><span id="span_zoom_standard" onclick="setZoomLevel(0);"></span></span>
    <span class="zoom_span zoom_1"><span id="span_zoom_bigger" onclick="setZoomLevel(1);"></span></span>
    <span class="zoom_span zoom_2"><span id="span_zoom_very_big" onclick="setZoomLevel(2);"></span></span>
    </span>
    </span>
    <span id="h2_background"></span>
    <span class="divider"></span>
    <span id="p_background"></span>
    <span>
    <span class="background_buttons">
    <span class="background_span background_0" onclick="setBackground(0);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_1" onclick="setBackground(1);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    <span class="background_span background_2" onclick="setBackground(2);">
    <span class="img"></span>
    <span class="shader"></span>
    <span class="frame"></span>
    </span>
    </span>
    </span>

    <span id="h2_plugin"></span>
    <span class="divider"></span>
    <span id="p_plugin"></span>
    <span class="plugin_wrap">
    <span class="plugin_buttons">
    <span class="plugin_span chrome"><span id="span_plugin_chrome" onclick="setPlugin('chrome');"></span></span>
    <span class="plugin_span adobe"><span id="span_plugin_adobe" onclick="setPlugin('adobe');"></span></span>
    </span>
    </span>
    <br />


    <div class="button_wrap">
    <span class="button close" onclick="closeOptions();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_apply"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    <div class="button_wrap">
    <span class="button cancel" onclick="closeOptionsCancel();">
    <span class="left"></span>
    <span class="middle">
    <span id="span_options_close_cancel"></span>
    </span>
    <span class="right"></span>
    </span>
    </div>
    </div>
    <div class="right"></div>
    </div>
    <div class="bottom">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
    </div>
    <div class="header">
    <span id="h1_options"></span>
    </div>
    <div class="close" onclick="closeOptionsCancel();"></div>
    </div>
    </div>


    </body>


    index - Simple.html als index.html speichern

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="de">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Anno Online - Addon v1.0 by H. Shephard</title>
    </head>
    <body>
    <p><a href="index_normal.html" title="Non-Steam-Client">Normaler Client</a></p>
    <p><a href="index_steam.html" title="Steam-Client">Steam Client</a></p>
    <p><a href="index_normal_nn.html" title="Non-Steam-Client - Ohne Navi">Normaler Client - Mini</a></p>
    <p><a href="index_steam_nn.html" title="Steam-Client - Ohne Navi">Steam Client - Mini</a></p>
    </body>
    </html>


    img/icon2.png



    img/client/icon_help.png



    Geändert von Seldaron (12.04.17 um 13:01 Uhr)

  3. #3

    Registriert seit
    May 2013
    Beiträge
    4
    Server
    Meerjungfrau

    Changelog

    Changelog - 12.04.2017

    v1.0 - Addon - 12.04.2017 - Retail
    • Addon ist nun für alle User zugänglich
    • Code ein wenig angepasst
    • Steam-Guide überarbeitet
      • Diverse Rechtschreibfehler behoben
      • AOA-Bedienungsanleitung hinzugefügt
      • Formatierungen angepasst

    v0.9 - Addon - 11.04.2017
    • Anleitung ins Offizielle AO-Forum gesetzt
    • Forumsbeitrag zur Versionsprüfung im Hauptmenu verlinkt

    v0.8 - Addon - 09.09.2016
    • Haupmenu überarbeitet
      • Quellcode angepasst
      • Guide verlinkt
      • Optionsmenu hinzugefügt
      • Gamekey (ALT+O) für Optionen im Hauptmenu hinzugefüht
    • Addon-Scripte angepasst und optimiert

    v0.7 - Addon - 29.08.2016
    • Optional kann man jetzt mit minimaler Navileiste Spielen.
    • Hotkeys zur Navigation in den Untermenus hinzugefügt. (Nur Mini-Navi)
    • Mouse-Over mit Auflistung in das Mini-Navi eingebaut.
    • Mini-Index aktualisiert.
    • Overlaysupport verbessert.
    • Bug mit der Inkompatibilität zwischen der Normalen- und der Steamversion behoben.

    v0.6 - Addon - 10.08.2016
    • Addon-Quellcode umgearbeitet und weiter optimiert.
    • Hauptmenu ist nun mehrsprachig. (Zurzeit nur "DE" und "ENG")
    • Verlinkungen in der Navigationsleiste im Addon angepasst.
      • Links führen jetzt direkt ans Ziel.
      • Links sind (sofern vorhanden) an alle verfügbaren Sprachen angepasst.

    v0.5 - Addon - 08.08.2016
    • "Betaclient" in "Addon" umbenannt.
    • Addon-Quellcode optimiert.

    v0.4 - Betaclient - 29.07.2016
    • Die Navi-Leiste in den Start-Client eingefügt.
    • Neue Buttons hinzugefügt.
    • Eigene CSS-Datei für das Addon erstellt.

    v0.3 - Betaclient - 23.07.2016
    • Einen "Return"-Button eingebaut um wieder ins Hauptmenu zu gelangen.

    v0.2 - Betaclient - 08.07.2016
    • Fehler mit der debugger.js Datei behoben.
    • Normale Version hat ihren Helpbutton+Funktion zurück erhalten.
    • Startclient wurde eine grafische Oberfläche hinzugefügt.
    • Einfache Version des Startclients beigelegt. (Sollte der neue Client Probleme machen, einfach austauschen.)

    v0.1 - Betaclient - 04.07.2016
    • Getestet mit Windows 7 - 64 Bit
    • Startclient ermöglicht das Auswählen beider AO-Versionen.
    • Steamversion - Dänische Sprachausgabe minimal hinzugefügt.*
    Geändert von Seldaron (12.04.17 um 12:52 Uhr)

  4. #4

    Registriert seit
    Apr 2017
    Beiträge
    76
    Server
    Korallenriff
    Zitat Zitat von Seldaron Beitrag anzeigen
    Hallo liebe Anno Online - Community!

    Hiermit präsentiere ich offiziell:
    • Einen "How to" Steamguide sowie
    • Das Anno Online - Addon kurz "AOA" für Steam.

    ================= Vorwort ====================
    Ich spiele AO schon seit einigen Jahren (mit Unterbrechungen) und bin weiterhin begeistert.
    Allerdings gibt es hier und da Probleme und Nöte die viele Spieler haben, aber das ist ja bei jedem Spiel so.
    Als der Slimbrowser zum Download bereit stand, gab es endlich eine Möglichkeit (für mich und warscheinlich auch für Andere) dieses Spiel schneller zu laden und flüssiger zu Spielen.
    Mit der Steamveröffentlichung, einige Zeit später, erhoffte ich mir eine größere Community - leider aber gibt es hier einen bekannten Haken.

    Schon seit einiger Zeit haben mich gewisse Dinge gestört.
    Zum einen das große Navi sowie die fehlende Unterstützung für die Nicht-Steam-Accounts.
    Daher habe ich in mühsamer Kleinarbeit versucht diese Defiziehte auszumergeln und herraus kahm 2 Dinge.
    Ein Steamguide für die Nutzung des alten Acounts in Steam sowie dieses Addon.

    Mit beiden Dingen will ich vorallem versuchen, der Steamcommunity etwas entgegen zu kommen.
    ============================================


    ================ Der Guide ===================

    Anno Online - How to


    In diesem Guide versuche ich:
    • Den Leute zu zeigen wie man AO mit Steam verknüpfen kann. bzw.
    • Den AO Client mit dem alten Account zu verbinden.
    • FAQ's zu liefern.
    • Den Leuten zu zeigen wie man den Client ein wenig anpasst.
    • Das AOA zu bewerben.
    ============================================


    ================ Das Addon ===================

    Mit diesem Addon komme folgende Funktionen.
    • Die Möglichkeit beides - den Normalen- und den Steam-Account - zu benutzen.
    • Mit einer viel kleineren Navileiste zu zocken.
    • Tastenkürzel zur Navigation zu benutzen. (Nur die Mini-Navi-Version.)

    Links: Hauptmenu | Rechts: Login-Menu mit Mininavi

    (Bilder anklicken für volle Auslösung)


    Leider spiele ich nicht mit einem Steam-Account und konnte somit die Steam-Version nicht ausgiebig testen.

    Einen Hacken hat das Ganze allerdings:
    Da Steam keinen Workshop für AO bereit hält und Bluebyte sich Sorgen um Viren oder andere Schadsoftware macht gibt es keinen Download Link.
    Um das Addon nutzen zu können müsst ihr das Ding, üben den Quellcode den ich hier in "Spoiler" packe, selber zusammensetzen.
    Sollte sich doch noch eine andere Möglichkeit finden werde ich diese hier zur Verfügung stellen.
    ============================================


    ============== Installation - Beta=================
    • Zuerst muss die Steamversion natürlich installliert werden/sein.
    • Danach sucht ihr das Installationverzeichniss (Standart: "X:\Program Files (x86)\Steam\SteamApps\common\Anno Online\")
    • Am besten ihr macht ein Backup um zu verhindern dass, solltet ihr einen Fehler machen, das Spiel nicht mehr startet.
    • Als nächstes Überschreibt ihr alle alten Files mit den Neuen.
    • Die Ordnerstrucktur ist folgende:
      • Anno Online
      • Anno Online/css
      • Anno Online/img
      • Anno Online/img/client
      • Anno Online/js
    • Beim erstellen der Dateien welche unten folgen, benutzt ihr den Editor. Datei -> Speichern unter -> Als "Dateityp" wählt ihr "Alle Dateien" und speichert unter dem Namen der jeweils im Spoiler angegeben ist.
    • Am besten im Unicode oder als UTF speichern da gewisse Zeichen unter ANSI nicht funktionieren.
    • Insgesammt sind es 14 Dateien - darunter 2 Bilder. (Die Datei "index - Simple.html" ist eine abgespeckte Version der neuen Index-Datei, welche ihr als Alternative nutzen könnt.
    ============================================


    Dieses Addon wurde mit freundlicher Genehmigung von BB_Awondel online gestellt.
    ============================================

    Ich hoffe, dass ich der AO-Community hiermit wenigstens, eine kleine Freude mache.

    Viel Erfolg!




    ========
    Leider bin ich in letzter Zeit etwas beschäftig. Sollte etwas sein dann bitte ins Forum schreiben. (Oder per PN wenns "wichtig" ist.)
    ========

    Wo ist den erklärt wie man seine account mit Steam verbindet?

    MfG Lord Redav
    „Ich finde Ihren Mangel an Glauben beklagenswert.“ Anakin S.


  5. #5

    Registriert seit
    May 2013
    Beiträge
    4
    Server
    Meerjungfrau
    Im Guide steht alles was wichtig ist. Solltest du hoffen, dass man die Account fusionieren kann, so muss ich dich enttäuschen. Das kann niemand!

    MFG

Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

Die von uns verwendeten Ubisoft-Cookies sollen sicherstellen, dass du unsere Websites optimal genießen kannst. Durch die Nutzung dieser Website erklärst du dich mit der Nutzung dieser Cookies einverstanden. Weitere Informationen zum Datenschutz.