ImThatGuy / JVCpremium

// ==UserScript==
// @name         JVCpremium
// @author       ImThatGuy
// @description  Bénéficiez des fonctionnalités de JVCpremium pour seulement 7,99 € / mois !
// @include      http://*.jeuxvideo.com/*
// @include      https://*.jeuxvideo.com/*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require      https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @require      http://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.4.0/clipboard.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.8.0/jquery.modal.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js
// @require      https://epmd.000webhostapp.com/files/remodal.min.js
// @require      https://raw.githubusercontent.com/avxto/nuContextMenu/master/src/jquery.nu-context-menu.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.min.js
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @grant        GM_xmlhttpRequest
// @grant        GM_getResourceText
// @grant        GM_getResourceURL
// @version      3.1.3
// @icon         https://i.imgur.com/0Oua1EO.png
// @copyright    2020+, ImThatGuy
// @license      MIT
// ==/UserScript==

/*
JVC premium. 2016-2020.
Developpé par ImThatGuy.

2020+, ImThatGuy.

Changelog
Version 0.1.0 : 1ère version
Version 0.1.1 : Correctifs -> Message premium bug blockquote
                Fonction qui permet de voir les gifs en miniature noelshack
                Ne marche toujours pas avec firefox
Version 0.1.2 : Correction de bugs
                Ajout de pack créés par des kheys
Version 0.1.3 : Possibilité de changer de theme pour adapter à DarkJVC
                Correction bug firefox voir : https://openuserjs.org/scripts/ImThatGuy/JVCpremium
Version 0.1.4 : Modifications design
                Highlight topic + option couleur libre
                Le prix de JVCpremium a augmenté ! Mouhouahaha
Version 0.1.5 : Bouton preview topic (possibilité d'en ouvrir plusieurs)
                Amélioration design (je crois :hap:)
Version 0.1.6 : Fonction preview topic améliorée
                Modifications de design
                Edition diamond activable
                  -> Insérer videos/photos
                Ajouts de packs
Version 0.1.7 : Les membres non diamond ne peuvent plus poster de html
                Optimisation design paramètres
                Amélioration de deign
                Bouton « insérer de l'audio » diamond
                Nouvel onglet « offre »
Version 0.1.8 : Iframes supprimés pour éviter les screamers etc.
                Correction "bug" userPseudo
Version 0.1.9 : Amélioration de design
                Bug vidéo diamond réglé
                Reconnaissance membres premium sur les forums grâce à un enregistrement sur le site http://epmd.000webhostapp.com/
                (changement de couleur du pseudo + tooltip)
                Prévient si le code vient d'un autre jvc premium
                problème video, image, audio diamond corrigé
Version 2.0   : Ajout d'une console
                Correction de bugs de la version 1.9
                Légère amélioration de design
                Plus besoin de suivre le tuto pour mozilla, le script le fait tout seul
Version 2.1   : Amélioration de l'affichage des stickers (beaucoup plus ergonomique)
                Améliorations de design
                Ajout de stickers risitas & autres
                Correction bug version 2.0
Version 2.2   : Amélioration stickers : Les stickers s'ajoutent là où est votre curseur dans la textbox
                Légère amélioration de design (Balise <b> enlevé dans les posts premium)
                Ajout d'un bouton de citation pour les posts premium (diamond seulement)
                Amélioration (corr. problème) boutons audio vidéo photo (diamond)
                Ajout d'une fonction de recherche rapide sur risibank pour pouvoir avoir un sticker particulier rapidement
Version 2.3   : Ajout de stickers rapidement à un post premium via l'onglet stickers du script (diamond seulement)
                Corr. problème stickers version 2.2
                Dernier sticker utilisé affiché dans un cadre noir dans les stickers risitas
                Changement design & placement bouton preview
                Bouton de preview désactivé par defaut
                Corr. problème textbox au lancement du script la première fois
                Améliorations de design
                Nouvelle fonction : "S" : Sauvegarde le message actuel
                Les stickers peronnels sont ajoutés en temps réel
Version 2.4   : Ajout de plugins (téléchargeable ici : https://epmd.000webhostapp.com/plugins.php)
                Changement de l'affichage de l'onglet informations (plus ergonomique)
                Correction gros bug -> les posts premium ne fonctionnaient plus depuis la 2.3
Version 2.5   : Possibilité de désactiver/activer le raccourci "t" pour ouvrir la console
                Le script vous alerte quand une mise à jour est disponible (désactivable dans les paramètres)
                Améliorations de design
                Demande de confirmation avant suppression des stickers personnels
                Le message visible aux utilisateurs lambdas du message premium est modifiable à souhait en mode diamond via un bouton
Version 2.6   : Ajout de stickers
                Améliorations de design
                Nouvelle fonction : Supprime les topics que vous voulez dans la liste des sujets (activation -> réglages & fonctionnalités divers)
                Nouveauté : Clique droit sur un sticker pour ouvrir le menu des stickers. Pour supprimer un sticker personnel, il faudra dorénavant passer par ce menu
                            /!\ La fonction télécharger du menu ne marche pas sur firefox
                Plugin FastSticker mis à jour : https://openuserjs.org/scripts/ImThatGuy/FastStickers
Version 2.7   : Mise à jour des stickers (stickers noelshack down...)
                Ajout de stickers
                Légères améliorations de design
                Accès rapide à la blacklist
                Correction de problèmes
                Corrige la faille noelshack
Version 2.8   : Correction bug sticker (mise à jour webedia) :
                  -> Nouveau système, les messages premiums sont hébergés sur un serveur externe.
                  -> Plus de problème avec la modé et les admins.
                  -> Régles & conseil à lire : https://epmd.000webhostapp.com/regles.php
                 Légères modifications de design
Version 3.0   : Améliorations de design (console, msg premium, stickers etc.)
                Refonte stickers
                Prévisualisation intégré des liens postés sur le forum
                Correctif 3.0.1 : Limite du nombre de requêtes (msgs premiums & prévisu des liens)
                                  Amélioration design tooltips
                                  Améliorations et corrections bugs prévisu liens forum
Version 3.1   : Amélioration design console (scrollbar)
                Suppression de l'option highlight topic
                Ajout d'une option activer/désactiver prévisu liens forums
                Améliorations design boutons, accordion & tabs

                Version 3.1.1 : Supression de l'option luminosité (bug avec chrome)
                ..      3.1.2 : Réupload d'un sticker supprimé de noelshack & amélioration design input sticker perso
                ..      3.1.3 : Correctifs problèmes (patch 2020)
*/

/*jshint multistr: true */
(function() {
    'use strict';
    const version = '3.1.3';
    var darkJVC = GM_getValue('darkjvc');
    //
    //$('head').append('<link rel="stylesheet" type="text/css" href="https://ticki84.github.io/jquery.modal.min.css"/>'); // Modal css, merci ticki84
    // Alert
    $('head').append('<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.css"/>');
    // Modal
    $('head').append('<link rel="stylesheet" type="text/css" href="https://epmd.000webhostapp.com/files/remodal.css"/>');
    $('head').append('<link rel="stylesheet" type="text/css" href="https://epmd.000webhostapp.com/files/remodal-default-theme.css"/>');
    // Icons
    $('head').append('<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>');
    // Context menu
    $('head').append('<link rel="stylesheet" type="text/css" href="https://epmd.000webhostapp.com/files/nu-context-menu.css"/>');
    // Tooltips
    $('head').append('<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.css"/>');

    if (darkJVC)
    {
        $("head").append ('<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/ui-darkness/jquery-ui.css" rel="stylesheet" type="text/css">'); // ajoute jquery ui dark css
    } else {
        $("head").append ('<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css">'); // ajoute jquery ui css
    }
    //
    GM_addStyle('.textarea-class { outline:none; width: 100%; height: 110px; max-width: 100%; min-width: 100%; border: 0 solid transparent; padding: 10px}'); // class 'area-editor' imcompatible avec les stickers
    GM_addStyle('img.premiumimg { user-drag: none; user-select: none;-moz-user-select: none;-webkit-user-drag: none;-webkit-user-select: none;-ms-user-select: none; }');
    // CSS CHANGE
    var userCSS = GM_getValue('css');
    if (userCSS === undefined) {
        userCSS = '';
    }
    GM_addStyle(GM_getValue('css')); // ajoute le css custom de l'user
    // VARIABLES

    // Console ( personnalisable à souhait ;) exemple : console_COLOR = 'lime'. Console tru3 h4x0r)
    var console_COLOR      = '#efefef';
    var console_BACKGROUND = '#161616';
    var console_FONT       = 'Consolas, sans-serif';
    var console_FONTSIZE   = '11px';
    var console_BORDER     = '2px solid #ccc';
    // Hauteur cadre stickers (en pixels) ( personnalisable à souhait ;) )
    var cadre_RISITAS = '80px';
    var cadre_AUTRES  = '50px';
    var cadre_PERSO   = '50px';
    /* Fonction loading interface premium (pas sur mozilla)
    Ce n'est qu'un prototype. Version 2.3.
    */
    var loading      = false; // true = activé
    var loadingLogos = [
        'http://smallenvelop.com/wp-content/uploads/2014/08/Preloader_8.gif', // Logo numéro 0
        'https://mir-s3-cdn-cf.behance.net/project_modules/disp/585d0331234507.564a1d239ac5e.gif', // Logo numéro 1
        'http://www.mytreedb.com/uploads/mytreedb/loader/ajax_loader_blue_350.gif',
        'http://mo16.alzheimersproam.ca/assets/images/blue-loading-wheel.gif',
        'https://javry.com/assets/loader.gif'
    ];
    var logoNb = 1; // Nombre du logo dans la liste
    // Fonction suppr topic
    //var supprTopic = true;
    // touche "t" pour afficher console
    var consoleKey     = GM_getValue('consoleKey');
    var consoleBtnData = GM_getValue('consoleBtnData');
    if ( consoleKey === undefined ) { consoleKey = false; consoleBtnData = 'Activer'; }
    // check les updates
    var checkUpdate   = GM_getValue('checkUpdate');
    var updateBtnData = GM_getValue('updateBtnData');
    if ( checkUpdate === undefined ) { checkUpdate = true; updateBtnData = 'Désactiver'; }

    // message premium personnalisé diamond
    var msgPremium = "[''Seuls les utilisateurs de JVCpremium peuvent voir ce message'']";
    //fonction rechercher un topic
    var topicLink = {};
    /* Prévisu liens 3.1.0 */
    var prevBtnData = "Désactiver" // Par défaut
    var previewOption = GM_getValue("previsu");
    if (previewOption === undefined) {
        previewOption = true;
    }

    if (previewOption) {
        prevBtnData = "Désactiver"
    } else {
        prevBtnData = "Activer"
    }
    //
    //var duree = '1 an'; enlevé depuis la 2.9
    // PACK STICKERS //
    var __PACK__ = [];
    /* Syntaxe pour créer un pack
    __PACK__.push(
        {
            nom : 'nomdupack',
            img : 'photo du pack',
            display : false,
            desc : 'description du pack',
            liens : [
                'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png',
                'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas11.png'
            ]
        }
    );
    Syntaxe pour créer un pack */
    // Pack créées par des kheys
    __PACK__.push(
        {
            nom : 'RisiDrogue',
            img : 'http://image.noelshack.com/fichiers/2016/48/1480320302-risidroguepack.png',
            display : GM_getValue('RisiDrogue'),
            desc : 'Ce pack vous permet d\'avoir les stickers risitas & jesus drogués !',
            liens : [
                'http://image.noelshack.com/fichiers/2016/47/1479995462-issouweed.png',
                'http://image.noelshack.com/fichiers/2016/47/1479995456-issoulsd.png',
                'http://image.noelshack.com/fichiers/2016/47/1479995469-risitas-hero.png',
                'http://image.noelshack.com/fichiers/2016/47/1479995449-isdu.png',
                'http://image.noelshack.com/fichiers/2016/47/1479995444-drugissou.png',
                'http://image.noelshack.com/fichiers/2016/47/1479995474-risitascocain.png',
                'http://image.noelshack.com/fichiers/2016/47/1479936022-1466366200-risitas13.png',
                'http://image.noelshack.com/fichiers/2016/47/1479936029-ijo.png',
                'http://image.noelshack.com/fichiers/2016/47/1479936039-drog.png',
                'http://image.noelshack.com/fichiers/2016/47/1480030477-1474829067-picsart-09-25-08-39-47.png'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'ElGoulagor',
            img : 'http://image.jeuxvideo.com/avatar-md/e/l/elgoulagor-1480253905-fc8640adf755fe7128bf3311436ce8c5.jpg',
            display : GM_getValue('ElGoulagor'),
            desc : 'Risitas russe eco +',
            liens : [
                'http://image.noelshack.com/fichiers/2016/47/1480210790-risitas-russ-1.png',
                'http://image.noelshack.com/fichiers/2016/47/1480210768-risitas-russe.png'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'Horreur',
            img : 'http://image.noelshack.com/fichiers/2016/48/1480333974-horror.png',
            display : GM_getValue('Horreur'),
            desc : 'Le pack térrifiant de risitas & jesus',
            liens : [
                'http://image.noelshack.com/fichiers/2016/47/1480125819-1480115747-risirage.png',
                'http://image.noelshack.com/fichiers/2016/30/1469996606-1469405730-risitas170.png',
                'http://image.noelshack.com/fichiers/2016/30/1469405730-risitas171.png',
                'http://image.noelshack.com/fichiers/2016/30/1469489214-issou.png',
                'http://image.noelshack.com/fichiers/2016/30/1469489287-issouu.png',
                'http://image.noelshack.com/fichiers/2016/30/1469405729-risitas169.png',
                'http://image.noelshack.com/fichiers/2016/30/1469405729-risitas172.png',
                'http://image.noelshack.com/fichiers/2016/30/1469449934-1467507413-1467309320-risitas158.png',
                'http://image.noelshack.com/fichiers/2016/30/1469449719-ris10.png',
                'http://image.noelshack.com/fichiers/2016/26/1467309320-risitas158.png',
                'http://image.noelshack.com/fichiers/2016/48/1480321136-risitas159.jpg',
                'http://image.noelshack.com/fichiers/2016/47/1480124135-cf80f2ee3e-35569-13160-phoneutria-nigriventer.jpg',
                'http://image.noelshack.com/fichiers/2016/30/1469559150-1467559788-risitaspeur-1.gif',
                'http://image.noelshack.com/fichiers/2016/45/1478549983-risitasjigsaw.png',
                'http://image.noelshack.com/fichiers/2016/48/1480334475-risitasterrifiant.png'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'EvolitionsPack',
            img : 'http://image.noelshack.com/fichiers/2016/48/1480363057-eevee.png',
            display : GM_getValue('EvolitionsPack'),
            desc : 'Ce pack regroupe tous les stickers des évolitions connues à ce jour !',
            liens : [
                'http://image.noelshack.com/fichiers/2016/51/1482178199-merci.png',
                'http://image.noelshack.com/fichiers/2016/51/1482178202-d-avoir.png',
                'http://image.noelshack.com/fichiers/2016/51/1482178205-telecharge.png',
                'http://image.noelshack.com/fichiers/2016/51/1482178208-mon.png',
                'http://image.noelshack.com/fichiers/2016/51/1482178213-pack.png',
                'http://image.noelshack.com/fichiers/2016/51/1482178340-destickers.png'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'Waluigi',
            img : 'http://image.noelshack.com/fichiers/2016/48/1480768507-telechargement.jpg',
            display : GM_getValue('Waluigi'),
            desc : 'Un pack qui comporte les Sticker Waluigi.',
            liens : [
                'http://image.noelshack.com/fichiers/2016/48/1480768601-waluigi1.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768605-waluigi3.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768608-waluigi4.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768611-waluigi5.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768614-waluigi6.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768617-waluigi7.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768621-waluigi8.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768625-waluigi9.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768648-waluigi10.jpg',
                'http://image.noelshack.com/fichiers/2016/48/1480768652-waluigi-2.jpg'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'Rap',
            img : 'http://image.noelshack.com/fichiers/2016/50/1481888813-rap.png',
            display : GM_getValue('Rap'),
            desc : 'Les stickers rappeurs de risitas.',
            liens : [
                'http://image.noelshack.com/fichiers/2016/30/1469541950-risitas177.png',
                'http://image.noelshack.com/fichiers/2016/30/1469541950-risitas178.png',
                'http://image.noelshack.com/fichiers/2016/50/1481888400-risitaskaaris.png',
                'http://image.noelshack.com/fichiers/2016/50/1481886463-risitasbooba.png',
                'http://image.noelshack.com/fichiers/2016/30/1469405726-risitas161.png',
                'http://image.noelshack.com/fichiers/2016/47/1479781568-1473626556-picsart-09-11-10-38-53.png'
            ]
        }
    );
    __PACK__.push(
        {
            nom : 'Gilbert',
            img : 'http://image.noelshack.com/fichiers/2016/46/1479187311-jesus49.png',
            display : GM_getValue('Gilbert'),
            desc : 'Faites attention à Gilbert dans ce pack inédit !',
            liens : [
                'http://image.noelshack.com/fichiers/2016/47/1480079188-1474570191-picsart-09-23-08-43-01.jpg',
                'http://image.noelshack.com/fichiers/2016/46/1479404482-risitasgilbert2.png',
                'http://image.noelshack.com/fichiers/2016/46/1479404483-risitasgilbert4.png',
                'http://image.noelshack.com/fichiers/2016/46/1479404482-risitasgilbert1.png',
                'http://image.noelshack.com/fichiers/2016/47/1480082724-risitascrs5.png',
                'http://image.noelshack.com/fichiers/2016/47/1480082724-risitascrs1.png',
                'http://image.noelshack.com/fichiers/2016/46/1479187311-jesus49.png',
                'http://image.noelshack.com/fichiers/2016/48/1480464156-1474755092-risitas705.png',
                'http://image.noelshack.com/fichiers/2016/45/1478798559-img-0182.png',
                'http://image.noelshack.com/fichiers/2016/44/1478468702-1477205294-picsart-10-18-06-45-19.jpg',
                'http://image.noelshack.com/fichiers/2016/50/1481837157-risitas2sucresgif.gif',
                'http://image.noelshack.com/fichiers/2016/50/1481985771-gendarmedeuxsucres.png',
                'http://image.noelshack.com/fichiers/2016/49/1480963538-risitasgign4.png'
            ]
        }
    );
    //
    var stickers = [
        'http://image.noelshack.com/fichiers/2016/46/1479639726-1467231909-1466015251-esp.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png',
        'http://image.noelshack.com/fichiers/2016/36/1473263674-jesus5.png',
        'http://image.noelshack.com/fichiers/2016/46/1479341443-issou.gif',
        'http://image.noelshack.com/fichiers/2016/30/1469971032-risitas246.png',
        'http://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png',
        'http://image.noelshack.com/fichiers/2017/33/2/1502748244-issou01.png',
        'http://image.noelshack.com/fichiers/2016/38/1474488554-jesus18.png',
        'https://image.noelshack.com/fichiers/2017/21/1495823618-risitas596.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366209-risitas24.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541957-risitas198.png',
        'http://image.noelshack.com/fichiers/2016/38/1474490238-risitas440.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541952-risitas182.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366602-risitas94.png',
        'http://image.noelshack.com/fichiers/2017/14/1491484186-risitasueur.png',
        'http://image.noelshack.com/fichiers/2017/02/1483996277-154457.jpg',
        'https://image.noelshack.com/fichiers/2018/32/5/1533932477-jesus26reupload.png',
        'http://image.noelshack.com/fichiers/2016/38/1474490303-risitas468.png',
        'http://image.noelshack.com/fichiers/2016/32/1470920801-jesus17.png',
        'http://image.noelshack.com/fichiers/2017/31/5/1501857511-jesussmile.png',
        'http://image.noelshack.com/fichiers/2016/38/1474719470-risitas626.png',
        'http://image.noelshack.com/fichiers/2016/38/1474488632-jesus27.png',
        'http://image.noelshack.com/fichiers/2016/38/1474794851-risitas766.gif',
        'http://image.noelshack.com/fichiers/2016/30/1469541959-risitas206.png',
        'http://image.noelshack.com/fichiers/2016/38/1474488555-jesus24.png',
        'http://image.noelshack.com/minis/2016/30/1469561699-1466004337-reupload-3-2.png',
        'http://image.noelshack.com/fichiers/2016/47/1480064732-1467335935-jesus4.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366261-risitas51.png',
        'http://image.noelshack.com/fichiers/2016/32/1470920800-jesus14.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366648-risitas115.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366339-risitas39.png',
        'http://image.noelshack.com/fichiers/2016/46/1479465472-risitaspc.png',
        'http://image.noelshack.com/fichiers/2016/38/1474719464-risitas614.png',
        'http://image.noelshack.com/fichiers/2016/38/1474719465-risitas615.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541976-risitas216.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366188-risitas6.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366306-risitas52.png',
        'http://image.noelshack.com/fichiers/2016/30/1469971038-risitas258.png',
        'http://image.noelshack.com/fichiers/2016/38/1474490319-risitas575.png',
        'http://image.noelshack.com/fichiers/2016/38/1474797359-risitas770.gif',
        'http://image.noelshack.com/fichiers/2016/38/1474490319-risitas574.png',
        'http://image.noelshack.com/fichiers/2016/47/1479858878-1466366212-risitas32.png',
        'http://image.noelshack.com/fichiers/2016/38/1474719466-risitas617.png',
        'http://image.noelshack.com/fichiers/2016/38/1474719465-risitas616.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541968-risitas225.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541970-risitas226.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541968-risitas224.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541969-risitas227.png',
        'http://image.noelshack.com/fichiers/2016/30/1469541969-risitas228.png',
        'http://image.noelshack.com/fichiers/2016/38/1474488573-jesus49.png',
        'http://image.noelshack.com/fichiers/2017/01/1483903109-bloggif-5872903951574.gif',
        'http://image.noelshack.com/fichiers/2016/48/1480464805-1474567129-1471909771-risitasvictime.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366203-risitas21.png',
        'http://image.noelshack.com/fichiers/2016/38/1474490239-risitas441.png',
        'http://image.noelshack.com/fichiers/2017/03/1484921410-1466366200-risitas13.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366296-risitas60.png',
        'http://image.noelshack.com/fichiers/2016/38/1474490330-risitas566.png',
        'http://image.noelshack.com/fichiers/2016/38/1474797331-risitas768.png',
        'http://image.noelshack.com/fichiers/2016/32/1470920814-jesus10.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366342-risitas59.png',
        'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas11.png',
        'http://image.noelshack.com/fichiers/2016/41/1476132386-1.png',
        'http://image.noelshack.com/fichiers/2016/50/1482000512-onsecalmerisitas.png',
        'http://image.noelshack.com/fichiers/2016/38/1474755095-risitas719.png',
        'http://image.noelshack.com/fichiers/2016/50/1482027315-perplexe.png',
        'http://image.noelshack.com/fichiers/2016/50/1481985771-gendarmedeuxsucres.png',
        'http://image.noelshack.com/fichiers/2016/47/1480092147-1477945635-1465556572-elrisitassticker3-copy.png',
        'http://image.noelshack.com/fichiers/2016/48/1480373367-issddou.png',
        'http://image.noelshack.com/fichiers/2016/49/1481140349-jesus.png',
        'http://image.noelshack.com/fichiers/2016/49/1481140358-jesusdd2.png',
        'http://image.noelshack.com/fichiers/2016/48/1480747401-picsart-12-03-07-36-33.jpg',
        'http://image.noelshack.com/fichiers/2016/48/1480747392-picsart-12-03-07-22-54.jpg',
        'http://image.noelshack.com/fichiers/2017/04/1485686507-risddb.png',
        'http://image.noelshack.com/fichiers/2017/02/1484127482-jesusah2.png',
        'http://image.noelshack.com/fichiers/2015/49/1448914032-elrisitasgif.gif'
    ];
    var stickers_autres = [
        'http://image.noelshack.com/fichiers/2016/49/1481056142-kangoordi.png',
        'http://image.noelshack.com/fichiers/2016/39/1475401891-valls2.gif',
        'http://image.noelshack.com/fichiers/2016/38/1474755063-politique3.png',
        'http://image.noelshack.com/fichiers/2016/23/1465723887-img2.png',
        'http://image.noelshack.com/fichiers/2016/38/1474492062-politique6.png',
        'http://image.noelshack.com/fichiers/2016/38/1474723958-tv1.png',
        'http://image.noelshack.com/fichiers/2016/38/1474723935-tv2.png',
        'http://image.noelshack.com/fichiers/2016/38/1474723948-tv7.png',
        'http://image.noelshack.com/fichiers/2016/24/1465843407-img2.png',
        'http://image.noelshack.com/fichiers/2016/23/1465687464-hahaha.png',
        'http://image.noelshack.com/fichiers/2016/38/1474488446-img57.png',
        'http://image.noelshack.com/fichiers/2016/23/1465725371-img5.png',
        'http://image.noelshack.com/fichiers/2016/45/1478874677-melench.jpg',
        'http://image.noelshack.com/fichiers/2017/02/1484424800-claireconseil.png',
        'http://image.noelshack.com/fichiers/2016/48/1480599745-funes.png',
        'http://image.noelshack.com/fichiers/2017/03/1484755521-sueur.png',
        'http://image.noelshack.com/fichiers/2016/23/1465750035-img4.png',
        'http://image.noelshack.com/fichiers/2017/02/1484514413-bhl.png',
        'https://image.noelshack.com/fichiers/2017/06/1486732304-guss2.png',
        'http://image.noelshack.com/fichiers/2016/45/1478845880-2.png',
        'http://image.noelshack.com/fichiers/2016/23/1465693008-img10.png',
        'http://image.noelshack.com/fichiers/2017/12/1490497882-zemmourrire.png',
        'http://image.noelshack.com/fichiers/2017/04/1485484836-larry.png',
        'http://image.noelshack.com/fichiers/2017/19/1494619651-larryhome-2.png',
        'http://image.noelshack.com/fichiers/2017/19/1494617394-larry3.png',
        'http://image.noelshack.com/fichiers/2017/06/1486403748-barthes.png',
        'http://image.noelshack.com/fichiers/2016/48/1480794642-israel-juif.jpg',
        'http://image.noelshack.com/fichiers/2017/12/1490019868-lachancesilversteinstickers.png',
        'http://image.noelshack.com/fichiers/2017/18/1494048058-pppppppppppppppppppp.png',
        'http://image.noelshack.com/fichiers/2017/12/1490182124-larrychance.png'
    ];
    var stickers_perso;
    try {
        stickers_perso = JSON.parse(GM_getValue("stickersPerso"));
    } catch (err) {
        stickers_perso = [];
    }
    //////////////////////////////////////////////////////////////////////////
    var luminosite = GM_getValue('luminosite');
    if (luminosite === undefined) {luminosite = '100';}

    var preview = GM_getValue('preview');
    if (preview === undefined) {preview = false;} // preview false = désactivé par defaut
    var previewData = GM_getValue('previewdata');
    if (previewData === undefined) {previewData = '<a style="width:100%" class="jvcpremium-btn" id="previewbtn">Activer le bouton de preview des topics</a>';}


    // Suppr topic
    var supprTopic = GM_getValue('supprTopic');
    if (supprTopic === undefined) {supprTopic = false;} // preview false = désactivé par defaut
    var supprTopicData = GM_getValue('supprTopicData');
    if (supprTopicData === undefined) {supprTopicData = '<a style="width:100%" class="jvcpremium-btn" id="supprBtn">Activer le bouton de suppresion des topics</a>';}


    //////////////////////////////////////////////////////////////////////////
    var tailleStickers = GM_getValue('tailleStickers');
    if (tailleStickers === undefined) {tailleStickers = 1;}
    //////////////////////////////////////////////////////////////////////////
    var firstTime = GM_getValue('firstTime');
    if (firstTime === undefined) {firstTime = true;}

    var userPseudo = document.getElementsByClassName('account-pseudo')[0].innerHTML;
    if (userPseudo == 'Mon compte'){
        userPseudo = '<i>Vous n\'êtes pas connecté</i>'
    }
    // Dernier sticker utilisé
    var dernierSticker;
    function defineDernierSticker() {
        dernierSticker = GM_getValue('dernierSticker');
    }
    defineDernierSticker();
    // Message sauvegardé
    var messageSauve = GM_getValue('saveMsg');
    if (messageSauve === undefined) {messageSauve = '';}
    //
    var chatRoom = '174479';
    // active premium
    var premiumActive = false;
    // msg premium dans la page
    var msgPremiumInPage = false;
    // highlight
    var highlightColor = GM_getValue('highlightColor');
    // Diamond
    var diamond = GM_getValue('diamond');
    if (diamond === undefined) {
        diamond = false;
    }
    var offre;
    var isDiamond;
    var diamondPremium;
    if (!diamond)
    {
        offre = 'JVCpremium classic <img src="http://icons.iconarchive.com/icons/everaldo/crystal-clear/128/Action-bookmark-silver-icon.png" width=20 height=20>, 7,99 € / mois';
        isDiamond = ' <img id="Edition" title="Vous êtes membre classic" src="http://icons.iconarchive.com/icons/everaldo/crystal-clear/128/Action-bookmark-silver-icon.png" width=20 height=20>';
        diamondPremium = '';
        //duree = '1 an'; enlevé depuis la 2.9
    } else
    {
        offre = 'JVCpremium diamond <img src="https://maxcdn.icons8.com/Share/icon/Holidays//diamond1600.png" width=20 height=20>, 10,99 € / mois';
        isDiamond = ' <img id="Edition" title="Vous êtes membre diamond" src="https://maxcdn.icons8.com/Share/icon/Holidays//diamond1600.png" width=20 height=20>';

        diamondPremium = '<div id="toolDiamond" style="border:1px solid #bababa; border-radius: 3px; padding:5px;">\
            <img hspace="5" height=16 width=16 title="Ajouter une photo" class="diamondBtnPlus premiumimg" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_pictures.png" id="diamondImage"> \
            <img hspace="5" height=16 width=16 title="Ajouter une vidéo" class="diamondBtnPlus premiumimg" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_movies.png" id="diamondVideo"> \
                <img hspace="5" height=16 width=16 title="Ajouter de l\'audio" class="diamondBtnPlus premiumimg" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_music.png" id="diamondAudio"> \
                <img hspace="5" height=16 width=16 id="persoPremium" class="diamondBtnPlus premiumimg" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_applications.png" title="Écrivez le message que vous voulez que les forumeurs n\'ayant pas JVCpremium voient">\
                <img height=16 width=16 style="float:right" id="toolbarInfo" class="premiumimg" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_get_info.png" title="La barre d\'outils diamond vous permet d\'ajouter des photos, vidéos, audios et d\'éditer votre post visible par les forumeurs lambdas"></div>';

        //duree = '3 ans'; enlevé depuis la 2.9
    }
    ////
    // Si l'utilisateur est connecté
    setTimeout(function() {
        if (userPseudo == '<i>Vous n\'êtes pas connecté</i>') {
            $('body').append('<div style="max-width:100% !important;width:70%" class="remodal" data-remodal-id="modalConnect">\
<button data-remodal-action="close" class="remodal-close"></button>\
<h1>Attention</h1><hr>\
<h3>Vous n\'êtes pas connecté. JVCpremium peut présenter des dysfonctionnements.</h3>\
</div>');
            var modalConnect = $('[data-remodal-id=modalConnect]').remodal();
            modalConnect.open();
        }
    }, 400);
    ////
    if (listeSujet() !== true) {
        var topicTitle = document.getElementById('bloc-title-forum').textContent;
    }
    //////////////////////////////////////////////////////////////////////////
    // Suppr topic
    //$('<img src="http://findicons.com/files/icons/1156/fugue/16/cross_circle.png">').insertAfter('.topic-date');

    if (listeSujet()) {
        if (supprTopic) {

            // Fonction main
            function supprTopicInit(data) {
                var newTopic;
                var topicTitle = $(data).closest('li').find('.topic-title').text();

                GM_xmlhttpRequest({
                    method: "GET",
                    url: window.location.href,
                    onload: function(response) {
                        function def () {
                            // Get random topic
                            newTopic = $(response.responseText).find('.topic-list-admin').find('li');
                            newTopic = newTopic[Math.floor(Math.random() * newTopic.length)];

                            // Ajoute l'icon
                            $(newTopic).find('.topic-select').append('<img height=12 width=12 class="supprTopicBtn" src="http://findicons.com/files/icons/1583/silk_companion_1/16/bullet_cross.png">');

                            // Remet le listener
                            $( $(newTopic).find('.supprTopicBtn') ).click(function() {
                                supprTopicInit(newTopic);
                            });

                            // Vérifie les topics
                            if ( $(newTopic).attr('class') == 'topic-head' ) {
                                def();
                            } else if ( $(newTopic).find('.topic-img').attr('alt') == 'Topic épinglé' ) {
                                def();
                            } else if ( $(newTopic).find('.topic-title').text() == topicTitle ) {
                                def();
                            }
                        }
                        def();
                    }
                });

                function replaceTopic(data) {
                    setTimeout(function() {
                        if ( newTopic === undefined ) {
                            $(data).closest('li').replaceWith('<i>Impossible de réafficher un topic. Supprimé.</i><br>');
                        } else {
                            $(data).closest('li').replaceWith(newTopic);
                            $(newTopic).css('opacity', 0);
                            $(newTopic).animate({
                                'opacity': 1
                            }, 600);
                        }
                    }, 950);
                }

                replaceTopic(data);
                //$(this).closest('li').replaceWith('<i>Supprimé</i><br>');
                logConsole( "[INFO] Topic : « " + topicTitle + " » supprimé.");
            }

            $('.topic-select').each(function() {
                if ( $(this).closest('li').find('.topic-img').attr('alt') == 'Topic épinglé' ) {
                    // ne pas ajouter l'icon
                } else if ( $(this).closest('li').attr('class') == 'topic-head' ) {
                    // ne pas ajouter l'icon
                } else {
                    $(this).append('<img height=12 width=12 class="supprTopicBtn" src="http://findicons.com/files/icons/1583/silk_companion_1/16/bullet_cross.png">');
                }
            }); // Ajoute l'icon

            $('.supprTopicBtn').click(function() {
                supprTopicInit(this);
            });

        }
    }


    // Preview topic
    if (preview) { // si le bouton preview est activé par l'utisateur
        var topicNumbers = document.getElementsByClassName('topic-title');
        for(var kf = 0; kf < topicNumbers.length; kf++)
        {
            $(topicNumbers[kf]).prepend('<img class="topicModal" title="'+topicNumbers[kf].title+'" lien="'+topicNumbers[kf].href+'" src="https://cdn3.iconfinder.com/data/icons/faticons/32/arrow-right-01-128.png" height=14 width=14> ');
        }
        $('.topicModal').on('click', function(){
            var page = this.getAttribute('lien');
            var boxTitle = this.title;

            var $dialog = $('<div></div>').html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>').dialog({
                autoOpen: false,
                modal: false,
                height: 625,
                width: 500,
                title: boxTitle
            });
            $dialog.dialog('open');
            return false;
        });
    }

    function checkForUpdate() {
        GM_xmlhttpRequest({
            method: "GET",
            url: 'https://epmd.000webhostapp.com/index.php',
            onload: function(response) {
                var getData = document.createElement('div');
                getData.innerHTML = response.responseText;
                getData.style.display = "none";
                var a = getData.querySelectorAll('#version')[0];
                var b = getData.querySelectorAll('#changelog')[0];
                // check update
                //alert(a.innerHTML);
                if (a.innerHTML > version) {

                    logConsole('[ATTENTION] Votre version de JVCpremium est obsolète.');
                    /* Ancien code (changé depuis 2.6)
                    $('body').append('<div id="newVersion">\
Votre version de JVCpremium est obsolète (<b>'+version+'</b>)<hr>\
<a style="width:100%" class="btn btn-success" href="https://openuserjs.org/install/ImThatGuy/JVCpremium.user.js">Télécharger JVCpremium '+a.innerHTML+'</a><br>\
<pre>'+b.innerHTML+'</pre>\
</div>');
                    $( "#newVersion" ).dialog({
                        title: "Nouvelle version de JVCpremium",
                        width: 700
                    });
                    */
                    $('body').append('<div style="max-width:100% !important;width:70%" class="remodal" data-remodal-id="modalUpdate">\
<button data-remodal-action="close" class="remodal-close"></button>\
<h1>Votre version de JVCpremium est obsolète ('+version+')</h1><hr>\
<a style="width:100%;border-radius:0" class="btn btn-success" href="https://openuserjs.org/install/ImThatGuy/JVCpremium.user.js">Télécharger JVCpremium '+a.innerHTML+'</a><br>\
<pre>'+b.innerHTML+'</pre>\
</div>');
                    var modalUpdate = $('[data-remodal-id=modalUpdate]').remodal();
                    modalUpdate.open();

                    sessionStorage.Alert = "Confirmed";
                } else { logConsole('[INFO] Votre version de JVCpremium est à jour.'); }
            }
        });
    }

    setTimeout(function() {
        if (checkUpdate) {
            if (sessionStorage.Alert !== 'Confirmed') {
                logConsole('[INFO] Vérification des updates...');
                checkForUpdate();
            }
        }
    }, 500)

    function logConsole(text) {
        $('#consolePremium').append('<p style="margin:10px;">'+text+'</p>');
    }

    function byteLength(str) {
        var s = str.length;
        for (var i=str.length-1; i>=0; i--) {
            var code = str.charCodeAt(i);
            if (code > 0x7f && code <= 0x7ff) s++;
            else if (code > 0x7ff && code <= 0xffff) s+=2;
            if (code >= 0xDC00 && code <= 0xDFFF) i--;
        }
        return s;
    }

    function isHTML(str) {
        var a = document.createElement('div');
        a.innerHTML = str;
        for (var c = a.childNodes, i = c.length; i--; ) {
            if (c[i].nodeType == 1) return true;
        }
        return false;
    }

    function _Ouverture_(id_name) {
        var var_name = document.getElementById(id_name);
        if (var_name.style.visibility != "hidden") {
            var_name.style.visibility = "hidden";
        } else {
            var_name.style.visibility = "visible";
        }
    }
    function Ouverture(id_name) {
        var var_name = document.getElementById(id_name);
        if (var_name.style.display != "none") {
            var_name.style.display = "none";
        } else {
            var_name.style.display = "block";
        }
    }

    // 2.9 Preload images
    function preload(images) {
        $(images).each(function(){
            $('<img/>')[0].src = this;
        });
    }

    preload(["https://i.imgur.com/B34tpwd.png", "https://i.imgur.com/Ljn8Eky.png"]); // Offres images

    // Blacklist 2.7
    var uie = 0;
    var o   = 0;
    function blacklistPre() {
        var bl   = $("#blacklist-pre");
        var text = $("#bltext");

        // Request
        if (uie !== 1) {
            GM_xmlhttpRequest({
                method: "GET",
                url: 'http://www.jeuxvideo.com/sso/blacklist.php',
                onload: function(response) {
                    if (response.status != 200) {
                        logConsole('[ERREUR] Requête échouée. Impossible de récupérer la blacklist. Code : '+ response.status);
                    } else {
                        /*bl.html(
                        $(getData).find("#blacklist.li").text()
                    );*/
                        var r = $(response.responseText).find("#blacklist").find("span");
                        var blSpan = '<center><table style="font-size: 13px;">';
                        r.each(function() {
                            o+=1;
                            blSpan += '<tr><td style="border:1px solid #ccc; padding: 3px;"><a target="_blank" href="http://www.jeuxvideo.com/profil/'+$(this).html().toLowerCase()+'?mode=infos">' + $(this).html() + '</a></td></tr>';
                        });
                        // Result
                        bl.html(blSpan + '</table></center>');
                        text.text("Ma blacklist ("+o+")");
                    }
                    uie = 1;
                }
            });
        }
    }

    function listeSujet() {
        if (document.getElementsByName('search_in_forum').length === 0) {
            return false;
        } else {return true;}
    }
    // TCHAT IFRAME
    $('body').append('<iframe id="premiumChat" style="position:fixed;bottom:0px;right:0px;visibility: hidden;" frameBorder="0" width="850" height="550" src="http://www.e-chat.co/widget/room/'+chatRoom+'?id='+chatRoom+'&lang=en&borderc=rgb(177,193,213)&headerh=30&headerc=rgb(220,220,220)&headertc=rgb(80,80,80)&type=f&userslistalign=Left&userslistwidth=25"></iframe>');
    // Modal pack stickers
    /* Ancien code (changé depuis 2.6)
    var a = document.createElement('div');
    a.id = 'modal';
    a.style = 'display:none;width:90%';
    a.innerHTML = '<center><h1><img width="100" height="100" src="http://image.noelshack.com/fichiers/2016/47/1479815240-jvcpremieum.png"> PACKS STICKERS PREMIUMS <img width="100" height="100" src="http://image.noelshack.com/fichiers/2016/47/1479815240-jvcpremieum.png"></h1></center>\
<h4>Les différents packs de stickers créés par des forumeurs<h4>\
<div id="packStickers"></div>\
<a href="http://www.jeuxvideo.com/forums/42-51-49221438-1-0-1-0-jvcpremium-comment-creer-un-pack-de-stickers.htm">Comment créer mon propre pack ?</a>\
';
    document.body.appendChild(a);
    */
    $('body').append('<div style="text-align:left !important; max-width:100% !important; width:85% !important" class="remodal" data-remodal-id="modal">\
<button data-remodal-action="close" class="remodal-close"></button>\
<center><h1><img class="premiumimg" width="100" height="100" src="http://image.noelshack.com/fichiers/2016/47/1479815240-jvcpremieum.png"> PACKS STICKERS PREMIUMS <img class="premiumimg" width="100" height="100" src="http://image.noelshack.com/fichiers/2016/47/1479815240-jvcpremieum.png"></h1></center>\
<h4>Les différents packs de stickers créés par des forumeurs<h4>\
<div id="packStickers"></div>\
<a href="http://www.jeuxvideo.com/forums/42-51-49221438-1-0-1-0-jvcpremium-comment-creer-un-pack-de-stickers.htm">Comment créer mon propre pack ?</a>\
</div>');
    var packModal = $('[data-remodal-id=modal]').remodal();
    // display stickers packs
    var packButtons;
    for (var uu = 0; uu < __PACK__.length; uu++)
    {
        if (__PACK__[uu].display === true) {
            packButtons = '<a packnb="'+uu+'" name="supprPack" class="btn btn-danger">Désinstaller ce pack de JVCpremium</a>';
        } else {
            packButtons = '<a packnb="'+uu+'" name="installPack" class="btn btn-default">Intégrer ce pack à JVCpremium</a>';
        }
         $('#packStickers').append('<p style="font-size:15px;font-family:Arial"><img src="'+__PACK__[uu].img+'" height="80" width="80"> <b>'+__PACK__[uu].nom + '</b> <i style="font-size:12px">' + __PACK__[uu].desc + '</i>  Contient '+ __PACK__[uu].liens.length + ' stickers. ' + packButtons+'</p>');
    }
    // appends
    $('.jv-editor-toolbar').append('<div class="btn-group">\
            <a title="JVCpremium" id="mainbtn" class="xXx btn btn-jv-editor-toolbar">★</a>\
        </div> <span style="font-size: 10px" id="jvcpload">JVCpremium charge...</span>'); // Bouton JVCpremium
    $('.jv-editor-toolbar').append('<div id="PREMIUM" style="display:none"></div>');

    if (loading) { if (!$.browser.mozilla) { $('#PREMIUM').append('<div id="loading"><h4 id="loading-text">JVCpremium '+version+' charge...</h4><br><img class="premiumimg" style="max-height:65px;max-width:65px" id="loading-image" src="'+loadingLogos[logoNb]+'"></div>'); } }

    // Append 2.8
    $("#PREMIUM").append('<div style="font-size:10px; margin-top: 10px; margin-right: 4px; float:right"><b><i>JVCpremium <span style="color:red;">' + version + "</span></i></b></div>");
    $('#PREMIUM').append('<div class="btn-group">\
                         <div data-clipboard-target="#message_topic" id="copierPr" class="btn btn-jv-editor-toolbar" title="Copier dans le presse papier"><b>C</b></div>\
                         <div id="dernierMsg" class="btn btn-jv-editor-toolbar" title="Récupérer votre dernier message posté sur les forums"><b>DM</b></div>\
                         <div id="saveMsg" class="btn btn-jv-editor-toolbar" title="Sauvegarder le message"><b>S</b></div>\
                         <!--<div id="chatBtn" class="btn btn-jv-editor-toolbar" title="Tchat premium"><b>TCHAT</b></div>-->\
                         </div>\
                         <input id="tags" placeholder="Chercher un topic" style="outline:none; width:35%;padding: 1px 2px;margin: 2px 0;box-sizing: border-box"> <a id="goTopic" class="btn btn-default" style="font-size:11px;padding: 3px 6px;border-radius: 0;"><span class="icon-search"></span></a>\
'+isDiamond+'\
<div id="tabs">\
  <ul>\
    <li><a href="#tabs-1">Stickers</a></li>\
    <li><a href="#tabs-2">Message premium</a></li>\
    <li><a href="#tabs-3">Personnaliser</a></li>\
    <li><a href="#tabs-4">Offres</a></li>\
    <li><a href="#tabs-5">Informations</a></li>\
  </ul>\
  <div id="tabs-1">\
    <h4>Stickers premium <span class="ui-icon ui-icon-circle-plus"></h4>\
    <hr>\
    <!--<a rel="modal:open" href="#modal"><img class="plusBtn premiumimg" width="28" height="28" src="http://simpleicon.com/wp-content/uploads/folder-plus-1.png"></a> Ajouter des packs de stickers<br>-->\
    <img id="openModalPack" class="plusBtn premiumimg" width="28" height="28" src="http://simpleicon.com/wp-content/uploads/folder-plus-1.png"> Ajouter des packs de stickers<img id="fsinstall" width="28" height="28" src="https://image.noelshack.com/fichiers/2017/18/1493943245-logo2.png" class="plusBtn premiumimg" title="Installer FastStickers (recommandé)" style="float:right"><br>\
    <input id="risibank" style="width:35%;padding: 1px 2px;margin: 2px 0;box-sizing: border-box" placeholder="Recherche risibank"> <a id="risibankBtn" class="btn btn-default" style="font-size:11px;padding: 3px 6px;border-radius: 0;"><span class="icon-search"></span></a>\
    <!--<input type="checkbox" id="stickersDrop"> Vous permet de déplacer les stickers pour les placer où vous voulez.-->\
    <h5>Risitas & Jesus : '+stickers.length+'</h5>\
    <div style="overflow:auto;height:80px;border: 1px solid #ccc;padding:5px" id="risi"></div>\
    <h5>Autres : '+stickers_autres.length+'</h5>\
    <div style="overflow:auto;height:'+cadre_AUTRES+';border: 1px solid #ccc;padding:5px" id="autres-st"></div>\
    <h5>Personnels : '+stickers_perso.length+'</h5>\
    <!--<img style="border:1px solid #cccccc;padding:2px;border-radius:2px;float:right" height=20 width=20 title="Ajouter un sticker personnel" src="http://findicons.com/files/icons/1389/g5_system/32/toolbar_customize.png" class="diamondBtnPlus premiumimg" id="stickerPersoOuverture">-->\
    <span style="margin:0;" class="jvcpremium-btn" id="stickerPersoOuverture">Ajouter un sticker personnel</span>\
    <div style="display:none; opacity: 0; text-align:center" id="stickerPersoDiv">\
      <hr>\
      <input id="stickerLien" placeholder="Lien du sticker. (exemple : http://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png)">\
      <a style="width:35%" class="jvcpremium-btn" id="sticker-perso">Ajouter le sticker</a>\
      <a style="width:55%" class="jvcpremium-btn-danger" id="sticker-perso-reset">Remettre à zéro la liste de stickers personnels</a>\
      <hr>\
    </div>\
    <p><i>Clic droit sur un sticker pour accéder au menu</i></p>\
    <div style="overflow:auto;height:'+cadre_PERSO+';border: 1px solid #ccc;padding:5px" id="stPerso"></div>\
  </div>\
  <div id="tabs-2">\
    <h4>Message premium <span class="ui-icon ui-icon-star"></h4>\
    <hr>\
    '+diamondPremium+'\
    <textarea name="postPremiumText" id="postPremiumText" class="textarea-class" placeholder="Votre message premium... (seuls les membres de jvc premium pourront le lire)"></textarea>\
    <button title="" id="premiumpost" type="button" class="btn-on-off " autocomplete="off"></button> Activer post premium <p style="float:right">Veuillez lire les <a style="color:blue" href="https://epmd.000webhostapp.com/regles.php">règles et conseils</a></p>\
  </div>\
<div id="tabs-3">\
    <h4>Personnaliser <span class="ui-icon ui-icon-wrench"></h4>\
    <hr>\
    <p>Tous vos paramètres seront enregistrés.</p>\
    <div id="accordion">\
        <h3 id="bl-act">Blacklist</h3>\
        <div>\
            <h4><a id="bltext" target="_blank" href="http://www.jeuxvideo.com/sso/blacklist.php">Ma blacklist</a></h4><hr>\
            <div id="blacklist-pre">Chargement...</div>\
        </div>\
        <h3>Luminosité globale</h3>\
        <div>\
            <input disabled id="changeLumi" type="range" min="50" max="150" value="'+luminosite+'" step="5"/><br/> Luminosité : <span id="range"><b>'+luminosite+'</b></span>%<br/>\
            <i>Option indisponible pour le moment. (v. <span style="color:red"> '+version+' </span>)</i>\
        </div>\
        <h3>Taille des stickers (noelshack)</h3>\
        <div>\
            <input id="tailleSt" type="range" min="0" max="4" value="'+tailleStickers+'" step="0.1"/><br/> Taille sticker (Multiplication des pixels) : <span id="rangeSt"><b>'+tailleStickers+'</b></span>\
            <p><i>0 = Stickers invisibles</i> ; <i>1 = Taille originale</i></p>\
        </div>\
        <h3>Bouton de preview & suppression de topic</h3>\
        <div>\
            '+previewData+'<br>\
            '+supprTopicData+'\
        </div>\
        <h3>Changer le theme de l\'extension premium</h3>\
        <div>\
            <input name="theme" id="darkoui" type="radio"> Theme dark<br>\
            <input name="theme" id="lightoui" type="radio"> Theme light<br></br>\
            <i>Cochez un theme, puis rafraîchissez la page.</i>\
        </div>\
        <h3>Changer le css du site</h3>\
        <div>\
            <textarea style="font-size:12px;font-family: Consolas, sans-serif;" id="cssChange" class="textarea-class" placeholder="Votre css ici..."></textarea>\
            <a id="cssChangeBtn" class="jvcpremium-btn" style="font-size:11.5px">Valider le CSS</a>\
        </div>\
        <h3>Console</h3>\
        <div>\
            <a id="raccConsole" style="width:100%;" class="jvcpremium-btn">'+consoleBtnData+' le raccourci « t » pour afficher la console</a>\
            <p style="padding:5px;">En activant cette option, vous pourrez afficher la console avec la touche de votre clavier « t ».</p>\
        </div>\
        <h3>Mise à jour</h3>\
        <div>\
            <a id="checkUpdate" style="width:100%;" class="jvcpremium-btn">'+updateBtnData+' la vérification des M.A.J</a>\
            <p style="padding:5px;">En désactivant cette option, les mises à jour ne seront plus vérifiées.</p>\
        </div>\
        <h3>Prévisualisation liens</h3>\
        <div>\
            <a style="width:100%;" class="jvcpremium-btn" id="prevLiens">'+prevBtnData+' la prévisualisation des liens sur les forums</a>\
            <img style="max-width: 500px; max-height: 500px;" src="https://i.imgur.com/DYQmbmk.png">\
        </div>\
    </div>\
    <hr>\
    <img class="premiumimg" id="consoleOpen" width=32 height=32 src="https://cdn0.iconfinder.com/data/icons/small-n-flat/24/678068-terminal-128.png" title="Ouvrir la console">\
</div>\
  <div style="overflow:hidden;" id="tabs-4">\
     <h4>Offres <span class="ui-icon ui-icon-pin-s"></span></h4>\
     <hr>\
     <p>Voici les différentes offres de JVCpremium. Cliquez sur une offre pour y souscrire.</p>\
     <br>\
     <center><div offre="classic" class="offre">\
       <h3>JVCpremium classic. 7,99€ / mois.</h3><br>\
       <p>L\'offre classic vous offre les fonctionnalités basiques de JVCpremium.</p>\
     </div></center>\
     <br>\
     <center><div offre="diamond" class="offre diamond">\
       <h3>JVCpremium diamond. 10,99€ / mois.</h3><br>\
       <p>L\'offre diamond vous offre de nouvelles fonctionnalités. Vous pourrez personnaliser votre message premium, ajouter des images & videos et citer des posts premium.</p>\
     </div></center>\
  </div>\
<div id="tabs-5">\
    <h4>Informations <span class="ui-icon ui-icon-info"></span></h4>\
    <hr>\
    <img class="premiumimg" id="preLogo" src="http://image.noelshack.com/fichiers/2016/47/1479815240-jvcpremieum.png" width="100" height="100">\
    <p>Pseudo : <b>'+userPseudo+'</b>. Offre : <b>'+offre+'</b>.</p>\
    <h4>Aide</h4>\
    <div id="accordion2">\
      <h3>Les nouvelles fonctions ci-dessus</h3>\
      <div>\
          <ul>\
              <li><b>C</b></li> Copie dans le presse papier le contenu de la boîte de texte.\
              <li><b>DM</b></li> Récupère votre dernier message posté dans les forums et le copie dans la boîte de texte (Seul le texte est copié).\
              <li><b>S</b></li> Sauvegarde le message et le restitue à chaque rafraîchissement de la page. (Enregistrez un message vide pour le réinitialiser)\
              <li><b>Chercher un topic</b></li> Vous permet de chercher rapidement le nom d\'un topic dans la liste des sujets.\
          </ul>\
      </div>\
      <h3>Informations sur la console</h3>\
      <div>\
          <p>La console permet d\'afficher les erreurs pouvant survenir dans le script clairement. Mais aussi le déroulement du script et certaines de vos actions.</p> <p>Il y a trois balises principales : [INFO], [ERREUR], [ATTENTION] [NOM_D\'UN_PLUGIN] qui permmettent de classer les informations.</p> <i>La console peut être affichée avec le raccourci clavier « t » (si vous avez activé l\'option)</i>\
      </div>\
      <h3>Plugins</h3>\
      <div>\
          <div id="plugin"><p id="non-installer"><i>Vous n\'avez aucun plugin installé.</i> <a style="color:blue" href="https://epmd.000webhostapp.com/plugins.php">Installer un plugin</a></p></div>\
      </div>\
    </div><br>\
    <p style="color:red">Attention ! JVCpremium ne fonctionne pas sur toutes les pages de JVC (exemple: les messages-privés)</p>\
    <p><a style="color:blue" href="https://openuserjs.org/scripts/ImThatGuy/JVCpremium/issues/Signalez_les_bugs_Contactez-moi_Proposez_des_id%C3%A9es_1">Signaler un bug / Me contacter</a> | <a style="color:blue" href="https://epmd.000webhostapp.com/">S\'enregistrer sur le site officiel</a></p>\
    <p>Version : '+version+'</p>\
  </div>\
</div>\
                         ');
    // Disable <a>
    //GM_addStyle("#mainbtn { pointer-events: none; cursor: default; }");
    $(document).ready(function() {
        $("#mainbtn").css({
            "pointer-events": "auto",
            "cursor": "pointer"
        });
        $("#jvcpload").remove();
        var loaded = true;
        // Main btn animation
        /*
        $("#mainbtn").parent().hover(function() {
            $(this).animate({width: '100px'}, 250);
            $(this).children().html('<span style="font-size:11px;">JVCpremium <span style="color:red;">'+version+'</span></span>');
        }, function() {
            $(this).animate({width: '28px'}, 250, function() { $(this).children().html('★'); });
        });
        */
    });
    // Loading CSS
    //var tabWidth  = document.getElementById('tabs').offsetWidth;
    //var tabHeight = document.getElementById('tabs').offsetHeight;
    if (loading) {
        if (!$.browser.mozilla) { // uniquement sur chrome

            //var tabWidth  = '608';
            //var tabHeight = '608';
            $('#loading').css({'height':($('#PREMIUM').height()+'px')});
            $('#loading').css({'width':($('#PREMIUM').width()+'px')});

            GM_addStyle('#loading {\
position:absolute;\
opacity: 0.8;\
background-color: #fff;\
z-index:99;\
}\
#loading-image {\
z-index:100;\
margin-left: auto;\
margin-right: auto;\
display: block;\
}\
#loading-text {text-align:center; color:#666666}');
        }
    }
    //$('.jv-editor-toolbar').append('<div style="overflow:auto;height:80px;border: 1px solid #ccc;padding:5px;border-radius:3px" id="risi"></div>');
    // Citer msg premium
    setTimeout(function() {
        if (diamond) {
            if (msgPremiumInPage) {
                var pseudosPremiumListe = [];
                var allPosts = document.getElementsByClassName('inner-head-content');

                for (var ll=0; ll<allPosts.length;ll++)
                {
                    if (allPosts[ll].getElementsByClassName('msgPremium').length > 0) {
                        $(allPosts[ll]).find('.bloc-options-msg').append('<span id="0" name="citerPremium" style="background:url(http://i.imgur.com/bSLh2Vw.png);background-size: 16px 16px;" class="picto-msg-quote" title="Citer premium"><span>Citer premium</span></span>');
                        var ksms = allPosts[ll].getElementsByClassName('bloc-pseudo-msg')[0].textContent.replace(/\s/g, '');
                        pseudosPremiumListe.push(ksms);
                    }
                }
                var citerBtn       = document.getElementsByName('citerPremium');
                //var textContentMsg = document.getElementsByClassName('txt-msg  text-enrichi-forum');
                var textContentMsg = document.getElementsByClassName('msgPremium');
                //alert(textContentMsg[10].textContent);
                //alert(citerBtn.length);
                //alert(textContentMsg.length);
                var pseudos = document.getElementsByClassName('bloc-header');
                var pseudosListe = [];

                for (var msp =0; msp < pseudos.length; msp++)
                {
                    var pseudos_cn = pseudos[msp].getElementsByTagName('a')[0];
                    var pseudos_final = pseudos_cn.textContent.replace(/\s/g, '');
                    pseudosListe.push(pseudos_final);
                }

                //alert(pseudosListe.length);
                //console.log(pseudosListe)
                for (var dd=0; dd < citerBtn.length; dd++)
                {
                    citerBtn[dd].id = dd;
                    citerBtn[dd].addEventListener('click', function() {
                        if (!premiumActive) { swal('Erreur', 'Vous devez activer le post premium avant de pouvoir citer un message premium.', 'error'); } else {
                            document.getElementById('message_topic').value += '<blockquote><p style="font-size:12px;color:#9e9e9e"><b>' + pseudosPremiumListe[this.id] + '</b> a écrit : ' + textContentMsg[this.id].innerHTML + '</p></blockquote>\n\n';
                            $('#message_topic').focus();
                        }
                    });
                }
            }
        }
    }, 1000);
    // CONSOLE
    $('head').append('<div id="consolePremium" style="font-size:'+console_FONTSIZE+';font-family:'+console_FONT+';padding: 5px;width:100%;background:'+console_BACKGROUND+';color: '+console_COLOR+';display: block;border: '+console_BORDER+';">\
                                   <i style="margin:10px;">JVCpremium version <span style="color:red">'+version+'</span> console.</i><br>\
                                   </div>');

    // OUVERTURE CONSOLE TOUCHE T
    if (consoleKey) {
        var overwriting = function(evt) {
            if (evt.keyCode === 84) {
                $('#consolePremium').dialog('open');
                return false;
            }
        };

        window.addEventListener('keydown', overwriting); // console ouverture touche t

        // Edition de message => remove event listener (bug version 2.1)
        var editBtn = document.getElementsByClassName('picto-msg-crayon');
        for (var ny = 0; ny < editBtn.length; ny++)
        {
            editBtn[ny].addEventListener('click', function() {
                setTimeout(function() {
                    var textEdit = document.getElementById('text_commentaire');
                    console.log(textEdit);
                    try {
                        textEdit.addEventListener('focus', function() {
                            window.removeEventListener('keydown', overwriting);
                        });
                    } catch (err) {}
                    try {
                        textEdit.addEventListener('focusout', function() {
                            window.addEventListener('keydown', overwriting);
                        });
                    } catch (err) {}
                }, 600);
            });
        }

        var textboxs = document.querySelectorAll('textarea, input');
        for (var jsi = 0; jsi < textboxs.length; jsi++)
        {
            textboxs[jsi].addEventListener('focus', function() {
                window.removeEventListener('keydown', overwriting);
            });
        }
        for (var lmk = 0; lmk < textboxs.length; lmk++)
        {
            textboxs[lmk].addEventListener('focusout', function() {
                window.addEventListener('keydown', overwriting);
            });
        }
    }

    // DERNIER STICKER APPEND
    if (dernierSticker !== undefined) {
        $('#risi').append('<img title="Dernier sticker utilisé" class="sticker-dernier" style="border:1px solid #6b6b6b;opacity:0.7;max-height:56px;max-width:56px" src="'+dernierSticker+'">');
    }
    // fonction append realtime
    function appendSticker(b) {
        var a = document.getElementsByClassName('sticker-dernier')[0];
        a.src = b;
    }

    // PREMIERS APPEND CONSOLE
    logConsole('Pseudo : ' + userPseudo);
    if (listeSujet() !== true) {
        logConsole('Topic : '+topicTitle);
    }
    logConsole('<br>'); // double saut de ligne (avec la balise <p>)
    logConsole("[INFO] CSS chargé : " + userCSS);

    // TrackBar luminosité

    // au lancement du script
    /*
    if (!$.browser.mozilla) {
        GM_addStyle('body {filter: brightness('+luminosite+'%);}'); // Ne marche pas sur firefox
    } else {
        logConsole("[INFO] Vous utilisez Mozilla Firefox. La fonction luminosité a été retirée.");
    }
    Enlevé à la 3.1.1 */
    // message sauvegardé
    if (messageSauve) {
        document.getElementById('message_topic').value = messageSauve;
        logConsole('[INFO] Message restitué : ' + messageSauve);
    }
    // FONCTIONS //

    var pseudosToCheck = [];

    logConsole("[INFO] Envoi d'une requête à epmd.000webhostapp.com pour récupérer la liste des pseudos premium...");
    var PSEUDOS = GM_xmlhttpRequest({
        method: "GET",
        url: 'https://epmd.000webhostapp.com/liste.php',
        onload: function(response) {
            if (response.status != 200) {
                logConsole('[ERREUR] Requête échouée. Impossible de vérifier les pseudos premiums. Code : '+ response.status);
            } else {
                var getData = document.createElement('div');
                getData.innerHTML = response.responseText;
                getData.style.display = "none";
                var a = getData.querySelectorAll('.pseudo');

                for (var i=0; i < a.length; i++)
                {
                    pseudosToCheck.push(a[i].innerHTML);
                }
                logConsole("[INFO] Requête réussi. " + response.responseHeaders);
            }
        }
    });

    function checkPseudosConsole() {
        for (var dbg =0; dbg < pseudosToCheck.length; dbg++)
        {
            if ( pseudosToCheck[dbg].toLowerCase() == userPseudo.toLowerCase() ) {
                return true;
            }
        }
    }
    // APPEND CONSOLE REGISTER
    setTimeout(function() {
        if ( checkPseudosConsole() ) {
            logConsole('[INFO] Vous êtes enregistré à JVCpremium !');
        } else {
            logConsole('[ATTENTION] Vous n\'êtes pas enregistré à JVCpremium.');
        }
    }, 3000); // Le temps de la requête


    function checkPseudos() { // Fonction qui check les pseudos utilisant JVCpremium
        /*
        var pseudosToCheck = [
            'Airflare',
            'ImYhatGuy',
            'Test'
        ];
        */

        logConsole('[INFO] Vérification des pseudos premiums...');
        var pseudos = document.getElementsByClassName('bloc-header');
        var j;
        for (var i =0; i < pseudos.length; i++)
        {
            var g = pseudos[i].getElementsByTagName('a')[0];
            var n = g.textContent.replace(/\s/g, '');

            for (var o =0; o < pseudosToCheck.length; o++)
            {
                if (n.toLowerCase() == pseudosToCheck[o].toLowerCase()) {
                    g.style.color = '#3699ff';
                    g.title = n + ' est un membre premium';
                    g.className += ' membrePremium';
                } else {
                }
            }
        }

        // Console log
        var j = false;
        for (var p =0; p < pseudos.length; p++)
        {
            var g = pseudos[p].getElementsByTagName('a')[0];
            var n = g.textContent.replace(/\s/g, '');
            if ( g.style.color ==  'rgb(54, 153, 255)') {
                logConsole('[INFO] ' +n + ' est un membre premium.');
                j = true;
            }
        }
        if ( j === false) {
            logConsole('[INFO] Aucun pseudo premium sur cette page.');
        }

    }

    setTimeout(function() {
        if (listeSujet() === false)
        {
            checkPseudos();
        }
    }, 2000); // 2 sec avant de check les pseudos pour laisser le temps à la requête

    function dernierMessage() {
        logConsole("[INFO] Envoi d'une requête (http://www.jeuxvideo.com/profil/"+userPseudo.toLowerCase()+"?mode=historique_forum&v=0) pour récupérer le dernier message.");
        GM_xmlhttpRequest({
            method: "GET",
            url: 'http://www.jeuxvideo.com/profil/'+userPseudo.toLowerCase()+'?mode=historique_forum&v=0',
            onload: function (response) {
                if (response.status != 200) {
                    logConsole('[ERREUR] Requête échouée. Impossible de récupérer le dernier message. Code : ' + response.status);
                } else {
                    logConsole('[INFO] Requête réussi. ' + response.responseHeaders);
                    var getData = document.createElement('div');
                    getData.innerHTML = response.responseText;
                    getData.style.display = "none";
                    var dernierMessagePoste = getData.querySelectorAll('.txt-msg, .text-enrichi-forum');
                    var gdu = (dernierMessagePoste[0].textContent || dernierMessagePoste[0].innerText);
                    document.getElementById('message_topic').value += gdu;
                }
            }
        });
    }

    function postPremium() {
        logConsole("[INFO] Mode message premium activé.");
        premiumActive = true;
        document.getElementById('message_topic').id = 'autre';
        document.getElementById('autre').name = 'autre';
        document.getElementById('postPremiumText').id = 'message_topic';
        document.getElementById('message_topic').name = 'message_topic';
        // Button style (ancien code)
        /*GM_addStyle('\
                    .btn-poster-msg {background:yellow;color:black;border: 1px black solid}\
                    .btn-poster-msg:hover {background:white;}\
                    ');*/
        //
    }
    function postPremiumBack() {
        logConsole("[INFO] Mode message premium désactivé.");
        premiumActive = false;
        document.getElementById('message_topic').id = 'postPremiumText';
        document.getElementById('postPremiumText').name = 'postPremiumText';
        document.getElementById('autre').id = 'message_topic';
        document.getElementById('message_topic').name = 'message_topic';
        // Button style (ancien code)
        /*GM_addStyle('.btn-poster-msg {background:#FD612C;border: none; color:white}\
                     .btn-poster-msg:hover {background:#C85025}\
                    ');*/
        //
    }
    /*
    function minimize (element, open) {
        if ($(element).html() == "-") {
            $(element).html("+");
        }
        else {
            $(element).html("-");
        }
        $(open).slideToggle();
    } Retirée depuis la 2.1
    */

    function installPack(packId) {
        __PACK__[packId].display = true;
        GM_setValue(__PACK__[packId].nom , __PACK__[packId].display);
        location.reload();
    }
    function supprPack(packId) {
        __PACK__[packId].display = false;
        GM_setValue(__PACK__[packId].nom , __PACK__[packId].display);
        location.reload();
    }

    /* Ancien script
    function decodePremiumMsg() {
        var allMsg = document.querySelectorAll('.txt-msg.text-enrichi-forum :not(.blockquote-jv)'); // select tous les msg sauf les blockquotes
        for(var i = 0; i < allMsg.length; i++)
        {
            if (allMsg[i].innerHTML.indexOf('img-stickers') >= 0) {
                try {
                    var msf = allMsg[i].getElementsByTagName('img');
                    for(var b = 0; b < msf.length; b++)
                    {
                        if (msf[b].className == 'img-stickers') {
                            var TT = msf[b].src;
                            TT = TT.split('//')[1];
                            TT = TT.split('/')[1];
                            var result = atob(TT);
                            if (result == '±ç+z') {
                                result = '<i style="color:red">Le code vient d\'un autre script.</i>';
                                logConsole("[INFO] Code provenant d'un autre script détecté.");
                            }
                            if (diamond) {
                                allMsg[i].innerHTML += '<div class="msgPremium" style="color:#0099ff"><b>JVCpremium '+version+' : </b>' + result + '</div>';
                            } else {
                                allMsg[i].innerHTML += '<div class="msgPremium" style="color:red;"><b>JVCpremium '+version+' : </b>' + result + '</div>';
                            }
                            logConsole("[INFO] Message premium : " + result);
                            msgPremiumInPage = true;
                        }
                    }
                } catch(err) {
                    //logConsole('[INFO] ' + allMsg[i].innerText + ' n\'est pas un message premium.');
                }
            }
        }
    }
    decodePremiumMsg();
    */
    var MAX_REQUESTS = 0;
    function decodePremiumMsg() {
            $(".txt-msg:not(.blockquote-jv) :contains('IDP#')").each(function() {
                if (MAX_REQUESTS <= 99) {
                    //console.log(MAX_REQUESTS);
                    MAX_REQUESTS += 1;
                    var msgpremium = $(this);
                    msgpremium.html(msgpremium.html()+'<div class="divremove"><br><img height=40 width=40 src="http://gifimage.net/wp-content/uploads/2017/08/loading-gif-transparent-4.gif"></br><br></div>');
                    var idPREMIUM = msgpremium.text().split("#")[1];
                    //alert(idPREMIUM);
                    GM_xmlhttpRequest({
                        method: "GET",
                        url: 'https://epmd.000webhostapp.com/script_add/get.php?idmsg='+idPREMIUM,
                        onload: function(response) {
                            if (response.status != 200) {
                                logConsole('[ERREUR] Requête échouée. Impossible de récupérer ce message premium. Code : '+ response.status);
                            } else {
                                // Message premium récupéré.
                                $(".divremove").remove();
                                var result = response.responseText;
                                if (diamond) {
                                    msgpremium.html(msgpremium.html()+'<hr><div class="msgPremium" style="color:#0099ff;">' + $(result).text() + '</div>');
                                } else {
                                    msgpremium.html(msgpremium.html()+'<hr><div class="msgPremium" style="color:red;">' + $(result).text() + '</div>');
                                }
                                logConsole("[INFO] Message premium : " + result);
                                msgPremiumInPage = true;
                            }
                        }
                    });
                } else {
                    //alert();
                    logConsole("[ATTENTION] MESSAGES PREMIUMS : Nombre de requêtes excédées.");
                    return false;
                }
            });
    }
    decodePremiumMsg();

    GM_addStyle('.msgPremium { overflow: hidden; word-wrap: break-word; }');
    //GM_addStyle('.msgPremium { padding:5px;border:1px solid #1b1b1b;color:#1b1b1b;border-radius:5px; }');
    //GM_addStyle('.msgPremium:hover { border-radius:20px;background-color:#ededed;transition:border-radius 1s; }');

    /*
    function noelshackToDirect(a) {
        var b = /^.*\/\/www.noelshack.com\/([0-9]+)-([0-9]+)-(.*)$/g, c = b.exec(a);
        return null === c ? a : "http://image.noelshack.com/fichiers/" + c[1] + "/" + c[2] + "/" + c[3];
    }
    $(".img-shack").each(function (a) {
        var b = new RegExp("^.+.gif$");
        b.test($(this).attr("alt")) && $(this).attr("src", noelshackToDirect($(this).attr("alt"))); // jshint ignore:line
    }); // Lis les gifs min noelshack
    */
    // Noelshack direct 2.7
    var imgs = $(".img-shack");
    imgs.each(function() {
        var calt = $(this).attr("alt");
        if (calt.indexOf("fichiers") !== -1) {
            $(this).attr("src", calt);
        }
    });

    // Ajout sticker rapide topic 2.8
    /*
    var addShackIco = "";
    imgs.each(function() {
        $(this).parent().append('<img class="addShackIco" style="position:relative;right:20px;top:-30px" height=16 width=16 src="https://cdn2.iconfinder.com/data/icons/picol-vector/32/plus-128.png">');
    });

    var yd;
    var ig;
    $(".addShackIco").hover(function() {
        yd = $(this).parent().attr("href");
        ig = $(this).parent().attr("target");
        $(this).parent().attr("href", "#");
        $(this).parent().attr("target", "");
    }, function() {
        $(this).parent().attr("href", yd);
        $(this).parent().attr("target", ig);
    });
    */

    // LISTENERS //
    // Bl
    $("#bl-act").click(function() {
        blacklistPre();
    });
    // Fs Install
    $("#fsinstall").click(function() {
        window.location.href = "https://openuserjs.org/install/ImThatGuy/FastStickers.user.js";
    });
    //
    document.getElementById('changeLumi').addEventListener('input', function () {
        document.getElementById("range").innerHTML=this.value;
        GM_addStyle('body {filter: brightness('+this.value+'%);}');
        GM_setValue('luminosite', this.value);
    }); // Luminosité
    document.getElementById('tailleSt').addEventListener('input', function () {
        document.getElementById("rangeSt").innerHTML=this.value;
        GM_setValue('tailleStickers', this.value);
    }); // Taille stickers

    document.getElementById('mainbtn').addEventListener('click', function() {Ouverture('PREMIUM');});
    document.getElementById('copierPr').addEventListener('click', function() {
        new Clipboard('#copierPr');
        logConsole(
            '[INFO] Message copié ! '+ byteLength(document.getElementById('message_topic').value) + ' bytes.'
        );
    });
    document.getElementById('goTopic').addEventListener('click', function() {
        var k = document.getElementById('tags');
        if (topicLink[k.value] !== undefined) {
            window.location.href = topicLink[k.value];
        }
    });
    document.getElementById('cssChangeBtn').addEventListener('click', function() {
        GM_setValue('css', document.getElementById('cssChange').value);
        location.reload();
    });
    //reset stickers
    document.getElementById('sticker-perso-reset').addEventListener('click', function() {
        swal({
            title: "Êtes-vous sûr ?",
            text: "Êtes-vous sûr de vouloir supprimer tous vos stickers personnels ? Vous ne pourrez plus les récupérer.",
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "Supprimer"
        },  function() {
            GM_setValue('stickersPerso', '[]');
            swal('Supprimé !', 'Tous vos stickers ont été supprimés !', 'success');
            $('.stickerPerso-pre').remove();
            //location.reload();
        });
        /*
        if ( confirm("Êtes-vous sûr de vouloir supprimer tous vos stickers personnels ?") ) {
            GM_setValue('stickersPerso', '[]');location.reload();
        }
        */
    });
    // dernier msg posté
    document.getElementById('dernierMsg').addEventListener('click', dernierMessage);
    // personnaliser le message premium
    $('#persoPremium').click(function() {
        if (diamond) {
            swal({
                title: "JVCpremium diamond",
                text: 'Personnalisez votre message :',
                type: 'input',
                showCancelButton: true,
                closeOnConfirm: false,
                animation: "slide-from-top"
            }, function(a) {
                if (a !== false) {
                    if (a==="") { swal("Erreur",
                         "Votre message est vide.",
                         "error"); } else {
                        msgPremium = a;
                        swal("Enregistré !",
                             "Votre message a été enregistré.",
                             "success");
                    }
                }
            });
        }
    });
    // Boutons rouges 2.9
    setTimeout(function() {
        if ( $("#checkUpdate").text() == "Désactiver la vérification des M.A.J") {
            $("#checkUpdate").removeClass('jvcpremium-btn').addClass('jvcpremium-btn-danger');
        }
        if ( $("#raccConsole").text() == "Désactiver le raccourci « t » pour afficher la console" ) {
            $("#raccConsole").removeClass('jvcpremium-btn').addClass('jvcpremium-btn-danger');
        }
        if ( $("#prevLiens").text() == "Désactiver la prévisualisation des liens sur les forums" ) {
            $("#prevLiens").removeClass('jvcpremium-btn').addClass('jvcpremium-btn-danger');
        }
    }, 10);

    // Activer / Désactiver prévisu liens 3.1.0
    $("#prevLiens").click(function() {
        if (previewOption) {
            GM_setValue("previsu", false);
        } else {
            GM_setValue("previsu", true);
        }
        location.reload();
    });

    // post premium
    /*
    $('#premiumpost').change(function(){
        if ($(this).is(':checked')) {
            postPremium();
        } else {
            postPremiumBack();
        }
    });
    */
    $('#premiumpost').click(function(){

        if ( $(this).hasClass('active') ) {
            $(this).removeClass('active');
            postPremiumBack(); // desactive post premium
        } else {
            $(this).addClass('active');
            postPremium(); // active post premium
        }
    });

    // sticker perso ouverture
    $('#stickerPersoOuverture').click(function() {
        Ouverture('stickerPersoDiv');

        if ( $('#stickerPersoDiv').css('opacity') == 1 ) {
            $('#stickerPersoDiv').animate({
                opacity : 0
            }, 400);
        } else {
            $('#stickerPersoDiv').animate({
                opacity : 1
            }, 400);
        }

    });

    // Post premium
    /* Ancien script
    document.getElementsByClassName('btn btn-poster-msg datalayer-push')[0].addEventListener('click', function () {
        //if ($('#premiumpost').is(':checked')) {
        if ( $('#premiumpost').hasClass('active') ) {
            //document.getElementById('message_topic').value = "[''Seuls les utilisateurs de JVCpremium peuvent visionner ce message'']";
            var preMsgPost = document.getElementById('message_topic').value;
            if (preMsgPost) {
                if (isHTML(preMsgPost))
                {
                    if (!diamond)
                    {
                        logConsole("[ATTENTION] Le message contenait du html et n'a pas été envoyé en premium.");
                        swal('Erreur', 'Vous devez être membre JVCpremium diamond pour pouvoir utiliser du html (poster une image ou une vidéo par exemple).', 'error');
                        return false;
                    }
                }
                var encodedString = btoa(preMsgPost);
                var msg;
                if (diamond) {
                    //msg = prompt('JVCpremium diamond. Personnaliser le message');
                    msg = msgPremium;

                } else {
                    msg = "[''Seuls les utilisateurs de JVCpremium peuvent voir ce message'']";
                }
                document.getElementById('message_topic').value = '[[sticker:'+encodedString+']]' + msg;
            }
        } else {
            // nothing
        }
    });
    */
    document.getElementsByClassName('btn btn-poster-msg datalayer-push')[0].addEventListener('click', function () {
        //if ($('#premiumpost').is(':checked')) {
        if ( $('#premiumpost').hasClass('active') ) {
            //document.getElementById('message_topic').value = "[''Seuls les utilisateurs de JVCpremium peuvent visionner ce message'']";
            var preMsgPost = document.getElementById('message_topic').value;
            if (preMsgPost) {
                if (isHTML(preMsgPost))
                {
                    if (!diamond)
                    {
                        logConsole("[ATTENTION] Le message contenait du html et n'a pas été envoyé en premium.");
                        swal('Erreur', 'Vous devez être membre JVCpremium diamond pour pouvoir utiliser du html (poster une image ou une vidéo par exemple).', 'error');
                        return false;
                    }
                }
                var msg;
                var idPREMIUM = Math.floor((Math.random() * 99999) + 11111);
                if (diamond) {
                    //msg = prompt('JVCpremium diamond. Personnaliser le message');
                    msg = msgPremium;

                } else {
                    msg = "[''Seuls les utilisateurs de JVCpremium peuvent voir ce message'']";
                }
                document.getElementById('message_topic').value = msg + " ('''IDP#"+idPREMIUM+"#''')";
                GM_xmlhttpRequest({
                    method: "GET",
                    url: 'https://epmd.000webhostapp.com/script_add/add.php?idmsg='+idPREMIUM+'&msg='+encodeURIComponent(preMsgPost)+'&pseudo='+userPseudo,
                    onload: function(response) {
                        if (response.status != 200) {
                            logConsole('[ERREUR] Requête échouée. Impossible de poster ce message premium. Code : '+ response.status);
                        } else {
                            // Message premium posté.
                        }
                    }
                });
            }
        } else {
            // nothing
        }
    });
    // tchat
    /* enlevé en 2.3
    document.getElementById('chatBtn').addEventListener('click', function() {
        _Ouverture_('premiumChat');
    });
    */
    // Listener for packs
    try {
        var installPackListen = document.getElementsByName('installPack');
        for (var op = 0; op < installPackListen.length; op++)
        {
            installPackListen[op].addEventListener('click', function() {installPack(this.getAttribute('packNb'));});
        }
        var deletePackListen = document.getElementsByName('supprPack');
        for (var po = 0; po < deletePackListen.length; po++)
        {
            deletePackListen[po].addEventListener('click', function() {supprPack(this.getAttribute('packNb'));});
        }
    } catch (err) {
        logConsole('[ERREUR] Packs non-installés.');
    }
    /*
    document.getElementById('couleurhighbtn').addEventListener('click', function() {
        GM_setValue('highlightColor', document.getElementById('couleurhigh').value);
        document.getElementById('texthigh').style.display = 'block';
    }); Enlevé 3.1.0 */

    document.getElementById('previewbtn').addEventListener('click', function() {
        if (preview) {
            GM_setValue('preview', false);
            GM_setValue('previewdata', '<a style="width:100%" class="jvcpremium-btn" id="previewbtn">Activer le bouton de preview des topics</a>');
        } else {
            GM_setValue('preview', true);
            GM_setValue('previewdata', '<a style="width:100%" class="jvcpremium-btn-danger" id="previewbtn">Désactiver le bouton de preview des topics</a>');
        }
        location.reload();
    });

    // Suppr topic
    document.getElementById('supprBtn').addEventListener('click', function() {
        if (supprTopic) {
            GM_setValue('supprTopic', false);
            GM_setValue('supprTopicData', '<a style="width:100%" class="jvcpremium-btn" id="supprBtn">Activer le bouton de suppresion des topics</a>');
        } else {
            GM_setValue('supprTopic', true);
            GM_setValue('supprTopicData', '<a style="width:100%" class="jvcpremium-btn-danger" id="supprBtn">Désactiver le bouton de suppresion des topics</a>');
        }
        location.reload();
    });

    $('#openModalPack').click(function() { packModal.open(); });
/* Ancien code
    document.getElementById('diamond').addEventListener('click', function() {
        if (!diamond) {
            GM_setValue('diamond', true);
        } else {
            GM_setValue('diamond', false);
        }
        location.reload();
    });
*/

    document.getElementById('consoleOpen').addEventListener('click', function() {
        $('#consolePremium').dialog('open');
        return false;
    });


    var offres = document.getElementsByClassName('offre');
    for (var pb = 0; pb < offres.length; pb++) {
        offres[pb].addEventListener('click', function(){
            if (this.getAttribute('offre') == 'diamond') {
                GM_setValue('diamond', true);
            } else {
                GM_setValue('diamond', false);
            }
            location.reload();
        });
    } // A changer si des nouvelles offres arrivent

    if (diamond) {
        document.getElementById('diamondImage').addEventListener('click', function() {
            if (!premiumActive) { swal('Erreur', 'Vous devez activer le post premium avant de pouvoir insérer une photo', 'error'); } else {
                swal({
                    title: "Insérer une image",
                    text: "Lien direct de l'image",
                    type: 'input',
                    showCancelButton: true,
                    closeOnConfirm: true,
                    animation: "slide-from-top"
                }, function(a) {
                    if (a !== false) {
                        document.getElementById('message_topic').value += '<br><img style="max-height:500px; max-width:500px;" src="'+a+'"><br/>';
                    }
                });
                /*
                var mfd = prompt('Lien de l\'image');
                if (mfd != null) {
                    document.getElementById('message_topic').value += '<img src="'+mfd+'">';
                }
                */
            }
        });
        document.getElementById('diamondVideo').addEventListener('click', function() {
            if (!premiumActive) { swal('Erreur', 'Vous devez activer le post premium avant de pouvoir insérer une vidéo', 'error'); } else {
                swal({
                    title: "Insérer une vidéo",
                    text: "Lien direct de la vidéo",
                    type: 'input',
                    showCancelButton: true,
                    closeOnConfirm: true,
                    animation: "slide-from-top"
                }, function(a) {
                    if (a !== false) {
                        document.getElementById('message_topic').value += '<br><video style="width: 95%!important; height: auto!important" controls src="'+a+'"></video></br>';
                    }
                });
            }
        });
        document.getElementById('diamondAudio').addEventListener('click', function() {
            if (!premiumActive) { swal('Erreur', 'Vous devez activer le post premium avant de pouvoir insérer un audio', 'error'); } else {
                swal({
                    title: "Insérer de l'audio",
                    text: "Lien direct de l'audio",
                    type: 'input',
                    showCancelButton: true,
                    closeOnConfirm: true,
                    animation: "slide-from-top"
                }, function(a) {
                    if (a !== false) {
                        document.getElementById('message_topic').value += '<br><audio controls><source src="'+a+'"></audio></br>';
                    }
                });
            }
        });

    }

    var risibank = document.getElementById('risibank');
    document.getElementById('risibankBtn').addEventListener('click', function() {
        //window.location.href = 'http://risibank.fr/#' + this.value;
        if (risibank.value) {
            var win = window.open('http://risibank.fr/#'+risibank.value, '_blank');
            win.focus();
        }
    });

    document.getElementById('saveMsg').addEventListener('click', function() {
        GM_setValue('saveMsg', document.getElementById('message_topic').value); // sauvegarde le dernier message
        //alert('Message sauvegardé !');
        logConsole('[INFO] Message sauvegardé : ' + document.getElementById('message_topic').value);
    });
    // raccourci console activable/désactivable
    $('#raccConsole').click(function() {
        if ( consoleBtnData == 'Activer' ) {
            GM_setValue('consoleKey', true);
            GM_setValue('consoleBtnData', 'Désactiver');
            logConsole('[INFO] Raccourci clavier console activé');
        } else {
            GM_setValue('consoleKey', false);
            GM_setValue('consoleBtnData', 'Activer');
            logConsole('[INFO] Raccourci clavier console désactivé');
        }
        location.reload();
    });
    // check updates listener
    $('#checkUpdate').click(function() {
        if ( updateBtnData == 'Activer' ) {
            GM_setValue('checkUpdate', true);
            GM_setValue('updateBtnData', 'Désactiver');
            logConsole('[INFO] Vérification des M.A.J activé');
        } else {
            GM_setValue('checkUpdate', false);
            GM_setValue('updateBtnData', 'Activer');
            logConsole('[INFO] Vérification des M.A.J désactivé');
        }
        location.reload();
    });
/*
    if (diamond) { document.getElementById('astuce').title = '<i>Assurez-vous d\'avoir coché la case ci-dessus avant d\'insérer une vidéo ou image à votre message premium. Postez votre message en utilisant le bouton poster d\'origine.</i>\
<i style="color:blue">Astuce : Servez-vous de l\'onglet stickers du script pour ajouter rapidement un sticker à votre post premium. (Après avoir coché la case)</i>';
                 } else {
                     document.getElementById('astuce').title = '<i>Assurez-vous d\'avoir coché la case ci-dessus avant de poster votre message premium (en utilisant le bouton poster d\'origine).</i>';
                 }
                 */
    ////////////
    //effects
    /*
    $( '.topic-title' ).click(function() {
        $(this).effect( "highlight", {color: highlightColor});
    });
    Enlevé 3.1.0 */
/*
    $( function() {
        $( "#PREMIUM" ).accordion();
    });
*/
    if (firstTime === true)
    {
        //GM_addStyle('.img-tuto { border: 1px solid gray }');
        //$('body').append('<div id="dialog"><p>Merci '+userPseudo+' d\'avoir acheté JVCpremium !</p></div>');
        $('body').append('<div style="max-width:100% !important;width:70%" class="remodal" data-remodal-id="modalfirst">\
<button data-remodal-action="close" class="remodal-close"></button>\
<h1>Merci '+userPseudo+' de vous être abonné JVCpremium !</h1>\
<h4><a href="https://openuserjs.org/scripts/ImThatGuy/JVCpremium/issues/Signalez_les_bugs_Contactez-moi_Proposez_des_id%C3%A9es_1">Une question à poser ?</a></h4>\
</div>');
        var modalfirst = $('[data-remodal-id=modalfirst]').remodal();
        $(document).ready(function() {
            //$( "#dialog" ).dialog();
            modalfirst.open();
        });
    }
    // SORTABLE
    /*
    $( function() {
        $( 'div' ).sortable();
        $( 'div' ).disableSelection();
    } );
    */
    // SORTABLE
    $( function() {
        //$( "#fsinstall" ).tooltip();
        //$( "#mainbtn" ).tooltip();
        //$( "#Edition" ).tooltip();
        if (diamond) { $( "#premiumpost" ).tooltip({
            content: 'Assurez-vous d\'avoir coché cette case avant d\'insérer une vidéo ou image à votre message premium. Postez votre message en utilisant le bouton poster d\'origine.<br><br>\
<b>Astuce : Servez-vous de l\'onglet stickers du script pour ajouter rapidement un sticker à votre post premium. (Après avoir coché la case)</b>',
            tooltipClass: 'astuceTooltip'
        }); } else { $( "#premiumpost" ).tooltip({
            content: 'Assurez-vous d\'avoir coché cette case avant de poster votre message premium (en utilisant le bouton poster d\'origine).',
            tooltipClass: 'astuceTooltip'
        });
                   }
        //$('#persoPremium').tooltip();
        //$('#toolbarInfo').tooltip();
        //$('#stickerPersoOuverture').tooltip();
        // Version 3.0.1
        $('#fsinstall, #mainbtn, #Edition, #persoPremium, #toolbarInfo, #stickerPersoOuverture, .premiumimg').qtip({
            style: {
                classes: 'qtip-light'
                //classes: 'qtip-tipsy'
            },
            position: {
                my: 'top left',
                at: 'bottom center'
            }
        });
    }); // tooltip main btn & edition
    // diamond & classic tooltip css
    if (diamond) { GM_addStyle('.astuceTooltip { max-width: 600px; }'); } else { GM_addStyle('.astuceTooltip { max-width: 400px; }'); }

    $( function() {
        $( "#consolePremium" ).dialog({
            width: 800,
            height: 500,
            title: "JVC PREMIUM CONSOLE",
            show: { effect: "drop", duration: 200 },
            autoOpen: false,
            resizable: false
        });
    }); // Console premium

    $( function() {
        // accordion paramètres
        $( "#accordion" ).accordion(
            {
                heightStyle: "content",
                collapsible: true,
                active: false
            }
        );
        // accordion informations
        $( "#accordion2" ).accordion(
            {
                heightStyle: "content",
                collapsible: true,
                active: false
            }
        );
    });

    GM_addStyle(".ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, html .ui-button.ui-state-disabled:hover, html .ui-button.ui-state-disabled:active {\
                border: 1px solid #ddd;\
                }\
.ui-widget-header { background: transparent; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }\
.ui-tabs .ui-tabs-nav { background-color: #f4f4f4; }\
.ui-tabs-nav .ui-state-default { background: #fff; border: 1px solid #ddd; margin-right: 5px!important; }\
.ui-tabs-nav .ui-state-hover {  }\
.ui-tabs-nav .ui-state-active { background: #3fa4fd; border-color: transparent; }\
.ui-tabs-nav .ui-state-default a { color: #666; transition: color 0.2s; }\
.ui-tabs-nav .ui-state-hover a { color: #4d7ab3; }\
.ui-tabs-nav .ui-state-active a { color: #fff; }"); // Amélioration design tabs 3.1.0

        GM_addStyle(".ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover { background-color: #3fa4fd; }"); // Amélioration design accordion 3.1.0

    setTimeout(function() {
        $(function() {
            //$( ".membrePremium" ).tooltip();
            $( ".membrePremium" ).qtip({
                style: {
                    classes: 'qtip-blue'
                    //classes: 'qtip-tipsy'
                },
                position: {
                    my: 'top left',
                    at: 'bottom center'
                }
            });
        });
    }, 2000);

    $('#darkoui').change(function() {
        GM_setValue('darkjvc', true);
    });
    $('#lightoui').change(function() {
        GM_setValue('darkjvc', false);
    }); // themes

    $( function() {
        $( "#tabs" ).tabs();
    });
    $( function() {
        $( ".checkboxradio" ).checkboxradio();
    });
    $( function() {
        var topicListe = [];
        if (listeSujet() !== true)
        {
            GM_xmlhttpRequest({
                method: "GET",
                url: 'http://www.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm',
                onload: function (response) {
                    var getData = document.createElement('div');
                    getData.innerHTML = response.responseText;
                    getData.style.display = "none";
                    var lyi = getData.getElementsByClassName('lien-jv topic-title');
                    for (var i =0; i < lyi.length; i++) {
                        topicListe.push(lyi[i].title);
                        topicLink[lyi[i].title] = lyi[i].href;
                    }
                }
            });
        }
        else
        {
            var c = document.getElementsByClassName('lien-jv topic-title');
            for (var i =0; i < c.length; i++) {
                topicListe.push(c[i].title);
                topicLink[c[i].title] = c[i].href;
            }
        }
        $( "#tags" ).autocomplete({
            source: topicListe
        });
    } );
    ////
    // Display stickers
    for (var i = 0; i < stickers.length; i++) {
        $('#risi').append('<img code="'+i+'" class="sticker-pre" style="opacity:0.7;max-height:56px;max-width:56px" src="'+stickers[i]+'">');
    }
    for (var p = 0; p < stickers_autres.length; p++) {
        $('#autres-st').append('<img code="'+p+'" class="stickerAutres-pre" style="opacity:0.7;max-height:56px;max-width:56px" src="'+stickers_autres[p]+'">');
    }

    function addSticker(stickerName, id) {
        var $textarea = jQuery("#message_topic");
        var caretPos = $textarea[0].selectionStart;
        var textAreaTxt = $textarea.val();

        if (premiumActive) { // Si le post premium est activé
            if (!diamond) {
                swal('Erreur', "Vous devez être membre diamond pour ajouter des stickers à vos posts premium.", 'error');
                var txtToAdd = '' ;
            } else {
                var txtToAdd = '<img style="max-height:66px;max-width:76px" src="'+stickerName[id]+'"> ' ;
            }
        } else {
            var txtToAdd = stickerName[id] + ' ';
        }

        $textarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
        $textarea.focus();
        GM_setValue('dernierSticker', stickerName[id]); // défini le dernier sticker utilisé

        defineDernierSticker();
        appendSticker(stickerName[id]);
        //document.getElementById('message_topic').value += stickers[id] + ' ';
    }

    function addStickerDernier(lien) {
        var $textarea = jQuery("#message_topic");
        var caretPos = $textarea[0].selectionStart;
        var textAreaTxt = $textarea.val();

        if (premiumActive) { // Si le post premium est activé
            if (!diamond) {
                swal('Erreur', "Vous devez être membre diamond pour ajouter des stickers à vos posts premium.", 'error');
                var txtToAdd = '' ;
            } else {
                var txtToAdd = '<img style="max-height:66px;max-width:76px" src="'+lien+'"> ' ;
            }
        } else {
            var txtToAdd = lien + ' ';
        }

        $textarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
        $textarea.focus();
    }

    $( ".sticker-pre" ).click(function() {
        addSticker(stickers, this.getAttribute('code'));
        //$( "#message_topic" ).focus();
    });
    $( ".sticker-dernier" ).click(function() {
        // uniquement pour le dernier sticker
        addStickerDernier(this.src);
        //$( "#message_topic" ).focus();
    });
    $( ".stickerAutres-pre" ).click(function() {
        addSticker(stickers_autres, this.getAttribute('code'));
        //$( "#message_topic" ).focus();
    });
    // Sticker perso
    function loadStickersPerso() {
        for (var m = 0; m < stickers_perso.length; m++) {
            $('#stPerso').append('<img code="'+m+'" class="stickerPerso-pre" style="opacity:0.7;max-height:56px;max-width:56px" src="'+stickers_perso[m]+'">');
        }
    }

    loadStickersPerso(); // Load les stickers personnels au début du script

    document.getElementById('sticker-perso').addEventListener('click', function() {
        var stLink = document.getElementById('stickerLien').value;
        if (stLink === null || !stLink)
        {} else
        {
            stickers_perso.push(stLink);
            logConsole("[INFO] Sticker '"+stLink+"' ajouté.");
            $('#stPerso').children().remove(); // clear les stickers perso
            loadStickersPerso(); // reload les stickers perso pour ajouter en realtime
            stickerPersoListener(); // remet les listeners
        }
        GM_setValue("stickersPerso", JSON.stringify(stickers_perso));
        document.getElementById('stickerLien').value = '';
    });

    function stickerPersoListener() {
        $( ".stickerPerso-pre" ).click(function() {
            addSticker(stickers_perso, this.getAttribute('code'));
            //$( "#message_topic" ).focus();
        });
        /* Ancien code : Enlevé en 2.6
        $('.stickerPerso-pre').dblclick(function(){
            this.remove();
            var stickerPersoDel = stickers_perso.indexOf(this.getAttribute('src'));
            if (stickerPersoDel > -1) {
                stickers_perso.splice(stickerPersoDel, 1);
            }
            GM_setValue("stickersPerso", JSON.stringify(stickers_perso));
            location.reload();
        });
        */
        // Context menu
        $(function() {
            var context = $('body').nuContextMenu({

                hideAfterClick: true,

                items: '.stickerPerso-pre, .sticker-pre, .stickerAutres-pre',

                callback: function(key, element) {
                    if ( key == 'delete' ) {
                        if ( $(element).attr('class') != 'stickerPerso-pre' ) {
                            swal('Erreur', "Vous ne pouvez pas supprimer ce sticker", 'error');
                        } else {
                            $(element).remove();
                            var stickerPersoDel = stickers_perso.indexOf($(element).attr('src'));
                            if (stickerPersoDel > -1) {
                                stickers_perso.splice(stickerPersoDel, 1);
                            }
                            GM_setValue("stickersPerso", JSON.stringify(stickers_perso));
                            location.reload();
                        }
                    } else if ( key == 'download' ) {
                        var a = document.createElement('a');
                        a.href = element.src;
                        a.download = element.src;
                        a.style.display = 'none';
                        document.body.appendChild(a);
                        a.click();
                    } else if ( key == 'reply' ) {
                        if ( $(element).attr('class') == 'sticker-pre' ) {
                            addSticker(stickers, $(element).attr('code'));
                        } else if ( $(element).attr('class') == 'stickerAutres-pre' ) {
                            addSticker(stickers_autres, $(element).attr('code'));
                        } else {
                            addSticker(stickers_perso, $(element).attr('code'));
                        }
                    }
                },

                menu: [

                    {
                        name: 'download',
                        title: 'Télécharger ce sticker',
                        icon: 'download',
                    },

                    {
                        name: 'reply',
                        title: 'Ajouter à mon post',
                        icon: 'reply',
                    },

                    {
                        name: 'void'
                    },

                    {
                        name: 'delete',
                        title: 'Supprimer ce sticker',
                        icon: 'trash',
                    },
                ]

            });
        });
    }

    stickerPersoListener(); // active les listeners pour les stickers perso au début du script

    function addStickerPack(name, list_name) {
        $('#tabs-1').append('<h5>'+name+' : '+list_name.length+'</h5><div style="overflow:auto;height:55px;border: 1px solid #ccc;padding:5px" id="'+name+'"></div>');
        for (var i = 0; i < list_name.length; i++) {
            $('#'+name).append('<img code="'+i+'" class="sticker-'+name+' premiumimg" style="opacity:0.7;max-height:56px;max-width:56px" src="'+list_name[i]+'">');
        }
        function addStickerWithPack(id)
        {
            //document.getElementById('message_topic').value = document.getElementById('message_topic').value + list_name[id] + ' ';
            var $textarea = jQuery("#message_topic");
            var caretPos = $textarea[0].selectionStart;
            var textAreaTxt = $textarea.val();

            if (premiumActive) { // Si le post premium est activé
                if (!diamond) {
                    swal('Erreur', "Vous devez être membre diamond pour ajouter des stickers à vos posts premium.", 'error');
                    var txtToAdd = '' ;
                } else {
                    var txtToAdd = '<img style="max-height:66px;max-width:76px" src="'+list_name[id]+'">';
                }
            } else {
                var txtToAdd = list_name[id] + ' ';
            }

            $textarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
            $textarea.focus();
            GM_setValue('dernierSticker', list_name[id]); // défini le dernier sticker utilisé

            defineDernierSticker();
            appendSticker(list_name[id]);
        }
        $( '.sticker-'+name ).click(function() {
            addStickerWithPack(this.getAttribute('code'));
            $( "#message_topic" ).focus();
        });
        GM_addStyle('.sticker-'+name+':hover {opacity:1!important;transition:opacity 0.4s!important;cursor:pointer!important;}');
    }

    for(var mfh = 0; mfh < __PACK__.length; mfh++)
    {
        if (__PACK__[mfh].display === true) {
            addStickerPack(__PACK__[mfh].nom, __PACK__[mfh].liens); // Ajoute tous les packs installés
        }
    }
    // Sticker perso append
    if (stickers_perso.length === 0) {
        logConsole("[INFO] Vous n'avez aucun sticker personnel.");
        $('#stPerso').append("<i style='opacity:0.7'>Vos stickers personnels s'afficheront ici</i>");
    } else {
        logConsole("[INFO] "+stickers_perso.length+" stickers personnels chargés.");
    }
    // minimize packs
    /*
    var bbn = document.getElementsByName('showRisitas');
    for (var tty = 0; tty < bbn.length; tty++)
         {
             bbn[tty].addEventListener('click', function()
                                                   {
                 minimize(this, '#'+this.getAttribute('packID'));
             });
         }
          Enlevée version 2.1 */
    ///////////STICKERS DROPPABLE////////////
    /*
    $('#stickersDrop').change(function(){
        if ($(this).is(':checked')) {
            $( function() {
                $('#risi').sortable({
                    helper: function(event, ui){
                        var $clone =  $(ui).clone();
                        $clone .css('position','absolute');
                        return $clone.get(0);
                    }
                });
            });
        } else {
            //$('#risi').sortable('disable');
            //$('#risi').disableSelection();
        }
    });
    */
    /////////////////////////////////////////
    document.getElementById('cssChange').value = userCSS; // met le css de l'user dans la textbox
    ///////////////////////////////////////
    var l = document.getElementsByClassName('img-shack');
    for (var mm = 0; mm < l.length; mm++) {
        var h = parseInt(l[mm].height);
        var w = parseInt(l[mm].width);
        l[mm].height = h * tailleStickers;
        l[mm].width = w * tailleStickers;
    }
    /////
    var iframes = document.querySelectorAll('iframe');
    for (var i = 0; i < iframes.length; i++) {
        iframes[i].parentNode.removeChild(iframes[i]);
    } // retire les iframes de la page
    logConsole('[INFO] '+iframes.length+' iframe(s) enlevés de la page !');
    ////////////////////////////////////
    //GM_addStyle('#mainbtn { -webkit-transition: width 2s!important; transition: width 2s!important; } #mainbtn:hover { width: 50px; }');
    // Bouton poster 2.8
    GM_addStyle(".btn-poster-msg { width: 150px; outline: none!important; background-color: #2395ed; transition: background-color 0.3s; }\
.btn-poster-msg:hover { background-color: #1a7fcc; color: white; }\
.btn-poster-msg:active { background-color: #1673ba; color: white; }\
.btn-poster-msg:focus { background-color: #1a7fcc; color: white; }");
    //
    GM_addStyle(".stickerPerso-pre, .stickerAutres-pre, .sticker-pre, .sticker-dernier { transition:opacity 0.4s!important; }");
    GM_addStyle('.stickerPerso-pre:hover, .stickerAutres-pre:hover, .sticker-pre:hover, .sticker-dernier:hover { opacity:1!important; cursor:pointer!important; }');
    GM_addStyle('#consoleOpen:hover, .supprTopicBtn:hover, .diamondBtnPlus:hover, .plusBtn:hover { cursor:pointer; }');
    GM_addStyle('#consoleOpen:active, .supprTopicBtn:active, .diamondBtnPlus:active, .plusBtn:active {\
                -webkit-transform:scale(0.92);\
                -moz-transform:scale(0.92);\
                -ms-transform:scale(0.92);\
                -o-transform:scale(0.92);\
                transform:scale(0.92);\
                }');
    GM_addStyle('#consoleOpen:hover { -webkit-filter: hue-rotate(200deg);\
filter: hue-rotate(200deg);\
-webkit-filter: saturate(8);\
filter: saturate(8);\
transition: filter 0.4s;\
-webkit-transition: filter 0.4s;\
cursor:pointer;}');
    GM_addStyle('.topicModal:hover {\
                -webkit-transform:scale(1.15);\
                -moz-transform:scale(1.15);\
                -ms-transform:scale(1.15);\
                -o-transform:scale(1.15);\
                transform:scale(1.15);\
                }');
    /*GM_addStyle('.offre:hover {\
                -webkit-transform: rotate(360deg);\
                -moz-transform: rotate(360deg);\
                -o-transform: rotate(360deg);\
                transform: rotate(360deg);\
                -webkit-transition-duration: 0.5s;\
                -moz-transition-duration: 0.5s;\
                -o-transition-duration: 0.5s;\
                transition-duration: 0.5s;\
                }');
                */
    GM_addStyle('.offre { text-align:center;\
                          opacity: 0.7;\
                          outline: 1px solid #7c7c7c;\
                          padding-top: 3px;\
                          min-width: 560px !important;\
                          max-width: 600px !important;\
                          height: 120px !important;\
                          cursor: pointer;\
                          transition: opacity 0.4s!important;\
                          background-image: url("https://i.imgur.com/B34tpwd.png");\
                          background-repeat: no-repeat; }\
                .diamond { background-image: url("https://i.imgur.com/Ljn8Eky.png");\
                           background-repeat: no-repeat; margin-top: 15px; margin-bottom: 15px; }\
                }');
    GM_addStyle('.offre:hover {\
                opacity:1!important;\
                outline : 2px solid #7c7c7c;\
                }');
    GM_addStyle('#toolDiamond:hover, #stickerPersoOuverture:hover { background-color: #fcfcfc; }');
    // Change css tooltip
    GM_addStyle('.ui-tooltip { border-radius:4px; box-shadow: none; font: 14px "Helvetica Neue", Sans-Serif; color: gray}');
    // Sticker perso
    GM_addStyle('#stickerLien {\
                width: 100%;\
                padding: 6px;\
                margin: 4px;\
                box-sizing: border-box;\
                border: 1px solid #ccc;\
                -webkit-transition: 0.5s;\
                transition: 0.5s;\
                outline: none;\
                border-radius: 2px;\
                }\
                #stickerLien:focus { border: 1px solid gray; }\
');
    GM_addStyle('.jvcpremium-btn, .jvcpremium-btn-danger {\
                text-align: center;\
                display: inline-block;\
                -webkit-transition-duration: 0.4s;\
                transition-duration: 0.4s;\
                cursor: pointer;\
                border-radius:2px;\
                color: #515151!important;\
                border: 1px solid #ccc;\
                padding-right: 10px;\
                padding-left: 10px;\
                padding-bottom: 5px;\
                padding-top: 5px;\
                margin: 10px;\
                font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;\
                font-size: 11px;\
                background-color: white;\
                box-shadow: 0px 1px 1px #ededed;\
                max-width: 400px!important;\
                transition: box-shadow 0.2s;\
                transition: border 0.3s, color 0.3s;\
                }\
                .jvcpremium-btn:hover { border: 1px solid #007fff; color: #007fff!important; box-shadow: none; }\
                .jvcpremium-btn:active { box-shadow: 0px 0px 0px 1px #007fff; color: #007fff!important; }\
                .jvcpremium-btn-danger:hover { border: 1px solid #ff0000;  color: #ff0000!important; box-shadow: none; }\
                .jvcpremium-btn-danger:active { box-shadow: 0px 0px 0px 1px #ff0000; transition: border 0s; color: #ff0000!important; }\
                ');

    GM_addStyle("#accordion div { text-align: center; }");
    // Preview link css 2.9
    GM_addStyle(".preview-premium { background-color: #fbfbfb;\
                                    border-radius: 3px;\
                                    padding-top: 10px;\
                                    padding-left: 10px;\
                                    padding-bottom: 5px;\
                                    position: relative;\
                                    overflow: auto;\
                                    width: 100%;\
                                    border: 1px solid #bbb;\
                                    margin-top: 5px;\
                                    margin-bottom: 5px;\
                                    opacity: 0.9; }\
                 .remove-preview-premium { background: url(http://wfarm3.dataknet.com/static/resources/icons/set113/31f5eb0c.png) no-repeat left top;\
                                           width:16px; height:16px; display: block; background-position: center; background-size: cover; cursor: pointer;\
                                           border-radius: 50px;\
                                           transition: box-shadow 0.1s;\
                                          }\
                 .remove-preview-premium:hover { }\
                 .remove-preview-premium:active { box-shadow: 0 0 3pt 2pt #ededed; background-color: #e5e5e5; }");
    // Console scrollbar 3.1
    GM_addStyle("#consolePremium::-webkit-scrollbar { width: 10px }\
#consolePremium::-webkit-scrollbar-track { background: transparent; }\
#consolePremium::-webkit-scrollbar-thumb { background: #ccc; border-radius: 10px; }\
#consolePremium::-webkit-scrollbar-thumb:hover {background: #aaa; }");


    /*$('.offre').on('click', function(){
        $(this).css(
            {
                '-webkit-transform': 'scale(1.03)',
                '-moz-transform': 'scale(1.03)',
                '-ms-transform': 'scale(1.03)',
                '-o-transform': 'scale(1.03)',
                'transform': 'scale(1.03)'
            }
        );
    }); enlevé depuis la 2.9*/
    // Preview links
    var PREVIEW_REQ = 0;
    $.fn.premiumPreview = function() {
        if (PREVIEW_REQ <= 99) {
            PREVIEW_REQ += 1;
            var link   = $(this).attr("href");
            var data   = this;
            var newModal = $( '<div class="preview-premium"> <center> <img class="premiumimg" id="loaderRemove" style="max-height:100px;max-width:100px" src="https://m.popkey.co/fe4ba7/DYALX.gif"> </center> </div>');
            newModal.insertAfter(data);
            GM_xmlhttpRequest({
                method: "GET",
                url: "https://epmd.000webhostapp.com/apipreview/?url="+link,
                onload: function(response) {
                    var e = JSON.parse( response.responseText );
                    //console.log(e);
                    // INFORMATIONS
                    if (e.error) {
                        $("#loaderRemove").remove();
                        newModal.append('<h4>Erreur durant la prévisualisation.</h4>\
                        <span style="position: absolute; right:15px; top:10px;" title="Retirer" class="remove-preview-premium"></span>');
                        $(".remove-preview-premium").click(function() {
                            $(this).parent().fadeOut(300, function(e) { $(this).remove(); });
                        });
                    } else {
                        var url         = e.url;
                        var title       = e.title;
                        var description = e.text.description;
                        var favicon     = e.favicon;
                        if (!description) {
                            description = url;
                        }
                        if (title === null) {
                            title = url;
                        }
                        // APPEND
                        function append(data, title, description, url, favicon) {
                            $("#loaderRemove").remove();
                            if (newModal.find("#loaderRemove").length > 0) {
                                $("#loaderRemove").remove();
                                append(newModal, title, description, url, favicon);
                            } else {
                                newModal.append( '\
                                    <h4 style="padding-right: 50px;">'+title+'</h4><hr>\
                                    <p>'+description+'</p>\
                                    <span style="position: absolute; right:15px; top:10px;" title="Retirer" class="remove-preview-premium"></span>\
                                    <a target="_blank" href="'+url+'" title="'+url+'"><img style="position: absolute; right:35px; top:10px;" src="'+favicon+'"></a>');
                                $(".remove-preview-premium").click(function() {
                                    $(this).parent().fadeOut(300, function(e) { $(this).remove(); });
                                });
                                //return false;
                            }
                        }
                        append(newModal, title, description, url, favicon);
                    }
                    //console.log(title)
                }
            });
            return this;
        } else {
            logConsole("[ATTENTION] API PREVIEW : Nombre de requêtes excédées.");
            return false;
        }
    };

    if (previewOption) {
        if (!listeSujet()) {
            $(".txt-msg").each(function() {

                var links = $(this).find("a.xXx");
                for (var i = 0; i < links.length; i++) {
                    var link = $(links[i]).attr("href");
                    if (/\.(?:jpg|jpeg|gif|png)$/i.test(link) === false) {

                        $(links[i]).premiumPreview();
                    }
                }

            });
        }
    }

    // loading...
    if (loading) {
        if (!$.browser.mozilla) { // uniquement sur chrome
            $(window).load(function() {
                $('#loading').hide();
                // Si le loading ne s'est pas enlevé (bug)
                setTimeout(function() {
                    $('#loading').hide();
                }, 5000); // 5 sec
            });
        }
    }
    // Fin d'execution du script
    GM_setValue('firstTime', false);
    //////
})();