TW-Collections

TW-Collections - see history

当前为 2015-01-02 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name TW-Collections
// @description TW-Collections - see history
// @namespace https://greasyfork.org/users/2196
// @author Dun
// @author Tom Robert (Bugfixes)
// @include http://*.the-west.*/game.php*
// @version 	1.3.6.1
// @history 	1.3.6.1 Update fixed!
// @history 	1.3.6   correct translations links
// @history 	1.3.5   correct bugs save & trader icons
// @history 	1.3.4   correct bugs save settings
// @history 	1.3.3.9 correct bugs for 2.1, deactivate update since userscript is dead
// @history 	1.3.3.8 update TW version 2.1
// @history 	1.3.3.7 maj for 2.09
// @history 	1.3.3.6 correcting tips in mobile trader
// @history 	1.3.3.5 add vertical scrollbar in set & collection selectboxs
// @history 	1.3.3.4 maj 2.08 & optimisation chargement items de collections
// @history 	1.3.3.3 Fix ended bids  
// @history 	1.3.3.2 correct End bids on collector list, add setting for deactivate menu mouse hover  
// @history 	1.3.3 Mod. listcolector: recherche dans le marché   add direct link to market / mobile trader, add filters 
// @history     1.3.2.1 Fix inventory bug 
// @history     1.3.2  fix for the the mobile trader link, add the new TW items of the achieved collections, add pictures on collections list
// @history     1.3.1.3  fix for the shop display
// @history     1.3.1.2  corrections
// @history     1.3.1.1  corrections
// @history     1.3.1 correction pour le nouveau marchand ambulant + patch TWDB new
// @history     1.3.0 correction trad en + ajout lien forum
// @history     1.2.9 correction trad en et logout sans confirmation + ajout trad Slovak
// @history     1.2.7 correction trad en et logout sans confirmation 
// @history     1.2.7 ajout filtres inventaires, correction 
// @history     1.2.7 modification du systeme de langue et de l'updater, simplification suppression rapport, etc...
// @history     1.2.6.1 correction affichage TW api
// @history     1.2.6 correction lang et changement de nom
// @history     1.2.5 corrections ... or not :)
// @history     1.2.4 Création d'une barre d'outils dans l'inventaire (recettes, sets, consommables,doublons)
// @history     1.2.3 ajout d'un bouton doublon dans l'inventaire et correction bug lang
// @history     1.2.2 passage 2.0.6
// @history     1.2.1 passage 2.0.5
// @history     1.2.0 correction bugs maj + Traduction italienne (grazie tw81)
// @history     1.1.9 correction attente TWDB....
// @supportURL https://greasyfork.org/forum/discussion/2687
// @grant none
// ==/UserScript==
//
(function (e) {
  var t = document.createElement('script');
  t.type = 'application/javascript';
  t.textContent = '(' + e + ')();';
  document.body.appendChild(t);
  t.parentNode.removeChild(t);
}) (function () {
  if (/http:\/\/.+\.the-west\..*\/game\.php.*/.test(window.location.href)) {
    TWT = {
      DEBUG: false,
      LANG: {
      },
      info: {
        lang: 'en',
        version: '1.3.6.1',
        min_gameversion: '2.05',
        max_gameversion: '2.17',
        idscript: '7258'
      },
      languages: [
        {
          short_name: 'fr',
          name: 'Francais',
          translator: 'Dun',
          version: '1.3.5'
        },
        {
          short_name: 'en',
          name: 'English',
          translator: 'Dun',
          version: '1.3.5'
        }
      ],
      images: {
        cup: '/images/icons/achv_points.png',
        logout: 'data:image/jpg;base64,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',
        twdb_iconNew: 'data:image/png;base64,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',
        traderImg: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAgGBAf/xAAoEAACAQMEAgEDBQAAAAAAAAABAgMEBQYABxESEyIhCBRBMTIzQkP/xAAXAQEBAQEAAAAAAAAAAAAAAAAFAwQH/8QAJREBAAIBAwQBBQEAAAAAAAAAAQIRAwAEURITITFhIjJBkaGx/9oADAMBAAIRAxEAPwCzsr3ZqcwrZ446eojpYzykVNTuY2JcIZZCrKSo/cQG9V9jyCNZbNZd1dvJhd7NFEQ0qSwLJP4lVPcPCrop5Kle3aRf7AN0AZxg9uMvXHN0qy03ZJqWakeOZZJPGfNG0aq0kRZgU6NCyOAOP4jyew45MUxHJtsIb/kWZbwPlEF9t1PLRQxUJhWCKPvKKmY9zxKxk95OVAABJYk64jk3O7nMg3RJtFOktDgugWxG3jzty5p9yeVmEgOmKfcvsvzVfCJ/lGbOfUfie5O3tBmFROszVSc+V06s3Hx7KRyrA8gr+CCNNTz9PuN33IcBlym3xVTU94vVdcKX7qDxyeGadpI2dQB1ZkZXK8AgvwfkHTT+HsyxRcmSpUWeqdIY9/vSAGDqOb9/PrXoO82DYxJFBf5rYGqFk7xOsjRtFIVA7o6FXRuPUlWHK/B5HxrB2/aDF83ySltuZVtzutGKtpoqGuuLyQRuSf8AM+sgHYhVkDhQfUDTTRnZwu5hLpLTjhK1XeqbiUT19P8ATz+/zzqobJYLVZLelut1KEiT9Ofkk/kk/knTTTV4gxF0urFo8Gv/2Q=='
      },
      menu_callback: {
        goHome: 'TaskQueue.add(new TaskWalk(Character.homeTown.town_id,\'town\'))',
        goToDaily1: 'Map.center(1920, 2176);',
        goToDaily2: 'Map.center(28288,16768);',
        ownSaloon: 'SaloonWindow.open(Character.homeTown.town_id);',
        openMarket: 'MarketWindow.open(Character.homeTown.town_id);',
        mobileTrader: 'west.window.shop.open().showCategory(\'trader\');',
        forum: 'ForumWindow.open();',
        listNeeded: 'TWT.WindowCollection.open();',
        openOptions: 'TWT.Options.open(\'setting\')'
      },
      css: {
        style: 'position:relative;top:0px;left:0px;width:12px;height:12px;padding:0px;border:0px;margin:0px;',
        styleT: 'position:absolute;top:4px;left:3px;width:15px;height:15px;padding:0px;border:0px;margin:0px;',
        styleN: 'position:absolute;top:120px;left:25px;padding:0px;border:0px;margin:0px;',
        styleDB: 'position:absolute;top:0px;left:0px;padding:0px;border:0px;margin:0px;'
      },
      langPatchs: {
        cs: {
          link: 'https://greasyfork.org/cs/scripts/7260',
          texte: 'Czech - čeština',
          author: 'Dr.Keeper'
        },
        es: {
          link: 'https://greasyfork.org/es/scripts/3405',
          texte: 'Spanish - Español',
          author: 'pepe100'
        },
        de: {
          link: 'https://greasyfork.org/de/scripts/1672',
          texte: 'German - Deutsch',
          author: 'Hanya'
        },
        it: {
          link: 'https://greasyfork.org/it/scripts/1675',
          texte: 'Italian - Italiano',
          author: 'tw81'
        },
        hu: {
          link: 'https://greasyfork.org/scripts/7261',
          texte: 'Hungarian - Magyar',
          author: 'Zoltan80'
        },
        sl: {
          link: 'https://greasyfork.org/scripts/7259',
          texte: 'Slovak - Slovenčina',
          author: 'Surge'
        },
        pl: {
          link: 'https://greasyfork.org/pl/scripts/1674',
          texte: 'Polish - Polski',
          author: 'Dun from Darius II mod'
        },
        pt_br: {
          link: 'https://greasyfork.org/pt-BR/scripts/4920',
          texte: '!!broken!! Portuguese - Português',
          author: 'VSaantiago'
        },
        ru: {
          link: 'https://greasyfork.org/ru/scripts/7271',
          texte: 'Russian - Pу́сский',
          author: 'Anch665'
        }
      },
      langs: {
        fr: {
          description: '<center><BR /><b>TW Collections</b><br>Astuces et signalement des items manquants des collections<br>Liste des items manquants des collections<br>Frais bancaires en survol avant dépot<br>Divers raccourcis et fonctions<br>Suppressions des rapports<br>Doublons dans l\'inventaire<br>etc...</center>',
          Options: {
            tab: {
              setting: 'Réglages'
            },
            checkbox_text: {
              box: {
                title: 'Raccourcis menus',
                options: {
                  goHome: 'Aller &agrave; sa ville',
                  goToDaily1: 'Aller &agrave; la ville abandonn&eacute;e',
                  goToDaily2: 'Aller au village de Waupee',
                  ownSaloon: 'Ouvrir votre saloon',
                  openMarket: 'Ouvrir le march&eacute;',
                  mobileTrader: 'Ouvrir le marchand ambulant',
                  forum: 'Ouvrir le forum',
                  listNeeded: 'Items manquants des collections'
                }
              },
              collection: {
                title: 'Collections',
                options: {
                  gereNewItems: 'Gérer les nouveaux items des succés déjà obtenus',
                  patchsell: 'Signalement des items manquants aux collections dans l\'inventaire',
                  patchtrader: 'Signalement des items n&eacute;cessaires aux collections chez les marchands',
                  patchmarket: 'Signalement des items n&eacute;cessaires aux collections dans le march&eacute;',
                  filterMarket: 'Filtre dans le march&eacute; pour n\'afficher que les items manquants des collections',
                  showmiss: 'Items manquants des collections sur survol'
                }
              },
              inventory: {
                title: 'Boutons supplémentaires dans l\'inventaire',
                options: {
                  doublons: 'Bouton de recherche des doublons',
                  useables: 'Bouton de recherche des consommables',
                  recipe: 'Bouton de recherche des recettes',
                  sets: 'Liste de recherche des sets',
                  sum: 'Cumul des prix de vente marchand sur recherche'
                }
              },
              miscellaneous: {
                title: 'Divers',
                options: {
                  lang: 'Language',
                  logout: 'Bouton d&eacute;connexion directe',
                  deleteAllReports: 'Action pour supprimer tous les rapports',
                  showFees: 'Frais bancaire en survol',
                  popupTWT: 'Ouverture du menu du script Collections au survol'
                }
              },
              twdbadds: {
                title: 'Add-on Clothcalc',
                options: {
                  filterBuyMarket: 'Filtre dans le march&eacute; pour n\'afficher que les items manquants (twdb add)'
                  //addNewToShop : 'Afficher les items non possédés dans le shop'
                }
              }
            },
            message: {
              title: 'Information',
              message: 'Préférences appliquées',
              reloadButton: 'Recharger cette page',
              gameButton: 'Aller sur le jeu',
              indispo: 'Option indisponible (Collections terminées ou script non diponible)',
              more: 'Autres ?',
              moreTip: 'Ouvrir la page des traductions'
            },
            update: {
              title: ' Mise à jour',
              updok: 'Le script TW Collection est à jour',
              updscript: 'Une nouvelle version du script TW Collections est disponible<br/>Mettre à jour ?',
              updlangmaj: 'Une mise à jour est disponible pour une ou plusieurs langues utilisées avec le script TW Collections.<br/>Cliquez sur les liens ci dessous pour mettre à jour ?',
              upddaily: 'Journalières',
              updweek: 'Hebdomadaires',
              updnever: 'Jamais',
              checknow: 'Verifier les mises à jour ?',
              upderror: 'Impossible de mettre le script  TW Collections à jour, vous devez installer le script ou la langue manuellement'
            },
            saveButton: 'Sauvegarder'
          },
          ToolBox: {
            title: 'Fonctionnalit&eacute;s',
            list: {
              openOptions: 'Param&egrave;tres de l&acute;outil'
            }
          },
          Doublons: {
            tip: 'Afficher uniquement les doublons',
            current: 'Recherche courante',
            noset: 'Sans items de sets',
            sellable: 'Vendables',
            auctionable: 'Commercialisables',
            tipuse: 'Afficher uniquement les consommables',
            tiprecipe: 'Afficher uniquement les recettes',
            tipsets: 'Afficher uniquement les items de sets',
            sellGain: '$ prix marchand '
          },
          Logout: {
            title: 'D&eacute;connecter'
          },
          AllReportsDelete: {
            button: 'Tout supprimer',
            title: 'Supprimer tous les rapports',
            work: 'Job',
            progress: 'Etat d\'avancement',
            userConfirm: 'Confirmation utilisateur',
            loadPage: 'Charger la page',
            deleteReports: 'Supprimer les rapports',
            confirmText: 'Etes-vous sur de vouloir supprimer tous les rapports ?',
            deleteYes: 'Oui, supprimer',
            deleteNo: 'Non, ne pas supprimer',
            status: {
              title: 'Statut',
              wait: 'Patienter',
              successful: 'R&eacute;ussi',
              fail: 'Erreur',
              error: 'Erreur'
            }
          },
          fees: {
            tipText: 'Frais &aacute; %1%: $%2'
          },
          twdbadds: {
            buyFilterTip: 'Montrer seulement les items manquants',
            buyFilterLabel: 'Items manquants'
          },
          collection: {
            miss: 'Manquants : ',
            thText: '%1 item%2 manquant%3',
            thEncours: 'Vous avez une ench&egrave;re en cours pour cet article',
            thFetch: 'Vous pouvez récuperer cet article au marché de %1',
            allOpt: 'Tous',
            listText: 'Liste des items manquants des collections',
            collectionFilterTip: 'Montrer seulement les items de collection',
            collectionFilterLabel: 'Collections seules',
            select: 'Sélectionner ...',
            filters: 'Filtres',
            atTrader: 'Vendu par le marchand ambulant',
            atBid: 'Enchères en cours',
            atCurBid: 'Enchères terminées',
            searchMarket: 'Rechercher dans le marché',
            atTraderTitle: 'Affichez les items en vente chez le marchand ambulant',
            atBidTitle: 'Affichez les items en cours d\'enchère',
            atCurBidTitle: 'Affichez les items récupèrables aux enchères',
            patchsell: {
              title: 'Cet item est n&eacute;cessaire pour une collection en cours'
            }
          }
        },
        en: {
          description: '<center><BR /><b>TW-Collections</b><br>Tips and reporting missing items collections<br>List of collection needed items<br>Bank fees on mouseover<br>Various shortcuts<br>All reports deletion<br>Additional buttons in inventory (duplicates,useables, recipes, sets)<br>etc...',
          Options: {
            tab: {
              setting: 'Settings'
            },
            checkbox_text: {
              box: {
                title: 'Features / Menus',
                options: {
                  goHome: 'Travel to town',
                  goToDaily1: 'Ghost Town',
                  goToDaily2: 'Waupee Indian Camp ',
                  ownSaloon: 'Open saloon',
                  openMarket: 'Open Market',
                  mobileTrader: 'Open Mobile Trader',
                  forum: 'Open forum',
                  listNeeded: 'Collector\'s items needed'
                }
              },
              collection: {
                title: 'Collections',
                options: {
                  gereNewItems: 'Manage the new items added on succeeded achievements',
                  patchsell: 'Signal missing items in inventory',
                  patchtrader: 'Signal missing items on Traders',
                  patchmarket: 'Signal missing items on Market',
                  showmiss: 'List for missing items on tip',
                  filterMarket: 'Market filter : show only missing items (collections)'
                }
              },
              inventory: {
                title: 'Buttons in inventory',
                //doublons: 'Additional buttons in inventory (duplicates,useables, recipes, sets)',
                options: {
                  doublons: 'Add button for duplicates search',
                  useables: 'Add button for useables search',
                  recipe: 'Add button for recipes search',
                  sets: 'Add button for sets list',
                  sum: 'Show sell sum on search based on merchant prices'
                }
              },
              miscellaneous: {
                title: 'Miscellaneous',
                options: {
                  lang: 'Language',
                  logout: 'Add Logout button',
                  deleteAllReports: 'Add suppress all reports action',
                  showFees: 'Add Bank Fees on Mouseover',
                  popupTWT: 'Open menu of TW Collections on mouse hover'
                }
              },
              twdbadds: {
                title: 'Clothcalc Add-on',
                options: {
                  filterBuyMarket: 'Market filter : show only marked missing items (twdb add)'
                  //addNewToShop : 'Show new items in the shop'
                }
              }
            },
            message: {
              title: 'Information',
              message: 'Preferences have been applied.',
              reloadButton: 'Reload this page',
              gameButton: 'Return to the game',
              indispo: 'Setting unavailable (Collections completed or script not available)',
              more: 'More ?',
              moreTip: 'Open the translations tips page'
            },
            update: {
              title: 'TW Collections Update',
              upddaily: 'Every day',
              updweek: 'Every week',
              updnever: 'Never',
              checknow: 'Check update now ?',
              updok: 'The TW Collection\'s script is up to date',
              updlangmaj: 'An update is available for one or more languages ​​of the TW Collections script.<BR>Clic on the links bellow to upgrade.',
              updscript: 'An update is available for the script TW Collections<br/>Upgrade ?',
              upderror: 'Unable to upgrade, you should install the script or language manually'
            },
            saveButton: 'Save'
          },
          ToolBox: {
            title: 'Features',
            list: {
              openOptions: 'Settings'
            }
          },
          Doublons: {
            tip: 'Show only duplicates',
            current: 'Current search',
            noset: 'Without set items',
            sellable: 'Sellables',
            auctionable: 'Auctionables',
            tipuse: 'Show only useables',
            tiprecipe: 'Show only recipes',
            tipsets: 'Show only set items',
            sellGain: '$ from the merchant'
          },
          Logout: {
            title: 'Logout'
          },
          AllReportsDelete: {
            button: 'Suppress all',
            title: 'Suppress all reports',
            work: 'Job',
            progress: 'Progress',
            userConfirm: 'User Confirm',
            loadPage: 'Load Page',
            deleteReports: 'Delete reports',
            confirmText: 'Supress all reports - Are you sure ?',
            deleteYes: 'Yes, delete',
            deleteNo: 'No, don\'t delete',
            status: {
              title: 'Status',
              wait: 'Wait',
              successful: 'R&eacute;ussi',
              fail: 'Error',
              error: 'Error'
            }
          },
          fees: {
            tipText: '%1% Fees: $%2'
          },
          twdbadds: {
            buyFilterTip: 'Show only missing items',
            buyFilterLabel: 'Missing items'
          },
          collection: {
            miss: 'Missing : ',
            thText: '%1 missing item%2',
            thEncours: 'You have a bid for this item',
            thFetch: 'You may retrieve this item at the market of %1',
            allOpt: 'All',
            collectionFilterTip: 'Show only collections items',
            collectionFilterLabel: 'Collections only',
            select: 'Select ...',
            listText: 'Collector\'s items needed',
            filters: 'Filters',
            atTrader: 'Sold by mobile trader',
            atBid: 'Current bids',
            atCurBid: 'Ended bids',
            atTraderTitle: 'Show items on sale at the mobile trader',
            atBidTitle: 'Show currents bids',
            atCurBidTitle: 'Show items retrievable at market',
            searchMarket: 'Search in the market',
            patchsell: {
              title: 'Items needed to complete collections'
            }
          }
        }
      },
      getLanguage: function () {
        var detected_lang;
        try {
          detected_lang = TWT.scriptStorage.getItem('TWT.Cache.miscellaneous.lang');
          if (!isDefined(detected_lang)) {
            detected_lang = Game.locale.match(/(\S*)_/) [1]; // basé
            // sur
            // la
            // langue
            // du
            // serveur
          }
          if (!isDefined(detected_lang)) {
            detected_lang = TWT.info.lang; // Nouveau
          }
        } catch (ex) {
          detected_lang = TWT.info.lang; // béta (w1/w2) ...
        } finally {
          var langue = TWT.langs[detected_lang];
          if (!isDefined(langue)) { // langue non connue ou
            // chargement des patchs
            // lang non fait
            langue = TWT.langs[TWT.info.lang];
            var saved_descr = localStorage.getItem('TWT.Cache.description');
            if (isDefined(saved_descr)) {
              langue.description = saved_descr; // permet
              // d'initialiser
              // l'api
              // avec
              // la
              // traductin
            }
            EventHandler.listen('twt_lang_started_'
            + detected_lang, function () {
              TWT.getLanguage();
              return EventHandler.ONE_TIME_EVENT; // Unique
            });
          } else {
            TWT.info.lang = detected_lang;
          }
          return langue;
        }
      },
      addMissedTrad: function (enTrObj, langTrObj) {
        if (!isDefined(langTrObj)) {
          langTrObj = {
          };
        }
        $.each(enTrObj, function (ind, item) {
          if (jQuery.type(item) == 'object') {
            TWT.addMissedTrad(item, langTrObj[ind]);
          } else {
            if (jQuery.type(langTrObj[ind]) == 'undefined') {
              langTrObj[ind] = enTrObj[ind];
            }
          }
        });
      },
      addPatchLang: function (lang) {
        try {
          TWT.langs[lang.short_name] = lang.translation;
          TWT.languages.push({
            'short_name': lang.short_name,
            'name': lang.name,
            'translator': lang.translator,
            'version': lang.version,
            'script': lang.idscript
          });
          // console.log("Ajout manquants sur "+lang.name);
          TWT.addMissedTrad(TWT.langs['en'], TWT.langs[lang.short_name]);
          EventHandler.signal('twt_lang_started_'
          + lang.short_name);
        } catch (e) {
          ErrorLog.log(e);
        }
      },
      checkIsValidLang: function () {
        var selLang = TWT.langs[TWT.Settings.checked.miscellaneous.lang]
        || undefined;
        if (!isDefined(selLang)) {
          TWT.Options.open('translate');
          TWT.Settings.checked.miscellaneous.lang = TWT.info.lang;
          TWT.scriptStorage.setItem('TWT.Cache.miscellaneous.lang', TWT.info.lang);
        }
      },
      init: function () {
        try {
          EventHandler.signal('twt.init'); // Signalement
          // pour les
          // patchs de
          // langues
          var that = this;
          var timeout = 0;
          this.interval = setInterval(function () {
            var loading = false;
            if (isDefined(Character.playerId)
            && Character.playerId == 0) {
              loading = false;
            } else if (isDefined(ItemManager.initialized)
            && !ItemManager.initialized) {
              loading = false;
            } else if (isDefined(ItemManager.isLoaded)
            && !ItemManager.isLoaded()) {
              loading = false;
            } else if (isDefined(window.TWDB)) { // null
              // !=
              // TWDB
              // &&
              // 'undefined'
              // !=
              // typeof
              // TWDB)
              // {
              if (!window.TWDB.ClothCalc.ready) { // Attente
                // des
                // injections
                // TWDB
                loading = false;
                // si TWDB se plante on arrete
                // au bout de 20 secondes
                timeout++;
                if (timeout > 20) {
                  ErrorLog.log('Stop interval, chargement de TWDB non possible ?');
                  loading = true;
                }
              } else {
                loading = true;
              }
            } else {
              loading = true;
            }
            if (loading) {
              clearInterval(that.interval);
              if (TWT.scriptStorage == null) {
                TWT.scriptStorage = new Storage('local', 'Storage.'
                + TWT.info.idscript);
              }
              TWT.LANG = TWT.getLanguage();
              TWT.isTWDBHere = isDefined(window.TWDB)
              && window.TWDB.ClothCalc.ready;
              TWT.Settings.init();
              TWT.checkIsValidLang();
              EventHandler.signal('twt.ready');
              if (!TWT.DEBUG) {
                // Update
                ScriptUpdater.check(TWT.info.idscript, TWT.info.version);
                // Register
                TWT.api();
                // TWT.news();
              } else {
                window.DEBUG = true;
              }
              TWT.ready = true;
            }
          }, 500);
        } catch (e) {
          ErrorLog.log('Erreur d\'initialisation', e);
          ErrorLog.showLog();
          TWT.ready = false;
        }
      },
      Settings: {
        checked: {
        },
        shouldRefresh: {
        },
        init: function () {
          if (!isDefined(TWT.scriptStorage.getItem('TWT.Cache.Metacol.finished'))) {
            // Recuperation des collections restantes
            // TWT.MetaCol.init();
          } else {
            TWT.MetaCol.finished = TWT.scriptStorage.getItem('TWT.Cache.Metacol.finished');
          }
          $.each(TWT.LANG.Options.checkbox_text, function (ind1, val) {
            TWT.Settings.checked[ind1] = [
            ];
            $.each(TWT.LANG.Options.checkbox_text[ind1]['options'], function (ind2, detail) {
              var attended;
              if (TWT.MetaCol.finished
              && (ind1 == 'collection' || ind2 == 'listNeeded')) {
                // Desactivation
                // des
                // options
                // de
                // collections
                // si
                // elles
                // sont
                // terminées
                attended = '0';
              } else {
                attended = TWT.scriptStorage.getItem('TWT.Cache.'
                + ind1
                + '.'
                + ind2);
              }
              if (!isDefined(attended)) {
                if (ind2 == 'lang') {
                  attended = TWT.info.lang;
                } else {
                  attended = '1';
                }
                ;
                TWT.scriptStorage.setItem('TWT.Cache.'
                + ind1
                + '.'
                + ind2, attended);
              }
              TWT.Settings.checked[ind1][ind2] = attended;
            });
          });
          TWT.Settings.apply();
        },
        getValue: function (what) {
          return eval('TWT.Settings.checked.' + what);
        },
        isChecked: function (what) {
          return TWT.Settings.getValue(what) == '1';
        },
        refresh: function (tabOpt) {
          var refreshed = false;
          try {
            for (var key in tabOpt) {
              if (tabOpt.hasOwnProperty(key)) {
                var val = tabOpt[key];
                if (val != TWT.Settings.getValue(key)) {
                  TWT.scriptStorage.setItem('TWT.Cache.' + key, val);
                  var det = key.split('.');
                  TWT.Settings.checked[det[0]][det[1]] = val;
                  EventHandler.signal(key);
                  refreshed = true;
                }
              }
            }
            ;
            TWT.LANG = TWT.langs[TWT.Settings.getValue('miscellaneous.lang')]
            || TWT.langs['en'];
            EventHandler.signal('collection.bagupdate');
          } catch (e) {
            ErrorLog.log('Erreur refresh ', e);
          }
          return refreshed;
        },
        apply: function () {
          TWT.LANG = TWT.langs[TWT.Settings.getValue('miscellaneous.lang')]
          || TWT.langs[TWT.info.lang];
          TWT.MenuBox.initListener();
          TWT.MenuBox.create();
          TWT.Injecteur.startListen();
          TWT.Logout.initListener();
          if (TWT.Settings.isChecked('inventory.doublons')
          || TWT.Settings.isChecked('inventory.useables')
          || TWT.Settings.isChecked('inventory.recipe')
          || TWT.Settings.isChecked('inventory.sets')
          ) {
            TWT.Inventaire.create();
          } else {
            TWT.Inventaire.detach();
          }
          ;
          TWT.BankFees.initListener();
          TWT.AllReportsDelete.initListener();
          if (TWT.Settings.isChecked('miscellaneous.logout'))
          TWT.Logout.create();
          if ((!TWT.MetaCol.finished) || TWT.isTWDBHere) {
            // ErrorLog.log('test log');
            TWT.Market.initListener();
            if (TWT.Settings.isChecked('twdbadds.filterBuyMarket')
            || TWT.Settings.isChecked('collection.filterMarket')) {
              TWT.Market.init();
              TWT.Market.inject();
            }
          }
          if (!TWT.MetaCol.finished) {
            TWT.CollectionsHandler.initListener();
            if (TWT.Settings.isChecked('collection.patchsell')
            || TWT.Settings.isChecked('collection.patchmarket')
            || TWT.Settings.isChecked('collection.showmiss')) {
              // EventHandler.signal('collection.bagupdate');
              TWT.CollectionsHandler.init();
              TWT.CollectionsHandler.inject();
              TWT.CollectionsHandler.attachFilter();
            }
          }
          if (TWT.Settings.isChecked('miscellaneous.showFees')) {
            TWT.BankFees.attach();
          }
          if (TWT.Settings.isChecked('miscellaneous.deleteAllReports')) {
            TWT.AllReportsDelete.addStyle();
            TWT.AllReportsDelete.attach();
          }
          // TWT.AltoFlood.init();

        }
      },
      Options: {
        open: function (window) {
          TWT.Options.Windows = wman.open('TWTToolWindow').addClass('noreload').setMiniTitle(TWT.LANG.Options.tab.setting).addTab(TWT.LANG.Options.tab.setting, 'TabSetting', TWT.Options.setting.open).addTab('Translations', 'TabTranslate', TWT.Options.translate.open);
          //								  .addTab(
          //											'Ventes', 'TabSold',
          //											TWT.Options.sold.open)
          //											;
          $('<div></div>').attr({
            'id': 'ToolWindowBody'
          }).css({
            'margin-left': '20px',
            'margin-right': '20px'
          }).appendTo('.TWTToolWindow .tw2gui_window_content_pane');
          if (window == 'setting') {
            TWT.Options.setting.open();
          } else {
            TWT.Options.translate.open();
          }
        },
        translate: {
          open: function () {
            var txtArea = '<div style="width:650px;margin-left:15px;margin-top:20px;height:250px;font-size:16px;text-align:justify;padding-bottom:50px;">'
            + '<h4 style="margin-bottom:20px;"><center>The translation\'s system of the TW Collections script has changed</center></h4>'
            + 'TW Collections script contains just the french and english languages, if you need a different translation you must install one of the script below and reload the TW page<BR><BR>'
            + '<div style=\'text-align: center;overflow: auto; height: 165px;font-size:15px;\'>'
            var langPatchs = TWT.langPatchs;
            $.each(langPatchs, function (lang) {
              txtArea += '<a target=\'_blanck\' href=\'' + langPatchs[lang].link + '\'>' + langPatchs[lang].texte + ' by ' + langPatchs[lang].author + '</a><br>'
            })
            txtArea += '</div><br>If you want to create your own translation, you can go to <a target=\'_blanck\' href=\'https://greasyfork.org/fr/scripts/1670-tw-collections\'> the home page of the script</a> for more explanations'
            + '</div>';
            TWT.Options.Windows.activateTab('TabTranslate').$('div.tw2gui_window_content_pane').empty();
            TWT.Options.Windows.setTitle('Translations for TW Collections');
            TWT.Options.Windows.appendToContentPane(txtArea);
            TWT.Options.Windows.appendToContentPane(TWT.getDunMp());
          }
        },
        setting: {
          open: function () {
            TWT.Options.Windows.activateTab('TabSetting').$('div.tw2gui_window_content_pane').empty();
            TWT.Options.Windows.setTitle(TWT.LANG.Options.tab.setting);
            var save_button = new west.gui.Button(TWT.LANG.Options.saveButton, TWT.Options.save);
            var l0 = TWT.Options.createLanguage();
            var l01 = TWT.Options.createMAJ();
            var l1 = TWT.Options.getContent();
            var l2 = $('<div style="text-align:center;"/>').append(save_button.getMainDiv());
            TWT.Options.Windows.appendToContentPane($('<div id="divopts" style="font-weight: bolder;width: 683px;left:10px;" class="daily_activity-list"/>').append(l0).append(l01).append(l1).append(l2));
            $('#divopts', TWT.Options.Windows.getMainDiv()).css('width: 674px;');
            TWT.Options.Windows.appendToContentPane(TWT.getDunMp());
          }
        },
        getContent: function () {
          var scrollbar = new west.gui.Scrollpane;
          $.each(TWT.LANG.Options.checkbox_text, function (key) {
            var table = new west.gui.Table(true).setId('paramtwt_table_'
            + key).createEmptyMessage('! No Parameters !').addColumn('settings_'
            + key).appendToThCell('head', 'settings_'
            + key, TWT.LANG.Options.checkbox_text[key]['title'], '<span style=\'font-size:12pt;padding-left:25px;\'>'
            + TWT.LANG.Options.checkbox_text[key]['title']
            + '</span>');
            $.each(TWT.LANG.Options.checkbox_text[key]['options'], function (i) {
              if (i != 'lang') {
                var checkB;
                if ((TWT.MetaCol.finished && (key == 'collection' || i == 'listNeeded'))
                || ((key == 'twdbadds') && !TWT.isTWDBHere)) {
                  checkB = $('<span title=\''
                  + TWT.LANG.Options.message.indispo
                  + '\' style=\'color: #808080;font-style: italic;font-size:11pt;padding-left:10px;\' />').append(TWT.LANG.Options.checkbox_text[key]['options'][i]);
                } else {
                  checkB = new west.gui.Checkbox().setTitle(TWT.LANG.Options.checkbox_text[key]['options'][i]).setLabel('<span style=\'font-size:11pt;padding-left:10px;\'>'
                  + TWT.LANG.Options.checkbox_text[key]['options'][i]
                  + '</span>').setSelected(TWT.Settings.isChecked(key
                  + '.'
                  + i)).setId('setting_'
                  + key
                  + '_'
                  + i).getMainDiv();
                }
                table.appendRow(checkB, '');
              }
            });
            scrollbar.appendContent(table.getMainDiv());
          });
          $(scrollbar.getMainDiv()).css({
            'height': '300px',
            'margin-top': '5px;',
            'font-weight': 'normal'
          });
          return $(scrollbar.getMainDiv());
        },
        createLanguage: function () {
          TWT.Options.lang_box = new west.gui.Combobox;
          for (var i = 0; i < TWT.languages.length; i++) {
            TWT.Options.lang_box.addItem(TWT.languages[i].short_name, TWT.languages[i].name);
          }
          TWT.Options.lang_box.select(TWT.Settings.getValue('miscellaneous.lang'));
          var more_button = new west.gui.Button(TWT.LANG.Options.message.more, TWT.Options.translate.open, this, this, TWT.LANG.Options.message.moreTip);
          return $('<span />').append(TWT.LANG.Options.checkbox_text.miscellaneous.options.lang
          + ' : ').append(TWT.Options.lang_box.getMainDiv()).append(more_button.getMainDiv());
        },
        createMAJ: function () {
          TWT.Options.maj_box = new west.gui.Combobox;
          TWT.Options.maj_box.addItem(0, TWT.LANG.Options.update.updnever);
          // TWT.Options.maj_box.addItem(3600000,"every
          // hour");
          // TWT.Options.maj_box.addItem(21600000,"every 6
          // hours");
          TWT.Options.maj_box.addItem(86400000, TWT.LANG.Options.update.upddaily);
          TWT.Options.maj_box.addItem(604800000, TWT.LANG.Options.update.updweek);
          TWT.Options.maj_box.select(ScriptUpdater.getInterval());
          var maj_button = $('<span title="'
          + TWT.LANG.Options.update.checknow
          + '" style="background-color: transparent; background-attachment: scroll; background-clip: border-box;'
          + 'background-image: url(./images/interface/character/menuicons.jpg); background-position: 0px -250px; '
          + 'cursor: pointer;  position: absolute; height: 25px; width: 25px; margin: 4px;" />');
          maj_button.click(function (e) {
            TWT.Options.Windows.showLoader();
            EventHandler.listen('scriptmaj.ok', function () {
              new UserMessage(TWT.LANG.Options.update.updok, UserMessage.TYPE_SUCCESS).show();
              return EventHandler.ONE_TIME_EVENT;
            });
            ScriptUpdater.forceCheck(TWT.info.idscript, TWT.info.version);
            TWT.Options.Windows.hideLoader();
          });
          TWT.Options.maj_box.select(ScriptUpdater.getInterval());
          return $('<span style=\'text-align:left;\'/>').append('&nbsp;'
          + TWT.LANG.Options.update.title
          + ' :  ').append(TWT.Options.maj_box.getMainDiv()).append(maj_button);
        },
        save: function () {
          TWT.Options.Windows.showLoader();
          var tblSave = new Array();
          $.each(TWT.LANG.Options.checkbox_text, function (key) {
            $.each(TWT.LANG.Options.checkbox_text[key]['options'], function (i) {
              if (i != 'lang') {
                tblSave[key
                + '.'
                + i] = $('#setting_'
                + key
                + '_'
                + i).hasClass('tw2gui_checkbox_checked');
              }
            });
          });
          tblSave['miscellaneous.lang'] = TWT.Options.lang_box.getValue();
          ScriptUpdater.setInterval(TWT.Options.maj_box.getValue());
          TWT.Settings.refresh(tblSave);
          TWT.Options.Windows.hideLoader();
          new UserMessage(TWT.LANG.Options.message.message, UserMessage.TYPE_SUCCESS).show();
          wman.close('TWTToolWindow');
        }
      },
      MenuBox: {
        selectbox: null,
        initListener: function () {
          EventHandler.listen('miscellaneous.popupTWT', function () {
            $('#TWT_Icon').remove();
            TWT.MenuBox.create();
          });
        },
        create: function () {
          $('#TWT_Icon').remove();
          var a = $('<div></div>').attr({
            'class': 'menulink',
            'title': TWT.LANG.ToolBox.title
          }).css({
            'background-position': '0px -100px'
          }).mouseleave(function () {
            $(this).css('background-position', '0px -100px');
          }).click(function (e) {
            TWT.MenuBox.open(e);
          });
          if (TWT.Settings.isChecked('miscellaneous.popupTWT')) {
            a.mouseenter(function (e) {
              $(this).css('background-position', '-25px -100px');
              TWT.MenuBox.open(e);
            });
          }
          var b = $('<div></div>').attr({
            'class': 'menucontainer_bottom'
          });
          $('#ui_menubar .ui_menucontainer :first').after($('<div></div>').attr({
            'class': 'ui_menucontainer',
            'id': 'TWT_Icon'
          }).append(a).append(b));
        },
        open: function (e) {
          if (isDefined(this.selectbox)) {
            this.selectbox.items = [
            ];
          } else {
            this.selectbox = new west.gui.Selectbox(true);
            this.selectbox.setWidth(250).addListener(function (key) {
              if (key == 99) {
                eval(TWT.menu_callback['openOptions']);
              } else {
                eval(TWT.menu_callback[key]);
              }
            });
          }
          var that = this;
          $.each(TWT.LANG.Options.checkbox_text.box.options, function (indexB, keyB) {
            if (TWT.Settings.isChecked('box.'
            + indexB))
            that.selectbox.addItem(indexB, keyB);
          });
          this.selectbox.addItem(99, TWT.LANG.ToolBox.list.openOptions);
          this.selectbox.show(e);
          this.selectbox.setPosition(e.clientX, e.clientY - 25);
          $(this.selectbox.elContent).mouseleave(function () {
            that.selectbox.hide();
          });
        }
      },
      MetaCol: {
        group: [
        ],
        groupSorted: [
        ],
        marketEC: {
        },
        all: {
        },
        inProgress: {
        },
        erreur: false,
        ready: false,
        dirty: true,
        getMarketEC: function () {
          $.ajax({
            url: 'game.php?window=building_market&action=fetch_bids&h='
            + Player.h,
            type: 'POST',
            data: {
            },
            dataType: 'json',
            async: false,
            success: function (json) {
              if (json.error)
              return new UserMessage(json.msg, UserMessage.TYPE_ERROR).show();
              var result = json.msg.search_result;
              TWT.MetaCol.marketEC = [
              ];
              for (var i = 0; i < result.length; i++) {
                var item = ItemManager.get(result[i].item_id);
                TWT.MetaCol.marketEC[$.trim(item.name)] = result[i];
              }
            }
          });
        },
        populateInProgress: function (all) {
          try {
            var tmpArr = all['achievements']['progress'];
            if (TWT.Settings.isChecked('collection.gereNewItems')) {
              $.merge(tmpArr, all['achievements']['finished']);
            }
            $.each(tmpArr, function (index, value) {
              var itemsImg = [
              ];
              var rex = /<span.*?([\s\S]*?)<\/span>/gm;
              var match;
              while (match = rex.exec(value.meta)) {
                var val = match[1];
                var srcI = /<img.*?src="(.*?)"/.exec(val) [1];
                var ident = $.trim(value.title);
                var strManquant = '';
                var name = /<img.*?alt="(.*?)"/.exec(val) [1];
                var shoudBuy = (val.indexOf('locked') > - 1);
                TWT.MetaCol.inProgress[name] = {
                  shouldBuy: (val.indexOf('locked') > - 1),
                  src: srcI,
                  img: srcI.match(/\S*.\/(\S*png)/) [1],
                  group: ident
                };
                if (shoudBuy) {
                  if (!isDefined(TWT.MetaCol.group[ident])) {
                    TWT.MetaCol.group[ident] = [
                    ];
                  }
                  TWT.MetaCol.group[ident].push(name);
                }
              }
            });
            var sortable = [
            ];
            for (var group in TWT.MetaCol.group) {
              sortable.push([group,
              TWT.MetaCol.group[group]]);
            }
            sortable.sort(function (a, b) {
              var x = a[0];
              var y = b[0];
              if (typeof x === 'string'
              && typeof x === 'string') {
                return x.localeCompare(y);
              }
              return ((x < y) ? - 1 : ((x > y) ? 1 : 0));
            });
            TWT.MetaCol.groupSorted = sortable;
            // DEBUG
            // TWT.MetaCol.inProgress['Gibus marron'] = {
            // shouldBuy : true,
            // src : 'dirty',
            // img : 'dirty',
            // group : 'Gibus'
            //
            // };
            // TWT.MetaCol.group['Gibus'].push('Gibus
            // marron');
            TWT.MetaCol.dirty = false;
          } catch (e) {
            this.erreur = 'Initialisation des Collections impossible';
            ErrorLog.log(e, this.erreur);
            ErrorLog.showLog();
          }
        },
        sort: function (array, key) {
          return array.sort(function (a, b) {
            var x = a[key];
            var y = b[key];
            return ((x < y) ? - 1 : ((x > y) ? 1 : 0));
          });
        },
        init: function () {
          if (this.ready == false) {
            TWT.MetaCol.all = {
            };
            TWT.MetaCol.group = {
            };
            TWT.MetaCol.inProgress = {
            };
            var that = this;
            $.ajax({
              url: 'game.php?window=achievement&action=get_list&h='
              + Player.h,
              type: 'POST',
              data: {
                'folder': 'collections',
                'playerid': Character.playerId
              },
              dataType: 'json',
              async: false,
              success: function (data_return) {
                var all = eval(data_return);
                if (all['achievements']['progress'].length > 0
                || TWT.Settings.isChecked('collection.gereNewItems')) {
                  TWT.MetaCol.all = all;
                  TWT.MetaCol.getMarketEC();
                  TWT.MetaCol.populateInProgress(eval(data_return));
                  TWT.MetaCol.ready = true;
                } else {
                  EventHandler.signal('collections_finished');
                  TWT.MetaCol.finished = true;
                  TWT.scriptStorage.setItem('TWT.Cache.Metacol.finished', true);
                }
              }
            });
          }
        },
        isFinished: function (name) {
          if (TWT.MetaCol.finished)
          return true;
          var item = TWT.MetaCol.inProgress[$.trim(name)];
          if (!isDefined(item)) {
            return true;
          } else if (isDefined(TWT.MetaCol.group[item.group])
          && TWT.MetaCol.group[item.group][0] == true) {
            return true;
          } else if (!isDefined(TWT.MetaCol.group[item.group])) {
            return true;
          } else
          return false;
        },
        shouldBuy: function (name) {
          var item = TWT.MetaCol.inProgress[$.trim(name)];
          var marketed = TWT.MetaCol.marketEC[$.trim(name)];
          if (isDefined(item) && !isDefined(marketed)) {
            return item.shouldBuy;
          } else {
            return false;
          }
        },
        getBuyItems: function (name, withbr) {
          try {
            if (TWT.Settings.isChecked('collection.showmiss')) {
              var br = (withbr) ? '<BR>' : ' - ';
              var item = TWT.MetaCol.inProgress[$.trim(name)];
              if (isDefined(item)) {
                var manquants = TWT.MetaCol.group[item.group];
                if (isDefined(manquants)
                && manquants.length > 0) {
                  var strManq = br;
                  $.each(manquants, function (inD, val) {
                    strManq += '[ ' + val
                    + ' ]' + br;
                  });
                  return strManq += ' ';
                } else {
                  return '';
                }
              }
            }
          } catch (e) {
            this.erreur = 'Impossible de recenser les items manquants pour '
            + name;
            ErrorLog.log(e, this.erreur);
          }
          return '';
        },
        remove: function (arr, name) {
          name = $.trim(name);
          var x,
          _i,
          _len,
          _results;
          _results = [
          ];
          for (_i = 0, _len = arr.length; _i < _len; _i++) {
            x = arr[_i];
            if (x != name) {
              _results.push(x);
            }
          }
          return _results;
        }
      },
      WindowCollection: {
        scrollbar: null,
        totalGroup: 0,
        cbTrader: null,
        cbBid: null,
        cbCurBid: null,
        getAllAnchors: function () {
          var that = this;
          var textinput = new west.gui.Textfield().maxlength(12).setPlaceholder(TWT.LANG.collection.select).setWidth(165);
          var anchors = new west.gui.Selectbox();
          anchors.setWidth(200);
          $(anchors.elContent).css({
            'max-height': '270px',
            'width': '250px',
            'overflow-y': 'auto'
          });
          anchors.addItem(TWT.LANG.collection.allOpt, TWT.LANG.collection.allOpt);
          $.each(TWT.MetaCol.groupSorted, function (ind2, val) {
            anchors.addItem(val[0], val[0]);
          });
          anchors.addItem('99999', ' ');
          anchors.addListener(function (e) {
            var str = '';
            textinput.setValue(e);
            var arrtmp = {
            };
            if (e == TWT.LANG.collection.allOpt) {
              arrtmp = TWT.MetaCol.groupSorted;
            } else {
              arrtmp[0] = [
                e,
                TWT.MetaCol.group[e]
              ];
            }
            that.scrollbar.scrollToTop();
            var opt = that.getDiv(arrtmp);
            $('#showbox').html(opt);
            that.switchOff();
            return true;
          });
          textinput.click(function (e) {
            anchors.show(e);
          });
          return textinput.getMainDiv();
        },
        initTrader: function () {
          var check = - 1;
          var model = west.window.shop.model.getCategory('trader');
          if (isDefined(model)) {
            var timeTrader = model.getRefreshTimeout();
            check = timeTrader
            - Math.round(new Date() / 1000);
            var traderInv = west.window.shop.model._data.inventory.trader;
            west.window.shop.model._data.trader_timeout = timeTrader;
          }
          if (check < 0) {
            $.ajax({
              url: 'game.php?window=shop_trader&mode=index',
              type: 'POST',
              dataType: 'json',
              async: false,
              success: function (data_return) {
                var all = eval(data_return);
                traderInv = all['inventory']['trader'];
                west.window.shop.model._data.inventory.trader = all['inventory']['trader'];
                west.window.shop.model._data.trader_timeout = all['traderTime'];
              }
            });
          }
          var traderItems = [
          ];
          $.each(traderInv, function (i, item) {
            var obj = item.item_data;
            if (!isDefined(obj)) {
              obj = ItemManager.get(item.item_id);
            }
            traderItems[obj.name.trim()] = item;
          });
          return traderItems;
        },
        getDiv: function (what) {
          var goSearch = function (what) {
            MarketWindow.open(Character.homeTown.town_id);
            MarketWindow.showTab('buy');
            $('div.market-buy .iSearchbox input', MarketWindow.DOM).val(what);
            $('span.iconBut_mpb_refresh', MarketWindow.DOM).click();
          };
          var traderItems = this.initTrader();
          var that = this;
          var total = 0;
          var divMain = $('<br /><table width=\'100%\' cellpading=10 cellspacing=10  style=\'font-style: bold; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;\' />');
          $.each(what, function (ind2, valGroup) {
            var imod = 0;
            //	
            var bigTR = $('<tr/>');
            bigTR.attr('class', 'questlog_entrie');
            bigTR.css({
              'color': '#113355'
            });
            bigTR.attr('id', $.trim(valGroup[0]));
            bigTR.append($('<td />').append($.trim(valGroup[0]))
            );
            divMain.append(bigTR);
            $.each(valGroup[1], function (ind3, val) {
              var tr = $('<tr style="font-weight:bold;font-style:italic;"></tr>');
              var td = $('<td class="achieve_list"/>');
              var span = $('<span />');
              var img = $('<img class=\'resizedImage\' />');
              img.attr('src', TWT.MetaCol.inProgress[val].src);
              img.attr('title', TWT.LANG.collection.searchMarket);
              img.css('cursor', 'pointer');
              img.click(function () {
                goSearch(val);
              });
              span.append(img).append('&nbsp;').append(val);
              if (isDefined(traderItems[val.trim()])) {
                tr.addClass('hasTrader');
                var divTrader = $('<img src="'
                + TWT.images.traderImg
                + '" style="cursor: pointer;display: inline-block;" '
                + 'title="'
                + TWT.LANG.collection.atTrader
                + '" />');
                divTrader.click(function () {
                  west.window.shop.open().showCategory('trader');
                });
                span.append('&nbsp;&nbsp;&nbsp;').append(divTrader);
              }
              var item = TWT.MetaCol.marketEC[$.trim(val)];
              if (isDefined(item)) {
                var imsell = '';
                var sp = '';
                if (item.auction_ends_in < 0) {
                  tr.addClass('hasCurrentBid');
                  imsell = $('&nbsp;<span '
                  + 'title="'
                  + TWT.LANG.collection.thFetch.replace('%1', item.market_town_name)
                  + '" '
                  + 'style="background: url(\'/images/market/fetch.png\') '
                  + 'repeat-x scroll 0 0 transparent;cursor: pointer;'
                  + 'height: 12px; display: inline-block;width: 12px;"> </span>');
                  item.isFinished = true;
                } else {
                  tr.addClass('hasBid');
                  sp = $('&nbsp;<span '
                  + 'title="'
                  + TWT.LANG.collection.thEncours
                  + '" '
                  + 'style="background: url(\'/images/window/market/market_icons2.png\') '
                  + 'repeat-x scroll 0 0 transparent;cursor: pointer;'
                  + 'height: 16px; background-position: -16px 0;display: inline-block;width: 16px;"> </span>');
                }
                span.append('&nbsp;').append(sp).append('&nbsp;').append(imsell).click(function () {
                  MarketWindow.open(Character.homeTown.town_id, 'offer');
                  MarketWindow.showTab('offer');
                });
              }
              td.append(span);
              td.appendTo(tr);
              divMain.append(tr);
              imod++;
            });
            total += imod;
          }
          );
          var s = (total > 1) ? 's' : '';
          $('#thliste').text(TWT.LANG.collection.thText.replace('%2', s).replace('%3', s).replace('%1', total));
          return divMain;
        },
        switchOff: function () {
          var that = TWT.WindowCollection;
          if (that.cbTrader.isSelected()
          || that.cbBid.isSelected()
          || that.cbCurBid.isSelected()) {
            $('tr', $('#rightPane')).css('display', 'none');
            if (that.cbTrader.isSelected()) {
              $('.hasTrader', $('#rightPane')).css('display', '');
            }
            if (that.cbBid.isSelected()) {
              $('.hasBid', $('#rightPane')).css('display', '');
            }
            if (that.cbCurBid.isSelected()) {
              $('.hasCurrentBid', $('#rightPane')).css('display', '');
            }
          } else {
            $('tr', $('#rightPane')).css('display', '');
          }
        },
        getFiltres: function () {
          this.cbTrader = new west.gui.Checkbox(TWT.LANG.collection.atTrader, '', this.switchOff).setTitle(TWT.LANG.collection.atTraderTitle);
          this.cbBid = new west.gui.Checkbox(TWT.LANG.collection.atBid, '', this.switchOff).setTitle(TWT.LANG.collection.atBidTitle);
          this.cbCurBid = new west.gui.Checkbox(TWT.LANG.collection.atCurBid, '', this.switchOff).setTitle(TWT.LANG.collection.atCurBidTitle);
          var cbox = $('<div class="jobs_basisbox"><h3>'
          + TWT.LANG.collection.filters
          + '</h3></div>');
          cbox.append(this.cbTrader.getMainDiv(), '<br />', '<div class="jobs_divider_checkbox" />');
          cbox.append(this.cbBid.getMainDiv(), '<br />', '<div class="jobs_divider_checkbox" />');
          cbox.append(this.cbCurBid.getMainDiv(), '<br />');
          return cbox;
        },
        open: function () {
          this.Window = wman.open('WindowCollection', TWT.LANG.collection.listText).setMiniTitle(TWT.LANG.collection.listText).addClass('tw2gui_window_notabs');
          var rightPane = $('<div id="rightPane"/>').css({
            'height': '100%',
            'left': '199px',
            'position': 'absolute',
            'top': '0px',
            'width': '450px'
          });
          var leftPane = $('<div id="leftPane" />').css({
            'height': '380px',
            'width': '190px'
          });
          $('<div id="WindowCollectionBody" />').append(leftPane).append('<div class="jobs_divider" />').append(rightPane).appendTo('.WindowCollection .tw2gui_window_content_pane');
          TWT.WindowCollection.Window.showLoader();
          if (!TWT.MetaCol.ready) {
            TWT.MetaCol.init();
            this.interval = setInterval(function () {
              if (TWT.MetaCol.ready)
              clearInterval(this.interval);
            }, 200);
          }
          TWT.MetaCol.getMarketEC();
          var showbox = $('<div style="max-height: 370px;"></div>');
          this.scrollbar = new west.gui.Scrollpane;
          this.scrollbar.scrollToTop();
          $(this.scrollbar.getMainDiv()).css({
            'height': '350px',
            'top': '5px'
          });
          this.scrollbar.appendContent($('<div id="showbox" align="center"></div>'));
          showbox.append(this.scrollbar.getMainDiv());
          var th = $('<div id="thliste" />');
          th.css({
            'text-align': 'center',
            'font-weight': 'bolder'
          });
          $('#leftPane').append(this.getAllAnchors());
          $('#leftPane').append(this.getFiltres());
          // $('<div style="text-align: left;"></div>')
          // .append(this.getAllAnchors())) ;
          $('#rightPane').append(th);
          $('#rightPane').append(showbox);
          var divMain = this.getDiv(TWT.MetaCol.groupSorted);
          $('#showbox').html(divMain);
          this.Window.hideLoader();
        }
      },
      Injecteur: {
        divsnif: [
        ],
        methodes: [
        ],
        winTabInjected: [
        ],
        init: function (id, name, callback) {
          if (!isDefined(this.methodes[id])) {
            this.methodes[id] = {
              attached: false,
              id: id,
              name: name,
              callback: callback,
              original: eval(name)
            };
          }
          ;
        },
        addWinTabListen: function (who, callback, tab) {
          if (!isDefined(TWT.Injecteur.winTabInjected[who
          + '_' + tab])) {
            TWT.Injecteur.winTabInjected[who] = {
              who: who,
              tab: tab,
              callback: callback
            };
          }
        },
        startListen: function () {
          EventHandler.listen('WINDOW_OPENED', function (e) {
            if (isDefined(TWT.Injecteur.winTabInjected[e])) {
              var inj = TWT.Injecteur.winTabInjected[e];
              TWT.Injecteur.detecteWin(inj.who, inj.callback, inj.tab);
            }
          });
        },
        detecteWin: function (who, callback, tab) {
          var u = wman.getById(who);
          if (isDefined(u)) {
            u.addEventListener(TWE('WINDOW_CLOSE'), function (e) {
              u.removeEventListener(TWE('WINDOW_TAB_CLICK'), callback(u));
              u.removeEventListener(TWE('WINDOW_CLOSE'), callback);
            }, u, who);
            if (isDefined(tab)) {
              u.addEventListener(TWE('WINDOW_TAB_CLICK'), function (e) {
                if (u.currentActiveTabId == tab) {
                  callback(u);
                }
              }, u, who);
            } else {
              callback(u);
            }
          }
        },
        detecteWinOff: function (who) {
          TWT.Injecteur.winTabInjected[who] = null;
        },
        divsniffer: function (who, callback) {
          if (isDefined(TWT.Injecteur.divsnif[who])) {
            return false;
          } else {
            $('#windows').on('DOMNodeInserted', '.' + who, function (e) {
              try {
                var opendiv = e.currentTarget;
                if (opendiv.attributes['class'].nodeValue.indexOf(who) > - 1) {
                  var divBuy = $('div[class="'
                  + who
                  + '"]').contents();
                  callback($(opendiv));
                }
              } catch (e) {
                ErrorLog.log(e);
              }
            });
            TWT.Injecteur.divsnif[who] = 'true';
          }
        },
        divsnifferoff: function (who) {
          $('#windows').off('DOMNodeInserted', '.' + who);
          // console.log('div sniffer off');
          TWT.Injecteur.divsnif[who] = undefined;
        },
        inject: function (id) {
          try {
            if (isDefined(this.methodes[id])
            && !this.methodes[id].attached) {
              this.methodes[id].attached = true;
              return this.methodes[id].callback();
            }
            ;
          } catch (e) {
            ErrorLog.log(e, 'Erreur injection ' + id);
            this.restore(id);
          }
        },
        restore: function (id) {
          try {
            this.methodes[id].attached = false;
            eval('(function ($) {' + this.methodes[id].name
            + '=' + this.methodes[id].original
            + '})($);');
            return this.methodes[id].original;
          } catch (e) {
            ErrorLog.log(e, 'Erreur retauration ' + id);
          }
        },
        injectedMethods: {
          injectItemTrader: function () {
            west.game.shop.item.view.prototype.render = function () {
              var newfunction = west.game.shop.item.view.prototype.render;
              return function () {
                if (TWT.MetaCol.dirty) {
                  TWT.CollectionsHandler.refresh();
                }
                var obj = this.getModel();
                var name = $.trim(obj.getName());
                var divMain = newfunction.bind(this) ();
                divMain.find('.TWTSuccess').remove();
                if (TWT.MetaCol.shouldBuy(name)) {
                  var titre = TWT.MetaCol.getBuyItems(name, true);
                  divMain.append('<img  class="TWTSuccess"'
                  + 'style="'
                  + TWT.css.styleN
                  + '" title="'
                  + TWT.LANG.collection.patchsell.title
                  + titre
                  + '" src="'
                  + TWT.images.cup
                  + '" />');
                }
                /*
                if (TWT.Settings.isChecked('twdbadds.addNewToShop')) {
                  var inBag = Bag.getItemByItemId(obj.item_id);
                  if (!isDefined(inBag)) {
                    divMain.append('<img  class="TWDBcollector"'
                    + 'style="'
                    + TWT.css.styleDB
                    + '" src="'
                    + TWT.images.twdb_iconNew
                    + '" />');
                  }
                }
				*/

                return divMain;
              };
            }();
          },
          injectSell: function () {
            tw2widget['InventoryItem'].prototype.getMainDiv = function () {
              var newfunction = tw2widget['InventoryItem'].prototype.getMainDiv;
              return function () {
                if (TWT.MetaCol.dirty) {
                  TWT.CollectionsHandler.refresh();
                }
                var name = $.trim(this.obj.name);
                this.divMain = newfunction.bind(this) ();
                this.divMain.find('.TWTSuccessSell').remove();
                if (!TWT.MetaCol.isFinished(name)) {
                  this.divMain.append('<img  class="TWTSuccessSell"'
                  + 'style="'
                  + TWT.css.styleT
                  + '" title="'
                  + TWT.LANG.collection.patchsell.title
                  + TWT.MetaCol.getBuyItems(name, true)
                  + '"'
                  + ' src="'
                  + TWT.images.cup
                  + '" />');
                }
                if (TWT.MetaCol.dirty) {
                  TWT.CollectionsHandler.refresh();
                }
                return this.divMain;
              };
            }();
          },
          injectMarket: function () {
            try {
              MarketWindow.getClearName = function () {
                var newfunction = MarketWindow.getClearName;
                return function (e) {
                  if (TWT.MetaCol.dirty) {
                    TWT.CollectionsHandler.refresh();
                  }
                  var strD = newfunction.bind(this) (e);
                  var divMain = '';
                  if (TWT.MetaCol.shouldBuy($.trim(e.name))) {
                    divMain = '<img  class="TWTSuccess" style="'
                    + TWT.css.style
                    + '" title="'
                    + TWT.LANG.collection.patchsell.title
                    + ' '
                    + TWT.MetaCol.getBuyItems(e.name, false)
                    + '"'
                    + ' src="'
                    + TWT.images.cup
                    + '" />';
                  }
                  ;
                  return divMain + strD;
                };
              }();
            } catch (e) {
              ErrorLog.log(e, 'Erreur inject market');
              throw (e);
            }
          },
          injectFilterMarket: function () {
            MarketWindow.Buy.updateCategory = function (category, data) {
              // searchbox
              var newfunction = MarketWindow.Buy.updateCategory;
              return function (category, data) {
                try {
                  newfunction.bind(this) (category, data);
                  if (!TWT.MetaCol.finished) {
                    if ($('#buyFilterIsCollect.tw2gui_checkbox_checked', MarketWindow.DOM).length > 0) {
                      $('p.accordion_contentRow:not(:has(.TWTSuccess))', MarketWindow.DOM).css('display', 'none');
                    }
                  }
                  // TWDB add

                  if (TWT.isTWDBHere
                  && TWT.Settings.isChecked('twdbadds.filterBuyMarket')) {
                    if ($('#buyFilterIsCollect2.tw2gui_checkbox_checked', MarketWindow.DOM).length > 0) {
                      $('p.accordion_contentRow:not(:has(.TWDBcollector)):not(:has(.TWDBbuyTip))', MarketWindow.DOM).css('display', 'none');
                    }
                  }
                } catch (e) {
                  ErrorLog.log(e, 'Erreur update category');
                  newfunction.bind(this) (category, data);
                }
              };
            }();
          },
          injectBagUpdate: function () {
            try {
              Bag.updateChanges = function (changes, from) {
                var newfunction = Bag.updateChanges;
                return function (changes, from) {
                  newfunction.bind(this) (changes, from);
                  EventHandler.signal('inventory_dun_changed');
                };
              }();
            } catch (e) {
              ErrorLog.log('Injection Bag updater error', e);
            }
          },
          injectTrader: function () {
            tw2widget['TraderItem'].prototype.getMainDiv = function () {
              var newfunction = tw2widget['TraderItem'].prototype.getMainDiv;
              return function () {
                if (TWT.MetaCol.dirty) {
                  TWT.CollectionsHandler.refresh();
                }
                var name = $.trim(this.obj.name);
                this.divMain = newfunction.bind(this) ();
                this.divMain.find('.TWTSuccess').remove();
                if (TWT.MetaCol.shouldBuy(name)) {
                  this.divMain.append('<img  class="TWTSuccess"'
                  + 'style="'
                  + TWT.css.styleT
                  + '" title="'
                  + TWT.LANG.collection.patchsell.title
                  + TWT.MetaCol.getBuyItems(name, true)
                  + '"'
                  + ' src="'
                  + TWT.images.cup
                  + '" />');
                }
                return this.divMain;
              };
            }();
          }
        }
      },
      Market: {
        inject: function () {
          try {
            if (TWT.Settings.isChecked('collection.filterMarket')
            || TWT.Settings.isChecked('twdbadds.filterBuyMarket')) {
              // TWT.Injecteur.divsniffer('marketplace-buy',
              // TWT.Market.addCheckBoxMarket);
              TWT.Injecteur.addWinTabListen('marketplace', TWT.Market.addCheckBoxMarket, 'buy');
              TWT.Injecteur.inject('collection.filterMarket');
            }
            return true;
          } catch (e) {
            ErrorLog.log('Erreur Injection des meacute;thodes ', e);
            this.erreur = e;
          }
        },
        initListener: function () {
          EventHandler.listen('collection.filterMarket', function () {
            if (TWT.Settings.isChecked('collection.filterMarket')
            || TWT.Settings.isChecked('twdbadds.filterBuyMarket')) {
              TWT.Injecteur.addWinTabListen('marketplace', TWT.Market.addCheckBoxMarket, 'buy'); // TWT.Injecteur.divsniffer('marketplace-buy',
              // TWT.Market.addCheckBoxMarket);
              TWT.Injecteur.inject('collection.filterMarket');
            } else {
              MarketWindow.Buy.updateCategory = TWT.Injecteur.restore('collection.filterMarket');
              // '
              // TWT.Injecteur.divsnifferoff('marketplace-buy');'
              // TWT.Injecteur.detecteWinOff('marketplace');
            }
          });
          EventHandler.listen('twdbadds.filterBuyMarket', function () {
            if (TWT.Settings.isChecked('collection.filterMarket')
            || TWT.Settings.isChecked('twdbadds.filterBuyMarket')) {
              TWT.Injecteur.addWinTabListen('marketplace', TWT.Market.addCheckBoxMarket, 'buy');
              // TWT.Injecteur.divsniffer('marketplace-buy',
              // TWT.Market.addCheckBoxMarket);
              TWT.Injecteur.inject('collection.filterMarket');
            } else {
              MarketWindow.Buy.updateCategory = TWT.Injecteur.restore('collection.filterMarket');
              // TWT.Injecteur.divsnifferoff('marketplace-buy');
            }
          });
        },
        init: function () {
          TWT.Injecteur.init('collection.filterMarket', 'MarketWindow.Buy.updateCategory', TWT.Injecteur.injectedMethods.injectFilterMarket);
        },
        addCheckBoxMarket: function (div) {
          if ($('#buyFilterIsCollect').length == 0) {
            if ((!TWT.MetaCol.finished)
            && TWT.Settings.isChecked('collection.filterMarket')) {
              $('.searchbox').css('margin-top', '-5px');
              TWT.Market.insertedCB = new west.gui.Checkbox('<img src="'
              + TWT.images.cup
              + '" /> '
              + TWT.LANG.collection.collectionFilterLabel, false, function () {
                if (this.isSelected()) {
                  if (isDefined(TWT.Market.insertedCB2))
                  TWT.Market.insertedCB2.setSelected(false);
                  $('p.accordion_contentRow:not(:has(.TWTSuccess))', MarketWindow.DOM).css('display', 'none');
                } else {
                  $('p.accordion_contentRow:not(:has(.TWTSuccess))', MarketWindow.DOM).css('display', '');
                }
              });
              TWT.Market.insertedCB.setSelected(false);
              TWT.Market.insertedCB.setId('buyFilterIsCollect');
              TWT.Market.insertedCB.setTooltip(TWT.LANG.collection.collectionFilterTip);
              $('.searchbox').append(TWT.Market.insertedCB.getMainDiv());
            }
          }
          if (TWT.isTWDBHere
          && TWT.Settings.isChecked('twdbadds.filterBuyMarket')) { // TWDB
            // add
            if ($('#buyFilterIsCollect2').length == 0) {
              $('.searchbox').css('margin-bottom', '5px');
              TWT.Market.insertedCB2 = new west.gui.Checkbox('<img src="data:image/png;base64,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"'
              + ' style="width:18px;height:18px"/>'
              + TWT.LANG.twdbadds.buyFilterLabel, false, function () {
                if (this.isSelected()) {
                  if (isDefined(TWT.Market.insertedCB))
                  TWT.Market.insertedCB.setSelected(false);
                  $('p.accordion_contentRow:not(:has(.TWDBcollector)):not(:has(.TWDBbuyTip))', MarketWindow.DOM).css('display', 'none');
                } else {
                  $('p.accordion_contentRow:not(:has(.TWDBcollector)):not(:has(.TWDBbuyTip))', MarketWindow.DOM).css('display', '');
                }
              });
              TWT.Market.insertedCB2.setSelected(false);
              TWT.Market.insertedCB2.setId('buyFilterIsCollect2');
              TWT.Market.insertedCB2.setTooltip(TWT.LANG.twdbadds.buyFilterTip);
              $('.searchbox').append(TWT.Market.insertedCB2.getMainDiv());
            }
          }
          $('.searchbox').css('margin-bottom', '10px');
        }
      },
      CollectionsHandler: {
        interval: 0,
        erreur: false,
        ready: false,
        saveFunction: {
        },
        attachFilter: function () {
          // this.detachFilter();
          TWT.CollectionsHandler.init();
        },
        callRefresh: function (e) {
          TWT.MetaCol.dirty = true;
          window.setTimeout(function () {
            TWT.CollectionsHandler.refresh();
          }, 500);
        },
        hasOneChecked: function () {
          var boolC = TWT.Settings.isChecked('collection.filterMarket')
          || TWT.Settings.isChecked('collection.patchtrader')
          || TWT.Settings.isChecked('collection.patchsell')
          || TWT.Settings.isChecked('collection.patchmarket')
          || TWT.Settings.isChecked('collection.showmiss')
          || TWT.Settings.isChecked('collection.listNeeded');
          return boolC;
        },
        initListener: function () {
          try {
            EventHandler.listen('collection.bagupdate', function () {
              if (TWT.CollectionsHandler.hasOneChecked()) {
                TWT.Injecteur.init('collection.patchtbagupdate', 'Bag.updateChanges', TWT.Injecteur.injectedMethods.injectBagUpdate);
                TWT.Injecteur.inject('collection.patchtbagupdate');
              } else {
                Bag.updateChanges = TWT.Injecteur.restore('collection.patchtbagupdate');
                EventHandler.unlisten('inventory_dun_changed', TWT.CollectionsHandler.callRefresh);
              }
            });
            EventHandler.listen('collection.gereNewItems', function () {
              TWT.MetaCol.ready = false;
              TWT.MetaCol.init();
              this.interval = setInterval(function () {
                if (TWT.MetaCol.ready)
                clearInterval(this.interval);
              }, 200);
            });
            EventHandler.listen('collection.patchtrader', function () {
              if (TWT.Settings.isChecked('collection.patchtrader')) {
                if (!TWT.MetaCol.ready)
                TWT.MetaCol.init();
                TWT.Injecteur.inject('collection.patchitemtrader');
                TWT.Injecteur.inject('collection.patchtrader');
              } else {
                TWT.Injecteur.restore('collection.patchitemtrader');
                TWT.Injecteur.restore('collection.patchtrader');
              }
            });
            EventHandler.listen('collection.patchsell', function () {
              if (TWT.Settings.isChecked('collection.patchsell')) {
                if (!TWT.MetaCol.ready)
                TWT.MetaCol.init();
                document.styleSheets[0].deleteRule(999);
                TWT.Injecteur.inject('collection.patchsell');
              } else {
                TWT.Injecteur.restore('collection.patchsell');
                $('.TWTSuccessSell').css('display', 'none');
                document.styleSheets[0].insertRule('.TWTSuccessSell { display:none; }', 999);
              }
            });
            EventHandler.listen('collection.patchmarket', function () {
              if (TWT.Settings.isChecked('collection.patchmarket')) {
                if (!TWT.MetaCol.ready)
                TWT.MetaCol.init();
                TWT.Injecteur.inject('collection.patchmarket');
              } else {
                TWT.Injecteur.restore('collection.patchmarket');
              }
            });
          } catch (e) {
            ErrorLog.log('Erreur listener CollectionHandler', e);
            throw e;
          }
        },
        init: function () {
          EventHandler.listen('inventory_dun_changed', TWT.CollectionsHandler.callRefresh);
          TWT.Injecteur.init('collection.patchmarket', 'MarketWindow.getClearName', TWT.Injecteur.injectedMethods.injectMarket);
          TWT.Injecteur.init('collection.patchsell', 'tw2widget["InventoryItem"].prototype.getMainDiv', TWT.Injecteur.injectedMethods.injectSell);
          TWT.Injecteur.init('collection.patchtbagupdate', 'Bag.updateChanges', TWT.Injecteur.injectedMethods.injectBagUpdate);
          TWT.Injecteur.inject('collection.patchtbagupdate');
          /*
							 * TWT.Injecteur.init('collection.patchitemtrader',
							 * 'tw2widget["ItemTraderItem"].prototype.getMainDiv',
							 * TWT.Injecteur.injectedMethods.injectItemTrader);
							 */
          TWT.Injecteur.init('collection.patchitemtrader', 'west.window.shop.factory.createItemElement', TWT.Injecteur.injectedMethods.injectItemTrader);
          TWT.Injecteur.init('collection.patchtrader', 'tw2widget["TraderItem"].prototype.getMainDiv', TWT.Injecteur.injectedMethods.injectTrader);
        },
        refresh: function () {
          var items = Bag.items;
          $.each(items, function (ind, val) {
            $.each(val, function (ind2, val2) {
              if (val2) {
                var name = $.trim(val2.obj.name);
                var item = TWT.MetaCol.inProgress[name];
                if (isDefined(item)) {
                  item.shouldBuy = false;
                  var manquants = TWT.MetaCol.group[item.group];
                  if (isDefined(manquants)) {
                    TWT.MetaCol.group[item.group] = TWT.MetaCol.remove(manquants, name);
                    if (TWT.MetaCol.group[item.group].length == 0) {
                      TWT.MetaCol.group[item.group][0] = true;
                    }
                  }
                }
              }
            });
          });
          TWT.MetaCol.dirty = false;
        },
        inject: function () {
          try {
            TWT.MetaCol.init();
            if (!TWT.MetaCol.finished) {
              if (TWT.MetaCol.ready) {
                if (TWT.Settings.isChecked('collection.patchtrader')) {
                  TWT.Injecteur.inject('collection.patchtrader');
                  TWT.Injecteur.inject('collection.patchitemtrader');
                }
                if (TWT.Settings.isChecked('collection.patchsell')) {
                  TWT.Injecteur.inject('collection.patchsell');
                }
                if (TWT.Settings.isChecked('collection.patchmarket')) {
                  TWT.Injecteur.inject('collection.patchmarket');
                }
              }
            }
            return true;
          } catch (e) {
            ErrorLog.log('Erreur Injection des meacute;thodes ', e);
            this.erreur = e;
          }
        }
      },
      Inventaire: {
        create: function () {
          TWT.Inventaire.attach();
        },
        attach: function () {
          EventHandler.listen('inventory_ready', TWT.Inventaire.addCheckBoxBag, 'dblbag');
        },
        detach: function () {
          EventHandler.unlisten('inventory_ready', TWT.Inventaire.addCheckBoxBag, 'dblbag');
          $('#bagFilterIsCollect', Inventory.DOM).remove();
        },
        searchDoublons: function (filtre) {
          var searchTxt = '';
          var searchVal = $('#inventory_search', Inventory.DOM).val();
          if (searchVal.lenght == 0
          || Inventory.category != 'set') {
            searchVal = '.*';
          } else {
            searchTxt = (searchVal.lenght == 0) ? '' : ' ('
            + searchVal + ')';
          }
          var res = Bag.search(searchVal);
          $('#inventory_search', Inventory.DOM).val('');
          var doubles = [
          ];
          var sell = 0;
          $.each(res, function (ind1, item) {
            if (item.obj.type != 'yield'
            && ($.inArray(item.getType(), Inventory.getCategoryTypes(Inventory.category)) > - 1
            || Inventory.category == 'set' || Inventory.category == 'new')) {
              var count = item.getCount();
              if (count > 1) {
                switch (filtre) {
                  case 'nosets':
                    if (item.obj.set != null) {
                      item = null;
                    }
                    break;
                  case 'sellable':
                    if (!item.obj.sellable) {
                      item = null;
                    }
                    break;
                  case 'auctionable':
                    if (!item.obj.auctionable) {
                      item = null;
                    }
                    break;
                  default:
                    break;
                }
                if (isDefined(item)) {
                  doubles.push(item);
                  sell += (item.getSellPrice())
                  * (count - 1);
              }
            }
          } else {
          }
        });
        var lastCat = Inventory.category;
        Inventory.showSearchResult(doubles || []);
        if (TWT.Settings.isChecked('inventory.sum')) {
          $('#sumsearch', Inventory.DOM).remove();
          $('#bagFilterIsCollect', Inventory.DOM).after('<div  title=\''
          + sell
          + TWT.LANG.Doublons.sellGain
          + searchTxt
          + '\' id=\'sumsearch\' style=\'text-align: center; position: inherit; z-index: 4;'
          + 'font-weight: bold; color: white; font-size: 11px; width:'
          + '100%;top:16px; \'>'
          + sell
          + TWT.LANG.Doublons.sellGain
          + '</div>');
        }
      },
      searchSpeciales: function (what) {
        $('#inventory_search', Inventory.DOM).val(what);
        var res = Bag.search(what);
        Inventory.showSearchResult(res || []);
        return res;
      },
      searchbaio: function () {
        var sr = 'coton|cuir|marteau|pierre|barres de fer|bois';
        var ids = [
          704,
          711,
          712,
          716,
          747,
          790
        ];
        var res = Bag.search(sr);
        var baio = [
        ];
        $.each(res, function (ind1, item) {
          if (item.obj.type == 'yield') {
            // console.log(item.obj.name);
            // console.log(item.obj.item_id);
            if ($.inArray(item.obj.item_id, ids) > - 1) {
              baio.push(item);
            }
          }
        });
        Inventory.showSearchResult(baio || []);
      },
      getDetSearchBox: function () {
        if (isDefined(west.storage.ItemSetManager)) {
          var selSets = new west.gui.Selectbox();
          selSets.setWidth(200);
          $(selSets.elContent).css({
            'max-height': '270px',
            'width': '250px',
            'overflow-y': 'auto'
          });
          TWT.selAdded = [
          ];
          selSets.addItem('all', TWT.LANG.collection.allOpt);
          selSets.addItem('current', TWT.LANG.Doublons.current);
          selSets.addItem('nosets', TWT.LANG.Doublons.noset);
          selSets.addItem('sellable', TWT.LANG.Doublons.sellable);
          selSets.addItem('auctionable', TWT.LANG.Doublons.auctionable);
          selSets.addListener(function (e) {
            switch (e) {
              case 'all':
                $('#inventory_search', Inventory.DOM).val('');
                break;
              default:
                break;
            }
            TWT.Inventaire.searchDoublons(e);
            return true;
          });
          return selSets;
        }
        return selSets;
      },
      getSetNamesBox: function (setsCache) {
        if (isDefined(west.storage.ItemSetManager)) {
          var selSets = new west.gui.Selectbox();
          selSets.setWidth(200);
          $(selSets.elContent).css({
            'max-height': '270px',
            'width': '250px',
            'overflow-y': 'auto'
          });
          TWT.selAdded = [
          ];
          selSets.addItem('setitems', TWT.LANG.collection.allOpt);
          $.each(setsCache, function (ind2, item) {
            var itemsSet = west.storage.ItemSetManager.get(item.obj.set);
            if (!isDefined(TWT.selAdded[itemsSet.name])) {
              TWT.selAdded[itemsSet.name] = true;
              selSets.addItem(itemsSet.name, itemsSet.name);
            }
          });
          selSets.addListener(function (e) {
            TWT.Inventaire.searchSpeciales(e);
            return true;
          });
          return selSets;
        }
        return selSets;
      },
      addCheckBoxBag: function (div) {
        if ($('#bagFilterIsCollect', Inventory.DOM).length == 0) {
          var setsCache = Bag.search('setitems');
          setsCache.sort(function (a, b) {
            var x = west.storage.ItemSetManager.get(a.obj.set).name;
            var y = west.storage.ItemSetManager.get(b.obj.set).name;
            if (typeof x === 'string'
            && typeof x === 'string') {
              return x.localeCompare(y);
            }
            return ((x < y) ? - 1 : ((x > y) ? 1 : 0));
          });
          var selBox = TWT.Inventaire.getSetNamesBox(setsCache);
          var spanD = $('<div id="bagFilterIsCollect"  '
          + 'style="display: flex; position: inherit;"/>');
          if (TWT.Settings.isChecked('inventory.doublons')) {
            var insertedCB = $('<span title=\''
            + TWT.LANG.Doublons.tip
            + '\' id=\'inventory_doublons\''
            + '" style="cursor: pointer; position: relative; margin-right: 4px;" />').append('<img  class=\'tw2gui-iconset tw2gui-icon-dollar\' '
            + ' src=\'./images/tw2gui/pixel-vfl3z5WfW.gif\' alt=\'\' title=\'\'>');
            insertedCB.click(function (e) {
              $('#sumsearch').remove();
              TWT.Inventaire.getDetSearchBox().show(e);
            });
            // insertedCB.click(TWT.Inventaire.searchDoublons);
            spanD.append(insertedCB);
          }
          if (TWT.Settings.isChecked('inventory.useables')) {
            var insertedCB2 = $('<span title="'
            + TWT.LANG.Doublons.tipuse
            + '" id="inventory_useables"'
            + '" style="cursor: pointer; position: relative; margin-right: 4px;">'
            + '<img class=\'tw2gui-iconset tw2gui-icon-consumable\' '
            + ' src=\'./images/tw2gui/pixel-vfl3z5WfW.gif\' alt=\'\' title=\'\'></span>');
            insertedCB2.click(function () {
              $('#sumsearch').remove();
              TWT.Inventaire.searchSpeciales('useable');
            });
            spanD.append(insertedCB2);
          }
          if (TWT.Settings.isChecked('inventory.recipe')) {
            var insertedCB3 = $('<span title="'
            + TWT.LANG.Doublons.tiprecipe
            + '" id="inventory_recipe"'
            + '" style="position: relative;background-color: transparent; background-attachment: scroll; background-clip: border-box; cursor: pointer; bottom: inherit; " >'
            + '<img  src="./images/items/recipe/recipe_smith.png" width="20px" height="20px" /></span>');
            insertedCB3.click(function () {
              $('#sumsearch').remove();
              TWT.Inventaire.searchSpeciales('recipe');
            });
            spanD.append(insertedCB3);
          }
          if (TWT.Settings.isChecked('inventory.sets')) {
            var insertedCB4 = $('<span title="'
            + TWT.LANG.Doublons.tipsets
            + '" id="inventory_sets"'
            + '" style="cursor: pointer; position: relative; margin-right: 4px;" >'
            + '<img  style=\'cursor: pointer;\' class=\'tw2gui-iconset tw2gui-icon-shirt\' '
            + ' src=\'./images/tw2gui/pixel-vfl3z5WfW.gif\' alt=\'\' title=\'\'></span>');
            insertedCB4.click(function (e) {
              $('#sumsearch').remove();
              selBox.show(e);
            });
            spanD.append(insertedCB4);
          }
          //								var insertedCB5 = $('<span title="BAIO" id="inventory_bayo"'
          //										+ '" style="cursor: pointer; position: relative; margin-right: 4px;" >'
          //										+ "<img  style='cursor: pointer;' class='tw2gui-iconset tw2gui-icon-shirt' "
          //										+ " src='./images/tw2gui/pixel-vfl3z5WfW.gif' alt='' title=''></span>");
          //
          //								insertedCB5.click(function() {
          //									$('#sumsearch').remove();
          //									TWT.Inventaire
          //											.searchbaio();
          //
          //								});
          //								spanD.append(insertedCB5);

          $('#bag', Inventory.DOM).after(spanD);
        }
      }
    },
    Logout: {
      initListener: function () {
        EventHandler.listen('miscellaneous.logout', function () {
          $('#TWTOOL_Logout').remove();
          if (TWT.Settings.isChecked('miscellaneous.logout')) {
            TWT.Logout.create();
          }
          ;
        });
      },
      create: function () {
        var a = $('<div></div>').attr({
          'class': 'menulink',
          'title': TWT.LANG.Logout.title
        }).css({
          'background-image': 'url('
          + TWT.images.logout + ')'
        }).mouseenter(function () {
          $(this).css('background-position', '-25px 0px');
        }).mouseleave(function () {
          $(this).css('background-position', '0px 0px');
        }).click(function () {
          TWT.Logout.logout();
        });
        var b = $('<div></div>').attr({
          'class': 'menucontainer_bottom'
        });
        $('<div></div>').attr({
          'class': 'ui_menucontainer',
          'id': 'TWTOOL_Logout'
        }).append(a).append(b).appendTo('#ui_menubar');
      },
      logout: function () {
        // Player.logout();
        $(window.location).attr('href', 'game.php?window=logout&action=logout&h='
        + Player.h);
      }
    },
    BankFees: {
      attach: function () {
        TWT.Injecteur.divsniffer('wood-footer', TWT.BankFees.init);
        // TWT.Injecteur.addWinTabListen(/^bank-\d+/,TWT.BankFees.init,'balance');
      },
      detach: function () {
        TWT.Injecteur.divsnifferoff('wood-footer');
        // TWT.Injecteur.detecteWinOff(/^bank-\d+/);
      },
      initListener: function () {
        EventHandler.listen('miscellaneous.showFees', function () {
          if (TWT.Settings.isChecked('miscellaneous.showFees')) {
            TWT.BankFees.attach();
          } else {
            TWT.BankFees.detach();
          }
        });
      },
      calcFrais: function (montant, taux) {
        tauxPourc = Number(taux.replace(/% ?/g, ''));
        var fraisArrondi = Math.ceil((montant * tauxPourc) / 100);
        var txtFrais = TWT.LANG.fees.tipText.replace('%1', tauxPourc).replace('%2', fraisArrondi); //
        return txtFrais;
      },
      init: function (e) {
        var depotLink = $('.wood-footer:first .deposit');
        if (depotLink && (!depotLink.attr('id'))) {
          var frais = $('div.town_data_value div.bank-fee').text();
          var numFrais = 1 + 0.01 * Number(frais.replace(/% ?/g, ''));
          depotLink.attr('id', 'depo_changed');
          var balance = $('.wood-footer:first #tb_balance_input_'
          + BankWindow.townid);
          var that = this;
          balance.mouseover(function () {
            var fraisArrondi = Math.ceil((balance.val() - balance.val()
            / numFrais));
            var txtFrais = TWT.BankFees.calcFrais(balance.val(), frais); //
            balance.attr('title', txtFrais);
          });
          var amount = $('#amount');
          if (amount) {
            amount.mouseover(function () {
              var txtFrais = TWT.BankFees.calcFrais(amount.val(), BankWindow.Transfer.fee.toString());
              amount.attr('title', txtFrais);
            });
          }
        }
      }
    },
    AllReportsDelete: {
      addStyle: function () {
        var css = '.window_AllReportsDelete .window_inside { width:540px; position:absolute; left:5px; top:2px; }'
        + '.window_AllReportsDelete .cell_what { width:170px; } '
        + '.window_AllReportsDelete .tbody .cell_what { padding-left:6px; } .window_AllReportsDelete .tbody .row { left:0px; }'
        + '.window_AllReportsDelete .cell_progress { text-align:center; width:330px; } '
        + 'div#ui_menubar { z-index: 100000;}';
        $('<style id="TWTOOL_CSS" type="text/css" >'
        + css + '</style>').appendTo('head');
      },
      saveFunction: MessagesWindow.Report._initContent,
      attachedFunction: '',
      attach: function () {
        MessagesWindow.Report._initContent = function (data) {
          var newfunction = MessagesWindow.Report._initContent;
          return function (data) {
            newfunction.bind(this) (data);
            $('.actionprompt', MessagesWindow.Report.DOM).append('<a href=\'javascript:TWT.AllReportsDelete.init();\'>'
            + TWT.LANG.AllReportsDelete.button
            + '</a>');
          };
        }();
        TWT.AllReportsDelete.attachedFunction = MessagesWindow.Report._initContent.toString();
        EventHandler.listen('report.dom.created', TWT.AllReportsDelete.addButton);
      },
      detach: function () {
        MessagesWindow.Report._initContent = TWT.AllReportsDelete.saveFunction;
        EventHandler.unlisten('report.dom.created', TWT.AllReportsDelete.addButton);
      },
      initListener: function () {
        EventHandler.listen('miscellaneous.deleteAllReports', function () {
          if (TWT.Settings.isChecked('miscellaneous.deleteAllReports')) {
            TWT.AllReportsDelete.attach();
          } else {
            TWT.AllReportsDelete.detach();
          }
        });
      },
      init: function () {
        new west.gui.Dialog(TWT.LANG.AllReportsDelete.userConfirm, TWT.LANG.AllReportsDelete.confirmText, 'ok').setModal(true, false, {
          bg: '../images/curtain_bg.png',
          opacity: 0.4
        }).addButton(TWT.LANG.AllReportsDelete.deleteYes, function () {
          TWT.AllReportsDelete.status_close = true;
          $('div.tw2gui_dialog_text').html('<p>Suppression en cours.....<br /></p><span id="sppage" />');
          $('div.tw2gui_dialog_actions').css({
            'display': 'none'
          });
          TWT.AllReportsDelete.delete_all();
        }).addButton(TWT.LANG.AllReportsDelete.deleteNo, function () {
          TWT.AllReportsDelete.status_close = false;
        }).show();
      },
      reports_id: [
      ],
      progress_page: 1,
      delete_all: function () {
        var that = this;
        for (var i = 0; i < MessagesWindow.Report.pageCount; i++) {
          $('#sppage').html('<p>Page '
          + that.progress_page
          + '/'
          + MessagesWindow.Report.pageCount
          + '</p>');
          $.ajax({
            url: 'game.php?window=reports&action=get_reports&h='
            + Player.h,
            type: 'POST',
            data: {
              'folder': MessagesWindow.Report.currentFolder,
              'page': that.progress_page
            },
            dataType: 'json',
            async: false,
            success: function (data_return) {
              for (var j = 0; j < data_return['reports'].length; j++) {
                that.reports_id.push(data_return['reports'][j]['report_id']);
              }
              that.progress_page += 1;
            }
          });
        }
        var that = this;
        $.ajax({
          url: 'game.php?window=reports&action=delete_reports&h='
          + Player.h,
          type: 'POST',
          data: {
            'deleted': 'false',
            'reports': TWT.AllReportsDelete.reports_id.join(', ')
          },
          dataType: 'json',
          async: false,
          success: function (data_return) {
            if (data_return['error'])
            that.status_close = false;
          }
        });
        MessagesWindow.showTab('report');
      }
    },
    getDunMp: function () {
      if (Game.worldName == 'Monde 1'
      || Game.worldName == 'Monde 3'
      || Game.worldName == 'Alamogordo'
      || Game.worldName == 'Death Valley') {
        return '<div style=\'text-align:right;padding-right: 5px; padding-top: 15px;\'><a href="javascript:MessagesWindow.open(\'telegram\', {insert_to: \'Dun\'})">by Dun</a></div>';
      } else {
        if (Game.worldName == 'World 1') {
          return '<div style=\'text-align:right;padding-right: 5px; padding-top: 15px;\'><a href="javascript:MessagesWindow.open(\'telegram\', {insert_to: \'Duncol\'})">by Dun</a></div>';
        }
        return '';
      }
      ;
    },
    api: function () {
      var TWApi = TheWestApi.register('TW_Collections', 'TW Collections', TWT.info.min_gameversion, TWT.info.max_gameversion, 'Dun - v'
      + TWT.info.version, 'https://greasyfork.org/scripts/7258');
      var set_button = new west.gui.Button(TWT.LANG.Options.tab.setting, function () {
        TWT.Options.open('setting');
      }, this, this, 'Open the Settings page');
      var more_button = new west.gui.Button(TWT.LANG.Options.checkbox_text.miscellaneous.options.lang, function () {
        TWT.Options.open('translate');
      }, this, this, 'Open the Translation tips page');
      TWApi.setGui($('<div id=\'twtApiContent\' style=\' font-family: comic sans ms;font-size: 12pt;padding-top: 10px;text-align: right;\'>'
      + TWT.LANG.description
      + '</div>').append(set_button.getMainDiv()).append(more_button.getMainDiv()).after(TWT.getDunMp()));
    }
  };
  ScriptUpdater = {
    id: null, // : TWT.info.idscript,
    version: null, // : TWT.info.version,
    scriptId: null,
    scriptCurrentVersion: null,
    scriptUpdUrl: 'https://greasyfork.org/de/scripts/7277/code.user.js',
    scriptCallbackFunction: null,
    scriptStorage: null,
    initialize: function (scriptId, scriptCurrentVersion, scriptCallbackFunction, scriptUseNotice, scriptForceNotice) {
      ScriptUpdater.scriptId = scriptId;
      ScriptUpdater.scriptCurrentVersion = scriptCurrentVersion;
      if (ScriptUpdater.scriptStorage == null) {
        ScriptUpdater.scriptStorage = new Storage('local', 'ScriptUpdater.' + scriptId);
      }
    },
    setValue: function (key, value) {
      if (ScriptUpdater.scriptStorage != null) {
        ScriptUpdater.scriptStorage.setItem(key, value);
      }
    },
    getValue: function (key, defaultValue) {
      if (ScriptUpdater.scriptStorage != null) {
        return ScriptUpdater.scriptStorage.getItem(key, defaultValue);
      } else {
        return defaultValue;
      }
    },
    checkLanguages: function () {
      // Update languages
      try {
        var strLang = '';
        $.each(TWT.languages, function (ind, language) {
          if (isDefined(language.script)) {
            if (language.version < ScriptUpdater.scrnv[language.script]) {
              strLang += '<br><a href=\'https://greasyfork.org/scripts/'
              + language.script
              + '/code.user.js\'>'
              + language.name
              + '</a>';
            }
          }
        });
        if (strLang.length > 0) {
          ScriptUpdater.scrnv.isAJ = false;
          var parent = new west.gui.Dialog(TWT.LANG.Options.update.title, '<div><br>'
          + TWT.LANG.Options.update.updlangmaj
          + '<br><center>' + strLang
          + '</center></div>').setIcon(west.gui.Dialog.SYS_INFORMATION).setModal(true, false, {
            bg: 'http://www.the-west.fr/images/curtain_bg.png',
            opacity: 0.7
          }).addButton('TW Collection page', function () {
            parent.hide();
            window.open('https://greasyfork.org/scripts/'
            + ScriptUpdater.scriptId, '_blanck');
          }).addButton('Close');
          parent.show();
        } else {
          // ScriptUpdater.scrnv.isAJ=true;
        }
      } catch (e) {
        new UserMessage(TWT.LANG.Options.update.upderror, UserMessage.TYPE_ERROR).show();
        ErrorLog.log('Update error', e);
      }
    },
    checkRemoteScript: function () {
      // Update
      try {
        if (TWT.DEBUG) {
          ScriptUpdater.scrnv = {
            159370: '1.9.9', // twt
            178773: '1.2.5', // it
            179298: '1.0.3', // de
            179358: '1.0.5', // es
            179302: '1.0.7', // pl
            179395: '1.0.5', // cz
            180784: '1.0.5', // hu
            news: '<h4 style="margin-bottom:20px;">News : </h4>'
            + 'Added 4 new filters for duplicates in inventory:<BR>'
            + '- <b>All</b>: Displays all duplicate from inventory<BR>'
            + '- <b>Current search</b>: Displays duplicates from current research or current page<BR>'
            + '- <b>Without set item</b>: Don\'t display items set in duplicate<BR>'
            + '- <b>Sellable</b> : Displays only duplicate items salable<BR>'
            + '- <b>Auctionable</b> : Displays only duplicates items salable in auction<BR><BR>'
          };
          /*
								 * ScriptUpdater.scrnv=[];
								 * ScriptUpdater.scrnv[TWT.info.idscript]='9.9.9';
								 * ScriptUpdater.scrnv[179395]='9.9.9';
								 * ScriptUpdater.scrnv['news']='' + '<h4 style="margin-bottom:20px;">News :
								 * </h4>' + "Added 4 new filters for duplicates
								 * in inventory:<BR>" + "- <b>All</b>:
								 * Displays all duplicate from inventory<BR>" + "-
								 * <b>Current search</b>: Displays duplicates
								 * from current research or current page<BR>" + "-
								 * <b>Without set item</b>: Don't display items
								 * set in duplicate<BR>" + "- <b>Sellable</b> :
								 * Displays only duplicate items salable<BR>" + "-
								 * <b>Auctionable</b> : Displays only
								 * duplicates items salable in auction<BR><BR>" ;
								 */
        }
        var gocheck = function () {
          ScriptUpdater.scrnv.isAJ = false;
          if (ScriptUpdater.scriptCurrentVersion < ScriptUpdater.scrnv[ScriptUpdater.scriptId]) {
            // ScriptUpdater.scrnv.isAJ=false;
            var strNew = ScriptUpdater.scrnv['news']
            || '';
            var parent = new west.gui.Dialog(TWT.LANG.Options.update.title, '<div style=\''
            + ((strNew.length > 0) ? 'width:650px;height:250px;' 
            : '')
            + 'font-size:16px;text-align:justify;\'><BR>'
            + TWT.LANG.Options.update.updscript
            // +
            // ScriptUpdater.scrnv[ScriptUpdater.scriptId]
            + '<div id=\'boxnews\' style=\'margin-top:20px;font-size:14px;font-style: italic;\'>'
            + strNew + '</div></div>').setIcon(west.gui.Dialog.SYS_QUESTION).setModal(true, false, {
              bg: 'http://www.the-west.fr/images/curtain_bg.png',
              opacity: 0.7
            }).addButton('yes', function () {
              parent.hide();
              window.open('https://greasyfork.org/scripts/7258/code.user.js', '_self');
            }).addButton('no', function () {
              parent.hide();
            }).addButton('Script page', function () {
              parent.hide();
              window.open('https://greasyfork.org/scripts/'
              + ScriptUpdater.scriptId, '_blanck');
            });
            parent.show();
          } else {
            ScriptUpdater.scrnv.isAJ = true;
          }
          ScriptUpdater.checkLanguages();
          var date = new Date();
          ScriptUpdater.setValue('lastCheck', parseInt(date.getTime()));
          if (ScriptUpdater.scrnv.isAJ) {
            EventHandler.signal('scriptmaj.ok');
          }
        };
        if (TWT.DEBUG) {
          gocheck();
        } else {
          ScriptUpdater.scrnv = [
          ];
          $.getScript(ScriptUpdater.scriptUpdUrl, gocheck);
        }
      } catch (e) {
        new UserMessage(TWT.LANG.Options.update.upderror, UserMessage.TYPE_ERROR).show();
        ErrorLog.log('Update error', e);
      }
    },
    getLastCheck: function () {
      return ScriptUpdater.getValue('lastCheck', 0);
    },
    getInterval: function () {
      var interval = ScriptUpdater.getValue('interval', 604800000);
      return (typeof (interval) == 'undefined' || !interval.toString().match(/^\d+$/)) ? 604800000 
      : parseInt(interval.toString());
    },
    setInterval: function (interval) {
      ScriptUpdater.setValue('interval', parseInt(interval));
    },
    check: function (scriptId, scriptVersion, scriptCallbackFunction) {
      ScriptUpdater.initialize(scriptId, scriptVersion, scriptCallbackFunction, true, false);
      var date = new Date();
      if (ScriptUpdater.getInterval() > 1) {
        if ((date.getTime() - ScriptUpdater.getLastCheck()) > ScriptUpdater.getInterval()) {
          ScriptUpdater.checkRemoteScript();
        }
      }
    },
    forceCheck: function (scriptId, scriptVersion, scriptCallbackFunction) {
      ScriptUpdater.initialize(scriptId, scriptVersion, scriptCallbackFunction, true, false);
      ScriptUpdater.checkRemoteScript();
    }
  };
  /***************************************************************
				 * DOM Storage Wrapper Class
				 * 
				 * Public members: ctor({"session"|"local"}[, <namespace>])
				 * setItem(<key>, <value>) getItem(<key>, <default value>)
				 * removeItem(<key>) keys()
				 **************************************************************/
  function Storage(type, namespace) {
    var object = this;
    if (typeof (type) != 'string')
    type = 'session';
    switch (type) {
      case 'local':
        {
          object.storage = localStorage;
        }
        break;
      case 'session':
        {
          object.storage = sessionStorage;
        }
        break;
      default:
        {
          object.storage = sessionStorage;
        }
        break;
    }
    if (!namespace
    || (typeof (namespace) != 'string' && typeof (namespace) != 'number'))
    namespace = 'ScriptStorage';
    object.namespace = [
      namespace,
      '.'
    ].join('');
    object.setItem = function (key, value) {
      try {
        object.storage.setItem(escape([object.namespace,
        key].join('')), JSON.stringify(value));
      } catch (e) {
      }
  };
  object.getItem = function (key, defaultValue) {
    try {
      var value = object.storage.getItem(escape([
      object.namespace,
      key].join('')));
      if (value)
      return eval(value);
       else
      return defaultValue;
    } catch (e) {
      return defaultValue;
    }
};
object.removeItem = function (key) {
  try {
    object.storage.removeItem(escape([
    object.namespace,
    key].join('')));
  } catch (e) {
  }
};
object.keys = function () {
var array = [
];
var indDun = 0;
do {
  try {
    var key = unescape(object.storage.key(indDun++));
    if (key.indexOf(object.namespace) == 0
    && object.storage.getItem(key))
    array.push(key.slice(object.namespace.length));
  } catch (e) {
    break;
  }
} while (true);
return array;
};
}
;
TWT.init();
}
});