Greasy Fork is available in English.

Steam assistant(Steam小助手)

WEB端Steam小助手,集合多种功能如Steam批量留言,点赞,好友管理,喜加一...,佛系更新中...欢迎提出您的建议或者共同学习交流

// ==UserScript==
// @name         Steam assistant(Steam小助手)
// @description  WEB端Steam小助手,集合多种功能如Steam批量留言,点赞,好友管理,喜加一...,佛系更新中...欢迎提出您的建议或者共同学习交流
// @version      1.2.3.4.5
// @date         2020.6.30
// @source       https://github.com/Mikuof39/Steam-assistant-Steam-
// @homepage     https://steamcommunity.com/sharedfiles/filedetails/?id=1993903275
// @supportURL   https://greasyfork.org/zh-CN/scripts/397073/feedback
// @author       Miku39
// @license      GPL License
// @namespace    https://steamcommunity.com/id/miku-39/
// @namespace    https://www.tampermonkey.net/
// @namespace    https://greasyfork.org/
// @icon         https://store.steampowered.com/favicon.ico
// @icon64       https://steamcommunity-a.akamaihd.net/public/shared/images/responsive/share_steam_logo.png
// @note         CSS-----------------------------------------------------------------------
// @resource     css_layui https://www.layuicdn.com/layui-v2.5.6/css/layui.css
// @resource     css_laydate https://www.layuicdn.com/layui-v2.5.6/css/modules/laydate/default/laydate.css?v=5.0.9
// @resource     css_layer https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/layer.css?v=3.1.1
// @resource     css_layui_Modules https://www.layuicdn.com/layui-v2.5.6/css/modules/code.css
// @resource     css_fontAwesome https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css
// @note         JS-----------------------------------------------------------------------
// @resource     JS_highstock https://code.highcharts.com.cn/highstock/highstock.js
// @resource     JS_highstock_exporting https://code.highcharts.com.cn/highcharts/modules/exporting.js
// @resource     JS_highstock_oldie https://code.highcharts.com.cn/highcharts/modules/oldie.js
// @resource     JS_highstock_networkgraph https://code.highcharts.com.cn/highcharts/modules/networkgraph.js
// @resource     JS_highstock_zh_CN https://code.highcharts.com.cn/highcharts-plugins/highcharts-zh_CN.js
// @resource     JS_layui https://www.layuicdn.com/layui-v2.5.6/layui.all.js
// @resource     JS_localforage https://cdnjs.cloudflare.com/ajax/libs/localforage/1.7.3/localforage.min.js
// @resource     JS_draw https://cdnjs.cloudflare.com/ajax/libs/pixi.js/5.2.4/pixi.js
// @resource     JS_animate https://code.createjs.com/1.0.0/tweenjs.js
// @resource     JS_sound https://code.createjs.com/1.0.0/soundjs.js
// @resource     JS_render https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.js
// @resource     JS_multithreading https://gitlab.com/hordesolutions/Hamsters.js/-/raw/master/build/hamsters.min.js
// @resource     JS_pep https://code.jquery.com/pep/0.4.3/pep.js
// @resource     JS_babylon https://preview.babylonjs.com/babylon.js
// @resource     JS_babylon_loaders https://preview.babylonjs.com/loaders/babylonjs.loaders.min.js
// @resource     Jquery_localizationtool https://greasyfork.org/scripts/403927-jquery-localizationtool-js/code/jquerylocalizationTooljs.js?version=808323
// @note         运行页面-> 社区
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/?$/
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/?(add|pending|blocked|coplay|broadcast_moderator)?\/?$/
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/(following|groups|groups\/pending)\/?$/
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/?([A-Za-z0-9$/-_.+!*'(),])+$/
// @note         运行页面-> 创意工坊-我的
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/myworkshopfiles\/\?appid=+[0-9]+&browsefilter=myfavorites$/
// @note         运行页面-> 创意工坊-我的收藏
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/myworkshopfiles\/\?appid=+[0-9]+&browsefilter=myfavorites$/
// @note         运行页面-> 创意工坊-我的订阅
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/myworkshopfiles\/\?appid=+[0-9]+&browsefilter=myfavorites$/
// @note         运行页面-> 创意工坊-运行过的
// @include      /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/myworkshopfiles\/\?appid=+[0-9]+&browsefilter=myfavorites$/
// @note         脚本功能-----------------------------------------------------------------------
// @grant        GM_xmlhttpRequest
// @grant        GM_getResourceText
// @grant        GM_getResourceURL
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_download
// @grant        GM_openInTab
// @grant        GM_addValueChangeListener
// @grant        GM_removeValueChangeListener	
// @grant        GM_getTab
// @grant        GM_saveTab
// @grant        GM_getTabs
// @grant        GM_setClipboard
// @grant        GM_notification
// @grant        GM_listValues
// @grant        GM_info
// @note         Cdn-----------------------------------------------------------------------
// @connect      code.highcharts.com
// @connect      code.highcharts.com.cn
// @connect      www.layuicdn.com
// @connect      cdnjs.cloudflare.com
// @connect      cdn.90so.net
// @connect      www.jsdelivr.com
// @connect      cdn.bootcss.com
// @connect      stackpath.bootstrapcdn.com
// @connect      greasyfork.org
// @connect      github.com
// @connect      www.bootcdn.cn
// @connect      cdn.jsdelivr.net
// @note         Translate-----------------------------------------------------------------
// @connect      www.deepl.com
// @connect      api.deepl.com
// @connect      translate.google.cn
// @connect      translate.google.com
// @connect      fanyi.baidu.com
// @connect      api.fanyi.baidu.com  //百度通用翻译API HTTP   http://fanyi-api.baidu.com/api/trans/product/prodinfo#0
// @connect      fanyi-api.baidu.com  //百度通用翻译API HTTPS  https://blog.csdn.net/dianfu2892/article/details/101467066
// @connect      fanyi.youdao.com
// @connect      fanyi.so.com
// @connect      fanyi.qq.com
// @connect      fanyi.sogou.com
// @connect      cn.bing.com  //https://cn.bing.com/translator/
// @connect      hjdict.com   //http://www.hjdict.com/app/trans
// @connect      fanyi.dict.cn
// @note         Api-----------------------------------------------------------------------
// @connect      brushes8.com
// @connect      api.help.bj.cn
// @connect      api.avatardata.cn  //https://www.avatardata.cn/Docs
// @connect      route.showapi.com  //会员/免费 https://www.showapi.com/api/apiList
// @connect      zhaiyan.2cys.com
// @connect      api.dongmanxingkong.com
// @connect      api.pingcc.cn
// @connect      47.114.147.221
// @connect      www.dmoe.cc
// @connect      api.mz-moe.cn
// @connect      sinaimg.cn
// @connect      self
// @connect      *
// @noframes
// @run-at       document-start
// ==/UserScript==

/**
 */
 
 //----------------------------------------------------------------------------------------------------------------------------------------------------
 //模块: databaseConf.js class DB -> ui.js UI::initUI()
 /* 全局数据库对象 */
 var g_db,g_db1,g_db2,g_db3,g_db4;
 //----------------------------------------------------------------------------------------------------------------------------------------------------
 //模块: databaseConf.js -> ui.js UI::initUI()
 
 const URLs = {
         //您的好友
         g_friendUrlRegExp: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/?$/,
         //添加好友
         g_otherUrlRegExp1_1: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/add?\/?$/,
         //待处理邀请
         g_otherUrlRegExp1_2: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/pending?\/?$/,
         //已屏蔽
         g_otherUrlRegExp1_3: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/blocked?\/?$/,
         //近期共同游戏的玩家
         g_otherUrlRegExp1_4: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/coplay?\/?$/,
         //直播版主
         g_otherUrlRegExp1_5: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/broadcast_moderator?\/?$/,
         //关注的玩家
         g_otherUrlRegExp2_1: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/following\/?$/,
         //您的组
         g_otherUrlRegExp2_2: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/groups\/?$/,
         //待处理邀请
         g_otherUrlRegExp2_3: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/groups\/pending\/?$/,
         //
         g_otherUrlRegExp3: /^https?:\/\/steamcommunity.com\/(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/7656119[0-9]{10})\/friends\/?([A-Za-z0-9$/-_.+!*'(),])+$/,
 };
 //----------------------------------------------------------------------------------------------------------------------------------------------------
 //模块: databaseConf.js -> ui.js UI::initUI()
 const g_steamId64RegExp = /7656119[0-9]{10}/;
 //----------------------------------------------------------------------------------------------------------------------------------------------------
 //模块: externalApis.js class intelligenceAI, class SteamDB, class friendActivity, class UI, class externalApis, class App
 /* 全局对象 */
 var gc_res = null;
 

 
 var gc_ai = null;
 var gc_steamdb = null;
 var gc_friAct = null;
 var gc_menu_friends_ui = null;           //您的好友
 var gc_menu_friends_invite_ui = null;    //待处理邀请
 var gc_menu_shielding_ui = null;         //已屏蔽
 var gc_menu_gameFriend_ui = null;        //近期共同游戏的玩家
 var gc_menu_liveAdmin_ui = null;         //直播版主
 var gc_menu_following_Players_ui = null; //关注的玩家
 var gc_menu_groups_ui = null;            //您的组
 var gc_menu_groups_invite_ui = null;     //待处理邀请
 var gc_exApis = null;
 var gc_app = null;
 //----------------------------------------------------------------------------------------------------------------------------------------------------
 //模块: utility.js -> registeMenu() 和 unRegisteMenu()使用
 /* 全局对象 */
 var g_arrMenuID = [5];



function fixConfInfo(i,steamID){ /*修复配置信息*/
        var isFix = false;
        
        if (g_conf[i].delay < 0){
                isFix = true; g_conf[i].delay = 4;
        }
        if (g_conf[i].strNoOperate == ""){
                isFix = true; g_conf[i].strNoOperate = "(不留言)";
        }
        if (g_conf[i].strRemarkPlaceholder == ""){
                isFix = true; g_conf[i].strRemarkPlaceholder = "{name}";
        }
        
        return isFix;
}

function newUserGuide(steamID){ /*新用户引导*/
        /*新手引导*/
        /*console.log("欢迎使用Steam小助手. 当前版本: 更新时间:");*/
        /*显示简短的教程界面*/
        /*console.log("是否进入教程?");*/
        /*console.log("文字教程: 链接到指南 视频教程: 链接");*/
        var length = g_conf.push(g_default_configuration); /*添加默认配置信息作为新配置信息*/
        g_conf[length-1].steamID = steamID; /*设置当前用户的steamID,作为当前用户的配置信息*/
}

function readUserConfInfoToCurrConfInfo(i){ /*读取用户配置信息到当前配置信息处[0]*/
        g_conf[0].autoLogin = g_conf[i].autoLogin;
        g_conf[0].delay = g_conf[i].delay;
        g_conf[0].strNoOperate = g_conf[i].strNoOperate;
        g_conf[0].strRemarkPlaceholder = g_conf[i].strRemarkPlaceholder;
        g_conf[0].steamID = g_conf[i].steamID;
}

function getProfilesInfo(){ /*获取配置文件信息*/
        
}
function readConfInfo(steamID){ /*读取已保存的对应配置信息*/
        
        if(g_conf.length == 1){ /*说明没有格外的配置信息*/
                newUserGuide(steamID);
        }
        else
        {
                for (let i = 1; i < g_conf.length; i++) { /*遍历所有的配置信息*/
                        if(g_conf[i].steamID == steamID){
                                readUserConfInfoToCurrConfInfo(i); /*读取用户配置信息到当前配置信息处[0]*/
                                return true;
                        }
                }
                /*如果没有查找到,则新建用户引导*/
                newUserGuide(steamID);
                return true;
        }
}

function saveConfInfo(steamID){ /*保存最新的配置信息*/
        if(fixConfInfo(0,steamID)){ /*尝试 修复配置信息*/
                console.log("尝试保存的配置信息无效,已经恢复至默认值. 请检查...");
        }
        
}

function initConfInfo(i,steamID){ /*配置信息初始化(恢复默认)*/
        g_conf[i].autoLogin = g_default_configuration.autoLogin;
        g_conf[i].delay = g_default_configuration.delay;
        g_conf[i].strNoOperate = g_default_configuration.strNoOperate;
        g_conf[i].strRemarkPlaceholder = g_default_configuration.strRemarkPlaceholder;
        g_conf[i].steamID = g_default_configuration.steamID;
}

function exportConfInfo(steamID){ /*导出配置信息(到文件)*/
        if(fixConfInfo(0,steamID)){ /*尝试 修复配置信息*/
                console.log("尝试导出的配置信息无效,已经恢复至默认值. 请检查...");
        }
        /*从0号中读取出来,导出到文件*/
        
}

function importConfInfo(steamID){ /*导入配置信息(选择文件并读取)*/
        
        if(fixConfInfo(0,steamID)){ /*尝试 修复配置信息*/
                console.log("尝试导入的配置信息无效,已经恢复至默认值. 请检查...");
        }
        
        /*保存配置文件*/
}

//-------------------------------------------------------------------------------------------------------------
class DB{
        constructor(){
                this.DBstore = []; //数据库存储数组(多实例)
                this.DBindex = 0;  //当前数据库索引
                
                if(arguments.length == 1){
                        this._constructor(arguments[0]);
                }else if(arguments.length == 2){
                        this._constructor(arguments[0],arguments[1]);
                }
        }
        _constructor(DBConfig,isTest = true){ //默认创建新的数据库 //数据库配置,是否启用测试
                if(isTest == true)
                        this.Test();
                this.initAndCreateNewDBInstance(DBConfig);
        }
        use(DBname){ //指定要使用的数据库
                for (let i = 0; i < this.DBstore.length; i++) {
                        if(DBname == DBstore[i]._dbInfo.name){
                                this.DBindex = i;
                                return DBstore[i];
                        }
                }
                return null;
        }
        async initCurrentDBInstance(DBConfig){ //单数据库 //初始化当前数据库实例
                var obj;
                if(typeof DBConfig == "object"){
                        localforage.config(DBConfig);
                        this.DBindex = this.DBstore.push(obj) -1; //
                        obj = localforage;
                }else{
                        console.log("参数不合法,请检查...");
                }
                
                await obj.ready().then(function() {
                        // 当 localforage 将指定驱动初始化完成时,此处代码运行
                        console.log("数据库初始化成功! 当前使用的是: "+ localforage.driver());
                }).catch(function (e) {
                        // 当没有可用的驱动时,ready()将会失败
                        console.log("数据库初始化失败(没有可用的驱动)! " + e); // No available storage method found.
                });
                return obj;
        }
        initAndCreateNewDBInstance(DBConfig){ //多数据库 //初始化并创建新的数据库实例
                var obj;
                if(typeof DBConfig == "object"){
                        obj = localforage.createInstance(DBConfig);
                        this.DBindex = this.DBstore.push(obj) -1; //
                }else{
                        console.log("参数不合法,请检查...");
                }
                return obj;
        }
        async dropDBInstance(name){ //删除数据库实例
                await localforage.dropInstance({
                  name: name
                }).then(function() {
                        //console.log('删除数据库成功!');
                });
        }
        async Read(key){ //读取数据
                var data;
                await this.DBstore[this.DBindex].getItem(key).then(function(value) {
                        // 当离线仓库中的值被载入时,此处代码运行
                        //console.log("数据读取成功. "+ value);
                        data = value;
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        console.log("数据读取失败! "+ err);
                });
                return data;
        }
        async ReadAll(){ //读取所有数据(迭代),返回包含所有数据的数组
                var data = [];
                await this.DBstore[this.DBindex].iterate(function(value, key, iterationNumber) {
                        // 此回调函数将对所有 key/value 键值对运行
                        //console.log([key, value]);
                        data.push([key, value]);
                }).then(function() {
                        //console.log("读取所有数据成功."+ [key, value]);
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        console.log("读取所有数据失败!"+ err);
                });
                return data;
        }
        async Write(key,value){ //写入数据
                var status = true;
                // 不同于 localStorage,你可以存储非字符串类型
                await this.DBstore[this.DBindex].setItem(key, value).then(function(value) {
                        //console.log("数据写入成功. "+ value);
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        status = false;
                        console.log("数据写入失败! "+ err);
                });
                return status;
        }
        async Remove(key){ //删除数据
                var status = true;
                await this.DBstore[this.DBindex].removeItem(key).then(function() {
                        // 当值被移除后,此处代码运行
                        //console.log('删除数据成功.');
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        status = false;
                        console.log('删除数据失败!'+ err);
                });
                return status;
        }
        async RemoveAll(){ //删除所有数据(重置数据库->删除后数据库是空的)
                var status = true;
                await this.DBstore[this.DBindex].clear().then(function() {
                        // 当数据库被全部删除后,此处代码运行
                        //console.log('删除所有数据成功!');
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        status = false;
                        console.log('删除所有数据失败!'+ err);
                });
                return status;
        }
        async getLength(){ //获取已存储的所有数据总条数(长度)
                var length;
                await this.DBstore[this.DBindex].length().then(function(numberOfKeys) {
                        // 输出数据库的大小
                        //console.log(numberOfKeys);
                        length = numberOfKeys;
                }).catch(function(err) {
                        // 当出错时,此处代码运行
                        console.log(err);
                });
                return length;
        }
        async getKeyNameByIndex(index){ //通过下标(index)获取对应的Key名 //此方法很怪异,于是进行重写
                // var name;
                // await this.DBstore[this.DBindex].key(index).then(function(keyName) {
                //      // key 名
                //      //console.log(keyName);
                //      name = keyName;
                // }).catch(function(err) {
                //      // 当出错时,此处代码运行
                //      console.log("getKeyNameByIndex()失败!" + err);
                // });
                // return name;
                
                var arr_name = await this.getAllKeyName();
                if(index < 0 || index >= arr_name.length){
                        console.log("getKeyNameByIndex()失败! 参数不正确: " +index);
                        return null;
                }
                return arr_name[index];
        }
        async getAllKeyName(){ // 返回 包含所有 key 名的数组
                var key;
                await this.DBstore[this.DBindex].keys().then(function(keys) {
                        // console.log(keys);
                        key = keys;
                }).catch(function(err) {
                    // 当出错时,此处代码运行
                    console.log("getAllKeyName()失败!" + err);
                });
                return key;
        }
        Test(){ //测试当前浏览器的数据库支持情况
                if(localforage.supports(localforage.INDEXEDDB) == true){
                        console.log("当前浏览器支持 IndexedDB.");
                }else{
                        console.log("当前浏览器不支持 IndexedDB!");
                }
                
                if(localforage.supports(localforage.WEBSQL) == true){
                        console.log("当前浏览器支持 WEBSQL.");
                }else{
                        console.log("当前浏览器不支持 WEBSQL!");
                }
                
                if(localforage.supports(localforage.LOCALSTORAGE) == true){
                        console.log("当前浏览器支持 LOCALSTORAGE.");
                }else{
                        console.log("当前浏览器不支持 LOCALSTORAGE!");
                }
        }
}


//---------------------------------------------------------------------------------------
// class GameId {
//     static parseId(id) {
//         if (!id) { return null; }
        
//         let intId = parseInt(id);
//         if (!intId) { return null; }
        
//         return intId;
//     }
    
//     static getAppid(text) {
//         if (!text) { return null; }

//         if (text instanceof HTMLElement) {
//             let appid = text.dataset.dsAppid;
//             if (appid) return GameId.parseId(appid);
//             text = text.href;
//             if (!text) return null;
//         }

//         // app, market/listing
//         let m = text.match(/(?:store\.steampowered|steamcommunity)\.com\/(?:app|market\/listings)\/(\d+)\/?/);
//         return m && GameId.parseId(m[1]);
//     }
    
//     static getSubid(text) {
//         if (!text) { return null; }

//         if (text instanceof HTMLElement) {
//             let subid = text.dataset.dsPackageid;
//             if (subid) return GameId.parseId(subid);
//             text = text.href;
//             if (!text) return null;
//         }
        
//         let m = text.match(/(?:store\.steampowered|steamcommunity)\.com\/sub\/(\d+)\/?/);
//         return m && GameId.parseId(m[1]);
//     }

//     static getBundleid(text) {
//         if (!text) { return null; }

//         if (text instanceof HTMLElement) {
//             let bundleid = text.dataset.dsBundleid;
//             if (bundleid) return GameId.parseId(bundleid);
//             text = text.href;
//             if (!text) return null;
//         }

//         let m = text.match(/(?:store\.steampowered|steamcommunity)\.com\/bundle\/(\d+)\/?/);
//         return m && GameId.parseId(m[1]);
//     }

//     static trimStoreId(storeId) {
//         return Number(storeId.slice(storeId.indexOf('/') + 1));
//     }
    
//     static getAppidImgSrc(text) {
//         if (!text) { return null; }
//         let m = text.match(/(steamcdn-a\.akamaihd\.net\/steam|steamcommunity\/public\/images)\/apps\/(\d+)\//);
//         return m && GameId.parseId(m[2]);
//     }
    
//     static getAppidUriQuery(text) {
//         if (!text) { return null; }
//         let m = text.match(/appid=(\d+)/);
//         return m && GameId.parseId(m[1]);
//     }
    
//     static getAppids(text) {
//         let regex = /(?:store\.steampowered|steamcommunity)\.com\/app\/(\d+)\/?/g;
//         let res = [];
//         let m;
//         while ((m = regex.exec(text)) != null) {
//             let id = GameId.parseId(m[1]);
//             if (id) {
//                 res.push(id);
//             }
//         }
//         return res;
//     }
    
//     static getAppidFromId(text) {
//         if (!text) { return null; }
//         let m = text.match(/game_(\d+)/);
//         return m && GameId.parseId(m[1]);
//     }
    
//     static getAppidFromGameCard(text) {
//         if (!text) { return null; }
//         let m = text.match(/\/gamecards\/(\d+)/);
//         return m && GameId.parseId(m[1]);
//     }
// }

// // todo use https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage
// class LocalStorage {
//     static get(key, defaultValue) {
//         let item = localStorage.getItem(key);
//         if (!item) return defaultValue;
//         try {
//             return JSON.parse(item);
//         } catch (err) {
//             return defaultValue;
//         }
//     }
    
//     static set(key, value) {
//         localStorage.setItem(key, JSON.stringify(value));
//     }

//     static has(key) {
//         return localStorage.getItem(key) !== null;
//     }
    
//     static remove(key) {
//         localStorage.removeItem(key);
//     }
    
//     static keys() {
//         let result = [];
//         for (let i = localStorage.length - 1; i >= 0; --i) {
//             result.push(localStorage.key(i));
//         }
//         return result;
//     }
    
//     static clear() {
//         localStorage.clear();
//     }
// }


// class SyncedStorage {
//     /**
//      * browser.storage.sync limits
//      * QUOTA_BYTES = 102400 // 100KB
//      * QUOTA_BYTES_PER_ITEM = 8192 // 8KB
//      * MAX_ITEMS = 512
//      * MAX_WRITE_OPERATIONS_PER_HOUR = 1800
//      * MAX_WRITE_OPERATIONS_PER_MINUTE = 120
//      */
//     static has(key) {
//         return Object.prototype.hasOwnProperty.call(this.cache, key);
//     }
//     static get(key) {
//         if (typeof this.cache[key] == 'undefined') {
//             if (typeof this.defaults[key] == 'undefined') {
//                 console.warn(`Unrecognized SyncedStorage key '${key}'`);
//             }
//             return this.defaults[key];
//         }
//         return this.cache[key];
//     }

//     static set(key, value) {
//         this.cache[key] = value;
//         return this.adapter.set({ [key]: value, });
//         // this will throw if MAX_WRITE_*, MAX_ITEMS, QUOTA_BYTES* are exceeded
//     }

//     static import(entries) {
//         for (let [key, value] of Object.entries(entries)) {
//             this.cache[key] = value;
//         }
//         return this.adapter.set(entries);
//     }

//     static remove(key) {
//         if (typeof this.cache[key]) {
//             delete this.cache[key];
//         }
//         return this.adapter.remove(key);
//         // can throw if MAX_WRITE* is exceeded
//     }

//     static keys(prefix='') {
//         return Object.keys(this.cache).filter(k => k.startsWith(prefix));
//     }

//     static entries() {
//         return Object.entries(this.cache);
//     }

//     static clear() {
//         this.cache = {};
//         return this.adapter.clear();
//         // can throw if MAX_WRITE* is exceeded
//     }

//     // load whole storage and make local copy
//     static async init() {
//         browser.storage.onChanged.addListener(changes => {
//             for (let [key, { newValue: val, }] of Object.entries(changes)) {
//                 this.cache[key] = val;
//             }
//             if (typeof ContextMenu === "function" && Object.keys(changes).some(key => key.startsWith("context_"))) {
//                 ContextMenu.update();
//             }
//         });

//         let storage = await this.adapter.get(null);
//         Object.assign(this.cache, storage);

//         return this.cache;
//     }
//     static then(onDone, onCatch) {
//         return this.init().then(onDone, onCatch);
//     }

//     static async quota() {
//         let maxBytes = this.adapter.QUOTA_BYTES;
//         let bytes = await this.adapter.getBytesInUse();
//         return bytes / maxBytes; // float 0.0 (0%) -> 1.0 (100%)
//     }
// }
// SyncedStorage.adapter = browser.storage.sync || browser.storage.local;
// SyncedStorage.cache = {};
// SyncedStorage.defaults = {
//     'language': "english",

//     'version': Info.version,
//     'version_show': true,

//     'highlight_owned_color': "#00ce67",
//     'highlight_wishlist_color': "#0491bf",
//     'highlight_coupon_color': "#a26426",
//     'highlight_inv_gift_color': "#800040",
//     'highlight_inv_guestpass_color': "#513c73",
//     'highlight_notinterested_color': "#4f4f4f",
//     'highlight_collection_color': "#856d0e",
//     'highlight_waitlist_color': "#4c7521",

//     'tag_owned_color': "#00b75b",
//     'tag_wishlist_color': "#0383b4",
//     'tag_coupon_color': "#c27120",
//     'tag_inv_gift_color': "#b10059",
//     'tag_inv_guestpass_color': "#65449a",
//     'tag_notinterested_color': "#4f4f4f",
//     'tag_collection_color': "#856d0e",
//     'tag_waitlist_color': "#4c7521",

//     'highlight_owned': true,
//     'highlight_wishlist': true,
//     'highlight_coupon': false,
//     'highlight_inv_gift': false,
//     'highlight_inv_guestpass': false,
//     'highlight_notinterested': false,
//     'highlight_excludef2p': false,
//     'highlight_notdiscounted': false,
//     'highlight_collection': true,
//     'highlight_waitlist': true,

//     'tag_owned': false,
//     'tag_wishlist': false,
//     'tag_coupon': false,
//     'tag_inv_gift': false,
//     'tag_inv_guestpass': false,
//     'tag_notinterested': true,
//     'tag_collection': false,
//     'tag_waitlist': false,
//     'tag_short': false,

//     'hide_owned': false,
//     'hide_ignored': false,
//     'hide_dlcunownedgames': false,
//     'hide_wishlist': false,
//     'hide_cart': false,
//     'hide_notdiscounted': false,
//     'hide_mixed': false,
//     'hide_negative': false,
//     'hide_priceabove': false,
//     'priceabove_value': "",
//     'hidetmsymbols': false,

//     'showlowestprice': true,
//     'showlowestprice_onwishlist': true,
//     'showlowestpricecoupon': true,
//     'showallstores': true,
//     'stores': [],
//     'override_price': "auto",
//     'showregionalprice': "mouse",
//     'regional_countries': ["us", "gb", "ru", "br", "au", "jp"],

//     'show_es_homepagetabs': true,
//     'showmarkettotal': false,
//     'showsteamrepapi': true,
//     'showmcus': true,
//     'showoc': true,
//     'showhltb': true,
//     'showyoutube': true,
//     'showtwitch': true,
//     'showpcgw': true,
//     'showcompletionistme': false,
//     'showprotondb': false,
//     'showviewinlibrary': false,
//     'showsteamcardexchange': false,
//     'showitadlinks': true,
//     'showsteamdb': true,
//     'showbartervg': false,
//     'showastatslink': true,
//     'showyoutubegameplay': true,
//     'showyoutubereviews': true,
//     'showwsgf': true,
//     'exfgls': true,

//     'customize_apppage': {
//         "recentupdates": true,
//         "reviews": true,
//         "about": true,
//         "contentwarning": true,
//         "steamchart": true,
//         "steamspy": true,
//         "surveys": true,
//         "sysreq": true,
//         "legal": true,
//         "morelikethis": true,
//         "recommendedbycurators": true,
//         "customerreviews": true
//     },

//     'customize_frontpage': {
//         "featuredrecommended": true,
//         "specialoffers": true,
//         "trendingamongfriends": true,
//         "discoveryqueue": true,
//         "browsesteam": true,
//         "curators": true,
//         "morecuratorrecommendations": true,
//         "recentlyupdated": true,
//         "fromdevelopersandpublishersthatyouknow": true,
//         "popularvrgames": true,
//         "homepagetabs": true,
//         "gamesstreamingnow": true,
//         "under": true,
//         "updatesandoffers": true,
//         "homepagesidebar": true
//     },

//     //'show_keylol_links': false, // not in use, option is commented out
//     'show_package_info': false,
//     'show_steamchart_info': true,
//     'show_steamspy_info': true,
//     'show_early_access': true,
//     'show_alternative_linux_icon': false,
//     'show_itad_button': false,
//     'skip_got_steam': false,

//     'hideaboutlinks': false,
//     'installsteam': "show",
//     'openinnewtab': false,
//     'keepssachecked': false,
//     'showemptywishlist': true,
//     'showusernotes': true,
//     'showwishliststats': true,
//     'user_notes': {},
//     'replaceaccountname': true,
//     'showfakeccwarning': true,
//     'showlanguagewarning': true,
//     'showlanguagewarninglanguage': "english",
//     'homepage_tab_selection': "remember",
//     'homepage_tab_last': null,
//     'send_age_info': true,
//     'mp4video': false,
//     'horizontalscrolling': true,
//     'showsupportinfo': true,
//     'showdrm': true,
//     'regional_hideworld': false,
//     'showinvnav': true,
//     'quickinv': true,
//     'quickinv_diff': -0.01,
//     'community_default_tab': "",
//     'showallachievements': false,
//     'showallstats': true,
//     'showachinstore': true,
//     'showcomparelinks': false,
//     'hideactivelistings': false,
//     'showlowestmarketprice': true,
//     'hidespamcomments': false,
//     'spamcommentregex': "[\\u2500-\\u25FF]",
//     'wlbuttoncommunityapp': true,
//     'removeguideslanguagefilter': false,
//     'disablelinkfilter': false,
//     'showallfriendsthatown': false,
//     'sortfriendsby': "default",
//     'sortreviewsby': "default",
//     'sortgroupsby': "default",
//     'show1clickgoo': true,
//     'show_profile_link_images': "gray",
//     'profile_steamrepcn': true,
//     'profile_steamgifts': true,
//     'profile_steamtrades': true,
//     'profile_bartervg': true,
//     'profile_steamrep': true,
//     'profile_steamdbcalc': true,
//     'profile_astats': true,
//     'profile_backpacktf': true,
//     'profile_astatsnl': true,
//     'profile_steamid': true,
//     'profile_custom_link': [
//         { 'enabled': true, 'name': "Google", 'url': "google.com/search?q=[ID]", 'icon': "www.google.com/images/branding/product/ico/googleg_lodp.ico", },
//     ],
//     'group_steamgifts': true,
//     'steamcardexchange': true,
//     'purchase_dates': true,
//     'show_badge_progress': true,
//     'show_coupon': true,
//     'show_wishlist_link': true,
//     'show_wishlist_count': true,
//     'show_progressbar': true,
//     'show_backtotop': false,

//     'profile_showcase_twitch': true,
//     'profile_showcase_own_twitch': false,
//     'profile_showcase_twitch_profileonly': false,

//     'itad_import_library': false,
//     'itad_import_wishlist': false,
//     'add_to_waitlist': false,

//     'context_steam_store': false,
//     'context_steam_market': false,
//     'context_itad': false,
//     'context_bartervg': false,
//     'context_steamdb': false,
//     'context_steamdb_instant': false,
//     'context_steam_keys': false,
// };


// class ExtensionResources {
//     static getURL(pathname) {
//         return browser.runtime.getURL(pathname);
//     }

//     static get(pathname) {
//         return fetch(ExtensionResources.getURL(pathname));
//     }

//     static getJSON(pathname) {
//         return ExtensionResources.get(pathname).then(r => r.json());
//     }
//     static getText(pathname) {
//         return ExtensionResources.get(pathname).then(r => r.text());
//     }
// }

// /**
//  * DOMPurify setup
//  * @see https://github.com/cure53/DOMPurify
//  */
// (async function() {
//     let allowOpenInNewTab = SyncedStorage.defaults.openinnewtab;
//     try {
//         await SyncedStorage;
//         allowOpenInNewTab = SyncedStorage.get("openinnewtab");
//     } catch(e) {
//         console.error(e);
//     }

//     /**
//      * NOTE FOR ADDON REVIEWER:
//      * We are modifying default DOMPurify settings to allow other protocols in URLs
//      * and to allow links to safely open in new tabs.
//      *
//      * We took the original Regex and aded chrome-extension://, moz-extension:// and steam://
//      * First two are needed for linking local resources from extension,
//      * steam:// protocol is used by Steam store to open their own client (e.g. when you want to launch a game).
//      * 
//      * The addition of the `target` attribute to the allowed attributes is done in order to be able to open links in a new tab.
//      * We only allow target="_blank" while adding rel="noreferrer noopener" to prevent child window to access window.opener
//      * as described in https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/
//      */

//     let purifyConfig = {
//         ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|chrome-extension|moz-extension|steam):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
//     };

//     if (allowOpenInNewTab) {
//         purifyConfig.ADD_ATTR = ["target"];

//         DOMPurify.addHook("uponSanitizeAttribute", (node, data) => {
//             if (data.attrName === "target") {
//                 if (data.attrValue === "_blank") {
//                     node.setAttribute("rel", "noreferrer noopener");
//                 } else {
//                     data.keepAttr = false;
//                 }
//             }
//         });
//     }

//     DOMPurify.setConfig(purifyConfig);
// })();


// class Language {
//     static getCurrentSteamLanguage() {
//         if (this._currentSteamLanguage != null) {
//             return this._currentSteamLanguage;
//         }

//         let nodes = document.querySelectorAll("script[src]");
//         let re = /(?:\?|&(?:amp;)?)l=([^&]+)/;
//         for (let n of nodes) {
//             let src = n.getAttribute("src");
//             let match = src.match(re);
//             if (match) {
//                 this._currentSteamLanguage = match[1];
//                 return this._currentSteamLanguage;
//             }
//         }

//         // In a Content Context, we can check for a cookie
//         if (typeof CookieStorage != 'undefined') {
//             this._currentSteamLanguage = CookieStorage.get("Steam_Language") || null;
//         }

//         return this._currentSteamLanguage;
//     }

//     static getLanguageCode(language) {
//         let code = Language.languages[language];
//         return code ? code : "en";
//     }

//     static isCurrentLanguageOneOf(array) {
//         return array.includes(Language.getCurrentSteamLanguage());
//     }
// }
// Language._currentSteamLanguage = null;
// Language.languages = {
//     "english": "en",
//     "bulgarian": "bg",
//     "czech": "cs",
//     "danish": "da",
//     "dutch": "nl",
//     "finnish": "fi",
//     "french": "fr",
//     "greek": "el",
//     "german": "de",
//     "hungarian": "hu",
//     "italian": "it",
//     "japanese": "ja",
//     "koreana": "ko",
//     "norwegian": "no",
//     "polish": "pl",
//     "portuguese": "pt-PT",
//     "brazilian": "pt-BR",
//     "russian": "ru",
//     "romanian": "ro",
//     "schinese": "zh-CN",
//     "spanish": "es-ES",
//     "latam": "es-419",
//     "swedish": "sv-SE",
//     "tchinese": "zh-TW",
//     "thai": "th",
//     "turkish": "tr",
//     "ukrainian": "ua",
//     "vietnamese": "vi",
// };

  
// class Localization {
//     static loadLocalization(code) {
//         return ExtensionResources.getJSON(`/localization/${code}/strings.json`);
//     }

//     static init() {
//         if (Localization._promise) { return Localization._promise; }

//         let currentSteamLanguage = Language.getCurrentSteamLanguage();
//         let storedSteamLanguage = SyncedStorage.get("language");
//         if (currentSteamLanguage === null) {
//             currentSteamLanguage = storedSteamLanguage;
//         } else {
//             if (currentSteamLanguage !== storedSteamLanguage) {
//                 storedSteamLanguage = currentSteamLanguage;
//                 SyncedStorage.set("language", currentSteamLanguage);
//                 Background.action("clearpurchases");
//             }
//         }

//         function deepAssign(target, source) {
//             // Object.assign() but deep-assigning objects recursively
//             for (let [key, val] of Object.entries(source)) {
//                 if (target[key] === undefined) {
//                     console.warn("The key %s doesn't exist in the English localization file", key);
//                     continue;
//                 }
//                 if (typeof val === "object") {
//                     deepAssign(target[key], val);
//                 } else if (val !== "") {
//                     target[key] = val;
//                 }
//             }
//             return target;
//         }

//         let local = Language.getLanguageCode(currentSteamLanguage);
//         let codes = ["en",];
//         if (local !== null && local !== "en") {
//             codes.push(local);
//         }
//         Localization._promise = Promise.all(
//             codes.map(lc => Localization.loadLocalization(lc))
//         ).then(function([english, local]) {
//             Localization.str = english;
//             if (local) {
//                 deepAssign(Localization.str, local);
//             }
//             return Localization.str;
//         });
//         return Localization._promise;
//     }

//     static then(onDone, onCatch) {
//         return Localization.init().then(onDone, onCatch);
//     }

//     static getString(key) {
//         // Source: http://stackoverflow.com/a/24221895
//         let path = key.split('.').reverse();
//         let current = Localization.str;

//         while (path.length) {
//             if (typeof current !== 'object') {
//                 return undefined;
//             } else {
//                 current = current[path.pop()];
//             }
//         }
//         return current;
//     }
// }
// Localization._promise = null;

// Localization.init();

addNewScript('g_conf_Script', '\
\n\
var gc_multiLanguage = null;\n\
\n\
var g_conf = [\n\
        {steamID: ""\n\
        ,language: "auto_detected" /*语言: 自动检测*/\n\
        ,delay: 4 /*设置你的留言时间间隔,单位秒*/\n\
        ,strNoOperate: "(不留言)" /*设置你的不留言的标识符: 如果不需要留言,则需在备注中添加这个不留言的标识符*/\n\
        ,strRemarkPlaceholder: "{name}" /*设置你的称呼占位符: 同上*/\n\
        \n\
        ,autoLogin: 1 /*没有登录时是否自动跳转到登录页面 (点击确定跳转,点击关闭不跳转)*/\n\
        ,is_Debug: true /*是否是调试模式(总开关,是否显示调试输出,显示当前运行状态)*/\n\
        ,isTrackRunStatus: true /*是否跟踪运行状态(更详细的调试输出,可控型只显示错误警告 到 变量级)*/\n\
        ,isAddYunBreakWarn: true /*是否添加运行中断警告*/\n\
        \n\
        ,YunStatus: false /*当前运行状态(比如正在留言中之类的就是正在运行)*/\n\
        ,isTranslationText: false /*是否进行了翻译*/\n\
        \n\
        ,isWarnInfo: false /*是否出现警告信息(如果没有则不需要清空)*/\n\
        ,isCommentRunStatus: false /*是否正在留言*/\n\
        ,isNationalityRunStatus: false /*是否正在设置国籍*/\n\
        ,isNoCommentRunStatus: false /*是否正在设置不留言*/\n\
        ,isTimeIntervalRunStatus: false /*是否正在设置留言时间间隔*/\n\
        ,isAutoCommentRunStatus: false /*是否正在设置自动留言计划*/\n\
        ,isFriendToGroupRunStatus: false /*是否正在设置好友分组*/\n\
        }\n\
];/* g_conf[0].*/\n\
\n\
\n\
const g_default_configuration = {\n\
        steamID: ""\n\
        ,language: "auto_detected" /*语言: 自动检测*/\n\
        ,delay: 4 /*设置你的留言时间间隔,单位秒*/\n\
        ,strNoOperate: "(不留言)" /*设置你的不留言的标识符: 如果不需要留言,则需在备注中添加这个不留言的标识符*/\n\
        ,strRemarkPlaceholder: "{name}" /*设置你的称呼占位符: 同上*/\n\
        ,autoLogin: 1 /*没有登录时是否自动跳转到登录页面 (点击确定跳转,点击关闭不跳转)*/\n\
        ,isShowQuickNavigationBar: false /*是否显示快速导航栏*/\n\
};\n\
\n\
\n\
const g_debug_info = [\n\
        {\n\
                language: "简体中文"\n\
        },\n\
        {\n\
                language: "English"\n\
        }\n\
];\n\
\n\
/*ui配置相关信息*/\n\
\n\
var g_uiConf = {\n\
        isShowQuickNavigationBar: false /*是否显示快速导航栏*/\n\
        ,isShow_menu_friend: true /*好友列表*/\n\
        ,isShow_menu_activity: true /*动态列表*/\n\
        ,isShow_menu_registerKey: true /*激活key*/\n\
        ,isShow_menu_redeemWalletCode: true /*充值key*/\n\
        ,isShow_menu_steamdbFree: true /*SteamDB预告*/\n\
};/* g_uiConf.*/\n\
\n\
');
/**
 * common.js
 */

//-------------------------------------------------------------------------------------------------------------

/**
 * @summary 使线程进入休眠模式
 * @async
 * @param {UINT} ms 毫秒数
 * @example
 * await sleep(1000); //使当前线程等待1s后继续执行
 */
function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
}
/**
 * @summary 判断页面是移动端还是pc端
 * @return {Boolean} 如果是移动端返回true, 如果是pc端返回false
 */
function opinion() {
        if ((navigator.userAgent.match(
                        /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
                ))) {
                return true; //移动端
        } else {
                return false; //pc端
        }
}
/**
 * @summary 判断是否是非负整数
 * @param {int} val 待判断的整数
 * @return {Boolean} 是则返回true,否则返回false
 */
function isIntNum(val){ //
    var regPos = /^\d+$/; // 非负整数
    if(regPos.test(val)){
        return true;
    }else{
        return false;
    }
}
/**
 * @summary 解析JSON字符串
 * @param {String} jsonText JSON字符串
 * @return {Object} JSON对象
 */
function JSON_processing_parsing_JsObj(jsonText){ //
        var JSON_jsObj;
        if (jsonText == "")
                return;
        
        //console.log("待处理数据:");
        //console.log(jsonText);
        JSON_jsObj = JSON.parse(jsonText);
        console.log("解析后数据:");
        console.log(JSON_jsObj);
        return JSON_jsObj;
}
/**
 * @summary 添加新的CSS样式
 * @param {String} id 新的<style>标签id, 可用于修改和删除等
 * @param {String} newStyle 待添加的CSS样式字符串
 */
function addNewStyle(id, newStyle) {
        var styleElement = document.getElementById(id);

        if (!styleElement) {
                styleElement = document.createElement('style');
                styleElement.type = 'text/css';
                styleElement.id = id;
                document.getElementsByTagName('head')[0].appendChild(styleElement);
        }
        styleElement.appendChild(document.createTextNode(newStyle));
}
/**
 * @summary 添加新的JS脚本
 * @param {String} id 新的<script>标签id, 可用于修改和删除等
 * @param {String} newScript 待添加的JS脚本字符串
 */
function addNewScript(id, newScript) {
        var styleElement = document.getElementById(id);

        if (!styleElement) {
                styleElement = document.createElement('script');
                styleElement.type = 'text/javascript';
                styleElement.id = id;
                document.getElementsByTagName('head')[0].appendChild(styleElement);
        }
        styleElement.appendChild(document.createTextNode(newScript));
}
/**
 * @summary 添加新的JS脚本(拓展)
 * @param {String} id 新的<script>标签id, 可用于修改和删除等
 * @param {String} newScript 待添加的JS脚本字符串
 * @param {String} mode 添加模式(一般来说是<script>标签的格外标识符, 目前有 "async" 和 "defer" )
 */
function addNewScriptEx(id, newScript,mode) {
        var styleElement = document.getElementById(id);
        
        if (!styleElement) {
                styleElement = document.createElement('script');
                styleElement.type = 'text/javascript';
                styleElement.id = id;
                
                if(mode == "async"){
                        styleElement.setAttribute('async');
                }else if(mode == "defer"){
                        styleElement.setAttribute('defer');
                }
                document.getElementsByTagName('head')[0].appendChild(styleElement);
        }
        styleElement.appendChild(document.createTextNode(newScript));
}
/**
 * @summary 添加新的JS模块(实验)
 * @param {String} id 新的<script>标签id, 可用于修改和删除等
 * @param {String} newScript
 */
function addNewModule(id, newScript){
        var styleElement = document.getElementById(id);
        
        if (!styleElement) {
                styleElement = document.createElement('script');
                styleElement.type = 'module';
                styleElement.id = id;
                document.getElementsByTagName('head')[0].appendChild(styleElement);
        }
        styleElement.appendChild(document.createTextNode(newScript));
}
/**
 * 动态加载一个js/css文件, 位于<head>标签最后面新的<script>标签里, 通过src引入指定的url
 * @summary 动态加载一个js/css文件
 * @param {String} filePath 文件路径
 * @param {String} filetype 文件类型
 */
function loadjscssFile(filePath, filetype) {
        if (filetype == "js") {
                var fileref = document.createElement('script')
                fileref.setAttribute("type", "text/javascript")
                fileref.setAttribute("src", filePath)
        } else if (filetype == "css") {
                var fileref = document.createElement("link")
                fileref.setAttribute("rel", "stylesheet")
                fileref.setAttribute("type", "text/css")
                fileref.setAttribute("href", filePath)
        }

        if (typeof fileref != "undefined") {
                document.getElementsByTagName("head")[0].appendChild(fileref); //向元素添加新的子节点,作为最后一个子节点
        }
}
/**
 * 动态加载一个js/css文件(此方法可以添加id和media类型), 位于<head>标签最后面新的<script>标签里, 通过src引入指定的url
 * @summary 动态加载一个js/css文件(拓展)
 * @param {String} filePath  文件路径
 * @param {String} id        节点id
 * @param {String} filetype  文件类型
 */
function loadjscssFile_media(filePath,id, filetype) { //动态加载一个js/css文件
        if (filetype == "js") {
                var fileref = document.createElement('script')
                fileref.setAttribute("type", "text/javascript")
                fileref.setAttribute("src", filePath)
        } else if (filetype == "css") {
                var fileref = document.createElement("link")
                if(id != "" || id != null || id != undefined){
                        fileref.setAttribute("id", id)
                }
                fileref.setAttribute("rel", "stylesheet")
                fileref.setAttribute("type", "text/css")
                fileref.setAttribute("href", filePath)
                fileref.setAttribute("media", "all")
        }

        if (typeof fileref != "undefined") {
                document.getElementsByTagName("head")[0].appendChild(fileref); //向元素添加新的子节点,作为最后一个子节点
        }
}
/**
 * 获取URL对应的资源数据(伪同步, 会阻塞当前线程, 配合 async 和 await 使用)
 * @summary 获取URL对应的资源数据
 * @async
 * @param {String} resourceURL 资源url
 * @param {Boolean} retDataMode 返回的数据方式
 * @return {String} 返回获取到的数据
 */
async function getResourceByURL(resourceURL,retDataMode){
        var retData = null;
        var waitStatus = true;
        
        GM_xmlhttpRequest({
                method: 'GET',
                url: resourceURL,
                headers: {
                        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
                        //'Accept': 'application/atom+xml,application/xml,text/xml',
                        //"Content-Type": "application/x-www-form-urlencoded",
                },
                onload: function(response) {
                        if (response.status === 200) {
                                console.log('getResourceByURL()请求成功!');
                                
                                if(retDataMode == true)
                                        retData = response.responseText;
                                else
                                        retData = response;
                                
                                waitStatus = false; //不等待
                        } else {
                                console.log('getResourceByURL()请求失败! 状态码:' + response.status);
                                //console.log(response);
                                //console.log(response.responseText);
                        }
                },
                onerror: function(err) {
                        console.log('getResourceByURL()请求错误!', err);
                        //waitStatus = false; //不等待
                },
                onabort: function(err) {
                        console.log('getResourceByURL()请求被中止!', err);
                        //waitStatus = false; //不等待
                },
                ontimeout: function(err) {
                        console.log('getResourceByURL()请求超时!', err);
                        //waitStatus = false; //不等待
                }
        });
        
        while (waitStatus){ //强制等待异步函数执行完毕后再执行
                console.log("wait...");
                await sleep(100); //延迟0.1秒
        }
        //console.log(retData);
        return retData;
}

async function getResourceByURL_UsabilitTest(resourceURLs,retDataMode,timeouts){
        var retData = null;
        var waitStatus = true;
        
        GM_xmlhttpRequest({
                method: 'GET',
                url: resourceURL,
                headers: {
                        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
                        //'Accept': 'application/atom+xml,application/xml,text/xml',
                        //"Content-Type": "application/x-www-form-urlencoded",
                },
                timeout: timeouts,
                onload: function(response) {
                        if (response.status === 200) {
                                console.log('getResourceByURL()请求成功!');
                                
                                if(retDataMode == true)
                                        retData = response.responseText;
                                else
                                        retData = response;
                                
                                waitStatus = false; //不等待
                        } else {
                                console.log('getResourceByURL()请求失败! 状态码:' + response.status);
                                //console.log(response);
                                //console.log(response.responseText);
                        }
                },
                onerror: function(err) {
                        console.log('getResourceByURL()请求错误!', err);
                        //waitStatus = false; //不等待
                },
                onabort: function(err) {
                        console.log('getResourceByURL()请求被中止!', err);
                        //waitStatus = false; //不等待
                },
                ontimeout: function(err) {
                        console.log('getResourceByURL()请求超时!', err);
                        //waitStatus = false; //不等待
                },
        });
        
        while (waitStatus){ //强制等待异步函数执行完毕后再执行
                console.log("wait...");
                await sleep(100); //延迟0.1秒
        }
        //console.log(retData);
        return retData;
}

/**
 * @async
 * @param {String} resourceURL 资源url
 */
async function getResourceByURL_original(resourceURL) {
        var retData;
        var waitStatus = true;
        
        jQuery.ajax({
                type: "Get", //请求方式
                //async: false,
                //contentType: "application/json;charset=UTF-8",//请求的媒体类型
                url: resourceURL, //请求地址
                // headers: {
                //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
                //      //'Accept': 'application/atom+xml,application/xml,text/xml',
                //      //"Content-Type": "application/x-www-form-urlencoded",
                // },
                //data: JSON.stringify(list),                           //数据,json字符串
                success: function(result) { //请求成功
                        retData = result;
                        console.log("请求成功了!",retData);
                        //let nIstart = Data.indexOf('StartTradeOffer(');
                        //let nIend = Data.indexOf(');', nIstart);
                        //let AccountID = Data.slice(nIstart + 'StartTradeOffer('.length + 1, nIend - 1);
                        //nIstart = Data.indexOf('"steamid":"');
                        //nIend = Data.indexOf('",', nIstart);
                        //let profileID = Data.slice(nIstart + '"steamid":"'.length, nIend);
                        //console.log("getgetProfilesID() i:", i, "AccountID:", AccountID, "profileID:", profileID);

                        // for (let i = 0; i < waitStatus1.length; i++) {
                        //      if (waitStatus1[i][0] == profileID) //是否是同一个用户
                        //      {
                        //              if (waitStatus1[i][1] == false) //这个用户是否已经获取过了(测试多个相同用户信息的获取)
                        //                      continue;
                        //              waitStatus1[i][1] = false;
                        //              //returnData1.push(AccountID); //存储数据
                        //              returnData1[i] = AccountID; //存储数据到对应的位置(受网络影响,响应顺序可能会不同)
                        //              //console.log("getgetProfilesID() 成功存储数据 AccountID:",AccountID);
                        //              return;
                        //              //console.log("waitStatus1[i][1] break",i,waitStatus1[i][1]);
                        //      }
                        // }
                        // console.log("getgetProfilesID 数据错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        // console.log("waitStatus1:", waitStatus1, 'returnData1:', returnData1);
                        // console.log('profileID:', profileID, 'AccountID:', AccountID);
                        return;
                        //console.log("DBG!",nIstart,nIend);
                },
                error: function(e) { //请求失败,包含具体的错误信息
                        console.log("请求失败了!", e.status);
                        console.log("请求失败了!", e.responseText);
                }
        });
        //console.log("getgetProfilesID() i:",i,"waitStatus1:",waitStatus1);
        while (waitStatus){ //强制等待异步函数执行完毕后再执行
                console.log("wait...");
                await sleep(50); //延迟0.1秒
        }
        //console.log("waitStatus1[i][1]:",waitStatus1[i][1],"returnData1[i]:",returnData1[i]);
        return retData;

        // jQuery.get(URL, {
        //      // "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        //      // // "Content-Type": "application/x-www-form-urlencoded", //非常重要
        //      // "Accept-Encoding": "gzip, deflate, br",
        //      // "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        //      // "Cache-Control": "max-age=0",
        //      // "Connection": "keep-alive",
        //      // "Cookie": "sessionid=6f84a0f48cddb56ad66394b6; steamCountry=HK%7Cda7daa2682f7a361e594f8dad55fe9df; timezoneOffset=28800,0",
        //      // "Host": "steamcommunity.com",
        //      // "Upgrade-Insecure-Requests": "1",
        //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
        // }, function(response) {
        //      if (response.status === 200) {
        //              console.log("获取失败!",response.responseText);
        //      } else {
        //              console.log("获取成功!",response.responseText);
        //      }
        // }).fail(function() {
        //      console.log("无法获取!");
        // }).always(function() {
        //      //console.log("当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.");
        // });
}
//-------------------------------------------------------------------------------------------------------------
function WriteLog() {
        // eslint-disable-next-line no-console
        console.log('%c[SteamDB]%c', 'color:#2196F3; font-weight:bold;', '', ...arguments);
}
//console.log("%c百度2020校园招聘简历提交:http://dwz.cn/XpoFdepe", "color:red"))
//color:#00a1d6

//-------------------------------------------------------------------------------------------------------------

class Arguments {
        static getArgumentsAllValue(argumentsObj) { //解析函数的参数并进行合并为字符串
                let str = "";
                for (let i = 0; i < argumentsObj.length; i++) {
                        str += argumentsObj[i] + " ";
                }
                return str;
        }
        static getArgumentsAllValue_noFunction(argumentsObj) { //解析函数的参数并进行合并为字符串
                let str = "";
                for (let i = 0; i < argumentsObj.length; i++) {
                        if (typeof argumentsObj[i] == 'function') { //如果是函数则跳过
                                continue;
                        }
                        str += argumentsObj[i] + " ";
                }
                return str;
        }
        static getArgumentsAllValueByDebug(argumentsObj) { //解析函数的参数并进行合并为字符串 //返回数组[track,str]
                let str = "";
                let track = "";
                console.log(arguments);
                //console.log(arguments.callee.name);
                for (let i = 0; i < argumentsObj.length; i++) {
                        if (typeof argumentsObj[i] == 'number') { //如果是数字则转为字符串
                                //argumentsObj[i] = argumentsObj[i].toString();
                                str += argumentsObj[i] + " ";
                                continue;
                        }
                        let s = argumentsObj[i].match(/\s*[A-Za-z\$\_][A-Za-z\$\_\.0-9]+\s*\(/);
                        if (s != null) {
                                if (null != s[0]) { //提取出' 函数名 ('这样的字符串
                                        track = s[0].slice(0, -1); //去掉最后的(,得到函数名
                                        let s1 = argumentsObj[i].replace(/\s*[A-Za-z\$\_][A-Za-z\$\_\.0-9]+\s*\(/, ""); //从字符串中删除函数名,然后剩下的部分
                                        str += s1.slice(1, s1.length) + " "; //去掉最前面的),得到提示信息
                                        continue;
                                }
                        }
                        str += argumentsObj[i] + " ";
                }
                return [track, str];
        }
}

//-------------------------------------------------------------------------------------------------------------

/**
 * @class
 * @classdesc 用于输出和记录调试信息的类
 * 
 */
class Log {
         /**
          * @constructs 构造方法(模块名称,调试状态) //默认开启调试
          * @param {String} moduleName 模块名称 (当输出调试信息时会在最前面显示出来)
          * @param {Boolean} debugStatus 调试状态
          */
        constructor(moduleName, debugStatus = true) {
                this.m_moduleNamel = moduleName; //设置模块名称
                this.arrlogContent = []; //日志内容(数组)
                g_conf[0].is_Debug = debugStatus; //设置调试状态
        }
        /**
         *  @param {Boolean} debugStatus 调试状态
         */
        setDebugStatus(debugStatus = true) {
                g_conf[0].is_Debug = debugStatus;
        }
        /**
         * 清除控制台输出
         */
        clear() {
                console.clear();
        }
        /**
         * @param {String} mode 释放资源模式
         */
        release(mode){
                this.arrlogContent = [];
        }
        /**
         * 用于对此类进行测试
         * @param {Object} strTestInfo 需要进行测试输出的字符串
         */
        test(strTestInfo) { //用于对Log类进行输出测试
                if (strTestInfo == undefined)
                        strTestInfo = "默认测试内容";
                log.out("模块名称:", this.m_moduleNamel);
                log.out("是否开启调试:", g_conf[0].is_Debug);
                log.debug(strTestInfo);
                log.info(strTestInfo);
                log.warn(strTestInfo);
                log.error(strTestInfo);
                log.fatal(strTestInfo);
        }
        /**
         * @param {Object} strLog 需要直接输出的字符串
         */
        out(strLog) {
                console.log('%c[' + this.m_moduleNamel + ' out]%c' + Arguments.getArgumentsAllValue(arguments),
                        'color:#000000; font-weight:bold;', 'color:#000000;');
        }
        /**
         * 输出Debug等级的日志信息
         * @param {String} $funcName 需要输出的函数名称
         * @param {String} $strDebugInfo 需要输出的字符串
         */
        //伪重载实现,两种版本
        //log.debug("getArgumentsAllValueByDebug() 111");
        //log.debug(getArgumentsAllValueByDebug,"111");
        debug($funcName, $strDebugInfo) {
                //var This = this;
                //debugger;
                let fontStyle =
                        'font-family:-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;';
                let titleStyle = 'padding: 2px 6px; border-radius: 3px 0 0 3px; background: #606060;color: #fff;' + fontStyle;
                let contentStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #1475b2;color: #fff;' + fontStyle;
                let arr;
                if (typeof $funcName == 'function') { //
                        if (g_conf[0].is_Debug) {
                                //debugger;
                                console.log($funcName);
                                $funcName = '.' + $funcName.name;

                                arr = Arguments.getArgumentsAllValue_noFunction(arguments);
                                console.log('%c[' + this.m_moduleNamel + ' Debug-B]%c' + $funcName + '%c' + arr,
                                        'color:#2196F3; font-weight:bold;', titleStyle, contentStyle);
                        }
                } else {
                        if (g_conf[0].is_Debug) {
                                arr = Arguments.getArgumentsAllValueByDebug(arguments);
                                console.log('%c[' + this.m_moduleNamel + ' Debug-A]%c' + arr[0] + '%c' + arr[1],
                                        'color:#2196F3; font-weight:bold;', titleStyle, contentStyle);
                        }
                }
        }
        /**
         * 输出Info等级的日志信息
         * @param {String} $funcName 需要输出的函数名称
         * @param {String} $strDebugInfo 需要输出的字符串
         */
        info($strLogInfo) {
                if (g_conf[0].is_Debug) {
                        let fontStyle =
                                'font-family:-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;';
                        let titleStyle = 'padding: 2px 6px; border-radius: 3px 0 0 3px; background: #606060;color: #fff;' + fontStyle;
                        let contentStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #42c02e;color: #fff;' + fontStyle;
                        let arr = Arguments.getArgumentsAllValueByDebug(arguments);

                        console.log('%c[' + this.m_moduleNamel + ' Info]%c' + arr[0] + '%c' + arr[1], 'color:#00edc3; font-weight:bold;',
                                titleStyle, contentStyle);
                }
        }
        /**
         * 输出Warn等级的日志信息
         * @param {String} $funcName 需要输出的函数名称
         * @param {String} $strDebugInfo 需要输出的字符串
         */
        warn($strWarnInfo) {
                if (g_conf[0].is_Debug) {
                        let fontStyle =
                                'font-family:-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;';
                        let titleStyle = 'padding: 2px 6px; border-radius: 3px 0 0 3px; background: #606060;color: #fff;' + fontStyle;
                        let contentStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #ff7800;color: #fff;' + fontStyle;
                        let arr = Arguments.getArgumentsAllValueByDebug(arguments);

                        console.log('%c[' + this.m_moduleNamel + ' Warn]%c' + arr[0] + '%c' + arr[1], 'color:#ffa800; font-weight:bold;',
                                titleStyle, contentStyle);
                }
        }
        /**
         * 输出Error等级的日志信息
         * @param {String} $funcName 需要输出的函数名称
         * @param {String} $strDebugInfo 需要输出的字符串
         */
        error($strErrInfo) {
                if (g_conf[0].is_Debug) {
                        let fontStyle =
                                'font-family:-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;';
                        let titleStyle = 'padding: 2px 6px; border-radius: 3px 0 0 3px; background: #606060;color: #fff;' + fontStyle;
                        let contentStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #ff00a2;color: #fff;' + fontStyle;
                        let arr = Arguments.getArgumentsAllValueByDebug(arguments);

                        console.trace('%c[' + this.m_moduleNamel + ' Error]%c' + arr[0] + '%c' + arr[1], 'color:#ff00c0; font-weight:bold;',
                                titleStyle, contentStyle);
                }
        }
        /**
         * 输出Fatal等级的日志信息
         * @param {String} $funcName 需要输出的函数名称
         * @param {String} $strDebugInfo 需要输出的字符串
         */
        fatal($strFatalInfo) {
                if (g_conf[0].is_Debug) {
                        let fontStyle =
                                'font-family:-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;';
                        let titleStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #606060;color: #fff;' + fontStyle;
                        let contentStyle = 'padding: 2px 6px; border-radius: 0 3px 3px 0; background: #ff5252;color: #fff;' + fontStyle;
                        let arr = Arguments.getArgumentsAllValueByDebug(arguments);

                        console.trace('%c[' + this.m_moduleNamel + ' Fatal]%c' + arr[0] + '%c' + arr[1], 'color:#ff0000; font-weight:bold;',
                                titleStyle, contentStyle);
                }
        }
}
var log = new Log("Main");
log.info("Test");
//log.test("Arguments.getArgumentsAllValueByDebug() successed!");
//log.debug("Arguments.getArgumentsAllValueByDebug() 111");
//log.debug(Arguments.getArgumentsAllValueByDebug, "111");

// /**
//  */
// function getRuntimeEnviInfo(){
//      var naObj = window.navigator;
//      document.write("浏览器的信息如下: <hr>");
//      for (var i in naObj) {
//              console.log(i + " : <span style='color:blue;'>" + typeof naObj[i] + '</span><br><span style=\'color:red;\'>' + naObj[i] + "</span><br>");
//      }

// /**
//  */
// function getRuntimeEnviInfo(){
//      var naObj = window.navigator;
//      document.write("浏览器的信息如下: <hr>");
//      for (var i in naObj) {
//              document.write(i + " : <span style='color:blue;'>" + typeof naObj[i] + '</span><br><span style=\'color:red;\'>' + naObj[i] + "</span><br>");
//      }


//      function openWin(url,name,width,height){
//              var str = 'width=' + width + ',height=' + height;
//              return window.open(url,name,str);
//      }

//      function closeWin(winObj){
//              return winObj.close();
//      }
// }


// var textNode = '<div style="z-index: 999;position: relative;"><a href="https://www.baidu.com/" target="newWin">百度</a><button id="open">打开窗口</button><button id="close">关闭窗口</button></div>';

// function createNode(template){
//      var start = Date.now();
//      //var tempNode = document.createElement('div');
//      //tempNode.innerHTML = template;
//      //var node = tempNode;
//      var node = document.createRange().createContextualFragment(textNode);
//      console.log(Date.now() - start);
//      return node;
// }
// document.getElementsByTagName('body')[0].appendChild(createNode(textNode));

// document.getElementById('open').onclick = ()=>{
//      openWin('','newWin',320,240);
// };
// document.getElementById('close').onclick = ()=>{
//      closeWin(newWin);
// };

/**
 * 通知类
 * https://developer.mozilla.org/zh-CN/docs/Web/API/notification/Using_Web_Notifications
 */
class Notifications{
        constructor(arg) {
                this.enabled = true; //是否启用通知
                this.defaultWaitTime = 2000; //通知默认等待时间 (x秒后关闭通知)
        }
        init(){
                // 检查浏览器是否支持通知
                if (!("Notification" in window)) {
                        console.log("此浏览器不支持桌面通知!");
                }
                
                // 检查是否已经授予通知权限
                else if (Notification.permission === "granted") {
                        // 如果用户已经同意了通知权限
                        var notification = new Notification("通知已启用.");
                        return true;
                }
                
                // 否则,需要请求用户的许可
                else if (Notification.permission !== 'denied' || Notification.permission === "default") {
                        Notification.requestPermission(function (permission) {
                                // 如果用户许可了,则创建一个通知进行测试
                                if (permission === "granted") {
                                        var notification = new Notification("通知已启用.");
                                        return true;
                                }
                        });
                }
                return false;
        }
        /**
         * 输出一条通知
         * @param {String} strNotifications
         */
        show(strNotifications){
                if(this.enabled){
                        var notification = new Notification(strNotifications);
                }
                
        }
        /**
         * 设置通知状态
         * @param {Boolean} notificationsStatus 通知状态
         */
        setNotificationsStatus(notificationsStatus = true){
                this.enabled = notificationsStatus;
        }
        /**
         * 设置默认等待时间
         * @param {Number} defaultWaitTime 通知默认等待时间 (x秒后关闭通知)
         */
        setNotificationsDefaultWaitTime(defaultWaitTime = 2000){
                this.defaultWaitTime = defaultWaitTime;
        }
}

/**
 * resource.js
 */
 
class resource {
        constructor(arg) {
                
        }
        async init(type){
                if(type) //第一次加载才需要加载资源
                        await this._loadResource(type);  //加载资源
        }
        
        async _loadResource(type){ //加载资源
                if(type) //第一次加载才需要加载基础资源
                        await this._loadBaseResources(); //加载基础资源
        }
        
        async _loadBaseResources(){ //加载基础资源
                let arr = [];
                var arrjsData = new Array(5);
                
                arr.push(new Promise(async function (resolve, reject){
                        if(document.readyState == "loading"){
                                document.addEventListener("DOMContentLoaded", function(event) {
                                        //console.log("DOM fully loaded and parsed");
                                        // if(gc_menu_friends_ui.loadProgress < 9) //资源是否已经加载完毕(已缓存),如果加载完成则不需要显示加载UI
                                        // {
                                        //      gc_menu_friends_ui.showLoadUI();
                                        //      gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                                        //      gc_menu_friends_ui.isDomLoaded = true;
                                        // }
                                        resolve('DOM fully loaded') // 数据处理完成
                                        // reject('失败') // 数据处理出错
                                });
                        }
                        else{ //document.readyState == "interactive" || document.readyState == "complete"
                                resolve('DOM advance loaded(possible)') // 数据处理完成
                        }
                }));
                
                debugger
                
                var resList = getResConfByID("BaseResources"); //通过资源id获取对应的资源列表, 返回资源列表数组 resInfo
                for (let i = 0; i < resList.length; i++) { //遍历所有的资源
                        var resChildList = resList[i].res;
                        for (let j = 0; j < resChildList.length; j++) { //遍历每个资源的res
                                
                                if(resChildList[j].isFight == true){
                                        
                                }
                                else{
                                        switch (resChildList[j].resMode){
                                                case _RESMODE.res_Tampermonkey:
                                                        arr.push(new Promise(async function (resolve, reject){
                                                                var resData = GM_getResourceText(resChildList[j].sourceInfo[0]);
                                                                if(_RESTYPE.res_css == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                resData = resChildList[j].onSucceed(resData);
                                                                        addNewStyle(resList[i].resName, resData);
                                                                }
                                                                else if(_RESTYPE.res_js == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                resData = resChildList[j].onSucceed(resData);
                                                                        addNewScript(resList[i].resName, resData);
                                                                }
                                                        
                                                                resolve(resList[i].resName) // 数据处理完成
                                                                // reject('失败') // 数据处理出错
                                                        }));
                                                        break;
                                                case _RESMODE.res_CDN:
                                                        arr.push(new Promise(async function (resolve, reject){
                                                                let URLs =  resChildList[j].sourceInfo;
                                                                var resData;
                                                                for (let i = 0; i < URLs.length; i++) {
                                                                        //loadjscssFile("https://www.layuicdn.com/layui-v2.5.6/layui.all.js","js");
                                                                        resData = await getResourceByURL(URLs[i],true); //
                                                                }
                                                                //console.log("数据获取成果",resData);
                                                                if(_RESTYPE.res_css == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                resData = resChildList[j].onSucceed(resData);
                                                                        addNewStyle(resList[i].resName, resData);
                                                                }
                                                                else if(_RESTYPE.res_js == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                resData = resChildList[j].onSucceed(resData);
                                                                        addNewScript(resList[i].resName, resData);
                                                                }
                                                                
                                                                resolve(resList[i].resName) // 数据处理完成
                                                                // reject('失败') // 数据处理出错
                                                        }));
                                                        break;
                                                case _RESMODE.res_LocalVariables:
                                                        arr.push(new Promise(async function (resolve, reject){
                                                                if(_RESTYPE.res_css == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                eval(resChildList[j].sourceInfo[0]) = resChildList[j].onSucceed( eval(resChildList[j].sourceInfo[0]) );
                                                                        addNewStyle(resList[i].resName, eval(resChildList[j].sourceInfo[0]));
                                                                }
                                                                else if(_RESTYPE.res_js == resChildList[j].resType){
                                                                        if(resChildList[j].onSucceed != null && typeof(resChildList[j].onSucceed) === 'function')
                                                                                eval(resChildList[j].sourceInfo[0]) = resChildList[j].onSucceed( eval(resChildList[j].sourceInfo[0]) );
                                                                        addNewScript(resList[i].resName, eval(resChildList[j].sourceInfo[0]));
                                                                }
                                                                resolve(resList[i].resName) // 数据处理完成
                                                                // reject('失败') // 数据处理出错
                                                        }));
                                                        break;
                                                default:
                                                        
                                                        break;
                                        }
                                }
                        }
                }
                
                
                // arr.push(new Promise(async function (resolve, reject){
                //      // //var cssData = await getResourceByURL("https://www.layuicdn.com/layui-v2.5.6/css/layui.css",true);
                //      // //addNewStyle('layui_style',cssData);
                //      // loadjscssFile_media("https://www.layuicdn.com/layui-v2.5.6/css/layui.css",null, "css");
                //      let css = GM_getResourceText('css_layui');
                //      addNewStyle('css_layui',css);
                //      resolve('css_layui') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      // loadjscssFile_media("https://www.layuicdn.com/layui-v2.5.6/css/modules/laydate/default/laydate.css?v=5.0.9", "layuicss-laydate", "css");
                //      let css = GM_getResourceText('css_laydate');
                //      addNewStyle('css_laydate',css);
                //      resolve('css_laydate') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      // loadjscssFile_media("https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/layer.css?v=3.1.1", "layuicss-layer", "css");
                //      let css = GM_getResourceText('css_layer');
                //      addNewStyle('css_layer',css);
                //      resolve('css_layer') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      // loadjscssFile_media("https://www.layuicdn.com/layui-v2.5.6/css/modules/code.css", "layuicss-skincodecss", "css");
                //      let css = GM_getResourceText('css_layui_Modules');
                //      addNewStyle('css_layui_Modules',css);
                //      resolve('css_layui_Modules') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      // //font-awesome
                //      // loadjscssFile("https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css", "css");
                //      let css = GM_getResourceText('css_fontAwesome');
                //      addNewStyle('css_fontAwesome',css);
                //      resolve('css_fontAwesome') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                        
                //0.基本环境-加载css
                arr.push(new Promise(function (resolve, reject){
                
                        addNewStyle('styles_js1',
                                "/*layui.css*/\
                                @font-face {\
                                font-family: layui-icon;\
                                src: url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.eot?v=256);\
                                src: url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.woff2?v=256) format('woff2'),url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.woff?v=256) format('woff'),url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.ttf?v=256) format('truetype'),url(https://www.layuicdn.com/layui-v2.5.6/font/iconfont.svg?v=256#layui-icon) format('svg')\
                                }\
                                /*layer.css?v=3.1.1*/\
                                .layui-layer-load {\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/loading-1.gif) center center no-repeat #eee\
                                }\
                                \
                                .layui-layer-ico {\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/icon.png) no-repeat\
                                }\
                                \
                                .layui-layer-loading .layui-layer-content {\
                                        width: 60px;\
                                        height: 24px;\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/loading-0.gif) no-repeat\
                                }\
                                \
                                .layui-layer-loading .layui-layer-loading1 {\
                                        width: 37px;\
                                        height: 37px;\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/loading-1.gif) no-repeat\
                                }\
                                \
                                .layui-layer-ico16,.layui-layer-loading .layui-layer-loading2 {\
                                        width: 32px;\
                                        height: 32px;\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/loading-2.gif) no-repeat\
                                }\
                                \
                                .layui-layer-iconext {\
                                        background: url(https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/icon-ext.png) no-repeat\
                                }\
                                /*font-awesome.min.css*/\
                                @font-face{\
                                        font-family:'FontAwesome';src:url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.eot?v=4.7.0');src:url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('https://cdn.bootcss.com/font-awesome/4.7.0/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal\
                                }\
                                "
                        ); /* 覆盖layui的css字体加载路径,改为在线资源路径而不是相对路径 */
                
                        //覆盖layui的css
                        addNewStyle('styles_js0',
                                'a {\
                                        color:#ebebeb;\
                                        text-decoration: none;\
                                }\
                                a:hover {\
                                        color: #aaa\
                                }\
                                .layui-form-checkbox[lay-skin=primary] span{\
                                        color: #ebebeb;\
                                }\
                                .layui-checkbox-disbaled[lay-skin=primary] span{\
                                        color: #999;\
                                }\
                                .layui-tab-brief>.layui-tab-title .layui-this {\
                                        color: #01e0cb;\
                                }\
                                '
                        ); /* 覆盖layui的css样式 */
                        //gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                        resolve('css') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                
                // //1.基本环境-加载js到页面上,方便调试
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_highstock')
                //      addNewScript('JS_highstock',js);
                //      resolve('JS_highstock') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_highstock_exporting')
                //      addNewScript('JS_highstock_exporting',js);
                //      resolve('JS_highstock_exporting') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_highstock_oldie')
                //      addNewScript('JS_highstock_oldie',js);
                //      resolve('JS_highstock_oldie') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_highstock_networkgraph')
                //      addNewScript('JS_highstock_networkgraph',js);
                //      resolve('JS_highstock_networkgraph') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_highstock_zh_CN')
                //      addNewScript('JS_highstock_zh_CN',js);
                //      resolve('JS_highstock_zh_CN') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_layui');
                //      //对 o.prototype.addcss 打补丁,使其直接return this, 而不是去加载css, css通过脚本欲加载的资源手动添加
                //      var findStr = 'layui.link(n.dir+"css/"+e,t,o)';
                //      var index = js.indexOf(findStr); //查找代补丁代码的位置
                //      var fixJS = js.slice(0,index); //提取 代补丁代码前部分
                //      fixJS += 'this'; //添加 补丁代码
                //      fixJS += js.slice(index+findStr.length); //提取 代补丁代码后部分
                //      addNewScript('JS_layui',fixJS);
                //      resolve('JS_layui') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      let js = GM_getResourceText('JS_localforage');
                //      addNewScript('JS_localforage',js);
                //      resolve('JS_localforage') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://www.layuicdn.com/layui-v2.5.6/layui.all.js","js");
                //      var jsData = await getResourceByURL("https://www.layuicdn.com/layui-v2.5.6/layui.all.js",true); //
                //      //console.log("数据获取成果",jsData);
                //      addNewScript('layui_Script', jsData);
                //      //console.log("layui_Script success.");
                //      gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                //      resolve('layui') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://cdnjs.cloudflare.com/ajax/libs/localforage/1.7.3/localforage.min.js","js");
                //      var jsData = await getResourceByURL("https://cdnjs.cloudflare.com/ajax/libs/localforage/1.7.3/localforage.min.js",true);
                //      //console.log("数据获取成果",jsData);
                //      addNewScript('localforage_Script', jsData);
                //      //console.log("localforage_Script success.");
                //      gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                //      resolve('localforage') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://code.highcharts.com.cn/highstock/highstock.js","js");
                //      var jsData = await getResourceByURL("https://code.highcharts.com.cn/highstock/highstock.js",true);
                //      //console.log("数据获取成果",jsData);
                //      addNewScript('highstock_Script', jsData);
                //      //console.log("highstock_Script success.");
                //      gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                //      resolve('highstock') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://code.highcharts.com.cn/highcharts/modules/exporting.js","js");
                //      arrjsData[1] = await getResourceByURL("https://code.highcharts.com.cn/highcharts/modules/exporting.js",true);
                //      //console.log("数据获取成果",jsData);
                //      resolve('highcharts exporting') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://code.highcharts.com.cn/highcharts/modules/oldie.js","js");
                //      arrjsData[2] = await getResourceByURL("https://code.highcharts.com.cn/highcharts/modules/oldie.js",true);
                //      //console.log("数据获取成果",jsData);
                //      resolve('highcharts oldie') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://code.highcharts.com.cn/highcharts/modules/networkgraph.js","js");
                //      arrjsData[3] = await getResourceByURL("https://code.highcharts.com.cn/highcharts/modules/networkgraph.js",true);
                //      //console.log("数据获取成果",jsData);
                //      resolve('highcharts networkgraph') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                // arr.push(new Promise(async function (resolve, reject){
                //      //loadjscssFile("https://code.highcharts.com.cn/highcharts-plugins/highcharts-zh_CN.js","js");
                //      arrjsData[4] = await getResourceByURL("https://code.highcharts.com.cn/highcharts-plugins/highcharts-zh_CN.js",true);
                //      //console.log("数据获取成果",jsData);
                //      resolve('highcharts zh_CN') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                
                arr.push(new Promise(async function (resolve, reject){
                        addNewStyle('styles_js',
                                '::selection {color:#000;background: #35d5ff;}\
                                        #addFriendToGroup,#unaddFriendToGroup,#setTimeInterval,#unsetTimeInterval,#setNoLeave,#unsetNoLeave,#addCustomName,#translationText,#setNationality,#unsetNationality,#NationalityGroup,#NationalitySortGroup,#OfflineTimeGroup,#ShowFriendData {font-family: "Motiva Sans", Sans-serif;font-weight: 300;\
                                        padding: 2px 5px;border:0;outline:0;border-radius: 2px;color: #67c1f5 !important;background: rgba(0, 0, 0, 0.5 );}\
                                        .persona.offline, a.persona.offline, .persona.offline.a {color:#ccc;}\
                                        .persona, a.persona, .persona a, .friend_status_offline, .friend_status_offline div, .friend_status_offline a {color:#ccc;}\
                                        .player_nickname_hint {color:#ccc;}\
                                        #addFriendToGroup:hover,#unaddFriendToGroup:hover,#setTimeInterval:hover,#unsetTimeInterval:hover,#setNoLeave:hover,#unsetNoLeave:hover,#addCustomName:hover,#translationText:hover,#setNationality:hover,#unsetNationality:hover,#NationalityGroup:hover,#NationalitySortGroup:hover,#OfflineTimeGroup:hover,#ShowFriendData:hover {background-color: #0a6aa1;color: #fff !important;cursor: pointer;}'
                        ); /* 选择的文本 */
                        addNewStyle('styles1_js',fs_css); /* 选择的文本 */
                        
                        injectJS();
                        
                        //gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                        resolve('css js') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                
                // arr.push(new Promise(async function (resolve, reject){
                //      addNewStyle('css_jquery_localizationTool',jquery_localizationTool); /* 选择的文本 */
                        
                //      let js = GM_getResourceText('Jquery_localizationtool');
                //      addNewScript('js_jquery_localizationTool',js);
                        
                //      //gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                //      resolve('jquery localizationTool') // 数据处理完成
                //      // reject('失败') // 数据处理出错
                // }));
                
                let res = await Promise.all(arr);
                
                // addNewScript('highcharts_exporting_Script', arrjsData[1]);
                // //console.log("highcharts_exporting_Script success.");
                // gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                
                // addNewScript('highcharts_oldie_Script', arrjsData[2]);
                // //console.log("highcharts_oldie_Script success.");
                // gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                
                // addNewScript('highcharts_networkgraph_Script', arrjsData[3]);
                // //console.log("highcharts_networkgraph_Script success.");
                // gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                
                // addNewScript('highcharts_zh_CN_Script', arrjsData[4]);
                // //console.log("highcharts_zh_CN_Script success.");
                // gc_menu_friends_ui.loadTextChange(true); //改变当前加载进度
                
                // if(!gc_menu_friends_ui.remoreLoadUI()){//移除加载UI
                //      console.log("remoreLoadUI() 失败!");
                // }
                console.log("ret:",res);
        }
        
        async _loadDrawResources(){ //加载绘制资源
                let arr = [];
                var arrjsData = new Array(5);
                        
                arr.push(new Promise(async function (resolve, reject){
                        let js = GM_getResourceText('JS_draw');
                        addNewScript('JS_draw',js);
                        resolve('JS_draw') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                arr.push(new Promise(async function (resolve, reject){
                        let js = GM_getResourceText('JS_animate');
                        addNewScript('JS_animate',js);
                        resolve('JS_animate') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                arr.push(new Promise(async function (resolve, reject){
                        let js = GM_getResourceText('JS_sound');
                        addNewScript('JS_sound',js);
                        resolve('JS_sound') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                arr.push(new Promise(async function (resolve, reject){
                        let js = GM_getResourceText('JS_render');
                        addNewScript('JS_render',js);
                        resolve('JS_render') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                arr.push(new Promise(async function (resolve, reject){
                        let js = GM_getResourceText('JS_multithreading');
                        addNewScript('JS_multithreading',js);
                        resolve('JS_multithreading') // 数据处理完成
                        // reject('失败') // 数据处理出错
                }));
                
                let res = await Promise.all(arr);
                
                console.log("ret:",res);
        }
}

var fs_css = '\
.fs-wrap {\n\
        position: relative;\n\
        display: inline-block;\n\
        vertical-align: bottom;\n\
        width: 200px;\n\
        margin: 3px;\n\
        font-size: 12px;\n\
        line-height: 1\n\
}\n\
\n\
.fs-label-wrap {\n\
        position: relative;\n\
        border: 1px solid #34DEFF;\n\
        cursor: default;\n\
        color: #66ccff;\n\
        border-radius: 4px;\n\
        box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)\n\
}\n\
\n\
.fs-label-wrap,\n\
.fs-dropdown {\n\
        -webkit-user-select: none;\n\
        -moz-user-select: none;\n\
        -ms-user-select: none;\n\
        user-select: none\n\
}\n\
\n\
.fs-label-wrap .fs-label {\n\
        padding: 4px 22px 4px 8px;\n\
        text-overflow: ellipsis;\n\
        white-space: nowrap;\n\
        overflow: hidden;\n\
        cursor: pointer\n\
}\n\
\n\
.fs-arrow {\n\
        width: 0;\n\
        height: 0;\n\
        border-left: 4px solid transparent;\n\
        border-right: 4px solid transparent;\n\
        border-top: 6px solid #fff;\n\
        position: absolute;\n\
        top: 0;\n\
        right: 4px;\n\
        bottom: 0;\n\
        margin: auto;\n\
        cursor: pointer\n\
}\n\
\n\
.fs-dropdown {\n\
        position: absolute;\n\
        background-color: #3E9AC6;\n\
        border: 1px solid #000;\n\
        width: 100%;\n\
        z-index: 1000;\n\
        border-radius: 4px\n\
}\n\
\n\
.fs-dropdown .fs-options {\n\
        max-height: 200px;\n\
        overflow: auto\n\
}\n\
\n\
.fs-search input {\n\
        width: 90%;\n\
        padding: 2px 4px;\n\
        border: 0\n\
        outline: 0;\n\
}\n\
\n\
.fs-selectAll {\n\
        float: right;\n\
        cursor: pointer;\n\
        margin-top: 4px;\n\
        height: auto\n\
}\n\
\n\
.fs-selectAll.selected {\n\
        float: right;\n\
        cursor: pointer;\n\
        margin-top: 4px;\n\
        height: auto;\n\
        color: green\n\
}\n\
\n\
.fs-selectAll:hover {\n\
        background-color: #35d5ff\n\
}\n\
\n\
.fs-option,\n\
.fs-search,\n\
.fs-optgroup-label {\n\
        padding: 6px 8px;\n\
        border-bottom: 1px solid #eee;\n\
        cursor: default\n\
}\n\
\n\
.fs-option {cursor: pointer}\n\
.fs-option.hl {\n\
        background-color: #f5f5f5\n\
}\n\
\n\
.fs-wrap.multiple .fs-option {\n\
        position: relative;\n\
        padding-left: 30px\n\
}\n\
\n\
.fs-wrap.multiple .fs-checkbox {\n\
        position: absolute;\n\
        display: block;\n\
        width: 30px;\n\
        top: 0;\n\
        left: 0;\n\
        bottom: 0\n\
}\n\
\n\
.fs-wrap.multiple .fs-option .fs-checkbox i {\n\
        position: absolute;\n\
        margin: auto;\n\
        left: 0;\n\
        right: 0;\n\
        top: 0;\n\
        bottom: 0;\n\
        width: 14px;\n\
        height: 14px;\n\
        border: 1px solid #aeaeae;\n\
        border-radius: 4px;\n\
        background-color: #fff\n\
}\n\
\n\
.fs-wrap.multiple .fs-option.selected .fs-checkbox i {\n\
        background-color: #11a911;\n\
        border-color: transparent;\n\
        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAABMSURBVAiZfc0xDkAAFIPhd2Kr1WRjcAExuIgzGUTIZ/AkImjSofnbNBAfHvzAHjOKNzhiQ42IDFXCDivaaxAJd0xYshT3QqBxqnxeHvhunpu23xnmAAAAAElFTkSuQmCC);\n\
        background-repeat: no-repeat;\n\
        background-position: center\n\
}\n\
\n\
.fs-wrap .fs-option:hover {\n\
        background: #48E3FF;\n\
        border-radius: 4px;\n\
        margin-left: 2px;\n\
        margin-right: 2px\n\
}\n\
\n\
.fs-optgroup-label {font-weight: 700}\n\
\n\
.hidden {display: none}\n\
\n\
.fs-options::-webkit-scrollbar {width: 6px}\n\
\n\
.fs-options::-webkit-scrollbar-track {\n\
        -webkit-border-radius: 2em;\n\
        -moz-border-radius: 2em;\n\
        border-radius: 2em;\n\
        -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, .2);\n\
        background: rgba(0, 0, 0, .1)\n\
}\n\
\n\
.fs-options::-webkit-scrollbar-thumb {\n\
        -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, .2);\n\
        background: rgba(0, 0, 0, .2);\n\
        -webkit-border-radius: 2em;\n\
        -moz-border-radius: 2em;\n\
        border-radius: 2em\n\
}\n\
';

var jquery_localizationTool_css = '\
.flag {\n\
  width: 16px;\n\
  height: 11px;\n\
  background: url(flags.png) no-repeat;\n\
}\n\
.flag.flag-ad {\n\
  background-position: -16px 0;\n\
}\n\
.flag.flag-ae {\n\
  background-position: -32px 0;\n\
}\n\
.flag.flag-af {\n\
  background-position: -48px 0;\n\
}\n\
.flag.flag-ag {\n\
  background-position: -64px 0;\n\
}\n\
.flag.flag-ai {\n\
  background-position: -80px 0;\n\
}\n\
.flag.flag-al {\n\
  background-position: -96px 0;\n\
}\n\
.flag.flag-am {\n\
  background-position: -112px 0;\n\
}\n\
.flag.flag-an {\n\
  background-position: -128px 0;\n\
}\n\
.flag.flag-ao {\n\
  background-position: -144px 0;\n\
}\n\
.flag.flag-ar {\n\
  background-position: -160px 0;\n\
}\n\
.flag.flag-as {\n\
  background-position: -176px 0;\n\
}\n\
.flag.flag-at {\n\
  background-position: -192px 0;\n\
}\n\
.flag.flag-au {\n\
  background-position: -208px 0;\n\
}\n\
.flag.flag-aw {\n\
  background-position: -224px 0;\n\
}\n\
.flag.flag-az {\n\
  background-position: -240px 0;\n\
}\n\
.flag.flag-ba {\n\
  background-position: 0 -11px;\n\
}\n\
.flag.flag-bb {\n\
  background-position: -16px -11px;\n\
}\n\
.flag.flag-bd {\n\
  background-position: -32px -11px;\n\
}\n\
.flag.flag-be {\n\
  background-position: -48px -11px;\n\
}\n\
.flag.flag-bf {\n\
  background-position: -64px -11px;\n\
}\n\
.flag.flag-bg {\n\
  background-position: -80px -11px;\n\
}\n\
.flag.flag-bh {\n\
  background-position: -96px -11px;\n\
}\n\
.flag.flag-bi {\n\
  background-position: -112px -11px;\n\
}\n\
.flag.flag-bj {\n\
  background-position: -128px -11px;\n\
}\n\
.flag.flag-bm {\n\
  background-position: -144px -11px;\n\
}\n\
.flag.flag-bn {\n\
  background-position: -160px -11px;\n\
}\n\
.flag.flag-bo {\n\
  background-position: -176px -11px;\n\
}\n\
.flag.flag-br {\n\
  background-position: -192px -11px;\n\
}\n\
.flag.flag-bs {\n\
  background-position: -208px -11px;\n\
}\n\
.flag.flag-bt {\n\
  background-position: -224px -11px;\n\
}\n\
.flag.flag-bv {\n\
  background-position: -240px -11px;\n\
}\n\
.flag.flag-bw {\n\
  background-position: 0 -22px;\n\
}\n\
.flag.flag-by {\n\
  background-position: -16px -22px;\n\
}\n\
.flag.flag-bz {\n\
  background-position: -32px -22px;\n\
}\n\
.flag.flag-ca {\n\
  background-position: -48px -22px;\n\
}\n\
.flag.flag-catalonia {\n\
  background-position: -64px -22px;\n\
}\n\
.flag.flag-cd {\n\
  background-position: -80px -22px;\n\
}\n\
.flag.flag-cf {\n\
  background-position: -96px -22px;\n\
}\n\
.flag.flag-cg {\n\
  background-position: -112px -22px;\n\
}\n\
.flag.flag-ch {\n\
  background-position: -128px -22px;\n\
}\n\
.flag.flag-ci {\n\
  background-position: -144px -22px;\n\
}\n\
.flag.flag-ck {\n\
  background-position: -160px -22px;\n\
}\n\
.flag.flag-cl {\n\
  background-position: -176px -22px;\n\
}\n\
.flag.flag-cm {\n\
  background-position: -192px -22px;\n\
}\n\
.flag.flag-cn {\n\
  background-position: -208px -22px;\n\
}\n\
.flag.flag-co {\n\
  background-position: -224px -22px;\n\
}\n\
.flag.flag-cr {\n\
  background-position: -240px -22px;\n\
}\n\
.flag.flag-cu {\n\
  background-position: 0 -33px;\n\
}\n\
.flag.flag-cv {\n\
  background-position: -16px -33px;\n\
}\n\
.flag.flag-cw {\n\
  background-position: -32px -33px;\n\
}\n\
.flag.flag-cy {\n\
  background-position: -48px -33px;\n\
}\n\
.flag.flag-cz {\n\
  background-position: -64px -33px;\n\
}\n\
.flag.flag-de {\n\
  background-position: -80px -33px;\n\
}\n\
.flag.flag-dj {\n\
  background-position: -96px -33px;\n\
}\n\
.flag.flag-dk {\n\
  background-position: -112px -33px;\n\
}\n\
.flag.flag-dm {\n\
  background-position: -128px -33px;\n\
}\n\
.flag.flag-do {\n\
  background-position: -144px -33px;\n\
}\n\
.flag.flag-dz {\n\
  background-position: -160px -33px;\n\
}\n\
.flag.flag-ec {\n\
  background-position: -176px -33px;\n\
}\n\
.flag.flag-ee {\n\
  background-position: -192px -33px;\n\
}\n\
.flag.flag-eg {\n\
  background-position: -208px -33px;\n\
}\n\
.flag.flag-eh {\n\
  background-position: -224px -33px;\n\
}\n\
.flag.flag-england {\n\
  background-position: -240px -33px;\n\
}\n\
.flag.flag-er {\n\
  background-position: 0 -44px;\n\
}\n\
.flag.flag-es {\n\
  background-position: -16px -44px;\n\
}\n\
.flag.flag-esperanto {\n\
  background-position: -192px -165px;\n\
}\n\
.flag.flag-et {\n\
  background-position: -32px -44px;\n\
}\n\
.flag.flag-eu {\n\
  background-position: -48px -44px;\n\
}\n\
.flag.flag-fi {\n\
  background-position: -64px -44px;\n\
}\n\
.flag.flag-fj {\n\
  background-position: -80px -44px;\n\
}\n\
.flag.flag-fk {\n\
  background-position: -96px -44px;\n\
}\n\
.flag.flag-fm {\n\
  background-position: -112px -44px;\n\
}\n\
.flag.flag-fo {\n\
  background-position: -128px -44px;\n\
}\n\
.flag.flag-fr {\n\
  background-position: -144px -44px;\n\
}\n\
.flag.flag-ga {\n\
  background-position: -160px -44px;\n\
}\n\
.flag.flag-gb {\n\
  background-position: -176px -44px;\n\
}\n\
.flag.flag-gd {\n\
  background-position: -192px -44px;\n\
}\n\
.flag.flag-ge {\n\
  background-position: -208px -44px;\n\
}\n\
.flag.flag-gf {\n\
  background-position: -224px -44px;\n\
}\n\
.flag.flag-gg {\n\
  background-position: -240px -44px;\n\
}\n\
.flag.flag-gh {\n\
  background-position: 0 -55px;\n\
}\n\
.flag.flag-gi {\n\
  background-position: -16px -55px;\n\
}\n\
.flag.flag-gl {\n\
  background-position: -32px -55px;\n\
}\n\
.flag.flag-gm {\n\
  background-position: -48px -55px;\n\
}\n\
.flag.flag-gn {\n\
  background-position: -64px -55px;\n\
}\n\
.flag.flag-gp {\n\
  background-position: -80px -55px;\n\
}\n\
.flag.flag-gq {\n\
  background-position: -96px -55px;\n\
}\n\
.flag.flag-gr {\n\
  background-position: -112px -55px;\n\
}\n\
.flag.flag-gs {\n\
  background-position: -128px -55px;\n\
}\n\
.flag.flag-gt {\n\
  background-position: -144px -55px;\n\
}\n\
.flag.flag-gu {\n\
  background-position: -160px -55px;\n\
}\n\
.flag.flag-gw {\n\
  background-position: -176px -55px;\n\
}\n\
.flag.flag-gy {\n\
  background-position: -192px -55px;\n\
}\n\
.flag.flag-hk {\n\
  background-position: -208px -55px;\n\
}\n\
.flag.flag-hm {\n\
  background-position: -224px -55px;\n\
}\n\
.flag.flag-hn {\n\
  background-position: -240px -55px;\n\
}\n\
.flag.flag-hr {\n\
  background-position: 0 -66px;\n\
}\n\
.flag.flag-ht {\n\
  background-position: -16px -66px;\n\
}\n\
.flag.flag-hu {\n\
  background-position: -32px -66px;\n\
}\n\
.flag.flag-ic {\n\
  background-position: -48px -66px;\n\
}\n\
.flag.flag-id {\n\
  background-position: -64px -66px;\n\
}\n\
.flag.flag-ie {\n\
  background-position: -80px -66px;\n\
}\n\
.flag.flag-il {\n\
  background-position: -96px -66px;\n\
}\n\
.flag.flag-im {\n\
  background-position: -112px -66px;\n\
}\n\
.flag.flag-in {\n\
  background-position: -128px -66px;\n\
}\n\
.flag.flag-io {\n\
  background-position: -144px -66px;\n\
}\n\
.flag.flag-iq {\n\
  background-position: -160px -66px;\n\
}\n\
.flag.flag-ir {\n\
  background-position: -176px -66px;\n\
}\n\
.flag.flag-is {\n\
  background-position: -192px -66px;\n\
}\n\
.flag.flag-it {\n\
  background-position: -208px -66px;\n\
}\n\
.flag.flag-je {\n\
  background-position: -224px -66px;\n\
}\n\
.flag.flag-jm {\n\
  background-position: -240px -66px;\n\
}\n\
.flag.flag-jo {\n\
  background-position: 0 -77px;\n\
}\n\
.flag.flag-jp {\n\
  background-position: -16px -77px;\n\
}\n\
.flag.flag-ke {\n\
  background-position: -32px -77px;\n\
}\n\
.flag.flag-kg {\n\
  background-position: -48px -77px;\n\
}\n\
.flag.flag-kh {\n\
  background-position: -64px -77px;\n\
}\n\
.flag.flag-ki {\n\
  background-position: -80px -77px;\n\
}\n\
.flag.flag-km {\n\
  background-position: -96px -77px;\n\
}\n\
.flag.flag-kn {\n\
  background-position: -112px -77px;\n\
}\n\
.flag.flag-kp {\n\
  background-position: -128px -77px;\n\
}\n\
.flag.flag-kr {\n\
  background-position: -144px -77px;\n\
}\n\
.flag.flag-kurdistan {\n\
  background-position: -160px -77px;\n\
}\n\
.flag.flag-kw {\n\
  background-position: -176px -77px;\n\
}\n\
.flag.flag-ky {\n\
  background-position: -192px -77px;\n\
}\n\
.flag.flag-kz {\n\
  background-position: -208px -77px;\n\
}\n\
.flag.flag-la {\n\
  background-position: -224px -77px;\n\
}\n\
.flag.flag-lb {\n\
  background-position: -240px -77px;\n\
}\n\
.flag.flag-lc {\n\
  background-position: 0 -88px;\n\
}\n\
.flag.flag-li {\n\
  background-position: -16px -88px;\n\
}\n\
.flag.flag-lk {\n\
  background-position: -32px -88px;\n\
}\n\
.flag.flag-lr {\n\
  background-position: -48px -88px;\n\
}\n\
.flag.flag-ls {\n\
  background-position: -64px -88px;\n\
}\n\
.flag.flag-lt {\n\
  background-position: -80px -88px;\n\
}\n\
.flag.flag-lu {\n\
  background-position: -96px -88px;\n\
}\n\
.flag.flag-lv {\n\
  background-position: -112px -88px;\n\
}\n\
.flag.flag-ly {\n\
  background-position: -128px -88px;\n\
}\n\
.flag.flag-ma {\n\
  background-position: -144px -88px;\n\
}\n\
.flag.flag-mc {\n\
  background-position: -160px -88px;\n\
}\n\
.flag.flag-md {\n\
  background-position: -176px -88px;\n\
}\n\
.flag.flag-me {\n\
  background-position: -192px -88px;\n\
}\n\
.flag.flag-mg {\n\
  background-position: -208px -88px;\n\
}\n\
.flag.flag-mh {\n\
  background-position: -224px -88px;\n\
}\n\
.flag.flag-mk {\n\
  background-position: -240px -88px;\n\
}\n\
.flag.flag-ml {\n\
  background-position: 0 -99px;\n\
}\n\
.flag.flag-mm {\n\
  background-position: -16px -99px;\n\
}\n\
.flag.flag-mn {\n\
  background-position: -32px -99px;\n\
}\n\
.flag.flag-mo {\n\
  background-position: -48px -99px;\n\
}\n\
.flag.flag-mp {\n\
  background-position: -64px -99px;\n\
}\n\
.flag.flag-mq {\n\
  background-position: -80px -99px;\n\
}\n\
.flag.flag-mr {\n\
  background-position: -96px -99px;\n\
}\n\
.flag.flag-ms {\n\
  background-position: -112px -99px;\n\
}\n\
.flag.flag-mt {\n\
  background-position: -128px -99px;\n\
}\n\
.flag.flag-mu {\n\
  background-position: -144px -99px;\n\
}\n\
.flag.flag-mv {\n\
  background-position: -160px -99px;\n\
}\n\
.flag.flag-mw {\n\
  background-position: -176px -99px;\n\
}\n\
.flag.flag-mx {\n\
  background-position: -192px -99px;\n\
}\n\
.flag.flag-my {\n\
  background-position: -208px -99px;\n\
}\n\
.flag.flag-mz {\n\
  background-position: -224px -99px;\n\
}\n\
.flag.flag-na {\n\
  background-position: -240px -99px;\n\
}\n\
.flag.flag-nc {\n\
  background-position: 0 -110px;\n\
}\n\
.flag.flag-ne {\n\
  background-position: -16px -110px;\n\
}\n\
.flag.flag-nf {\n\
  background-position: -32px -110px;\n\
}\n\
.flag.flag-ng {\n\
  background-position: -48px -110px;\n\
}\n\
.flag.flag-ni {\n\
  background-position: -64px -110px;\n\
}\n\
.flag.flag-nl {\n\
  background-position: -80px -110px;\n\
}\n\
.flag.flag-no {\n\
  background-position: -96px -110px;\n\
}\n\
.flag.flag-np {\n\
  background-position: -112px -110px;\n\
}\n\
.flag.flag-nr {\n\
  background-position: -128px -110px;\n\
}\n\
.flag.flag-nu {\n\
  background-position: -144px -110px;\n\
}\n\
.flag.flag-nz {\n\
  background-position: -160px -110px;\n\
}\n\
.flag.flag-om {\n\
  background-position: -176px -110px;\n\
}\n\
.flag.flag-pa {\n\
  background-position: -192px -110px;\n\
}\n\
.flag.flag-pe {\n\
  background-position: -208px -110px;\n\
}\n\
.flag.flag-pf {\n\
  background-position: -224px -110px;\n\
}\n\
.flag.flag-pg {\n\
  background-position: -240px -110px;\n\
}\n\
.flag.flag-ph {\n\
  background-position: 0 -121px;\n\
}\n\
.flag.flag-pk {\n\
  background-position: -16px -121px;\n\
}\n\
.flag.flag-pl {\n\
  background-position: -32px -121px;\n\
}\n\
.flag.flag-pm {\n\
  background-position: -48px -121px;\n\
}\n\
.flag.flag-pn {\n\
  background-position: -64px -121px;\n\
}\n\
.flag.flag-pr {\n\
  background-position: -80px -121px;\n\
}\n\
.flag.flag-ps {\n\
  background-position: -96px -121px;\n\
}\n\
.flag.flag-pt {\n\
  background-position: -112px -121px;\n\
}\n\
.flag.flag-pw {\n\
  background-position: -128px -121px;\n\
}\n\
.flag.flag-py {\n\
  background-position: -144px -121px;\n\
}\n\
.flag.flag-qa {\n\
  background-position: -160px -121px;\n\
}\n\
.flag.flag-re {\n\
  background-position: -176px -121px;\n\
}\n\
.flag.flag-ro {\n\
  background-position: -192px -121px;\n\
}\n\
.flag.flag-rs {\n\
  background-position: -208px -121px;\n\
}\n\
.flag.flag-ru {\n\
  background-position: -224px -121px;\n\
}\n\
.flag.flag-rw {\n\
  background-position: -240px -121px;\n\
}\n\
.flag.flag-sa {\n\
  background-position: 0 -132px;\n\
}\n\
.flag.flag-sb {\n\
  background-position: -16px -132px;\n\
}\n\
.flag.flag-sc {\n\
  background-position: -32px -132px;\n\
}\n\
.flag.flag-scotland {\n\
  background-position: -48px -132px;\n\
}\n\
.flag.flag-sd {\n\
  background-position: -64px -132px;\n\
}\n\
.flag.flag-se {\n\
  background-position: -80px -132px;\n\
}\n\
.flag.flag-sg {\n\
  background-position: -96px -132px;\n\
}\n\
.flag.flag-sh {\n\
  background-position: -112px -132px;\n\
}\n\
.flag.flag-si {\n\
  background-position: -128px -132px;\n\
}\n\
.flag.flag-sk {\n\
  background-position: -144px -132px;\n\
}\n\
.flag.flag-sl {\n\
  background-position: -160px -132px;\n\
}\n\
.flag.flag-sm {\n\
  background-position: -176px -132px;\n\
}\n\
.flag.flag-sn {\n\
  background-position: -192px -132px;\n\
}\n\
.flag.flag-so {\n\
  background-position: -208px -132px;\n\
}\n\
.flag.flag-somaliland {\n\
  background-position: -224px -132px;\n\
}\n\
.flag.flag-sr {\n\
  background-position: -240px -132px;\n\
}\n\
.flag.flag-ss {\n\
  background-position: 0 -143px;\n\
}\n\
.flag.flag-st {\n\
  background-position: -16px -143px;\n\
}\n\
.flag.flag-sv {\n\
  background-position: -32px -143px;\n\
}\n\
.flag.flag-sx {\n\
  background-position: -48px -143px;\n\
}\n\
.flag.flag-sy {\n\
  background-position: -64px -143px;\n\
}\n\
.flag.flag-sz {\n\
  background-position: -80px -143px;\n\
}\n\
.flag.flag-tc {\n\
  background-position: -96px -143px;\n\
}\n\
.flag.flag-td {\n\
  background-position: -112px -143px;\n\
}\n\
.flag.flag-tf {\n\
  background-position: -128px -143px;\n\
}\n\
.flag.flag-tg {\n\
  background-position: -144px -143px;\n\
}\n\
.flag.flag-th {\n\
  background-position: -160px -143px;\n\
}\n\
.flag.flag-tj {\n\
  background-position: -176px -143px;\n\
}\n\
.flag.flag-tk {\n\
  background-position: -192px -143px;\n\
}\n\
.flag.flag-tl {\n\
  background-position: -208px -143px;\n\
}\n\
.flag.flag-tm {\n\
  background-position: -224px -143px;\n\
}\n\
.flag.flag-tn {\n\
  background-position: -240px -143px;\n\
}\n\
.flag.flag-to {\n\
  background-position: 0 -154px;\n\
}\n\
.flag.flag-tr {\n\
  background-position: -16px -154px;\n\
}\n\
.flag.flag-tt {\n\
  background-position: -32px -154px;\n\
}\n\
.flag.flag-tv {\n\
  background-position: -48px -154px;\n\
}\n\
.flag.flag-tw {\n\
  background-position: -64px -154px;\n\
}\n\
.flag.flag-tz {\n\
  background-position: -80px -154px;\n\
}\n\
.flag.flag-ua {\n\
  background-position: -96px -154px;\n\
}\n\
.flag.flag-ug {\n\
  background-position: -112px -154px;\n\
}\n\
.flag.flag-um {\n\
  background-position: -128px -154px;\n\
}\n\
.flag.flag-us {\n\
  background-position: -144px -154px;\n\
}\n\
.flag.flag-uy {\n\
  background-position: -160px -154px;\n\
}\n\
.flag.flag-uz {\n\
  background-position: -176px -154px;\n\
}\n\
.flag.flag-va {\n\
  background-position: -192px -154px;\n\
}\n\
.flag.flag-vc {\n\
  background-position: -208px -154px;\n\
}\n\
.flag.flag-ve {\n\
  background-position: -224px -154px;\n\
}\n\
.flag.flag-vg {\n\
  background-position: -240px -154px;\n\
}\n\
.flag.flag-vi {\n\
  background-position: 0 -165px;\n\
}\n\
.flag.flag-vn {\n\
  background-position: -16px -165px;\n\
}\n\
.flag.flag-vu {\n\
  background-position: -32px -165px;\n\
}\n\
.flag.flag-wales {\n\
  background-position: -48px -165px;\n\
}\n\
.flag.flag-wf {\n\
  background-position: -64px -165px;\n\
}\n\
.flag.flag-ws {\n\
  background-position: -80px -165px;\n\
}\n\
.flag.flag-ye {\n\
  background-position: -96px -165px;\n\
}\n\
.flag.flag-yt {\n\
  background-position: -112px -165px;\n\
}\n\
.flag.flag-za {\n\
  background-position: -128px -165px;\n\
}\n\
.flag.flag-zanzibar {\n\
  background-position: -144px -165px;\n\
}\n\
.flag.flag-zm {\n\
  background-position: -160px -165px;\n\
}\n\
.flag.flag-zw {\n\
  background-position: -176px -165px;\n\
}\n\
.localizationTool:hover {\n\
  cursor: pointer;\n\
  cursor: hand;\n\
}\n\
.localizationTool.ltool-is-visible ul {\n\
  display: block;\n\
  float: left;\n\
  position: absolute;\n\
  width: 100%;\n\
  list-style-type: none;\n\
}\n\
.localizationTool.ltool-is-visible .ltool-dropdown-label-arrow {\n\
  /* the arrow */\n\
\n\
  content: "";\n\
  display: block;\n\
  width: 0;\n\
  height: 0;\n\
  border-top: 10px solid transparent;\n\
  border-left: 10px solid transparent;\n\
  border-bottom: 10px solid #deedf7;\n\
  border-right: 10px solid transparent;\n\
  position: absolute;\n\
  right: 8px;\n\
  top: 7px;\n\
}\n\
.localizationTool {\n\
  color: #333333;\n\
  /* background: #8dc1e2; */\n\
  background: #009688;\n\
  position: relative;\n\
}\n\
.localizationTool .ltool-dropdown-label {\n\
  display: block;\n\
  padding: 12px 0 12px 12px;\n\
  color: #FFF;\n\
  border: 0;\n\
  position: relative;\n\
}\n\
.localizationTool .ltool-dropdown-label img,\n\
.localizationTool .ltool-dropdown-label .ltool-language-flag {\n\
  margin-left: 0;\n\
}\n\
.localizationTool .ltool-dropdown-label .ltool-language-name {\n\
  color: #deedf7;\n\
}\n\
.localizationTool .ltool-dropdown-label-arrow {\n\
  /* the arrow */\n\
\n\
  content: "";\n\
  display: block;\n\
  width: 0;\n\
  height: 0;\n\
  border-top: 10px solid #deedf7;\n\
  border-left: 10px solid transparent;\n\
  border-bottom: 10px solid transparent;\n\
  border-right: 10px solid transparent;\n\
  position: absolute;\n\
  right: 8px;\n\
  top: 17px;\n\
}\n\
.localizationTool img,\n\
.localizationTool div {\n\
  display: inline;\n\
}\n\
.localizationTool li {\n\
  display: block;\n\
  /* background: #deedf7; */\n\
  background: #009688;\n\
  padding: 5px;\n\
}\n\
.localizationTool li.ltool-is-selected {\n\
  /* background: #f5f1d6; */\n\
  background: #148B7E;\n\
}\n\
.localizationTool li:hover {\n\
  /* background: #f5f1d6; */\n\
  background: #148B7E;\n\
  outline: 0;\n\
  -webkit-appearance: none;\n\
  transition: all .3s;\n\
  -webkit-transition: all .3s;\n\
  box-sizing: border-box;\n\
}\n\
.localizationTool img {\n\
  width: 16px;\n\
  height: 11px;\n\
}\n\
.localizationTool .ltool-language-name {\n\
  /* color: #8dc1e2; */\n\
  color: #ebebeb;\n\
}\n\
.localizationTool .ltool-language-flag {\n\
  display: block;\n\
  float: left;\n\
  margin-top: 3px;\n\
}\n\
.localizationTool .ltool-language-flag,\n\
.localizationTool .ltool-language-countryname {\n\
  margin-left: 8px;\n\
}\n\
.localizationTool ul {\n\
  margin: 0;\n\
  padding: 0;\n\
  display: none;\n\
}\n\
';

var loadUI_css = '\
position: absolute;\n\
left: 0; right: 0; top: 0;\n\
z-index: 10;\n\
background: url(https://steamcommunity-a.akamaihd.net/public/images/friends/colored_body_top2.png?v=2) center top no-repeat #1b2838;\n\
';

var load_cssCode = '\
@charset "utf-8";\n\
@import url("https://fonts.googleapis.com/css?family=Fredoka+One|Open+Sans:300");\n\
*,\n\
*::before,\n\
*::after {\n\
        box-sizing: border-box;\n\
}\n\
\n\
body {\n\
        font-family: "Fredoka One", cursive;\n\
        font-size: 16px;\n\
        margin: 0px;\n\
}\n\
\n\
#loadingUI {\n\
        display: -webkit-box;\n\
        display: -ms-flexbox;\n\
        display: flex;\n\
        -webkit-box-pack: center;\n\
        -ms-flex-pack: center;\n\
        justify-content: center;\n\
        -webkit-box-align: center;\n\
        -ms-flex-align: center;\n\
        align-items: center;\n\
        min-height: 100vh;\n\
        /* background: rgba(249, 249, 249, 0.9); */\n\
        overflow: hidden;\n\
}\n\
\n\
.text-wrapper {\n\
        padding: 0 1rem;\n\
        max-width: 50rem;\n\
        width: 100%;\n\
        text-align: center;\n\
}\n\
\n\
.text {\n\
        font-size: 8em;\n\
        text-transform: uppercase;\n\
        letter-spacing: -14px;\n\
}\n\
\n\
.text .letter {\n\
        position: relative;\n\
        display: inline-block;\n\
        -webkit-transition: all .4s;\n\
        transition: all .4s;\n\
}\n\
\n\
.text .letter .character {\n\
        opacity: 0.65;\n\
        -webkit-transition: color .4s;\n\
        transition: color .4s;\n\
        cursor: pointer;\n\
}\n\
\n\
.text .letter span {\n\
        position: absolute;\n\
        bottom: .8rem;\n\
        left: .4rem;\n\
        display: block;\n\
        width: 100%;\n\
        height: 15px;\n\
}\n\
\n\
.text .letter span::before {\n\
        content: "";\n\
        position: absolute;\n\
        top: 50%;\n\
        left: 50%;\n\
        width: 0;\n\
        height: 0;\n\
        -webkit-transform: translate(-50%, -50%);\n\
        transform: translate(-50%, -50%);\n\
        border-radius: 50%;\n\
        background: rgba(0, 0, 0, 0.25);\n\
}\n\
\n\
.text .letter:hover .character {\n\
        color: #fff !important;\n\
}\n\
\n\
.text.part1 .letter:nth-child(1).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing1 1.4s ease-i\n-out infinite alternate;\n\
        animation: poofing1 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing1 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(459deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(459deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(459deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(459deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing1 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(459deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(459deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(459deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(459deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(1) .character {\n\
        color: #f44336;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 0.33333s;\n\
        animation-delay: 0.33333s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(1) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 0.33333s;\n\
        animation-delay: 0.33333s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(2).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing2 1.4s ease-in-out infinite alternate;\n\
        animation: poofing2 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing2 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(540deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(540deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(540deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(540deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing2 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(540deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(540deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(540deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(540deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(2) .character {\n\
        color: #9C27B0;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 0.66667s;\n\
        animation-delay: 0.66667s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(2) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 0.66667s;\n\
        animation-delay: 0.66667s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(3).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing3 1.4s ease-in-out infinite alternate;\n\
        animation: poofing3 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing3 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(264deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(264deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(264deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(264deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing3 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(264deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(264deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(264deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(264deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(3) .character {\n\
        color: #f99b0c;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 1s;\n\
        animation-delay: 1s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(3) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 1s;\n\
        animation-delay: 1s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(4).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing4 1.4s ease-in-out infinite alternate;\n\
        animation: poofing4 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing4 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(42deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(42deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(42deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(42deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing4 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(42deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(42deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(42deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(42deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(4) .character {\n\
        color: #cee007;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 1.33333s;\n\
        animation-delay: 1.33333s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(4) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 1.33333s;\n\
        animation-delay: 1.33333s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(5).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing5 1.4s ease-in-out infinite alternate;\n\
        animation: poofing5 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing5 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(384deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(384deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(384deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(384deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing5 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(384deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(384deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(384deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(384deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(5) .character {\n\
        color: #00c6b2;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 1.66667s\n\
        animation-delay: 1.66667s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(5) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 1.66667s;\n\
        animation-delay: 1.66667s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(6).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing6 1.4s ease-in-out infinite alternate;\n\
        animation: poofing6 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing6 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing6 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(6) .character {\n\
        color: #f44336;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 2s;\n\
        animation-delay: 2s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(6) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 2s;\n\
        animation-delay: 2s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(7).poofed {\n\
        -webkit-transform-origin: 50% 50%;\n\
        transform-origin: 50% 50%;\n\
        -webkit-animation: poofing7 1.4s ease-in-out infinite alternate;\n\
        animation: poofing7 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes poofing7 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes poofing7 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(156deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part1 .letter:nth-child(7) .character {\n\
        color: #4CAF50;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 2s;\n\
        animation-delay: 2.5s;\n\
}\n\
\n\
.text.part1 .letter:nth-child(7) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 2s;\n\
        animation-delay: 3s;\n\
}\n\
\n\
.text.part2 span:nth-child(1).poofed {\n\
        -webkit-animation: sec_poofing1 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing1 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing1 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(268deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(268deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(268deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(268deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing1 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(268deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(268deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(268deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(268deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(1) .character {\n\
        color: #ff5a5f;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 2.33333s;\n\
        animation-delay: 2.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(1) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 2.33333s;\n\
        animation-delay: 2.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(2).poofed {\n\
        -webkit-animation: sec_poofing2 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing2 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing2 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(135deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(135deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(135deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(135deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing2 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(135deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(135deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(135deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(135deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(2) .character {\n\
        color: #f99b0c;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 2.66667s;\n\
        animation-delay: 2.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(2) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 2.66667s;\n\
        animation-delay: 2.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(3).poofed {\n\
        -webkit-animation: sec_poofing3 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing3 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing3 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(442deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(442deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(442deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(442deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing3 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(442deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(442deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(442deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(442deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(3) .character {\n\
        color: #cee007;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 3s;\n\
        animation-delay: 3s;\n\
}\n\
\n\
.text.part2 span:nth-child(3) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 3s;\n\
        animation-delay: 3s;\n\
}\n\
\n\
.text.part2 span:nth-child(4).poofed {\n\
        -webkit-animation: sec_poofing4 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing4 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing4 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(525deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(525deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(525deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(525deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing4 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(525deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(525deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(525deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(525deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(4) .character {\n\
        color: #00c6b2;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 3.33333s;\n\
        animation-delay: 3.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(4) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 3.33333s;\n\
        animation-delay: 3.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(5).poofed {\n\
        -webkit-animation: sec_poofing5 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing5 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing5 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(419deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(419deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(419deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(419deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing5 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(419deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(419deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(419deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(419deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(5) .character {\n\
        color: #4e2a84;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 3.66667s;\n\
        animation-delay: 3.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(5) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 3.66667s;\n\
        animation-delay: 3.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(6).poofed {\n\
        -webkit-animation: sec_poofing6 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing6 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing6 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(246deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(246deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(246deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(246deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing6 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(246deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(246deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(246deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(246deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(6) .character {\n\
        color: #9C27B0;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 4s;\n\
        animation-delay: 4s;\n\
}\n\
\n\
.text.part2 span:nth-child(6) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 4s;\n\
        animation-delay: 4s;\n\
}\n\
\n\
.text.part2 span:nth-child(7).poofed {\n\
        -webkit-animation: sec_poofing7 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing7 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing7 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(206deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(206deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(206deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(206deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing7 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(206deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(206deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(206deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(206deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(7) .character {\n\
        color: #f99b0c;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 4.33333s;\n\
        animation-delay: 4.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(7) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 4.33333s;\n\
        animation-delay: 4.33333s;\n\
}\n\
\n\
.text.part2 span:nth-child(8).poofed {\n\
        -webkit-animation: sec_poofing8 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing8 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing8 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(60deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(60deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(60deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(60deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing8 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(60deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(60deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(60deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(60deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(8) .character {\n\
        color: #cee007;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 4.66667s;\n\
        animation-delay: 4.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(8) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 4.66667s;\n\
        animation-delay: 4.66667s;\n\
}\n\
\n\
.text.part2 span:nth-child(9).poofed {\n\
        -webkit-animation: sec_poofing9 1.4s ease-in-out infinite alternate;\n\
        animation: sec_poofing9 1.4s ease-in-out infinite alternate;\n\
}\n\
\n\
@-webkit-keyframes sec_poofing9 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(496deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(496deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(496deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(496deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
@keyframes sec_poofing9 {\n\
        0% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(0) translateY(0px) scale(1);\n\
        }\n\
        50% {\n\
                -webkit-transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(0deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        56% {\n\
                -webkit-transform: rotateZ(496deg) rotateY(360deg) translateY(0px) scale(1);\n\
                transform: rotateZ(496deg) rotateY(360deg) translateY(0px) scale(1);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(496deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
                transform: rotateZ(496deg) rotateY(360deg) translateY(-700px) scale(0.01);\n\
        }\n\
}\n\
\n\
.text.part2 span:nth-child(9) .character {\n\
        color: #00c6b2;\n\
        -webkit-animation: wave 1.2s linear infinite;\n\
        animation: wave 1.2s linear infinite;\n\
        -webkit-animation-delay: 5s;\n\
        animation-delay: 5s;\n\
}\n\
\n\
.text.part2 span:nth-child(9) span::before {\n\
        -webkit-animation: shadow 1.2s linear infinite;\n\
        animation: shadow 1.2s linear infinite;\n\
        -webkit-animation-delay: 5s;\n\
        animation-delay: 5s;\n\
}\n\
\n\
@-webkit-keyframes wave {\n\
        0% {\n\
                -webkit-transform: translateY(0);\n\
                transform: translateY(0);\n\
        }\n\
        50% {\n\
                -webkit-transform: translateY(-10px);\n\
                transform: translateY(-10px);\n\
        }\n\
        100% {\n\
                -webkit-transform: translateY(0);\n\
                transform: translateY(0);\n\
        }\n\
}\n\
\n\
@keyframes wave {\n\
        0% {\n\
                -webkit-transform: translateY(0);\n\
                transform: translateY(0);\n\
        }\n\
        50% {\n\
                -webkit-transform: translateY(-10px);\n\
                transform: translateY(-10px);\n\
        }\n\
        100% {\n\
                -webkit-transform: translateY(0);\n\
                transform: translateY(0);\n\
        }\n\
}\n\
\n\
@-webkit-keyframes shadow {\n\
        0% {\n\
                width: 0;\n\
                height: 0;\n\
        }\n\
        50% {\n\
                width: 100%;\n\
                height: 100%;\n\
        }\n\
        100% {\n\
                width: 0;\n\
                height: 0;\n\
        }\n\
}\n\
\n\
@keyframes shadow {\n\
        0% {\n\
                width: 0;\n\
                height: 0;\n\
        }\n\
        50% {\n\
                width: 100%;\n\
                height: 100%;\n\
        }\n\
        100% {\n\
                width: 0;\n\
                height: 0;\n\
        }\n\
}\n\
\n\
.how-to {\n\
        margin: 2rem 0 2rem 1rem;\n\
        font-family: "Opens Sans", sans-serif;\n\
        font-weight: 300;\n\
        font-size: .85em;\n\
        letter-spacing: 4px;\n\
        /*color: rgba(0, 0, 0, 0.8);*/\n\
        color: rgba(255, 255, 255, 0.8);\n\
}\n\
\n\
@-webkit-keyframes rotate {\n\
        0% {\n\
                -webkit-transform: rotateZ(0) scale(0.7);\n\
                transform: rotateZ(0) scale(0.7);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(360deg) scale(0.7);\n\
                transform: rotateZ(360deg) scale(0.7);\n\
        }\n\
}\n\
\n\
@keyframes rotate {\n\
        0% {\n\
                -webkit-transform: rotateZ(0) scale(0.7);\n\
                transform: rotateZ(0) scale(0.7);\n\
        }\n\
        100% {\n\
                -webkit-transform: rotateZ(360deg) scale(0.7);\n\
                transform: rotateZ(360deg) scale(0.7);\n\
        }\n\
}\n\
\n\
@media only screen and (max-width: 767px) {\n\
        .text {\n\
                font-size: 6em;\n\
        }\n\
        .text .letter span {\n\
                bottom: .5rem;\n\
        }\n\
}\n\
\n\
@media only screen and (max-width: 480px) {\n\
        .text {\n\
                font-size: 4em;\n\
        }\n\
        .text .letter span {\n\
                bottom: 0;\n\
        }\n\
}\n\
';

var ExpandUI_QuickNavigationBar_html = '\
/*拓展UI-快捷导航栏的html代码*/\n\
<div style="position: fixed;top: 30%;right: 0;">\n\
        <div class="localTool-1-1 layui-input-block" style="margin-left:0; text-align: center;min-height:0;padding: 2px 0px;background: #282B33;">快捷导航栏</div>\n\
        \n\
        <ul class="layui-nav layui-nav-tree layui-inline" lay-filter="demo" style="margin-right: 10px;">\n\
                <li class="layui-nav-item layui-nav-itemed">\n\
                        <a href="javascript:;">好友分组</a>\n\
                        <dl class="layui-nav-child">\n\
                                <dd><a href="javascript:;">选项一</a></dd>\n\
                                <dd><a href="javascript:;">选项二</a></dd>\n\
                                <dd><a href="javascript:;">选项三</a></dd>\n\
                                <dd><a href="">跳转项</a></dd>\n\
                        </dl>\n\
                </li>\n\
                \n\
                <li class="layui-nav-item">\n\
                        <a href="javascript:;">功能模块</a>\n\
                        <dl class="layui-nav-child">\n\
                                <dd><a href="javascript:;">选项一</a></dd>\n\
                                <dd><a href="javascript:;">选项二</a></dd>\n\
                                <dd><a href="javascript:;">选项三</a></dd>\n\
                                <dd><a href="">跳转项</a></dd>\n\
                        </dl>\n\
                </li>\n\
                \n\
                <li class="layui-nav-item">\n\
                        <a href="javascript:;">其他</a>\n\
                        <dl class="layui-nav-child">\n\
                                <dd><a href="javascript:;">返回顶部</a></dd>\n\
                                <dd><a href="javascript:;">返回底部</a></dd>\n\
                                <dd><a href="javascript:;">选项三</a></dd>\n\
                                <dd><a href="">跳转项</a></dd>\n\
                        </dl>\n\
                </li>\n\
                \n\
                <li class="layui-nav-item">\n\
                        <a href="javascript:;">解决方案</a>\n\
                        <dl class="layui-nav-child">\n\
                                <dd><a href="">移动模块</a></dd>\n\
                                <dd><a href="">后台模版</a></dd>\n\
                                <dd><a href="">电商平台</a></dd>\n\
                        </dl>\n\
                </li>\n\
                \n\
                <li class="layui-nav-item"><a href="">云市场</a></li>\n\
                <li class="layui-nav-item"><a href="">社区</a></li>\n\
        </ul>\n\
</div>\n\
';

var groupUI_html = '\
<div class="layui-tab layui-tab-brief" lay-filter="demo">\n\
        <ul class="layui-tab-title" style="color: #ebebeb;">\n\
                <li class="localTool-2-1 layui-this">留言</li>\n\
                <li>留言设置</li>\n\
                <li>数据分析</li>\n\
                <li>点赞助手</li>\n\
                <li>拓展功能(测试)</li>\n\
                <li>设置</li>\n\
        </ul>\n\
        <div class="layui-tab-content">\n\
        <div class="layui-tab-item layui-show" style="color: #ebebeb;">\n\
        <!----------------------------------------------------------------------------------------------------------------->\n\
          <div class="commentthread_entry">\n\
                        <div class="commentthread_entry_quotebox">\n\
                                <!--<textarea class="commentthread_textarea" id="comment_textarea" onfocus="this.focus();this.select();inBoxShrinkage(\'comment_textarea\',false);" onClick="" onblur="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',true);" placeholder="添加留言" style="overflow: hidden; height: 28px;"></textarea>-->\n\
                                <textarea class="commentthread_textarea" id="comment_textarea" onfocus="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',false);" onClick="" onblur="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',true);" placeholder="添加留言" style="overflow: hidden; height: 28px;"></textarea>\n\
                        </div>\n\
                        \n\
                        <form class="layui-form" action="" lay-filter="example">\n\
                                <div id="strInBytes" style="color: #32CD32;display: inline-block;font-family: Consolas;font-size: 16px;">\n\
                                        <span>当前字符字节数: </span>\n\
                                        <span id="strInBytes_Text">0</span>\n\
                                        <span>/999</span>\n\
                                </div>\n\
                                <div class="layui-inline">\n\
                                        <label class="layui-form-label" style="width: auto;">文本格式(直接添加或选择文字添加)</label>\n\
                                        <div class="layui-input-inline">\n\
                                                <select name="modules" lay-verify="required" lay-search="" id="steamTextStyle">\n\
                                                        <option value="">直接选择或搜索选择</option>\n\
                                                        <option value="1">[h1]标题文字[/h1]</option>\n\
                                                        <option value="2">[b]粗体文本[/b]</option>\n\
                                                        <option value="3">[u]下划线文本[/u]</option>\n\
                                                        <option value="4">[i]斜体文本[/i]</option>\n\
                                                        <option value="5">[strike]删除文本[/strike]</option>\n\
                                                        <option value="6">[spoiler]隐藏文本[/spoiler]</option>\n\
                                                        <option value="7">[noparse]不解析[b]标签[/b][/noparse]</option>\n\
                                                        <option value="8">[url=store.steampowered.com]网站链接[/url]</option>\n\
                                                </select>\n\
                                        </div>\n\
                                        <button type="button" class="layui-btn layui-btn-normal" id="LAY-component-form-getval">添加</button>\n\
                                </div>\n\
                        </form>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>翻译模块(需要提前设置国籍):</legend>\n\
                        </fieldset>\n\
                        <div id="translationOptions" style="color:#fff;">\n\
                                <span><span>当前语言:</span> \n\
                                        <select id="origLanguageSelectBox" style="padding: 4px 12px 4px 8px;font-size:12px;outline:0;border: 1px solid #34DEFF;background-color:transparent;color: #66ccff;">\n\
                                                <option name="auto" value="auto" style="color:#fff;background-color: #3E9AC6;">自动检测</option>\n\
                                                <option name="zhc" value="zh-CN" style="color:#fff;background-color: #3E9AC6;">中文简体</option>\n\
                                                <option name="en" value="en" style="color:#fff;background-color: #3E9AC6;">英语</option>\n\
                                                <option name="jp" value="ja" style="color:#fff;background-color: #3E9AC6;">日语</option>\n\
                                        </select>\n\
                                </span>\n\
                                \n\
                                <span style="margin-left: 5px;"><span>目标语言: </span>\n\
                                        <select id="selectBoxID" class="selectBox" multiple="multiple">\n\
                                                <option value="en">英语</option>\n\
                                                <option value="ja">日语</option>\n\
                                                <option value="zh-CN">中文简体</option>\n\
                                                <option value="zh-sg">马新简体[zh-sg]</option>\n\
                                                <option value="zh-hant">繁體中文[zh-hant]</option>\n\
                                                <option value="zh-hk">繁體中文(香港)[zh-hk]</option>\n\
                                                <option value="zh-mo">繁體中文(澳门)[zh-mo]</option>\n\
                                                <option value="zh-tw">繁體中文(台湾)[zh-tw]</option>\n\
                                        </select>\n\
                                </span>\n\
                                \n\
                                <span style="margin-left: 5px;vertical-align: middle;">\n\
                                        <button id="translationText">翻译</button>\n\
                                </span>\n\
                        </div>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>添加称呼模块(需要提前设置备注):</legend>\n\
                        </fieldset>\n\
                        <div class="commentthread_entry_submitlink" style="">\n\
                                <span class="isCustom" style="display: block;text-align: left;">\n\
                                        <!-- 默认为{name},可以自行修改,好友没有备注则使用steam名称  -->\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">自定义称呼模式</span>\n\
                                        <input class="nameAddType" id="select_isCustom_checkbox" name="nameAddType" type="radio" style="vertical-align: middle;margin:2px;">\n\
                                        <span style="margin-left: 5px;vertical-align: middle;">\n\
                                                <button id="addCustomName">在留言框添加自定义称呼标识符</button>\n\
                                        </span>\n\
                                </span>\n\
                                \n\
                                <span class="isName" style="display: block;text-align: left;">\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">是否为组添加称呼(如果组没有备注则使用steam名称)</span>\n\
                                        <input class="nameAddType" id="select_islName_checkbox" name="nameAddType" type="radio" style="vertical-align: middle;margin:2px;">\n\
                                </span>\n\
                                \n\
                                <span class="isSpecialName" style="display: block;text-align: left;">\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">是否为组添加称呼(如果组设置有备注则使用,否则不添加称呼)</span>\n\
                                        <input class="nameAddType" id="select_isSpecialName_checkbox" name="nameAddType"  type="radio" style="vertical-align: middle;margin:2px;">\n\
                                </span>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title" style="padding: 10px 0px;">\n\
                                <span style="display: block;text-align: right;">\n\
                                        <a class="btn_grey_black btn_small_thin" href="javascript:CCommentThread.FormattingHelpPopup( \'Profile\' );">\n\
                                                <span class="btn_grey_black btn_small_thin_text">格式化帮助</span>\n\
                                        </a>\n\
                                        \n\
                                        <span class="emoticon_container">\n\
                                                <span class="emoticon_button small" id="emoticonbtn"></span>\n\
                                        </span>\n\
                                        \n\
                                        <span class="btn_green_white_innerfade btn_small" id="comment_submit">\n\
                                                <span id="comment_submit_text">发送评论给选择的组</span>\n\
                                        </span>\n\
                                        \n\
                                        <span class="btn_green_white_innerfade btn_small" id="comment_submit_special">\n\
                                                <span id="comment_submit_special_text">根据国籍发送评论给选择的组</span>\n\
                                        </span>\n\
                                </span>\n\
                        </div>\n\
                </div>\n\
                <div id="log">\n\
                        <span id="log_head"></span>\n\
                        <span id="log_body" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/"></span>\n\
                </div>\n\
                <!----------------------------------------------------------------------------------------------------------------->\n\
          \n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
                <div style="text-align: left;margin: 5px 0px;">\n\
                        <span style="margin-left: 5px;vertical-align: middle;">\n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>设置国籍:</legend>\n\
                                </fieldset>\n\
                                <div style="color: #67c1f5;">请选择要设置的国籍:</div>\n\
                                <select id="nationalitySelectBox" style="padding: 4px 12px 4px 8px;font-size:12px;outline:0;border: 1px solid #34DEFF;background-color:transparent;color: #66ccff;">\n\
                                        <option name="CN" value="CN" style="color:#fff;background-color: #3E9AC6;">简体中文</option>\n\
                                        <option name="EN" value="EN" style="color:#fff;background-color: #3E9AC6;">英语</option>\n\
                                        <option name="JP" value="JP" style="color:#fff;background-color: #3E9AC6;">日语</option>\n\
                                        <option name="CN-SG" value="CN-SG" style="color:#fff;background-color: #3E9AC6;">马新简体(马来西亚,新加坡)[zh-sg]</option>\n\
                                        <option name="CN-HANT" value="CN-HANT" style="color:#fff;background-color: #3E9AC6;">繁體中文[zh-hant]</option>\n\
                                        <option name="CN-HK" value="CN-HK" style="color:#fff;background-color: #3E9AC6;">繁體中文(香港)[zh-hk]</option>\n\
                                        <option name="CN-MO" value="CN-MO" style="color:#fff;background-color: #3E9AC6;">繁體中文(澳门)[zh-mo]</option>\n\
                                        <option name="CN-TW" value="CN-TW" style="color:#fff;background-color: #3E9AC6;">繁體中文(台湾)[zh-tw]</option>\n\
                                </select>\n\
                                <button id="setNationality">为选择的好友设置国籍标识</button>\n\
                        </span>\n\
                        <span style="margin-left: 5px;vertical-align: top;">\n\
                                <button id="unsetNationality">为选择的好友取消国籍标识</button>\n\
                        </span>\n\
                        <br />\n\
                         <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置不留言:</legend>\n\
                         </fieldset>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                                <span>\n\
                                        <button id="setNoLeave">为选择的好友设置不留言</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unsetNoLeave">为选择的好友取消设置不留言</button>\n\
                                </span>\n\
                        </div>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置留言时间间隔:</legend>\n\
                        </fieldset>\n\
                        <div id="">只选择日期则过n天后再留言,只选择时间则过x时后再留言(严格模式),日期和时间都选择了则过n天x时后再留言(严格模式)</div>\n\
                        <div id="">这里其实是一个时间差,比如指定的好友3天留言一次,今天是4月10日,你就选择4月13日就行了,这样做方便一点</div>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline" style="opacity:0;filter: alpha(opacity=0);position: absolute;z-index: 0;">\n\
                                  <label class="layui-form-label">请选择留言</label> <!--这个是被点击对象,隐藏、不占空间、触发事件-->\n\
                                  <div class="layui-input-inline">\n\
                                        <input type="text" class="layui-input" id="test-limit2" readonly="" placeholder="yyyy-MM-dd">\n\
                                  </div>\n\
                                </div>\n\
                                <div class="layui-inline" style="position: relative;z-index: -1;">\n\
                                  <label class="layui-form-label">留言日期差</label> <!--这个是克隆出来的对象,显示,占空间、被覆盖,不触发事件-->\n\
                                  <div class="layui-input-inline">\n\
                                        <input type="text" class="layui-input" id="test-limit1" readonly="" placeholder="yyyy-MM-dd">\n\
                                  </div>\n\
                                </div>\n\
                                \n\
                          </div>\n\
                        </div>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                                <span>\n\
                                        <button id="setTimeInterval">为选择的好友设置留言时间间隔</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unsetTimeInterval">为选择的好友取消设置留言时间间隔</button>\n\
                                </span>\n\
                        </div>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动留言计划:</legend>\n\
                        </fieldset>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline" style="opacity:0;filter: alpha(opacity=0);position: absolute;z-index: 0;">\n\
                                        <label class="layui-form-label">请选择时间</label>  <!--这个是被点击对象,隐藏、不占空间、触发事件-->\n\
                                        <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test14" placeholder="H时m分s秒">\n\
                                        </div>\n\
                                </div>\n\
                                <div class="layui-inline" style="position: relative;z-index: -1;">\n\
                                        <label class="layui-form-label">请选择时间</label> <!--这个是克隆出来的对象,显示,占空间、被覆盖,不触发事件-->\n\
                                        <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test15" placeholder="H时m分s秒">\n\
                                        </div>\n\
                                </div>\n\
                          </div>\n\
                        </div>\n\
                        \n\
                        <table class="layui-hide" id="test" lay-filter="test"></table> <!-- 数据表格 -->\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置好友分组:</legend>\n\
                        </fieldset>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                        \n\
                        <form class="layui-form" action="">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline">\n\
                                  <label class="layui-form-label">分组列表</label>\n\
                                  <div class="layui-input-inline">\n\
                                        <select name="modules" lay-verify="required" lay-search="">\n\
                                          <option value="">直接选择或搜索选择</option>\n\
                                          <option value="1">分组名称</option>\n\
                                          <option value="2">分组名称</option>\n\
                                          <option value="3">分组名称</option>\n\
                                          <option value="4">分组名称</option>\n\
                                          <option value="5">分组名称</option>\n\
                                          <option value="6">分组名称</option>\n\
                                          <option value="7">分组名称</option>\n\
                                          <option value="8">分组名称</option>\n\
                                          <option value="9">分组名称</option>\n\
                                        </select>\n\
                                  </div>\n\
                                  <button type="button" class="layui-btn" id="editFriendGroup">编辑列表</button>\n\
                                </div>\n\
                          </div>\n\
                        </form>\n\
                        \n\
                                <span>\n\
                                        <button id="addFriendToGroup">为选择的好友添加分组</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unaddFriendToGroup">为选择的好友取消添加分组</button>\n\
                                </span>\n\
                                \n\
                                <div class="layui-collapse" lay-filter="test">\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                          </p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                </div>\n\
                                \n\
                        </div>\n\
                </div>\n\
          <div id="laydateDemo"></div>\n\
          <div id="log1">\n\
                <span id="log_head1"></span>\n\
                <span id="log_body1" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/"></span>\n\
          </div>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          \n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="NationalityGroup">按国籍进行高亮分组</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="NationalitySortGroup">按国籍进行排序分组(慢)</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="OfflineTimeGroup">按在线时间进行排序分组</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="ShowFriendData">显示好友详细数据-不可用</button>\n\
          </span>\n\
          <div class="layui-tab" lay-filter="test1">\n\
                <ul class="layui-tab-title">\n\
                  <li class="layui-this" lay-id="11" style="color:#ebebeb;">好友数据统计</li>\n\
                  <li lay-id="22" style="color:#ebebeb;">留言数据统计</li>\n\
                  <li lay-id="33" style="color:#ebebeb;">关系网统计</li>\n\
                  <li lay-id="44" style="color:#ebebeb;">当前配置统计</li>\n\
                  <li lay-id="55" style="color:#ebebeb;">查看好友配置统计</li>\n\
                </ul>\n\
                <div class="layui-tab-content">\n\
                        <div class="layui-tab-item layui-show">\n\
                                <span>数据表格(汇总所有的数据:id,名称,备注,国籍(语言),等级,好友数量,游戏数量,dlc数量,创意工坊数量,艺术作品数量,动态数量)</span>\n\
                                <table class="layui-hide" id="friendStatistics" lay-filter="friendStatistics"></table> <!--数据表格-->\n\
                                <div id="container_friendStatistics" style="width: 600px;height:400px;"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>分为:</span>\n\
                                <span>按国籍的饼图(总留言数量),</span>\n\
                                <span>按每天留言数据的折线图(统计所有的留言数据,生成的折线图),</span>\n\
                                <span>按最多留言数据的柱状图(那些好友一天留言数量排行榜/那些好友总留言数量排行榜/累计连续每天留言数量最多),</span>\n\
                                <span>数据表格(汇总所有的数据)</span>\n\
                                <div id="container_commentStatistics" style="min-width:400px;height:400px"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>好友关系网(仅统计共同好友)</span>\n\
                                <div id="container_relationshipStatistics" style="min-width: 320px;max-width: 800px;margin: 0 auto;"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>当前的配置数据和运行状态<span>\n\
                                <div id="container_currConfStatistics"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)</span>\n\
                                <div id="container_friConfStatistics"></div>\n\
                        </div>\n\
                  </div>\n\
          </div>\n\
          \n\
          <div id="pageDemo"></div>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          <fieldset class="layui-elem-field">\n\
                <legend>动态点赞助手</legend>\n\
                         <form class="layui-form" action="" lay-filter="example">\n\
                                 <div class="layui-form-item" pane="">\n\
                                        <label class="layui-form-label">总开关</label>\n\
                                        <div class="layui-input-block">\n\
                                                <!-- checked="" -->\n\
                                          <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest" title="开关" lay-text="开启|关闭" id="friendActivitySwitch">\n\
                                        </div>\n\
                                  </div>\n\
                          </form>\n\
                <div class="layui-field-box">\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置点赞内容:</legend>\n\
                        </fieldset>\n\
                        <form class="layui-form" action="">\n\
                                <div class="layui-form-item">\n\
                                        <label class="layui-form-label">点赞内容:</label>\n\
                                        <div class="layui-row">\n\
                                           <div class="layui-input-block">\n\
                                                         <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[1]" lay-skin="primary" title="朋友发布了状态" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[2]" lay-skin="primary" title="朋友发布了评测" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[3]" lay-skin="primary" title="朋友购买了游戏或者DLC" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[4]" lay-skin="primary" title="组发布了通知" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[5]" lay-skin="primary" title="组发布了活动" checked=""><br>\n\
                                                         </div>\n\
                                                        <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[6]" lay-skin="primary" title="朋友发布了艺术作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[7]" lay-skin="primary" title="朋友发布了创意工坊作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[8]" lay-skin="primary" title="朋友发布了指南" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[9]" lay-skin="primary" title="朋友上传了载图" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[10]" lay-skin="primary" title="朋友上传了视频" checked=""><br>\n\
                                                        </div>\n\
                                                        <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[11]" lay-skin="primary" title="朋友收藏了艺术作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[12]" lay-skin="primary" title="朋友收藏了创意工坊作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[13]" lay-skin="primary" title="朋友收藏了指南" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[14]" lay-skin="primary" title="朋友收藏了载图" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[15]" lay-skin="primary" title="朋友收藏了视频" checked=""><br>\n\
                                                        </div>\n\
                                           </div>\n\
                                          </div>\n\
                                  </div>\n\
                         </form>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动点赞模式:</legend>\n\
                        </fieldset>\n\
                        <form class="layui-form" action="">\n\
                                <div class="layui-form-item">\n\
                                        <label class="layui-form-label">点赞模式:</label>\n\
                                        <div class="layui-input-block">\n\
                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="运行后自动开始点赞" checked=""><br>\n\
                                          <input type="checkbox" name="like[2]" lay-skin="primary" title="点赞完成后自动刷新并点赞新动态时间间隔" checked=""><br>\n\
                                        </div>\n\
                                  </div>\n\
                         </form>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动点赞时间区间(默认今天~之前所有的动态内容)</legend>\n\
                        </fieldset>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                        <div class="layui-inline">\n\
                                          <label class="layui-form-label">请选择范围</label>\n\
                                          <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test-limit3" readonly="" placeholder=" ~ "> <!--placeholder="yyyy-MM-dd"-->\n\
                                          </div>\n\
                                        </div>\n\
                          </div>\n\
                        </div>\n\
                        <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">\n\
                          <legend style="color:#66ccff;">点赞进度时间线</legend>\n\
                        </fieldset>\n\
                        <ul class="layui-timeline">\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月18日</h3>\n\
                                  <p style="color:#fff;">\n\
                                        <span>已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条</span>\n\
                                        <br><span>已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条</span>\n\
                                        <br><span>已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条</span>\n\
                                        <br><span>已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条</span>\n\
                                        <br><span>已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条</span>\n\
                                  </p>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月16日</h3>\n\
                                  <p style="color:#fff;">杜甫的思想核心是儒家的仁政思想,他有"致君尧舜上,再使风俗淳"的宏伟抱负。个人最爱的名篇有:</p>\n\
                                  <ul style="color:#fff;">\n\
                                        <li>《登高》</li>\n\
                                        <li>《茅屋为秋风所破歌》</li>\n\
                                  </ul>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月15日</h3>\n\
                                  <p style="color:#fff;">\n\
                                        <span>中国人民抗日战争胜利日</span>\n\
                                        <br><span>常常在想,尽管对这个国家有这样那样的抱怨,但我们的确生在了最好的时代</span>\n\
                                        <br><span>铭记、感恩</span>\n\
                                        <br><span>所有为中华民族浴血奋战的英雄将士</span>\n\
                                        <br><span>永垂不朽</span>\n\
                                  </p>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <div class="layui-timeline-title" style="color:#66ccff;">过去</div>\n\
                                </div>\n\
                          </li>\n\
                        </ul>\n\
                </div>\n\
          </fieldset>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          <fieldset class="layui-elem-field">\n\
                <legend>喜加一助手</legend>\n\
                <div class="layui-field-box">\n\
                        <!-- <div>是否启动喜加一助手</div> -->\n\
                <form class="layui-form" action="" lay-filter="example">\n\
                        <div class="layui-form-item" pane="">\n\
                           <label class="layui-form-label">总开关</label>\n\
                           <div class="layui-input-block">\n\
                                <!-- checked="" -->\n\
                                 <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest2" title="开关" lay-text="开启|关闭" id="FreeGameSwitch">\n\
                           </div>\n\
                         </div>\n\
                </form>\n\
                <form class="layui-form" action="">\n\
                        <div class="layui-form-item">\n\
                                <label class="layui-form-label">设置:</label>\n\
                                <div class="layui-row">\n\
                                   <div class="layui-input-block">\n\
                                                 <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="自动获取喜加一信息" checked=""><br>\n\
                                                 </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[6]" lay-skin="primary" title="自动领取喜加一游戏" checked=""><br>\n\
                                                </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[11]" lay-skin="primary" title="置顶显示在上方" checked=""><br>\n\
                                                </div>\n\
                                   </div>\n\
                                  </div>\n\
                          </div>\n\
                 </form>\n\
                 \n\
                 <div>设置喜加一数据来源</div>\n\
                 <form class="layui-form" action="">\n\
                        <div class="layui-form-item">\n\
                                <label class="layui-form-label">设置:</label>\n\
                                <div class="layui-row">\n\
                                   <div class="layui-input-block">\n\
                                                 <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="SteamDB" checked=""><br>\n\
                                                 </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[6]" lay-skin="primary" title="humblebundle" disabled=""><br>\n\
                                                </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[11]" lay-skin="primary" title="fanatical" disabled=""><br>\n\
                                                </div>\n\
                                   </div>\n\
                                  </div>\n\
                          </div>\n\
                  </form>\n\
                </div>\n\
          </fieldset>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
                <fieldset class="layui-elem-field">\n\
                  <legend>功能设置</legend>\n\
                  <div class="layui-field-box">\n\
                          \n\
                          <form class="layui-form" action="" lay-filter="example">\n\
                                  <div class="layui-form-item" pane="">\n\
                                         <label class="layui-form-label">Debug模式</label>\n\
                                         <div class="layui-input-block">\n\
                                                                                                        <!-- checked="" -->\n\
                                           <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest3" title="开关" lay-text="开启|关闭">\n\
                                         </div>\n\
                                   </div>\n\
                          </form>\n\
                                <div>弹出层</div>\n\
                                <div>滑块</div>\n\
                                <button type="button" class="layui-btn">导入导出重置当前设置</button>\n\
                                <div>弹出层</div>\n\
                                \n\
                                <div class="layui-upload-drag" id="uploadDemo">\n\
                                  <i class="layui-icon"></i>\n\
                                  <p>点击上传,或将文件拖拽到此处</p>\n\
                                  <div class="layui-hide" id="uploadDemoView">\n\
                                        <hr>\n\
                                        <img src="" alt="上传成功后渲染" style="max-width: 100%">\n\
                                  </div>\n\
                                </div>\n\
                  </div>\n\
                </fieldset>\n\
                \n\
                <fieldset class="layui-elem-field">\n\
                        <legend>界面设置</legend>\n\
                        <div class="layui-field-box">\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>语言配置</legend>\n\
                                <div id="selectLanguageDropdown" class="localizationTool"></div>\n\
                                        <button type="button" class="layui-btn">自动检测(简体中文)</button>\n\
                                        <button type="button" class="layui-btn">简体中文</button>\n\
                                        <button type="button" class="layui-btn">繁体中文</button>\n\
                                        <button type="button" class="layui-btn">English</button>\n\
                                </fieldset>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>主题切换</legend>\n\
                                        <div>请选择一个主题,然后点击应用</div>\n\
                                        <button type="button" class="layui-btn">应用主题</button>\n\
                                </fieldset>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>UI设置</legend>\n\
                                        <div>预览:</div>\n\
                                        <div>\n\
                                        <span>主要字体颜色:<span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all1"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>主要背景颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all2"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言成功字体颜色:<span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all3"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言失败字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all4"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言发生错误字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all5"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <button type="button" class="layui-btn">保存为主题</button>\n\
                                </fieldset>\n\
                                \n\
                        </div>\n\
                </fieldset>\n\
                \n\
                <fieldset class="layui-elem-field">\n\
                        <legend>关于SteamAssistant(Steam小助手)</legend>\n\
                                <div class="layui-field-box">\n\
                                        <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>程序信息:</legend>\n\
                                        <div>当前版本:v0.2.3.0</div>\n\
                                        <div>主程序框架更新时间:2020年4月19日</div>\n\
                                        <div>common模块:2020年4月19日</div>\n\
                                        <div>databaseConf模块:2020年4月19日</div>\n\
                                        <div>externalApis模块:2020年4月19日</div>\n\
                                        <div>steamApis模块:2020年4月19日</div>\n\
                                        <div>translateApis模块:2020年4月19日</div>\n\
                                        <div>Utility模块:2020年4月19日</div>\n\
                                        <div>UI模块:2020年4月19日</div>\n\
                                        <div>Event模块:2020年4月19日</div>\n\
                                        <div>CityList模块:2020年4月19日</div>\n\
                                        <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>联系作者:</legend>\n\
                                        <button type="button" class="layui-btn">反馈错误</button>\n\
                                        <button type="button" class="layui-btn">提交建议</button>\n\
                                </div>\n\
                </fieldset>\n\
                \n\
                <div id="sliderDemo" style="margin: 50px 20px;"></div>\n\
        </div>\n\
        \n\
        </div>\n\
</div>\n\
';

var loadUI_Html = '\
<div class="text-wrapper">\n\
        <div class="text part1">\n\
                <div>\n\
                        <span class="letter">\n\
                                <div class="localTool-3-1 character">L</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">o</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">a</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">d</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">i</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">n</div>\n\
                                <span></span>\n\
                        </span>\n\
                        \n\
                        <span class="letter">\n\
                                <div class="character">g</div>\n\
                                <span></span>\n\
                        </span>\n\
                </div>\n\
        </div>\n\
        <div class="how-to"><span>正在加载资源中,已完成0/10,请您耐心等待...</span></div>\n\
</div>\n\
';

var mainUI_html = '\
<div class="layui-tab layui-tab-brief" lay-filter="demo">\n\
        <ul class="layui-tab-title" style="color: #ebebeb;">\n\
                <li class="localTool-4-1 layui-this">留言</li>\n\
                <li>留言设置</li>\n\
                <li>数据分析</li>\n\
                <li>点赞助手</li>\n\
                <li>拓展功能(测试)</li>\n\
                <li>设置</li>\n\
        </ul>\n\
        <div class="layui-tab-content">\n\
        <div class="layui-tab-item layui-show" style="color: #ebebeb;">\n\
        <!----------------------------------------------------------------------------------------------------------------->\n\
          <div class="commentthread_entry">\n\
                        <div class="commentthread_entry_quotebox">\n\
                                <!--<textarea class="commentthread_textarea" id="comment_textarea" onfocus="this.focus();this.select();inBoxShrinkage(\'comment_textarea\',false);" onClick="" onblur="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',true);" placeholder="添加留言" style="overflow: hidden; height: 28px;"></textarea>-->\n\
                                <textarea class="commentthread_textarea" id="comment_textarea" onfocus="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',false);" onClick="" onblur="inBoxonblurID=0;inBoxShrinkage(\'comment_textarea\',true);" placeholder="添加留言" style="overflow: hidden; height: 28px;"></textarea>\n\
                        </div>\n\
                        \n\
                        <form class="layui-form" action="" lay-filter="example">\n\
                                <div id="strInBytes" style="color: #32CD32;display: inline-block;font-family: Consolas;font-size: 16px;">\n\
                                        <span>当前字符字节数: </span>\n\
                                        <span id="strInBytes_Text">0</span>\n\
                                        <span>/999</span>\n\
                                </div>\n\
                                <div class="layui-inline">\n\
                                        <label class="layui-form-label" style="width: auto;">文本格式(直接添加或选择文字添加)</label>\n\
                                        <div class="layui-input-inline">\n\
                                                <select name="modules" lay-verify="required" lay-search="" id="steamTextStyle">\n\
                                                        <option value="">直接选择或搜索选择</option>\n\
                                                        <option value="1">[h1]标题文字[/h1]</option>\n\
                                                        <option value="2">[b]粗体文本[/b]</option>\n\
                                                        <option value="3">[u]下划线文本[/u]</option>\n\
                                                        <option value="4">[i]斜体文本[/i]</option>\n\
                                                        <option value="5">[strike]删除文本[/strike]</option>\n\
                                                        <option value="6">[spoiler]隐藏文本[/spoiler]</option>\n\
                                                        <option value="7">[noparse]不解析[b]标签[/b][/noparse]</option>\n\
                                                        <option value="8">[url=store.steampowered.com]网站链接[/url]</option>\n\
                                                </select>\n\
                                        </div>\n\
                                        <button type="button" class="layui-btn layui-btn-normal" id="LAY-component-form-getval">添加</button>\n\
                                </div>\n\
                        </form>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>翻译模块(需要提前设置国籍):</legend>\n\
                        </fieldset>\n\
                        <div id="translationOptions" style="color:#fff;">\n\
                                <span><span>当前语言:</span> \n\
                                        <select id="origLanguageSelectBox" style="padding: 4px 12px 4px 8px;font-size:12px;outline:0;border: 1px solid #34DEFF;background-color:transparent;color: #66ccff;">\n\
                                                <option name="auto" value="auto" style="color:#fff;background-color: #3E9AC6;">自动检测</option>\n\
                                                <option name="zhc" value="zh-CN" style="color:#fff;background-color: #3E9AC6;">中文简体</option>\n\
                                                <option name="en" value="en" style="color:#fff;background-color: #3E9AC6;">英语</option>\n\
                                                <option name="jp" value="ja" style="color:#fff;background-color: #3E9AC6;">日语</option>\n\
                                        </select>\n\
                                </span>\n\
                                \n\
                                <span style="margin-left: 5px;"><span>目标语言: </span>\n\
                                        <select id="selectBoxID" class="selectBox" multiple="multiple">\n\
                                                <option value="en">英语</option>\n\
                                                <option value="ja">日语</option>\n\
                                                <option value="zh-CN">中文简体</option>\n\
                                                <option value="zh-sg">马新简体[zh-sg]</option>\n\
                                                <option value="zh-hant">繁體中文[zh-hant]</option>\n\
                                                <option value="zh-hk">繁體中文(香港)[zh-hk]</option>\n\
                                                <option value="zh-mo">繁體中文(澳门)[zh-mo]</option>\n\
                                                <option value="zh-tw">繁體中文(台湾)[zh-tw]</option>\n\
                                        </select>\n\
                                </span>\n\
                                \n\
                                <span style="margin-left: 5px;vertical-align: middle;">\n\
                                        <button id="translationText">翻译</button>\n\
                                </span>\n\
                        </div>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>添加称呼模块(需要提前设置备注):</legend>\n\
                        </fieldset>\n\
                        <div class="commentthread_entry_submitlink" style="">\n\
                                <span class="isCustom" style="display: block;text-align: left;">\n\
                                        <!-- 默认为{name},可以自行修改,好友没有备注则使用steam名称  -->\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">自定义称呼模式</span>\n\
                                        <input class="nameAddType" id="select_isCustom_checkbox" name="nameAddType" type="radio" style="vertical-align: middle;margin:2px;">\n\
                                        <span style="margin-left: 5px;vertical-align: middle;">\n\
                                                <button id="addCustomName">在留言框添加自定义称呼标识符</button>\n\
                                        </span>\n\
                                </span>\n\
                                \n\
                                <span class="isName" style="display: block;text-align: left;">\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">是否为好友添加称呼(如果好友没有备注则使用steam名称)</span>\n\
                                        <input class="nameAddType" id="select_islName_checkbox" name="nameAddType" type="radio" style="vertical-align: middle;margin:2px;">\n\
                                </span>\n\
                                \n\
                                <span class="isSpecialName" style="display: block;text-align: left;">\n\
                                        <span style="font-size:14px;line-height: 20px;color: #67c1f5 !important;">是否为好友添加称呼(如果好友设置有备注则使用,否则不添加称呼)</span>\n\
                                        <input class="nameAddType" id="select_isSpecialName_checkbox" name="nameAddType"  type="radio" style="vertical-align: middle;margin:2px;">\n\
                                </span>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title" style="padding: 10px 0px;">\n\
                                <span style="display: block;text-align: right;">\n\
                                        <a class="btn_grey_black btn_small_thin" href="javascript:CCommentThread.FormattingHelpPopup( \'Profile\' );">\n\
                                                <span class="btn_grey_black btn_small_thin_text">格式化帮助</span>\n\
                                        </a>\n\
                                        \n\
                                        <span class="emoticon_container">\n\
                                                <span class="emoticon_button small" id="emoticonbtn"></span>\n\
                                        </span>\n\
                                        \n\
                                        <span class="btn_green_white_innerfade btn_small" id="comment_submit">\n\
                                                <span id="comment_submit_text">发送评论给选择的好友</span>\n\
                                        </span>\n\
                                        \n\
                                        <span class="btn_green_white_innerfade btn_small" id="comment_submit_special">\n\
                                                <span id="comment_submit_special_text">根据国籍发送评论给选择的好友</span>\n\
                                        </span>\n\
                                </span>\n\
                        </div>\n\
                </div>\n\
                <div id="log">\n\
                        <span id="log_head"></span>\n\
                        <span id="log_body" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/"></span>\n\
                </div>\n\
                <!----------------------------------------------------------------------------------------------------------------->\n\
          \n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
                <div style="text-align: left;margin: 5px 0px;">\n\
                        <span style="margin-left: 5px;vertical-align: middle;">\n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>设置国籍:</legend>\n\
                                </fieldset>\n\
                                <div style="color: #67c1f5;">请选择要设置的国籍:</div>\n\
                                <select id="nationalitySelectBox" style="padding: 4px 12px 4px 8px;font-size:12px;outline:0;border: 1px solid #34DEFF;background-color:transparent;color: #66ccff;">\n\
                                        <option name="CN" value="CN" style="color:#fff;background-color: #3E9AC6;">简体中文</option>\n\
                                        <option name="EN" value="EN" style="color:#fff;background-color: #3E9AC6;">英语</option>\n\
                                        <option name="JP" value="JP" style="color:#fff;background-color: #3E9AC6;">日语</option>\n\
                                        <option name="CN-SG" value="CN-SG" style="color:#fff;background-color: #3E9AC6;">马新简体(马来西亚,新加坡)[zh-sg]</option>\n\
                                        <option name="CN-HANT" value="CN-HANT" style="color:#fff;background-color: #3E9AC6;">繁體中文[zh-hant]</option>\n\
                                        <option name="CN-HK" value="CN-HK" style="color:#fff;background-color: #3E9AC6;">繁體中文(香港)[zh-hk]</option>\n\
                                        <option name="CN-MO" value="CN-MO" style="color:#fff;background-color: #3E9AC6;">繁體中文(澳门)[zh-mo]</option>\n\
                                        <option name="CN-TW" value="CN-TW" style="color:#fff;background-color: #3E9AC6;">繁體中文(台湾)[zh-tw]</option>\n\
                                </select>\n\
                                <button id="setNationality">为选择的好友设置国籍标识</button>\n\
                        </span>\n\
                        <span style="margin-left: 5px;vertical-align: top;">\n\
                                <button id="unsetNationality">为选择的好友取消国籍标识</button>\n\
                        </span>\n\
                        <br />\n\
                         <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置不留言:</legend>\n\
                         </fieldset>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                                <span>\n\
                                        <button id="setNoLeave">为选择的好友设置不留言</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unsetNoLeave">为选择的好友取消设置不留言</button>\n\
                                </span>\n\
                        </div>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置留言时间间隔:</legend>\n\
                        </fieldset>\n\
                        <div id="">只选择日期则过n天后再留言,只选择时间则过x时后再留言(严格模式),日期和时间都选择了则过n天x时后再留言(严格模式)</div>\n\
                        <div id="">这里其实是一个时间差,比如指定的好友3天留言一次,今天是4月10日,你就选择4月13日就行了,这样做方便一点</div>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline" style="opacity:0;filter: alpha(opacity=0);position: absolute;z-index: 0;">\n\
                                  <label class="layui-form-label">请选择留言</label> <!--这个是被点击对象,隐藏、不占空间、触发事件-->\n\
                                  <div class="layui-input-inline">\n\
                                        <input type="text" class="layui-input" id="test-limit2" readonly="" placeholder="yyyy-MM-dd">\n\
                                  </div>\n\
                                </div>\n\
                                <div class="layui-inline" style="position: relative;z-index: -1;">\n\
                                  <label class="layui-form-label">留言日期差</label> <!--这个是克隆出来的对象,显示,占空间、被覆盖,不触发事件-->\n\
                                  <div class="layui-input-inline">\n\
                                        <input type="text" class="layui-input" id="test-limit1" readonly="" placeholder="yyyy-MM-dd">\n\
                                  </div>\n\
                                </div>\n\
                                \n\
                          </div>\n\
                        </div>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                                <span>\n\
                                        <button id="setTimeInterval">为选择的好友设置留言时间间隔</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unsetTimeInterval">为选择的好友取消设置留言时间间隔</button>\n\
                                </span>\n\
                        </div>\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动留言计划:</legend>\n\
                        </fieldset>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline" style="opacity:0;filter: alpha(opacity=0);position: absolute;z-index: 0;">\n\
                                        <label class="layui-form-label">请选择时间</label>  <!--这个是被点击对象,隐藏、不占空间、触发事件-->\n\
                                        <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test14" placeholder="H时m分s秒">\n\
                                        </div>\n\
                                </div>\n\
                                <div class="layui-inline" style="position: relative;z-index: -1;">\n\
                                        <label class="layui-form-label">请选择时间</label> <!--这个是克隆出来的对象,显示,占空间、被覆盖,不触发事件-->\n\
                                        <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test15" placeholder="H时m分s秒">\n\
                                        </div>\n\
                                </div>\n\
                          </div>\n\
                        </div>\n\
                        \n\
                        <table class="layui-hide" id="test" lay-filter="test"></table> <!-- 数据表格 -->\n\
                        \n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>设置好友分组:</legend>\n\
                        </fieldset>\n\
                        <div style="margin-left: 5px;vertical-align: top;margin-top:5px;">\n\
                        \n\
                        <form class="layui-form" action="">\n\
                          <div class="layui-form-item">\n\
                                <div class="layui-inline">\n\
                                  <label class="layui-form-label">分组列表</label>\n\
                                  <div class="layui-input-inline">\n\
                                        <select name="modules" lay-verify="required" lay-search="">\n\
                                          <option value="">直接选择或搜索选择</option>\n\
                                          <option value="1">分组名称</option>\n\
                                          <option value="2">分组名称</option>\n\
                                          <option value="3">分组名称</option>\n\
                                          <option value="4">分组名称</option>\n\
                                          <option value="5">分组名称</option>\n\
                                          <option value="6">分组名称</option>\n\
                                          <option value="7">分组名称</option>\n\
                                          <option value="8">分组名称</option>\n\
                                          <option value="9">分组名称</option>\n\
                                        </select>\n\
                                  </div>\n\
                                  <button type="button" class="layui-btn" id="editFriendGroup">编辑列表</button>\n\
                                </div>\n\
                          </div>\n\
                        </form>\n\
                        \n\
                                <span>\n\
                                        <button id="addFriendToGroup">为选择的好友添加分组</button>\n\
                                </span>\n\
                                <span>\n\
                                        <button id="unaddFriendToGroup">为选择的好友取消添加分组</button>\n\
                                </span>\n\
                                \n\
                                <div class="layui-collapse" lay-filter="test">\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                          </p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                  <div class="layui-colla-item">\n\
                                        <h2 class="layui-colla-title">分组名称</h2>\n\
                                        <div class="layui-colla-content">\n\
                                          <p>用户</p>\n\
                                        </div>\n\
                                  </div>\n\
                                </div>\n\
                                \n\
                        </div>\n\
                </div>\n\
          <div id="laydateDemo"></div>\n\
          <div id="log1">\n\
                <span id="log_head1"></span>\n\
                <span id="log_body1" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/"></span>\n\
          </div>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          \n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="NationalityGroup">按国籍进行高亮分组</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="NationalitySortGroup">按国籍进行排序分组(慢)</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="OfflineTimeGroup">按在线时间进行排序分组</button>\n\
          </span>\n\
          <span style="margin-left: 5px;vertical-align: top;">\n\
                <button id="ShowFriendData">显示好友详细数据-不可用</button>\n\
          </span>\n\
          <div class="layui-tab" lay-filter="test1">\n\
                <ul class="layui-tab-title">\n\
                  <li class="layui-this" lay-id="11" style="color:#ebebeb;">好友数据统计</li>\n\
                  <li lay-id="22" style="color:#ebebeb;">留言数据统计</li>\n\
                  <li lay-id="33" style="color:#ebebeb;">关系网统计</li>\n\
                  <li lay-id="44" style="color:#ebebeb;">当前配置统计</li>\n\
                  <li lay-id="55" style="color:#ebebeb;">查看好友配置统计</li>\n\
                </ul>\n\
                <div class="layui-tab-content">\n\
                        <div class="layui-tab-item layui-show">\n\
                                <span>数据表格(汇总所有的数据:id,名称,备注,国籍(语言),等级,好友数量,游戏数量,dlc数量,创意工坊数量,艺术作品数量,动态数量)</span>\n\
                                <table class="layui-hide" id="friendStatistics" lay-filter="friendStatistics"></table> <!--数据表格-->\n\
                                <div id="container_friendStatistics" style="width: 600px;height:400px;"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>分为:</span>\n\
                                <span>按国籍的饼图(总留言数量),</span>\n\
                                <span>按每天留言数据的折线图(统计所有的留言数据,生成的折线图),</span>\n\
                                <span>按最多留言数据的柱状图(那些好友一天留言数量排行榜/那些好友总留言数量排行榜/累计连续每天留言数量最多),</span>\n\
                                <span>数据表格(汇总所有的数据)</span>\n\
                                <div id="container_commentStatistics" style="min-width:400px;height:400px"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>好友关系网(仅统计共同好友)</span>\n\
                                <div id="container_relationshipStatistics" style="min-width: 320px;max-width: 800px;margin: 0 auto;"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>当前的配置数据和运行状态</span>\n\
                                <div id="container_currConfStatistics"></div>\n\
                        </div>\n\
                        <div class="layui-tab-item">\n\
                                <span>对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)</span>\n\
                                <div id="container_friConfStatistics"></div>\n\
                        </div>\n\
                  </div>\n\
          </div>\n\
          \n\
          <div id="pageDemo"></div>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          <fieldset class="layui-elem-field">\n\
                <legend>动态点赞助手</legend>\n\
                         <form class="layui-form" action="" lay-filter="example">\n\
                                 <div class="layui-form-item" pane="">\n\
                                        <label class="layui-form-label">总开关</label>\n\
                                        <div class="layui-input-block">\n\
                                                <!-- checked="" -->\n\
                                          <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest" title="开关" lay-text="开启|关闭" id="friendActivitySwitch">\n\
                                        </div>\n\
                                  </div>\n\
                          </form>\n\
                <div class="layui-field-box">\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置点赞内容:</legend>\n\
                        </fieldset>\n\
                        <form class="layui-form" action="">\n\
                                <div class="layui-form-item">\n\
                                        <label class="layui-form-label">点赞内容:</label>\n\
                                        <div class="layui-row">\n\
                                           <div class="layui-input-block">\n\
                                                         <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[1]" lay-skin="primary" title="朋友发布了状态" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[2]" lay-skin="primary" title="朋友发布了评测" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[3]" lay-skin="primary" title="朋友购买了游戏或者DLC" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[4]" lay-skin="primary" title="组发布了通知" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[5]" lay-skin="primary" title="组发布了活动" checked=""><br>\n\
                                                         </div>\n\
                                                        <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[6]" lay-skin="primary" title="朋友发布了艺术作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[7]" lay-skin="primary" title="朋友发布了创意工坊作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[8]" lay-skin="primary" title="朋友发布了指南" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[9]" lay-skin="primary" title="朋友上传了载图" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[10]" lay-skin="primary" title="朋友上传了视频" checked=""><br>\n\
                                                        </div>\n\
                                                        <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                                  <input type="checkbox" name="like[11]" lay-skin="primary" title="朋友收藏了艺术作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[12]" lay-skin="primary" title="朋友收藏了创意工坊作品" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[13]" lay-skin="primary" title="朋友收藏了指南" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[14]" lay-skin="primary" title="朋友收藏了载图" checked=""><br>\n\
                                                                  <input type="checkbox" name="like[15]" lay-skin="primary" title="朋友收藏了视频" checked=""><br>\n\
                                                        </div>\n\
                                           </div>\n\
                                          </div>\n\
                                  </div>\n\
                         </form>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动点赞模式:</legend>\n\
                        </fieldset>\n\
                        <form class="layui-form" action="">\n\
                                <div class="layui-form-item">\n\
                                        <label class="layui-form-label">点赞模式:</label>\n\
                                        <div class="layui-input-block">\n\
                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="运行后自动开始点赞" checked=""><br>\n\
                                          <input type="checkbox" name="like[2]" lay-skin="primary" title="点赞完成后自动刷新并点赞新动态时间间隔" checked=""><br>\n\
                                        </div>\n\
                                  </div>\n\
                         </form>\n\
                        <fieldset class="layui-elem-field layui-field-title">\n\
                           <legend>设置自动点赞时间区间(默认今天~之前所有的动态内容)</legend>\n\
                        </fieldset>\n\
                        <div class="layui-form">\n\
                          <div class="layui-form-item">\n\
                                        <div class="layui-inline">\n\
                                          <label class="layui-form-label">请选择范围</label>\n\
                                          <div class="layui-input-inline">\n\
                                                <input type="text" class="layui-input" id="test-limit3" readonly="" placeholder=" ~ "> <!--placeholder="yyyy-MM-dd"-->\n\
                                          </div>\n\
                                        </div>\n\
                          </div>\n\
                        </div>\n\
                        <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">\n\
                          <legend style="color:#66ccff;">点赞进度时间线</legend>\n\
                        </fieldset>\n\
                        <ul class="layui-timeline">\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月18日</h3>\n\
                                  <p style="color:#fff;">\n\
                                        <span>已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条</span>\n\
                                        <br><span>已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条</span>\n\
                                        <br><span>已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条</span>\n\
                                        <br><span>已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条</span>\n\
                                        <br><span>已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条</span>\n\
                                  </p>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月16日</h3>\n\
                                  <p style="color:#fff;">杜甫的思想核心是儒家的仁政思想,他有"致君尧舜上,再使风俗淳"的宏伟抱负。个人最爱的名篇有:</p>\n\
                                  <ul style="color:#fff;">\n\
                                        <li>《登高》</li>\n\
                                        <li>《茅屋为秋风所破歌》</li>\n\
                                  </ul>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <h3 class="layui-timeline-title" style="color:#66ccff;">8月15日</h3>\n\
                                  <p style="color:#fff;">\n\
                                        <span>中国人民抗日战争胜利日</span>\n\
                                        <br><span>常常在想,尽管对这个国家有这样那样的抱怨,但我们的确生在了最好的时代</span>\n\
                                        <br><span>铭记、感恩</span>\n\
                                        <br><span>所有为中华民族浴血奋战的英雄将士</span>\n\
                                        <br><span>永垂不朽</span>\n\
                                  </p>\n\
                                </div>\n\
                          </li>\n\
                          <li class="layui-timeline-item">\n\
                                <i class="layui-icon layui-timeline-axis"></i>\n\
                                <div class="layui-timeline-content layui-text">\n\
                                  <div class="layui-timeline-title" style="color:#66ccff;">过去</div>\n\
                                </div>\n\
                          </li>\n\
                        </ul>\n\
                </div>\n\
          </fieldset>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
          <fieldset class="layui-elem-field">\n\
                <legend>喜加一助手</legend>\n\
                <div class="layui-field-box">\n\
                        <!-- <div>是否启动喜加一助手</div> -->\n\
                <form class="layui-form" action="" lay-filter="example">\n\
                        <div class="layui-form-item" pane="">\n\
                           <label class="layui-form-label">总开关</label>\n\
                           <div class="layui-input-block">\n\
                                <!-- checked="" -->\n\
                                 <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest2" title="开关" lay-text="开启|关闭" id="FreeGameSwitch">\n\
                           </div>\n\
                         </div>\n\
                </form>\n\
                <form class="layui-form" action="">\n\
                        <div class="layui-form-item">\n\
                                <label class="layui-form-label">设置:</label>\n\
                                <div class="layui-row">\n\
                                   <div class="layui-input-block">\n\
                                                 <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="自动获取喜加一信息" checked=""><br>\n\
                                                 </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[6]" lay-skin="primary" title="自动领取喜加一游戏" checked=""><br>\n\
                                                </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[11]" lay-skin="primary" title="置顶显示在上方" checked=""><br>\n\
                                                </div>\n\
                                   </div>\n\
                                  </div>\n\
                          </div>\n\
                 </form>\n\
                 \n\
                 <div>设置喜加一数据来源</div>\n\
                 <form class="layui-form" action="">\n\
                        <div class="layui-form-item">\n\
                                <label class="layui-form-label">设置:</label>\n\
                                <div class="layui-row">\n\
                                   <div class="layui-input-block">\n\
                                                 <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[1]" lay-skin="primary" title="SteamDB" checked=""><br>\n\
                                                 </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[6]" lay-skin="primary" title="humblebundle" disabled=""><br>\n\
                                                </div>\n\
                                                <div class="layui-input-block" style="display:inline-block; margin-left:0px; vertical-align:top;">\n\
                                                          <input type="checkbox" name="like[11]" lay-skin="primary" title="fanatical" disabled=""><br>\n\
                                                </div>\n\
                                   </div>\n\
                                  </div>\n\
                          </div>\n\
                  </form>\n\
                </div>\n\
          </fieldset>\n\
        </div>\n\
        \n\
        <div class="layui-tab-item" style="background-color: rgba(0,0,0,0.2); color: #ebebeb;">\n\
                <fieldset class="layui-elem-field">\n\
                  <legend>功能设置</legend>\n\
                  <div class="layui-field-box">\n\
                          \n\
                          <form class="layui-form" action="" lay-filter="example">\n\
                                  <div class="layui-form-item" pane="">\n\
                                         <label class="layui-form-label">Debug模式</label>\n\
                                         <div class="layui-input-block">\n\
                                                                                                        <!-- checked="" -->\n\
                                           <input type="checkbox" name="close" lay-skin="switch" lay-filter="switchTest3" title="开关" lay-text="开启|关闭">\n\
                                         </div>\n\
                                   </div>\n\
                          </form>\n\
                                <div>弹出层</div>\n\
                                <div>滑块</div>\n\
                                <button type="button" class="layui-btn">导入导出重置当前设置</button>\n\
                                <div>弹出层</div>\n\
                                \n\
                                <div class="layui-upload-drag" id="uploadDemo">\n\
                                  <i class="layui-icon"></i>\n\
                                  <p>点击上传,或将文件拖拽到此处</p>\n\
                                  <div class="layui-hide" id="uploadDemoView">\n\
                                        <hr>\n\
                                        <img src="" alt="上传成功后渲染" style="max-width: 100%">\n\
                                  </div>\n\
                                </div>\n\
                  </div>\n\
                </fieldset>\n\
                \n\
                <fieldset class="layui-elem-field">\n\
                        <legend>界面设置</legend>\n\
                        <div class="layui-field-box">\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                <legend>语言配置</legend>\n\
                                <div id="selectLanguageDropdown" class="localizationTool"></div>\n\
                                        <button type="button" class="layui-btn">自动检测(简体中文)</button>\n\
                                        <button type="button" class="layui-btn">简体中文</button>\n\
                                        <button type="button" class="layui-btn">繁体中文</button>\n\
                                        <button type="button" class="layui-btn">English</button>\n\
                                </fieldset>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>主题切换</legend>\n\
                                        <div>请选择一个主题,然后点击应用</div>\n\
                                        <button type="button" class="layui-btn">应用主题</button>\n\
                                </fieldset>\n\
                                \n\
                                <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>UI设置</legend>\n\
                                        <div>预览:</div>\n\
                                        <div>\n\
                                        <span>主要字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all1"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>主要背景颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all2"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言成功字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all3"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言失败字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all4"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <div>\n\
                                        <span>留言发生错误字体颜色:</span>\n\
                                                <span style="margin-left: 30px;">\n\
                                                        <input type="hidden" name="color" value="" id="test-all-input">\n\
                                                        <div id="test-all5"></div>\n\
                                                </span>\n\
                                        </div>\n\
                                        \n\
                                        <button type="button" class="layui-btn">保存为主题</button>\n\
                                </fieldset>\n\
                                \n\
                        </div>\n\
                </fieldset>\n\
                \n\
                <fieldset class="layui-elem-field">\n\
                        <legend>关于SteamAssistant(Steam小助手)</legend>\n\
                                <div class="layui-field-box">\n\
                                        <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>程序信息:</legend>\n\
                                        <div>当前版本:v0.2.3.0</div>\n\
                                        <div>主程序框架更新时间:2020年4月19日</div>\n\
                                        <div>common模块:2020年4月19日</div>\n\
                                        <div>databaseConf模块:2020年4月19日</div>\n\
                                        <div>externalApis模块:2020年4月19日</div>\n\
                                        <div>steamApis模块:2020年4月19日</div>\n\
                                        <div>translateApis模块:2020年4月19日</div>\n\
                                        <div>Utility模块:2020年4月19日</div>\n\
                                        <div>UI模块:2020年4月19日</div>\n\
                                        <div>Event模块:2020年4月19日</div>\n\
                                        <div>CityList模块:2020年4月19日</div>\n\
                                        <fieldset class="layui-elem-field layui-field-title">\n\
                                        <legend>联系作者:</legend>\n\
                                        <button type="button" class="layui-btn">反馈错误</button>\n\
                                        <button type="button" class="layui-btn">提交建议</button>\n\
                                </div>\n\
                </fieldset>\n\
                \n\
                <div id="sliderDemo" style="margin: 50px 20px;"></div>\n\
        </div>\n\
        \n\
        </div>\n\
</div>\n\
';

var mainUI_template = '\
<script type="text/html" id="switchTpl">\n\
        <!-- 这里的 checked 的状态只是演示 -->\n\
        <input type="checkbox" name="front" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="frontDemo" {{ d.id == 10003 ? \'checked\' : \'\' }}>\n\
</script>\n\
\n\
<script type="text/html" id="checkboxTpl">\n\
        <!-- 这里的 checked 的状态只是演示 -->\n\
        <input type="checkbox" name="lock" value="{{d.id}}" title="锁定" lay-filter="lockDemo" {{ d.id == 10006 ? \'checked\' : \'\' }}>\n\
</script>\n\
';

var winBaseFrame = '\
<div></div>\n\
';

/**
 * JS_library.js
 */

function wordCount(data) {
        var intLength = 0;
        for (var i = 0; i < data.length; i++) {
                if ((data.charCodeAt(i) < 0) || (data.charCodeAt(i) > 255))
                        intLength = intLength + 3;
                else
                        intLength = intLength + 1;
        }
        return intLength;
}

//var arrComment = []; /*id文本框的id, height文本框的高度, scrollTop存储收缩状态下的进度条, visible可见性*/
function inBoxShrinkage(id,type,mode = true){ /*参数: string 要伸缩的文本框id,boolean 是收缩还是伸展,boolean 需不需要重置滚动条(默认重置)*/
        var iArr = -1;
        for(let i=0;i<arrComment.length;i++){
                if(arrComment[i].id == id){
                        iArr = i; /*记录旧节点的下标*/
                        /*console.log('记录旧节点的下标','iArr',iArr);*/
                        break;
                }
        }
        if(iArr == -1){
                arrComment.push( {id: id, height: 0, scrollTop: 0, visible: true} ); /*没有找到则是新的节点,就添加*/
                iArr = arrComment.length - 1 ; /*设置新节点的下标*/
        }
        var nHeight = arrComment[iArr].height; /*裁切字符串获取下标*/
        if(nHeight==0){ /*第一次,没有指定的样式*/
                nHeight = document.getElementById('comment_textarea').scrollHeight + 'px'; /*对于每个节点使用当前高度*/
        }
        var commentText = document.getElementById(id);
        if (type == true){
                commentText.removeEventListener('propertychange', change, false);
                commentText.removeEventListener('input', change, false);
                commentText.removeEventListener('focus', change, false);
                commentText.scrollTop = 0;
                
                /*代码位于event.js translationText翻译按钮事件*/
                /*代码位于uiHandler.js 获取输入框和注册的scroll事件*/
                /*代码位于ui.js inBoxShrinkage()判断是否需要重新进行定位*/
                /*https://blog.csdn.net/zhengbo0/article/details/7629506*/
                /*https://www.jb51.net/article/104047.htm*/
                if((mode && arrComment[iArr].height > document.documentElement.clientHeight) || (mode && arrComment[iArr].visible == false)){
                        document.body.scrollTop = arrComment[iArr].scrollTop;
                        document.documentElement.scrollTop = arrComment[iArr].scrollTop;
                        console.log('重新进行定位');
                }
                commentText.style.height = '28px';
        }
        else if (type == false){
                autoTextarea(commentText);
                if(mode){
                        arrComment[iArr].scrollTop = document.documentElement.scrollTop; /*设置 存储收缩状态下的进度条*/
                }
                commentText.style.height = nHeight + 'px';
        }
        else if (type == 'test'){
                if(mode){
                        arrComment[iArr].scrollTop = document.documentElement.scrollTop; /*设置 存储收缩状态下的进度条*/
                }
                commentText.style.height = nHeight + 'px';
        }
}

var change;
var autoTextarea = function autoTextarea(elem, extra, maxHeight) {
        extra = extra || 0;
        var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
                isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
                addEvent = function(type, callback) {
                        elem.addEventListener ?
                                elem.addEventListener(type, callback, false) :
                                elem.attachEvent('on' + type, callback);
                },
                getStyle = elem.currentStyle ? function(name) {
                        var val = elem.currentStyle[name];
                        if (name === 'height' && val.search(/px/i) !== 1) {
                                var rect = elem.getBoundingClientRect();
                                return rect.bottom - rect.top -
                                        parseFloat(getStyle('paddingTop')) -
                                        parseFloat(getStyle('paddingBottom')) + 'px';
                        };
                        return val;
                } : function(name) {
                        return getComputedStyle(elem, null)[name];
                },
                minHeight = parseFloat(getStyle('height'));
        elem.style.resize = 'none';
        
        change = function(e,id) {
                        var scrollTop, height,
                                padding = 0,
                                style = elem.style;
                        var obj = document.getElementById('strInBytes');
                        var commentText;
                        if(id == undefined || id == null)
                                commentText = document.getElementById(window.event.target.id);
                        else
                                commentText = document.getElementById(id);
                        var numText = wordCount(commentText.value);
                        obj.innerHTML =  "当前字符字节数: <span id='strInBytes_Text'>" + numText + '</span>/999';
                        if (wordCount(commentText.value) >= 1000) {
                                document.getElementById('strInBytes_Text').style.color = '#FF0000';
                                commentText.style.background = '#7C243E';
                                if(g_conf[0].isCommentRunStatus == false)/*如果正在留言则不清除(没有留言则清除)*/
                                        jQuery('#log_head').html('');
                                jQuery('#log_head').html("<br><b style='color:#2CD8D6;'>字数超标啦! 请保持在1000字符以下. " + '当前字数:' + numText + '<b>');
                                g_conf[0].isWarnInfo = true;
                        } else {
                                document.getElementById('strInBytes_Text').style.color = '#32CD32';
                                commentText.style.background = '#1b2838';
                                if(g_conf[0].isCommentRunStatus == false && g_conf[0].isWarnInfo == true){ /*没有留言并且有警告信息才清除*/
                                        jQuery('#log_head').html('');
                                        g_conf[0].isWarnInfo = false;
                                }
                        }
                        if (elem._length === elem.value.length) return;
                                elem._length = elem.value.length;
                        if (!isFirefox && !isOpera) {
                                padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
                        };
                        scrollTop = document.body.scrollTop || document.documentElement.scrollTop; /*定位到最后*/
                        elem.style.height = minHeight + 'px';
                        if (elem.scrollHeight >= minHeight) {
                                if (maxHeight && elem.scrollHeight > maxHeight) {
                                        height = maxHeight - padding;
                                        style.overflowY = 'auto';
                                } else {
                                        height = elem.scrollHeight - padding;
                                        style.overflowY = 'hidden';
                                };
                                style.height = height + extra + 'px';
                                var nHeight1 = height + extra;
                                /*console.log('nHeight1',nHeight1,'newStr',newStr);*/
                                /*https://blog.csdn.net/weixin_34281477/article/details/93702604*/
                                /*https://www.cnblogs.com/cblogs/p/9293522.html*/
                                /*https://www.w3school.com.cn/tiy/t.asp?f=jseg_replace_1*/
                                var iIndex;
                                for(let i=0;i<arrComment.length;i++)
                                {
                                        if(id == undefined || id == null){
                                                if(arrComment[i].id == window.event.target.id){
                                                        iIndex = i;
                                                        break;
                                                }
                                        }
                                        else{
                                                if(arrComment[i].id == id){
                                                        iIndex = i;
                                                        break;
                                                }
                                        }
                                }
                                
                                arrComment[iIndex].height = nHeight1;/*存储*/
                                scrollTop += parseInt(style.height) - elem.currHeight;
                                if(!isNaN(scrollTop)){
                                        document.body.scrollTop = scrollTop;
                                        document.documentElement.scrollTop = scrollTop;
                                }
                                elem.currHeight = parseInt(style.height);
                        };
        };
        addEvent('propertychange', change);
        addEvent('input', change);
        /*addEvent('focus', change);*/
        change();
};

function openThisAndCloseOtherAllinBoxShrinkage(id,type){ /*打开这个,关闭其他所有的inBoxShrinkage*/
        inBoxShrinkage(id,type); /*展开*/
        if(id != 'comment_textarea' && document.getElementById('comment_textarea') != null)
                inBoxShrinkage('comment_textarea',true,false);
        if(id != 'comment_textarea_en' && document.getElementById('comment_textarea_en') != null)
                inBoxShrinkage('comment_textarea_en',true,false);
        if(id != 'comment_textarea_jp' && document.getElementById('comment_textarea_jp') != null)
                inBoxShrinkage('comment_textarea_jp',true,false);
        if(id != 'comment_textarea_zhc' && document.getElementById('comment_textarea_zhc') != null)
                inBoxShrinkage('comment_textarea_zhc',true,false);
        if(id != 'comment_textarea_zh_sg' && document.getElementById('comment_textarea_zh_sg') != null)
                inBoxShrinkage('comment_textarea_zh_sg',true,false);
        if(id != 'comment_textarea_zh_hant' && document.getElementById('comment_textarea_zh_hant') != null)
                inBoxShrinkage('comment_textarea_zh_hant',true,false);
        if(id != 'comment_textarea_zh_hk' && document.getElementById('comment_textarea_zh_hk') != null)
                inBoxShrinkage('comment_textarea_zh_hk',true,false);
        if(id != 'comment_textarea_zh_mo' && document.getElementById('comment_textarea_zh_mo') != null)
                inBoxShrinkage('comment_textarea_zh_mo',true,false);
        if(id != 'comment_textarea_zh_tw' && document.getElementById('comment_textarea_zh_tw') != null)
                inBoxShrinkage('comment_textarea_zh_tw',true,false);
}

var inBoxonblurID = 0;
function addEmojiEvent(emojiCode)
{
        switch (inBoxonblurID){
                case 0:
                        let inObj = document.getElementById('comment_textarea');
                        inObj.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea'); /*统计翻译后的文字长度*/
                        break;
                case 1:
                        let inObj1 = document.getElementById('comment_textarea_en');
                        inObj1.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_en'); /*统计翻译后的文字长度*/
                        break;
                case 2:
                        let inObj2 = document.getElementById('comment_textarea_jp');
                        inObj2.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_jp'); /*统计翻译后的文字长度*/
                        break;
                case 3:
                        let inObj3 = document.getElementById('comment_textarea_zhc');
                        inObj3.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zhc'); /*统计翻译后的文字长度*/
                        break;
                case 4:
                        let inObj4 = document.getElementById('comment_textarea_zh_sg');
                        inObj4.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zh_sg'); /*统计翻译后的文字长度*/
                        break;
                case 5:
                        let inObj5 = document.getElementById('comment_textarea_zh_hant');
                        inObj5.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zh_hant'); /*统计翻译后的文字长度*/
                        break;
                case 6:
                        let inObj6 = document.getElementById('comment_textarea_zh_hk');
                        inObj6.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zh_hk'); /*统计翻译后的文字长度*/
                        break;
                case 7:
                        let inObj7 = document.getElementById('comment_textarea_zh_mo');
                        inObj7.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zh_mo'); /*统计翻译后的文字长度*/
                        break;
                case 8:
                        let inObj8 = document.getElementById('comment_textarea_zh_tw');
                        inObj8.value += ':' + emojiCode + ':'; /*添加表情*/
                        if(change != undefined)
                                change(null, 'comment_textarea_zh_tw'); /*统计翻译后的文字长度*/
                        break;
                default:
                        break;
        }
}
//----------------------------------------------------------------------------------------
function emojiFix() { /*修复表情*/
        console.log("表情开始修复...");
        let obj = document.getElementsByClassName("emoticon_popup es_emoticons")[0];
        if (obj != undefined) {
                obj.style.position = "relative";
                obj.style.zIndex = "999";
        }

        let obj1 = document.getElementsByClassName("emoticon_popup_ctn")[0];
        if (obj1 != undefined) {
                obj1.style.zIndex = "999";
        }

        let emojiObjArrs = document.getElementsByClassName("emoticon_option");
        if (emojiObjArrs.length > 0) {
                for (let i in emojiObjArrs) {
                        emojiObjArrs[i].onclick = function() {
                                addEmojiEvent(emojiObjArrs[i].getAttribute('data-emoticon'));
                        }
                }
                console.log("表情修复完毕!");
        }
        /*console.log("修复表情错误!");*/
}

function dvWidthFix() { /*用于修复PC端留言提示内容溢出导致布局发生错误的问题*/
        $("subpage_container").style.width = "calc(100% - 280px)";
}

function deleteSelectText(){ /*删除选择的文本*/
        window.getSelection().deleteFromDocument(); /*删除选择的文本*/
}

var _ySelectsObj;
function _ySelects($) {
        $.fn.ySelect = function(options) {
                
                var defaultOptions = {
                        placeholder: '请选择',
                        numDisplayed: 4,
                        overflowText: '{n} selected',
                        searchText: '搜索',
                        showSearch: true
                }
                if (typeof options == 'string') {
                        var settings = options;
                } else {
                        var settings = $.extend(true, {}, defaultOptions, options);
                }
                
                function ySelect(select, settings) {
                        this.$select = $(select);
                        this.settings = settings;
                        this.create();
                }
                ySelect.prototype = {
                        create: function() {
                                var multiple = this.$select.is('[multiple]') ? ' multiple' : '';
                                this.$select.wrap('<div class="fs-wrap' + multiple + '"></div>');
                                this.$select.before('<div class="fs-label-wrap"><div class="fs-label">' + this.settings.placeholder +
                                        '</div><span class="fs-arrow"></span></div>');
                                this.$select.before('<div class="fs-dropdown hidden"><div class="fs-options"></div></div>');
                                this.$select.addClass('hidden');
                                this.$wrap = this.$select.closest('.fs-wrap');
                                this.reload();
                        },
                        reload: function() {
                                if (this.settings.showSearch) {
                                        var search = '<div class="fs-search"><input type="search" placeholder="' + this.settings.searchText +
                                                '" /><span class="fs-selectAll"><i class="fa fa-check-square-o"></i></span></div>';
                                        this.$wrap.find('.fs-dropdown').prepend(search);
                                }
                                var choices = this.buildOptions(this.$select);
                                this.$wrap.find('.fs-options').html(choices);
                                this.reloadDropdownLabel();
                        },
                        destroy: function() {
                                this.$wrap.find('.fs-label-wrap').remove();
                                this.$wrap.find('.fs-dropdown').remove();
                                this.$select.unwrap().removeClass('hidden');
                        },
                        buildOptions: function($element) {
                                var $this = this;
                                var choices = '';
                                $element.children().each(function(i, el) {
                                        var $el = $(el);
                                        if ('optgroup' == $el.prop('nodeName').toLowerCase()) {
                                                choices += '<div class="fs-optgroup">';
                                                choices += '<div class="fs-optgroup-label">' + $el.prop('label') + '</div>';
                                                choices += $this.buildOptions($el);
                                                choices += '</div>';
                                        } else {
                                                var selected = $el.is('[selected]') ? ' selected' : '';
                                                choices += '<div class="fs-option' + selected + '" data-value="' + $el.prop('value') +
                                                        '"><span class="fs-checkbox"><i></i></span><div class="fs-option-label">' + $el.html() + '</div></div>';
                                        }
                                });
                                return choices;
                        },
                        reloadDropdownLabel: function() {
                                var settings = this.settings;
                                var labelText = [];
                                this.$wrap.find('.fs-option.selected').each(function(i, el) {
                                        labelText.push($(el).find('.fs-option-label').text());
                                });
                                if (labelText.length < 1) {
                                        labelText = settings.placeholder;
                                } else if (labelText.length > settings.numDisplayed) {
                                        labelText = settings.overflowText.replace('{n}', labelText.length);
                                } else {
                                        labelText = labelText.join(', ');
                                }
                                this.$wrap.find('.fs-label').html(labelText);
                                this.$select.change();
                        },
                        setwrap: function() {
                                return "123";
                        },
                }
                
                return this.each(function() {
                        var data = $(this).data('ySelect');
                        if (!data) {
                                data = new ySelect(this, settings);
                                _ySelectsObj = data;
                                $(this).data('ySelect', data);
                        }
                        if (typeof settings == 'string') {
                                data[settings]();
                        }
                });
        }
        window.ySelect = {
                'active': null,
                'idx': -1
        };

        function setIndexes($wrap) {
                $wrap.find('.fs-option:not(.hidden)').each(function(i, el) {
                        $(el).attr('data-index', i);
                        $wrap.find('.fs-option').removeClass('hl');
                });
                $wrap.find('.fs-search input').focus();
                window.ySelect.idx = -1;
        }

        function setScroll($wrap) {
                var $container = $wrap.find('.fs-options');
                var $selected = $wrap.find('.fs-option.hl');
                var itemMin = $selected.offset().top + $container.scrollTop();
                var itemMax = itemMin + $selected.outerHeight();
                var containerMin = $container.offset().top + $container.scrollTop();
                var containerMax = containerMin + $container.outerHeight();
                if (itemMax > containerMax) {
                        var to = $container.scrollTop() + itemMax - containerMax;
                        $container.scrollTop(to);
                } else if (itemMin < containerMin) {
                        var to = $container.scrollTop() - containerMin - itemMin;
                        $container.scrollTop(to);
                }
        }
        $(document).on('click', '.fs-selectAll', function() {
                $(this).parent().next().find('.fs-option.selected').click();
                $(this).parent().next().find('.fs-option').click();
                $(this).addClass('selected');
        });
        $(document).on('click', '.fs-selectAll.selected', function() {
                $(this).parent().next().find('.fs-option.selected').click();
                $(this).removeClass('selected');
        });
        $(document).on('click', '.fs-option', function() {
                var $wrap = $(this).closest('.fs-wrap');
                if ($wrap.hasClass('multiple')) {
                        var selected = [];
                        $(this).toggleClass('selected');
                        $wrap.find('.fs-option.selected').each(function(i, el) {
                                selected.push($(el).attr('data-value'));
                        });
                } else {
                        var selected = $(this).attr('data-value');
                        $wrap.find('.fs-option').removeClass('selected');
                        $(this).addClass('selected');
                        $wrap.find('.fs-dropdown').hide();
                }
                $wrap.find('select').val(selected);
                $wrap.find('select').ySelect('reloadDropdownLabel');
                $wrap.find('select').ySelect('setwrap');
        });
        $(document).on('keyup', '.fs-search input', function(e) {
                if (40 == e.which) {
                        $(this).blur();
                        return;
                }
                var $wrap = $(this).closest('.fs-wrap');
                var keywords = $(this).val();
                $wrap.find('.fs-option, .fs-optgroup-label').removeClass('hidden');
                if ('' != keywords) {
                        $wrap.find('.fs-option').each(function() {
                                var regex = new RegExp(keywords, 'gi');
                                if (null === $(this).find('.fs-option-label').text().match(regex)) {
                                        $(this).addClass('hidden');
                                }
                        });
                        $wrap.find('.fs-optgroup-label').each(function() {
                                var num_visible = $(this).closest('.fs-optgroup').find('.fs-option:not(.hidden)').length;
                                if (num_visible < 1) {
                                        $(this).addClass('hidden');
                                }
                        });
                }
                setIndexes($wrap);
        });
        $(document).on('click', function(e) {
                var $el = $(e.target);
                var $wrap = $el.closest('.fs-wrap');
                if (0 < $wrap.length) {
                        if ($el.hasClass('fs-label') || $el.hasClass('fs-arrow')) {
                                window.ySelect.active = $wrap;
                                var is_hidden = $wrap.find('.fs-dropdown').hasClass('hidden');
                                $('.fs-dropdown').addClass('hidden');
                                if (is_hidden) {
                                        $wrap.find('.fs-dropdown').removeClass('hidden');
                                } else {
                                        $wrap.find('.fs-dropdown').addClass('hidden');
                                }
                                setIndexes($wrap);
                        }
                } else {
                        $('.fs-dropdown').addClass('hidden');
                        window.ySelect.active = null;
                }
        });
        $(document).on('keydown', function(e) {
                var $wrap = window.ySelect.active;
                if (null === $wrap) {
                        return;
                } else if (38 == e.which) {
                        e.preventDefault();
                        $wrap.find('.fs-option').removeClass('hl');
                        if (window.ySelect.idx > 0) {
                                window.ySelect.idx--;
                                $wrap.find('.fs-option[data-index=' + window.ySelect.idx + ']').addClass('hl');
                                setScroll($wrap);
                        } else {
                                window.ySelect.idx = -1;
                                $wrap.find('.fs-search input').focus();
                        }
                } else if (40 == e.which) {
                        e.preventDefault();
                        var last_index = $wrap.find('.fs-option:last').attr('data-index');
                        if (window.ySelect.idx < parseInt(last_index)) {
                                window.ySelect.idx++;
                                $wrap.find('.fs-option').removeClass('hl');
                                $wrap.find('.fs-option[data-index=' + window.ySelect.idx + ']').addClass('hl');
                                setScroll($wrap);
                        }
                } else if (32 == e.which || 13 == e.which) {
                        $wrap.find('.fs-option.hl').click();
                } else if (27 == e.which) {
                        $('.fs-dropdown').addClass('hidden');
                        window.ySelect.active = null;
                }
        });
        $.fn.ySelectedValues = function(splitString) {
                var result = "";
                var $selects = this.find("option:selected");
                for (var i = 0; i < $selects.length; i++) {
                        result += $selects[i].value + ((i == $selects.length - 1) ? "" : splitString);
                }
                return result;
        }
        $.fn.ySelectedTexts = function(splitString) {
                var result = "";
                var $selects = this.find("option:selected");
                for (var i = 0; i < $selects.length; i++) {
                        result += $selects[i].text + ((i == $selects.length - 1) ? "" : splitString);
                }
                return result;
        }
}


const _RESMODE = {
        res_Tampermonkey: "Tampermonkey-Res",
        res_CDN: "CDN-CommonRequest",
        res_LocalVariables: "JS-LocalVariables"
};

const _RESTYPE = {
        res_css: "css",
        res_js: "js",
        res_json: "json"
};

/**
 * @param {String} strResID 资源id
 */
function getResConfByID(strResID){
        if(_resConf){
                for (let i = 0; i < _resConf.length; i++) {
                        if(_resConf[i].resID == strResID)
                                return _resConf[i].resInfo;
                }
                return new Error("[sophie] not find strResID.");
        }
        else{
                throw new Error("[sophie] _resConf is undefined.");
        }
}

function patchJS_layui(resData){
        //对 o.prototype.addcss 打补丁,使其直接return this, 而不是去加载css, css通过脚本欲加载的资源手动添加
        var findStr = 'layui.link(n.dir+"css/"+e,t,o)';
        var index = resData.indexOf(findStr); //查找代补丁代码的位置
        var fixJS = resData.slice(0,index); //提取 代补丁代码前部分
        fixJS += 'this'; //添加 补丁代码
        fixJS += resData.slice(index+findStr.length); //提取 代补丁代码后部分
        return fixJS;
}

const _resConf = [
        {
                resID: "BaseResources", //资源唯一id
                resInfo: [     //资源相关信息
                        {
                                resName: "css_layui",        //资源名称
                                resDescription: "layui库所需的css", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["css_layui"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_css,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://www.layuicdn.com/layui-v2.5.6/css/layui.css",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/layui/2.5.6/css/layui.css",
                                                        "https://cdn.90so.net/layui/2.5.6/css/layui.css",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "css_laydate",        //资源名称
                                resDescription: "layui库(laydate组件)所需的css", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["css_laydate"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_css,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://www.layuicdn.com/layui-v2.5.6/css/modules/laydate/default/laydate.css?v=5.0.9",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/layui/2.5.6/css/modules/laydate/default/laydate.css?v=5.0.9",
                                                        "https://cdn.90so.net/layui/2.5.6/css/modules/laydate/default/laydate.css?v=5.0.9",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "css_layer",        //资源名称
                                resDescription: "layui库(layer组件)所需的css", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["css_layer"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_css,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://www.layuicdn.com/layui-v2.5.6/css/modules/layer/default/layer.css?v=3.1.1",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/layui/2.5.6/css/modules/layer/default/layer.css?v=3.1.1",
                                                        "https://cdn.90so.net/layui/2.5.6/css/modules/layer/default/layer.css?v=3.1.1",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "css_layui_Modules",        //资源名称
                                resDescription: "layui库(组件)所需的css", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["css_layui_Modules"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_css,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://www.layuicdn.com/layui-v2.5.6/css/modules/code.css",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/layui/2.5.6/css/modules/code.css",
                                                        "https://cdn.90so.net/layui/2.5.6/css/modules/code.css",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "css_fontAwesome",        //资源名称
                                resDescription: "fontAwesome库所需的css", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["css_fontAwesome"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_css,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css",
                                                        "https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_highstock",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_highstock"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://code.highcharts.com.cn/highstock/highstock.js",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.0/highstock.min.js",
                                                        "https://cdn.bootcdn.net/ajax/libs/highcharts/8.1.0/highstock.js",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_highstock_exporting",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_highstock_exporting"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://code.highcharts.com.cn/highcharts/modules/exporting.js",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.0/modules/exporting.min.js",
                                                        "https://cdn.bootcdn.net/ajax/libs/highcharts/8.1.0/modules/exporting.js",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_highstock_oldie",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_highstock_oldie"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://code.highcharts.com.cn/highcharts/modules/oldie.js",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.0/modules/oldie.src.min.js",
                                                        "https://cdn.bootcdn.net/ajax/libs/highcharts/8.1.0/modules/oldie.js",
                                                ],
                                                onSucceed: null ,//如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_highstock_networkgraph",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_highstock_networkgraph"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://code.highcharts.com.cn/highcharts/modules/networkgraph.js",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.0/modules/networkgraph.min.js",
                                                        "https://cdn.bootcdn.net/ajax/libs/highcharts/8.1.0/modules/networkgraph.js",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_highstock_zh_CN",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_highstock_zh_CN"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://code.highcharts.com.cn/highcharts-plugins/highcharts-zh_CN.js",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_layui",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_layui"],
                                                onSucceed: patchJS_layui //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://www.layuicdn.com/layui-v2.5.6/layui.all.js",
                                                        "https://cdnjs.cloudflare.com/ajax/libs/layui/2.5.6/layui.all.min.js",
                                                        "https://cdn.90so.net/layui/2.5.6/layui.all.js",
                                                ],
                                                onSucceed: patchJS_layui //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "JS_localforage",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["JS_localforage"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://cdnjs.cloudflare.com/ajax/libs/localforage/1.7.3/localforage.min.js",
                                                        "https://cdn.90so.net/localforage/1.7.3/localforage.min.js",
                                                        "https://cdn.bootcdn.net/ajax/libs/localforage/1.7.3/localforage.min.js",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "css_jquery_localizationTool",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_LocalVariables,
                                                resType: _RESTYPE.res_css,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["jquery_localizationTool_css"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "js_jquery_localizationTool",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resMode: _RESMODE.res_Tampermonkey,
                                                resType: _RESTYPE.res_js,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: ["Jquery_localizationtool"],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resMode: _RESTYPE.res_CDN,
                                                resType: _RESTYPE.res_js,
                                                isFight: false,
                                                sourceInfo: [
                                                        "https://greasyfork.org/scripts/403927-jquery-localizationtool-js/code/jquerylocalizationTooljs.js?version=808323",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        }
                ]
        },
        {
                resID: "ExpandResources", //资源唯一id
                resInfo: [     //资源相关信息
                        {
                                resName: "",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resType: _RESTYPE.res_Tampermonkey,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resType: _RESTYPE.res_CDN,
                                                isFight: false,
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resType: _RESTYPE.res_Tampermonkey,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resType: _RESTYPE.res_CDN,
                                                isFight: false,
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        },
                        {
                                resName: "",        //资源名称
                                resDescription: "", //资源描述
                                res: [ //资源信息: 为了保证最大可用性, 资源可以从多种途径加载, 越前的资源加载优先级越高
                                        {
                                                resType: _RESTYPE.res_Tampermonkey,
                                                isFight: false, // 同一个资源下,可以手动设置是否需要启动争抢模式,谁先加载完就使用谁的
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        },
                                        {
                                                resType: _RESTYPE.res_CDN,
                                                isFight: false,
                                                sourceInfo: [
                                                        "",
                                                        "",
                                                ],
                                                onSucceed: null //如果获取资源成功后的回调函数(立刻触发,可用于取消加载资源,资源检查等)
                                        }
                                ]
                        }
                ]
        }
];


function injectJS(){
        var funcCode = "";
        funcCode += wordCount.toString() + "\n\n";
        funcCode += "var arrComment = []; /*id文本框的id, height文本框的高度, scrollTop存储收缩状态下的进度条, visible可见性*/" + "\n";
        funcCode += inBoxShrinkage.toString() + "\n\n";
        funcCode += "var change;" + "\n";
        funcCode += autoTextarea.toString() + "\n\n";
        funcCode += openThisAndCloseOtherAllinBoxShrinkage.toString() + "\n\n";
        funcCode += "var inBoxonblurID = 0;" + "\n";
        funcCode += addEmojiEvent.toString() + "\n\n";
        addNewScript('styles_Script',funcCode);
        
        var funcCode = "";
        funcCode += emojiFix.toString() + "\n\n";
        funcCode += dvWidthFix.toString() + "\n\n";
        funcCode += deleteSelectText.toString() + "\n\n";
        funcCode += _ySelects.toString() + "\n\n";
        addNewScript('Utility_Script',funcCode);
}

var languagesList_ExpandUI_QuickNavigationBar_html = {
'defaultLanguage' : 'auto_detected', /* (optional) although must be defined if you don't want en_GB */
'showFlag': false,            /* (optional) show/hide the flag 显示/隐藏旗帜 */
'showCountry': false,         /* (optional) show/hide the country name 显示/隐藏国家名称 */
'showLanguage': true,        /* (optional) show/hide the country language 显示/隐藏国家语言 */
'labelTemplate': '{{language}}',
'languages' : {              /* (optional) define **ADDITIONAL** custom languages 定义**额外的**自定义语言 */
    'auto_detected' : {
        'country': 'Auto Detected',
        'language' : 'Auto Detected',
        'countryTranslated': 'Auto Detected',
        'languageTranslated': 'Auto Detected',
        'flag' : {
            'url' : 'https://upload.wikimedia.org/wikipedia/commons/2/22/Flag_of_Hokkaido_Prefecture.svg', /* url of flag image 标志图像url */
            'class' : 'auto-flag' /* (optional) class to assign to the flag (e.g., for css styling) 类来分配给标志(例如,用于css样式) */
        }
    }
},
/* 
 * Translate your strings below 翻译下面的字符串
 */
'strings' : {
        'class:localTool_1_1' : { /*要翻译的字符串*/
        'auto_detected' : '快捷导航栏', /*自动检测*/
        'zh_CN' : '快捷导航栏', /*简体*/
        'zh_TW' : '快捷導航欄', /*繁体*/
        'en_GB' : 'Quick Navigation Bar', /*英语*/
        'jp_JP' : 'クイックナビゲーションバー'  /*日语*/
        },

        'class:localTool_1_2' : { /*要翻译的字符串*/
        'auto_detected' : '好友分组', /*自动检测*/
        'zh_CN' : '好友分组', /*简体*/
        'zh_TW' : '好友分組', /*繁体*/
        'en_GB' : 'Friends group', /*英语*/
        'jp_JP' : '友達グループ'  /*日语*/
        },

        'class:localTool_1_3' : { /*要翻译的字符串*/
        'auto_detected' : '选项一', /*自动检测*/
        'zh_CN' : '选项一', /*简体*/
        'zh_TW' : '選項一', /*繁体*/
        'en_GB' : 'Option 1', /*英语*/
        'jp_JP' : 'オプション1'  /*日语*/
        },

        'class:localTool_1_4' : { /*要翻译的字符串*/
        'auto_detected' : '选项二', /*自动检测*/
        'zh_CN' : '选项二', /*简体*/
        'zh_TW' : '選項二', /*繁体*/
        'en_GB' : 'Option 2', /*英语*/
        'jp_JP' : 'オプション2'  /*日语*/
        },

        'class:localTool_1_5' : { /*要翻译的字符串*/
        'auto_detected' : '选项三', /*自动检测*/
        'zh_CN' : '选项三', /*简体*/
        'zh_TW' : '選項三', /*繁体*/
        'en_GB' : 'Option 3', /*英语*/
        'jp_JP' : 'オプション3'  /*日语*/
        },

        'class:localTool_1_6' : { /*要翻译的字符串*/
        'auto_detected' : '跳转项', /*自动检测*/
        'zh_CN' : '跳转项', /*简体*/
        'zh_TW' : '跳轉項', /*繁体*/
        'en_GB' : 'Jump items', /*英语*/
        'jp_JP' : 'ジャンプのアイテム'  /*日语*/
        },

        'class:localTool_1_7' : { /*要翻译的字符串*/
        'auto_detected' : '功能模块', /*自动检测*/
        'zh_CN' : '功能模块', /*简体*/
        'zh_TW' : '功能模塊', /*繁体*/
        'en_GB' : 'functional module', /*英语*/
        'jp_JP' : '機能モジュール'  /*日语*/
        },

        'class:localTool_1_8' : { /*要翻译的字符串*/
        'auto_detected' : '选项一', /*自动检测*/
        'zh_CN' : '选项一', /*简体*/
        'zh_TW' : '選項一', /*繁体*/
        'en_GB' : 'Option 1', /*英语*/
        'jp_JP' : 'オプション1'  /*日语*/
        },

        'class:localTool_1_9' : { /*要翻译的字符串*/
        'auto_detected' : '选项二', /*自动检测*/
        'zh_CN' : '选项二', /*简体*/
        'zh_TW' : '選項二', /*繁体*/
        'en_GB' : 'Option 2', /*英语*/
        'jp_JP' : 'オプション2'  /*日语*/
        },

        'class:localTool_1_10' : { /*要翻译的字符串*/
        'auto_detected' : '选项三', /*自动检测*/
        'zh_CN' : '选项三', /*简体*/
        'zh_TW' : '選項三', /*繁体*/
        'en_GB' : 'Option 3', /*英语*/
        'jp_JP' : 'オプション3'  /*日语*/
        },

        'class:localTool_1_11' : { /*要翻译的字符串*/
        'auto_detected' : '跳转项', /*自动检测*/
        'zh_CN' : '跳转项', /*简体*/
        'zh_TW' : '跳轉項', /*繁体*/
        'en_GB' : 'Jump items', /*英语*/
        'jp_JP' : 'ジャンプのアイテム'  /*日语*/
        },

        'class:localTool_1_12' : { /*要翻译的字符串*/
        'auto_detected' : '其他', /*自动检测*/
        'zh_CN' : '其他', /*简体*/
        'zh_TW' : '其他', /*繁体*/
        'en_GB' : 'other', /*英语*/
        'jp_JP' : '他の'  /*日语*/
        },

        'class:localTool_1_13' : { /*要翻译的字符串*/
        'auto_detected' : '返回顶部', /*自动检测*/
        'zh_CN' : '返回顶部', /*简体*/
        'zh_TW' : '返回頂部', /*繁体*/
        'en_GB' : 'Back to top', /*英语*/
        'jp_JP' : 'トップに戻る'  /*日语*/
        },

        'class:localTool_1_14' : { /*要翻译的字符串*/
        'auto_detected' : '返回底部', /*自动检测*/
        'zh_CN' : '返回底部', /*简体*/
        'zh_TW' : '返回底部', /*繁体*/
        'en_GB' : 'Returns to the bottom', /*英语*/
        'jp_JP' : '下へ戻ります'  /*日语*/
        },

        'class:localTool_1_15' : { /*要翻译的字符串*/
        'auto_detected' : '选项三', /*自动检测*/
        'zh_CN' : '选项三', /*简体*/
        'zh_TW' : '選項三', /*繁体*/
        'en_GB' : 'Option 3', /*英语*/
        'jp_JP' : 'オプション3'  /*日语*/
        },

        'class:localTool_1_16' : { /*要翻译的字符串*/
        'auto_detected' : '跳转项', /*自动检测*/
        'zh_CN' : '跳转项', /*简体*/
        'zh_TW' : '跳轉項', /*繁体*/
        'en_GB' : 'Jump items', /*英语*/
        'jp_JP' : 'ジャンプのアイテム'  /*日语*/
        },

        'class:localTool_1_17' : { /*要翻译的字符串*/
        'auto_detected' : '解决方案', /*自动检测*/
        'zh_CN' : '解决方案', /*简体*/
        'zh_TW' : '解決方案', /*繁体*/
        'en_GB' : 'solution', /*英语*/
        'jp_JP' : '解決'  /*日语*/
        },

        'class:localTool_1_18' : { /*要翻译的字符串*/
        'auto_detected' : '移动模块', /*自动检测*/
        'zh_CN' : '移动模块', /*简体*/
        'zh_TW' : '移動模塊', /*繁体*/
        'en_GB' : 'Mobile Module', /*英语*/
        'jp_JP' : 'モバイルモジュール'  /*日语*/
        },

        'class:localTool_1_19' : { /*要翻译的字符串*/
        'auto_detected' : '后台模版', /*自动检测*/
        'zh_CN' : '后台模版', /*简体*/
        'zh_TW' : '後台模板', /*繁体*/
        'en_GB' : 'Background template', /*英语*/
        'jp_JP' : '背景テンプレート'  /*日语*/
        },

        'class:localTool_1_20' : { /*要翻译的字符串*/
        'auto_detected' : '电商平台', /*自动检测*/
        'zh_CN' : '电商平台', /*简体*/
        'zh_TW' : '電商平台', /*繁体*/
        'en_GB' : 'Electronic business platform', /*英语*/
        'jp_JP' : '電子ビジネスプラットフォーム'  /*日语*/
        },

        'class:localTool_1_21' : { /*要翻译的字符串*/
        'auto_detected' : '云市场', /*自动检测*/
        'zh_CN' : '云市场', /*简体*/
        'zh_TW' : '雲市場', /*繁体*/
        'en_GB' : 'Cloud Market', /*英语*/
        'jp_JP' : 'クラウド市場'  /*日语*/
        },


}
};

var languagesList_groupUI_html = {
'defaultLanguage' : 'auto_detected', /* (optional) although must be defined if you don't want en_GB */
'showFlag': false,            /* (optional) show/hide the flag 显示/隐藏旗帜 */
'showCountry': false,         /* (optional) show/hide the country name 显示/隐藏国家名称 */
'showLanguage': true,        /* (optional) show/hide the country language 显示/隐藏国家语言 */
'labelTemplate': '{{language}}',
'languages' : {              /* (optional) define **ADDITIONAL** custom languages 定义**额外的**自定义语言 */
    'auto_detected' : {
        'country': 'Auto Detected',
        'language' : 'Auto Detected',
        'countryTranslated': 'Auto Detected',
        'languageTranslated': 'Auto Detected',
        'flag' : {
            'url' : 'https://upload.wikimedia.org/wikipedia/commons/2/22/Flag_of_Hokkaido_Prefecture.svg', /* url of flag image 标志图像url */
            'class' : 'auto-flag' /* (optional) class to assign to the flag (e.g., for css styling) 类来分配给标志(例如,用于css样式) */
        }
    }
},
/* 
 * Translate your strings below 翻译下面的字符串
 */
'strings' : {
        'class:localTool_2_1' : { /*要翻译的字符串*/
        'auto_detected' : '留言', /*自动检测*/
        'zh_CN' : '留言', /*简体*/
        'zh_TW' : '留言1', /*繁体*/
        'en_GB' : '留言2', /*英语*/
        'jp_JP' : '留言3'  /*日语*/
        },

        'class:localTool_2_2' : { /*要翻译的字符串*/
        'auto_detected' : '留言设置', /*自动检测*/
        'zh_CN' : '留言设置', /*简体*/
        'zh_TW' : '留言设置1', /*繁体*/
        'en_GB' : '留言设置2', /*英语*/
        'jp_JP' : '留言设置3'  /*日语*/
        },

        'class:localTool_2_3' : { /*要翻译的字符串*/
        'auto_detected' : '数据分析', /*自动检测*/
        'zh_CN' : '数据分析', /*简体*/
        'zh_TW' : '数据分析1', /*繁体*/
        'en_GB' : '数据分析2', /*英语*/
        'jp_JP' : '数据分析3'  /*日语*/
        },

        'class:localTool_2_4' : { /*要翻译的字符串*/
        'auto_detected' : '点赞助手', /*自动检测*/
        'zh_CN' : '点赞助手', /*简体*/
        'zh_TW' : '点赞助手1', /*繁体*/
        'en_GB' : '点赞助手2', /*英语*/
        'jp_JP' : '点赞助手3'  /*日语*/
        },

        'class:localTool_2_5' : { /*要翻译的字符串*/
        'auto_detected' : '拓展功能(测试)', /*自动检测*/
        'zh_CN' : '拓展功能(测试)', /*简体*/
        'zh_TW' : '拓展功能(测试)1', /*繁体*/
        'en_GB' : '拓展功能(测试)2', /*英语*/
        'jp_JP' : '拓展功能(测试)3'  /*日语*/
        },

        'class:localTool_2_6' : { /*要翻译的字符串*/
        'auto_detected' : '设置', /*自动检测*/
        'zh_CN' : '设置', /*简体*/
        'zh_TW' : '设置1', /*繁体*/
        'en_GB' : '设置2', /*英语*/
        'jp_JP' : '设置3'  /*日语*/
        },

        'class:localTool_2_7' : { /*要翻译的字符串*/
        'auto_detected' : '当前字符字节数:', /*自动检测*/
        'zh_CN' : '当前字符字节数:', /*简体*/
        'zh_TW' : '当前字符字节数:1', /*繁体*/
        'en_GB' : '当前字符字节数:2', /*英语*/
        'jp_JP' : '当前字符字节数:3'  /*日语*/
        },

        'class:localTool_2_8' : { /*要翻译的字符串*/
        'auto_detected' : '0', /*自动检测*/
        'zh_CN' : '0', /*简体*/
        'zh_TW' : '01', /*繁体*/
        'en_GB' : '02', /*英语*/
        'jp_JP' : '03'  /*日语*/
        },

        'class:localTool_2_9' : { /*要翻译的字符串*/
        'auto_detected' : '/999', /*自动检测*/
        'zh_CN' : '/999', /*简体*/
        'zh_TW' : '/9991', /*繁体*/
        'en_GB' : '/9992', /*英语*/
        'jp_JP' : '/9993'  /*日语*/
        },

        'class:localTool_2_10' : { /*要翻译的字符串*/
        'auto_detected' : '文本格式(直接添加或选择文字添加)', /*自动检测*/
        'zh_CN' : '文本格式(直接添加或选择文字添加)', /*简体*/
        'zh_TW' : '文本格式(直接添加或选择文字添加)1', /*繁体*/
        'en_GB' : '文本格式(直接添加或选择文字添加)2', /*英语*/
        'jp_JP' : '文本格式(直接添加或选择文字添加)3'  /*日语*/
        },

        'class:localTool_2_11' : { /*要翻译的字符串*/
        'auto_detected' : '直接选择或搜索选择', /*自动检测*/
        'zh_CN' : '直接选择或搜索选择', /*简体*/
        'zh_TW' : '直接选择或搜索选择1', /*繁体*/
        'en_GB' : '直接选择或搜索选择2', /*英语*/
        'jp_JP' : '直接选择或搜索选择3'  /*日语*/
        },

        'class:localTool_2_12' : { /*要翻译的字符串*/
        'auto_detected' : '[h1]标题文字[/h1]', /*自动检测*/
        'zh_CN' : '[h1]标题文字[/h1]', /*简体*/
        'zh_TW' : '[h1]标题文字[/h1]1', /*繁体*/
        'en_GB' : '[h1]标题文字[/h1]2', /*英语*/
        'jp_JP' : '[h1]标题文字[/h1]3'  /*日语*/
        },

        'class:localTool_2_13' : { /*要翻译的字符串*/
        'auto_detected' : '[b]粗体文本[/b]', /*自动检测*/
        'zh_CN' : '[b]粗体文本[/b]', /*简体*/
        'zh_TW' : '[b]粗体文本[/b]1', /*繁体*/
        'en_GB' : '[b]粗体文本[/b]2', /*英语*/
        'jp_JP' : '[b]粗体文本[/b]3'  /*日语*/
        },

        'class:localTool_2_14' : { /*要翻译的字符串*/
        'auto_detected' : '[u]下划线文本[/u]', /*自动检测*/
        'zh_CN' : '[u]下划线文本[/u]', /*简体*/
        'zh_TW' : '[u]下划线文本[/u]1', /*繁体*/
        'en_GB' : '[u]下划线文本[/u]2', /*英语*/
        'jp_JP' : '[u]下划线文本[/u]3'  /*日语*/
        },

        'class:localTool_2_15' : { /*要翻译的字符串*/
        'auto_detected' : '[i]斜体文本[/i]', /*自动检测*/
        'zh_CN' : '[i]斜体文本[/i]', /*简体*/
        'zh_TW' : '[i]斜体文本[/i]1', /*繁体*/
        'en_GB' : '[i]斜体文本[/i]2', /*英语*/
        'jp_JP' : '[i]斜体文本[/i]3'  /*日语*/
        },

        'class:localTool_2_16' : { /*要翻译的字符串*/
        'auto_detected' : '[strike]删除文本[/strike]', /*自动检测*/
        'zh_CN' : '[strike]删除文本[/strike]', /*简体*/
        'zh_TW' : '[strike]删除文本[/strike]1', /*繁体*/
        'en_GB' : '[strike]删除文本[/strike]2', /*英语*/
        'jp_JP' : '[strike]删除文本[/strike]3'  /*日语*/
        },

        'class:localTool_2_17' : { /*要翻译的字符串*/
        'auto_detected' : '[spoiler]隐藏文本[/spoiler]', /*自动检测*/
        'zh_CN' : '[spoiler]隐藏文本[/spoiler]', /*简体*/
        'zh_TW' : '[spoiler]隐藏文本[/spoiler]1', /*繁体*/
        'en_GB' : '[spoiler]隐藏文本[/spoiler]2', /*英语*/
        'jp_JP' : '[spoiler]隐藏文本[/spoiler]3'  /*日语*/
        },

        'class:localTool_2_18' : { /*要翻译的字符串*/
        'auto_detected' : '[noparse]不解析[b]标签[/b][/noparse]', /*自动检测*/
        'zh_CN' : '[noparse]不解析[b]标签[/b][/noparse]', /*简体*/
        'zh_TW' : '[noparse]不解析[b]标签[/b][/noparse]1', /*繁体*/
        'en_GB' : '[noparse]不解析[b]标签[/b][/noparse]2', /*英语*/
        'jp_JP' : '[noparse]不解析[b]标签[/b][/noparse]3'  /*日语*/
        },

        'class:localTool_2_19' : { /*要翻译的字符串*/
        'auto_detected' : '[url=store.steampowered.com]网站链接[/url]', /*自动检测*/
        'zh_CN' : '[url=store.steampowered.com]网站链接[/url]', /*简体*/
        'zh_TW' : '[url=store.steampowered.com]网站链接[/url]1', /*繁体*/
        'en_GB' : '[url=store.steampowered.com]网站链接[/url]2', /*英语*/
        'jp_JP' : '[url=store.steampowered.com]网站链接[/url]3'  /*日语*/
        },

        'class:localTool_2_20' : { /*要翻译的字符串*/
        'auto_detected' : '添加', /*自动检测*/
        'zh_CN' : '添加', /*简体*/
        'zh_TW' : '添加1', /*繁体*/
        'en_GB' : '添加2', /*英语*/
        'jp_JP' : '添加3'  /*日语*/
        },

        'class:localTool_2_21' : { /*要翻译的字符串*/
        'auto_detected' : '翻译模块(需要提前设置国籍):', /*自动检测*/
        'zh_CN' : '翻译模块(需要提前设置国籍):', /*简体*/
        'zh_TW' : '翻译模块(需要提前设置国籍):1', /*繁体*/
        'en_GB' : '翻译模块(需要提前设置国籍):2', /*英语*/
        'jp_JP' : '翻译模块(需要提前设置国籍):3'  /*日语*/
        },

        'class:localTool_2_22' : { /*要翻译的字符串*/
        'auto_detected' : '当前语言:', /*自动检测*/
        'zh_CN' : '当前语言:', /*简体*/
        'zh_TW' : '当前语言:1', /*繁体*/
        'en_GB' : '当前语言:2', /*英语*/
        'jp_JP' : '当前语言:3'  /*日语*/
        },

        'class:localTool_2_23' : { /*要翻译的字符串*/
        'auto_detected' : '自动检测', /*自动检测*/
        'zh_CN' : '自动检测', /*简体*/
        'zh_TW' : '自动检测1', /*繁体*/
        'en_GB' : '自动检测2', /*英语*/
        'jp_JP' : '自动检测3'  /*日语*/
        },

        'class:localTool_2_24' : { /*要翻译的字符串*/
        'auto_detected' : '中文简体', /*自动检测*/
        'zh_CN' : '中文简体', /*简体*/
        'zh_TW' : '中文简体1', /*繁体*/
        'en_GB' : '中文简体2', /*英语*/
        'jp_JP' : '中文简体3'  /*日语*/
        },

        'class:localTool_2_25' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_2_26' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_2_27' : { /*要翻译的字符串*/
        'auto_detected' : '目标语言:', /*自动检测*/
        'zh_CN' : '目标语言:', /*简体*/
        'zh_TW' : '目标语言:1', /*繁体*/
        'en_GB' : '目标语言:2', /*英语*/
        'jp_JP' : '目标语言:3'  /*日语*/
        },

        'class:localTool_2_28' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_2_29' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_2_30' : { /*要翻译的字符串*/
        'auto_detected' : '中文简体', /*自动检测*/
        'zh_CN' : '中文简体', /*简体*/
        'zh_TW' : '中文简体1', /*繁体*/
        'en_GB' : '中文简体2', /*英语*/
        'jp_JP' : '中文简体3'  /*日语*/
        },

        'class:localTool_2_31' : { /*要翻译的字符串*/
        'auto_detected' : '马新简体[zh-sg]', /*自动检测*/
        'zh_CN' : '马新简体[zh-sg]', /*简体*/
        'zh_TW' : '马新简体[zh-sg]1', /*繁体*/
        'en_GB' : '马新简体[zh-sg]2', /*英语*/
        'jp_JP' : '马新简体[zh-sg]3'  /*日语*/
        },

        'class:localTool_2_32' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文[zh-hant]', /*自动检测*/
        'zh_CN' : '繁體中文[zh-hant]', /*简体*/
        'zh_TW' : '繁體中文[zh-hant]1', /*繁体*/
        'en_GB' : '繁體中文[zh-hant]2', /*英语*/
        'jp_JP' : '繁體中文[zh-hant]3'  /*日语*/
        },

        'class:localTool_2_33' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(香港)[zh-hk]', /*自动检测*/
        'zh_CN' : '繁體中文(香港)[zh-hk]', /*简体*/
        'zh_TW' : '繁體中文(香港)[zh-hk]1', /*繁体*/
        'en_GB' : '繁體中文(香港)[zh-hk]2', /*英语*/
        'jp_JP' : '繁體中文(香港)[zh-hk]3'  /*日语*/
        },

        'class:localTool_2_34' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(澳门)[zh-mo]', /*自动检测*/
        'zh_CN' : '繁體中文(澳门)[zh-mo]', /*简体*/
        'zh_TW' : '繁體中文(澳门)[zh-mo]1', /*繁体*/
        'en_GB' : '繁體中文(澳门)[zh-mo]2', /*英语*/
        'jp_JP' : '繁體中文(澳门)[zh-mo]3'  /*日语*/
        },

        'class:localTool_2_35' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(台湾)[zh-tw]', /*自动检测*/
        'zh_CN' : '繁體中文(台湾)[zh-tw]', /*简体*/
        'zh_TW' : '繁體中文(台湾)[zh-tw]1', /*繁体*/
        'en_GB' : '繁體中文(台湾)[zh-tw]2', /*英语*/
        'jp_JP' : '繁體中文(台湾)[zh-tw]3'  /*日语*/
        },

        'class:localTool_2_36' : { /*要翻译的字符串*/
        'auto_detected' : '翻译', /*自动检测*/
        'zh_CN' : '翻译', /*简体*/
        'zh_TW' : '翻译1', /*繁体*/
        'en_GB' : '翻译2', /*英语*/
        'jp_JP' : '翻译3'  /*日语*/
        },

        'class:localTool_2_37' : { /*要翻译的字符串*/
        'auto_detected' : '添加称呼模块(需要提前设置备注):', /*自动检测*/
        'zh_CN' : '添加称呼模块(需要提前设置备注):', /*简体*/
        'zh_TW' : '添加称呼模块(需要提前设置备注):1', /*繁体*/
        'en_GB' : '添加称呼模块(需要提前设置备注):2', /*英语*/
        'jp_JP' : '添加称呼模块(需要提前设置备注):3'  /*日语*/
        },

        'class:localTool_2_38' : { /*要翻译的字符串*/
        'auto_detected' : '自定义称呼模式', /*自动检测*/
        'zh_CN' : '自定义称呼模式', /*简体*/
        'zh_TW' : '自定义称呼模式1', /*繁体*/
        'en_GB' : '自定义称呼模式2', /*英语*/
        'jp_JP' : '自定义称呼模式3'  /*日语*/
        },

        'class:localTool_2_39' : { /*要翻译的字符串*/
        'auto_detected' : '在留言框添加自定义称呼标识符', /*自动检测*/
        'zh_CN' : '在留言框添加自定义称呼标识符', /*简体*/
        'zh_TW' : '在留言框添加自定义称呼标识符1', /*繁体*/
        'en_GB' : '在留言框添加自定义称呼标识符2', /*英语*/
        'jp_JP' : '在留言框添加自定义称呼标识符3'  /*日语*/
        },

        'class:localTool_2_40' : { /*要翻译的字符串*/
        'auto_detected' : '是否为组添加称呼(如果组没有备注则使用steam名称)', /*自动检测*/
        'zh_CN' : '是否为组添加称呼(如果组没有备注则使用steam名称)', /*简体*/
        'zh_TW' : '是否为组添加称呼(如果组没有备注则使用steam名称)1', /*繁体*/
        'en_GB' : '是否为组添加称呼(如果组没有备注则使用steam名称)2', /*英语*/
        'jp_JP' : '是否为组添加称呼(如果组没有备注则使用steam名称)3'  /*日语*/
        },

        'class:localTool_2_41' : { /*要翻译的字符串*/
        'auto_detected' : '是否为组添加称呼(如果组设置有备注则使用,否则不添加称呼)', /*自动检测*/
        'zh_TW' : '是否为组添加称呼(如果组设置有备注则使用,否则不添加称呼)1', /*繁体*/
        'en_GB' : '是否为组添加称呼(如果组设置有备注则使用,否则不添加称呼)2', /*英语*/
        'jp_JP' : '是否为组添加称呼(如果组设置有备注则使用,否则不添加称呼)3'  /*日语*/
        },

        'class:localTool_2_42' : { /*要翻译的字符串*/
        'auto_detected' : '格式化帮助', /*自动检测*/
        'zh_CN' : '格式化帮助', /*简体*/
        'zh_TW' : '格式化帮助1', /*繁体*/
        'en_GB' : '格式化帮助2', /*英语*/
        'jp_JP' : '格式化帮助3'  /*日语*/
        },

        'class:localTool_2_43' : { /*要翻译的字符串*/
        'auto_detected' : '发送评论给选择的组', /*自动检测*/
        'zh_CN' : '发送评论给选择的组', /*简体*/
        'zh_TW' : '发送评论给选择的组1', /*繁体*/
        'en_GB' : '发送评论给选择的组2', /*英语*/
        'jp_JP' : '发送评论给选择的组3'  /*日语*/
        },

        'class:localTool_2_44' : { /*要翻译的字符串*/
        'auto_detected' : '根据国籍发送评论给选择的组', /*自动检测*/
        'zh_CN' : '根据国籍发送评论给选择的组', /*简体*/
        'zh_TW' : '根据国籍发送评论给选择的组1', /*繁体*/
        'en_GB' : '根据国籍发送评论给选择的组2', /*英语*/
        'jp_JP' : '根据国籍发送评论给选择的组3'  /*日语*/
        },

        'class:localTool_2_45' : { /*要翻译的字符串*/
        'auto_detected' : '设置国籍:', /*自动检测*/
        'zh_CN' : '设置国籍:', /*简体*/
        'zh_TW' : '设置国籍:1', /*繁体*/
        'en_GB' : '设置国籍:2', /*英语*/
        'jp_JP' : '设置国籍:3'  /*日语*/
        },

        'class:localTool_2_46' : { /*要翻译的字符串*/
        'auto_detected' : '请选择要设置的国籍:', /*自动检测*/
        'zh_CN' : '请选择要设置的国籍:', /*简体*/
        'zh_TW' : '请选择要设置的国籍:1', /*繁体*/
        'en_GB' : '请选择要设置的国籍:2', /*英语*/
        'jp_JP' : '请选择要设置的国籍:3'  /*日语*/
        },

        'class:localTool_2_47' : { /*要翻译的字符串*/
        'auto_detected' : '简体中文', /*自动检测*/
        'zh_CN' : '简体中文', /*简体*/
        'zh_TW' : '简体中文1', /*繁体*/
        'en_GB' : '简体中文2', /*英语*/
        'jp_JP' : '简体中文3'  /*日语*/
        },

        'class:localTool_2_48' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_2_49' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_2_50' : { /*要翻译的字符串*/
        'auto_detected' : '马新简体(马来西亚,新加坡)[zh-sg]', /*自动检测*/
        'zh_CN' : '马新简体(马来西亚,新加坡)[zh-sg]', /*简体*/
        'zh_TW' : '马新简体(马来西亚,新加坡)[zh-sg]1', /*繁体*/
        'en_GB' : '马新简体(马来西亚,新加坡)[zh-sg]2', /*英语*/
        'jp_JP' : '马新简体(马来西亚,新加坡)[zh-sg]3'  /*日语*/
        },

        'class:localTool_2_51' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文[zh-hant]', /*自动检测*/
        'zh_CN' : '繁體中文[zh-hant]', /*简体*/
        'zh_TW' : '繁體中文[zh-hant]1', /*繁体*/
        'en_GB' : '繁體中文[zh-hant]2', /*英语*/
        'jp_JP' : '繁體中文[zh-hant]3'  /*日语*/
        },

        'class:localTool_2_52' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(香港)[zh-hk]', /*自动检测*/
        'zh_CN' : '繁體中文(香港)[zh-hk]', /*简体*/
        'zh_TW' : '繁體中文(香港)[zh-hk]1', /*繁体*/
        'en_GB' : '繁體中文(香港)[zh-hk]2', /*英语*/
        'jp_JP' : '繁體中文(香港)[zh-hk]3'  /*日语*/
        },

        'class:localTool_2_53' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(澳门)[zh-mo]', /*自动检测*/
        'zh_CN' : '繁體中文(澳门)[zh-mo]', /*简体*/
        'zh_TW' : '繁體中文(澳门)[zh-mo]1', /*繁体*/
        'en_GB' : '繁體中文(澳门)[zh-mo]2', /*英语*/
        'jp_JP' : '繁體中文(澳门)[zh-mo]3'  /*日语*/
        },

        'class:localTool_2_54' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(台湾)[zh-tw]', /*自动检测*/
        'zh_CN' : '繁體中文(台湾)[zh-tw]', /*简体*/
        'zh_TW' : '繁體中文(台湾)[zh-tw]1', /*繁体*/
        'en_GB' : '繁體中文(台湾)[zh-tw]2', /*英语*/
        'jp_JP' : '繁體中文(台湾)[zh-tw]3'  /*日语*/
        },

        'class:localTool_2_55' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置国籍标识', /*自动检测*/
        'zh_CN' : '为选择的好友设置国籍标识', /*简体*/
        'zh_TW' : '为选择的好友设置国籍标识1', /*繁体*/
        'en_GB' : '为选择的好友设置国籍标识2', /*英语*/
        'jp_JP' : '为选择的好友设置国籍标识3'  /*日语*/
        },

        'class:localTool_2_56' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消国籍标识', /*自动检测*/
        'zh_CN' : '为选择的好友取消国籍标识', /*简体*/
        'zh_TW' : '为选择的好友取消国籍标识1', /*繁体*/
        'en_GB' : '为选择的好友取消国籍标识2', /*英语*/
        'jp_JP' : '为选择的好友取消国籍标识3'  /*日语*/
        },

        'class:localTool_2_57' : { /*要翻译的字符串*/
        'auto_detected' : '设置不留言:', /*自动检测*/
        'zh_CN' : '设置不留言:', /*简体*/
        'zh_TW' : '设置不留言:1', /*繁体*/
        'en_GB' : '设置不留言:2', /*英语*/
        'jp_JP' : '设置不留言:3'  /*日语*/
        },

        'class:localTool_2_58' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置不留言', /*自动检测*/
        'zh_CN' : '为选择的好友设置不留言', /*简体*/
        'zh_TW' : '为选择的好友设置不留言1', /*繁体*/
        'en_GB' : '为选择的好友设置不留言2', /*英语*/
        'jp_JP' : '为选择的好友设置不留言3'  /*日语*/
        },

        'class:localTool_2_59' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消设置不留言', /*自动检测*/
        'zh_CN' : '为选择的好友取消设置不留言', /*简体*/
        'zh_TW' : '为选择的好友取消设置不留言1', /*繁体*/
        'en_GB' : '为选择的好友取消设置不留言2', /*英语*/
        'jp_JP' : '为选择的好友取消设置不留言3'  /*日语*/
        },

        'class:localTool_2_60' : { /*要翻译的字符串*/
        'auto_detected' : '设置留言时间间隔:', /*自动检测*/
        'zh_CN' : '设置留言时间间隔:', /*简体*/
        'zh_TW' : '设置留言时间间隔:1', /*繁体*/
        'en_GB' : '设置留言时间间隔:2', /*英语*/
        'jp_JP' : '设置留言时间间隔:3'  /*日语*/
        },

        'class:localTool_2_61' : { /*要翻译的字符串*/
        },

        'class:localTool_2_62' : { /*要翻译的字符串*/
        },

        'class:localTool_2_63' : { /*要翻译的字符串*/
        'auto_detected' : '请选择留言', /*自动检测*/
        'zh_CN' : '请选择留言', /*简体*/
        'zh_TW' : '请选择留言1', /*繁体*/
        'en_GB' : '请选择留言2', /*英语*/
        'jp_JP' : '请选择留言3'  /*日语*/
        },

        'class:localTool_2_64' : { /*要翻译的字符串*/
        'auto_detected' : '留言日期差', /*自动检测*/
        'zh_CN' : '留言日期差', /*简体*/
        'zh_TW' : '留言日期差1', /*繁体*/
        'en_GB' : '留言日期差2', /*英语*/
        'jp_JP' : '留言日期差3'  /*日语*/
        },

        'class:localTool_2_65' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置留言时间间隔', /*自动检测*/
        'zh_CN' : '为选择的好友设置留言时间间隔', /*简体*/
        'zh_TW' : '为选择的好友设置留言时间间隔1', /*繁体*/
        'en_GB' : '为选择的好友设置留言时间间隔2', /*英语*/
        'jp_JP' : '为选择的好友设置留言时间间隔3'  /*日语*/
        },

        'class:localTool_2_66' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消设置留言时间间隔', /*自动检测*/
        'zh_CN' : '为选择的好友取消设置留言时间间隔', /*简体*/
        'zh_TW' : '为选择的好友取消设置留言时间间隔1', /*繁体*/
        'en_GB' : '为选择的好友取消设置留言时间间隔2', /*英语*/
        'jp_JP' : '为选择的好友取消设置留言时间间隔3'  /*日语*/
        },

        'class:localTool_2_67' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动留言计划:', /*自动检测*/
        'zh_CN' : '设置自动留言计划:', /*简体*/
        'zh_TW' : '设置自动留言计划:1', /*繁体*/
        'en_GB' : '设置自动留言计划:2', /*英语*/
        'jp_JP' : '设置自动留言计划:3'  /*日语*/
        },

        'class:localTool_2_68' : { /*要翻译的字符串*/
        'auto_detected' : '请选择时间', /*自动检测*/
        'zh_CN' : '请选择时间', /*简体*/
        'zh_TW' : '请选择时间1', /*繁体*/
        'en_GB' : '请选择时间2', /*英语*/
        'jp_JP' : '请选择时间3'  /*日语*/
        },

        'class:localTool_2_69' : { /*要翻译的字符串*/
        'auto_detected' : '请选择时间', /*自动检测*/
        'zh_CN' : '请选择时间', /*简体*/
        'zh_TW' : '请选择时间1', /*繁体*/
        'en_GB' : '请选择时间2', /*英语*/
        'jp_JP' : '请选择时间3'  /*日语*/
        },

        'class:localTool_2_70' : { /*要翻译的字符串*/
        'auto_detected' : '设置好友分组:', /*自动检测*/
        'zh_CN' : '设置好友分组:', /*简体*/
        'zh_TW' : '设置好友分组:1', /*繁体*/
        'en_GB' : '设置好友分组:2', /*英语*/
        'jp_JP' : '设置好友分组:3'  /*日语*/
        },

        'class:localTool_2_71' : { /*要翻译的字符串*/
        'auto_detected' : '分组列表', /*自动检测*/
        'zh_CN' : '分组列表', /*简体*/
        'zh_TW' : '分组列表1', /*繁体*/
        'en_GB' : '分组列表2', /*英语*/
        'jp_JP' : '分组列表3'  /*日语*/
        },

        'class:localTool_2_72' : { /*要翻译的字符串*/
        'auto_detected' : '直接选择或搜索选择', /*自动检测*/
        'zh_CN' : '直接选择或搜索选择', /*简体*/
        'zh_TW' : '直接选择或搜索选择1', /*繁体*/
        'en_GB' : '直接选择或搜索选择2', /*英语*/
        'jp_JP' : '直接选择或搜索选择3'  /*日语*/
        },

        'class:localTool_2_73' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_74' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_75' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_76' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_77' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_78' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_79' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_80' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_81' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_82' : { /*要翻译的字符串*/
        'auto_detected' : '编辑列表', /*自动检测*/
        'zh_CN' : '编辑列表', /*简体*/
        'zh_TW' : '编辑列表1', /*繁体*/
        'en_GB' : '编辑列表2', /*英语*/
        'jp_JP' : '编辑列表3'  /*日语*/
        },

        'class:localTool_2_83' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友添加分组', /*自动检测*/
        'zh_CN' : '为选择的好友添加分组', /*简体*/
        'zh_TW' : '为选择的好友添加分组1', /*繁体*/
        'en_GB' : '为选择的好友添加分组2', /*英语*/
        'jp_JP' : '为选择的好友添加分组3'  /*日语*/
        },

        'class:localTool_2_84' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消添加分组', /*自动检测*/
        'zh_CN' : '为选择的好友取消添加分组', /*简体*/
        'zh_TW' : '为选择的好友取消添加分组1', /*繁体*/
        'en_GB' : '为选择的好友取消添加分组2', /*英语*/
        'jp_JP' : '为选择的好友取消添加分组3'  /*日语*/
        },

        'class:localTool_2_85' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_86' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_87' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_88' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_89' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_90' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_91' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_92' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_93' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_94' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_95' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_2_96' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_2_97' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍进行高亮分组', /*自动检测*/
        'zh_CN' : '按国籍进行高亮分组', /*简体*/
        'zh_TW' : '按国籍进行高亮分组1', /*繁体*/
        'en_GB' : '按国籍进行高亮分组2', /*英语*/
        'jp_JP' : '按国籍进行高亮分组3'  /*日语*/
        },

        'class:localTool_2_98' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍进行排序分组(慢)', /*自动检测*/
        'zh_CN' : '按国籍进行排序分组(慢)', /*简体*/
        'zh_TW' : '按国籍进行排序分组(慢)1', /*繁体*/
        'en_GB' : '按国籍进行排序分组(慢)2', /*英语*/
        'jp_JP' : '按国籍进行排序分组(慢)3'  /*日语*/
        },

        'class:localTool_2_99' : { /*要翻译的字符串*/
        'auto_detected' : '按在线时间进行排序分组', /*自动检测*/
        'zh_CN' : '按在线时间进行排序分组', /*简体*/
        'zh_TW' : '按在线时间进行排序分组1', /*繁体*/
        'en_GB' : '按在线时间进行排序分组2', /*英语*/
        'jp_JP' : '按在线时间进行排序分组3'  /*日语*/
        },

        'class:localTool_2_100' : { /*要翻译的字符串*/
        'auto_detected' : '显示好友详细数据-不可用', /*自动检测*/
        'zh_CN' : '显示好友详细数据-不可用', /*简体*/
        'zh_TW' : '显示好友详细数据-不可用1', /*繁体*/
        'en_GB' : '显示好友详细数据-不可用2', /*英语*/
        'jp_JP' : '显示好友详细数据-不可用3'  /*日语*/
        },

        'class:localTool_2_101' : { /*要翻译的字符串*/
        'auto_detected' : '好友数据统计', /*自动检测*/
        'zh_CN' : '好友数据统计', /*简体*/
        'zh_TW' : '好友数据统计1', /*繁体*/
        'en_GB' : '好友数据统计2', /*英语*/
        'jp_JP' : '好友数据统计3'  /*日语*/
        },

        'class:localTool_2_102' : { /*要翻译的字符串*/
        'auto_detected' : '留言数据统计', /*自动检测*/
        'zh_CN' : '留言数据统计', /*简体*/
        'zh_TW' : '留言数据统计1', /*繁体*/
        'en_GB' : '留言数据统计2', /*英语*/
        'jp_JP' : '留言数据统计3'  /*日语*/
        },

        'class:localTool_2_103' : { /*要翻译的字符串*/
        'auto_detected' : '关系网统计', /*自动检测*/
        'zh_CN' : '关系网统计', /*简体*/
        'zh_TW' : '关系网统计1', /*繁体*/
        'en_GB' : '关系网统计2', /*英语*/
        'jp_JP' : '关系网统计3'  /*日语*/
        },

        'class:localTool_2_104' : { /*要翻译的字符串*/
        'auto_detected' : '当前配置统计', /*自动检测*/
        'zh_CN' : '当前配置统计', /*简体*/
        'zh_TW' : '当前配置统计1', /*繁体*/
        'en_GB' : '当前配置统计2', /*英语*/
        'jp_JP' : '当前配置统计3'  /*日语*/
        },

        'class:localTool_2_105' : { /*要翻译的字符串*/
        'auto_detected' : '查看好友配置统计', /*自动检测*/
        'zh_CN' : '查看好友配置统计', /*简体*/
        'zh_TW' : '查看好友配置统计1', /*繁体*/
        'en_GB' : '查看好友配置统计2', /*英语*/
        'jp_JP' : '查看好友配置统计3'  /*日语*/
        },

        'class:localTool_2_106' : { /*要翻译的字符串*/
        'auto_detected' : '数据表格(汇总所有的数据:id,名称,备注,国籍(语言),等级,好友数量,游戏数量,dlc数量,创意工坊数量,艺术作品数量,动态数量)', /*自动检测*/
        },

        'class:localTool_2_107' : { /*要翻译的字符串*/
        'auto_detected' : '分为:', /*自动检测*/
        'zh_CN' : '分为:', /*简体*/
        'zh_TW' : '分为:1', /*繁体*/
        'en_GB' : '分为:2', /*英语*/
        'jp_JP' : '分为:3'  /*日语*/
        },

        'class:localTool_2_108' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍的饼图(总留言数量),', /*自动检测*/
        'zh_CN' : '按国籍的饼图(总留言数量),', /*简体*/
        'zh_TW' : '按国籍的饼图(总留言数量),1', /*繁体*/
        'en_GB' : '按国籍的饼图(总留言数量),2', /*英语*/
        'jp_JP' : '按国籍的饼图(总留言数量),3'  /*日语*/
        },

        'class:localTool_2_109' : { /*要翻译的字符串*/
        'auto_detected' : '按每天留言数据的折线图(统计所有的留言数据,生成的折线图),', /*自动检测*/
        },

        'class:localTool_2_110' : { /*要翻译的字符串*/
        },

        'class:localTool_2_111' : { /*要翻译的字符串*/
        'auto_detected' : '数据表格(汇总所有的数据)', /*自动检测*/
        'zh_CN' : '数据表格(汇总所有的数据)', /*简体*/
        'zh_TW' : '数据表格(汇总所有的数据)1', /*繁体*/
        'en_GB' : '数据表格(汇总所有的数据)2', /*英语*/
        'jp_JP' : '数据表格(汇总所有的数据)3'  /*日语*/
        },

        'class:localTool_2_112' : { /*要翻译的字符串*/
        'auto_detected' : '好友关系网(仅统计共同好友)', /*自动检测*/
        'zh_CN' : '好友关系网(仅统计共同好友)', /*简体*/
        'zh_TW' : '好友关系网(仅统计共同好友)1', /*繁体*/
        'en_GB' : '好友关系网(仅统计共同好友)2', /*英语*/
        'jp_JP' : '好友关系网(仅统计共同好友)3'  /*日语*/
        },

        'class:localTool_2_113' : { /*要翻译的字符串*/
        'auto_detected' : '当前的配置数据和运行状态', /*自动检测*/
        'zh_CN' : '当前的配置数据和运行状态', /*简体*/
        'zh_TW' : '当前的配置数据和运行状态1', /*繁体*/
        'en_GB' : '当前的配置数据和运行状态2', /*英语*/
        'jp_JP' : '当前的配置数据和运行状态3'  /*日语*/
        },

        'class:localTool_2_114' : { /*要翻译的字符串*/
        'auto_detected' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)', /*自动检测*/
        'zh_CN' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)', /*简体*/
        'zh_TW' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)1', /*繁体*/
        'en_GB' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)2', /*英语*/
        'jp_JP' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)3'  /*日语*/
        },

        'class:localTool_2_115' : { /*要翻译的字符串*/
        'auto_detected' : '动态点赞助手', /*自动检测*/
        'zh_CN' : '动态点赞助手', /*简体*/
        'zh_TW' : '动态点赞助手1', /*繁体*/
        'en_GB' : '动态点赞助手2', /*英语*/
        'jp_JP' : '动态点赞助手3'  /*日语*/
        },

        'class:localTool_2_116' : { /*要翻译的字符串*/
        'auto_detected' : '总开关', /*自动检测*/
        'zh_CN' : '总开关', /*简体*/
        'zh_TW' : '总开关1', /*繁体*/
        'en_GB' : '总开关2', /*英语*/
        'jp_JP' : '总开关3'  /*日语*/
        },

        'class:localTool_2_117' : { /*要翻译的字符串*/
        'auto_detected' : '设置点赞内容:', /*自动检测*/
        'zh_CN' : '设置点赞内容:', /*简体*/
        'zh_TW' : '设置点赞内容:1', /*繁体*/
        'en_GB' : '设置点赞内容:2', /*英语*/
        'jp_JP' : '设置点赞内容:3'  /*日语*/
        },

        'class:localTool_2_118' : { /*要翻译的字符串*/
        'auto_detected' : '点赞内容:', /*自动检测*/
        'zh_CN' : '点赞内容:', /*简体*/
        'zh_TW' : '点赞内容:1', /*繁体*/
        'en_GB' : '点赞内容:2', /*英语*/
        'jp_JP' : '点赞内容:3'  /*日语*/
        },

        'class:localTool_2_119' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动点赞模式:', /*自动检测*/
        'zh_CN' : '设置自动点赞模式:', /*简体*/
        'zh_TW' : '设置自动点赞模式:1', /*繁体*/
        'en_GB' : '设置自动点赞模式:2', /*英语*/
        'jp_JP' : '设置自动点赞模式:3'  /*日语*/
        },

        'class:localTool_2_120' : { /*要翻译的字符串*/
        'auto_detected' : '点赞模式:', /*自动检测*/
        'zh_CN' : '点赞模式:', /*简体*/
        'zh_TW' : '点赞模式:1', /*繁体*/
        'en_GB' : '点赞模式:2', /*英语*/
        'jp_JP' : '点赞模式:3'  /*日语*/
        },

        'class:localTool_2_121' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)', /*自动检测*/
        'zh_CN' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)', /*简体*/
        'zh_TW' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)1', /*繁体*/
        'en_GB' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)2', /*英语*/
        'jp_JP' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)3'  /*日语*/
        },

        'class:localTool_2_122' : { /*要翻译的字符串*/
        'auto_detected' : '请选择范围', /*自动检测*/
        'zh_CN' : '请选择范围', /*简体*/
        'zh_TW' : '请选择范围1', /*繁体*/
        'en_GB' : '请选择范围2', /*英语*/
        'jp_JP' : '请选择范围3'  /*日语*/
        },

        'class:localTool_2_123' : { /*要翻译的字符串*/
        'auto_detected' : '点赞进度时间线', /*自动检测*/
        'zh_CN' : '点赞进度时间线', /*简体*/
        'zh_TW' : '点赞进度时间线1', /*繁体*/
        'en_GB' : '点赞进度时间线2', /*英语*/
        'jp_JP' : '点赞进度时间线3'  /*日语*/
        },

        'class:localTool_2_124' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_2_125' : { /*要翻译的字符串*/
        'auto_detected' : '8月18日', /*自动检测*/
        'zh_CN' : '8月18日', /*简体*/
        'zh_TW' : '8月18日1', /*繁体*/
        'en_GB' : '8月18日2', /*英语*/
        'jp_JP' : '8月18日3'  /*日语*/
        },

        'class:localTool_2_126' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条', /*自动检测*/
        'zh_CN' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条', /*简体*/
        'zh_TW' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条1', /*繁体*/
        'en_GB' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条2', /*英语*/
        'jp_JP' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条3'  /*日语*/
        },

        'class:localTool_2_127' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条', /*自动检测*/
        'zh_CN' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条', /*简体*/
        'zh_TW' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条1', /*繁体*/
        'en_GB' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条2', /*英语*/
        'jp_JP' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条3'  /*日语*/
        },

        'class:localTool_2_128' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条', /*自动检测*/
        'zh_CN' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条', /*简体*/
        'zh_TW' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条1', /*繁体*/
        'en_GB' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条2', /*英语*/
        'jp_JP' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条3'  /*日语*/
        },

        'class:localTool_2_129' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条', /*自动检测*/
        'zh_CN' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条', /*简体*/
        'zh_TW' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条1', /*繁体*/
        'en_GB' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条2', /*英语*/
        'jp_JP' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条3'  /*日语*/
        },

        'class:localTool_2_130' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条', /*自动检测*/
        'zh_CN' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条', /*简体*/
        'zh_TW' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条1', /*繁体*/
        'en_GB' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条2', /*英语*/
        'jp_JP' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条3'  /*日语*/
        },

        'class:localTool_2_131' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_2_132' : { /*要翻译的字符串*/
        'auto_detected' : '8月16日', /*自动检测*/
        'zh_CN' : '8月16日', /*简体*/
        'zh_TW' : '8月16日1', /*繁体*/
        'en_GB' : '8月16日2', /*英语*/
        'jp_JP' : '8月16日3'  /*日语*/
        },

        'class:localTool_2_133' : { /*要翻译的字符串*/
        },

        'class:localTool_2_134' : { /*要翻译的字符串*/
        'auto_detected' : '《登高》', /*自动检测*/
        'zh_CN' : '《登高》', /*简体*/
        'zh_TW' : '《登高》1', /*繁体*/
        'en_GB' : '《登高》2', /*英语*/
        'jp_JP' : '《登高》3'  /*日语*/
        },

        'class:localTool_2_135' : { /*要翻译的字符串*/
        'auto_detected' : '《茅屋为秋风所破歌》', /*自动检测*/
        'zh_CN' : '《茅屋为秋风所破歌》', /*简体*/
        'zh_TW' : '《茅屋为秋风所破歌》1', /*繁体*/
        'en_GB' : '《茅屋为秋风所破歌》2', /*英语*/
        'jp_JP' : '《茅屋为秋风所破歌》3'  /*日语*/
        },

        'class:localTool_2_136' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_2_137' : { /*要翻译的字符串*/
        'auto_detected' : '8月15日', /*自动检测*/
        'zh_CN' : '8月15日', /*简体*/
        'zh_TW' : '8月15日1', /*繁体*/
        'en_GB' : '8月15日2', /*英语*/
        'jp_JP' : '8月15日3'  /*日语*/
        },

        'class:localTool_2_138' : { /*要翻译的字符串*/
        'auto_detected' : '中国人民抗日战争胜利日', /*自动检测*/
        'zh_CN' : '中国人民抗日战争胜利日', /*简体*/
        'zh_TW' : '中国人民抗日战争胜利日1', /*繁体*/
        'en_GB' : '中国人民抗日战争胜利日2', /*英语*/
        'jp_JP' : '中国人民抗日战争胜利日3'  /*日语*/
        },

        'class:localTool_2_139' : { /*要翻译的字符串*/
        },

        'class:localTool_2_140' : { /*要翻译的字符串*/
        'auto_detected' : '铭记、感恩', /*自动检测*/
        'zh_CN' : '铭记、感恩', /*简体*/
        'zh_TW' : '铭记、感恩1', /*繁体*/
        'en_GB' : '铭记、感恩2', /*英语*/
        'jp_JP' : '铭记、感恩3'  /*日语*/
        },

        'class:localTool_2_141' : { /*要翻译的字符串*/
        'auto_detected' : '所有为中华民族浴血奋战的英雄将士', /*自动检测*/
        'zh_CN' : '所有为中华民族浴血奋战的英雄将士', /*简体*/
        'zh_TW' : '所有为中华民族浴血奋战的英雄将士1', /*繁体*/
        'en_GB' : '所有为中华民族浴血奋战的英雄将士2', /*英语*/
        'jp_JP' : '所有为中华民族浴血奋战的英雄将士3'  /*日语*/
        },

        'class:localTool_2_142' : { /*要翻译的字符串*/
        'auto_detected' : '永垂不朽', /*自动检测*/
        'zh_CN' : '永垂不朽', /*简体*/
        'zh_TW' : '永垂不朽1', /*繁体*/
        'en_GB' : '永垂不朽2', /*英语*/
        'jp_JP' : '永垂不朽3'  /*日语*/
        },

        'class:localTool_2_143' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_2_144' : { /*要翻译的字符串*/
        'auto_detected' : '过去', /*自动检测*/
        'zh_CN' : '过去', /*简体*/
        'zh_TW' : '过去1', /*繁体*/
        'en_GB' : '过去2', /*英语*/
        'jp_JP' : '过去3'  /*日语*/
        },

        'class:localTool_2_145' : { /*要翻译的字符串*/
        'auto_detected' : '喜加一助手', /*自动检测*/
        'zh_CN' : '喜加一助手', /*简体*/
        'zh_TW' : '喜加一助手1', /*繁体*/
        'en_GB' : '喜加一助手2', /*英语*/
        'jp_JP' : '喜加一助手3'  /*日语*/
        },

        'class:localTool_2_146' : { /*要翻译的字符串*/
        'auto_detected' : '总开关', /*自动检测*/
        'zh_CN' : '总开关', /*简体*/
        'zh_TW' : '总开关1', /*繁体*/
        'en_GB' : '总开关2', /*英语*/
        'jp_JP' : '总开关3'  /*日语*/
        },

        'class:localTool_2_147' : { /*要翻译的字符串*/
        'auto_detected' : '设置:', /*自动检测*/
        'zh_CN' : '设置:', /*简体*/
        'zh_TW' : '设置:1', /*繁体*/
        'en_GB' : '设置:2', /*英语*/
        'jp_JP' : '设置:3'  /*日语*/
        },

        'class:localTool_2_148' : { /*要翻译的字符串*/
        'auto_detected' : '设置喜加一数据来源', /*自动检测*/
        'zh_CN' : '设置喜加一数据来源', /*简体*/
        'zh_TW' : '设置喜加一数据来源1', /*繁体*/
        'en_GB' : '设置喜加一数据来源2', /*英语*/
        'jp_JP' : '设置喜加一数据来源3'  /*日语*/
        },

        'class:localTool_2_149' : { /*要翻译的字符串*/
        'auto_detected' : '设置:', /*自动检测*/
        'zh_CN' : '设置:', /*简体*/
        'zh_TW' : '设置:1', /*繁体*/
        'en_GB' : '设置:2', /*英语*/
        'jp_JP' : '设置:3'  /*日语*/
        },

        'class:localTool_2_150' : { /*要翻译的字符串*/
        'auto_detected' : '功能设置', /*自动检测*/
        'zh_CN' : '功能设置', /*简体*/
        'zh_TW' : '功能设置1', /*繁体*/
        'en_GB' : '功能设置2', /*英语*/
        'jp_JP' : '功能设置3'  /*日语*/
        },

        'class:localTool_2_151' : { /*要翻译的字符串*/
        'auto_detected' : 'Debug模式', /*自动检测*/
        'zh_CN' : 'Debug模式', /*简体*/
        'zh_TW' : 'Debug模式1', /*繁体*/
        'en_GB' : 'Debug模式2', /*英语*/
        'jp_JP' : 'Debug模式3'  /*日语*/
        },

        'class:localTool_2_152' : { /*要翻译的字符串*/
        'auto_detected' : '弹出层', /*自动检测*/
        'zh_CN' : '弹出层', /*简体*/
        'zh_TW' : '弹出层1', /*繁体*/
        'en_GB' : '弹出层2', /*英语*/
        'jp_JP' : '弹出层3'  /*日语*/
        },

        'class:localTool_2_153' : { /*要翻译的字符串*/
        'auto_detected' : '滑块', /*自动检测*/
        'zh_CN' : '滑块', /*简体*/
        'zh_TW' : '滑块1', /*繁体*/
        'en_GB' : '滑块2', /*英语*/
        'jp_JP' : '滑块3'  /*日语*/
        },

        'class:localTool_2_154' : { /*要翻译的字符串*/
        'auto_detected' : '导入导出重置当前设置', /*自动检测*/
        'zh_CN' : '导入导出重置当前设置', /*简体*/
        'zh_TW' : '导入导出重置当前设置1', /*繁体*/
        'en_GB' : '导入导出重置当前设置2', /*英语*/
        'jp_JP' : '导入导出重置当前设置3'  /*日语*/
        },

        'class:localTool_2_155' : { /*要翻译的字符串*/
        'auto_detected' : '弹出层', /*自动检测*/
        'zh_CN' : '弹出层', /*简体*/
        'zh_TW' : '弹出层1', /*繁体*/
        'en_GB' : '弹出层2', /*英语*/
        'jp_JP' : '弹出层3'  /*日语*/
        },

        'class:localTool_2_156' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_2_157' : { /*要翻译的字符串*/
        'auto_detected' : '点击上传,或将文件拖拽到此处', /*自动检测*/
        'zh_CN' : '点击上传,或将文件拖拽到此处', /*简体*/
        'zh_TW' : '点击上传,或将文件拖拽到此处1', /*繁体*/
        'en_GB' : '点击上传,或将文件拖拽到此处2', /*英语*/
        'jp_JP' : '点击上传,或将文件拖拽到此处3'  /*日语*/
        },

        'class:localTool_2_158' : { /*要翻译的字符串*/
        'auto_detected' : '界面设置', /*自动检测*/
        'zh_CN' : '界面设置', /*简体*/
        'zh_TW' : '界面设置1', /*繁体*/
        'en_GB' : '界面设置2', /*英语*/
        'jp_JP' : '界面设置3'  /*日语*/
        },

        'class:localTool_2_159' : { /*要翻译的字符串*/
        'auto_detected' : '语言配置', /*自动检测*/
        'zh_CN' : '语言配置', /*简体*/
        'zh_TW' : '语言配置1', /*繁体*/
        'en_GB' : '语言配置2', /*英语*/
        'jp_JP' : '语言配置3'  /*日语*/
        },

        'class:localTool_2_160' : { /*要翻译的字符串*/
        'auto_detected' : '自动检测(简体中文)', /*自动检测*/
        'zh_CN' : '自动检测(简体中文)', /*简体*/
        'zh_TW' : '自动检测(简体中文)1', /*繁体*/
        'en_GB' : '自动检测(简体中文)2', /*英语*/
        'jp_JP' : '自动检测(简体中文)3'  /*日语*/
        },

        'class:localTool_2_161' : { /*要翻译的字符串*/
        'auto_detected' : '简体中文', /*自动检测*/
        'zh_CN' : '简体中文', /*简体*/
        'zh_TW' : '简体中文1', /*繁体*/
        'en_GB' : '简体中文2', /*英语*/
        'jp_JP' : '简体中文3'  /*日语*/
        },

        'class:localTool_2_162' : { /*要翻译的字符串*/
        'auto_detected' : '繁体中文', /*自动检测*/
        'zh_CN' : '繁体中文', /*简体*/
        'zh_TW' : '繁体中文1', /*繁体*/
        'en_GB' : '繁体中文2', /*英语*/
        'jp_JP' : '繁体中文3'  /*日语*/
        },

        'class:localTool_2_163' : { /*要翻译的字符串*/
        'auto_detected' : 'English', /*自动检测*/
        'zh_CN' : 'English', /*简体*/
        'zh_TW' : 'English1', /*繁体*/
        'en_GB' : 'English2', /*英语*/
        'jp_JP' : 'English3'  /*日语*/
        },

        'class:localTool_2_164' : { /*要翻译的字符串*/
        'auto_detected' : '主题切换', /*自动检测*/
        'zh_CN' : '主题切换', /*简体*/
        'zh_TW' : '主题切换1', /*繁体*/
        'en_GB' : '主题切换2', /*英语*/
        'jp_JP' : '主题切换3'  /*日语*/
        },

        'class:localTool_2_165' : { /*要翻译的字符串*/
        'auto_detected' : '请选择一个主题,然后点击应用', /*自动检测*/
        'zh_CN' : '请选择一个主题,然后点击应用', /*简体*/
        'zh_TW' : '请选择一个主题,然后点击应用1', /*繁体*/
        'en_GB' : '请选择一个主题,然后点击应用2', /*英语*/
        'jp_JP' : '请选择一个主题,然后点击应用3'  /*日语*/
        },

        'class:localTool_2_166' : { /*要翻译的字符串*/
        'auto_detected' : '应用主题', /*自动检测*/
        'zh_CN' : '应用主题', /*简体*/
        'zh_TW' : '应用主题1', /*繁体*/
        'en_GB' : '应用主题2', /*英语*/
        'jp_JP' : '应用主题3'  /*日语*/
        },

        'class:localTool_2_167' : { /*要翻译的字符串*/
        'auto_detected' : 'UI设置', /*自动检测*/
        'zh_CN' : 'UI设置', /*简体*/
        'zh_TW' : 'UI设置1', /*繁体*/
        'en_GB' : 'UI设置2', /*英语*/
        'jp_JP' : 'UI设置3'  /*日语*/
        },

        'class:localTool_2_168' : { /*要翻译的字符串*/
        'auto_detected' : '预览:', /*自动检测*/
        'zh_CN' : '预览:', /*简体*/
        'zh_TW' : '预览:1', /*繁体*/
        'en_GB' : '预览:2', /*英语*/
        'jp_JP' : '预览:3'  /*日语*/
        },

        'class:localTool_2_169' : { /*要翻译的字符串*/
        'auto_detected' : '主要字体颜色:', /*自动检测*/
        'zh_CN' : '主要字体颜色:', /*简体*/
        'zh_TW' : '主要字体颜色:1', /*繁体*/
        'en_GB' : '主要字体颜色:2', /*英语*/
        'jp_JP' : '主要字体颜色:3'  /*日语*/
        },

        'class:localTool_2_170' : { /*要翻译的字符串*/
        'auto_detected' : '主要背景颜色:', /*自动检测*/
        'zh_CN' : '主要背景颜色:', /*简体*/
        'zh_TW' : '主要背景颜色:1', /*繁体*/
        'en_GB' : '主要背景颜色:2', /*英语*/
        'jp_JP' : '主要背景颜色:3'  /*日语*/
        },

        'class:localTool_2_171' : { /*要翻译的字符串*/
        'auto_detected' : '留言成功字体颜色:', /*自动检测*/
        'zh_CN' : '留言成功字体颜色:', /*简体*/
        'zh_TW' : '留言成功字体颜色:1', /*繁体*/
        'en_GB' : '留言成功字体颜色:2', /*英语*/
        'jp_JP' : '留言成功字体颜色:3'  /*日语*/
        },

        'class:localTool_2_172' : { /*要翻译的字符串*/
        'auto_detected' : '留言失败字体颜色:', /*自动检测*/
        'zh_CN' : '留言失败字体颜色:', /*简体*/
        'zh_TW' : '留言失败字体颜色:1', /*繁体*/
        'en_GB' : '留言失败字体颜色:2', /*英语*/
        'jp_JP' : '留言失败字体颜色:3'  /*日语*/
        },

        'class:localTool_2_173' : { /*要翻译的字符串*/
        'auto_detected' : '留言发生错误字体颜色:', /*自动检测*/
        'zh_CN' : '留言发生错误字体颜色:', /*简体*/
        'zh_TW' : '留言发生错误字体颜色:1', /*繁体*/
        'en_GB' : '留言发生错误字体颜色:2', /*英语*/
        'jp_JP' : '留言发生错误字体颜色:3'  /*日语*/
        },

        'class:localTool_2_174' : { /*要翻译的字符串*/
        'auto_detected' : '保存为主题', /*自动检测*/
        'zh_CN' : '保存为主题', /*简体*/
        'zh_TW' : '保存为主题1', /*繁体*/
        'en_GB' : '保存为主题2', /*英语*/
        'jp_JP' : '保存为主题3'  /*日语*/
        },

        'class:localTool_2_175' : { /*要翻译的字符串*/
        'auto_detected' : '关于SteamAssistant(Steam小助手)', /*自动检测*/
        'zh_CN' : '关于SteamAssistant(Steam小助手)', /*简体*/
        'zh_TW' : '关于SteamAssistant(Steam小助手)1', /*繁体*/
        'en_GB' : '关于SteamAssistant(Steam小助手)2', /*英语*/
        'jp_JP' : '关于SteamAssistant(Steam小助手)3'  /*日语*/
        },

        'class:localTool_2_176' : { /*要翻译的字符串*/
        'auto_detected' : '程序信息:', /*自动检测*/
        'zh_CN' : '程序信息:', /*简体*/
        'zh_TW' : '程序信息:1', /*繁体*/
        'en_GB' : '程序信息:2', /*英语*/
        'jp_JP' : '程序信息:3'  /*日语*/
        },

        'class:localTool_2_177' : { /*要翻译的字符串*/
        'auto_detected' : '当前版本:v0.2.3.0', /*自动检测*/
        'zh_CN' : '当前版本:v0.2.3.0', /*简体*/
        'zh_TW' : '当前版本:v0.2.3.01', /*繁体*/
        'en_GB' : '当前版本:v0.2.3.02', /*英语*/
        'jp_JP' : '当前版本:v0.2.3.03'  /*日语*/
        },

        'class:localTool_2_178' : { /*要翻译的字符串*/
        'auto_detected' : '主程序框架更新时间:2020年4月19日', /*自动检测*/
        'zh_CN' : '主程序框架更新时间:2020年4月19日', /*简体*/
        'zh_TW' : '主程序框架更新时间:2020年4月19日1', /*繁体*/
        'en_GB' : '主程序框架更新时间:2020年4月19日2', /*英语*/
        'jp_JP' : '主程序框架更新时间:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_179' : { /*要翻译的字符串*/
        'auto_detected' : 'common模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'common模块:2020年4月19日', /*简体*/
        'zh_TW' : 'common模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'common模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'common模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_180' : { /*要翻译的字符串*/
        'auto_detected' : 'databaseConf模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'databaseConf模块:2020年4月19日', /*简体*/
        'zh_TW' : 'databaseConf模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'databaseConf模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'databaseConf模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_181' : { /*要翻译的字符串*/
        'auto_detected' : 'externalApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'externalApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'externalApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'externalApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'externalApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_182' : { /*要翻译的字符串*/
        'auto_detected' : 'steamApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'steamApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'steamApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'steamApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'steamApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_183' : { /*要翻译的字符串*/
        'auto_detected' : 'translateApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'translateApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'translateApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'translateApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'translateApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_184' : { /*要翻译的字符串*/
        'auto_detected' : 'Utility模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'Utility模块:2020年4月19日', /*简体*/
        'zh_TW' : 'Utility模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'Utility模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'Utility模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_185' : { /*要翻译的字符串*/
        'auto_detected' : 'UI模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'UI模块:2020年4月19日', /*简体*/
        'zh_TW' : 'UI模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'UI模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'UI模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_186' : { /*要翻译的字符串*/
        'auto_detected' : 'Event模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'Event模块:2020年4月19日', /*简体*/
        'zh_TW' : 'Event模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'Event模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'Event模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_187' : { /*要翻译的字符串*/
        'auto_detected' : 'CityList模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'CityList模块:2020年4月19日', /*简体*/
        'zh_TW' : 'CityList模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'CityList模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'CityList模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_2_188' : { /*要翻译的字符串*/
        'auto_detected' : '联系作者:', /*自动检测*/
        'zh_CN' : '联系作者:', /*简体*/
        'zh_TW' : '联系作者:1', /*繁体*/
        'en_GB' : '联系作者:2', /*英语*/
        'jp_JP' : '联系作者:3'  /*日语*/
        },

        'class:localTool_2_189' : { /*要翻译的字符串*/
        'auto_detected' : '反馈错误', /*自动检测*/
        'zh_CN' : '反馈错误', /*简体*/
        'zh_TW' : '反馈错误1', /*繁体*/
        'en_GB' : '反馈错误2', /*英语*/
        'jp_JP' : '反馈错误3'  /*日语*/
        },


}
};

var languagesList_loadUI_Html = {
'defaultLanguage' : 'auto_detected', /* (optional) although must be defined if you don't want en_GB */
'showFlag': false,            /* (optional) show/hide the flag 显示/隐藏旗帜 */
'showCountry': false,         /* (optional) show/hide the country name 显示/隐藏国家名称 */
'showLanguage': true,        /* (optional) show/hide the country language 显示/隐藏国家语言 */
'labelTemplate': '{{language}}',
'languages' : {              /* (optional) define **ADDITIONAL** custom languages 定义**额外的**自定义语言 */
    'auto_detected' : {
        'country': 'Auto Detected',
        'language' : 'Auto Detected',
        'countryTranslated': 'Auto Detected',
        'languageTranslated': 'Auto Detected',
        'flag' : {
            'url' : 'https://upload.wikimedia.org/wikipedia/commons/2/22/Flag_of_Hokkaido_Prefecture.svg', /* url of flag image 标志图像url */
            'class' : 'auto-flag' /* (optional) class to assign to the flag (e.g., for css styling) 类来分配给标志(例如,用于css样式) */
        }
    }
},
/* 
 * Translate your strings below 翻译下面的字符串
 */
'strings' : {
        'class:localTool_3_1' : { /*要翻译的字符串*/
        'auto_detected' : 'L', /*自动检测*/
        'zh_CN' : 'L', /*简体*/
        'zh_TW' : 'L1', /*繁体*/
        'en_GB' : 'L2', /*英语*/
        'jp_JP' : 'L3'  /*日语*/
        },

        'class:localTool_3_2' : { /*要翻译的字符串*/
        'auto_detected' : 'o', /*自动检测*/
        'zh_CN' : 'o', /*简体*/
        'zh_TW' : 'o1', /*繁体*/
        'en_GB' : 'o2', /*英语*/
        'jp_JP' : 'o3'  /*日语*/
        },

        'class:localTool_3_3' : { /*要翻译的字符串*/
        'auto_detected' : 'a', /*自动检测*/
        'zh_CN' : 'a', /*简体*/
        'zh_TW' : 'a1', /*繁体*/
        'en_GB' : 'a2', /*英语*/
        'jp_JP' : 'a3'  /*日语*/
        },

        'class:localTool_3_4' : { /*要翻译的字符串*/
        'auto_detected' : 'd', /*自动检测*/
        'zh_CN' : 'd', /*简体*/
        'zh_TW' : 'd1', /*繁体*/
        'en_GB' : 'd2', /*英语*/
        'jp_JP' : 'd3'  /*日语*/
        },

        'class:localTool_3_5' : { /*要翻译的字符串*/
        'auto_detected' : 'i', /*自动检测*/
        'zh_CN' : 'i', /*简体*/
        'zh_TW' : 'i1', /*繁体*/
        'en_GB' : 'i2', /*英语*/
        'jp_JP' : 'i3'  /*日语*/
        },

        'class:localTool_3_6' : { /*要翻译的字符串*/
        'auto_detected' : 'n', /*自动检测*/
        'zh_CN' : 'n', /*简体*/
        'zh_TW' : 'n1', /*繁体*/
        'en_GB' : 'n2', /*英语*/
        'jp_JP' : 'n3'  /*日语*/
        },

        'class:localTool_3_7' : { /*要翻译的字符串*/
        'auto_detected' : 'g', /*自动检测*/
        'zh_CN' : 'g', /*简体*/
        'zh_TW' : 'g1', /*繁体*/
        'en_GB' : 'g2', /*英语*/
        'jp_JP' : 'g3'  /*日语*/
        },


}
};

var languagesList_mainUI_html = {
'defaultLanguage' : 'auto_detected', /* (optional) although must be defined if you don't want en_GB */
'showFlag': false,            /* (optional) show/hide the flag 显示/隐藏旗帜 */
'showCountry': false,         /* (optional) show/hide the country name 显示/隐藏国家名称 */
'showLanguage': true,        /* (optional) show/hide the country language 显示/隐藏国家语言 */
'labelTemplate': '{{language}}',
'languages' : {              /* (optional) define **ADDITIONAL** custom languages 定义**额外的**自定义语言 */
    'auto_detected' : {
        'country': 'Auto Detected',
        'language' : 'Auto Detected',
        'countryTranslated': 'Auto Detected',
        'languageTranslated': 'Auto Detected',
        'flag' : {
            'url' : 'https://upload.wikimedia.org/wikipedia/commons/2/22/Flag_of_Hokkaido_Prefecture.svg', /* url of flag image 标志图像url */
            'class' : 'auto-flag' /* (optional) class to assign to the flag (e.g., for css styling) 类来分配给标志(例如,用于css样式) */
        }
    }
},
/* 
 * Translate your strings below 翻译下面的字符串
 */
'strings' : {
        'class:localTool_4_1' : { /*要翻译的字符串*/
        'auto_detected' : '留言', /*自动检测*/
        'zh_CN' : '留言', /*简体*/
        'zh_TW' : '留言1', /*繁体*/
        'en_GB' : '留言2', /*英语*/
        'jp_JP' : '留言3'  /*日语*/
        },

        'class:localTool_4_2' : { /*要翻译的字符串*/
        'auto_detected' : '留言设置', /*自动检测*/
        'zh_CN' : '留言设置', /*简体*/
        'zh_TW' : '留言设置1', /*繁体*/
        'en_GB' : '留言设置2', /*英语*/
        'jp_JP' : '留言设置3'  /*日语*/
        },

        'class:localTool_4_3' : { /*要翻译的字符串*/
        'auto_detected' : '数据分析', /*自动检测*/
        'zh_CN' : '数据分析', /*简体*/
        'zh_TW' : '数据分析1', /*繁体*/
        'en_GB' : '数据分析2', /*英语*/
        'jp_JP' : '数据分析3'  /*日语*/
        },

        'class:localTool_4_4' : { /*要翻译的字符串*/
        'auto_detected' : '点赞助手', /*自动检测*/
        'zh_CN' : '点赞助手', /*简体*/
        'zh_TW' : '点赞助手1', /*繁体*/
        'en_GB' : '点赞助手2', /*英语*/
        'jp_JP' : '点赞助手3'  /*日语*/
        },

        'class:localTool_4_5' : { /*要翻译的字符串*/
        'auto_detected' : '拓展功能(测试)', /*自动检测*/
        'zh_CN' : '拓展功能(测试)', /*简体*/
        'zh_TW' : '拓展功能(测试)1', /*繁体*/
        'en_GB' : '拓展功能(测试)2', /*英语*/
        'jp_JP' : '拓展功能(测试)3'  /*日语*/
        },

        'class:localTool_4_6' : { /*要翻译的字符串*/
        'auto_detected' : '设置', /*自动检测*/
        'zh_CN' : '设置', /*简体*/
        'zh_TW' : '设置1', /*繁体*/
        'en_GB' : '设置2', /*英语*/
        'jp_JP' : '设置3'  /*日语*/
        },

        'class:localTool_4_7' : { /*要翻译的字符串*/
        'auto_detected' : '当前字符字节数:', /*自动检测*/
        'zh_CN' : '当前字符字节数:', /*简体*/
        'zh_TW' : '当前字符字节数:1', /*繁体*/
        'en_GB' : '当前字符字节数:2', /*英语*/
        'jp_JP' : '当前字符字节数:3'  /*日语*/
        },

        'class:localTool_4_8' : { /*要翻译的字符串*/
        'auto_detected' : '0', /*自动检测*/
        'zh_CN' : '0', /*简体*/
        'zh_TW' : '01', /*繁体*/
        'en_GB' : '02', /*英语*/
        'jp_JP' : '03'  /*日语*/
        },

        'class:localTool_4_9' : { /*要翻译的字符串*/
        'auto_detected' : '/999', /*自动检测*/
        'zh_CN' : '/999', /*简体*/
        'zh_TW' : '/9991', /*繁体*/
        'en_GB' : '/9992', /*英语*/
        'jp_JP' : '/9993'  /*日语*/
        },

        'class:localTool_4_10' : { /*要翻译的字符串*/
        'auto_detected' : '文本格式(直接添加或选择文字添加)', /*自动检测*/
        'zh_CN' : '文本格式(直接添加或选择文字添加)', /*简体*/
        'zh_TW' : '文本格式(直接添加或选择文字添加)1', /*繁体*/
        'en_GB' : '文本格式(直接添加或选择文字添加)2', /*英语*/
        'jp_JP' : '文本格式(直接添加或选择文字添加)3'  /*日语*/
        },

        'class:localTool_4_11' : { /*要翻译的字符串*/
        'auto_detected' : '直接选择或搜索选择', /*自动检测*/
        'zh_CN' : '直接选择或搜索选择', /*简体*/
        'zh_TW' : '直接选择或搜索选择1', /*繁体*/
        'en_GB' : '直接选择或搜索选择2', /*英语*/
        'jp_JP' : '直接选择或搜索选择3'  /*日语*/
        },

        'class:localTool_4_12' : { /*要翻译的字符串*/
        'auto_detected' : '[h1]标题文字[/h1]', /*自动检测*/
        'zh_CN' : '[h1]标题文字[/h1]', /*简体*/
        'zh_TW' : '[h1]标题文字[/h1]1', /*繁体*/
        'en_GB' : '[h1]标题文字[/h1]2', /*英语*/
        'jp_JP' : '[h1]标题文字[/h1]3'  /*日语*/
        },

        'class:localTool_4_13' : { /*要翻译的字符串*/
        'auto_detected' : '[b]粗体文本[/b]', /*自动检测*/
        'zh_CN' : '[b]粗体文本[/b]', /*简体*/
        'zh_TW' : '[b]粗体文本[/b]1', /*繁体*/
        'en_GB' : '[b]粗体文本[/b]2', /*英语*/
        'jp_JP' : '[b]粗体文本[/b]3'  /*日语*/
        },

        'class:localTool_4_14' : { /*要翻译的字符串*/
        'auto_detected' : '[u]下划线文本[/u]', /*自动检测*/
        'zh_CN' : '[u]下划线文本[/u]', /*简体*/
        'zh_TW' : '[u]下划线文本[/u]1', /*繁体*/
        'en_GB' : '[u]下划线文本[/u]2', /*英语*/
        'jp_JP' : '[u]下划线文本[/u]3'  /*日语*/
        },

        'class:localTool_4_15' : { /*要翻译的字符串*/
        'auto_detected' : '[i]斜体文本[/i]', /*自动检测*/
        'zh_CN' : '[i]斜体文本[/i]', /*简体*/
        'zh_TW' : '[i]斜体文本[/i]1', /*繁体*/
        'en_GB' : '[i]斜体文本[/i]2', /*英语*/
        'jp_JP' : '[i]斜体文本[/i]3'  /*日语*/
        },

        'class:localTool_4_16' : { /*要翻译的字符串*/
        'auto_detected' : '[strike]删除文本[/strike]', /*自动检测*/
        'zh_CN' : '[strike]删除文本[/strike]', /*简体*/
        'zh_TW' : '[strike]删除文本[/strike]1', /*繁体*/
        'en_GB' : '[strike]删除文本[/strike]2', /*英语*/
        'jp_JP' : '[strike]删除文本[/strike]3'  /*日语*/
        },

        'class:localTool_4_17' : { /*要翻译的字符串*/
        'auto_detected' : '[spoiler]隐藏文本[/spoiler]', /*自动检测*/
        'zh_CN' : '[spoiler]隐藏文本[/spoiler]', /*简体*/
        'zh_TW' : '[spoiler]隐藏文本[/spoiler]1', /*繁体*/
        'en_GB' : '[spoiler]隐藏文本[/spoiler]2', /*英语*/
        'jp_JP' : '[spoiler]隐藏文本[/spoiler]3'  /*日语*/
        },

        'class:localTool_4_18' : { /*要翻译的字符串*/
        'auto_detected' : '[noparse]不解析[b]标签[/b][/noparse]', /*自动检测*/
        'zh_CN' : '[noparse]不解析[b]标签[/b][/noparse]', /*简体*/
        'zh_TW' : '[noparse]不解析[b]标签[/b][/noparse]1', /*繁体*/
        'en_GB' : '[noparse]不解析[b]标签[/b][/noparse]2', /*英语*/
        'jp_JP' : '[noparse]不解析[b]标签[/b][/noparse]3'  /*日语*/
        },

        'class:localTool_4_19' : { /*要翻译的字符串*/
        'auto_detected' : '[url=store.steampowered.com]网站链接[/url]', /*自动检测*/
        'zh_CN' : '[url=store.steampowered.com]网站链接[/url]', /*简体*/
        'zh_TW' : '[url=store.steampowered.com]网站链接[/url]1', /*繁体*/
        'en_GB' : '[url=store.steampowered.com]网站链接[/url]2', /*英语*/
        'jp_JP' : '[url=store.steampowered.com]网站链接[/url]3'  /*日语*/
        },

        'class:localTool_4_20' : { /*要翻译的字符串*/
        'auto_detected' : '添加', /*自动检测*/
        'zh_CN' : '添加', /*简体*/
        'zh_TW' : '添加1', /*繁体*/
        'en_GB' : '添加2', /*英语*/
        'jp_JP' : '添加3'  /*日语*/
        },

        'class:localTool_4_21' : { /*要翻译的字符串*/
        'auto_detected' : '翻译模块(需要提前设置国籍):', /*自动检测*/
        'zh_CN' : '翻译模块(需要提前设置国籍):', /*简体*/
        'zh_TW' : '翻译模块(需要提前设置国籍):1', /*繁体*/
        'en_GB' : '翻译模块(需要提前设置国籍):2', /*英语*/
        'jp_JP' : '翻译模块(需要提前设置国籍):3'  /*日语*/
        },

        'class:localTool_4_22' : { /*要翻译的字符串*/
        'auto_detected' : '当前语言:', /*自动检测*/
        'zh_CN' : '当前语言:', /*简体*/
        'zh_TW' : '当前语言:1', /*繁体*/
        'en_GB' : '当前语言:2', /*英语*/
        'jp_JP' : '当前语言:3'  /*日语*/
        },

        'class:localTool_4_23' : { /*要翻译的字符串*/
        'auto_detected' : '自动检测', /*自动检测*/
        'zh_CN' : '自动检测', /*简体*/
        'zh_TW' : '自动检测1', /*繁体*/
        'en_GB' : '自动检测2', /*英语*/
        'jp_JP' : '自动检测3'  /*日语*/
        },

        'class:localTool_4_24' : { /*要翻译的字符串*/
        'auto_detected' : '中文简体', /*自动检测*/
        'zh_CN' : '中文简体', /*简体*/
        'zh_TW' : '中文简体1', /*繁体*/
        'en_GB' : '中文简体2', /*英语*/
        'jp_JP' : '中文简体3'  /*日语*/
        },

        'class:localTool_4_25' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_4_26' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_4_27' : { /*要翻译的字符串*/
        'auto_detected' : '目标语言:', /*自动检测*/
        'zh_CN' : '目标语言:', /*简体*/
        'zh_TW' : '目标语言:1', /*繁体*/
        'en_GB' : '目标语言:2', /*英语*/
        'jp_JP' : '目标语言:3'  /*日语*/
        },

        'class:localTool_4_28' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_4_29' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_4_30' : { /*要翻译的字符串*/
        'auto_detected' : '中文简体', /*自动检测*/
        'zh_CN' : '中文简体', /*简体*/
        'zh_TW' : '中文简体1', /*繁体*/
        'en_GB' : '中文简体2', /*英语*/
        'jp_JP' : '中文简体3'  /*日语*/
        },

        'class:localTool_4_31' : { /*要翻译的字符串*/
        'auto_detected' : '马新简体[zh-sg]', /*自动检测*/
        'zh_CN' : '马新简体[zh-sg]', /*简体*/
        'zh_TW' : '马新简体[zh-sg]1', /*繁体*/
        'en_GB' : '马新简体[zh-sg]2', /*英语*/
        'jp_JP' : '马新简体[zh-sg]3'  /*日语*/
        },

        'class:localTool_4_32' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文[zh-hant]', /*自动检测*/
        'zh_CN' : '繁體中文[zh-hant]', /*简体*/
        'zh_TW' : '繁體中文[zh-hant]1', /*繁体*/
        'en_GB' : '繁體中文[zh-hant]2', /*英语*/
        'jp_JP' : '繁體中文[zh-hant]3'  /*日语*/
        },

        'class:localTool_4_33' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(香港)[zh-hk]', /*自动检测*/
        'zh_CN' : '繁體中文(香港)[zh-hk]', /*简体*/
        'zh_TW' : '繁體中文(香港)[zh-hk]1', /*繁体*/
        'en_GB' : '繁體中文(香港)[zh-hk]2', /*英语*/
        'jp_JP' : '繁體中文(香港)[zh-hk]3'  /*日语*/
        },

        'class:localTool_4_34' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(澳门)[zh-mo]', /*自动检测*/
        'zh_CN' : '繁體中文(澳门)[zh-mo]', /*简体*/
        'zh_TW' : '繁體中文(澳门)[zh-mo]1', /*繁体*/
        'en_GB' : '繁體中文(澳门)[zh-mo]2', /*英语*/
        'jp_JP' : '繁體中文(澳门)[zh-mo]3'  /*日语*/
        },

        'class:localTool_4_35' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(台湾)[zh-tw]', /*自动检测*/
        'zh_CN' : '繁體中文(台湾)[zh-tw]', /*简体*/
        'zh_TW' : '繁體中文(台湾)[zh-tw]1', /*繁体*/
        'en_GB' : '繁體中文(台湾)[zh-tw]2', /*英语*/
        'jp_JP' : '繁體中文(台湾)[zh-tw]3'  /*日语*/
        },

        'class:localTool_4_36' : { /*要翻译的字符串*/
        'auto_detected' : '翻译', /*自动检测*/
        'zh_CN' : '翻译', /*简体*/
        'zh_TW' : '翻译1', /*繁体*/
        'en_GB' : '翻译2', /*英语*/
        'jp_JP' : '翻译3'  /*日语*/
        },

        'class:localTool_4_37' : { /*要翻译的字符串*/
        'auto_detected' : '添加称呼模块(需要提前设置备注):', /*自动检测*/
        'zh_CN' : '添加称呼模块(需要提前设置备注):', /*简体*/
        'zh_TW' : '添加称呼模块(需要提前设置备注):1', /*繁体*/
        'en_GB' : '添加称呼模块(需要提前设置备注):2', /*英语*/
        'jp_JP' : '添加称呼模块(需要提前设置备注):3'  /*日语*/
        },

        'class:localTool_4_38' : { /*要翻译的字符串*/
        'auto_detected' : '自定义称呼模式', /*自动检测*/
        'zh_CN' : '自定义称呼模式', /*简体*/
        'zh_TW' : '自定义称呼模式1', /*繁体*/
        'en_GB' : '自定义称呼模式2', /*英语*/
        'jp_JP' : '自定义称呼模式3'  /*日语*/
        },

        'class:localTool_4_39' : { /*要翻译的字符串*/
        'auto_detected' : '在留言框添加自定义称呼标识符', /*自动检测*/
        'zh_CN' : '在留言框添加自定义称呼标识符', /*简体*/
        'zh_TW' : '在留言框添加自定义称呼标识符1', /*繁体*/
        'en_GB' : '在留言框添加自定义称呼标识符2', /*英语*/
        'jp_JP' : '在留言框添加自定义称呼标识符3'  /*日语*/
        },

        'class:localTool_4_40' : { /*要翻译的字符串*/
        'auto_detected' : '是否为好友添加称呼(如果好友没有备注则使用steam名称)', /*自动检测*/
        'zh_CN' : '是否为好友添加称呼(如果好友没有备注则使用steam名称)', /*简体*/
        'zh_TW' : '是否为好友添加称呼(如果好友没有备注则使用steam名称)1', /*繁体*/
        'en_GB' : '是否为好友添加称呼(如果好友没有备注则使用steam名称)2', /*英语*/
        'jp_JP' : '是否为好友添加称呼(如果好友没有备注则使用steam名称)3'  /*日语*/
        },

        'class:localTool_4_41' : { /*要翻译的字符串*/
        'auto_detected' : '是否为好友添加称呼(如果好友设置有备注则使用,否则不添加称呼)', /*自动检测*/
        },

        'class:localTool_4_42' : { /*要翻译的字符串*/
        'auto_detected' : '格式化帮助', /*自动检测*/
        'zh_CN' : '格式化帮助', /*简体*/
        'zh_TW' : '格式化帮助1', /*繁体*/
        'en_GB' : '格式化帮助2', /*英语*/
        'jp_JP' : '格式化帮助3'  /*日语*/
        },

        'class:localTool_4_43' : { /*要翻译的字符串*/
        'auto_detected' : '发送评论给选择的好友', /*自动检测*/
        'zh_CN' : '发送评论给选择的好友', /*简体*/
        'zh_TW' : '发送评论给选择的好友1', /*繁体*/
        'en_GB' : '发送评论给选择的好友2', /*英语*/
        'jp_JP' : '发送评论给选择的好友3'  /*日语*/
        },

        'class:localTool_4_44' : { /*要翻译的字符串*/
        'auto_detected' : '根据国籍发送评论给选择的好友', /*自动检测*/
        'zh_CN' : '根据国籍发送评论给选择的好友', /*简体*/
        'zh_TW' : '根据国籍发送评论给选择的好友1', /*繁体*/
        'en_GB' : '根据国籍发送评论给选择的好友2', /*英语*/
        'jp_JP' : '根据国籍发送评论给选择的好友3'  /*日语*/
        },

        'class:localTool_4_45' : { /*要翻译的字符串*/
        'auto_detected' : '设置国籍:', /*自动检测*/
        'zh_CN' : '设置国籍:', /*简体*/
        'zh_TW' : '设置国籍:1', /*繁体*/
        'en_GB' : '设置国籍:2', /*英语*/
        'jp_JP' : '设置国籍:3'  /*日语*/
        },

        'class:localTool_4_46' : { /*要翻译的字符串*/
        'auto_detected' : '请选择要设置的国籍:', /*自动检测*/
        'zh_CN' : '请选择要设置的国籍:', /*简体*/
        'zh_TW' : '请选择要设置的国籍:1', /*繁体*/
        'en_GB' : '请选择要设置的国籍:2', /*英语*/
        'jp_JP' : '请选择要设置的国籍:3'  /*日语*/
        },

        'class:localTool_4_47' : { /*要翻译的字符串*/
        'auto_detected' : '简体中文', /*自动检测*/
        'zh_CN' : '简体中文', /*简体*/
        'zh_TW' : '简体中文1', /*繁体*/
        'en_GB' : '简体中文2', /*英语*/
        'jp_JP' : '简体中文3'  /*日语*/
        },

        'class:localTool_4_48' : { /*要翻译的字符串*/
        'auto_detected' : '英语', /*自动检测*/
        'zh_CN' : '英语', /*简体*/
        'zh_TW' : '英语1', /*繁体*/
        'en_GB' : '英语2', /*英语*/
        'jp_JP' : '英语3'  /*日语*/
        },

        'class:localTool_4_49' : { /*要翻译的字符串*/
        'auto_detected' : '日语', /*自动检测*/
        'zh_CN' : '日语', /*简体*/
        'zh_TW' : '日语1', /*繁体*/
        'en_GB' : '日语2', /*英语*/
        'jp_JP' : '日语3'  /*日语*/
        },

        'class:localTool_4_50' : { /*要翻译的字符串*/
        'auto_detected' : '马新简体(马来西亚,新加坡)[zh-sg]', /*自动检测*/
        'zh_CN' : '马新简体(马来西亚,新加坡)[zh-sg]', /*简体*/
        'zh_TW' : '马新简体(马来西亚,新加坡)[zh-sg]1', /*繁体*/
        'en_GB' : '马新简体(马来西亚,新加坡)[zh-sg]2', /*英语*/
        'jp_JP' : '马新简体(马来西亚,新加坡)[zh-sg]3'  /*日语*/
        },

        'class:localTool_4_51' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文[zh-hant]', /*自动检测*/
        'zh_CN' : '繁體中文[zh-hant]', /*简体*/
        'zh_TW' : '繁體中文[zh-hant]1', /*繁体*/
        'en_GB' : '繁體中文[zh-hant]2', /*英语*/
        'jp_JP' : '繁體中文[zh-hant]3'  /*日语*/
        },

        'class:localTool_4_52' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(香港)[zh-hk]', /*自动检测*/
        'zh_CN' : '繁體中文(香港)[zh-hk]', /*简体*/
        'zh_TW' : '繁體中文(香港)[zh-hk]1', /*繁体*/
        'en_GB' : '繁體中文(香港)[zh-hk]2', /*英语*/
        'jp_JP' : '繁體中文(香港)[zh-hk]3'  /*日语*/
        },

        'class:localTool_4_53' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(澳门)[zh-mo]', /*自动检测*/
        'zh_CN' : '繁體中文(澳门)[zh-mo]', /*简体*/
        'zh_TW' : '繁體中文(澳门)[zh-mo]1', /*繁体*/
        'en_GB' : '繁體中文(澳门)[zh-mo]2', /*英语*/
        'jp_JP' : '繁體中文(澳门)[zh-mo]3'  /*日语*/
        },

        'class:localTool_4_54' : { /*要翻译的字符串*/
        'auto_detected' : '繁體中文(台湾)[zh-tw]', /*自动检测*/
        'zh_CN' : '繁體中文(台湾)[zh-tw]', /*简体*/
        'zh_TW' : '繁體中文(台湾)[zh-tw]1', /*繁体*/
        'en_GB' : '繁體中文(台湾)[zh-tw]2', /*英语*/
        'jp_JP' : '繁體中文(台湾)[zh-tw]3'  /*日语*/
        },

        'class:localTool_4_55' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置国籍标识', /*自动检测*/
        'zh_CN' : '为选择的好友设置国籍标识', /*简体*/
        'zh_TW' : '为选择的好友设置国籍标识1', /*繁体*/
        'en_GB' : '为选择的好友设置国籍标识2', /*英语*/
        'jp_JP' : '为选择的好友设置国籍标识3'  /*日语*/
        },

        'class:localTool_4_56' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消国籍标识', /*自动检测*/
        'zh_CN' : '为选择的好友取消国籍标识', /*简体*/
        'zh_TW' : '为选择的好友取消国籍标识1', /*繁体*/
        'en_GB' : '为选择的好友取消国籍标识2', /*英语*/
        'jp_JP' : '为选择的好友取消国籍标识3'  /*日语*/
        },

        'class:localTool_4_57' : { /*要翻译的字符串*/
        'auto_detected' : '设置不留言:', /*自动检测*/
        'zh_CN' : '设置不留言:', /*简体*/
        'zh_TW' : '设置不留言:1', /*繁体*/
        'en_GB' : '设置不留言:2', /*英语*/
        'jp_JP' : '设置不留言:3'  /*日语*/
        },

        'class:localTool_4_58' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置不留言', /*自动检测*/
        'zh_CN' : '为选择的好友设置不留言', /*简体*/
        'zh_TW' : '为选择的好友设置不留言1', /*繁体*/
        'en_GB' : '为选择的好友设置不留言2', /*英语*/
        'jp_JP' : '为选择的好友设置不留言3'  /*日语*/
        },

        'class:localTool_4_59' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消设置不留言', /*自动检测*/
        'zh_CN' : '为选择的好友取消设置不留言', /*简体*/
        'zh_TW' : '为选择的好友取消设置不留言1', /*繁体*/
        'en_GB' : '为选择的好友取消设置不留言2', /*英语*/
        'jp_JP' : '为选择的好友取消设置不留言3'  /*日语*/
        },

        'class:localTool_4_60' : { /*要翻译的字符串*/
        'auto_detected' : '设置留言时间间隔:', /*自动检测*/
        'zh_CN' : '设置留言时间间隔:', /*简体*/
        'zh_TW' : '设置留言时间间隔:1', /*繁体*/
        'en_GB' : '设置留言时间间隔:2', /*英语*/
        'jp_JP' : '设置留言时间间隔:3'  /*日语*/
        },

        'class:localTool_4_61' : { /*要翻译的字符串*/
        },

        'class:localTool_4_62' : { /*要翻译的字符串*/
        },

        'class:localTool_4_63' : { /*要翻译的字符串*/
        'auto_detected' : '请选择留言', /*自动检测*/
        'zh_CN' : '请选择留言', /*简体*/
        'zh_TW' : '请选择留言1', /*繁体*/
        'en_GB' : '请选择留言2', /*英语*/
        'jp_JP' : '请选择留言3'  /*日语*/
        },

        'class:localTool_4_64' : { /*要翻译的字符串*/
        'auto_detected' : '留言日期差', /*自动检测*/
        'zh_CN' : '留言日期差', /*简体*/
        'zh_TW' : '留言日期差1', /*繁体*/
        'en_GB' : '留言日期差2', /*英语*/
        'jp_JP' : '留言日期差3'  /*日语*/
        },

        'class:localTool_4_65' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友设置留言时间间隔', /*自动检测*/
        'zh_CN' : '为选择的好友设置留言时间间隔', /*简体*/
        'zh_TW' : '为选择的好友设置留言时间间隔1', /*繁体*/
        'en_GB' : '为选择的好友设置留言时间间隔2', /*英语*/
        'jp_JP' : '为选择的好友设置留言时间间隔3'  /*日语*/
        },

        'class:localTool_4_66' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消设置留言时间间隔', /*自动检测*/
        'zh_CN' : '为选择的好友取消设置留言时间间隔', /*简体*/
        'zh_TW' : '为选择的好友取消设置留言时间间隔1', /*繁体*/
        'en_GB' : '为选择的好友取消设置留言时间间隔2', /*英语*/
        'jp_JP' : '为选择的好友取消设置留言时间间隔3'  /*日语*/
        },

        'class:localTool_4_67' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动留言计划:', /*自动检测*/
        'zh_CN' : '设置自动留言计划:', /*简体*/
        'zh_TW' : '设置自动留言计划:1', /*繁体*/
        'en_GB' : '设置自动留言计划:2', /*英语*/
        'jp_JP' : '设置自动留言计划:3'  /*日语*/
        },

        'class:localTool_4_68' : { /*要翻译的字符串*/
        'auto_detected' : '请选择时间', /*自动检测*/
        'zh_CN' : '请选择时间', /*简体*/
        'zh_TW' : '请选择时间1', /*繁体*/
        'en_GB' : '请选择时间2', /*英语*/
        'jp_JP' : '请选择时间3'  /*日语*/
        },

        'class:localTool_4_69' : { /*要翻译的字符串*/
        'auto_detected' : '请选择时间', /*自动检测*/
        'zh_CN' : '请选择时间', /*简体*/
        'zh_TW' : '请选择时间1', /*繁体*/
        'en_GB' : '请选择时间2', /*英语*/
        'jp_JP' : '请选择时间3'  /*日语*/
        },

        'class:localTool_4_70' : { /*要翻译的字符串*/
        'auto_detected' : '设置好友分组:', /*自动检测*/
        'zh_CN' : '设置好友分组:', /*简体*/
        'zh_TW' : '设置好友分组:1', /*繁体*/
        'en_GB' : '设置好友分组:2', /*英语*/
        'jp_JP' : '设置好友分组:3'  /*日语*/
        },

        'class:localTool_4_71' : { /*要翻译的字符串*/
        'auto_detected' : '分组列表', /*自动检测*/
        'zh_CN' : '分组列表', /*简体*/
        'zh_TW' : '分组列表1', /*繁体*/
        'en_GB' : '分组列表2', /*英语*/
        'jp_JP' : '分组列表3'  /*日语*/
        },

        'class:localTool_4_72' : { /*要翻译的字符串*/
        'auto_detected' : '直接选择或搜索选择', /*自动检测*/
        'zh_CN' : '直接选择或搜索选择', /*简体*/
        'zh_TW' : '直接选择或搜索选择1', /*繁体*/
        'en_GB' : '直接选择或搜索选择2', /*英语*/
        'jp_JP' : '直接选择或搜索选择3'  /*日语*/
        },

        'class:localTool_4_73' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_74' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_75' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_76' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_77' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_78' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_79' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_80' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_81' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_82' : { /*要翻译的字符串*/
        'auto_detected' : '编辑列表', /*自动检测*/
        'zh_CN' : '编辑列表', /*简体*/
        'zh_TW' : '编辑列表1', /*繁体*/
        'en_GB' : '编辑列表2', /*英语*/
        'jp_JP' : '编辑列表3'  /*日语*/
        },

        'class:localTool_4_83' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友添加分组', /*自动检测*/
        'zh_CN' : '为选择的好友添加分组', /*简体*/
        'zh_TW' : '为选择的好友添加分组1', /*繁体*/
        'en_GB' : '为选择的好友添加分组2', /*英语*/
        'jp_JP' : '为选择的好友添加分组3'  /*日语*/
        },

        'class:localTool_4_84' : { /*要翻译的字符串*/
        'auto_detected' : '为选择的好友取消添加分组', /*自动检测*/
        'zh_CN' : '为选择的好友取消添加分组', /*简体*/
        'zh_TW' : '为选择的好友取消添加分组1', /*繁体*/
        'en_GB' : '为选择的好友取消添加分组2', /*英语*/
        'jp_JP' : '为选择的好友取消添加分组3'  /*日语*/
        },

        'class:localTool_4_85' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_86' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_87' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_88' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_89' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_90' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_91' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_92' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_93' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_94' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_95' : { /*要翻译的字符串*/
        'auto_detected' : '分组名称', /*自动检测*/
        'zh_CN' : '分组名称', /*简体*/
        'zh_TW' : '分组名称1', /*繁体*/
        'en_GB' : '分组名称2', /*英语*/
        'jp_JP' : '分组名称3'  /*日语*/
        },

        'class:localTool_4_96' : { /*要翻译的字符串*/
        'auto_detected' : '用户', /*自动检测*/
        'zh_CN' : '用户', /*简体*/
        'zh_TW' : '用户1', /*繁体*/
        'en_GB' : '用户2', /*英语*/
        'jp_JP' : '用户3'  /*日语*/
        },

        'class:localTool_4_97' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍进行高亮分组', /*自动检测*/
        'zh_CN' : '按国籍进行高亮分组', /*简体*/
        'zh_TW' : '按国籍进行高亮分组1', /*繁体*/
        'en_GB' : '按国籍进行高亮分组2', /*英语*/
        'jp_JP' : '按国籍进行高亮分组3'  /*日语*/
        },

        'class:localTool_4_98' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍进行排序分组(慢)', /*自动检测*/
        'zh_CN' : '按国籍进行排序分组(慢)', /*简体*/
        'zh_TW' : '按国籍进行排序分组(慢)1', /*繁体*/
        'en_GB' : '按国籍进行排序分组(慢)2', /*英语*/
        'jp_JP' : '按国籍进行排序分组(慢)3'  /*日语*/
        },

        'class:localTool_4_99' : { /*要翻译的字符串*/
        'auto_detected' : '按在线时间进行排序分组', /*自动检测*/
        'zh_CN' : '按在线时间进行排序分组', /*简体*/
        'zh_TW' : '按在线时间进行排序分组1', /*繁体*/
        'en_GB' : '按在线时间进行排序分组2', /*英语*/
        'jp_JP' : '按在线时间进行排序分组3'  /*日语*/
        },

        'class:localTool_4_100' : { /*要翻译的字符串*/
        'auto_detected' : '显示好友详细数据-不可用', /*自动检测*/
        'zh_CN' : '显示好友详细数据-不可用', /*简体*/
        'zh_TW' : '显示好友详细数据-不可用1', /*繁体*/
        'en_GB' : '显示好友详细数据-不可用2', /*英语*/
        'jp_JP' : '显示好友详细数据-不可用3'  /*日语*/
        },

        'class:localTool_4_101' : { /*要翻译的字符串*/
        'auto_detected' : '好友数据统计', /*自动检测*/
        'zh_CN' : '好友数据统计', /*简体*/
        'zh_TW' : '好友数据统计1', /*繁体*/
        'en_GB' : '好友数据统计2', /*英语*/
        'jp_JP' : '好友数据统计3'  /*日语*/
        },

        'class:localTool_4_102' : { /*要翻译的字符串*/
        'auto_detected' : '留言数据统计', /*自动检测*/
        'zh_CN' : '留言数据统计', /*简体*/
        'zh_TW' : '留言数据统计1', /*繁体*/
        'en_GB' : '留言数据统计2', /*英语*/
        'jp_JP' : '留言数据统计3'  /*日语*/
        },

        'class:localTool_4_103' : { /*要翻译的字符串*/
        'auto_detected' : '关系网统计', /*自动检测*/
        'zh_CN' : '关系网统计', /*简体*/
        'zh_TW' : '关系网统计1', /*繁体*/
        'en_GB' : '关系网统计2', /*英语*/
        'jp_JP' : '关系网统计3'  /*日语*/
        },

        'class:localTool_4_104' : { /*要翻译的字符串*/
        'auto_detected' : '当前配置统计', /*自动检测*/
        'zh_CN' : '当前配置统计', /*简体*/
        'zh_TW' : '当前配置统计1', /*繁体*/
        'en_GB' : '当前配置统计2', /*英语*/
        'jp_JP' : '当前配置统计3'  /*日语*/
        },

        'class:localTool_4_105' : { /*要翻译的字符串*/
        'auto_detected' : '查看好友配置统计', /*自动检测*/
        'zh_CN' : '查看好友配置统计', /*简体*/
        'zh_TW' : '查看好友配置统计1', /*繁体*/
        'en_GB' : '查看好友配置统计2', /*英语*/
        'jp_JP' : '查看好友配置统计3'  /*日语*/
        },

        'class:localTool_4_106' : { /*要翻译的字符串*/
        'auto_detected' : '数据表格(汇总所有的数据:id,名称,备注,国籍(语言),等级,好友数量,游戏数量,dlc数量,创意工坊数量,艺术作品数量,动态数量)', /*自动检测*/
        },

        'class:localTool_4_107' : { /*要翻译的字符串*/
        'auto_detected' : '分为:', /*自动检测*/
        'zh_CN' : '分为:', /*简体*/
        'zh_TW' : '分为:1', /*繁体*/
        'en_GB' : '分为:2', /*英语*/
        'jp_JP' : '分为:3'  /*日语*/
        },

        'class:localTool_4_108' : { /*要翻译的字符串*/
        'auto_detected' : '按国籍的饼图(总留言数量),', /*自动检测*/
        'zh_CN' : '按国籍的饼图(总留言数量),', /*简体*/
        'zh_TW' : '按国籍的饼图(总留言数量),1', /*繁体*/
        'en_GB' : '按国籍的饼图(总留言数量),2', /*英语*/
        'jp_JP' : '按国籍的饼图(总留言数量),3'  /*日语*/
        },

        'class:localTool_4_109' : { /*要翻译的字符串*/
        'auto_detected' : '按每天留言数据的折线图(统计所有的留言数据,生成的折线图),', /*自动检测*/
        },

        'class:localTool_4_110' : { /*要翻译的字符串*/
        },

        'class:localTool_4_111' : { /*要翻译的字符串*/
        'auto_detected' : '数据表格(汇总所有的数据)', /*自动检测*/
        'zh_CN' : '数据表格(汇总所有的数据)', /*简体*/
        'zh_TW' : '数据表格(汇总所有的数据)1', /*繁体*/
        'en_GB' : '数据表格(汇总所有的数据)2', /*英语*/
        'jp_JP' : '数据表格(汇总所有的数据)3'  /*日语*/
        },

        'class:localTool_4_112' : { /*要翻译的字符串*/
        'auto_detected' : '好友关系网(仅统计共同好友)', /*自动检测*/
        'zh_CN' : '好友关系网(仅统计共同好友)', /*简体*/
        'zh_TW' : '好友关系网(仅统计共同好友)1', /*繁体*/
        'en_GB' : '好友关系网(仅统计共同好友)2', /*英语*/
        'jp_JP' : '好友关系网(仅统计共同好友)3'  /*日语*/
        },

        'class:localTool_4_113' : { /*要翻译的字符串*/
        'auto_detected' : '当前的配置数据和运行状态', /*自动检测*/
        'zh_CN' : '当前的配置数据和运行状态', /*简体*/
        'zh_TW' : '当前的配置数据和运行状态1', /*繁体*/
        'en_GB' : '当前的配置数据和运行状态2', /*英语*/
        'jp_JP' : '当前的配置数据和运行状态3'  /*日语*/
        },

        'class:localTool_4_114' : { /*要翻译的字符串*/
        'auto_detected' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)', /*自动检测*/
        'zh_CN' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)', /*简体*/
        'zh_TW' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)1', /*繁体*/
        'en_GB' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)2', /*英语*/
        'jp_JP' : '对好友设置的配置数据(比如国籍,不留言,留言时间间隔等)3'  /*日语*/
        },

        'class:localTool_4_115' : { /*要翻译的字符串*/
        'auto_detected' : '动态点赞助手', /*自动检测*/
        'zh_CN' : '动态点赞助手', /*简体*/
        'zh_TW' : '动态点赞助手1', /*繁体*/
        'en_GB' : '动态点赞助手2', /*英语*/
        'jp_JP' : '动态点赞助手3'  /*日语*/
        },

        'class:localTool_4_116' : { /*要翻译的字符串*/
        'auto_detected' : '总开关', /*自动检测*/
        'zh_CN' : '总开关', /*简体*/
        'zh_TW' : '总开关1', /*繁体*/
        'en_GB' : '总开关2', /*英语*/
        'jp_JP' : '总开关3'  /*日语*/
        },

        'class:localTool_4_117' : { /*要翻译的字符串*/
        'auto_detected' : '设置点赞内容:', /*自动检测*/
        'zh_CN' : '设置点赞内容:', /*简体*/
        'zh_TW' : '设置点赞内容:1', /*繁体*/
        'en_GB' : '设置点赞内容:2', /*英语*/
        'jp_JP' : '设置点赞内容:3'  /*日语*/
        },

        'class:localTool_4_118' : { /*要翻译的字符串*/
        'auto_detected' : '点赞内容:', /*自动检测*/
        'zh_CN' : '点赞内容:', /*简体*/
        'zh_TW' : '点赞内容:1', /*繁体*/
        'en_GB' : '点赞内容:2', /*英语*/
        'jp_JP' : '点赞内容:3'  /*日语*/
        },

        'class:localTool_4_119' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动点赞模式:', /*自动检测*/
        'zh_CN' : '设置自动点赞模式:', /*简体*/
        'zh_TW' : '设置自动点赞模式:1', /*繁体*/
        'en_GB' : '设置自动点赞模式:2', /*英语*/
        'jp_JP' : '设置自动点赞模式:3'  /*日语*/
        },

        'class:localTool_4_120' : { /*要翻译的字符串*/
        'auto_detected' : '点赞模式:', /*自动检测*/
        'zh_CN' : '点赞模式:', /*简体*/
        'zh_TW' : '点赞模式:1', /*繁体*/
        'en_GB' : '点赞模式:2', /*英语*/
        'jp_JP' : '点赞模式:3'  /*日语*/
        },

        'class:localTool_4_121' : { /*要翻译的字符串*/
        'auto_detected' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)', /*自动检测*/
        'zh_CN' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)', /*简体*/
        'zh_TW' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)1', /*繁体*/
        'en_GB' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)2', /*英语*/
        'jp_JP' : '设置自动点赞时间区间(默认今天~之前所有的动态内容)3'  /*日语*/
        },

        'class:localTool_4_122' : { /*要翻译的字符串*/
        'auto_detected' : '请选择范围', /*自动检测*/
        'zh_CN' : '请选择范围', /*简体*/
        'zh_TW' : '请选择范围1', /*繁体*/
        'en_GB' : '请选择范围2', /*英语*/
        'jp_JP' : '请选择范围3'  /*日语*/
        },

        'class:localTool_4_123' : { /*要翻译的字符串*/
        'auto_detected' : '点赞进度时间线', /*自动检测*/
        'zh_CN' : '点赞进度时间线', /*简体*/
        'zh_TW' : '点赞进度时间线1', /*繁体*/
        'en_GB' : '点赞进度时间线2', /*英语*/
        'jp_JP' : '点赞进度时间线3'  /*日语*/
        },

        'class:localTool_4_124' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_4_125' : { /*要翻译的字符串*/
        'auto_detected' : '8月18日', /*自动检测*/
        'zh_CN' : '8月18日', /*简体*/
        'zh_TW' : '8月18日1', /*繁体*/
        'en_GB' : '8月18日2', /*英语*/
        'jp_JP' : '8月18日3'  /*日语*/
        },

        'class:localTool_4_126' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条', /*自动检测*/
        'zh_CN' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条', /*简体*/
        'zh_TW' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条1', /*繁体*/
        'en_GB' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条2', /*英语*/
        'jp_JP' : '已点赞状态x条,点赞发布艺术作品x条,点赞收藏艺术作品x条3'  /*日语*/
        },

        'class:localTool_4_127' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条', /*自动检测*/
        'zh_CN' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条', /*简体*/
        'zh_TW' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条1', /*繁体*/
        'en_GB' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条2', /*英语*/
        'jp_JP' : '已点赞评测x条,点赞发布创意工坊x条,点赞收藏创意工坊x条3'  /*日语*/
        },

        'class:localTool_4_128' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条', /*自动检测*/
        'zh_CN' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条', /*简体*/
        'zh_TW' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条1', /*繁体*/
        'en_GB' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条2', /*英语*/
        'jp_JP' : '已点赞购买状态x条,点赞发布指南x条,点赞收藏指南x条3'  /*日语*/
        },

        'class:localTool_4_129' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条', /*自动检测*/
        'zh_CN' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条', /*简体*/
        'zh_TW' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条1', /*繁体*/
        'en_GB' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条2', /*英语*/
        'jp_JP' : '已点赞组通知x条,点赞上次载图x条,点赞收藏载图x条3'  /*日语*/
        },

        'class:localTool_4_130' : { /*要翻译的字符串*/
        'auto_detected' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条', /*自动检测*/
        'zh_CN' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条', /*简体*/
        'zh_TW' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条1', /*繁体*/
        'en_GB' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条2', /*英语*/
        'jp_JP' : '已点赞组活动x条,点赞上传视频x条,点赞收藏视频x条3'  /*日语*/
        },

        'class:localTool_4_131' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_4_132' : { /*要翻译的字符串*/
        'auto_detected' : '8月16日', /*自动检测*/
        'zh_CN' : '8月16日', /*简体*/
        'zh_TW' : '8月16日1', /*繁体*/
        'en_GB' : '8月16日2', /*英语*/
        'jp_JP' : '8月16日3'  /*日语*/
        },

        'class:localTool_4_133' : { /*要翻译的字符串*/
        },

        'class:localTool_4_134' : { /*要翻译的字符串*/
        'auto_detected' : '《登高》', /*自动检测*/
        'zh_CN' : '《登高》', /*简体*/
        'zh_TW' : '《登高》1', /*繁体*/
        'en_GB' : '《登高》2', /*英语*/
        'jp_JP' : '《登高》3'  /*日语*/
        },

        'class:localTool_4_135' : { /*要翻译的字符串*/
        'auto_detected' : '《茅屋为秋风所破歌》', /*自动检测*/
        'zh_CN' : '《茅屋为秋风所破歌》', /*简体*/
        'zh_TW' : '《茅屋为秋风所破歌》1', /*繁体*/
        'en_GB' : '《茅屋为秋风所破歌》2', /*英语*/
        'jp_JP' : '《茅屋为秋风所破歌》3'  /*日语*/
        },

        'class:localTool_4_136' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_4_137' : { /*要翻译的字符串*/
        'auto_detected' : '8月15日', /*自动检测*/
        'zh_CN' : '8月15日', /*简体*/
        'zh_TW' : '8月15日1', /*繁体*/
        'en_GB' : '8月15日2', /*英语*/
        'jp_JP' : '8月15日3'  /*日语*/
        },

        'class:localTool_4_138' : { /*要翻译的字符串*/
        'auto_detected' : '中国人民抗日战争胜利日', /*自动检测*/
        'zh_CN' : '中国人民抗日战争胜利日', /*简体*/
        'zh_TW' : '中国人民抗日战争胜利日1', /*繁体*/
        'en_GB' : '中国人民抗日战争胜利日2', /*英语*/
        'jp_JP' : '中国人民抗日战争胜利日3'  /*日语*/
        },

        'class:localTool_4_139' : { /*要翻译的字符串*/
        },

        'class:localTool_4_140' : { /*要翻译的字符串*/
        'auto_detected' : '铭记、感恩', /*自动检测*/
        'zh_CN' : '铭记、感恩', /*简体*/
        'zh_TW' : '铭记、感恩1', /*繁体*/
        'en_GB' : '铭记、感恩2', /*英语*/
        'jp_JP' : '铭记、感恩3'  /*日语*/
        },

        'class:localTool_4_141' : { /*要翻译的字符串*/
        'auto_detected' : '所有为中华民族浴血奋战的英雄将士', /*自动检测*/
        'zh_CN' : '所有为中华民族浴血奋战的英雄将士', /*简体*/
        'zh_TW' : '所有为中华民族浴血奋战的英雄将士1', /*繁体*/
        'en_GB' : '所有为中华民族浴血奋战的英雄将士2', /*英语*/
        'jp_JP' : '所有为中华民族浴血奋战的英雄将士3'  /*日语*/
        },

        'class:localTool_4_142' : { /*要翻译的字符串*/
        'auto_detected' : '永垂不朽', /*自动检测*/
        'zh_CN' : '永垂不朽', /*简体*/
        'zh_TW' : '永垂不朽1', /*繁体*/
        'en_GB' : '永垂不朽2', /*英语*/
        'jp_JP' : '永垂不朽3'  /*日语*/
        },

        'class:localTool_4_143' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_4_144' : { /*要翻译的字符串*/
        'auto_detected' : '过去', /*自动检测*/
        'zh_CN' : '过去', /*简体*/
        'zh_TW' : '过去1', /*繁体*/
        'en_GB' : '过去2', /*英语*/
        'jp_JP' : '过去3'  /*日语*/
        },

        'class:localTool_4_145' : { /*要翻译的字符串*/
        'auto_detected' : '喜加一助手', /*自动检测*/
        'zh_CN' : '喜加一助手', /*简体*/
        'zh_TW' : '喜加一助手1', /*繁体*/
        'en_GB' : '喜加一助手2', /*英语*/
        'jp_JP' : '喜加一助手3'  /*日语*/
        },

        'class:localTool_4_146' : { /*要翻译的字符串*/
        'auto_detected' : '总开关', /*自动检测*/
        'zh_CN' : '总开关', /*简体*/
        'zh_TW' : '总开关1', /*繁体*/
        'en_GB' : '总开关2', /*英语*/
        'jp_JP' : '总开关3'  /*日语*/
        },

        'class:localTool_4_147' : { /*要翻译的字符串*/
        'auto_detected' : '设置:', /*自动检测*/
        'zh_CN' : '设置:', /*简体*/
        'zh_TW' : '设置:1', /*繁体*/
        'en_GB' : '设置:2', /*英语*/
        'jp_JP' : '设置:3'  /*日语*/
        },

        'class:localTool_4_148' : { /*要翻译的字符串*/
        'auto_detected' : '设置喜加一数据来源', /*自动检测*/
        'zh_CN' : '设置喜加一数据来源', /*简体*/
        'zh_TW' : '设置喜加一数据来源1', /*繁体*/
        'en_GB' : '设置喜加一数据来源2', /*英语*/
        'jp_JP' : '设置喜加一数据来源3'  /*日语*/
        },

        'class:localTool_4_149' : { /*要翻译的字符串*/
        'auto_detected' : '设置:', /*自动检测*/
        'zh_CN' : '设置:', /*简体*/
        'zh_TW' : '设置:1', /*繁体*/
        'en_GB' : '设置:2', /*英语*/
        'jp_JP' : '设置:3'  /*日语*/
        },

        'class:localTool_4_150' : { /*要翻译的字符串*/
        'auto_detected' : '功能设置', /*自动检测*/
        'zh_CN' : '功能设置', /*简体*/
        'zh_TW' : '功能设置1', /*繁体*/
        'en_GB' : '功能设置2', /*英语*/
        'jp_JP' : '功能设置3'  /*日语*/
        },

        'class:localTool_4_151' : { /*要翻译的字符串*/
        'auto_detected' : 'Debug模式', /*自动检测*/
        'zh_CN' : 'Debug模式', /*简体*/
        'zh_TW' : 'Debug模式1', /*繁体*/
        'en_GB' : 'Debug模式2', /*英语*/
        'jp_JP' : 'Debug模式3'  /*日语*/
        },

        'class:localTool_4_152' : { /*要翻译的字符串*/
        'auto_detected' : '弹出层', /*自动检测*/
        'zh_CN' : '弹出层', /*简体*/
        'zh_TW' : '弹出层1', /*繁体*/
        'en_GB' : '弹出层2', /*英语*/
        'jp_JP' : '弹出层3'  /*日语*/
        },

        'class:localTool_4_153' : { /*要翻译的字符串*/
        'auto_detected' : '滑块', /*自动检测*/
        'zh_CN' : '滑块', /*简体*/
        'zh_TW' : '滑块1', /*繁体*/
        'en_GB' : '滑块2', /*英语*/
        'jp_JP' : '滑块3'  /*日语*/
        },

        'class:localTool_4_154' : { /*要翻译的字符串*/
        'auto_detected' : '导入导出重置当前设置', /*自动检测*/
        'zh_CN' : '导入导出重置当前设置', /*简体*/
        'zh_TW' : '导入导出重置当前设置1', /*繁体*/
        'en_GB' : '导入导出重置当前设置2', /*英语*/
        'jp_JP' : '导入导出重置当前设置3'  /*日语*/
        },

        'class:localTool_4_155' : { /*要翻译的字符串*/
        'auto_detected' : '弹出层', /*自动检测*/
        'zh_CN' : '弹出层', /*简体*/
        'zh_TW' : '弹出层1', /*繁体*/
        'en_GB' : '弹出层2', /*英语*/
        'jp_JP' : '弹出层3'  /*日语*/
        },

        'class:localTool_4_156' : { /*要翻译的字符串*/
        'auto_detected' : '', /*自动检测*/
        'zh_CN' : '', /*简体*/
        'zh_TW' : '1', /*繁体*/
        'en_GB' : '2', /*英语*/
        'jp_JP' : '3'  /*日语*/
        },

        'class:localTool_4_157' : { /*要翻译的字符串*/
        'auto_detected' : '点击上传,或将文件拖拽到此处', /*自动检测*/
        'zh_CN' : '点击上传,或将文件拖拽到此处', /*简体*/
        'zh_TW' : '点击上传,或将文件拖拽到此处1', /*繁体*/
        'en_GB' : '点击上传,或将文件拖拽到此处2', /*英语*/
        'jp_JP' : '点击上传,或将文件拖拽到此处3'  /*日语*/
        },

        'class:localTool_4_158' : { /*要翻译的字符串*/
        'auto_detected' : '界面设置', /*自动检测*/
        'zh_CN' : '界面设置', /*简体*/
        'zh_TW' : '界面设置1', /*繁体*/
        'en_GB' : '界面设置2', /*英语*/
        'jp_JP' : '界面设置3'  /*日语*/
        },

        'class:localTool_4_159' : { /*要翻译的字符串*/
        'auto_detected' : '语言配置', /*自动检测*/
        'zh_CN' : '语言配置', /*简体*/
        'zh_TW' : '语言配置1', /*繁体*/
        'en_GB' : '语言配置2', /*英语*/
        'jp_JP' : '语言配置3'  /*日语*/
        },

        'class:localTool_4_160' : { /*要翻译的字符串*/
        'auto_detected' : '自动检测(简体中文)', /*自动检测*/
        'zh_CN' : '自动检测(简体中文)', /*简体*/
        'zh_TW' : '自动检测(简体中文)1', /*繁体*/
        'en_GB' : '自动检测(简体中文)2', /*英语*/
        'jp_JP' : '自动检测(简体中文)3'  /*日语*/
        },

        'class:localTool_4_161' : { /*要翻译的字符串*/
        'auto_detected' : '简体中文', /*自动检测*/
        'zh_CN' : '简体中文', /*简体*/
        'zh_TW' : '简体中文1', /*繁体*/
        'en_GB' : '简体中文2', /*英语*/
        'jp_JP' : '简体中文3'  /*日语*/
        },

        'class:localTool_4_162' : { /*要翻译的字符串*/
        'auto_detected' : '繁体中文', /*自动检测*/
        'zh_CN' : '繁体中文', /*简体*/
        'zh_TW' : '繁体中文1', /*繁体*/
        'en_GB' : '繁体中文2', /*英语*/
        'jp_JP' : '繁体中文3'  /*日语*/
        },

        'class:localTool_4_163' : { /*要翻译的字符串*/
        'auto_detected' : 'English', /*自动检测*/
        'zh_CN' : 'English', /*简体*/
        'zh_TW' : 'English1', /*繁体*/
        'en_GB' : 'English2', /*英语*/
        'jp_JP' : 'English3'  /*日语*/
        },

        'class:localTool_4_164' : { /*要翻译的字符串*/
        'auto_detected' : '主题切换', /*自动检测*/
        'zh_CN' : '主题切换', /*简体*/
        'zh_TW' : '主题切换1', /*繁体*/
        'en_GB' : '主题切换2', /*英语*/
        'jp_JP' : '主题切换3'  /*日语*/
        },

        'class:localTool_4_165' : { /*要翻译的字符串*/
        'auto_detected' : '请选择一个主题,然后点击应用', /*自动检测*/
        'zh_CN' : '请选择一个主题,然后点击应用', /*简体*/
        'zh_TW' : '请选择一个主题,然后点击应用1', /*繁体*/
        'en_GB' : '请选择一个主题,然后点击应用2', /*英语*/
        'jp_JP' : '请选择一个主题,然后点击应用3'  /*日语*/
        },

        'class:localTool_4_166' : { /*要翻译的字符串*/
        'auto_detected' : '应用主题', /*自动检测*/
        'zh_CN' : '应用主题', /*简体*/
        'zh_TW' : '应用主题1', /*繁体*/
        'en_GB' : '应用主题2', /*英语*/
        'jp_JP' : '应用主题3'  /*日语*/
        },

        'class:localTool_4_167' : { /*要翻译的字符串*/
        'auto_detected' : 'UI设置', /*自动检测*/
        'zh_CN' : 'UI设置', /*简体*/
        'zh_TW' : 'UI设置1', /*繁体*/
        'en_GB' : 'UI设置2', /*英语*/
        'jp_JP' : 'UI设置3'  /*日语*/
        },

        'class:localTool_4_168' : { /*要翻译的字符串*/
        'auto_detected' : '预览:', /*自动检测*/
        'zh_CN' : '预览:', /*简体*/
        'zh_TW' : '预览:1', /*繁体*/
        'en_GB' : '预览:2', /*英语*/
        'jp_JP' : '预览:3'  /*日语*/
        },

        'class:localTool_4_169' : { /*要翻译的字符串*/
        'auto_detected' : '主要字体颜色:', /*自动检测*/
        'zh_CN' : '主要字体颜色:', /*简体*/
        'zh_TW' : '主要字体颜色:1', /*繁体*/
        'en_GB' : '主要字体颜色:2', /*英语*/
        'jp_JP' : '主要字体颜色:3'  /*日语*/
        },

        'class:localTool_4_170' : { /*要翻译的字符串*/
        'auto_detected' : '主要背景颜色:', /*自动检测*/
        'zh_CN' : '主要背景颜色:', /*简体*/
        'zh_TW' : '主要背景颜色:1', /*繁体*/
        'en_GB' : '主要背景颜色:2', /*英语*/
        'jp_JP' : '主要背景颜色:3'  /*日语*/
        },

        'class:localTool_4_171' : { /*要翻译的字符串*/
        'auto_detected' : '留言成功字体颜色:', /*自动检测*/
        'zh_CN' : '留言成功字体颜色:', /*简体*/
        'zh_TW' : '留言成功字体颜色:1', /*繁体*/
        'en_GB' : '留言成功字体颜色:2', /*英语*/
        'jp_JP' : '留言成功字体颜色:3'  /*日语*/
        },

        'class:localTool_4_172' : { /*要翻译的字符串*/
        'auto_detected' : '留言失败字体颜色:', /*自动检测*/
        'zh_CN' : '留言失败字体颜色:', /*简体*/
        'zh_TW' : '留言失败字体颜色:1', /*繁体*/
        'en_GB' : '留言失败字体颜色:2', /*英语*/
        'jp_JP' : '留言失败字体颜色:3'  /*日语*/
        },

        'class:localTool_4_173' : { /*要翻译的字符串*/
        'auto_detected' : '留言发生错误字体颜色:', /*自动检测*/
        'zh_CN' : '留言发生错误字体颜色:', /*简体*/
        'zh_TW' : '留言发生错误字体颜色:1', /*繁体*/
        'en_GB' : '留言发生错误字体颜色:2', /*英语*/
        'jp_JP' : '留言发生错误字体颜色:3'  /*日语*/
        },

        'class:localTool_4_174' : { /*要翻译的字符串*/
        'auto_detected' : '保存为主题', /*自动检测*/
        'zh_CN' : '保存为主题', /*简体*/
        'zh_TW' : '保存为主题1', /*繁体*/
        'en_GB' : '保存为主题2', /*英语*/
        'jp_JP' : '保存为主题3'  /*日语*/
        },

        'class:localTool_4_175' : { /*要翻译的字符串*/
        'auto_detected' : '关于SteamAssistant(Steam小助手)', /*自动检测*/
        'zh_CN' : '关于SteamAssistant(Steam小助手)', /*简体*/
        'zh_TW' : '关于SteamAssistant(Steam小助手)1', /*繁体*/
        'en_GB' : '关于SteamAssistant(Steam小助手)2', /*英语*/
        'jp_JP' : '关于SteamAssistant(Steam小助手)3'  /*日语*/
        },

        'class:localTool_4_176' : { /*要翻译的字符串*/
        'auto_detected' : '程序信息:', /*自动检测*/
        'zh_CN' : '程序信息:', /*简体*/
        'zh_TW' : '程序信息:1', /*繁体*/
        'en_GB' : '程序信息:2', /*英语*/
        'jp_JP' : '程序信息:3'  /*日语*/
        },

        'class:localTool_4_177' : { /*要翻译的字符串*/
        'auto_detected' : '当前版本:v0.2.3.0', /*自动检测*/
        'zh_CN' : '当前版本:v0.2.3.0', /*简体*/
        'zh_TW' : '当前版本:v0.2.3.01', /*繁体*/
        'en_GB' : '当前版本:v0.2.3.02', /*英语*/
        'jp_JP' : '当前版本:v0.2.3.03'  /*日语*/
        },

        'class:localTool_4_178' : { /*要翻译的字符串*/
        'auto_detected' : '主程序框架更新时间:2020年4月19日', /*自动检测*/
        'zh_CN' : '主程序框架更新时间:2020年4月19日', /*简体*/
        'zh_TW' : '主程序框架更新时间:2020年4月19日1', /*繁体*/
        'en_GB' : '主程序框架更新时间:2020年4月19日2', /*英语*/
        'jp_JP' : '主程序框架更新时间:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_179' : { /*要翻译的字符串*/
        'auto_detected' : 'common模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'common模块:2020年4月19日', /*简体*/
        'zh_TW' : 'common模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'common模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'common模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_180' : { /*要翻译的字符串*/
        'auto_detected' : 'databaseConf模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'databaseConf模块:2020年4月19日', /*简体*/
        'zh_TW' : 'databaseConf模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'databaseConf模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'databaseConf模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_181' : { /*要翻译的字符串*/
        'auto_detected' : 'externalApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'externalApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'externalApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'externalApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'externalApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_182' : { /*要翻译的字符串*/
        'auto_detected' : 'steamApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'steamApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'steamApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'steamApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'steamApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_183' : { /*要翻译的字符串*/
        'auto_detected' : 'translateApis模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'translateApis模块:2020年4月19日', /*简体*/
        'zh_TW' : 'translateApis模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'translateApis模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'translateApis模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_184' : { /*要翻译的字符串*/
        'auto_detected' : 'Utility模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'Utility模块:2020年4月19日', /*简体*/
        'zh_TW' : 'Utility模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'Utility模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'Utility模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_185' : { /*要翻译的字符串*/
        'auto_detected' : 'UI模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'UI模块:2020年4月19日', /*简体*/
        'zh_TW' : 'UI模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'UI模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'UI模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_186' : { /*要翻译的字符串*/
        'auto_detected' : 'Event模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'Event模块:2020年4月19日', /*简体*/
        'zh_TW' : 'Event模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'Event模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'Event模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_187' : { /*要翻译的字符串*/
        'auto_detected' : 'CityList模块:2020年4月19日', /*自动检测*/
        'zh_CN' : 'CityList模块:2020年4月19日', /*简体*/
        'zh_TW' : 'CityList模块:2020年4月19日1', /*繁体*/
        'en_GB' : 'CityList模块:2020年4月19日2', /*英语*/
        'jp_JP' : 'CityList模块:2020年4月19日3'  /*日语*/
        },

        'class:localTool_4_188' : { /*要翻译的字符串*/
        'auto_detected' : '联系作者:', /*自动检测*/
        'zh_CN' : '联系作者:', /*简体*/
        'zh_TW' : '联系作者:1', /*繁体*/
        'en_GB' : '联系作者:2', /*英语*/
        'jp_JP' : '联系作者:3'  /*日语*/
        },

        'class:localTool_4_189' : { /*要翻译的字符串*/
        'auto_detected' : '反馈错误', /*自动检测*/
        'zh_CN' : '反馈错误', /*简体*/
        'zh_TW' : '反馈错误1', /*繁体*/
        'en_GB' : '反馈错误2', /*英语*/
        'jp_JP' : '反馈错误3'  /*日语*/
        },


}
};

var languagesList_mainUI_template = {
'defaultLanguage' : 'zh_CN', /* (optional) although must be defined if you don't want en_GB */
'showFlag': true,            /* (optional) show/hide the flag ��ʾ/�������� */
'showCountry': true,         /* (optional) show/hide the country name ��ʾ/���ع������� */
'showLanguage': true,        /* (optional) show/hide the country language ��ʾ/���ع������� */
'languages' : {              /* (optional) define **ADDITIONAL** custom languages ����**�����**�Զ������� */
    'italian' : {
        'country': 'Italy',
        'language' : 'Italian',
        'countryTranslated': 'Italia',
        'languageTranslated': 'Italiano',
        'flag' : {
            'url' : 'http://upload.wikimedia.org/wikipedia/commons/f/fb/Farm-Fresh_italy.png', /* url of flag image ��־ͼ��url */
            'class' : 'italian-flag' /* (optional) class to assign to the flag (e.g., for css styling) �����������־(���磬����css��ʽ) */
        }
    },
    'barletta-dialect' : {
        'country': 'Barletta',
        'language' : 'Barlettano',
        'countryTranslated': 'Barlett',
        'languageTranslated': "Barlett'n",
        'flag': {
            'url' : 'http://upload.wikimedia.org/wikipedia/commons/2/20/Flag_of_Barletta.png'
        }
    }
},
/* 
 * Translate your strings below ����������ַ���
 */
'strings' : {

}
};

var languagesList_winBaseFrame = {
'defaultLanguage' : 'zh_CN', /* (optional) although must be defined if you don't want en_GB */
'showFlag': true,            /* (optional) show/hide the flag ��ʾ/�������� */
'showCountry': true,         /* (optional) show/hide the country name ��ʾ/���ع������� */
'showLanguage': true,        /* (optional) show/hide the country language ��ʾ/���ع������� */
'languages' : {              /* (optional) define **ADDITIONAL** custom languages ����**�����**�Զ������� */
    'italian' : {
        'country': 'Italy',
        'language' : 'Italian',
        'countryTranslated': 'Italia',
        'languageTranslated': 'Italiano',
        'flag' : {
            'url' : 'http://upload.wikimedia.org/wikipedia/commons/f/fb/Farm-Fresh_italy.png', /* url of flag image ��־ͼ��url */
            'class' : 'italian-flag' /* (optional) class to assign to the flag (e.g., for css styling) �����������־(���磬����css��ʽ) */
        }
    },
    'barletta-dialect' : {
        'country': 'Barletta',
        'language' : 'Barlettano',
        'countryTranslated': 'Barlett',
        'languageTranslated': "Barlett'n",
        'flag': {
            'url' : 'http://upload.wikimedia.org/wikipedia/commons/2/20/Flag_of_Barletta.png'
        }
    }
},
/* 
 * Translate your strings below ����������ַ���
 */
'strings' : {

}
};

/**
 * uiStyle.js
 */

/**
 * steamNetData.js
 * @file 存储利用网络请求来获取steam相关数据的代码 [steam网络数据]
 */

function getBaseInfo(rank){
        var info3 = {
                language: "",
                name: "",
                url: "",
                steamID64: "",
                steamCustomUrl: "",
                accountId: "",
                confInfoObj: null,
                userInfoObj: null
        };
        
        var info2 = {
                language: "",
                name: "",
                url: "",
                steamID64: "",
                steamCustomUrl: "",
                accountId: "",
        };
        
        var info1 = {
                language: "",
                name: "",
                url: "",
                steamID64: "",
                accountId: "",
        };
        
        switch (rank){
                case 0:
                
                        if(typeof g_steamID != "undefined" && typeof g_steamID == "string" && g_steamID.test(g_steamId64RegExp))
                                return g_steamID;
                        else
                        {
                                var obj = document.getElementById('webui_config');
                                if(obj){
                                        userInfoStr = obj.getAttribute('data-userinfo');
                                        userInfoObj = JSON.parse(userInfoStr);
                                        var userInfoObj;
                                        return userInfoObj.steamid;
                                }
                        }
                        break;
                case 1:
                        
                        break;
                case 2:
                        
                        break;
                case 3:
                        
                        break;
                default:
                        break;
        }
        
        // if(g_rgProfileData && typeof g_rgProfileData == "object"){
        //      info.name = g_rgProfileData.personaname;
        //      info.url = g_rgProfileData.url;
        //      info.steamID64 = g_rgProfileData.steamid;
        // }
        // //https://steamcommunity.com/profiles/76561198373290430/edit
        // //<input class="dynInput" type="text" name="customURL" id="customURL" value="miku-39">
        
        // if(g_steamID && typeof g_steamID == "string" && g_steamID.test(g_steamId64RegExp))
        //      info.steamID64 = g_steamID;
        // else
        // {
        //      var obj = document.getElementById('webui_config');
        //      var confInfoStr,userInfoStr;
        //      var confInfoObj,userInfoObj;
        //      if(obj){
        //              confInfoStr = obj.getAttribute('data-config');
        //              userInfoStr = obj.getAttribute('data-userinfo');
        //              confInfoObj = JSON.parse(confInfoStr);
        //              userInfoObj = JSON.parse(userInfoStr);
        //              info.confInfoObj = confInfoObj;
        //              info.userInfoObj = userInfoObj;
        //              info.steamID64 = userInfoObj.steamid
        //              info.steamCustomUrl = "";
        //              info.accountId = userInfoObj.accountid;
        //              info.language = confInfoObj.language;
        //      }
                
        // }
        
        
}

/**
 * http://www.openjs.com/scripts/events/keyboard_shortcuts/
 * Version : 2.01.B
 * By Binny V A
 * License : BSD
 */
shortcut = {
        'all_shortcuts':{},//All the shortcuts are stored in this array
        'add': function(shortcut_combination,callback,opt) {
                //Provide a set of default options
                var default_options = {
                        'type':'keydown',
                        'disable_in_input':false,
                        'target':document,
                        'keycode':false
                }
                if(!opt) opt = default_options;
                else {
                        for(var dfo in default_options) {
                                if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
                        }
                }

                var ele = opt.target;
                if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
                var ths = this;
                shortcut_combination = shortcut_combination.toLowerCase();

                //The function to be called at keypress
                var func = function(e) {
                        e = e || window.event;
                        
                        if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
                                var element;
                                if(e.target) element=e.target;
                                else if(e.srcElement) element=e.srcElement;
                                if(element.nodeType==3) element=element.parentNode;

                                if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
                        }
        
                        //Find Which key is pressed
                        if (e.keyCode) code = e.keyCode;
                        else if (e.which) code = e.which;
                        var character = String.fromCharCode(code).toLowerCase();
                        
                        if(code == 188) character=","; //If the user presses , when the type is onkeydown
                        if(code == 190) character="."; //If the user presses , when the type is onkeydown

                        var keys = shortcut_combination.split("+");
                        //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
                        var kp = 0;
                        
                        //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
                        var shift_nums = {
                                "`":"~",
                                "1":"!",
                                "2":"@",
                                "3":"#",
                                "4":"$",
                                "5":"%",
                                "6":"^",
                                "7":"&",
                                "8":"*",
                                "9":"(",
                                "0":")",
                                "-":"_",
                                "=":"+",
                                ";":":",
                                "'":"\"",
                                ",":"<",
                                ".":">",
                                "/":"?",
                                "\\":"|"
                        }
                        //Special Keys - and their codes
                        var special_keys = {
                                'esc':27,
                                'escape':27,
                                'tab':9,
                                'space':32,
                                'return':13,
                                'enter':13,
                                'backspace':8,
        
                                'scrolllock':145,
                                'scroll_lock':145,
                                'scroll':145,
                                'capslock':20,
                                'caps_lock':20,
                                'caps':20,
                                'numlock':144,
                                'num_lock':144,
                                'num':144,
                                
                                'pause':19,
                                'break':19,
                                
                                'insert':45,
                                'home':36,
                                'delete':46,
                                'end':35,
                                
                                'pageup':33,
                                'page_up':33,
                                'pu':33,
        
                                'pagedown':34,
                                'page_down':34,
                                'pd':34,
        
                                'left':37,
                                'up':38,
                                'right':39,
                                'down':40,
        
                                'f1':112,
                                'f2':113,
                                'f3':114,
                                'f4':115,
                                'f5':116,
                                'f6':117,
                                'f7':118,
                                'f8':119,
                                'f9':120,
                                'f10':121,
                                'f11':122,
                                'f12':123,
                        }
                        
                        var modifiers = { 
                                shift: { wanted:false, pressed:false},
                                ctrl : { wanted:false, pressed:false},
                                alt  : { wanted:false, pressed:false},
                                meta : { wanted:false, pressed:false}   //Meta is Mac specific
                        };
                        
                        if(e.ctrlKey)   modifiers.ctrl.pressed = true;
                        if(e.shiftKey)  modifiers.shift.pressed = true;
                        if(e.altKey)    modifiers.alt.pressed = true;
                        if(e.metaKey)   modifiers.meta.pressed = true;
                        
                        for(var i=0; k=keys[i],i<keys.length; i++) {
                                //Modifiers
                                if(k == 'ctrl' || k == 'control') {
                                        kp++;
                                        modifiers.ctrl.wanted = true;

                                } else if(k == 'shift') {
                                        kp++;
                                        modifiers.shift.wanted = true;

                                } else if(k == 'alt') {
                                        kp++;
                                        modifiers.alt.wanted = true;
                                } else if(k == 'meta') {
                                        kp++;
                                        modifiers.meta.wanted = true;
                                } else if(k.length > 1) { //If it is a special key
                                        if(special_keys[k] == code) kp++;
                                        
                                } else if(opt['keycode']) {
                                        if(opt['keycode'] == code) kp++;

                                } else { //The special keys did not match
                                        if(character == k) kp++;
                                        else {
                                                if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
                                                        character = shift_nums[character]; 
                                                        if(character == k) kp++;
                                                }
                                        }
                                }
                        }
                        
                        if(kp == keys.length && 
                                                modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
                                                modifiers.shift.pressed == modifiers.shift.wanted &&
                                                modifiers.alt.pressed == modifiers.alt.wanted &&
                                                modifiers.meta.pressed == modifiers.meta.wanted) {
                                callback(e);
        
                                if(!opt['propagate']) { //Stop the event
                                        //e.cancelBubble is supported by IE - this will kill the bubbling process.
                                        e.cancelBubble = true;
                                        e.returnValue = false;
        
                                        //e.stopPropagation works in Firefox.
                                        if (e.stopPropagation) {
                                                e.stopPropagation();
                                                e.preventDefault();
                                        }
                                        return false;
                                }
                        }
                }
                this.all_shortcuts[shortcut_combination] = {
                        'callback':func, 
                        'target':ele, 
                        'event': opt['type']
                };
                //Attach the function with the event
                if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
                else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
                else ele['on'+opt['type']] = func;
        },

        //Remove the shortcut - just specify the shortcut and I will remove the binding
        'remove':function(shortcut_combination) {
                shortcut_combination = shortcut_combination.toLowerCase();
                var binding = this.all_shortcuts[shortcut_combination];
                delete(this.all_shortcuts[shortcut_combination])
                if(!binding) return;
                var type = binding['event'];
                var ele = binding['target'];
                var callback = binding['callback'];

                if(ele.detachEvent) ele.detachEvent('on'+type, callback);
                else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
                else ele['on'+type] = false;
        }
}

/**
 * websocket.js
 */

// //https://blog.csdn.net/CaptainJava/article/details/102853088
class Socket {
        constructor(arg) {
                this.webSocketObj = null;
                this.fRecvCallBack = null;
        }
        /**
         * @param {String} url 目标通讯url
         * @param {Function} recvCallBack 接收到数据后的回调函数(处理函数)
         * @return {Boolean} true: webSocket初始化成功,false: webSocket初始化失败
         */
        init(url,recvCallBack){
                var URL;
                if(url){
                        URL = url;
                }
                else{
                        URL = "ws://" + window.location.host + "/websocket/message";
                }
                
                if(recvCallBack){
                        this.fRecvCallBack = recvCallBack;
                }
                
                
                //判断当前浏览器是否支持WebSocket
                if ('WebSocket' in window) {
                        this.webSocketObj = new WebSocket(URL);
                } else {
                        alert('Dont support websocket!');
                        return false;
                }
                
                //连接发生错误的回调方法
                this.webSocketObj.onerror = function () {
                        console.log("webSocket error!");
                };
                
                //连接成功建立的回调方法
                this.webSocketObj.onopen = function () {
                        console.log("webSocket connected.");
                };
                
                //接收到消息的回调方法
                this.webSocketObj.onmessage = function (event) {
                        console.log("webSocket收到数据!");
                        
                        if(this.fRecvCallBack){
                                 this.fRecvCallBack();
                        }
                };
                
                //连接关闭的回调方法
                this.webSocketObj.onclose = function () {
                        console.log("webSocket close");
                };
                
                window.addEventListener("beforeunload", function(event) {
                        this.webSocketObj.close();
                });
                return true;
        }
        
        //关闭连接
        close() {
                return this.webSocketObj.close();
        }
        
        //发送消息
        send(message) {
                return this.webSocketObj.send(message);
        }
}

function recvHander(){
        var obj = JSON.parse(event.data);
        if(obj && "message" == obj.type){
                console.log(obj.data);
                // table.reload('test', {
                //      elem: '#test'
                //      ,data: JSON.parse(obj.data)
                // });
        }
}

function test_websocket(){
        var socket = new Socket();
        socket.init("",recvHander);
        socket.send("Hello!");
        socket.close();
}
/**
 * translateApis.js
 */


//-------------------------------------------------------------------------------------------------------------
// 翻译API
/*-------------------------------------------------*/
var b = function(a, b) {
        for (var d = 0; d < b.length - 2; d += 3) {
                var c = b.charAt(d + 2),
                        c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
                        c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
                a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
        }
        return a
}
var tk = function(a, TKK) {
        for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
                var c = a.charCodeAt(f);
                128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(
                        f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] =
                        c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
        }
        a = h;
        for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
        a = b(a, "+-3^+b+-f");
        a ^= Number(e[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return a.toString() + "." + (a ^ h)
}
/*-------------------------------------------------*/
var auto = "auto"; //自动检测
var zhc = "zh-CN"; //中文简体
var zht = "zh-TW"; //中文繁体
var en = "en"; //英语
var jp = "ja"; //日语

var waitStatus = true; //等待状态
var waitStatus_cn = true; //等待状态
var returnData;
var returnData_cn;
async function GoogleTranslateRequest(origLanguage, newLanguage, strText) {
        waitStatus = true;

        var _tkk = "439786.2762026697";
        var _tk = tk(strText, _tkk);
        //console.log("_tk:",_tk);

        //https://translate.google.cn/#view=home&op=translate&sl=auto&tl=zh-CN&text=12312
        //https://translate.google.com.hk/?hl=zh-CN&tab=TT#view=home&op=translate&sl=auto&tl=zh-CN&text=123123
        //https://translate.google.com/?hl=zh-CN#view=home&op=translate&sl=auto&tl=zh-CN&text=111
        //https://translate.google.com.tw/#view=home&op=translate&sl=auto&tl=ja&text=%E4%BD%A0%E5%A5%BD
        //谷歌翻译app抓包
        //第三方getpost请求代发送
        //https://translate.google.cn/translate_a/single?client=t

        //需要拼接的url序列
        var baseURL = "https://translate.google.cn/translate_a/single?";
        var baseURL1 = "https://translate.google.com/translate_a/single?";
        var client = "client=" + "webapp";
        var sl = "&sl=" + origLanguage; //待翻译的原始语言      //默认为auto,即自动检测语言
        var tl = "&tl=" + newLanguage; //需要翻译成什么语言    //默认为zh-CN,即默认翻译为中文
        var hl = "&hl=" + zhc;
        var dt1 = "&dt=at&";
        var dt2 = "dt=bd&";
        var dt3 = "dt=ex&";
        var dt4 = "dt=ld&";
        var dt5 = "dt=md&";
        var dt6 = "dt=qca&";
        var dt7 = "dt=rw&";
        var dt8 = "dt=rm&";
        var dt9 = "dt=ss&";
        var dt0 = "dt=t&";
        var dt = "dt=gt&"; //del
        var otf = "otf=2&"; //1
        var ssel = "ssel=0&";
        var tsel = "tsel=4&"; //0
        var xid = "xid=1782844&";
        var kc = "kc=1&"; //8 //2
        var Tk = "tk=" + _tk;
        var q = "&q=" + encodeURI(strText);

        var requestURL = baseURL + client + sl + tl + hl + dt1 + dt2 + dt3 + dt4 + dt5 + dt6 + dt7 + dt8 + dt9 + dt0 + dt +
                otf +
                ssel + tsel + xid + kc + Tk + q;

        //console.log("requestURL: ",requestURL);

        GM_xmlhttpRequest({
                method: 'GET',
                url: requestURL,
                headers: {
                        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
                        //'Accept': 'application/atom+xml,application/xml,text/xml',
                        //"Content-Type": "application/x-www-form-urlencoded",
                },
                onload: function(response) {
                        if (response.status === 200) {
                                console.log('请求成功!');
                                var JSON_jsObj = JSON_processing_parsing_JsObj(response.responseText);
                                //遍历[0][0]数组就可以取得翻译后的文本,原始数据,原始数据的拼音
                                //[2]是检查出的语言
                                //遍历[5]可以取得两种翻译,原始数据和原始数据的长度
                                //遍历[8]可以得到原始语言和翻译语言
                                //for (var i = 0; i < JSON_jsObj.length; i++) {
                                //      for (var j = 0; j < JSON_jsObj[i].length; j++) {
                                //              for (var k = 0; k < JSON_jsObj[i][j].length; k++) {
                                //                      
                                //              }
                                //      }
                                //}
                                var retData = "";
                                for (var j = 0; j < JSON_jsObj[0].length; j++) {
                                        if (JSON_jsObj[0][j][0] != null) {
                                                retData += JSON_jsObj[0][j][0]; //组合每一句翻译
                                        }
                                }
                                returnData = retData; //存储数据
                                //console.log('谷歌翻译:',retData);
                                waitStatus = false; //不等待

                                //console.log(response);
                                //console.log(response.responseText);
                                //if(response.responseText.indexOf('[[["') == 0) //是否是指定的数据格式
                                //{
                                //      var retData = response.responseText.slice(4,response.responseText.indexOf('","',4)); //提取翻译后的文本
                                //      returnData = retData; //存储数据
                                //      //console.log('谷歌翻译:',retData);
                                //      waitStatus = false; //不等待
                                //}
                        } else {
                                console.log('请求失败!');
                                //console.log(response);
                                //console.log(response.responseText);
                        }
                },
                onerror: function(err) {
                        console.log('请求错误!', err);
                }
        });

        while (waitStatus) //强制等待异步函数执行完毕后再执行
        {
                console.log("wait...");
                await sleep(100); //延迟0.1秒
        }
        return returnData;
        // jQuery.ajax({
        //      url: URL,
        //      type: "GET",
        //      dataType: "jsonp", //指定服务器返回的数据类型
        //      jsonp: "callback", //Jquery生成验证参数的名称
        //      processData: false,
        //      success: function (data) {
        //              //var result = JSON.stringify(data); //json对象转成字符串
        //              console.log("GET成功!",data);
        //      },
        //      error: function(XMLHttpRequest, textStatus, errorThrown) {
        //      alert(XMLHttpRequest.status);
        //      alert(XMLHttpRequest.readyState);
        //      alert(textStatus);
        //      }
        // });



        // jQuery.get(URL,function(response,status,xhr){
        //      if (response.success === false) {

        //              console.log("GET失败了!",response);
        //      } else {

        //              console.log("GET成功!",response);
        //      }
        // },"json");


        // jQuery.post(URL, {
        //      comment: newMgs,
        //      count: 6,
        //      sessionid: g_sessionID
        // }, function(response) {
        //      if (response.success === false) {
        //              console.log("留言失败了!");
        //      } else {
        //              console.log("成功发表评论于");
        //      }
        // }).fail(function() {
        //      console.log("无法发表评论于");
        // }).always(function() {
        //      console.log("当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.");
        // });
}



async function CNTranslateRequest(newLanguage, strText) { //简体转各类繁体,各类繁体转简体
        waitStatus_cn = true;

        var baseURL = "https://brushes8.com/zhong-wen-jian-ti-fan-ti-zhuan-huan";

        GM_xmlhttpRequest({
                method: 'POST',
                url: baseURL,
                data: "data=" + encodeURI(strText) +
                        "&dochineseconversion=" + "1" +
                        "&variant=" + newLanguage +
                        "&submit=" + encodeURI("开始转换 (Ctrl + Enter)"),
                headers: {
                        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
                        "Content-Type": "application/x-www-form-urlencoded", //非常重要
                        "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
                },
                onload: function(response) {
                        if (response.status === 200) {
                                console.log('请求成功!');
                                var findStr = '<label for="response">转换结果: </label><br /><textarea id="response" rows="15" cols="150">';
                                var retData = response.responseText.slice(response.responseText.lastIndexOf(findStr) + findStr.length);
                                returnData_cn = retData; //存储数据
                                //console.log('谷歌翻译:',retData);
                                waitStatus_cn = false; //不等待
                        } else {
                                console.log('请求失败!', response);
                                //console.log(response);
                                //console.log(response.responseText);
                        }
                },
                onerror: function(err) {
                        console.log('请求错误!', err);
                }
        });

        while (waitStatus_cn) //强制等待异步函数执行完毕后再执行
        {
                console.log("wait...");
                await sleep(100); //延迟0.1秒
        }
        return returnData_cn;
}


//---------------------------------
// DEEP翻译API
//---------------------------------

var default_request_pack = { //默认请求包
        "jsonrpc": "2.0",
        "method": "LMT_handle_jobs", //方法
        "params": { //参数
                "jobs": [ //工作
                        {
                                "kind": "default", //种类
                                "raw_en_sentence": "你好世界", //原始句子
                                "raw_en_context_before": [],  //之前的原始环境(上下文)
                                "raw_en_context_after": [],   //之后的原始环境(上下文)
                                "preferred_num_beams": 4, //首选数字
                                "quality": "fast", //质量
                        },
                ],
                "lang": { //语言
                        "user_preferred_langs": ["EN", "ZH"], //用户首选语言
                        "source_lang_user_selected": "auto", //源语言(用户选择)
                        "target_lang": "EN", //目标语言
                },
                "priority": -1, //优先级
                "commonJobParams": {}, //常见的工作参数
                "timestamp": 1591090077383, //时间戳
        },
        "id": 92910013,
};

var default_split_pack = { //默认分解包(句子拆分再请求)
        "jsonrpc": "2.0",
        "method": "LMT_split_into_sentences", //方法
        "params": { //参数
                "lang": { //语言
                        "lang_user_selected": "auto",        //用户选择语言
                        "user_preferred_langs": ["EN", "ZH"] //用户首选语言
                }
        },
        "id": 92910016
};

var default_split_request_pack = { //默认分解请求包
        "jsonrpc": "2.0",
        "method": "LMT_handle_jobs", //方法
        "params": { //参数
                "jobs": [ //工作
                                        {
                                                "kind": "default", //种类
                                                "raw_en_sentence": "没有人富有得可以不要别人的帮助,也没有人穷得不能在某方面给他人帮助。", //原始句子
                                                "raw_en_context_before": [],                                                       //之前的原始环境(上下文)
                                                "raw_en_context_after": ["凡真心尝试助人者,没有不帮到自己的。"],                      //之后的原始环境(上下文)
                                                "preferred_num_beams": 1 //首选数字
                                        }, 
                                        {
                                        "kind": "default", //种类
                                        "raw_en_sentence": "凡真心尝试助人者,没有不帮到自己的。",                                     //原始句子
                                        "raw_en_context_before": ["没有人富有得可以不要别人的帮助,也没有人穷得不能在某方面给他人帮助。"], //之前的原始环境(上下文)
                                        "raw_en_context_after": [],                                                                //之后的原始环境(上下文)
                                        "preferred_num_beams": 1 //首选数字
                                        },
                                ],
                "lang": { //语言
                        "user_preferred_langs": ["EN", "ZH"], //用户首选语言
                        "source_lang_computed": "ZH", //源语言(计算后的)
                        "target_lang": "EN" //目标语言
                },
                "priority": 1, //优先级
                "commonJobParams": {}, //常见的工作参数
                "timestamp": 1591091506769 //时间戳
        },
        "id": 92910017
};

var default_verification_pack = { //默认验证包
        "jsonrpc": "2.0",
        "method": "getClientState", //方法
        "params": { //参数
                "v": "20180814", //版本
                "clientVars": { //客户端值
                        "userCountry": "CN", //用户国家
                        "showAppPopup": true, //显示应用程序弹出
                        "uid": "a3eb6359-c34e-4f9f-b39d-f7dc71187afc", //用户唯一标识符
                        "testGroupId": 6243, //测试组Id
                        "testGroupIdIsNew": true, //测试组Id是新的
                        "useStatisticsApiV2": true, //使用统计Api V2
                },
        },
        "id": 92910010,
};



function deepTranslateRequest() {
        
}


/**
 * externalApis.js
 */

class intelligenceAI //智能AI模块
{
        constructor(name) { //public 构造方法
                this.arrCityCode;
                this.baseWeatherURL = "https://api.help.bj.cn/";
        }
        
        getWeather(strCityName){ //public 获取天气(城市代码字符串)
                let URL = this.baseWeatherURL + "apis/weather2d/?id=" + strCityName; //生成URL
                $.ajax({
                        type: "Get", //请求方式
                        //async: false,
                        //contentType: "application/json;charset=UTF-8",//请求的媒体类型
                        url: URL, //请求地址
                        // headers: {
                        //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
                        //      //'Accept': 'application/atom+xml,application/xml,text/xml',
                        //      //"Content-Type": "application/x-www-form-urlencoded",
                        // },
                        //data: JSON.stringify(list),                           //数据,json字符串
                        success: function(result) { //请求成功
                                //let Data = JSON_processing_parsing_JsObj(result);
                                console.log("Data",result);
                        },
                        error: function(e) { //请求失败,包含具体的错误信息
                                console.log("请求失败了!", e.status);
                                console.log("请求失败了!", e.responseText);
                        }
                });
        }
}

//-------------------------------------------------------------------------------------------------------------
class externalApis{
        constructor(){
                this.urls = [
                        {
                                name: "mz-moe.cn", //名称
                                describe: "https://mz-moe.cn/?p=23", //描述
                                trait: "Support files only,https,406张图片(2019.8.12)", //特征
                                request: "get", //请求方式
                                mainUrl: "https://api.mz-moe.cn/", //基础url
                                library: [
                                        {
                                                name: "随机动漫图片api", //https://api.dongmanxingkong.com/suijitupian.html
                                                Url: "img.php", //功能url(部分)
                                                Url1: "", //功能url1(部分)
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        },
                                ]
                        },{
                                name: "樱花", //名称
                                describe: "http://www.dmoe.cc/", //描述
                                trait: "http->https,1000+(2020-03-12)", //特征
                                request: "get", //请求方式
                                mainUrl: "http://www.dmoe.cc/", //基础url
                                library: [
                                        {
                                                name: "随机二次元图片API", //https://api.dongmanxingkong.com/suijitupian.html
                                                Url: "random.php", //功能url(部分)
                                                Url1: "", //功能url1(部分)
                                                parameter: "?return=json", //参数
                                                parameter1: "type=json" //参数1(另外一种类型)
                                        },
                                ]
                        },{
                                name: "动漫星空", //名称
                                describe: "https://api.dongmanxingkong.com/", //描述
                                trait: "https,8千万+张4K精美图片,文字二维码生成", //特征
                                request: "get", //请求方式
                                mainUrl: "https://api.dongmanxingkong.com/", //基础url
                                library: [
                                        {
                                                name: "随机图片API", //https://api.dongmanxingkong.com/suijitupian.html
                                                Url: ["suijitupian/acg/1080p/","suijitupian/acg/2k/","suijitupian/acg/4k/"], //功能url(部分)
                                                Url1: "index.php", //功能url1(部分)
                                                parameter: "?return=json", //参数
                                                parameter1: "type=json" //参数1(另外一种类型)
                                        },{
                                                name: "二维码API", //https://api.dongmanxingkong.com/qr.html
                                                Url: "qr/?text=", //功能url(部分)
                                                Url1: "&size=150", //功能url1(部分)
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        }
                                ]
                        },{
                                name: "LRY_API(聚合漫画、影视、小说等接口)", //名称
                                describe: "http://api.pingcc.cn/", //描述
                                trait: "warn redirection,http,综合搜索,漫画,影视,小说", //特征
                                request: "get", //请求方式
                                mainUrl: "http://api.pingcc.cn/", //基础url
                                library: [
                                        {
                                                name: "综合搜索", //https://api.dongmanxingkong.com/suijitupian.html
                                                Url: "?name=", //功能url(部分)
                                                Url1: "", //功能url1(部分)
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        },{
                                                name: "漫画API接口", //https://api.dongmanxingkong.com/qr.html
                                                Url: "?mhname=", //功能url(部分)
                                                Url1: ["?mhurl1=","?mhurl2="], //功能url1(部分) //通过mhurl2获取到的是漫画图片,按顺序排列
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        },{
                                                name: "影视API接口", //https://api.dongmanxingkong.com/qr.html
                                                Url: "?ysname=", //功能url(部分)
                                                Url1: "?ysurl=", //功能url1(部分)
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        },{
                                                name: "小说API接口", //https://api.dongmanxingkong.com/qr.html
                                                Url: "?xsname=", //功能url(部分)
                                                Url1: ["?xsurl1=","?xsurl2="], //功能url1(部分) //通过xsurl2获取到的是小说内容
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        }
                                ]
                        },{
                                name: "宅言API", //名称
                                describe: "https://www.kancloud.cn/acman/zhaiyanapi/31183", //描述
                                trait: "https,动漫台词,角色资料,番组信息接口", //特征
                                request: "get", //请求方式
                                mainUrl: "https://zhaiyan.2cys.com/api", //基础url
                                library: [
                                        {
                                                name: "获取随机库中台词", //https://www.kancloud.cn/acman/zhaiyanapi/367018
                                                Url: "/taici/rands", //功能url(部分)
                                                Url1: "", //功能url1(部分)
                                                parameter: "?type=json", //参数
                                                parameter1: "json(默认)/xml/text" //参数1(另外一种类型)
                                        },{
                                                name: "根据库ID获取台词", //https://www.kancloud.cn/acman/zhaiyanapi/367019
                                                Url: "/taici/id", //功能url(部分)
                                                Url1: "", //功能url1(部分) //通过mhurl2获取到的是漫画图片,按顺序排列
                                                parameter: "?id=", //参数
                                                parameter1: "?type=json" //参数1(另外一种类型)
                                        },{
                                                name: "根据作品名获取数据", //https://www.kancloud.cn/acman/zhaiyanapi/367152
                                                Url: "/taici/names", //功能url(部分)
                                                Url1: "", //功能url1(部分)
                                                parameter: "?name=", //参数
                                                parameter1: ["?rand=0","?type=json"] //参数1(其他参数)
                                        },{
                                                name: "动漫角色资料接口", //https://www.kancloud.cn/acman/zhaiyanapi/48115
                                                Url: "", //功能url(部分)
                                                Url1: "", //功能url1(部分) //通过xsurl2获取到的是小说内容
                                                parameter: "", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        },{
                                                name: "获取随机库中番组", //https://www.kancloud.cn/acman/zhaiyanapi/368479
                                                Url: "/bangumi/rands", //功能url(部分)
                                                Url1: "", //功能url1(部分) //通过xsurl2获取到的是小说内容
                                                parameter: "?type=json", //参数
                                                parameter1: "" //参数1(另外一种类型)
                                        }
                                ]
                        }
                        
                ];
        }
        getUrlInfo(){
                console.log(this.urls);
        }
        async getDataByApiList(platformsID,apiId,type,name){ //参数: 平台id(区别不同平台提供的api),要调用的api的id(区分是要调用的是什么api),类型(调用api可能需要提供的参数),名称(调用api可能需要提供的参数)
                switch (platformsID){
                        case 0:
                                var obj = this.urls[0]; //mz-moe.cn
                                var lib = obj.library[0]; //随机动漫图片api
                                var url = obj.mainUrl + lib.Url;
                                console.log("url",url);
                                var jsData = await getResourceByURL(url,true); //随机动漫图片api
                                console.log("数据获取成果",jsData);
                                return jsData;
                                break;
                        case 1:
                                var obj = this.urls[1]; //樱花
                                var lib = obj.library[0]; //随机二次元图片API
                                console.log("url",url);
                                
                                var url = obj.mainUrl + lib.Url;
                                if(type == "json")
                                        url += lib.parameter;
                                var jsData = await getResourceByURL(url,true); //随机二次元图片API
                                console.log("数据获取成果",jsData);
                                return jsData;
                                break;
                        case 2:
                                var obj = this.urls[2]; //动漫星空
                                var lib = obj.library[0];  //随机图片API
                                var lib1 = obj.library[1]; //二维码API
                                var url = obj.mainUrl + lib.Url[0] + lib.Url1;
                                if(type == "json")
                                        url += lib.parameter;
                                var url1 = obj.mainUrl + lib1.Url + name + lib1.Url1;
                                console.log("url",url,"url1",url1);
                                var jsData;
                                if(apiId == 0){
                                        jsData = await getResourceByURL(url,true); //随机图片API
                                }else if(apiId == 1){
                                        jsData = await getResourceByURL(url1,true); //二维码API
                                }
                                console.log("数据获取成果",jsData);
                                return jsData;
                                break;
                        case 3:
                                var obj = this.urls[3]; //LRY_API(聚合漫画、影视、小说等接口)
                                var lib = obj.library[0];  //综合搜索
                                var lib1 = obj.library[1]; //漫画API接口
                                var lib2 = obj.library[2]; //影视API接口
                                var lib3 = obj.library[3]; //小说API接口
                                var url = obj.mainUrl + lib.Url  + name;
                                var url1 = obj.mainUrl + lib1.Url + name;
                                var url2 = obj.mainUrl + lib2.Url + name;
                                var url3 = obj.mainUrl + lib3.Url + name;
                                console.log("url",url,"url1",url1,"url2",url2,"url3",url3);
                                var jsData;
                                if(apiId == 0){
                                        jsData = await getResourceByURL(url,true); //综合搜索
                                }else if(apiId == 1){
                                        jsData = await getResourceByURL(url1,true); //漫画API接口
                                }else if(apiId == 2){
                                        jsData = await getResourceByURL(url2,true); //影视API接口
                                }else if(apiId == 3){
                                        jsData = await getResourceByURL(url3,true); //小说API接口
                                }
                                console.log("数据获取成果",jsData);
                                return jsData;
                                break;
                        case 4:
                                var obj = this.urls[4]; //宅言API
                                var lib = obj.library[0];  //获取随机库中台词
                                var lib1 = obj.library[1]; //根据库ID获取台词
                                var lib2 = obj.library[2]; //根据作品名获取数据
                                var lib3 = obj.library[3]; //动漫角色资料接口
                                var lib4 = obj.library[4]; //获取随机库中番组
                                var url = obj.mainUrl + lib.Url + lib.parameter;
                                var url1 = obj.mainUrl + lib1.Url + lib1.parameter + name + lib1.parameter1;
                                var url2 = obj.mainUrl + lib2.Url + lib2.parameter + name + lib2.parameter1[0] +  + lib2.parameter1[1];
                                var url3 = obj.mainUrl + lib3.Url + lib3.parameter;
                                var url4 = obj.mainUrl + lib4.Url + lib4.parameter + lib4.parameter;
                                console.log("url",url,"url1",url1,"url2",url2,"url3",url3,"url4",url4);
                                var jsData;
                                if(apiId == 0){
                                        jsData = await getResourceByURL(url,true); //获取随机库中台词
                                }else if(apiId == 1){
                                        jsData = await getResourceByURL(url1,true); //根据库ID获取台词
                                }else if(apiId == 2){
                                        jsData = await getResourceByURL(url2,true); //根据作品名获取数据
                                }else if(apiId == 3){
                                        jsData = await getResourceByURL(url3,true); //动漫角色资料接口
                                }else if(apiId == 4){
                                        jsData = await getResourceByURL(url4,true); //获取随机库中番组
                                }
                                console.log("数据获取成果",jsData);
                                return jsData;
                                break;
                        default:
                                break;
                }//switch
        }
        
}

//-------------------------------------------------------------------------------------------------------------
class SteamDB
{
        constructor(){
                this.mainURL = "https://steamdb.info/";
                this.freeGameURL = "upcoming/free/";
        }
        async initUI(gameInfo){ //初始化UI
                // jQuery(".friends_header_ctn").after(
                //      '<div id="GameFreeInfo">\
                //                      <div id="add1_head">喜加一</div>\
                //                      <div id="add1_body" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/">\
                //                      </div>\
                //                      <div id="limitedTime_head">限时免费</div>\
                //                      <div id="limitedTime_body" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/">\
                //                      </div>\
                //                      <div id="prediction_head">预告</div>\
                //                      <div id="prediction_body" style="display:inline-block;width:100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; /*超出部分用...代替*/">\
                //                      </div>\
                //      </div>'
                // );
                console.log("initUI success!");
        }
        async GameFreeInfoHelper(){ //游戏免费信息助手
                console.log("GameFreeInfoHelper call...");
                initUI(data); //初始化UI
                
                console.log("GameFreeInfoHelper success!");
        }
        async getFreeGameInfo(){ //获取游戏喜加一信息(SteamDB)
                var url = this.mainURL + this.freeGameURL;
                var jsData = await getResourceByURL(url,true); //
                console.log("数据获取成果",jsData);
        }
        async getGameDiscountsInfoBysteamDB(){ //获取游戏折扣信息(SteamDB,HB,F站...)
                const url_fanatical = "https://www.fanatical.com/";
                const url_humblebundle = "https://www.humblebundle.com/";
                const url_indiegala = "http://indiegala.com/";
                const url_steam = "https://store.steampowered.com/search/?filter=topsellers&specials=1";
        }
}

//-------------------------------------------------------------------------------------------------------------

//1.请求 http://www.sonkwo.hk/store/search?keyword=GameName,手动解析数据
//-------------------------------------------------------------------------------------------------------------
//Fanatical (慢速警告)
//1.请求 https://www.fanatical.com/zh-hans/search?search=GameName,手动解析数据
//-------------------------------------------------------------------------------------------------------------
//humblebundle (慢速警告)
//1.请求 https://www.humblebundle.com/store/search?sort=bestselling&search=GameName,手动解析数据
//-------------------------------------------------------------------------------------------------------------
//1.请求 https://www.ccyyshop.com/bundles,手动解析数据
//-------------------------------------------------------------------------------------------------------------
//第三方网站抓取,比如  https://isthereanydeal.com/ajax/game/info?plain=nierautomata

/**
 * steamApis.js
 */

//-------------------------------------------------------------------------------------------------------------
// steam api
function setRemarks(profileID, remarkName) {
        var URL = "https://steamcommunity.com/profiles/" + profileID + "/ajaxsetnickname/";
        jQuery.post(URL, {
                nickname: remarkName,
                sessionid: g_sessionID
        }, function(response) {
                if (response.success === false) {
                        console.log("设置备注失败了!");
                } else {
                        console.log("成功设置备注于");
                }
        }).fail(function() {
                console.log("无法设置备注于");
        }).always(function() {
                //console.log("当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.");
        });
}

class ConfirmDialog {

    static open(strTitle, strDescription, strOKButton, strCancelButton, strSecondaryActionButton) {
        return ExtensionLayer.runInPageContext((a,b,c,d,e) => {
            let prompt = ShowConfirmDialog(a,b,c,d,e);

            return new Promise((resolve, reject) => {
                prompt.done(result => {
                    resolve(result);
                }).fail(() => {
                    resolve("CANCEL");
                });
            });
        },
        [
            strTitle,
            strDescription,
            strOKButton,
            strCancelButton,
            strSecondaryActionButton
        ],
        true);
    }
}
// ConfirmDialog.open("TEST");


//-------------------------------------------------------------------------------------------------------------
function getUserLocation(profileID) //获取用户位置()
{
        var name = document.getElementsByClassName("header_real_name ellipsis")[0].getElementsByTagName("bdi")[0].innerText;
        var str = document.getElementsByClassName("header_real_name ellipsis")[0].innerText;
        var index = str.indexOf(name);
        var strLocation = "";
        var arrLocation = [];
        if( index != -1)
        {
                strLocation = str.slice(index+name.length); //裁剪,获取地址位置字符串
                strLocation = strLocation.replace(/\s+/g,""); //去除所有的空格
                if(strLocation == "")
                {
                        return null; //没有获取到数据
                }
                arrLocation = strLocation.split(',');
        }
        console.log("arrLocation",arrLocation);
        for (let i = arrLocation.length-1; i >= 0; i--) {
                console.log(arrLocation[i]);
                return arrLocation;
        }
}
// var ret = getUserLocation();
// if(ret != null)
// {
//      if(ret>1)
//      {
//              getCityChinsesNameByEnglishName(ret[0]);
//      }
// }

function getUserCommentData(profileID) //获取用户的评论的大数据(用户64位id)
{
        var date = new Date();
        
        jQuery.post("//steamcommunity.com/comment/Profile/post/" + profileID + "/-1/", {
                comment: newMgs,
                count: 6,
                sessionid: g_sessionID
        }, function(response) {
                if (response.success === false) {
                        jQuery("#log_body")[0].innerHTML +=
                                "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                "\">" + '[' + (i + 1) + '/' + total + '] 留言失败了! ' + profileID + '  ' + name +
                                '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                } else {
                        jQuery("#log_body")[0].innerHTML +=
                                '[' + (i + 1) + '/' + total + '] ' +
                                "成功发表评论于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                profileID + '  ' + name + "</a>" +
                                "<span> → </span><a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                profileID + "\">" + newMgs + "</a><br>";
                }
        }).fail(function() {
                jQuery("#log_body")[0].innerHTML +=
                        '[' + (i + 1) + '/' + total + '] ' +
                        "<span style='color:#DA2626;'>无法发表评论于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                        profileID + "\">" +
                        profileID + '  ' + name + "</a></span><br>";
        }).always(function() {
                jQuery("#log_head").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
        });
}

function setSaveUserCommentData(profileID,str) //设置已保存的用户评论数据
{
        
}

function getSaveUserCommentData(profileID) //获取已保存的用户评论数据
{
        
}


// var jqobj;

// function traverseAllFriend() //遍历所有好友
// {
//      function concurrentPoll() {
//              this.tasks = []; // 任务队列  
//              this.max = 100; // 最大并发数  
//              setTimeout(() => { // 函数主体执行完后立即执行  
//                      this.run()
//              }, 0);
//      }
//      concurrentPoll.prototype.addTask = function(task) { // 原型添加任务方法  
//              this.tasks.push(task)
//      }
//      concurrentPoll.prototype.run = function() { // 原型任务运行方法  
//              if (this.tasks.length == 0) { // 判断是否还有任务  
//                      return
//              }
//              var min = Math.min(this.tasks.length, this.max); // 取任务个数与最大并发数最小值  
//              for (var i = 0; i < min; i++) {
//                      this.max--; // 执行最大并发递减  
//                      var task = this.tasks.shift(); // 从数组头部取任务  
//                      task().then((res) => { // 重:此时可理解为,当for循环执行完毕后异步请求执行回调,此时max变为0  
//                              console.log(res)
//                      }).catch((err) => {
//                              console.log(err)
//                      }).finally(() => { // 重:当所有请求完成并返回结果后,执行finally回调,此回调将按照for循环依次执行,此时max为0.  
//                              this.max++; // 超过最大并发10以后的任务将按照任务顺序依次执行。此处可理解为递归操作。  
//                              this.run();
//                      })
//              }
//      }
//      var poll = new concurrentPoll(); // 实例
//      //并发多个相同任务

//      jqobj = jQuery(".selectable[data-steamid]"); //选择所有好友
//      //for (let i = 0; i < jqobj.length; i++) {
//      for (let i = 0; i < 1; i++) {
//              let cur = jqobj.get(i);
//              let profileID = cur.getAttribute("data-steamid");
//              poll.addTask(function() {
//                      return new Promise(
//                              function(resolve, reject) {
//                                      // 一段耗时的异步操作
//                                      getProfilesInfo(resolve, reject, i, profileID);
//                              })
//              })
//      }
//      console.log("完毕!");

//      // for (let i=0; i<23; i++) { // 数据模拟  
//      //   poll.addTask(function () {  
//      //   return new Promise(  
//      //   function (resolve, reject) {  
//      //   // 一段耗时的异步操作
//      //   getProfilesInfo(resolve, reject,i,"76561198818854009");
//      //   })})
//      //   }


//      // poll.addTask(async function () {  

//      //      //let arr = [fun(0),fun(1),fun(2)];
//      //      let arr = [];
//      //      for (var i=0; i<13; i++) { // 数据模拟
//      //              //arr.push(fun(i));
//      //              arr.push(new Promise(function (resolve, reject){getProfilesInfo(i,"76561198818854009");}));
//      //      }
//      //      let res = await Promise.all(arr);
//      //  return res;
//      //  // new Promise(
//      //  //  function (resolve, reject) {  
//      //  //  // 一段耗时的异步操作
//      //  //  getProfilesInfo("76561198818854009");
//      //  //  resolve('成功') // 数据处理完成  
//      //  //  // reject('失败') // 数据处理出错
//      //  //  })

//      //  })

// }

// var waitStatus1 = []; //等待状态
// var returnData1 = []; //返回数据
// async function getgetProfilesID(i, profileID) {
//      let URL = "https://steamcommunity.com/profiles/" + profileID + "/";

//      if (waitStatus1.length == 0)
//              waitStatus1.length = jqobj.length; //设置数组长度

//      if (returnData1.length == 0)
//              returnData1.length = jqobj.length; //设置数组长度

//      //waitStatus1.push([profileID,true]); //开始等待
//      waitStatus1[i] = [profileID, true]; //存储数据到对应的位置(受网络影响,响应顺序可能会不同)
//      //console.log("getgetProfilesID() i:",i,"waitStatus1:",waitStatus1);

//      jQuery.ajax({
//              type: "Get", //请求方式
//              //async: false,
//              //contentType: "application/json;charset=UTF-8",//请求的媒体类型
//              url: URL, //请求地址
//              // headers: {
//              //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
//              //      //'Accept': 'application/atom+xml,application/xml,text/xml',
//              //      //"Content-Type": "application/x-www-form-urlencoded",
//              // },
//              //data: JSON.stringify(list),                           //数据,json字符串
//              success: function(result) { //请求成功
//                      let Data = result;
//                      //console.log("请求成功了!",Data);
//                      let nIstart = Data.indexOf('StartTradeOffer(');
//                      let nIend = Data.indexOf(');', nIstart);
//                      let AccountID = Data.slice(nIstart + 'StartTradeOffer('.length + 1, nIend - 1);
//                      nIstart = Data.indexOf('"steamid":"');
//                      nIend = Data.indexOf('",', nIstart);
//                      let profileID = Data.slice(nIstart + '"steamid":"'.length, nIend);
//                      console.log("getgetProfilesID() i:", i, "AccountID:", AccountID, "profileID:", profileID);

//                      for (let i = 0; i < waitStatus1.length; i++) {
//                              if (waitStatus1[i][0] == profileID) //是否是同一个用户
//                              {
//                                      if (waitStatus1[i][1] == false) //这个用户是否已经获取过了(测试多个相同用户信息的获取)
//                                              continue;
//                                      waitStatus1[i][1] = false;
//                                      //returnData1.push(AccountID); //存储数据
//                                      returnData1[i] = AccountID; //存储数据到对应的位置(受网络影响,响应顺序可能会不同)
//                                      //console.log("getgetProfilesID() 成功存储数据 AccountID:",AccountID);
//                                      return;
//                                      //console.log("waitStatus1[i][1] break",i,waitStatus1[i][1]);
//                              }
//                      }
//                      console.log("getgetProfilesID 数据错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//                      console.log("waitStatus1:", waitStatus1, 'returnData1:', returnData1);
//                      console.log('profileID:', profileID, 'AccountID:', AccountID);
//                      return;
//                      //console.log("DBG!",nIstart,nIend);
//              },
//              error: function(e) { //请求失败,包含具体的错误信息
//                      console.log("请求失败了!", e.status);
//                      console.log("请求失败了!", e.responseText);
//              }
//      });
//      //console.log("getgetProfilesID() i:",i,"waitStatus1:",waitStatus1);
//      while (waitStatus1[i][1]) //强制等待异步函数执行完毕后再执行
//      {
//              //console.log("wait...",i,waitStatus1[i][1]);
//              await sleep(50); //延迟0.1秒
//      }
//      //console.log("waitStatus1[i][1]:",waitStatus1[i][1],"returnData1[i]:",returnData1[i]);
//      return returnData1[i];

//      // jQuery.get(URL, {
//      //      // "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
//      //      // // "Content-Type": "application/x-www-form-urlencoded", //非常重要
//      //      // "Accept-Encoding": "gzip, deflate, br",
//      //      // "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
//      //      // "Cache-Control": "max-age=0",
//      //      // "Connection": "keep-alive",
//      //      // "Cookie": "sessionid=6f84a0f48cddb56ad66394b6; steamCountry=HK%7Cda7daa2682f7a361e594f8dad55fe9df; timezoneOffset=28800,0",
//      //      // "Host": "steamcommunity.com",
//      //      // "Upgrade-Insecure-Requests": "1",
//      //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
//      // }, function(response) {
//      //      if (response.status === 200) {
//      //              console.log("获取失败!",response.responseText);
//      //      } else {
//      //              console.log("获取成功!",response.responseText);
//      //      }
//      // }).fail(function() {
//      //      console.log("无法获取!");
//      // }).always(function() {
//      //      //console.log("当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.");
//      // });


//      // GM_xmlhttpRequest({
//      //      method: 'GET',
//      //      url: URL,
//      //      headers: {
//      //              'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
//      //              //'Accept': 'application/atom+xml,application/xml,text/xml',
//      //              //"Content-Type": "application/x-www-form-urlencoded",
//      //      },
//      //      onload: function(response) {
//      //              if (response.status === 200) {
//      //                      console.log('请求成功!',response.responseText);
//      //                      //var JSON_jsObj = JSON_processing_parsing_JsObj(response.responseText);
//      //                      //遍历[0][0]数组就可以取得翻译后的文本,原始数据,原始数据的拼音
//      //                      //[2]是检查出的语言
//      //                      //遍历[5]可以取得两种翻译,原始数据和原始数据的长度
//      //                      //遍历[8]可以得到原始语言和翻译语言
//      //                      //for (var i = 0; i < JSON_jsObj.length; i++) {
//      //                      //      for (var j = 0; j < JSON_jsObj[i].length; j++) {
//      //                      //              for (var k = 0; k < JSON_jsObj[i][j].length; k++) {
//      //                      //                      
//      //                      //              }
//      //                      //      }
//      //                      //}
//      //                      //var retData = "";
//      //                      //for (var j = 0; j < JSON_jsObj[0].length; j++) {
//      //                      //      if (JSON_jsObj[0][j][0] != null) {
//      //                      //              retData += JSON_jsObj[0][j][0]; //组合每一句翻译
//      //                      //      }
//      //                      //}
//      //                      returnData = retData; //存储数据
//      //                      //console.log('谷歌翻译:',retData);
//      //                      waitStatus = false; //不等待

//      //                      //console.log(response);
//      //                      //console.log(response.responseText);
//      //                      //if(response.responseText.indexOf('[[["') == 0) //是否是指定的数据格式
//      //                      //{
//      //                      //      var retData = response.responseText.slice(4,response.responseText.indexOf('","',4)); //提取翻译后的文本
//      //                      //      returnData = retData; //存储数据
//      //                      //      //console.log('谷歌翻译:',retData);
//      //                      //      waitStatus = false; //不等待
//      //                      //}
//      //              } else {
//      //                      console.log('请求失败!');
//      //                      //console.log(response);
//      //                      //console.log(response.responseText);
//      //              }
//      //      },
//      //      onerror: function(err) {
//      //              console.log('请求错误!', err);
//      //      }
//      // });
// }

// var waitStatus = []; //等待状态
// var returnData = []; //返回数据
// async function getProfilesInfo(resolve, reject, i, profileID) {
//      let joinDate, friendDate;
//      let str;

//      if (waitStatus.length == 0)
//              waitStatus.length = jqobj.length; //设置数组长度

//      if (returnData.length == 0)
//              returnData.length = jqobj.length; //设置数组长度

//      jQuery.ajaxSetup({
//              cache: false
//      }); //close AJAX cache

//      ////获取一个数组真实长度
//      //let arrRealLength = undefined;
//      //for (let i = 0; i < waitStatus.length; i++) {
//      //      if(waitStatus[i] == undefined)
//      //      {
//      //              arrRealLength = i;
//      //              break;
//      //      }
//      //}
//      //if(arrRealLength == undefined) //是否为数组最大长度
//      //      arrRealLength = waitStatus.length;


//      //waitStatus.push([profileID,true]); //开始等待
//      waitStatus[i] = [profileID, true]; //存储数据到对应的位置(受网络影响,响应顺序可能会不同)

//      await getgetProfilesID(i, profileID); //

//      let AccountID = returnData1[i];
//      //console.log("getProfilesInfo(): AccountID:",AccountID,'i:',i,"returnData[i]:",returnData[i]);
//      //var AccountID = "242752742";//242752742//858588281

//      let URL = "https://steamcommunity.com/tradeoffer/new/?partner=" + AccountID;

//      jQuery.ajax({
//              type: "Get", //请求方式
//              //async: false,
//              //contentType: "application/json;charset=UTF-8",//请求的媒体类型
//              url: URL, //请求地址
//              // headers: {
//              //      'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
//              //      //'Accept': 'application/atom+xml,application/xml,text/xml',
//              //      //"Content-Type": "application/x-www-form-urlencoded",
//              // },
//              //data: JSON.stringify(list),                           //数据,json字符串
//              success: function(result) { //请求成功
//                      let Data = result;
//                      if (Data.indexOf("抱歉,发生了某种错误:") != -1) //不能正常进行交易,获取不到数据就跳过
//                      {
//                              waitStatus[i][1] = false;
//                              returnData[i] = null; //不返回数据
//                              return;
//                      }
//                      //console.log("请求成功了!",Data);
//                      let nIstart = Data.indexOf('trade_partner_member_since trade_partner_info_text');
//                      if (nIstart == -1) {
//                              nIstart = Data.indexOf('trade_partner_header responsive_trade_offersection top');
//                              let nindex = Data.indexOf('trade_partner_info_text">', nIstart);
//                              let nIend = Data.indexOf('</div>', nindex);
//                              friendDate = Data.slice(nindex + 'trade_partner_info_text">'.length, nIend); //加入Steam的日期
//                              friendDate = friendDate.replace(/^\s+|\s+$/g, ""); //去除左右两边的空格
//                              joinDate = "查询不到";
//                              nIstart = Data.lastIndexOf('g_ulTradePartnerSteamID');
//                              nIindex = Data.indexOf('\'', nIstart);
//                              nIend = Data.indexOf('\'', nIindex + 1);
//                              profileID = Data.slice(nIindex + 1, nIend);
//                              //console.log("profileID",profileID);
//                      } else {
//                              let nIindex = Data.indexOf('>', nIstart);
//                              let nIend = Data.indexOf('</div>', nIindex);
//                              joinDate = Data.slice(nIindex + 1, nIend); //加入Steam的日期
//                              //console.log("joinDate",joinDate);
//                              nIstart = Data.indexOf('trade_partner_info_text');
//                              nIindex = Data.indexOf('>', nIstart);
//                              nIend = Data.indexOf('</div>', nIindex);
//                              friendDate = Data.slice(nIindex + 1, nIend - 1); //成为好友的日期
//                              friendDate = friendDate.replace(/^\s+|\s+$/g, ""); //去除左右两边的空格
//                              //console.log("friendDate",friendDate);
//                              nIstart = Data.lastIndexOf('g_ulTradePartnerSteamID');
//                              nIindex = Data.indexOf('\'', nIstart);
//                              nIend = Data.indexOf('\'', nIindex + 1);
//                              profileID = Data.slice(nIindex + 1, nIend);
//                              //console.log("profileID",profileID);
//                      }

//                      for (let i = 0; i < waitStatus.length; i++) {
//                              if (waitStatus[i][0] == profileID) //是否是同一个用户
//                              {
//                                      if (waitStatus[i][1] == false) //这个用户是否已经获取过了(测试多个相同用户信息的获取)
//                                              continue;
//                                      waitStatus[i][1] = false;
//                                      //returnData.push([joinDate,friendDate]); //存储数据
//                                      returnData[i] = [joinDate, friendDate]; //存储数据到对应的位置(受网络影响,响应顺序可能会不同)
//                                      //console.log("waitStatus[i][1] break",i,waitStatus[i][1]);
//                                      return;
//                              }

//                      }
//                      console.log("getProfilesInfo 数据错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//                      console.log("waitStatus:", waitStatus, "returnData:", returnData);
//                      console.log("profileID", profileID);
//                      //console.log("Data",Data);
//                      return;
//                      //console.log("DBG!",nIstart,nIend);
//              },
//              error: function(e) { //请求失败,包含具体的错误信息
//                      console.log("请求失败了!", e.status);
//                      console.log("请求失败了!", e.responseText);
//              }
//      });

//      while (waitStatus[i][1]) //强制等待异步函数执行完毕后再执行
//      {
//              //console.log("wait...",i,waitStatus[i][1]);
//              await sleep(50); //延迟0.1秒
//      }
//      if (returnData[i] == null) //检查数据有效性
//      {
//              console.log("str [" + (i + 1) + "] 不能获取到数据,已跳过: https://steamcommunity.com/profiles/" + profileID);
//              return;
//      }
//      console.log("waitStatus[i][1]:", waitStatus[i][1], "waitStatus[i]:", waitStatus[i]);

//      str = "加入日期: " + returnData[i][0] + " 成为好友日期: " + returnData[i][1];
//      console.log("str [" + (i + 1) + ']', str);
//      resolve('成功') // 数据处理完成
//      // reject('失败') // 数据处理出错
//      return str;
// }

// // let arr = [];
// // for (var i=0; i<1; i++) { // 数据模拟
// //   //arr.push(fun(i));
// //   arr.push(new Promise(function (resolve, reject){getProfilesInfo(1,2,i,"76561198818854009");}));
// // }
// // let res = await Promise.all(arr);

// // var jqobj = jQuery(".selectable[data-steamid]"); //选择所有好友
// // let arr = [];
// // for (var i=0; i<20; i++) { // 数据模拟
// // let cur = jqobj.get(i);
// // let profileID = cur.getAttribute("data-steamid");
// //   //arr.push(fun(i));
// //   //getProfilesInfo(1, 2,i,profileID);
// //   arr.push(new Promise(function (resolve, reject){getProfilesInfo(1, 2,i,profileID);}));
// // }
// // let res = await Promise.all(arr);

//------------------------------------------------------------------------------------------------------------------------------------------
//miku-39

class friendActivity{
        constructor(profileID_Url) { /*构造方法(用户id或者自定义链接)*/
                this.steamCommunityUrl = "https://steamcommunity.com/";
                this.customUrl = "id/";
                this.profileIDUrl = "profiles/";
                this.friendActivitUrl = "/home";
                this.friendActivitOptionUrl = "/blotteredit";
                
                this.startElementsId = "blotter_content";
                this.endElementsId = "blotter_throbber";
                this.jsName = "g_BlotterNextLoadURL";
                this.friendActivityElementsBlockId = "blotter_block";
                
                this.isYun = false;
                
                //游戏评测
                this.UserEvaluationUp = "UserReviewVoteUp"; //用户评价 是 的函数名
                this.UserEvaluationDown = "UserReviewVoteDown"; //用户评价 否 的函数名
                this.UserEvaluationHappy = "UserReviewVoteTag"; //用户评价 欢乐 的函数名
                //上传载图、收藏载图
                //指南添加到收藏夹、发表指南
                //艺术作品添加到收藏夹、发布艺术作品
                //添加视频、收藏视频
                this.captureUp = "VoteUp"; //用户评价 赞 的函数名
                this.captureDown = "VoteDown"; //用户评价 否 的函数名
                this.captureShare = "ShowSharePublishedFilePopup"; //用户操作 分享 的函数名
                //购买游戏或者DLC
                this.bus = "VoteUpCommentThread"; //用户评价 赞 的函数名 "VoteUpCommentThread('UserReceivedNewGame"
                //发布状态或者游戏状态
                this.status = "VoteUpCommentThread"; //用户评价 赞 的函数名 "VoteUpCommentThread('UserStatusPublished"
                
                this.groupNotificationUp = "RateAnnouncement"; //用户评价 赞
                this.groupNotificationDown = "RateAnnouncement"; //用户评价 否
                
                this.g_bRecoredUpvote = false;
                
                //制作一件物品时 ghs 强烈推荐 发布艺术作品之类的
                //在某人的截图中? 发布艺术作品之类的,状态等
                //jQuery(".ugc.has_adult_content img, .ugc.has_adult_content div.imgWallItem")
                
                //var obj = jQuery(".ugc.has_adult_content img, .ugc.has_adult_content div.imgWallItem");
                //for (let i = 0; i < obj.length; i++) {
                //      obj[i].style.filter = "none";
                //      obj[i].style.border = "2px red solid";
                //      obj[i].parentNode.parentNode.parentNode.parentNode.style.border = "2px red solid";
                //}
                
                if(isIntNum(profileID_Url)){
                        this.profileID_Url = profileID_Url.toString(); //用户id
                        this.mode = 0;
                        this.Url = this.steamCommunityUrl + this.profileIDUrl + this.profileID_Url;
                }
                else{
                        this.profileID_Url = profileID_Url; //自定义链接
                        this.mode = 1;
                        this.Url = this.steamCommunityUrl + this.customUrl + this.profileID_Url;
                }
        }
        async init(profileID_Url){
                
                if(isIntNum(profileID_Url)){
                        this.profileID_Url = profileID_Url.toString(); //用户id
                        this.mode = 0;
                        this.Url = this.steamCommunityUrl + this.profileIDUrl + this.profileID_Url;
                }
                else{
                        this.profileID_Url = profileID_Url; //自定义链接
                        this.mode = 1;
                        this.Url = this.steamCommunityUrl + this.customUrl + this.profileID_Url;
                }
        }
        
        LogUpvote(){
                if ( !this.g_bRecoredUpvote )
                {
                        this.g_bRecoredUpvote = true;
                        $J.post( 'https://steamcommunity.com/actions/LogFriendActivityUpvote', {sessionID: g_sessionID} );
                }
        }
        
        VoteUp(item_id){ //有些东西点不了赞
                        var options = {
                                method: 'post',
                                postBody: 'id=' + item_id + '&sessionid=' + g_sessionID,
                                onComplete: (function(item_id){
                                        return function(transport)
                                        {
                                                var response = JSON.parse(transport.responseText);
                                                switch (response.success){
                                                        case 1:
                                                        //debugger
                                                        //console.log("VoteUp() 已经点过赞了!",transport.responseText);
                                                                break;
                                                        case 10:
                                                        //debugger
                                                        //console.log("VoteUp() 点赞完成??",transport.responseText);
                                                                break;
                                                        case 15:
                                                        //debugger
                                                        console.log("VoteUp() 点赞错误!!!",transport.responseText);
                                                                break;
                                                        default: //{"success":20} //{"success":16,"items":[2082593203],"results":{"2082593203":16}}
                                                        debugger
                                                        console.log("VoteUp() ????????????????????????????????????????????????????????????",transport.responseText);
                                                                break;
                                                }
                                        }
                                }(item_id))
                        };
                        
                        new Ajax.Request(
                                'https://steamcommunity.com/sharedfiles/voteup',
                                options
                        );
                        this.LogUpvote();
        }
        
        //home页面 InitializeCommentThread
        
        //rgCommentData['pagesize']
        //var CCommentThread = Class.create
        //initialize: function( type, name, rgCommentData, url, nQuoteBoxHeight )
        
        //function InitializeCommentThread( type, name, rgCommentData, url, nQuoteBoxHeight )
        //this.m_cPageSize
        VoteUpCommentThread(commentthreadid){ //这个函数有不确定性
                        let iprefix = commentthreadid.indexOf('_');
                        var prefixUrl = commentthreadid.slice(0,iprefix);
                        let iowner = commentthreadid.indexOf('_',iprefix+1);
                        var ownerUrl = commentthreadid.slice(iprefix+1,iowner);
                        var featureUrl = commentthreadid.slice(iowner+1);
                        
                        this.LogUpvote();
                        
                        var GetActionURL  = function(action){
                                var url = "https://steamcommunity.com/comment/" + prefixUrl + "/" + action + "/";
                                url += ownerUrl + '/';
                                url += featureUrl + '/';
                                return url;
                        }
                        
                        var countValue = 3;
                        
                        switch (prefixUrl){
                                case 'UserReceivedNewGame': //购买游戏或者DLC
                                        countValue = 3;
                                        break;
                                case 'PublishedFile_Public': //没有测试过是否有这个
                                        debugger
                                        countValue = 3;
                                        break;
                                case 'UserStatusPublished': //发布状态或者游戏状态
                                        countValue = 6;
                                        break;
                                default:
                                        debugger
                                        console.log("VoteUpCommentThread() ??????????????????????????????????????????????????");
                                        break;
                        }
                        
                        var params = {
                        vote: 1,
                        count: countValue,
                        sessionid: g_sessionID,
                        feature2: -1,
                        newestfirstpagination: true,
                        };
                        
                        new Ajax.Request( GetActionURL( 'voteup' ), {
                                method: 'post',
                                parameters: params,
                                onSuccess: ()=>{
                                        //console.log("VoteUpCommentThread() 点赞成功!",countValue,commentthreadid)
                                        },
                                onFailure:  ()=>{
                                        console.log("VoteUpCommentThread() 点赞失败! 与网络通信时出错。请稍后再试。",countValue,commentthreadid)
                                        },
                                onComplete: ()=>{
                                        //console.log("VoteUpCommentThread() 点赞完毕! 用时",countValue,commentthreadid)
                                        }
                        } );
                }
                
                UserReviewVoteUp(id)
                {
                        //debugger
                        this.UserReview_Rate( id, true, 'https://steamcommunity.com',
                                function( rgResults,recommendationID ) {
                                        //console.log("UserReviewVoteUp() 点赞成功~",rgResults,recommendationID);
                                }
                        );
                }
                
                UserReview_Rate(recommendationID, bRateUp, baseURL, callback)
                {
                        $J.post( baseURL + '/userreviews/rate/' + recommendationID,{
                                                'rateup' : bRateUp,
                                                'sessionid' : g_sessionID
                        }).done( function( results,recommendationID ) {
                                if ( results.success == 1 )
                                {
                                        callback( results );
                                }
                                else if ( results.success == 21 )
                                {
                                        ShowAlertDialog( '错误', '您必须先登录以执行该操作。' );
                                }
                                else if ( results.success == 15 )
                                {
                                        ShowAlertDialog( '错误', '您的帐户没有足够的权限执行此操作。' );
                                }
                                else if ( results.success == 24 )
                                {
                                        ShowAlertDialog( '错误', '您的帐户不符合使用该功能的要求。<a class="whiteLink" href="https://help.steampowered.com/zh-cn/wizard/HelpWithLimitedAccount" target="_blank" rel="noreferrer">访问 Steam 客服</a>了解更多信息。' );
                                }
                                else
                                {
                                        ShowAlertDialog( '错误', '在尝试处理您的请求的过程中出现了错误:' + results.success );
                                }
                        } );
                }
                
        RateAnnouncement(strArguments){
                //解析参数并填充
                var rateURL, gid, bVoteUp, clanID;
                strArguments = strArguments.replace(/'/g, ""); //去除字符串中出现的所有单引号
                strArguments = strArguments.replace(/\s+/g,""); //去除字符串所有的空格
                var arr = strArguments.split(','); //划分为参数
                rateURL = arr[0];
                gid = arr[1];
                if(arr[2]=="true")
                        bVoteUp = true;
                else bVoteUp = false;
                clanID = parseInt(arr[3]);
                
                rateURL = rateURL + gid;
                $J.post( rateURL, {
                                'voteup' : bVoteUp,
                                'clanid' : clanID,
                                'sessionid' : g_sessionID
                        }
                ).done( function( json ) {
                        //console.log("RateAnnouncement() 点赞成功.",json);
                } )
                .fail( function( jqxhr ) {
                        var responseJSON = jqxhr.responseText.evalJSON();
                        switch ( responseJSON.success )
                        {
                                case 21:
                                        ShowAlertDialog( '错误', '您必须登录才能执行该操作。' );
                                        break;
                                case 24:
                                        ShowAlertDialog( '错误',
                                                '您的帐户不符合使用该功能的要求。<a class="whiteLink" href="https://help.steampowered.com/zh-cn/wizard/HelpWithLimitedAccount" target="_blank" rel="noreferrer">访问 Steam 客服</a>了解更多信息。'
                                        );
                                        break;
                                case 15:
                                        ShowAlertDialog( '错误', '您没有执行该操作的权限。' );
                                        break;
                                default:
                                        ShowAlertDialog( '错误', '在处理您的请求时遇到错误:' + responseJSON.success );
                                        break;
                        }
                } );
                return false;
        }
        
        //g_BlotterNextLoadURL
        //StartLoadingBlotter( g_BlotterNextLoadURL );
        async Run(){ //开始点赞
                var documentData;
                var arrData;
                var nextLoadURL;
                
                var url = this.Url + this.friendActivitUrl;
                this.isYun = true;
                console.log("开始点赞...",url);
                var i = 0;
                while(this.isYun)
                {
                        i++;
                        if(i==1){
                                documentData = await getResourceByURL(url,true);
                                //console.log("url:",this.Url,"data:",documentData);
                                var index = documentData.indexOf(this.startElementsId); //开始区域 blotter_content
                                var endindex = documentData.lastIndexOf(this.endElementsId); //结束区域 blotter_throbber
                                var Data = documentData.slice(index,endindex);
                                var jsindex = documentData.indexOf(this.jsName,endindex);
                                var jsendindex = documentData.indexOf(';',jsindex);
                                var jsData = documentData.slice(jsindex,jsendindex);
                                nextLoadURL = jsData.slice(jsData.indexOf('\'')+1,jsData.lastIndexOf('\''));
                                //console.log("Data:",Data,"nextLoadURL:",nextLoadURL);
                                arrData = Data.split(this.friendActivityElementsBlockId);
                        }
                        //else if ( !response ){
                        //      // print out any error for now 现在打印出任何错误
                        //      console.log("错误:",transport.responseText);
                        //      //$('blotter_content').insert( { bottom: transport.responseText } );
                        //}
                        else
                        {
                                documentData = await getResourceByURL(url,false); //获取原始数据
                                //console.log("url:",this.Url,"data:",documentData);
                                //console.log(documentData);
                                this.g_bRecoredUpvote = false;
                                
                                // load more data
                                //var response = documentData.responseJSON;
                                if(documentData.responseText == undefined){ //针对请求失败的情况(自实现)
                                        console.log("请求失败,错误码: 0x1 潜在的网络故障 url:"+ url);
                                        debugger
                                        var index = url.lastIndexOf('=');
                                        nextLoadURL = url.slice(0,index); //提取最前面的链接
                                        var num = parseInt(url.slice(index+1));s
                                        nextLoadURL += (num+250);
                                        url = nextLoadURL;
                                        continue;
                                }
                                console.log("documentData.responseText",documentData.responseText);
                                var response = JSON.parse(documentData.responseText);
                                if ( response && response.success == true && response.blotter_html ){
                                        // append the new day, having it fade in quickly 补充新的一天,让它迅速消失
                                        
                                        // Scan each blotter response for an event ID we've seen before, so we can prune them out 扫描每个吸纸器响应以获取我们之前见过的事件ID,以便我们将其删节
                                        var html = response.blotter_html;
                                        arrData = html.split(this.friendActivityElementsBlockId);
                                        
                                        //var newDiv = new Element ( 'div' );
                                        //newDiv.update( html );
                                        //newDiv.setOpacity(0);
                                        //$('blotter_content').appendChild( newDiv );
                                        
                                        //Blotter_RecordAppImpressions();
                                        //ApplyAdultContentPreferences();
                                        
                                        //new Effect.Appear( newDiv, { duration: .75 }  );
                                        
                                        //g_BlotterNextLoadURL = response.next_request;
                                        nextLoadURL = response.next_request;
                                        //debugger
                                        //Blotter_InfiniteScrollingCheckForMoreContent();
                                        //Blotter_AddHighlightSliders();
                                }
                                else { //针对请求失败的情况(自实现)
                                        console.log("请求失败,错误码: 0x2 请求错误 url:"+ url);
                                        debugger
                                        var index = url.lastIndexOf('=');
                                        nextLoadURL = url.slice(0,index); //提取最前面的链接
                                        var num = parseInt(url.slice(index+1));s
                                        nextLoadURL += (num+250);
                                        url = nextLoadURL;
                                        continue;
                                }
                        }
                        // debugger
                        for (let i = 0; i < arrData.length; i++) {
                                //console.log(arrData[i]);
                                
                                var k = arrData[i].lastIndexOf(this.bus); //VoteUpCommentThread('UserReceivedNewGame
                                if(k>0)
                                {
                                        var startk = arrData[i].indexOf('(',k);
                                        var endk = arrData[i].indexOf(')',startk);
                                        var code = arrData[i].slice(startk+1,endk);
                                        code = code.replace(/'/g, ""); //去除字符串中出现的所有单引号
                                        code = code.replace(/^\s*|\s*$/g,""); //去除字符串内两头的空格
                                        //console.log("code",code);
                                        //debugger
                                        this.VoteUpCommentThread(code); //点赞
                                        await sleep(50); //延迟0.01秒
                                        continue;
                                }
                                
                                // var l = arrData[i].lastIndexOf(this.status); //VoteUpCommentThread('UserStatusPublished
                                // if(l>0)
                                // {
                                //      var startl = arrData[i].indexOf('(',l);
                                //      var endl = arrData[i].indexOf(')',startl);
                                //      var code = arrData[i].slice(startl+1,endl);
                                //      code = code.replace(/'/g, ""); //去除字符串中出现的所有单引号
                                //      code = code.replace(/^\s*|\s*$/g,""); //去除字符串内两头的空格
                                //      console.log("code",code);
                                //      debugger
                                //      this.VoteUpCommentThread(code); //点赞
                                //      await sleep(50); //延迟0.01秒
                                //      continue;
                                // }
                                
                                var o = arrData[i].lastIndexOf(this.UserEvaluationUp); //UserReviewVoteUp
                                if(o>0)
                                {
                                        var starto = arrData[i].indexOf('(',o);
                                        var endo = arrData[i].indexOf(')',starto);
                                        var code = arrData[i].slice(starto+1,endo);
                                        code = code.replace(/'/g, ""); //去除字符串中出现的所有单引号
                                        code = code.replace(/^\s*|\s*$/g,""); //去除字符串内两头的空格
                                        //debugger
                                        ////console.log("code",code);
                                        this.UserReviewVoteUp(code); //点赞
                                        await sleep(50); //延迟0.01秒
                                        continue;
                                }
                                
                                var j = arrData[i].indexOf(this.captureUp); //VoteUp
                                if(j>0)
                                {
                                        var startj = arrData[i].indexOf('(',j);
                                        var endj = arrData[i].indexOf(')',startj);
                                        var code = arrData[i].slice(startj+1,endj);
                                        //console.log("code",code);
                                        //debugger
                                        if(code.indexOf(',') == -1) //如果不是组点赞则继续点赞,否则继续往后面执行
                                        {
                                                this.VoteUp(parseInt(code)); //点赞
                                                await sleep(50); //延迟0.01秒
                                                continue;
                                        }
                                }
                                
                                var getCode = (m)=>{
                                        var startm = arrData[i].indexOf('(',m);
                                        var endm = arrData[i].indexOf(')',startm);
                                        var code = arrData[i].slice(startm+1,endm);
                                        ////console.log("code",code);
                                        
                                        var iId = arrData[i].indexOf('id',endm);
                                        var startId = arrData[i].indexOf('"',iId);
                                        var endId = arrData[i].indexOf('"',startId+1);
                                        var idValue = arrData[i].slice(startId+1,endId);
                                        //console.log("idValue",idValue);
                                        if(idValue.indexOf('Up') != -1){
                                                
                                                return [true,code];
                                        }
                                        else if(idValue.indexOf('Down') != -1){
                                                return [false,code];
                                        }
                                        else{
                                                console.log("组点赞出错!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                        }
                                }
                                
                                var m = arrData[i].indexOf(this.groupNotificationUp); //RateAnnouncement
                                if(m>0)
                                {
                                        //查找设置
                                        var ret = getCode(m);
                                        //debugger
                                        if(ret[0]==true){
                                                this.RateAnnouncement(ret[1]); //点赞
                                                await sleep(50); //延迟0.01秒
                                        }
                                        else{
                                                this.RateAnnouncement(ret[1]); //踩
                                                await sleep(50); //延迟0.01秒
                                        }
                                        continue;
                                }
                                
                        }
                        //debugger
                        url = nextLoadURL;
                        //console.log(url,"点赞完毕! 加载下一个url:", nextLoadURL);
                        var index = url.indexOf("?start=")+1;
                        var endindex = url.indexOf("&",index);
                        if(endindex == -1)
                                endindex = url.length;
                        var time = url.slice(index + "?start".length,endindex);
                        time = parseInt(time);
                        var date = new Date(time*1000);
                        var year = date.getFullYear();
                        var mon = date.getMonth()+1;
                        var day = date.getDate();
                        var hours = date.getHours();
                        var minu = date.getMinutes();
                        var sec = date.getSeconds();
                        //if(mon<10) mon = "0"+mon;
                        //if(day<10) day = "0"+day;
                        //if(hours<10) hours = "0"+hours;
                        //if(minu<10) minu = "0"+minu;
                        //if(sec<10) sec = "0"+sec;
                        var str = year+'-'+mon+'-'+day+' '+hours+':'+minu+':'+sec; //year+"年"+mon+"月"+day +"日"+hours +"时"+minu +"分"+sec+"秒" //date.toLocaleString()
                        console.log(url,"点赞完毕! 下一次点赞的内容时间是:", str + " startoffset:",url.slice(url.lastIndexOf("startoffset=") + "startoffset=".length));
                } //while
                var time = url.slice(url.indexOf("=")+1);
                time = parseInt(time);
                var date = new Date(time*1000);
                var year = date.getFullYear();
                var mon = date.getMonth()+1;
                var day = date.getDate();
                var hours = date.getHours();
                var minu = date.getMinutes();
                var sec = date.getSeconds();
                var str = year+'-'+mon+'-'+day+' '+hours+':'+minu+':'+sec;
                
                console.log("点赞完毕! 已将"+ str +"这个时间线之后的动态全部点赞完毕!~");
        }
        Stop(){
                console.log("开始停止点赞...");
                this.isYun = false;
        }
        
        async setfriendActivityOption(){
                var url = this.Url + this.friendActivitOptionUrl;
                jQuery.post(url, {
                        setting: 1,
                        sessionid: g_sessionID,
                        "subscription_option[friendadded]": 1,
                        "subscriptions[friendadded]": 1,
                        "subscription_option[achievementunlocked]": 1,
                        "subscriptions[achievementunlocked]": 1,
                        "subscription_option[receivednewgame]": 1,
                        "subscriptions[receivednewgame]": 1,
                        "subscription_option[joinedgroup]": 1,
                        "subscriptions[joinedgroup]": 1,
                        "subscription_option[createsgroup]": 1,
                        "subscriptions[createsgroup]": 1,
                        "subscription_option[addedgametowishlist]": 1,
                        "subscriptions[addedgametowishlist]": 1,
                        "subscription_option[recommendedgame]": 1,
                        "subscriptions[recommendedgame]": 1,
                        "subscription_option[screenshotpublished]": 1,
                        "subscriptions[screenshotpublished]": 1,
                        "subscription_option[videopublished]": 1,
                        "subscriptions[videopublished]": 1,
                        "subscription_option[filefavorited]": 1,
                        "subscriptions[filefavorited]": 1,
                        "subscription_option[postedannouncement]": 1,
                        "subscriptions[postedannouncement]": 1,
                        "subscription_option[scheduledevent]": 1,
                        "subscriptions[scheduledevent]": 1,
                        "subscription_option[selectednewpotw]": 1,
                        "subscriptions[selectednewpotw]": 1,
                        "subscription_option[promotednewadmin]": 1,
                        "subscriptions[promotednewadmin]": 1,
                        "subscription_option[receivesgroupcomment]": 1,
                        "subscriptions[receivesgroupcomment]": 1,
                        "subscription_option[greenlightannouncement]": 1,
                        "subscriptions[greenlightannouncement]": 1,
                        "subscription_option[workshopannouncement]": 1,
                        "subscriptions[workshopannouncement]": 1,
                        "subscription_option[curatorrecommendations]": 1,
                        "subscriptions[curatorrecommendations]": 1,
                        "subscription_option[followingpublishedugc]": 1,
                        "subscriptions[followingpublishedugc]": 1,
                        "subscription_option[taggedinscreenshot]": 1,
                        "subscriptions[taggedinscreenshot]": 1
                }, function(response) {
                        if (response.success === false) {
                                jQuery("#log_body1")[0].innerHTML +=
                                        "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                        "\">" + '[' + (i + 1) + '/' + total + '] 设置备注失败了! ' + profileID + '  ' + name +
                                        '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                        } else {
                                jQuery("#log_body1")[0].innerHTML +=
                                        '[' + (i + 1) + '/' + total + '] ' +
                                        "成功设置备注于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                        profileID + '  ' + name + "</a>" +
                                        "<a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                        profileID + "\">" + "</a><br>";
                        }
                }).fail(function() {
                        jQuery("#log_body1")[0].innerHTML +=
                                '<span style="color:#DA2626;">[' + (i + 1) + '/' + total + '] ' +
                                "无法设置备注于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                profileID + "\">" +
                                profileID + '  ' + name + "</a></span><br>";
                }).always(function() {
                        jQuery("#log_head1").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                });
                
        }
        
        setGetActivityInfo(){ //设置动态的内容为指定的数据
                
        }
        setGetActivityAll(){ //设置动态内容为默认(全部)
                
        }
        setFriendActivityInfo(){ //设置指定好友动态为跳过,只给指定好友点赞等等
                
        }
}

class SteamData{
        constructor(arg) {
                this.steamCommunityUrl = "https://steamcommunity.com/";
                this.customUrl = "id/";
                this.profileIDUrl = "profiles/";
                this.commentUrl = "/allcomments"; //GET //https://steamcommunity.com/id/miku-39/allcomments
                this.commentNextUrl = "https://steamcommunity.com/comment/Profile/render/"; //POST //https://steamcommunity.com/comment/Profile/render/76561198373290430/-1/
                // start: 0
                // totalcount: 11596
                // count: 50
                // sessionid: 006825ba8313e097671eb93e
                // feature2: -1
                
                // {
                //      start: 50,
                //      totalcount: 11594,
                //      count: 50,
                //      sessionid: 006825ba8313e097671eb93e,
                //      feature2: -1
                // }
                
                // start: 100
                // totalcount: 11595
                // count: 50
                // sessionid: 006825ba8313e097671eb93e
                // feature2: -1
                
                this.statusUrl = "https://steamcommunity.com/actions/GetNotificationCounts"; //GET
                this.userInfoUrl = "https://steamcommunity.com/miniprofile/"; //GET //https://steamcommunity.com/miniprofile/859694761
        }
        getCommentData(){
                var url = this.steamCommunityUrl + this.customUrl + 'miku-39' + this.commentUrl;
                var currentCommentNum = 0; //当前评论数
                var newCurrentCommentNum = 0; //在获取数据时,又出现了新的当前评论数
                
                for (let i = 0; i < currentCommentNum; i++) {
                        _getCommentPageData(url,i);
                        //解析数据
                        
                        //存储数据
                        
                }
                
        }
        _getCommentPageData(url,nPage){
                var data;
                //获取数据
                
                //解析数据
                
                //完成后
                _updateData();
                return data;
        }
        _updateData(){
                //更新当前评论数
                newCurrentCommentNum = 0;
        }
}

/**
 * steamExtend.js
 * @file 存储对当前steam的功能增强代码 [steam功能拓展]
 */

function addRemoveFriendRemind(){ /*添加删除好友提醒*/
        let obj = document.getElementsByClassName("manage_action btnv6_lightblue_blue btn_medium");
        for (let i = 0; i < obj.length; i++) {
                if(obj[i].onclick == null)
                        continue;
                let funcText = obj[i].onclick.toString();
                if(funcText.indexOf("ExecFriendAction('remove', 'friends/all')") != -1) //是否是移除好友按钮
                {
                        obj[i].onclick = ()=>{
                                ShowConfirmDialog('您点击了移除好友按钮', '是否要移除选择的好友?','移除好友').done( function(){
                                        console.log("移除好友");
                                        ExecFriendAction('remove', 'friends/all');
                                        }).fail( function(){
                                        console.log("取消移除好友");
                                        });
                        }
                        return 1;
                }
        }
        return 0;
}
//-----------------------------------------------------------------------------------
function getLoginStatus(){
        if(g_steamID == false)
                return false; //没有登陆
        else if(typeof g_steamID == "string" && g_steamID.indexOf('7656119')==0)
                return true; //成功登陆
}
//-------------------------------------------------------------------------------------------------------------
function addFriendMultipleSelectionMode(){ //添加好友多选模式
        var key_mode = 0;
        var index_arr = [2];
        index_arr[0] = undefined;
        index_arr[1] = undefined;


        var obj = document.getElementById("search_text_box");
        obj && obj.blur(); //搜索框取消获得的焦点
        
        jQuery("#search_results .selectable").click(function(e) {
                var id = jQuery(this).attr("id"); //id
                var index = jQuery(this).index(); //下标
                //console.log(id,index);//得到点击的a标签的title值
                
                switch (key_mode){
                        case 0:
                                index_arr[0] = index-2;
                                //console.log(index_arr[0]);
                                break;
                        case 1: //~ 反选
                                break;
                        case 2: //alt 重新选择
                                break;
                        case 3: //shift 好友快速多选模式
                                if(index_arr[0] == undefined)
                                        index_arr[0] = index-2;
                                else if(index_arr[0] == index-2){ //同一个元素
                                        
                                }
                                else{
                                        //取消选择文字
                                        document.selection && document.selection.empty && ( document.selection.empty(), 1)
                                        || window.getSelection && window.getSelection().removeAllRanges();
                                        //遍历并选择之间的内容
                                        index_arr[1] = index-2;
                                        var obj = jQuery("#search_results>.selectable");
                                        var arr = obj.slice( index_arr[0],index_arr[1]);
                                        arr.addClass("selected");
                                        for (let i = 0; i < arr.length; i++) {
                                                arr[i].getElementsByClassName("select_friend_checkbox")[0].checked = true; //选中
                                        }
                                        UpdateSelection(); //官方,更新计数
                                        console.log("好友快速多选已完成!",index_arr[0],index_arr[1]);
                                        //index_arr[0] = undefined;
                                        //index_arr[1] = undefined;
                                }
                                break;
                        default:
                                break;
                }
        }); //选择的朋友总数
        
        document.addEventListener("keydown", function(e){ //~ 反选
                //console.log(e.keyCode);
                //console.log(e.shiftKey,e.altKey);
                if(e.keyCode == 192){
                        key_mode = 1;
                        //console.log("~ down");
                        
                        var obj = jQuery("#search_results>.selectable");
                        obj.toggleClass("selected");
                        for (let i = 0; i < obj.length; i++) {
                                var bool = obj[i].getElementsByClassName("select_friend_checkbox")[0].checked;
                                obj[i].getElementsByClassName("select_friend_checkbox")[0].checked = !bool; //全部取消选中
                        }
                        UpdateSelection(); //官方,更新计数
                        console.log("~ 反选");
                        return false;
                }
        }, false);
        //-----------------------------------------------------------------------------------
        shortcut.add("Esc",function() { //alt 重新选择
                key_mode = 2;
                //console.log("Alt");
                
                var obj = jQuery("#search_results>.selectable");
                obj.removeClass("selected");
                for (let i = 0; i < obj.length; i++) {
                        obj[i].getElementsByClassName("select_friend_checkbox")[0].checked = false; //全部取消选中
                }
                UpdateSelection(); //官方,更新计数
                console.log("Esc 重新选择");
        }, {
                'type':'keydown', //事件
                'propagate':false, //是否支持冒泡
                'disable_in_input':false, //是否在输入框内有效
                'target':document, //作用范围
        });
        //-----------------------------------------------------------------------------------
        shortcut.add("Shift",function() { //shift 好友快速多选模式
                key_mode = 3;
                //console.log("Shift");
        }, {
                'type':'keydown', //事件
                'propagate':false, //是否支持冒泡
                'disable_in_input':false, //是否在输入框内有效
                'target':document, //作用范围
        });
        //-----------------------------------------------------------------------------------
        document.addEventListener("keyup", function(e){
                //console.log(e.keyCode);
                //console.log(e.shiftKey,e.altKey);
                if(e.keyCode == 192){
                        key_mode = 0;
                        //console.log("~ UP");
                        return false;
                }
                else if(e.keyCode == 27){
                        key_mode = 0;
                        //console.log("Esc UP");
                        return false;
                }
                else if(e.keyCode == 16){
                        key_mode = 0;
                        //console.log("Shift UP");
                        return false;
                }
        }, false);
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
function getSelectedText() {
    if (window.getSelection) {
      return window.getSelection().toString();
    } else if (document.selection) {
      return document.selection.createRange().text;
    }
    return '';
}

function selectText(element) {
        var text = document.getElementById(element);
        text.focus();
        text.select();
        var selection = window.getSelection();
        return selection.toString();
}

function getDifferentIndex(str1,str2){
        var length =  str1.length < str2.length ? str2.length : str1.length; //取最大长度
        var value; //相差的长度
        if(length == str1.length)
                value= str1.length - str2.length;
        else
                value= str2.length - str1.length;
        
        var i;
        for (i = 0; i < length; i++) {
                if(str1.charCodeAt(i) != str2.charCodeAt(i)) //如果超出范围charCodeAt()返回NaN
                {
                        if(str1.charCodeAt(i) == NaN || str2.charCodeAt(i) == NaN)
                                return i+value; //选择的是末尾,从不一样的位置+不一样的长度
                        else
                                return i; //选择的是中间,两个数不一样,返回不一样的位置
                }
                
        }
        return -1; //没有找到返回-1
}

async function setSelectTextMode(mode){
        var eleName;
        
        const text_format = [{
                        tag_start: "[h1]",
                        tag_end: "[/h1]"
                },{
                        tag_start: "[b]",
                        tag_end: "[/b]"
                },{
                        tag_start: "[u]",
                        tag_end: "[/u]"
                },{
                        tag_start: "[i]",
                        tag_end: "[/i]"
                },{
                        tag_start: "[strike]",
                        tag_end: "[/strike]"
                },{
                        tag_start: "[spoiler]",
                        tag_end: "[/spoiler]"
                },{
                        tag_start: "[noparse]",
                        tag_end: "[/noparse]"
                },{
                        tag_start: "[url=",
                        tag_middle: "]",
                        tag_end: "[/url]"
                }
        ]
        var ele;
                switch (inBoxonblurID){
                        case 0:
                                ele = document.getElementById("comment_textarea");
                                eleName = "comment_textarea";
                                break;
                        case 1:
                                ele = document.getElementById("comment_textarea_en");
                                eleName = "comment_textarea_en";
                                break;
                        case 2:
                                ele = document.getElementById("comment_textarea_jp");
                                eleName = "comment_textarea_jp";
                                break;
                        case 3:
                                ele = document.getElementById("comment_textarea_zhc");
                                eleName = "comment_textarea_zhc";
                                break;
                        case 4:
                                ele = document.getElementById("comment_textarea_zh_sg");
                                eleName = "comment_textarea_zh_sg";
                                break;
                        case 5:
                                ele = document.getElementById("comment_textarea_zh_hant");
                                eleName = "comment_textarea_zh_hant";
                                break;
                        case 6:
                                ele = document.getElementById("comment_textarea_zh_hk");
                                eleName = "comment_textarea_zh_hk";
                                break;
                        case 7:
                                ele = document.getElementById("comment_textarea_zh_mo");
                                eleName = "comment_textarea_zh_mo";
                                break;
                        case 8:
                                ele = document.getElementById("comment_textarea_zh_tw");
                                eleName = "comment_textarea_zh_tw";
                                break;
                        default:
                                break;
                }
                //debugger
        var str = getSelectedText(); //获取选择的文本内容
        var oldText = ele.value; //输入框原来的值  document.activeElement.value
        var selection = window.getSelection();
        var selectionStr = selection.toString(); //为了区分是全选了还是根本就没有选择
        var obj = ele; //当前焦点所在的元素 document.activeElement
        var nSelectionStart;
        var elTextArea;
        if(str == ""){ //是否没有选择任何的文本
                elTextArea = ele; //设置为指定的留言框 document.activeElement
                if (elTextArea) {
                        nSelectionStart = elTextArea.selectionStart;//
                        if(nSelectionStart == undefined) //如果没有输入
                        {
                                nSelectionStart = 0;
                                elTextArea.value = "";
                        }
                    newMess = elTextArea.value.substr(0, nSelectionStart);
                }
        }
        else{
                var iindex = ele.selectionStart; //
                await window.getSelection().deleteFromDocument(); /*删除选择的文本*/
                var newText = selectText(eleName); //输入框现在的值
                if(newText == oldText){
                        //debugger
                        return;
                }
                //debugger
                var index;
                // if(iindex != 0 )//是否在开头(针对于相同的字符)
                //      index = getDifferentIndex(oldText,newText); //getDifferentIndex(oldText,newText); //ele.selectionStart
                // else
                        index = iindex;
                
                console.log("index",index);
                var endIndex = index + str.length;
                
                var newMess = oldText.slice(0,index); //添加开头
        }
        switch (mode){
                case 1:
                        newMess += text_format[0].tag_start + str + text_format[0].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){ //为了区分是全选了还是根本就没有选择
                                elTextArea.selectionStart = nSelectionStart + (text_format[0].tag_start + str + text_format[0].tag_end).length;
                        }
                        break;
                case 2:
                        newMess += text_format[1].tag_start + str + text_format[1].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[1].tag_start + str + text_format[1].tag_end).length;
                        }
                        break;
                case 3:
                        newMess += text_format[2].tag_start + str + text_format[2].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[2].tag_start + str + text_format[2].tag_end).length;
                        }
                        break;
                case 4:
                        newMess += text_format[3].tag_start + str + text_format[3].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[3].tag_start + str + text_format[3].tag_end).length
                        }
                        break;
                case 5:
                        newMess += text_format[4].tag_start + str + text_format[4].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[4].tag_start + str + text_format[4].tag_end).length;
                        }
                        break;
                case 6:
                        newMess += text_format[5].tag_start + str + text_format[5].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[5].tag_start + str + text_format[5].tag_end).length;
                        }
                        break;
                case 7:
                        newMess += text_format[6].tag_start + str + text_format[6].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[6].tag_start + str + text_format[6].tag_end).length;
                        }
                        break;
                case 8:
                        newMess += text_format[7].tag_start + text_format[7].tag_middle + str + text_format[7].tag_end; //处理选择的文本并添加
                        if(selectionStr == "" && selection.toString() == ""){
                                elTextArea.selectionStart = nSelectionStart + (text_format[7].tag_start + str + text_format[7].tag_end).length;
                        }
                        break;
                default:
                        break;
        }
        if(selectionStr == "" && selection.toString() == ""){ //是否没有选择任何的文本
                newMess += elTextArea.value.substr(nSelectionStart)
        }
        else{
                newMess += oldText.slice(endIndex); //添加结尾
        }
        obj.value = newMess; //重新赋值给输入框
        obj.focus(); //获取焦点,如果不在视野里,会把镜头拉过去
}
//setSelectTextMode(1)
//-------------------------------------------------------------------------------------------------------------------------------------------------
function add_commentthread_textarea_allSelect(){ //添加留言框全选
        document.addEventListener("mousedown", function(e){
                //console.log(e.button);
                if(e.button == 1){
                        if(document.activeElement.id.indexOf("comment_textarea") != -1){ //当前焦点所在的元素如果是留言框才全选
                                let obj;
                                        switch (inBoxonblurID){
                                                case 0:
                                                        obj = document.getElementById("comment_textarea");
                                                        break;
                                                case 1:
                                                        obj = document.getElementById("comment_textarea_en");
                                                        break;
                                                case 2:
                                                        obj = document.getElementById("comment_textarea_jp");
                                                        break;
                                                case 3:
                                                        obj = document.getElementById("comment_textarea_zhc");
                                                        break;
                                                case 4:
                                                        obj = document.getElementById("comment_textarea_zh_sg");
                                                        break;
                                                case 5:
                                                        obj = document.getElementById("comment_textarea_zh_hant");
                                                        break;
                                                case 6:
                                                        obj = document.getElementById("comment_textarea_zh_hk");
                                                        break;
                                                case 7:
                                                        obj = document.getElementById("comment_textarea_zh_mo");
                                                        break;
                                                case 8:
                                                        obj = document.getElementById("comment_textarea_zh_tw");
                                                        break;
                                                default:
                                                        break;
                                        }
                                        obj.focus();
                                        obj.select();
                                        e.stopPropagation(); 
                                        e.stopImmediatePropagation();
                                        e.preventDefault();
                                return false;
                        }
                        return false;
                }
        }, false);
        
        
        document.addEventListener("keyup", function(e){
                //console.log(e.keyCode);
                //console.log(e.shiftKey,e.altKey);
                if(e.keyCode == 18){ //Alt
                let obj;
                        switch (inBoxonblurID){
                                case 0:
                                        obj = document.getElementById("comment_textarea");
                                        break;
                                case 1:
                                        obj = document.getElementById("comment_textarea_en");
                                        break;
                                case 2:
                                        obj = document.getElementById("comment_textarea_jp");
                                        break;
                                case 3:
                                        obj = document.getElementById("comment_textarea_zhc");
                                        break;
                                case 4:
                                        obj = document.getElementById("comment_textarea_zh_sg");
                                        break;
                                case 5:
                                        obj = document.getElementById("comment_textarea_zh_hant");
                                        break;
                                case 6:
                                        obj = document.getElementById("comment_textarea_zh_hk");
                                        break;
                                case 7:
                                        obj = document.getElementById("comment_textarea_zh_mo");
                                        break;
                                case 8:
                                        obj = document.getElementById("comment_textarea_zh_tw");
                                        break;
                                default:
                                        break;
                        }
                        obj.focus();
                        obj.select();
                        e.stopPropagation(); 
                        e.stopImmediatePropagation();
                        e.preventDefault();
                        //console.log("Alt UP");
                        return false;
                }
        }, false);
}

/**
 * utility.js
 */

function _addIDtoHandleLostfocus(){ //添加ID来处理丢失的焦点
                var parentObj = document.getElementById("steamTextStyle").parentNode;
                Obj = parentObj.getElementsByTagName('input');
                for (let i = 0; i < Obj.length; i++) {
                        Obj[i].id = "steamTextStyle_1";
                }
                Obj = parentObj.getElementsByTagName('dl');
                for (let i = 0; i < Obj.length; i++) {
                        Obj[i].id = "steamTextStyle_1";
                }
                Obj = parentObj.getElementsByTagName('dd');
                for (let i = 0; i < Obj.length; i++) {
                        Obj[i].id = "steamTextStyle_1";
                }
}

function registeMenu(){ //注册脚本快捷菜单
        if(g_uiConf.isShow_menu_friend){
                g_arrMenuID[0] = GM_registerMenuCommand("好友列表", function(){
                        window.open("https://steamcommunity.com/my/friends", "_blank");
                });
        }
        if(g_uiConf.isShow_menu_activity){
                g_arrMenuID[1] = GM_registerMenuCommand("动态列表", function(){
                        window.open("https://steamcommunity.com/my/home", "_blank");
                });
        }
        if(g_uiConf.isShow_menu_registerKey){
                g_arrMenuID[2] = GM_registerMenuCommand("激活key", function(){
                        window.open("https://store.steampowered.com/account/registerkey", "_blank");
                });
        }
        if(g_uiConf.isShow_menu_redeemWalletCode){
                g_arrMenuID[3] = GM_registerMenuCommand("充值key", function(){
                        window.open("https://store.steampowered.com/account/redeemwalletcode", "_blank");
                });
        }
        if(g_uiConf.isShow_menu_steamdbFree){
                g_arrMenuID[4] = GM_registerMenuCommand("SteamDB预告", function(){
                        window.open("https://steamdb.info/upcoming/free/", "_blank");
                });
        }
}

function unRegisteMenu(){ //取消注册脚本快捷菜单
        GM_unregisterMenuCommand(g_arrMenuID[0]);
        GM_unregisterMenuCommand(g_arrMenuID[1]);
        GM_unregisterMenuCommand(g_arrMenuID[2]);
        GM_unregisterMenuCommand(g_arrMenuID[3]);
        GM_unregisterMenuCommand(g_arrMenuID[4]);
}


function registeNotification(){ //注册事件完成通知
        var options = {
                text: "文本.",
                title: "标题!",
                image: "https://steamcommunity-a.akamaihd.net/public/shared/images/responsive/share_steam_logo.png",
                ondone: function() {
                        console.log("完成.");
                },
                onclick: function() {
                        console.log("点击.");
                }
        }
        GM_notification(options);
}

function setPageRefreshAndCloseWarn(mode){ //设置页面刷新和关闭警告
        var func_PageRefreshAndCloseWarn = function(event){
                event.returnValue = '当前脚本正在运行中,您确定要离开吗?';
        };
        
        if (mode) {
                window.addEventListener("beforeunload", func_PageRefreshAndCloseWarn, true);
        } else{
                window.removeEventListener("beforeunload", func_PageRefreshAndCloseWarn, true)
        }
}
//setPageRefreshAndCloseWarn(true); //设置页面刷新和关闭警告
//setPageRefreshAndCloseWarn(false); //取消设置页面刷新和关闭警告

function autoSetPageRefreshAndCloseWarn(mode){ //自动判断状态并设置页面刷新和关闭警告
        var func_autoPageRefreshAndCloseWarn = function(event){
                if(g_conf[0].YunStatus == true){
                        if(g_conf[0].isAddYunBreakWarn == true){
                                event.returnValue = '当前脚本正在运行中,您确定要离开吗?';
                        }
                }
        };
        
        if (mode) {
                window.addEventListener("beforeunload", func_autoPageRefreshAndCloseWarn, true);
        } else{
                window.removeEventListener("beforeunload", func_autoPageRefreshAndCloseWarn, true)
        }
}
//autoSetPageRefreshAndCloseWarn(true); //自动判断状态并设置页面刷新和关闭警告
//autoSetPageRefreshAndCloseWarn(false); //取消自动判断状态并设置页面刷新和关闭警告
//-------------------------------------------------------------------------------------------------------------
// API
function getCityCodeByEnglishName(cityEnglishName) {
        if (g_arrCityList == undefined)
                return null;

        for (let i = 0; i < g_arrCityList.length; i++) {
                if (g_arrCityList[i][1].length == cityEnglishName.length &&
                        g_arrCityList[i][1].toLowerCase() == cityEnglishName.toLowerCase()) {
                        return g_arrCityList[i][0];
                }
        }
        return null;
}

function getCityCodeByChinsesName(cityChinseshName) {
        if (g_arrCityList == undefined)
                return null;

        for (let i = 0; i < g_arrCityList.length; i++) {
                if (g_arrCityList[i][3].length == cityChinseshName.length &&
                        g_arrCityList[i][3].toLowerCase() == cityChinseshName.toLowerCase()) {
                        return g_arrCityList[i][0];
                }
        }
        return null;
}

function getCityChinsesNameByEnglishName(cityEnglishName) {
        if (g_arrCityList == undefined)
                return null;

        for (let i = 0; i < g_arrCityList.length; i++) {
                if (g_arrCityList[i][1].length == cityEnglishName.length &&
                        g_arrCityList[i][1].toLowerCase() == cityEnglishName.toLowerCase()) {
                        return g_arrCityList[i][3];
                }
        }
        return null;
}
//-------------------------------------------------------------------------------------------------------------
//RGB
function countRgbColor(r, g, b) //计算RGB渐变颜色
{
        var color;
        //var color = '#' + to2string(r) +  'ffff';
        //console.log(color);
        //return color;
        while (true) {
                switch (RGBindex) {
                        case 0: //红
                                if (RGBr == 0 & RGBg == 0 & RGBb == 0) {
                                        RGBr = 0xFF; //红
                                        color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                        //console.log("color:" + color);
                                        return color;
                                } else {
                                        RGBindex = 1;
                                        continue; //重新开始
                                }
                                break;
                        case 1: //红->黄
                                if (RGBg != 0xFF) {
                                        RGBg += 3; //红->黄
                                        color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                        //console.log("color:" + color);
                                        return color;
                                } else {
                                        RGBindex = 2;
                                        continue; //重新开始
                                }
                                break;
                        case 2: //黄->绿
                                if (RGBr != 0x00) //黄
                                {
                                        RGBr -= 3; //黄->绿
                                        color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                        //console.log("color:" + color);
                                        return color;
                                } else {
                                        RGBindex = 3;
                                        continue; //重新开始
                                }
                                break;
                        case 3: //绿->蓝(天蓝)
                                if (RGBb != 0xFF) {
                                        if (RGBg > 0xBF) {
                                                RGBg -= 3;
                                        }
                                        RGBb += 3;
                                        color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                        //console.log("color:" + color);
                                        return color;
                                } else {
                                        RGBindex = 4;
                                        continue; //重新开始
                                }
                                break;
                        case 4: //蓝(天蓝)->蓝(深蓝)
                                if (RGBg != 0x00) {
                                        RGBg -= 3;
                                        color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                        //console.log("color:" + color);
                                        return color;
                                } else {
                                        RGBindex = 5;
                                        continue; //重新开始
                                }
                                break;
                        case 5: //蓝(深蓝)->紫
                                if (RGBr < 0x80 || RGBb > 0x80) {
                                        if (RGBr < 0x80) {
                                                RGBr += 3;
                                                color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                                //console.log("color:" + color);
                                                return color;
                                        } else if (RGBb > 0x80) {
                                                RGBb -= 3;
                                                color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                                //console.log("color:" + color);
                                                return color;
                                        }

                                } else {
                                        RGBindex = 6;
                                        continue; //重新开始
                                }
                                break;
                        case 6: //紫->红
                                if (RGBr != 0xFF || RGBb != 0x00) {
                                        if (RGBr < 0xFF) {
                                                RGBr += 3;
                                                color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                                //console.log("color:" + color);
                                                return color;
                                        } else if (RGBb > 0x00) {
                                                RGBb -= 3;
                                                color = '#' + to2string(RGBr) + to2string(RGBg) + to2string(RGBb);
                                                //console.log("color:" + color);
                                                return color;
                                        }

                                } else //继续RGB
                                {
                                        RGBindex = 1;
                                        continue; //重新开始
                                }

                                break;
                        case 7:
                                console.log("end!!!");
                                break;
                        default:
                                console.log("[countRgbColor()-switch(RGBindex):] 未定义异常!")
                                break;
                }
        }
        //红 #FF0000
        //黄 #FFFF00
        //绿 #00FF00
        //蓝 #00BFFF #0000FF
        //紫 #800080

}
// function setRgb() //设置RGB渐变颜色
// {
//      var loginBox = document.getElementById("LoginBaseBox");
//      loginBox.style.background = countRgbColor(0,0,0);
// }
// var tiSysCallback_runRGB = setInterval(function(){runRGB();}, 22); //[启动定时器] 每秒回调函数 // 11 16 22 30
//-------------------------------------------------------------------------------------------------------------
function setBackgroundImg(imgFilePath,type){ //设置背景图片
        if(jQuery("#backgroundIMG")[0] == undefined)
                        jQuery("body").prepend('<div id="backgroundIMG">背景图</div>');
        
        if(type == "img"){
                        var css = "background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('"+ imgFilePath +"') no-repeat fixed;background-size: cover; width: 100%;";
                        //var css = "background: rgba(0,0,0,0) url('"+ imgFilePath +"') no-repeat fixed;background-size: cover; width: 100%;";
                        var other_css = "position: absolute; z-index: -1; height:100%;";
                        var opacity_css = "opacity:1;filter: alpha(opacity=100)";
                        jQuery("#backgroundIMG")[0].style = css + other_css + opacity_css;
                        
                        document.body.style.background = "none"; //去除原背景
                        
                        jQuery(".friends_header_bg")[0].style.background = "none"; //去除 上面那层蓝色背景图片
                        jQuery("#global_header")[0].style.background = "linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6))"; //设置 最上面设置黑色区域透明度
                        jQuery(".content")[0].style.background = "none"; //去除 最上面黑色区域
                        
                        var obj = jQuery(".profile_friends.title_bar")[0];
                        if(obj != undefined)
                                obj.style.background = "linear-gradient(rgba(1, 94, 128, 0.6), rgba(1, 94, 128, 0.6))"; //设置 管理好友列表那块的透明度
        }else if(type == "bin"){
                jQuery("#backgroundIMG").attr("src", "data:" + imageType + ";base64," + data);
        }
}

function setBackgroundImgCarousel(arr_img,timeInterval){ //设置背景图片轮播(图片路径,时间间隔)
        //URL()存的图片网络地址 修改背景图  就改这个地址 必须要网络地址噢噢噢(注意这里没有[img][/img]) 壁纸 可以在这找  https://www.enterdesk.com/zhuomianbizhi/dongmankatong/dongmanrenwu/
        
        var x = 0;        //记录当前第几张轮播图
        setBackgroundImg(arr_img[x++],"img");
        setInterval(()=>{
                if (x >= arr_img.length) x = 0;
                setBackgroundImg(arr_img[x++],"img");
        }, timeInterval);
}

async function getNetImgBysourceID(sourceID){
        var data,obj,imgFilePath;
        if(sourceID==0){
                data = await gc_exApis.getDataByApiList(1,0,"json");
                if(data.indexOf('{')!=0){
                        console.log("服务器返回了错误的数据,尝试重新请求: "+ data);
                        return getNetImgBysourceID(sourceID);
                }
                obj = JSON.parse(data); //JSON处理并解析到js对象
                if(obj.code == 200){
                        imgFilePath = obj.imgurl;
                }
        }
        else if(sourceID==1){
                data = await gc_exApis.getDataByApiList(2,0,"json");
                if(data.indexOf('{')!=0){
                        console.log("服务器返回了错误的数据,尝试重新请求: "+ data);
                        return getNetImgBysourceID(sourceID);
                }
                obj = JSON.parse(data); //JSON处理并解析到js对象
                if(obj.code == 200){
                        imgFilePath = obj.imgurl;
                }
        }
        return imgFilePath;
}

async function binImgDatatoBase64(res){ //二进制图片数据转base64编码后直接显示
        var arr = res.responseHeaders.split('\r\n');
        var arr1 = [];
        for (let i = 0; i < arr.length; i++) {
                var str1 = arr[i].slice(0,arr[i].indexOf(':'));
                var str2 = arr[i].slice(arr[i].indexOf(':') +1);
                arr1.push([str1,str2]);
        }
        
        var getResponseHeader = (name)=>{
                for (let i = 0; i < arr1.length; i++) {
                        if(arr1[i][0] == name){
                                return arr1[i][1];
                        }
                }
        };
        
        var imageType = getResponseHeader("content-type");
        var blob = new Blob([res.response], { type: imageType });
        var reader = new FileReader();
        var imgBase64 = reader.readAsDataURL(blob);
        reader.addEventListener("load", function () {
                console.log(reader.result);
                setBackgroundImg(reader.result,"img");
        }, false);
        var imageUrl = (window.URL || window.webkitURL).createObjectURL(blob);
        
        
        //setBackgroundImg(imageUrl,"img");
        
        // var uInt8Array = new Uint8Array(res.response);
        // var i = uInt8Array.length;
        // var binaryString = new Array(i);
        // while (i--) {
        //     binaryString[i] = String.fromCharCode(uInt8Array[i]);
        // }
        // var data = binaryString.join('');
        // debugger
        // var imageType = res.getResponseHeader("Content-Type");
        
        //setBackgroundImg(imgFilePath,"bin");
}

async function binImgDatatoBlob(){ //二进制图片数据转Blob对象
        
}


async function autoGetImgAndSetBackgroundImg(sourceID,mode,timeInterval,maxImgNumber){ //来源id, 模式:true轮播,false不轮播, 时间间隔(不轮播就无效), 最大图片轮播数量(不轮播就无效)
        var arr_img = [];
        var imgFilePath;
        
        if(mode == true){
                imgFilePath = await getNetImgBysourceID(sourceID);
                arr_img[0] = imgFilePath;
                
                if(maxImgNumber > 0){
                        setTimeout(async()=>{
                                for (let i = 0; i < maxImgNumbers; i++) {
                                        imgFilePath = await getNetImgBysourceID(sourceID);
                                        arr_img.push(imgFilePath)
                                }
                        }, 0);
                        setBackgroundImgCarousel(arr_img,timeInterval);
                }else{
                        setBackgroundImg(imgFilePath,"img");
                        setInterval(async()=>{
                                        imgFilePath = await getNetImgBysourceID(sourceID);
                                        setBackgroundImg(imgFilePath,"img");
                        }, timeInterval);
                }
        }else if(mode == false){
                imgFilePath = await getNetImgBysourceID(sourceID);
                //var jsData = await getResourceByURL(imgFilePath,false);
                //binImgDatatoBase64(jsData);
                setBackgroundImg(imgFilePath,"img");
        }
        //gc_exApis.getDataByApiList(0);
        //gc_exApis.getDataByApiList(1,0,"json");
        //gc_exApis.getDataByApiList(1,0);
        //gc_exApis.getDataByApiList(2,0,"json");
        //gc_exApis.getDataByApiList(2,0);
        //gc_exApis.getDataByApiList(2,1,"二维码文本");
        //gc_exApis.getDataByApiList(3,0,"","Miku");
        //gc_exApis.getDataByApiList(3,1,"","Miku");
        //gc_exApis.getDataByApiList(3,2,"","Miku");
        //gc_exApis.getDataByApiList(3,3,"","Miku");
        //gc_exApis.getDataByApiList(4,0);
        //gc_exApis.getDataByApiList(4,1,1);
        //gc_exApis.getDataByApiList(4,2,"Miku");
        //gc_exApis.getDataByApiList(4,3);
        //gc_exApis.getDataByApiList(4,4);
}

//-------------------------------------------------------------------------------------------------------------

function downFile(type,data,fileName) {
        var elementA = document.createElement('a');
        
        if(type == "json") //json对象
                elementA.setAttribute('href', 'data:text/plain;charset=utf-8,' + JSON.stringify(data));
        else if(type == "text") //文本
                elementA.setAttribute('href', 'data:text/plain;charset=utf-8,' + data);
        else if(type == "bin") //二进制数据
                elementA.setAttribute('href', 'data:text/plain;charset=utf-8,' + data);
        else{
                alert("不支持的数据类型!!");
                elementA.setAttribute('href', 'data:text/plain;charset=utf-8,' + data);
        }
        //if(fileName == undefined) fileName = new Date();
        elementA.setAttribute('download', + new Date() + ".data");
        elementA.style.display = 'none';
        document.body.appendChild(elementA);
        elementA.click();
        document.body.removeChild(elementA);
}
//downFile("json",g_conf,"SteamAssistant");

//设置透明 https://www.52pojie.cn/thread-763424-1-1.html
//background: rgba(229, 241, 240,0);
//background: transparent;
//-------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------

/**
 */
class multiLanguage{
        constructor(arg) {
                this.l_en = 'en_GB';
                this.l_cn = 'zh_CN';
                this.l_tw = 'zh_TW';
                this.l_jp = 'jp_JP';
                this.l_auto = 'auto_detected';
        }
        /**
         * 初始化
         */
        init(){
                jQuery('#selectLanguageDropdown').localizationTool(languagesList_mainUI_html); //初始化
                this.readConfig(); //读取当前语言配置
        }
        /**
         * 读取当前语言配置
         */
        readConfig(){
                if(g_conf[0].language == "auto_detected"){
                        this.setAutoDetected();
                }
                else{
                        jQuery('#selectLanguageDropdown').localizationTool('translate',g_conf[0].language);
                }
        }
        /**
         * 保存当前语言配置
         */
        saveConfig(lang){
                g_conf[0].language = lang;
        }
        /**
         * 设置为自动检测
         */
        setAutoDetected(){
                var arrLang = navigator.languages;
                for (let i = 0; i < arrLang.length; i++) {
                        
                        if(arrLang[i].indexOf('en') != -1){ //英语系 "en-US", "en"等变种语言
                                jQuery('#selectLanguageDropdown').localizationTool('translate',this.l_en);
                                return true;
                        }
                        
                        switch (arrLang[i]){
                                case "zh-CN": //简体
                                        jQuery('#selectLanguageDropdown').localizationTool('translate',this.l_cn);
                                        return true;
                                        break;
                                case "zh-TW": //繁体
                                        jQuery('#selectLanguageDropdown').localizationTool('translate',this.l_tw);
                                        return true;
                                        break;
                                case "ja": //日语
                                        jQuery('#selectLanguageDropdown').localizationTool('translate',this.l_jp);
                                        return true;
                                        break;
                        }
                }
                jQuery('#selectLanguageDropdown').localizationTool('translate',this.l_en);
                return false;
        }
        
}
/**
 * ui.js
 */

//UI处理逻辑:
//您的好友                  普通UI                添加将选择的玩家添加到指定分组的选项
//添加好友                                  不处理
//待处理邀请                       精简版普通UI-1     添加将选择的玩家添加到指定分组的选项
//已屏蔽                             精简版普通UI-2
//直播版主                          版主UI
//关注的玩家                       精简版普通UI-0     添加将选择的玩家添加到指定分组的选项
//关注的游戏...                            不处理,因为会覆盖当前页面
//您的组                             组留言UI-1                   添加将选择的组添加到指定分组的选项
//待处理邀请                       组留言UI-2                   添加将选择的组添加到指定分组的选项
//查找组...                                  不处理,因为会覆盖当前页面
//创建组...                                  不处理,因为会覆盖当前页面

/**
 * @class
 * @classdesc UI类
 * @abstract 必须在继承的子类中实现
 */
class UI {
        constructor(arg) {
                this.loadProgress = 0; //加载进度
                this.isDomLoaded = false; //dom是否加载完毕
                registeMenu(); //注册脚本快捷菜单
                //registeNotification(); //注册事件完成通知
                if(gc_multiLanguage == null) gc_multiLanguage = new multiLanguage();      //多语言支持
        }
        
        showLoadUI(){ //
                
                addNewStyle('styles_loading',load_cssCode);
                
                var obj = document.getElementsByClassName("v6 game_bg responsive_page")[0]; //body
                var objElement = document.createElement('div');
                objElement.id="loadingUI" //<div id="loadingUI">\ //</div>
                objElement.style = loadUI_css;
                objElement.innerHTML = loadUI_Html;
                obj.appendChild(objElement);
                console.log("showLoadUI()");
        }
        
        loadTextChange(mode){ //改变当前加载进度
                if(this.isDomLoaded == false){
                        this.loadProgress++;
                }
                else{
                        var obj = document.getElementsByClassName('how-to')[0];
                        obj.innerText = "正在加载资源中,已完成"+ (++this.loadProgress) + "/10,请您耐心等待...";
                }
        }
        
        remoreLoadUI(){ //移除加载UI和css
        
                if((()=>{
                        var obj = document.getElementsByClassName("v6 game_bg responsive_page")[0]; //body
                        var objChildNodes = obj.childNodes; //childNodes
                        for (let i = 0; i < objChildNodes.length; i++) {
                                if(objChildNodes[i].id == "loadingUI"){
                                        obj.removeChild(objChildNodes[i]); //移除加载UI
                                        return true;
                                }
                        }
                        return false;
                })() == false){
                        console.log("移除加载UI失败~!");
                        return false;
                }
                
                if((()=>{
                        var obj = document.getElementsByTagName("head")[0]; //head
                        var objChildNodes = obj.childNodes; //childNodes
                        for (let i = 0; i < objChildNodes.length; i++) {
                                if(objChildNodes[i].id == "styles_loading"){
                                        obj.removeChild(objChildNodes[i]); //移除css
                                        return true;
                                }
                        }
                        return false;
                })() == false){
                        console.log("移除css失败~!");
                        return false;
                }
                
                return true;
        }
                // 添加留言高级设置UI
                // 设置多个留言框按顺序留言+++
                // 设置多次留言
                // 设置留言优先级
                // 设置简单留言自动回复和特殊留言提醒功能
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
                
                (async()=>{
                        await autoGetImgAndSetBackgroundImg(0,false,5000,0); //加载背景图片
                })();
                
                jQuery(".icon_item.icon_all_friends")[0].style.color ="#66ccff"; //您的好友
                jQuery(".icon_item.icon_blocked_friends")[0].style.color ="#66ccff"; //已屏蔽
                jQuery(".icon_item.icon_all_friends")[1].style.color ="#66ccff"; //直播版主
                jQuery(".icon_item.icon_all_following")[0].style.color ="#66ccff"; //关注的玩家
                jQuery(".icon_item.icon_all_groups")[0].style.color ="#66ccff"; //您的组     
                
        }
        async createUI() {
                //好友数据统计里的置顶和是否锁定的模板
                jQuery("#manage_friends").after(mainUI_template);
        }
        
        async reCreateUI(){
                if(await gc_menu_friends_ui.initUI(false) != false){
                        await gc_menu_friends_ui.createUI();
                }
        }
        f
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}


var isReCreateUi = ()=>{ //是否重新创建Ui(url正则表达式,回调函数)
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url
                                var _fn = ()=>{
                                        _ySelects(jQuery);
                                        g_conf[0].YunStatus = false; /*当前运行状态(比如正在留言中之类的就是正在运行)*/
                                        g_conf[0].isTranslationText = false; /*是否进行了翻译*/
                                        g_conf[0].isWarnInfo = false; /*是否出现警告信息(如果没有则不需要清空)*/
                                        g_conf[0].isCommentRunStatus = false; /*是否正在留言*/
                                        g_conf[0].isNationalityRunStatus = false; /*是否正在设置国籍*/
                                        g_conf[0].isNoCommentRunStatus = false; /*是否正在设置不留言*/
                                        g_conf[0].isTimeIntervalRunStatus = false; /*是否正在设置留言时间间隔*/
                                        g_conf[0].isAutoCommentRunStatus = false; /*是否正在设置自动留言计划*/
                                        g_conf[0].isFriendToGroupRunStatus = false; /*是否正在设置好友分组*/
                                };
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                if(URLs.g_friendUrlRegExp.test(url)){
                                        _fn();
                                        console.log("重新构建UI-您的好友.");
                                        gc_menu_friends_ui && typeof gc_menu_friends_ui.reCreateUI === 'function' && gc_menu_friends_ui.reCreateUI(); //调用回调
                                }
                                
                                else if(URLs.g_otherUrlRegExp1_1.test(url)){
                                        _fn();
                                        console.log("不处理-添加好友.");
                                        //不处理
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp1_2.test(url)){
                                        _fn();
                                        console.log("不处理-好友待处理邀请.");
                                        //暂时 不处理
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp1_3.test(url)){
                                        _fn();
                                        console.log("重新构建UI-已屏蔽.");
                                        gc_menu_shielding_ui && typeof gc_menu_shielding_ui.reCreateUI === 'function' && gc_menu_shielding_ui.reCreateUI(); //调用回调
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp1_4.test(url)){
                                        _fn();
                                        console.log("不处理-近期共同游戏的玩家.");
                                        //暂时 不处理
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp1_5.test(url)){
                                        _fn();
                                        console.log("重新构建UI-直播版主.");
                                        gc_menu_liveAdmin_ui && typeof gc_menu_liveAdmin_ui.reCreateUI === 'function' && gc_menu_liveAdmin_ui.reCreateUI(); //调用回调
                                        return;
                                }
                                
                                else if(URLs.g_otherUrlRegExp2_1.test(url)){
                                        _fn();
                                        console.log("重新构建UI-关注的玩家.");
                                        gc_menu_following_Players_ui && typeof gc_menu_following_Players_ui.reCreateUI === 'function' && gc_menu_following_Players_ui.reCreateUI(); //调用回调
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp2_2.test(url)){
                                        //_fn();
                                        //console.log("重新构建UI-您的组.");
                                        window.location.reload(true); //重新加载当前页面
                                        //gc_menu_groups_ui && typeof gc_menu_groups_ui.reCreateUI === 'function' && gc_menu_groups_ui.reCreateUI(); //调用回调
                                        return;
                                }
                                else if(URLs.g_otherUrlRegExp2_3.test(url)){
                                        _fn();
                                        console.log("不处理UI-组待处理邀请!");
                                        //window.location.reload(true); //重新加载当前页面
                                        //暂时 不处理
                                        return;
                                }
                                
                                // else if(URLs.g_otherUrlRegExp3.test(url)){
                                //      console.log("重新构建UI-您的好友.");
                                //      gc_menu_friends_ui && typeof gc_menu_friends_ui.reCreateUI === 'function' && gc_menu_friends_ui.reCreateUI(); //调用回调
                                // }
                        };

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 您的好友 模块 UI具体实现
 * @class
 * @classdesc UI类 - 您的好友 模块 UI具体实现
 * @extends UI
 */
class menu_friends_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                
                gc_multiLanguage.init(); //初始化多语言支持
                
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_friends_ui.initUI(false) != false){
                        await gc_menu_friends_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 待处理邀请 模块 UI具体实现
 * @class
 * @classdesc UI类 - 待处理邀请 模块 UI具体实现
 * @extends UI
 */
class menu_friends_invite_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_friends_invite_ui.initUI(false) != false){
                        await gc_menu_friends_invite_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 已屏蔽 模块 UI具体实现
 * @class
 * @classdesc UI类 - 已屏蔽 模块 UI具体实现
 * @extends UI
 */
class menu_shielding_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_shielding_ui.initUI(false) != false){
                        await gc_menu_shielding_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * @class
 * @classdesc UI类 - 共同游戏 模块 UI具体实现
 * @extends UI
 */
class menu_gameFriend_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_gameFriend_ui.initUI(false) != false){
                        await gc_menu_gameFriend_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 直播版主 模块 UI具体实现
 * @class
 * @classdesc UI类 - 直播版主 模块 UI具体实现
 * @extends UI
 */
class menu_liveAdmin_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_liveAdmin_ui.initUI(false) != false){
                        await gc_menu_liveAdmin_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 关注的玩家 模块 UI具体实现
 * @class
 * @classdesc UI类 - 关注的玩家 模块 UI具体实现
 * @extends UI
 */
class menu_following_Players_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(mainUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_following_Players_ui.initUI(false) != false){
                        await gc_menu_following_Players_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 您的组 模块 UI具体实现
 * @class
 * @classdesc UI类 - 您的组 模块 UI具体实现
 * @extends UI
 */

// var DOMPurify = function DOMPurify(root) {
//     return createDOMPurify(root);
//   };

// var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };


// // Most of the code here comes from dselect.js
// class Sortbox {

//     static init() {
//         this._activeDropLists = {};
//         this._lastSelectHideTime = 0;

//         document.addEventListener("mousedown", e => this._handleMouseClick(e));
//     }

//     static _handleMouseClick(e) {
//         for (let key of Object.keys(this._activeDropLists)) {
//                      if (!this._activeDropLists[key]) continue;
                        
//                  let ulAboveEvent = e.target.closest("ul");
                
//             if (ulAboveEvent && ulAboveEvent.id === `${key}_droplist`) continue;
                
//             this._hide(key);
//          }
//     }

//     static _highlightItem(id, index, bSetSelected) {
//         let droplist = document.querySelector(`#${id}_droplist`);
//         let trigger = document.querySelector(`#${id}_trigger`);
//         let rgItems = droplist.getElementsByTagName("a");

//         if (index >= 0 && index < rgItems.length ) {
//             let item = rgItems[index];
            
//             if (typeof trigger.highlightedItem !== "undefined" && trigger.highlightedItem !== index)
//                 rgItems[trigger.highlightedItem].className = "inactive_selection";
                
//             trigger.highlightedItem = index;
//             rgItems[index].className = "highlighted_selection";
            
//             let yOffset = rgItems[index].offsetTop + rgItems[index].clientHeight;
//             let curVisibleOffset = droplist.scrollTop + droplist.clientHeight;
//             let bScrolledDown = false;
//             let nMaxLoopIterations = rgItems.length;
//             let nLoopCounter = 0;

//             while (curVisibleOffset < yOffset && nLoopCounter++ < nMaxLoopIterations) {
//                 droplist.scrollTop += rgItems[index].clientHeight;
//                 curVisibleOffset = droplist.scrollTop+droplist.clientHeight;
//                 bScrolledDown = true;
//             }
            
//             if ( !bScrolledDown ) {
//                 nLoopCounter = 0;
//                 yOffset = rgItems[index].offsetTop;
//                 curVisibleOffset = droplist.scrollTop;
//                 while(curVisibleOffset > yOffset && nLoopCounter++ < nMaxLoopIterations) {
//                     droplist.scrollTop -= rgItems[index].clientHeight;
//                     curVisibleOffset = droplist.scrollTop;
//                 }
//             }
            
//             if (bSetSelected) {
//                 HTML.inner(trigger, item.innerHTML);
//                 let input = document.querySelector(`#${id}`);
//                 input.value = item.id;
//                 input.dispatchEvent(new Event("change"));
                
//                 this._hide(id);
//             }
//         }
//     }

//     static _onFocus(id) {
//         this._activeDropLists[id] = true;
//     }

//     static _onBlur(id) {
//              if (!this._classCheck(document.querySelector(`#${id}_trigger`), "activetrigger"))
//              this._activeDropLists[id] = false;
//     }

//     static _hide(id) {
//         let droplist = document.querySelector(`#${id}_droplist`);
//         let trigger = document.querySelector(`#${id}_trigger`);
        
//              let d = new Date();
//          this._lastSelectHideTime = d.valueOf();
        
//         trigger.className = "trigger";
//         droplist.className = "dropdownhidden";
//         this._activeDropLists[id] = false;
//         trigger.focus();
//     }

//     static _show(id) {
//              let d = new Date();
//          if (d - this._lastSelectHideTime < 50) return;
                
//         let droplist = document.querySelector(`#${id}_droplist`);
//         let trigger = document.querySelector(`#${id}_trigger`);
        
//         trigger.className = "activetrigger";
//         droplist.className = "dropdownvisible";
//         this._activeDropLists[id] = true;
//         trigger.focus();
//     }

//     static _onTriggerClick(id) {
//         if (!this._classCheck(document.querySelector(`#${id}_trigger`), "activetrigger")) {
//             this._show(id);
//         }
//     }

//     static _classCheck(element, className) {
//         return new RegExp(`\\b${className}\\b`).test(element.className);
//     }

//     /**
//      * NOTE FOR ADDON REVIEWER:
//      * Elements returned by this function are already sanitized (calls to HTML class),
//      * so they can be safely inserted without being sanitized again.
//      * If we would sanitize them again, all event listeners would be lost due to
//      * DOMPurify only returning HTML strings.
//      */
//     static get(name, options, initialOption, changeFn, storageOption) {

//         let id = `sort_by_${name}`;
//         let reversed = initialOption.endsWith("_DESC");

//         let arrowDown = "↓";
//         let arrowUp = "↑";
        
//         let box = HTML.element(
//         `<div class="es-sortbox es-sortbox--${name}">
//             <div class="es-sortbox__label">${Localization.str.sort_by}</div>
//             <div class="es-sortbox__container">
//                 <input id="${id}" type="hidden" name="${name}" value="${initialOption}">
//                 <a class="trigger" id="${id}_trigger"></a>
//                 <div class="es-dropdown">
//                     <ul id="${id}_droplist" class="es-dropdown__list dropdownhidden"></ul>
//                 </div>
//             </div>
//             <span class="es-sortbox__reverse">${arrowDown}</span>
//         </div>`);

//         let input = box.querySelector(`#${id}`);
//         input.addEventListener("change", function() { onChange(this.value.replace(`${id}_`, ''), reversed); });

//         // Trigger changeFn for initial option
//         if (initialOption !== "default_ASC") {
//             input.dispatchEvent(new Event("change"));
//         }

//         let reverseEl = box.querySelector(".es-sortbox__reverse");
//         reverseEl.addEventListener("click", () => {
//             reversed = !reversed;
//             reverseEl.textContent = reversed ? arrowUp : arrowDown;
//             onChange(input.value.replace(`${id}_`, ''), reversed);
//         });
//         if (reversed) reverseEl.textContent = arrowUp;

//         let trigger = box.querySelector(`#${id}_trigger`);
//         trigger.addEventListener("focus", () => this._onFocus(id));
//         trigger.addEventListener("blur", () => this._onBlur(id));
//         trigger.addEventListener("click", () => this._onTriggerClick(id));

//         let ul = box.querySelector("ul");
//         let trimmedOption = getTrimmedValue(initialOption);
//         for (let i = 0; i < options.length; ++i) {
//             let [key, text] = options[i];

//             let toggle = "inactive";
//             if (key === trimmedOption) {
//                 box.querySelector(`#${id}`).value = key;
//                 box.querySelector(".trigger").textContent = text;
//                 toggle = "highlighted";
//             }

//             HTML.beforeEnd(ul,
//                 `<li>
//                     <a class="${toggle}_selection" tabindex="99999" id="${id}_${key}">${text}</a>
//                 </li>`);

//             let a = ul.querySelector("li:last-child > a");
//             //a.href = "javascript:DSelectNoop()";
//             a.addEventListener("mouseover", () => this._highlightItem(id, i, false));
//             a.addEventListener("click",     () => this._highlightItem(id, i, true));
//         }

//         function getTrimmedValue(val) { return val.replace(/(_ASC|_DESC)$/, ''); }

//         function onChange(val, reversed) {
//             val = getTrimmedValue(val);
//             changeFn(val, reversed);
//             if (storageOption) { SyncedStorage.set(storageOption, `${val}_${reversed ? "DESC" : "ASC"}`); }
//         }

//         return box;
//     }
// }



//  DOMPurify.sanitize = function (dirty, cfg) {
//     var body = void 0;
//     var importedNode = void 0;
//     var currentNode = void 0;
//     var oldNode = void 0;
//     var returnNode = void 0;
//     /* Make sure we have a string to sanitize.
//       DO NOT return early, as this will return the wrong type if
//       the user has requested a DOM object rather than a string */
//     if (!dirty) {
//       dirty = '<!-->';
//     }

//     /* Stringify, in case dirty is an object */
//     if (typeof dirty !== 'string' && !_isNode(dirty)) {
//       // eslint-disable-next-line no-negated-condition
//       if (typeof dirty.toString !== 'function') {
//         throw new TypeError('toString is not a function');
//       } else {
//         dirty = dirty.toString();
//         if (typeof dirty !== 'string') {
//           throw new TypeError('dirty is not a string, aborting');
//         }
//       }
//     }

//     /* Check we can run. Otherwise fall back or ignore */
//     if (!DOMPurify.isSupported) {
//       if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {
//         if (typeof dirty === 'string') {
//           return window.toStaticHTML(dirty);
//         }

//         if (_isNode(dirty)) {
//           return window.toStaticHTML(dirty.outerHTML);
//         }
//       }

//       return dirty;
//     }

//     /* Assign config vars */
//     if (!SET_CONFIG) {
//       _parseConfig(cfg);
//     }

//     /* Clean up removed elements */
//     DOMPurify.removed = [];

//     if (IN_PLACE) {
//       /* No special handling necessary for in-place sanitization */
//     } else if (dirty instanceof Node) {
//       /* If dirty is a DOM element, append to an empty document to avoid
//          elements being stripped by the parser */
//       body = _initDocument('<!-->');
//       importedNode = body.ownerDocument.importNode(dirty, true);
//       if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {
//         /* Node is already a body, use as is */
//         body = importedNode;
//       } else {
//         // eslint-disable-next-line unicorn/prefer-node-append
//         body.appendChild(importedNode);
//       }
//     } else {
//       /* Exit directly if we have nothing to do */
//       if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {
//         return trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
//       }

//       /* Initialize the document to work on */
//       body = _initDocument(dirty);

//       /* Check we have a DOM node from the data */
//       if (!body) {
//         return RETURN_DOM ? null : emptyHTML;
//       }
//     }

//     /* Remove first element node (ours) if FORCE_BODY is set */
//     if (body && FORCE_BODY) {
//       _forceRemove(body.firstChild);
//     }

//     /* Get node iterator */
//     var nodeIterator = _createIterator(IN_PLACE ? dirty : body);

//     /* Now start iterating over the created document */
//     while (currentNode = nodeIterator.nextNode()) {
//       /* Fix IE's strange behavior with manipulated textNodes #89 */
//       if (currentNode.nodeType === 3 && currentNode === oldNode) {
//         continue;
//       }

//       /* Sanitize tags and elements */
//       if (_sanitizeElements(currentNode)) {
//         continue;
//       }

//       /* Shadow DOM detected, sanitize it */
//       if (currentNode.content instanceof DocumentFragment) {
//         _sanitizeShadowDOM(currentNode.content);
//       }

//       /* Check attributes, sanitize if necessary */
//       _sanitizeAttributes(currentNode);

//       oldNode = currentNode;
//     }

//     oldNode = null;

//     /* If we sanitized `dirty` in-place, return it. */
//     if (IN_PLACE) {
//       return dirty;
//     }

//     /* Return sanitized string or DOM */
//     if (RETURN_DOM) {
//       if (RETURN_DOM_FRAGMENT) {
//         returnNode = createDocumentFragment.call(body.ownerDocument);

//         while (body.firstChild) {
//           // eslint-disable-next-line unicorn/prefer-node-append
//           returnNode.appendChild(body.firstChild);
//         }
//       } else {
//         returnNode = body;
//       }

//       if (RETURN_DOM_IMPORT) {
//         /* AdoptNode() is not used because internal state is not reset
//                (e.g. the past names map of a HTMLFormElement), this is safe
//                in theory but we would rather not risk another attack vector.
//                The state that is cloned by importNode() is explicitly defined
//                by the specs. */
//         returnNode = importNode.call(originalDocument, returnNode, true);
//       }

//       return returnNode;
//     }

//     var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;

//     /* Sanitize final string template-safe */
//     if (SAFE_FOR_TEMPLATES) {
//       serializedHTML = serializedHTML.replace(MUSTACHE_EXPR$$1, ' ');
//       serializedHTML = serializedHTML.replace(ERB_EXPR$$1, ' ');
//     }

//     return trustedTypesPolicy ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
//   };


//              class HTML {
                
//                  static escape(str) {
//                      // @see https://stackoverflow.com/a/4835406
//                      let map = {
//                          '&': '&amp;',
//                          '<': '&lt;',
//                          '>': '&gt;',
//                          '"': '&quot;',
//                          "'": '&#039;'
//                      };
                
//                      return str.replace(/[&<>"']/g, function(m) { return map[m]; });
//                  }
                
//                  static fragment(html) {
//                      let template = document.createElement('template');
//                      template.innerHTML = DOMPurify.sanitize(html);
//                      return template.content;
//                  }
                
//                  static element(html) {
//                      return HTML.fragment(html).firstElementChild;
//                  }
                
//                  static inner(node, html) {
//                      if (typeof node == 'undefined' || node === null) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
//                      if (typeof node == "string") {
//                          node = document.querySelector(node);
//                      }
//                      if (!(node instanceof Element)) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
                        
//                      node.innerHTML = DOMPurify.sanitize(html);
//                      return node;
//                  }
                
//                  static replace(node, html) {
//                      if (typeof node == 'undefined' || node === null) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
//                      if (typeof node == "string") {
//                          node = document.querySelector(node);
//                      }
//                      if (!(node instanceof Element)) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
                
//                      node.outerHTML = DOMPurify.sanitize(html);
//                      return node;
//                  }
                
//                  static wrap(node, html) {
//                      if (typeof node == 'undefined' || node === null) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
//                      if (typeof node == "string") {
//                          node = document.querySelector(node);
//                      }
//                      if (!(node instanceof Element)) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
                
//                      let wrapper = HTML.element(html);
//                      node.replaceWith(wrapper);
//                      wrapper.append(node);
//                      return wrapper;
//                  }
                
//                  static adjacent(node, position, html) {
//                      if (typeof node == 'undefined' || node === null) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
//                      if (typeof node == "string") {
//                          node = document.querySelector(node);
//                      }
//                      if (!(node instanceof Element)) {
//                          console.warn(`${node} is not an Element.`);
//                          return null;
//                      }
                        
//                      node.insertAdjacentHTML(position, DOMPurify.sanitize(html));
//                      return node;
//                  }
                
//                  static beforeBegin(node, html) {
//                      HTML.adjacent(node, "beforebegin", html);
//                  }
                
//                  static afterBegin(node, html) {
//                      HTML.adjacent(node, "afterbegin", html);
//                  }
                
//                  static beforeEnd(node, html) {
//                      HTML.adjacent(node, "beforeend", html);
//                  }
                
//                  static afterEnd(node, html) {
//                      HTML.adjacent(node, "afterend", html);
//                  }
//              }
                
//              class GroupsPageClass {
                
//                  constructor() {
//                      this._groups = Array.from(document.querySelectorAll(".group_block"));
//                      this._initSort = true;
                
//                      this._moveSearchBar();
//                      this._addSort();
//                      this._addManageBtn();
//                  }
                
//                  _moveSearchBar() {
//                      // move the search bar to the same position as on friends page
//                      let container = HTML.wrap("#search_text_box", '<div class="searchBarContainer"></div>');
//                      document.querySelector("#search_results").insertAdjacentElement("beforebegin", container);
//                  }
                
//                  _addSort() {
//                      document.querySelector("span.profile_groups.title").insertAdjacentElement("afterend", Sortbox.get(
//                          "groups",
//                          [
//                              ["default", Localization.str.theworddefault],
//                              ["members", Localization.str.members],
//                              ["names", Localization.str.name]
//                          ],
//                          SyncedStorage.get("sortgroupsby"),
//                          (sortBy, reversed) => { this._sortGroups(sortBy, reversed) },
//                          "sortgroupsby")
//                      );
                
//                      let sortbox = document.querySelector("div.es-sortbox");
//                      sortbox.style.flexGrow = "2";
//                      sortbox.style.marginRight = "20px";
//                      sortbox.style.marginTop = "0";
//                      sortbox.style.textAlign = "right";
//                  }
                
//                  _getSortFunc(sortBy) {
//                      let property = `esSort${sortBy}`;
//                      switch(sortBy) {
//                          case "default":
//                              return (a, b) => Number(a.dataset[property]) - Number(b.dataset[property]);
//                          case "members":
//                              return (a, b) => Number(b.dataset[property]) - Number(a.dataset[property]);
//                          case "names":
//                              return (a, b) => a.dataset[property].localeCompare(b.dataset[property]);
//                      }
//                  }
                
//                  _sortGroups(sortBy, reversed) {
//                      if (this._groups.length === 0) { return; }
                
//                      if (this._initSort) {
                
//                          let i = 0;
//                          for (let group of this._groups) {
//                              let name = group.querySelector(".groupTitle > a").textContent;
//                              let membercount = Number(group.querySelector(".memberRow > a").textContent.match(/\d+/g).join(""));
//                              group.dataset.esSortdefault = i.toString();
//                              group.dataset.esSortnames = name;
//                              group.dataset.esSortmembers = membercount.toString();
//                              i++;
//                          }
                
//                          this._initSort = false;
//                      }
                
//                      this._groups.sort(this._getSortFunc(sortBy, `esSort${sortBy}`));
                
//                      let searchResults = document.querySelector("#search_results_empty");
//                      for (let group of this._groups) {
//                          if (reversed) {
//                              searchResults.insertAdjacentElement("afterend", group);
//                          } else {
//                              searchResults.parentElement.appendChild(group);
//                          }
//                      }
//                  }
                
//                  _addManageBtn() {
//                      if (this._groups.length === 0) { return; }
//                      if (!this._groups[0].querySelector(".actions")) { return; }
                
//                      let groupsStr = Localization.str.groups;
                
//                      HTML.beforeEnd(".title_bar", 
//                          `<button id="manage_friends_control" class="profile_friends manage_link btnv6_blue_hoverfade btn_medium btn_uppercase">
//                              <span>${groupsStr.manage_groups}</span>
//                          </button>`);
                
//                      HTML.afterEnd(".title_bar",
//                          `<div id="manage_friends" class="manage_friends_panel">
//                              <div class="row">${groupsStr.action_groups}
//                                  <span class="row">
//                                      <span class="dimmed">${groupsStr.select}</span>
//                                      <span class="selection_type" id="es_select_all">${Localization.str.all}</span>
//                                      <span class="selection_type" id="es_select_none">${Localization.str.none}</span>
//                                      <span class="selection_type" id="es_select_inverse">${Localization.str.inverse}</span>
//                                  </span>
//                              </div>
//                              <div class="row">
//                                  <span class="manage_action anage_action btnv6_lightblue_blue btn_medium btn_uppercase" id="es_leave_groups">
//                                      <span>${groupsStr.leave}</span>
//                                  </span>
//                                  <span id="selected_msg_err" class="selected_msg error hidden"></span>
//                                  <span id="selected_msg" class="selected_msg hidden">${groupsStr.selected.replace("__n__", `<span id="selected_count"></span>`)}</span>
//                              </div>
//                              <div class="row"></div>
//                          </div>`);
                
//                      for (let group of this._groups) {
//                          group.classList.add("selectable");
//                          HTML.afterBegin(group, 
//                              `<div class="indicator select_friend">
//                                  <input class="select_friend_checkbox" type="checkbox">
//                              </div>`);
//                          group.querySelector(".select_friend").addEventListener("click", () => {
//                              group.classList.toggle("selected");
//                              group.querySelector(".select_friend_checkbox").checked = group.classList.contains("selected");
//                              ExtensionLayer.runInPageContext(() => { UpdateSelection(); });
//                          });    
//                      }
                
//                      document.querySelector("#manage_friends_control").addEventListener("click", () => {
//                          ExtensionLayer.runInPageContext(() => { ToggleManageFriends(); });
//                      });
                
//                      document.querySelector("#es_select_all").addEventListener("click", () => {
//                          ExtensionLayer.runInPageContext(() => { SelectAll(); });
//                      });
                
//                      document.querySelector("#es_select_none").addEventListener("click", () => {
//                          ExtensionLayer.runInPageContext(() => { SelectNone(); });
//                      });
                
//                      document.querySelector("#es_select_inverse").addEventListener("click", () => {
//                          ExtensionLayer.runInPageContext(() => { SelectInverse(); });
//                      });
                
//                      document.querySelector("#es_leave_groups").addEventListener("click", () => this._leaveGroups());
//                  };
                
//                  async _leaveGroups() {
//                      let selected = [];
                
//                      for (let group of this._groups) {
//                          if (!group.classList.contains("selected")) {
//                              continue;
//                          }
                
//                          let actions = group.querySelector(".actions");
//                          let admin = actions.querySelector("[href*='/edit']");
//                          let split = actions.querySelector("[onclick*=ConfirmLeaveGroup]")
//                              .getAttribute("onclick").split(/'|"/);
//                          let id = split[1];
                
//                          if (admin) {
//                              let name = split[3];
                
//                              let body = Localization.str.groups.leave_admin_confirm.replace("__name__", `<a href=\\"/gid/${id}\\" target=\\"_blank\\">${name}</a>`);
//                              let result = await ConfirmDialog.open(Localization.str.groups.leave, body);
//                              let cont = (result === "OK");
//                              if (!cont) {
//                                  group.querySelector(".select_friend").click();
//                                  continue;
//                              }
//                          }
                
//                          selected.push([id, group]);
//                      }
                
//                      if (selected.length > 0) {
//                          let body = Localization.str.groups.leave_groups_confirm.replace("__n__", selected.length);
//                          let result = await ConfirmDialog.open(Localization.str.groups.leave, body);
                
//                          if (result === "OK") {
//                              for (let tuple of selected) {
//                                  let [id, group] = tuple;
//                                  let res = await this._leaveGroup(id).catch(err => console.error(err));
                
//                                  if (!res || !res.success) {
//                                      console.error("Failed to leave group " + id);
//                                      continue;
//                                  }
                
//                                  group.style.opacity = "0.3";
//                                  group.querySelector(".select_friend").click();
//                              }
//                          }
//                      }
//                  }
                
//                  _leaveGroup(id) {
//                      let formData = new FormData();
//                      formData.append("sessionid", User.getSessionId());
//                      formData.append("steamid", User.steamId);
//                      formData.append("ajax", 1);
//                      formData.append("action", "leave_group");
//                      formData.append("steamids[]", id);
                
//                      return RequestData.post(User.profileUrl + "/friends/action", formData, {
//                          withCredentials: true
//                      }, "json");
//                  }
//              }

class menu_groups_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                //修改html代码并注册事件,使点击后和刷新后的ui都保持一致
                //jQuery(".profile_groups.title_bar").remove(); //删除
                
                // jQuery("#groups_list").prepend('\
                // <div class="profile_groups title_bar">\
                //      <span class="profile_groups title">您的组</span>\
                //      <div class="es-sortbox es-sortbox--groups" style="flex-grow: 2; margin-right: 20px; margin-top: 0px; text-align: right;">\
                //              <div class="es-sortbox__label">排序依据:</div>\
                //                      <div class="es-sortbox__container">\
                //                              <input value="default" name="groups" type="hidden" id="sort_by_groups">\
                //                              <a id="sort_by_groups_trigger" class="trigger">默认</a>\
                //                              <div class="es-dropdown">\
                //                                      <ul class="es-dropdown__list dropdownhidden" id="sort_by_groups_droplist">\
                //                                              <li><a id="sort_by_groups_default" tabindex="99999" class="highlighted_selection">默认</a></li>\
                //                                              <li><a id="sort_by_groups_members" tabindex="99999" class="inactive_selection">成员</a></li>\
                //                                              <li><a id="sort_by_groups_names" tabindex="99999" class="inactive_selection">名称</a></li>\
                //                                      </ul>\
                //                              </div>\
                //                      </div>\
                //                      <span class="es-sortbox__reverse">↓</span>\
                //              </div>\
                //      <button class="profile_friends manage_link btnv6_blue_hoverfade btn_medium btn_uppercase" id="manage_friends_control">\
                //              <span>管理组1</span>\
                //     </button>\
                //      </div>\
                //      \
                //      <div class="manage_friends_panel" id="manage_friends">\
                //              <div class="row">请在下方选择您要操作的组。\
                //                      <span class="row">\
                //                              <span class="dimmed">选择:</span>\
                //                                      <span id="es_select_all" class="selection_type">全部</span>\
                //                                      <span id="es_select_none" class="selection_type">无</span>\
                //                                      <span id="es_select_inverse" class="selection_type">逆序</span>\
                //                              </span>\
                //              </div>\
                //              <div class="row">\
                //                      <span id="es_leave_groups" class="manage_action anage_action btnv6_lightblue_blue btn_medium btn_uppercase">\
                //                              <span>离开组</span>\
                //                      </span>\
                //                      <span class="selected_msg error hidden" id="selected_msg_err"></span>\
                //                      <span class="selected_msg hidden" id="selected_msg">已选择 <span id="selected_count"></span> 个。</span>\
                //              </div>\
                //              <div class="row"></div>\
                //      </div>\
                //      \
                //      <div class="searchBarContainer">\
                //              <input name="search_text_box" id="search_text_box" class="groups_search_text_box" value="" onkeyup="ShowMatching( \'search_results\', \'group_block\', \'data-search\', $J(\'#search_text_box\').val(), UpdateGroupList );" autocomplete="off" autofocus="" placeholder="通过名称搜索组1">\
                //      </div>\
                // </div>\
                // ');
                
                //正常html代码
                jQuery("#manage_friends").after(groupUI_html);
                
                // document.querySelector("#manage_friends_control").addEventListener("click", () => {
                //      ToggleManageFriends();
                //      var obj = jQuery(".group_block.invite_row");
                        
                //      if(obj.hasClass("manage")){
                //              obj.removeClass("selectable");
                //              obj.removeClass("manage");
                //      }
                //      else{
                //              obj.addClass("selectable");
                //              obj.addClass("manage");
                //      }
                                
                // });
                
                // document.querySelector("#es_select_all").addEventListener("click", () => {
                //      SelectAll();
                // });
                
                // document.querySelector("#es_select_none").addEventListener("click", () => {
                //      SelectNone();
                // });
                
                // document.querySelector("#es_select_inverse").addEventListener("click", () => {
                //      SelectInverse();
                // });
                
                
                
                //document.querySelector("#es_leave_groups").addEventListener("click", () => this._leaveGroups());
                
                //(new GroupsPageClass());
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_groups_ui.initUI(false) != false){
                        await gc_menu_groups_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
 * UI类 - 组邀请 模块 UI具体实现
 * @class
 * @classdesc UI类 - 组邀请 模块 UI具体实现
 * @extends UI
 */
class menu_groups_invite_ui extends UI {
        constructor(arg) {
                super();
        }
        
        async initUI(type) { //type: true: 第一次加载, false: 再加载
        
                super.initUI();
        
                // 设置数据库
                // var db = new DB();
                // db.Test();
                // db.initAndCreateNewDBInstance({
                //      driver: [localforage.WEBSQL,
                //                      localforage.INDEXEDDB,
                //                      localforage.LOCALSTORAGE],
                //      name: 'Steam assistant-Conf',
                //      size: 10485760 //10mb
                // });
                
                g_db = new DB({ //设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Conf',
                        size: 10485760 //10mb
                },true);
                
                g_db1 = new DB({ //拓展功能
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Expand',
                        size: 10485760 //10mb
                },false);
                
                g_db2 = new DB({ //动态助手
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Activity',
                        size: 1073741824 //1gb
                },false);
                
                g_db3 = new DB({ //数据分析
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Friend',
                        size: 1073741824 //1gb
                },false);
                
                g_db4 = new DB({ //留言设置
                        driver: [localforage.WEBSQL,
                                        localforage.INDEXEDDB,
                                        localforage.LOCALSTORAGE],
                        name: 'Steam assistant-Comment',
                        size: 104857600 //100mb
                },false);
                
                await g_db.Write('g_conf',g_conf); //写入
                await g_db.Write('g_uiConf',g_uiConf); //写入
                //debugger
                //var data = await g_db.getAllKeyName();
                //console.log("data",data);
                //var data = await g_db.getKeyNameByIndex(1);
                //console.log("data",data);
                //var data = await g_db.getLength();
                //console.log("data",data);
                
                var data = await g_db.Read('g_conf'); //读取
                console.log("data",data);
                var data = await g_db.Read('g_uiConf'); //读取
                console.log("data",data);
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.Remove('g_conf'); //删除数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //await g_db.RemoveAll(); //删除所有数据
                //var data = await g_db.ReadAll(); //读取所有数据
                //console.log("data",data);
                //if(data.length == 0){
                //      console.log("没有数据!");
                //}
                
                if(getLoginStatus() == false){ //判断是否登录,如果没有登录则不需要继续运行
                        layer.alert('请先登录Steam,才能继续使用哦~', {icon: 0},function(index){
                                if(g_conf[0].autoLogin == 1){
                                        var obj = document.getElementsByClassName("global_action_link");
                                        for (let i = 0; i < obj.length; i++) {
                                                if(obj[i].className == "global_action_link"){
                                                        obj[i].click(); //跳转到登录页面
                                                }
                                        }
                                }
                        });
                        return false;
                }
                
                readConfInfo(g_steamID); //读取已保存的对应配置信息
                
                if(type){ //第一次加载才需要监听这些事件
                        
                        //1.监听url中的hash变化  //window.location.hash='state_online'  =>  https://steamcommunity.com/id/miku-39/friends#state_online //页面不刷新,url改变,定位到指定锚点
                        window.addEventListener('hashchange',function(event){
                                console.log("1.监听url中的hash变化" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //2.监听通过history来改变url的事件 //浏览器前进,后退等
                        window.addEventListener('popstate', function(event) {
                                console.log("2.监听通过history来改变url的事件" + event);
                                isReCreateUi(); //是否重新创建Ui
                        });
                        //3.监听pushState和replaceState行为 //pushState可以监听到本页替换超链接
                        var _wr = function(type) {
                                var orig = history[type];
                                return function() {
                                        var rv = orig.apply(this, arguments);
                                        var e = new Event(type);
                                        e.arguments = arguments;
                                        window.dispatchEvent(e);
                                        return rv;
                                };
                        };
                        history.pushState = _wr('pushState');
                        history.replaceState = _wr('replaceState');
                        
                        window.addEventListener('replaceState', function(e) {
                                console.log('监听到replaceState!');
                                isReCreateUi(); //是否重新创建Ui
                        });
                        window.addEventListener('pushState', function(e) {
                                console.log('监听到pushState!');
                                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url 
                                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                                isReCreateUi(); //是否重新创建Ui
                        });
                }
                
        }
        async createUI() {
                super.createUI();
                
                //正常html代码
                jQuery("#manage_friends").after(groupUI_html);
                
                if(g_uiConf.isShowQuickNavigationBar){ //是否显示快速导航栏
                        //快捷导航栏
                        jQuery(".responsive_page_template_content").after(ExpandUI_QuickNavigationBar_html);
                }
                UI.prototype.uiHandler(); //UI与UI事件等相关的处理程序
        }
        
        async reCreateUI(){
                if(await gc_menu_groups_invite_ui.initUI(false) != false){
                        await gc_menu_groups_invite_ui.createUI();
                }
        }
        
        async private_saveUIConfFile() {
        
        }
        async private_readUIConfFile() {
        
        }
}

/**
 * uiHandler.js
 */

var commentTextarea_box; /*所有输入框*/

UI.prototype.uiHandler = async function(){ //UI与UI事件等相关的处理程序
        //2.构建UI
        layui.use(['laydate', 'laypage', 'layer', 'table', 'carousel', 'upload', 'element', 'slider', 'colorpicker', 'form'], function() {
                var $ = layui.$;
                var laydate = layui.laydate //日期
                        ,laypage = layui.laypage //分页
                        ,layer = layui.layer //弹层
                        ,table = layui.table //表格
                        ,carousel = layui.carousel //轮播
                        ,upload = layui.upload //上传
                        ,element = layui.element //元素操作
                        ,slider = layui.slider //滑块
                        ,colorpicker = layui.colorpicker
                        ,form = layui.form;
                //console.log(layui.layer);
        
                //向世界问个好
                //layer.msg('Hello World');
                //layer.alert('见到你真的很高兴', {icon: 6});
                //layui.layer.alert("text");
                
        
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 好友数据统计 图表配置
        table.render({
            elem: '#friendStatistics'
            //,url:'/demo/table/user/'
            ,cellMinWidth: 80
            ,cols: [[
              {type:'numbers'}
              ,{type: 'checkbox'}
              ,{field:'Id', title:'ID', width:100, unresize: true, sort: true}
              ,{field:'Name', title:'名称', templet: '#usernameTpl'}
              ,{field:'Remark', title:'备注'}
              ,{field:'City', title: '国籍(城市)', minWidth:120, sort: true}
                  ,{field:'Lever', title: '等级', minWidth:120, sort: true}
                  ,{field:'Friends', title: '好友数量', minWidth:120, sort: true}
                  ,{field:'Games', title: '游戏数量', minWidth:120, sort: true}
                  ,{field:'DLCs', title: 'dlc数量', minWidth:120, sort: true}
                  ,{field:'Workshops', title: '创意工坊数量', minWidth:120, sort: true}
                  ,{field:'Artworks', title: '艺术作品数量', minWidth:120, sort: true}
                  ,{field:'Activitys', title: '动态数量', minWidth:120, sort: true}
              ,{field:'front', title:'置顶', width:85, templet: '#switchTpl', unresize: true}
              ,{field:'lock', title:'是否锁定', width:110, templet: '#checkboxTpl', unresize: true}
            ]]
                ,data: []
            ,page: true
          });
        
        //加载数据
        table.reload('friendStatistics', {
                elem: '#friendStatistics'
                ,page: true
                ,data: [
                        {Id: "1"
                        ,Name: "xxx"
                        ,Remark: "xx"
                        ,City: "xx"
                        ,Lever: "1"
                        ,Friends: "1"
                        ,Games: "1"
                        ,DLCs: '1'
                        ,Workshops: '1'
                        ,Artworks: '1'
                        ,Activitys: '1'
                        },
                        {Id: "1"
                        ,Name: "xxx"
                        ,Remark: "xx"
                        ,City: "xx"
                        ,Lever: "1"
                        ,Friends: "1"
                        ,Games: "1"
                        ,DLCs: '1'
                        ,Workshops: '1'
                        ,Artworks: '1'
                        ,Activitys: '1'
                        },
                        {Id: "1"
                        ,Name: "xxx"
                        ,Remark: "xx"
                        ,City: "xx"
                        ,Lever: "1"
                        ,Friends: "1"
                        ,Games: "1"
                        ,DLCs: '1'
                        ,Workshops: '1'
                        ,Artworks: '1'
                        ,Activitys: '1'
                        },
                ]
        });
        
        //监听置顶操作
        form.on('switch(frontDemo)', function(obj){
          layer.tips(this.value + ' ' + this.name + ':'+ obj.elem.checked, obj.othis);
        });
        
        //监听锁定操作
        form.on('checkbox(lockDemo)', function(obj){
          layer.tips(this.value + ' ' + this.name + ':'+ obj.elem.checked, obj.othis);
        });
        
        //表单取值
        layui.$('#LAY-component-form-getval').on('click', async function(){
                var data = form.val('example');
                //var jsonStr = JSON.stringify(data);
                switch (data.modules){
                        case '1':
                                await setSelectTextMode(1);
                                break;
                        case '2':
                                await setSelectTextMode(2);
                                break;
                        case '3':
                                await setSelectTextMode(3);
                                break;  
                        case '4':
                                await setSelectTextMode(4);
                                break;  
                        case '5':
                                await setSelectTextMode(5);
                                break;  
                        case '6':
                                await setSelectTextMode(6);
                                break;  
                        case '7':
                                await setSelectTextMode(7);
                                break;  
                        case '8':
                                await setSelectTextMode(8);
                                break;  
                        default:
                                break;
                }
                console.log(data.modules);
                _addIDtoHandleLostfocus(); //添加ID来处理丢失的焦点
        });
        
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 留言数据统计 图表配置
        // Highcharts.setOptions({
        //              global : {
        //                              useUTC : false
        //              }
        // });
        // // Create the chart
        // Highcharts.stockChart('container_commentStatistics', {
        //              chart : {
        //                              events : {
        //                                              load : function () {
        //                                                              // set up the updating of the chart each second
        //                                                              var series = this.series[0];
        //                                                              setInterval(function () {
        //                                                                              var x = (new Date()).getTime(), // current time
        //                                                                                              y = Math.round(Math.random() * 100);
        //                                                                              series.addPoint([x, y], true, true);
        //                                                              }, 1000);
        //                                              }
        //                              }
        //              },
        //              rangeSelector: {
        //                              buttons: [{
        //                                              count: 1,
        //                                              type: 'minute',
        //                                              text: '1M'
        //                              }, {
        //                                              count: 5,
        //                                              type: 'minute',
        //                                              text: '5M'
        //                              }, {
        //                                              type: 'all',
        //                                              text: 'All'
        //                              }],
        //                              inputEnabled: false,
        //                              selected: 0
        //              },
        //              title : {
        //                              text : 'Live random data'
        //              },
        //              tooltip: {
        //                              split: false
        //              },
        //              exporting: {
        //                              enabled: false
        //              },
        //              series : [{
        //                              name : '随机数据',
        //                              data : (function () {
        //                                              // generate an array of random data
        //                                              var data = [], time = (new Date()).getTime(), i;
        //                                              for (i = -999; i <= 0; i += 1) {
        //                                                              data.push([
        //                                                                              time + i * 1000,
        //                                                                              Math.round(Math.random() * 100)
        //                                                              ]);
        //                                              }
        //                                              return data;
        //                              }())
        //              }]
        // });
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // // 关系网统计 图表配置
        // // Add the nodes option through an event call. We want to start with the parent
        // // item and apply separate colors to each child element, then the same color to
        // // grandchildren.
        // Highcharts.addEvent(
        //      Highcharts.seriesTypes.networkgraph,
        //      'afterSetOptions',
        //      function (e) {
        //              var colors = Highcharts.getOptions().colors,
        //                      i = 0,
        //                      nodes = {};
        //              e.options.data.forEach(function (link) {
        //                      if (link[0] === 'Proto Indo-European') {
        //                              nodes['Proto Indo-European'] = {
        //                                      id: 'Proto Indo-European',
        //                                      marker: {
        //                                              radius: 20
        //                                      }
        //                              };
        //                              nodes[link[1]] = {
        //                                      id: link[1],
        //                                      marker: {
        //                                              radius: 10
        //                                      },
        //                                      color: colors[i++]
        //                              };
        //                      } else if (nodes[link[0]] && nodes[link[0]].color) {
        //                              nodes[link[1]] = {
        //                                      id: link[1],
        //                                      color: nodes[link[0]].color
        //                              };
        //                      }
        //              });
        //              e.options.nodes = Object.keys(nodes).map(function (id) {
        //                      return nodes[id];
        //              });
        //      }
        // );
        // Highcharts.chart('container_relationshipStatistics', {
        //      chart: {
        //              type: 'networkgraph',
        //              height: '100%'
        //      },
        //      title: {
        //              text: 'The Indo-European Laungauge Tree'
        //      },
        //      subtitle: {
        //              text: 'A Force-Directed Network Graph in Highcharts'
        //      },
        //      plotOptions: {
        //              networkgraph: {
        //                      keys: ['from', 'to'],
        //                      layoutAlgorithm: {
        //                              enableSimulation: true
        //                      }
        //              }
        //      },
        //      series: [{
        //              dataLabels: {
        //                      enabled: true
        //              },
        //              data: [
        //                      ['Proto Indo-European', 'Balto-Slavic'],
        //                      ['Proto Indo-European', 'Germanic'],
        //                      ['Proto Indo-European', 'Celtic'],
        //                      ['Proto Indo-European', 'Italic'],
        //                      ['Proto Indo-European', 'Hellenic'],
        //                      ['Proto Indo-European', 'Anatolian'],
        //                      ['Proto Indo-European', 'Indo-Iranian'],
        //                      ['Proto Indo-European', 'Tocharian'],
        //                      ['Indo-Iranian', 'Dardic'],
        //                      ['Indo-Iranian', 'Indic'],
        //                      ['Indo-Iranian', 'Iranian'],
        //                      ['Iranian', 'Old Persian'],
        //                      ['Old Persian', 'Middle Persian'],
        //                      ['Indic', 'Sanskrit'],
        //                      ['Italic', 'Osco-Umbrian'],
        //                      ['Italic', 'Latino-Faliscan'],
        //                      ['Latino-Faliscan', 'Latin'],
        //                      ['Celtic', 'Brythonic'],
        //                      ['Celtic', 'Goidelic'],
        //                      ['Germanic', 'North Germanic'],
        //                      ['Germanic', 'West Germanic'],
        //                      ['Germanic', 'East Germanic'],
        //                      ['North Germanic', 'Old Norse'],
        //                      ['North Germanic', 'Old Swedish'],
        //                      ['North Germanic', 'Old Danish'],
        //                      ['West Germanic', 'Old English'],
        //                      ['West Germanic', 'Old Frisian'],
        //                      ['West Germanic', 'Old Dutch'],
        //                      ['West Germanic', 'Old Low German'],
        //                      ['West Germanic', 'Old High German'],
        //                      ['Old Norse', 'Old Icelandic'],
        //                      ['Old Norse', 'Old Norwegian'],
        //                      ['Old Norwegian', 'Middle Norwegian'],
        //                      ['Old Swedish', 'Middle Swedish'],
        //                      ['Old Danish', 'Middle Danish'],
        //                      ['Old English', 'Middle English'],
        //                      ['Old Dutch', 'Middle Dutch'],
        //                      ['Old Low German', 'Middle Low German'],
        //                      ['Old High German', 'Middle High German'],
        //                      ['Balto-Slavic', 'Baltic'],
        //                      ['Balto-Slavic', 'Slavic'],
        //                      ['Slavic', 'East Slavic'],
        //                      ['Slavic', 'West Slavic'],
        //                      ['Slavic', 'South Slavic'],
        //                      // Leaves:
        //                      ['Proto Indo-European', 'Phrygian'],
        //                      ['Proto Indo-European', 'Armenian'],
        //                      ['Proto Indo-European', 'Albanian'],
        //                      ['Proto Indo-European', 'Thracian'],
        //                      ['Tocharian', 'Tocharian A'],
        //                      ['Tocharian', 'Tocharian B'],
        //                      ['Anatolian', 'Hittite'],
        //                      ['Anatolian', 'Palaic'],
        //                      ['Anatolian', 'Luwic'],
        //                      ['Anatolian', 'Lydian'],
        //                      ['Iranian', 'Balochi'],
        //                      ['Iranian', 'Kurdish'],
        //                      ['Iranian', 'Pashto'],
        //                      ['Iranian', 'Sogdian'],
        //                      ['Old Persian', 'Pahlavi'],
        //                      ['Middle Persian', 'Persian'],
        //                      ['Hellenic', 'Greek'],
        //                      ['Dardic', 'Dard'],
        //                      ['Sanskrit', 'Sindhi'],
        //                      ['Sanskrit', 'Romani'],
        //                      ['Sanskrit', 'Urdu'],
        //                      ['Sanskrit', 'Hindi'],
        //                      ['Sanskrit', 'Bihari'],
        //                      ['Sanskrit', 'Assamese'],
        //                      ['Sanskrit', 'Bengali'],
        //                      ['Sanskrit', 'Marathi'],
        //                      ['Sanskrit', 'Gujarati'],
        //                      ['Sanskrit', 'Punjabi'],
        //                      ['Sanskrit', 'Sinhalese'],
        //                      ['Osco-Umbrian', 'Umbrian'],
        //                      ['Osco-Umbrian', 'Oscan'],
        //                      ['Latino-Faliscan', 'Faliscan'],
        //                      ['Latin', 'Portugese'],
        //                      ['Latin', 'Spanish'],
        //                      ['Latin', 'French'],
        //                      ['Latin', 'Romanian'],
        //                      ['Latin', 'Italian'],
        //                      ['Latin', 'Catalan'],
        //                      ['Latin', 'Franco-Provençal'],
        //                      ['Latin', 'Rhaeto-Romance'],
        //                      ['Brythonic', 'Welsh'],
        //                      ['Brythonic', 'Breton'],
        //                      ['Brythonic', 'Cornish'],
        //                      ['Brythonic', 'Cuymbric'],
        //                      ['Goidelic', 'Modern Irish'],
        //                      ['Goidelic', 'Scottish Gaelic'],
        //                      ['Goidelic', 'Manx'],
        //                      ['East Germanic', 'Gothic'],
        //                      ['Middle Low German', 'Low German'],
        //                      ['Middle High German', '(High) German'],
        //                      ['Middle High German', 'Yiddish'],
        //                      ['Middle English', 'English'],
        //                      ['Middle Dutch', 'Hollandic'],
        //                      ['Middle Dutch', 'Flemish'],
        //                      ['Middle Dutch', 'Dutch'],
        //                      ['Middle Dutch', 'Limburgish'],
        //                      ['Middle Dutch', 'Brabantian'],
        //                      ['Middle Dutch', 'Rhinelandic'],
        //                      ['Old Frisian', 'Frisian'],
        //                      ['Middle Danish', 'Danish'],
        //                      ['Middle Swedish', 'Swedish'],
        //                      ['Middle Norwegian', 'Norwegian'],
        //                      ['Old Norse', 'Faroese'],
        //                      ['Old Icelandic', 'Icelandic'],
        //                      ['Baltic', 'Old Prussian'],
        //                      ['Baltic', 'Lithuanian'],
        //                      ['Baltic', 'Latvian'],
        //                      ['West Slavic', 'Polish'],
        //                      ['West Slavic', 'Slovak'],
        //                      ['West Slavic', 'Czech'],
        //                      ['West Slavic', 'Wendish'],
        //                      ['East Slavic', 'Bulgarian'],
        //                      ['East Slavic', 'Old Church Slavonic'],
        //                      ['East Slavic', 'Macedonian'],
        //                      ['East Slavic', 'Serbo-Croatian'],
        //                      ['East Slavic', 'Slovene'],
        //                      ['South Slavic', 'Russian'],
        //                      ['South Slavic', 'Ukrainian'],
        //                      ['South Slavic', 'Belarusian'],
        //                      ['South Slavic', 'Rusyn']
        //              ]
        //      }]
        // });
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 当前配置统计 图表配置
        
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 查看好友配置统计 图表配置
        
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 多选下拉框
        _ySelects(jQuery);
        
        jQuery('.selectBox').ySelect({
                placeholder: '请先选择要翻译为的语言',
                searchText: '搜索~发现新世界~',
                showSearch: true,
                numDisplayed: 4,
                overflowText: '已选中 {n}项',
                isCheck: false
        });
        
        //单选框选中和取消选择
        if(jQuery('.nameAddType')[0] != undefined){
                //单选框选中和取消选中 https://segmentfault.com/q/1010000004945347
                jQuery('.nameAddType').on('click', function() {
                        var ischecked = jQuery(this).data('checked');
                        if (!ischecked && this.checked) {
                                jQuery(this).data('checked', true);
                        } else {
                                jQuery(this).prop('checked', false);
                                jQuery(this).data('checked', false);
                        }
                        console.log(jQuery(this).data('checked'))
                }).data('checked', jQuery('.nameAddType').get(0).checked);
        }
        
        
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------
        
                 //请选择日期
                  laydate.render({
                    elem: '#test-limit2'
                        ,trigger: 'click'
                    ,min: 0
                    ,max: 99999
                        ,done: function(value, date){
                          //layer.alert('你选择的日期是:' + value + '<br>获得的对象是' + JSON.stringify(date));
                          var endTime = new Date(date.year,date.month-1,date.date,date.hours,date.minutes,date.seconds,0).getTime(); //选择的时间
                          var startTime = Math.round(new Date()); //现在的时间
                          if(endTime <= startTime)
                          {
                                 layer.alert("请选择至少一天的时间差!");
                                return false;
                          }
                          let time = endTime >= startTime ? endTime - startTime: startTime - endTime; //计算时间差
                         
                          //计算出相差天数
                          var str = "";
                          let days = Math.floor(time / (24 * 3600 * 1000))
                          //计算出小时数
                          let leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
                          let hours = Math.floor(leave1 / (3600 * 1000))
                          //计算相差分钟数
                          let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
                          let minutes = Math.floor(leave2 / (60 * 1000))
                          //计算相差秒数
                          let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
                          //let seconds=Math.round(leave3/1000)
                          let seconds = leave3 / 1000
                          //if (days > 0)
                                str += days + "天";
                          //if (hours > 0)
                                str += hours + "小时";
                          //if (minutes > 0)
                                str += minutes + "分钟";
                          //if (seconds > 0)
                                str += seconds + "秒";
                        
                        var timeleftStr = "过"+ str +"后再留言";
                        var dayStr = "等待"+ (days+1) + "天, ";
                        
                          //console.log(str);
                          jQuery('#test-limit1')[0].value = dayStr + timeleftStr;
                        }
                  });
                  
                  // //请选择时间
                  // laydate.render({
                  //     elem: '#test14'
                  //     ,type: 'time'
                  //     ,format: 'H时m分s秒'
                         //  ,done: function(value, date){
                         //    //layer.alert('你选择的日期是:' + value + '<br>获得的对象是' + JSON.stringify(date));
                                // var endTime = new Date(date.year,date.month-1,date.date,date.hours,date.minutes,date.seconds,0).getTime(); //选择的时间
                                //   var startTime = Math.round(new Date()); //现在的时间
                                //   if(endTime <= startTime)
                                //   {
                                //       layer.alert("请选择至少一天的时间差!");
                                //      return false;
                                //   }
                                //   let time = endTime >= startTime ? endTime - startTime: startTime - endTime; //计算时间差
                                 
                                //   //计算出相差天数
                                //   var str = "";
                                //   let days = Math.floor(time / (24 * 3600 * 1000))
                                //   //计算出小时数
                                //   let leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
                                //   let hours = Math.floor(leave1 / (3600 * 1000))
                                //   //计算相差分钟数
                                //   let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
                                //   let minutes = Math.floor(leave2 / (60 * 1000))
                                //   //计算相差秒数
                                //   let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
                                //   //let seconds=Math.round(leave3/1000)
                                //   let seconds = leave3 / 1000
                                //   //if (days > 0)
                                //      str += days + "天";
                                //   //if (hours > 0)
                                //      str += hours + "小时";
                                //   //if (minutes > 0)
                                //      str += minutes + "分钟";
                                //   //if (seconds > 0)
                                //      str += seconds + "秒";
                                
                                // var timeleftStr = "过"+ str +"后再留言";
                                // var dayStr = "等待"+ (days+1) + "天, ";//"过1小时后再留言"
                                
                                //   //console.log(str);
                         //    jQuery('#test15')[0].value = dayStr + timeleftStr;
                         //  }
                  //   });
                
                        table.render({
                            elem: '#test'
                                        // ,height: 315 //容器高度
                            // ,url:'memberStatus?search=1'
                            ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                            ,data: []
                            // ,autoSort: false //取消自动排序
                            ,cols: [
                                [
                                // {field:'id', title: 'ID', align: 'center',sort: true}
                                ,{field:'memberName', title: 'ID', align: 'center',sort: true, width: '8%'} //width 支持:数字、百分比和不填写。你还可以通过 minWidth 参数局部定义当前单元格的最小宽度,layui 2.2.1 新增
                                ,{field:'team', title: '名称', align: 'center', sort: true,width: '12%'} //单元格内容水平居中
                                ,{field:'deviceCode', title: '留言时间', align: 'center',width: '17%',sort: true} //width 支持:数字、百分比和不填写。你还可以通过 minWidth 参数局部定义当前单元格的最小宽度,layui 2.2.1 新增
                                // ,{field:'hp', title: '血量', align: 'center',sort: true}
                                ,{field:'hp', title: '待留言好友', align: 'center',width: '18%',sort: true}
                                ,{field:'hitedNumber', title: '留言内容', align: 'center',width: '15%',sort: true}
                                ,{field:'hitNumber', title: '已执行次数', align: 'center',width: '10%',sort: true}
                                ,{field:'rePlenishBullet', title: '备注', align: 'center',width: '10%',sort: true}
                                ,{field:'reviveNum', title: '设置', align: 'center',width: '10%',sort: true},
                            ]
                                                ]//标题栏 //设置表头
                            ,done:function (res,currentCount) {
                                element.render()
                            }
                        });
                                
                 //监听单元格编辑
                   table.on('edit(test3)', function(obj){
                     var value = obj.value //得到修改后的值
                     ,data = obj.data //得到所在行所有键值
                     ,field = obj.field; //得到字段
                     layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改为:'+ value);
                   });
                
                table.reload('test', {
                        elem: '#test'
                        ,page: true
                        ,data: [
                                {memberName: "1"
                                ,team: "留言1"
                                ,deviceCode: "2020-5-1"
                                ,hp: "All"
                                ,hitedNumber: "早安安"
                                ,hitNumber: "0"
                                ,rePlenishBullet: "无"
                                ,reviveNum: '<button type="button" class="layui-btn" id="editFriendGroup" style="height: 28px;line-height: 28px;width: 100%;padding: 0px;">属性</button>'
                                },
                                {memberName: "1"
                                ,team: "留言1"
                                ,deviceCode: "2020-5-1"
                                ,hp: "All"
                                ,hitedNumber: "早安安"
                                ,hitNumber: "0"
                                ,rePlenishBullet: "无"
                                ,reviveNum: '<button type="button" class="layui-btn" id="editFriendGroup" style="height: 28px;line-height: 28px;width: 100%;padding: 0px;">属性</button>'
                                },
                                {memberName: "1"
                                ,team: "留言1"
                                ,deviceCode: "2020-5-1"
                                ,hp: "All"
                                ,hitedNumber: "早安安"
                                ,hitNumber: "0"
                                ,rePlenishBullet: "无"
                                ,reviveNum: '<button type="button" class="layui-btn" id="editFriendGroup" style="height: 28px;line-height: 28px;width: 100%;padding: 0px;">属性</button>'
                                },
                        ]
                });
                
                
                //开启全功能
                  colorpicker.render({
                    elem: '#test-all1'
                    ,color: 'rgba(7, 155, 140, 1)'
                    ,format: 'rgb'
                    ,predefine: true
                    ,alpha: true
                    ,done: function(color){
                      $('#test-all-input').val(color); //向隐藏域赋值
                      layer.tips('给指定隐藏域设置了颜色值:'+ color, this.elem);
                      
                      color || this.change(color); //清空时执行 change
                    }
                    ,change: function(color){
                      //给当前页面头部和左侧设置主题色
                      $('.header-demo,.layui-side .layui-nav').css('background-color', color);
                    }
                  });
                  //开启全功能
                    colorpicker.render({
                      elem: '#test-all2'
                      ,color: 'rgba(7, 155, 140, 1)'
                      ,format: 'rgb'
                      ,predefine: true
                      ,alpha: true
                      ,done: function(color){
                        $('#test-all-input').val(color); //向隐藏域赋值
                        layer.tips('给指定隐藏域设置了颜色值:'+ color, this.elem);
                        
                        color || this.change(color); //清空时执行 change
                      }
                      ,change: function(color){
                        //给当前页面头部和左侧设置主题色
                        $('.header-demo,.layui-side .layui-nav').css('background-color', color);
                      }
                    });
                        //开启全功能
                          colorpicker.render({
                            elem: '#test-all3'
                            ,color: 'rgba(7, 155, 140, 1)'
                            ,format: 'rgb'
                            ,predefine: true
                            ,alpha: true
                            ,done: function(color){
                              $('#test-all-input').val(color); //向隐藏域赋值
                              layer.tips('给指定隐藏域设置了颜色值:'+ color, this.elem);
                              
                              color || this.change(color); //清空时执行 change
                            }
                            ,change: function(color){
                              //给当前页面头部和左侧设置主题色
                              $('.header-demo,.layui-side .layui-nav').css('background-color', color);
                            }
                          });
                        //开启全功能
                          colorpicker.render({
                            elem: '#test-all4'
                            ,color: 'rgba(7, 155, 140, 1)'
                            ,format: 'rgb'
                            ,predefine: true
                            ,alpha: true
                            ,done: function(color){
                              $('#test-all-input').val(color); //向隐藏域赋值
                              layer.tips('给指定隐藏域设置了颜色值:'+ color, this.elem);
                              
                              color || this.change(color); //清空时执行 change
                            }
                            ,change: function(color){
                              //给当前页面头部和左侧设置主题色
                              $('.header-demo,.layui-side .layui-nav').css('background-color', color);
                            }
                          });
                        //开启全功能
                          colorpicker.render({
                            elem: '#test-all5'
                            ,color: 'rgba(7, 155, 140, 1)'
                            ,format: 'rgb'
                            ,predefine: true
                            ,alpha: true
                            ,done: function(color){
                              $('#test-all-input').val(color); //向隐藏域赋值
                              layer.tips('给指定隐藏域设置了颜色值:'+ color, this.elem);
                              
                              color || this.change(color); //清空时执行 change
                            }
                            ,change: function(color){
                              //给当前页面头部和左侧设置主题色
                              $('.header-demo,.layui-side .layui-nav').css('background-color', color);
                            }
                          });
                          
                          //监听折叠
                           element.on('collapse(test)', function(data){
                             layer.msg('展开状态:'+ data.show);
                           });
                          
                          //请选择日期
                           laydate.render({
                             elem: '#test-limit3'
                                 ,type: 'date'
                                 ,trigger: 'click'
                                 ,range: '~'
                             ,min: -7
                             ,max: 0
                                 ,value: '2020-4-12 ~ 2020-4-19'
                                 ,isInitValue: true
                           });
                          
                          //监听指定开关
                          form.on('switch(switchTest)', async function(data){
                              layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
                                offset: '6px'
                              });
                              layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis);
                                        
                                  if(this.checked == true) //打开了
                                  {
                                        await gc_friAct.Run();
                                  }
                                  else //关闭了
                                  {
                                        gc_friAct.Stop();
                                  }
                                  
                            });
                          
                          
                          //但是,如果你的HTML是动态生成的,自动渲染就会失效
                          //因此你需要在相应的地方,执行下述方法来进行渲染
                          form.render();
                          
                          element.render('collapse');
        });
        
        //-------------------------------------------------------------------------------------------------------------------------------
        if (opinion() == 0) { //判断页面是pc端还是移动端
                dvWidthFix();
        }
        ToggleManageFriends(); //展开管理好友列表按钮
        
        add_commentthread_textarea_allSelect(); //添加留言框全选
        
        var Obj = new CEmoticonPopup($J('#emoticonbtn'), $J('#comment_textarea')); //表情相关
        //ShowAlertDialog( 'Community Ban & Delete Comments', 'You do not have permissions to view this or you are not logged in.' );
        //ShowConfirmDialog('您点击了移除好友按钮', '是否要移除选择的好友?','移除好友');
        
        CEmoticonPopup.prototype.GetEmoticonClickClosure = function(strEmoticonName) { //重写,以适配多留言框
            var _this = this;
            var strTextToInsert = ':' + strEmoticonName + ':';
            return function() {
                        console.log("表情添加到 "+inBoxonblurID);
                        
                        let obj;
                                switch (inBoxonblurID){
                                        case 0:
                                                obj = document.getElementById("comment_textarea");
                                                break;
                                        case 1:
                                                obj = document.getElementById("comment_textarea_en");
                                                break;
                                        case 2:
                                                obj = document.getElementById("comment_textarea_jp");
                                                break;
                                        case 3:
                                                obj = document.getElementById("comment_textarea_zhc");
                                                break;
                                        case 4:
                                                obj = document.getElementById("comment_textarea_zh_sg");
                                                break;
                                        case 5:
                                                obj = document.getElementById("comment_textarea_zh_hant");
                                                break;
                                        case 6:
                                                obj = document.getElementById("comment_textarea_zh_hk");
                                                break;
                                        case 7:
                                                obj = document.getElementById("comment_textarea_zh_mo");
                                                break;
                                        case 8:
                                                obj = document.getElementById("comment_textarea_zh_tw");
                                                break;
                                        default:
                                                break;
                                }
                        
                var elTextArea = obj; //设置为指定的留言框
                if (elTextArea) {
                    var nSelectionStart = elTextArea.selectionStart;
                    elTextArea.value = elTextArea.value.substr(0, nSelectionStart) + strTextToInsert + elTextArea.value.substr(nSelectionStart);
                    elTextArea.selectionStart = nSelectionStart + strTextToInsert.length;
                }
        
                obj.focus(); //获取焦点,如果不在视野里,会把镜头拉过去
        
                _this.DismissPopup(); //关闭表情输入框
        
                if (window.DismissEmoticonHover)
                    window.setTimeout(DismissEmoticonHover, 1);
            };
        };
        
        CEmoticonPopup.prototype.BuildPopup = function(){ //重写,以彻底隐藏表情选择框的同时提前加载表情
                this.m_$Popup = $J('<div/>', {'class': 'emoticon_popup_ctn' } );
                this.m_$Popup[0].style.display = "none"; //提前隐藏
        
                var $PopupInner = $J('<div/>', {'class': 'emoticon_popup' } );
                this.m_$Popup.append( $PopupInner );
                var $Content = $J('<div/>', {'class': 'emoticon_popup_content' } );
                $PopupInner.append( $Content );
        
                for( var i = 0; i < CEmoticonPopup.sm_rgEmoticons.length; i++ )
                {
                        var strEmoticonName = CEmoticonPopup.sm_rgEmoticons[i].replace( /:/g, '' );
                        var strEmoticonURL = 'https://steamcommunity-a.akamaihd.net/economy/emoticon/' + strEmoticonName;
        
                        var $Emoticon = $J('<div/>', {'class': 'emoticon_option', 'data-emoticon': strEmoticonName } );
                        var $Img = $J('<img/>', {'src': strEmoticonURL, 'class': 'emoticon' } );
                        $Emoticon.append( $Img );
        
                        $Emoticon.click( this.GetEmoticonClickClosure( strEmoticonName ) );
        
                        $Content.append( $Emoticon );
                }
        
                $J(document.body).append( this.m_$Popup );
                PositionEmoticonHover( this.m_$Popup, this.m_$EmoticonButton );
                Obj.DismissPopup(); //关闭表情输入框
        };
        
        setTimeout(async function() {
                Obj.LoadEmoticons();
                CEmoticonPopup.sm_deferEmoticonsLoaded.done(function() {
                        (async function () {
                                if (!Obj.m_$Popup)
                                        Obj.BuildPopup(); //重写,以彻底隐藏表情选择框的同时提前加载表情
                                else
                                        PositionEmoticonHover(Obj.m_$Popup, Obj.m_$EmoticonButton);
                                //await emojiFix();
                                console.log("emoticon loaded Done.");
                        })();
                });
        }, 0); //提前加载表情
        
        _addIDtoHandleLostfocus(); //添加ID来处理丢失的焦点
        document.addEventListener("mousedown", function(e){
                
                        if(e.target.id.indexOf("steamTextStyle_1")==0 || e.target.id.indexOf("LAY-component-form-getval")==0 
                        || e.target.id.indexOf("emoticonbtn")==0 || e.target.className.indexOf("emoticon")==0 || e.target.className.indexOf("commentthread_entry_quotebox")==0
                        || e.target.className.indexOf("fs-label")==0  || e.target.id.indexOf("translationText")==0 || e.target.id.indexOf("select_is")==0
                        || e.target.id.indexOf("addCustomName")==0 || e.target.className.indexOf("btn_grey_black btn_small_thin")==0 || e.target.id.indexOf("comment_submit")==0
                        ){
                                //debugger
                                //if(e.target.id == "LAY-component-form-getval"){
                                e.stopPropagation();
                                e.stopImmediatePropagation();
                                e.preventDefault();
                                //  document.getElementById("LAY-component-form-getval").click();
                                return false;
                                //}
                        }
              
        }, false); //点击指定区域,输入框不失去焦点
        
        
        /*代码位于event.js translationText翻译按钮事件*/
        /*代码位于uiHandler.js 获取输入框和注册的scroll事件*/
        /*代码位于ui.js inBoxShrinkage()判断是否需要重新进行定位*/
        commentTextarea_box = document.getElementsByClassName('commentthread_textarea'); /*获取所有输入框*/
        inBoxShrinkage('comment_textarea',"init"); //解决滚动屏幕事件 Cannot set property 'visible' of undefined,传入"init"参数无实际意义,只为了创建arrComment,而不执行收缩功能,防止Cannot read property 'value' of null错误
        var getAllOffsetTopByChildEle = (ele)=>{
                var OffsetTopSum = 0;
                var ParentObj;
                var currentObj = ele;
                //debugger
                //while(currentObj != document){
                        //OffsetTopSum += currentObj.offsetTop;
                        //currentObj = currentObj.parentNode;
                        currentObj = currentObj.parentNode;
                        OffsetTopSum += currentObj.offsetTop;
                        currentObj = currentObj.parentNode;
                        OffsetTopSum += currentObj.offsetTop;
                        
                        //console.log("offsetTop:",currentObj.offsetTop,"scrollTop:",currentObj.scrollTop,"clientTop:",currentObj.clientTop);
                //}
                return OffsetTopSum;
        };
        
        document.addEventListener('scroll',function(){ /*注册事件: 当滚动时,对所有输入框对象可见性进行判断*/
                var visibleBottom = window.scrollY + document.documentElement.clientHeight; /*可见区域底部高度 = 滚动条高度 + 可视窗口高度 (显示窗口的底部坐标)*/
                var visibleTop = window.scrollY; /*可见区域顶部高度 = 页面的滚动条滚动的距离 (显示窗口的顶部坐标)*/
                
                for (var i = 0; i < commentTextarea_box.length; i++) { /*遍历所有元素并进行判断 commentTextarea_box[i].offsetTop*/
                        //var centerY = getAllOffsetTopByChildEle(commentTextarea_box[i]) + (commentTextarea_box[i].offsetHeight / 2); /*dom元素的中心坐标 = dom元素到最顶端的高度 + 自身高度的一半*/
                        var centerY = getAllOffsetTopByChildEle(commentTextarea_box[i]) - 10; //top
                        var centerX = getAllOffsetTopByChildEle(commentTextarea_box[i]) + commentTextarea_box[i].offsetHeight + 20; //bottom
                        if(centerY > visibleTop& centerX < visibleBottom){ /*当dom元素的中心坐标的X及Y坐标均大于显示窗口的顶部,且小于显示窗口的底部坐标时,那么就可以判断该坐标在可见区域*/
                                arrComment[i].visible = true; /*区域可见*/
                                //console.log('第'+i+'个区域可见',centerY,visibleTop,visibleBottom);
                        }else{
                                arrComment[i].visible = false; /*区域不可见*/
                                //console.log('第'+i+'个区域不可见',centerY,visibleTop,visibleBottom);
                        }
                }
                //console.log('');
        });
        
        console.log("注册所有的事件...");
        await registeredAllEvents(); //注册所有的事件
        if(!addRemoveFriendRemind()){/*添加删除好友提醒*/
                console.log("添加删除好友提醒失败了~!");
        }
        
}

/**
 * event.js
 */
 
async function registeredAllEvents() //注册所有的事件
{
        autoSetPageRefreshAndCloseWarn(true); //自动判断状态并设置页面刷新和关闭警告
        addFriendMultipleSelectionMode(); //添加好友多选模式
        
        
        jQuery("#addCustomName").click(async function() { //在留言框添加自定义称呼标识符
                var inString = document.getElementById("comment_textarea");
                var nSelectionStart = inString.selectionStart;//
                inString.value = inString.value.substr(0,nSelectionStart) + g_conf[0].strRemarkPlaceholder + inString.value.substr(nSelectionStart);
                
                document.getElementById("select_isCustom_checkbox").checked = true; //自动选择 自定义称呼模式
        });
        
        //<留言时的时间戳-目标时间戳>
        jQuery("#setTimeInterval").click(async function() { //为选择的好友设置留言时间间隔
                
        });
        
        jQuery("#unsetTimeInterval").click(async function() { //为选择的好友取消设置留言时间间隔
                
        });
        
        jQuery("#translationText").click(async function() { //翻译
                //获取选择的语言
                var selectLanguage = jQuery("#selectBoxID").ySelectedTexts(",");
                var selectLanguageArr = selectLanguage.split(',');
                if (selectLanguageArr.length == 1 && selectLanguageArr[0] == "")
                        return;
                console.log("selectLanguageArr", selectLanguageArr);
                //获取输入的内容
                var inString = document.getElementById("comment_textarea").value;
                if (inString == "")
                        return;
                console.log("inString", inString);
                //获取原始语言选项
                var options = document.getElementById('origLanguageSelectBox'); //获取选中的项目
                var optionsValue = options[options.selectedIndex].value;
                console.log("optionsValue", optionsValue);
                for (let i = selectLanguageArr.length -1; i >= 0 ; i--) { //for (let i = 0; i < selectLanguageArr.length; i++) {
                        g_conf[0].YunStatus = true; //正在运行
                        
                        var _id;
                        var newStrText;
                        switch (selectLanguageArr[i]) {
                                case '中文简体':
                                        _id = "_zhc";
                                        newStrText = await GoogleTranslateRequest(optionsValue, zhc, inString);
                                        console.log("翻译为中文简体:", newStrText);
                                        
                                        if (document.getElementById('comment_textarea_zhc') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为中文简体' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=3;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zhc\',false);" onClick="" onblur="inBoxonblurID=3;inBoxShrinkage(\'comment_textarea_zhc\',true);" placeholder="添加留言(中文简体)" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zhc').value = newStrText;
                                        break;
                                case '英语':
                                        _id = "_en";
                                        newStrText = await GoogleTranslateRequest(optionsValue, en, inString);
                                        console.log("翻译为英语:", newStrText);
        
                                        if (document.getElementById('comment_textarea_en') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为英语' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=1;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_en\',false);" onClick="" onblur="inBoxonblurID=1;inBoxShrinkage(\'comment_textarea_en\',true);" placeholder="添加留言(英语)" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_en').value = newStrText;
                                        break;
                                case '日语':
                                        _id = "_jp";
                                        newStrText = await GoogleTranslateRequest(optionsValue, jp, inString);
                                        console.log("翻译为日语:", newStrText);
        
                                        if (document.getElementById('comment_textarea_jp') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为日语' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=2;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_jp\',false);" onClick="" onblur="inBoxonblurID=2;inBoxShrinkage(\'comment_textarea_jp\',true);" placeholder="添加留言(日语)" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_jp').value = newStrText;
                                        break;
                                case "马新简体[zh-sg]":
                                        _id = "_zh_sg";
                                        newStrText = await CNTranslateRequest('zh-sg', inString);
                                        console.log("翻译为马新简体[zh-sg]:", newStrText);
        
                                        if (document.getElementById('comment_textarea_zh_sg') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为马新简体' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=4;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zh_sg\',false);" onClick="" onblur="inBoxonblurID=4;inBoxShrinkage(\'comment_textarea_zh_sg\',true);" placeholder="添加留言(马新简体)" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zh_sg').value = newStrText;
                                        break;
                                case "繁體中文[zh-hant]":
                                        _id = "_zh_hant";
                                        newStrText = await CNTranslateRequest('zh-hant', inString);
                                        console.log("翻译为繁體中文[zh-hant]:", newStrText);
        
                                        if (document.getElementById('comment_textarea_zh_hant') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为繁體中文' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=5;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zh_hant\',false);" onClick="" onblur="inBoxonblurID=5;inBoxShrinkage(\'comment_textarea_zh_hant\',true);" placeholder="添加留言(繁體中文)" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zh_hant').value = newStrText;
                                        break;
                                case "繁體中文(香港)[zh-hk]":
                                        _id = "_zh_hk";
                                        newStrText = await CNTranslateRequest('zh-hk', inString);
                                        console.log("翻译为繁體中文(香港)[zh-hk]:", newStrText);
        
                                        if (document.getElementById('comment_textarea_zh_hk') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为繁體中文(香港)' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=6;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zh_hk\',false);" onClick="" onblur="inBoxonblurID=6;inBoxShrinkage(\'comment_textarea_zh_hk\',true);" placeholder="添加留言(繁體中文(香港))" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zh_hk').value = newStrText;
                                        break;
                                case "繁體中文(澳门)[zh-mo]":
                                        _id = "_zh_mo";
                                        newStrText = await CNTranslateRequest('zh-mo', inString);
                                        console.log("翻译为繁體中文(香港)[zh-hk]:", newStrText);
        
                                        if (document.getElementById('comment_textarea_zh_mo') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为繁體中文(澳门)' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=7;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zh_mo\',false);" onClick="" onblur="inBoxonblurID=7;inBoxShrinkage(\'comment_textarea_zh_mo\',true);" placeholder="添加留言(繁體中文(澳门))" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zh_mo').value = newStrText;
                                        break;
                                case "繁體中文(台湾)[zh-tw]":
                                        _id = "_zh_tw";
                                        newStrText = await CNTranslateRequest('zh-tw', inString);
                                        console.log("翻译为繁體中文(台湾)[zh-tw]:", newStrText);
        
                                        if (document.getElementById('comment_textarea_zh_tw') == null) {
                                                jQuery("#translationOptions").after(
                                                        '\
                                                                <div class="commentthread_entry_quotebox">\
                                                                        <span>' + '翻译为繁體中文(台湾)' +
                                                        '</span>\
                                                                        <textarea class="commentthread_textarea" id="comment_textarea' + _id +
                                                        '" onfocus="inBoxonblurID=8;openThisAndCloseOtherAllinBoxShrinkage(\'comment_textarea_zh_tw\',false);" onClick="" onblur="inBoxonblurID=8;inBoxShrinkage(\'comment_textarea_zh_tw\',true);" placeholder="添加留言(繁體中文(台湾))" style="overflow: hidden; height: 28px;"></textarea>\
                                                                </div>'
                                                );
                                        }
                                        document.getElementById('comment_textarea_zh_tw').value = newStrText;
                                        break;
                                default:
                                g_conf[0].YunStatus = false; //没有运行
                                        break;
                        }
                        g_conf[0].isTranslationText = true; //进行了翻译
                        g_conf[0].YunStatus = false; //没有运行
        
                }
                commentTextarea_box = document.getElementsByClassName('commentthread_textarea'); /*获取所有输入框*/
                
                var change1;
                var autoTextarea = function(elem, extra, maxHeight) {
                        extra = extra || 0;
                        var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
                                isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
                                addEvent = function(type, callback) {
                                        elem.addEventListener ?
                                                elem.addEventListener(type, callback, false) :
                                                elem.attachEvent('on' + type, callback);
                                },
                                getStyle = elem.currentStyle ? function(name) {
                                        var val = elem.currentStyle[name];
                                        if (name === 'height' && val.search(/px/i) !== 1) {
                                                var rect = elem.getBoundingClientRect();
                                                return rect.bottom - rect.top -
                                                        parseFloat(getStyle('paddingTop')) -
                                                        parseFloat(getStyle('paddingBottom')) + 'px';
                                        };
                                        return val;
                                } : function(name) {
                                        return getComputedStyle(elem, null)[name];
                                },
                                minHeight = parseFloat(getStyle('height'));
                        elem.style.resize = 'none';
                
                change1 = function(e,id) {
                                                var scrollTop, height,
                                                        padding = 0,
                                                        style = elem.style;
                                                var obj = document.getElementById('strInBytes');
                                                var commentText;
                                                if(id == undefined || id == null)
                                                        commentText = document.getElementById(window.event.target.id);
                                                else
                                                        commentText = document.getElementById(id);
                                                var numText = wordCount(commentText.value);
                                                obj.innerHTML =  "当前字符字节数: <span id='strInBytes_Text'>" + numText + '</span>/999';
                                                if (wordCount(commentText.value) >= 1000) {
                                                        document.getElementById('strInBytes_Text').style.color = '#FF0000';
                                                        commentText.style.background = '#7b3863';
                                                        if(g_conf[0].isCommentRunStatus == false)/*如果正在留言则不清除(没有留言则清除)*/
                                                                jQuery('#log_head').html('');
                                                        jQuery('#log_head').html("<br><b style='color:#2CD8D6;'>字数超标啦! 请保持在1000字符以下. " + '当前字数:' + numText + '<b>');
                                                        g_conf[0].isWarnInfo = true;
                                                } else {        
                                                        document.getElementById('strInBytes_Text').style.color = '#32CD32';
                                                        commentText.style.background = '#1b2838';
                                                        if(g_conf[0].isCommentRunStatus == false && g_conf[0].isWarnInfo == true){ /*没有留言并且有警告信息才清除*/
                                                                jQuery('#log_head').html('');
                                                                g_conf[0].isWarnInfo = false;
                                                        }
                                                }
                                                if (elem._length === elem.value.length) return;
                                                        elem._length = elem.value.length;
                                                if (!isFirefox && !isOpera) {
                                                        padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
                                                };
                                                scrollTop = document.body.scrollTop || document.documentElement.scrollTop; /*定位到最后*/
                                                elem.style.height = minHeight + 'px';
                                                if (elem.scrollHeight >= minHeight) {
                                                        if (maxHeight && elem.scrollHeight > maxHeight) {
                                                                height = maxHeight - padding;
                                                                style.overflowY = 'auto';
                                                        } else {
                                                                height = elem.scrollHeight - padding;
                                                                style.overflowY = 'hidden';
                                                        };
                                                        style.height = height + extra + 'px';
                                                        var nHeight1 = height + extra;
                                                        /*console.log('nHeight1',nHeight1,'newStr',newStr);*/
                                                        /*https://blog.csdn.net/weixin_34281477/article/details/93702604*/
                                                        /*https://www.cnblogs.com/cblogs/p/9293522.html*/
                                                        /*https://www.w3school.com.cn/tiy/t.asp?f=jseg_replace_1*/
                                                        var iIndex;
                                                        for(let i=0;i<arrComment.length;i++)
                                                        {
                                                                if(id == undefined || id == null){
                                                                        if(arrComment[i].id == window.event.target.id){
                                                                                iIndex = i;
                                                                                break;
                                                                        }
                                                                }
                                                                else{
                                                                        if(arrComment[i].id == id){
                                                                                iIndex = i;
                                                                                break;
                                                                        }
                                                                }
                                                        }
                                                        debugger;
                                                        arrComment[iIndex].height = nHeight1;/*存储*/
                                                        scrollTop += parseInt(style.height) - elem.currHeight;
                                                        if(!isNaN(scrollTop)){
                                                                document.body.scrollTop = scrollTop;
                                                                document.documentElement.scrollTop = scrollTop;
                                                        }
                                                        elem.currHeight = parseInt(style.height);
                                                }
                                };
                };
                        inBoxShrinkage('comment_textarea_en',"init");//解决滚动屏幕事件 Cannot set property 'visible' of undefined,传入"init"参数无实际意义,只为了创建arrComment,而不执行收缩功能,防止Cannot read property 'value' of null错误
                        inBoxShrinkage('comment_textarea_jp',"init");
                        inBoxShrinkage('comment_textarea_zhc',"init");
                        inBoxShrinkage('comment_textarea_zh_sg',"init");
                        inBoxShrinkage('comment_textarea_zh_hant',"init");
                        inBoxShrinkage('comment_textarea_zh_hk',"init");
                        inBoxShrinkage('comment_textarea_zh_mo',"init");
                        inBoxShrinkage('comment_textarea_zh_tw',"init");
                        arrComment[1].height = 0;
                        arrComment[1].scrollTop = 0;
                        
                        arrComment[2].height = 0;
                        arrComment[2].scrollTop = 0;
                        
                        arrComment[3].height = 0;
                        arrComment[3].scrollTop = 0;
                        
                        arrComment[4].height = 0;
                        arrComment[4].scrollTop = 0;
                        
                        arrComment[5].height = 0;
                        arrComment[5].scrollTop = 0;
                        
                        arrComment[6].height = 0;
                        arrComment[6].scrollTop = 0;
                        
                        arrComment[7].height = 0;
                        arrComment[7].scrollTop = 0;
                        
                        arrComment[8].height = 0;
                        arrComment[8].scrollTop = 0;
                /*代码位于event.js translationText翻译按钮事件*/
                /*代码位于uiHandler.js 获取输入框和注册的scroll事件*/
                /*代码位于ui.js inBoxShrinkage()判断是否需要重新进行定位*/
        });
        
        jQuery("#setNoLeave").click(async function() { //为选择的好友设置不留言
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selected").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        if(g_conf[0].isNoCommentRunStatus == false)
                                jQuery("#log_head1, #log_body1").html("");
                        
                        var jqobj = jQuery("#search_results .selected");
                        
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                g_conf[0].YunStatus = true; //正在运行
                                g_conf[0].isNoCommentRunStatus = true;
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
                                
                                var nostrNoOperate = g_conf[0].strNoOperate + "-N";
                                
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
                        
                        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.indexOf(g_conf[0].strNoOperate) != -1 || SpecialName.indexOf(nostrNoOperate) != -1) //检查是否设置了不留言标识
                                                        {
                                                                jQuery("#log_body1")[0].innerHTML +=
                                                                        "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                        "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有设置备注! ' + profileID + '  ' + SpecialName + "</a><br>";
                                                                continue;
                                                        }
                                                        name = SpecialName;
                                                        name = name + g_conf[0].strNoOperate; //组合
                                                } else if (nicknameObj.length == 0) {
                                                        console.log("获取到的是steam名称");
                                                        SpecialName = undefined; //就没有备注
                                                        steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        name = steamName;
                                                        name = name + nostrNoOperate; //组合
                                                }
                                        }
                                //}
                                
                                console.log("[Debug] name:", name);
                        
                                (function(i, profileID) {
                                        var URL = "https://steamcommunity.com/profiles/" + profileID + "/ajaxsetnickname/";
                        
                                        jQuery.post(URL, {
                                                nickname: name,
                                                sessionid: g_sessionID
                                        }, function(response) {
                                                if (response.success === false) {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 设置备注失败了! ' + profileID + '  ' + name +
                                                                '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                } else {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                '[' + (i + 1) + '/' + total + '] ' +
                                                                "成功设置备注于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                profileID + '  ' + name + "</a>" +
                                                                "<a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" + "</a><br>";
                                                }
                                        }).fail(function() {
                                                jQuery("#log_body1")[0].innerHTML +=
                                                        '<span style="color:#DA2626;">[' + (i + 1) + '/' + total + '] ' +
                                                        "无法设置备注于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                        profileID + "\">" +
                                                        profileID + '  ' + name + "</a></span><br>";
                                        }).always(function() {
                                                jQuery("#log_head1").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                        });
                        
                                })(i, profileID);
                                await sleep(100);
                                //console.log(cur)
                        }
                        g_conf[0].YunStatus = false; //没有运行
                        g_conf[0].isNoCommentRunStatus = false;
                        window.location.reload(true); //强制从服务器重新加载当前页面
                }
        });
        
        jQuery("#unsetNoLeave").click(async function() { //为选择的好友取消设置不留言
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selected.selectable").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        if(g_conf[0].isNoCommentRunStatus == false)
                                jQuery("#log_head1, #log_body1").html("");
                                
                        var jqobj = jQuery("#search_results .selected.selectable");
                        
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                g_conf[0].YunStatus = true; //正在运行
                                g_conf[0].isNoCommentRunStatus = true;
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
                        
                                var nostrNoOperate = g_conf[0].strNoOperate + "-N";
                        
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
                                        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.lastIndexOf(nostrNoOperate) != -1) //检查是否设置了国籍标识
                                                        {
                                                                SpecialName = SpecialName.slice(0,SpecialName.lastIndexOf(nostrNoOperate)); //去掉国籍标识
                                                                name = ""; //去掉备注
                                                        }
                                                        else if (SpecialName.lastIndexOf(g_conf[0].strNoOperate) != -1) //检查是否设置了国籍标识
                                                        {
                                                                SpecialName = SpecialName.slice(0,SpecialName.lastIndexOf(g_conf[0].strNoOperate)); //去掉国籍标识
                                                                name = SpecialName; //使用原来的备注
                                                        }else {
                                                                jQuery("#log_body1")[0].innerHTML +=
                                                                        "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                        "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有设置国籍不能取消! ' + profileID + '  ' + SpecialName + "</a><br>";
                                                                continue;
                                                        }
                                                } else if (nicknameObj.length == 0) {
                                                        console.log("获取到的是steam名称");
                                                        steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有备注不能取消! ' + profileID + '  ' + steamName + "</a><br>";
                                                        continue;
                                                }
                                        }
                                //}
                                console.log("[Debug] name:", name);
                                (function(i, profileID) {
                                        var URL = "https://steamcommunity.com/profiles/" + profileID + "/ajaxsetnickname/";
                        
                                        jQuery.post(URL, {
                                                nickname: name,
                                                sessionid: g_sessionID
                                        }, function(response) {
                                                if (response.success === false) {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 设置备注失败了! ' + profileID + '  ' + name +
                                                                '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                } else {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                '[' + (i + 1) + '/' + total + '] ' +
                                                                "成功设置备注于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                profileID + '  ' + name + "</a>" +
                                                                "<a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" + "</a><br>";
                                                }
                                        }).fail(function() {
                                                jQuery("#log_body1")[0].innerHTML +=
                                                        '[' + (i + 1) + '/' + total + '] ' +
                                                        "<span style='color:#DA2626;'>无法设置备注于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                        profileID + "\">" +
                                                        profileID + '  ' + name + "</a></span><br>";
                                        }).always(function() {
                                                jQuery("#log_head1").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                        });
                        
                                })(i, profileID);
                                await sleep(1000);
                                //console.log(cur)
                        }
                        g_conf[0].YunStatus = false; //没有运行
                        g_conf[0].isNoCommentRunStatus = false;
                        window.location.reload(true); //强制从服务器重新加载当前页面
                }
        });
        
        jQuery("#setNationality").click(async function() { //为选择的好友设置国籍标识
                //获取指定的国籍标识
                var options = document.getElementById('nationalitySelectBox'); //获取选中的项目
                var optionsValue = options[options.selectedIndex].value;
                console.log("optionsValue", optionsValue);
                var strNationality = '{' + optionsValue + '}'; //组合国籍标识
                var strSpecialNationality = '{' + optionsValue + '-N}'; //组合格外国籍标识
                //遍历所有选择的好友,
                //对已经设置了备注的好友,添加国籍标识;
        
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selected").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        if(g_conf[0].isNationalityRunStatus == false)
                                jQuery("#log_head1, #log_body1").html("");
                        
                        var jqobj = jQuery("#search_results .selected");
        
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                g_conf[0].YunStatus = true; //正在运行
                                g_conf[0].isNationalityRunStatus = true;
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
        
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
        
        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.indexOf('{CN}') != -1 || SpecialName.indexOf('{CN-N}') != -1 ||
                                                                SpecialName.indexOf('{EN}') != -1 || SpecialName.indexOf('{EN-N}') != -1 ||
                                                                SpecialName.indexOf('{JP}') != -1 || SpecialName.indexOf('{JP-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-SG}') != -1 || SpecialName.indexOf('{CN-SG-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HANT}') != -1 || SpecialName.indexOf('{CN-HANT-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HK}') != -1 || SpecialName.indexOf('{CN-HK-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-MO}') != -1 || SpecialName.indexOf('{CN-MO-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-TW}') != -1 || SpecialName.indexOf('{CN-TW-N}') != -1
                                                        ) //检查是否设置了国籍标识
                                                        {
                                                                if (SpecialName.indexOf('{' + optionsValue + '}') != -1 || SpecialName.indexOf('{' + optionsValue + '-N}') !=
                                                                        -1) //是否与待设置的国籍标识相同
                                                                {
                                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                                "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                                "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有设置备注! ' + profileID + '  ' + SpecialName + "</a><br>";
                                                                        continue;
                                                                } else //重新设置国籍标识
                                                                {
                                                                        if (SpecialName.indexOf('-N}') != -1) {
                                                                                mode = 1;
                                                                        }
                                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                                }
                                                        }
                                                        if (mode == 0) {
                                                                name = strNationality + SpecialName; //组合成为新的名称  国籍标识
                                                        } else if (mode == 1) {
                                                                name = strSpecialNationality + SpecialName; //组合成为新的名称  格外国籍标识
                                                                mode = 0;
                                                        }
        
        
                                                } else if (nicknameObj.length == 0) {
                                                        console.log("获取到的是steam名称");
                                                        SpecialName = undefined; //就没有备注
                                                        steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        name = strSpecialNationality + steamName; //组合成为新的名称  格外国籍标识
                                                }
                                        }
                                //}
                                console.log("[Debug] name:", name);
        
                                (function(i, profileID) {
                                        var URL = "https://steamcommunity.com/profiles/" + profileID + "/ajaxsetnickname/";
        
                                        jQuery.post(URL, {
                                                nickname: name,
                                                sessionid: g_sessionID
                                        }, function(response) {
                                                if (response.success === false) {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 设置备注失败了! ' + profileID + '  ' + name +
                                                                '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                } else {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                '[' + (i + 1) + '/' + total + '] ' +
                                                                "成功设置备注于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                profileID + '  ' + name + "</a>" +
                                                                "<a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" + "</a><br>";
                                                }
                                        }).fail(function() {
                                                jQuery("#log_body1")[0].innerHTML +=
                                                        '<span style="color:#DA2626;">[' + (i + 1) + '/' + total + '] ' +
                                                        "无法设置备注于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                        profileID + "\">" +
                                                        profileID + '  ' + name + "</a></span><br>";
                                        }).always(function() {
                                                jQuery("#log_head1").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                        });
        
                                })(i, profileID);
                                await sleep(100);
                                //console.log(cur)
                        }
                        g_conf[0].YunStatus = false; //没有运行
                        g_conf[0].isNationalityRunStatus = false;
                        window.location.reload(true); //强制从服务器重新加载当前页面
                }
        
        });
        
        jQuery("#unsetNationality").click(async function() { //为选择的好友取消国籍标识
                //获取指定的国籍标识
                var options = document.getElementById('nationalitySelectBox'); //获取选中的项目
                var optionsValue = options[options.selectedIndex].value;
                console.log("optionsValue", optionsValue);
                var strNationality = '{' + optionsValue + '}'; //组合国籍标识
                var strSpecialNationality = '{' + optionsValue + '-N}'; //组合格外国籍标识
                //遍历所有选择的好友,
                //对已经设置了备注的好友,添加国籍标识;
        
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selected.selectable").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        if(g_conf[0].isNationalityRunStatus == false)
                                jQuery("#log_head1, #log_body1").html("");
                                
                        var jqobj = jQuery("#search_results .selected.selectable");
        
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                g_conf[0].YunStatus = true; //正在运行
                                g_conf[0].isNationalityRunStatus = true;
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
        
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.indexOf('{CN}') != -1 ||
                                                                SpecialName.indexOf('{EN}') != -1 ||
                                                                SpecialName.indexOf('{JP}') != -1 ||
                                                                SpecialName.indexOf('{CN-SG}') != -1 ||
                                                                SpecialName.indexOf('{CN-HANT}') != -1 ||
                                                                SpecialName.indexOf('{CN-HK}') != -1 ||
                                                                SpecialName.indexOf('{CN-MO}') != -1 ||
                                                                SpecialName.indexOf('{CN-TW}') != -1
                                                        ) //检查是否设置了国籍标识
                                                        {
                                                                SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                                name = SpecialName; //使用原来的备注
                                                        } else if (SpecialName.indexOf('{CN-N}') != -1 ||
                                                                SpecialName.indexOf('{EN-N}') != -1 ||
                                                                SpecialName.indexOf('{JP-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-SG-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HANT-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HK-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-MO-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-TW-N}') != -1
                                                        ) //检查是否设置了国籍标识
                                                        {
                                                                SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                                name = ""; //去掉备注
                                                        } else {
                                                                jQuery("#log_body1")[0].innerHTML +=
                                                                        "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                        "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有设置国籍不能取消! ' + profileID + '  ' + SpecialName + "</a><br>";
                                                                continue;
                                                        }
                                                } else if (nicknameObj.length == 0) {
                                                        console.log("获取到的是steam名称");
                                                        steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有备注不能取消! ' + profileID + '  ' + steamName + "</a><br>";
                                                        continue;
                                                }
                                        }
                                //}
                                console.log("[Debug] name:", name);
                                (function(i, profileID) {
                                        var URL = "https://steamcommunity.com/profiles/" + profileID + "/ajaxsetnickname/";
        
                                        jQuery.post(URL, {
                                                nickname: name,
                                                sessionid: g_sessionID
                                        }, function(response) {
                                                if (response.success === false) {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 设置备注失败了! ' + profileID + '  ' + name +
                                                                '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                } else {
                                                        jQuery("#log_body1")[0].innerHTML +=
                                                                '[' + (i + 1) + '/' + total + '] ' +
                                                                "成功设置备注于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                profileID + '  ' + name + "</a>" +
                                                                "<a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" + "</a><br>";
                                                }
                                        }).fail(function() {
                                                jQuery("#log_body1")[0].innerHTML +=
                                                        '[' + (i + 1) + '/' + total + '] ' +
                                                        "<span style='color:#DA2626;'>无法设置备注于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                        profileID + "\">" +
                                                        profileID + '  ' + name + "</a></span><br>";
                                        }).always(function() {
                                                jQuery("#log_head1").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                        });
        
                                })(i, profileID);
                                await sleep(1000);
                                //console.log(cur)
                        }
                        g_conf[0].isNationalityRunStatus = false;
                        g_conf[0].YunStatus = false; //没有运行
                        window.location.reload(true); //强制从服务器重新加载当前页面
                }
        
        });
        
        //---------------------------------------------------------------------------------------------------------------
        await jQuery("#comment_submit").click(async function() { //发送评论给选择的好友
                setTimeout(async ()=>{
                        date = new Date();
                        startTime = date.getTime();
                        
                        const total = jQuery("#search_results .selected.selectable").length; //选择的朋友总数
                        const msg = jQuery("#comment_textarea").val(); //获取评论内容
                        var newMgs = "";
                        var mode = 0;
                        var SpecialName = undefined;
                        var steamName = undefined;
                        var name = undefined;
                        
                        if (total > 0 && msg.length > 0) {
                                if(g_conf[0].isCommentRunStatus == false)
                                        jQuery("#log_head, #log_body").html("");
                                
                                
                                //jQuery(".selected").each(async function(i) {
                                var jqobj = jQuery("#search_results .selected.selectable");
                                
                                for (let i = 0; i < jqobj.length; i++) {
                                        let cur = jqobj.get(i);
                                        g_conf[0].YunStatus = true; //正在运行
                                        g_conf[0].isCommentRunStatus = true;
                                        //--------------------------------------------------------------------
                                        SpecialName = undefined;
                                        steamName = undefined;
                                        
                                        // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                        //      //获取备注
                                        //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                        //      SpecialName = undefined;
                                        //      if (SpecialNameobj != "undefined") {
                                        //              SpecialName = SpecialNameobj[0].innerText; //备注
                                        //      }
                                        //      //获取steam名称
                                        //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                        //      name = steamName;
                                        // } else //否则如果是好友界面
                                        //{
                                                //获取名称,然后判断是备注还是steam名称
                                                var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                                var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                                SpecialName = undefined;
                                                if (SpecialNameobj.length > 0) //安全检查
                                                {
                                                        if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                        {
                                                                console.log("获取到的是备注");
                                                                SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                                steamName = undefined; //就没有名称
                                                                name = SpecialName;
                                                        } else if (nicknameObj.length == 0) {
                                                                console.log("获取到的是steam名称");
                                                                SpecialName = undefined; //就没有备注
                                                                steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                                name = steamName;
                                                        }
                                                }
                                        //}
                                        //--------------------------------------------------------------------
                                        //判断选择的模式
                                        if ($("select_islName_checkbox").checked == true) {
                                                mode = 1;
                                        }
                                        else if ($("select_isSpecialName_checkbox").checked == true) {
                                                mode = 2;
                                        }
                                        else if ($("select_isCustom_checkbox").checked == true) {
                                                mode = 3;
                                        }
                                        else //如果都没有选中,则直接发送消息
                                                mode = 0;
                                        
                                        if (mode == 1) { //是否为好友添加称呼 (如果好友没有备注则使用steam名称)
                                                //判断是否有备注,没有则使用steam名称
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                        
                                                        console.log("为" + steamName + "添加称呼: " + SpecialName);
                                                        newMgs = SpecialName + msg;
                                                } else {
                                                        console.log("为" + steamName + "添加称呼: " + steamName);
                                                        newMgs = steamName + msg;
                                                }
                                        } else if (mode == 2) { //是否为好友添加称呼 (请为好友设置备注为需要的称呼,否则不添加称呼)
                                                //判断是否有备注,没有则不操作
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                        
                                                        console.log("为" + steamName + "添加称呼: " + SpecialName);
                                                        newMgs = SpecialName + msg;
                                                } else {
                                                        newMgs = msg;
                                                }
                                        } else if (mode == 3) { //是否为好友添加称呼 (请为好友设置备注为需要的称呼,否则不添加称呼)
                                                //判断是否有备注,没有则不操作
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                        
                                                        console.log("为" + steamName + "添加称呼: " + SpecialName);
                                                        let str = msg;
                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                } else {
                                                        let str = msg;
                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                }
                                        } else if (mode == 0) { //直接发送内容
                                                newMgs = msg;
                                        }
                                        console.log("[Debug] mode:", mode);
                                        console.log("[Debug] SpecialName:", SpecialName, "steamName:", steamName);
                                        console.log("[Debug] newMgs:", newMgs, "msg:", msg);
                                        //--------------------------------------------------------------------
                                        let profileID = cur.getAttribute("data-steamid");
                
                                        if (SpecialName != undefined) {
                                                if (SpecialName.indexOf(g_conf[0].strNoOperate) != -1) {
                                                        jQuery("#log_body")[0].innerHTML +=
                                                                "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 已跳过留言! ' + profileID + '  ' + name + "</a><br>";
                                                        continue;
                                                }
                                        }
                                        
                                        (function(i, profileID) {
                                                //setTimeout(function() {
                
                                                jQuery.post("//steamcommunity.com/comment/Profile/post/" + profileID + "/-1/", {
                                                        comment: newMgs,
                                                        count: 6,
                                                        sessionid: g_sessionID
                                                }, function(response) {
                                                        if (response.success === false) {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                        "\">" + '[' + (i + 1) + '/' + total + '] 留言失败了! ' + profileID + '  ' + name +
                                                                        '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                        } else {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        '[' + (i + 1) + '/' + total + '] ' +
                                                                        "成功发表评论于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                        profileID + '  ' + name + "</a>" +
                                                                        "<span> → </span><a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                        profileID  + "#commentthread_Profile_"+ profileID +"_textarea" + "\">" + newMgs + "</a><br>";
                                                        }
                                                }).fail(function() {
                                                        jQuery("#log_body")[0].innerHTML +=
                                                                '<span style="color:#DA2626;">[' + (i + 1) + '/' + total + '] ' +
                                                                "无法发表评论于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" +
                                                                profileID + '  ' + name + "</a></span><br>";
                                                }).always(function() {
                                                        jQuery("#log_head").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                                });
                
                
                                                //}, i * 6000);
                
                                        })(i, profileID);
                                        await sleep(g_conf[0].delay * 1000)
                                        //console.log(cur)
                                }
                
                
                                date = new Date();
                                endTime = date.getTime();
                                let time = endTime - startTime;
                                //console.log("time",time,endTime,startTime);
                                //--------------------------------------------------------------------------------
                                //计算出相差天数
                                var str = "";
                                let days = Math.floor(time / (24 * 3600 * 1000))
                                //计算出小时数
                                let leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
                                let hours = Math.floor(leave1 / (3600 * 1000))
                                //计算相差分钟数
                                let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
                                let minutes = Math.floor(leave2 / (60 * 1000))
                                //计算相差秒数
                                let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
                                //let seconds=Math.round(leave3/1000)
                                let seconds = leave3 / 1000
                                if (days > 0)
                                        str += days + "天";
                                if (hours > 0)
                                        str += hours + "小时";
                                if (minutes > 0)
                                        str += minutes + "分钟";
                                if (seconds > 0)
                                        str += seconds + "秒";
                                //--------------------------------------------------------------------------------
                                jQuery("#log_body")[0].innerHTML +=
                                        "<b>留言完毕! 用时: <span style='color:#35ff8b;'>" + str + "</span></b><br>";
                                //});
                                g_conf[0].isCommentRunStatus = false;
                                
                                g_conf[0].YunStatus = false; //没有运行
                
                        } else {
                                alert("请确保您输入了一条消息并选择了1个或更多好友。");
                        }
                },0);
        });
        
        //---------------------------------------------------------------------------------------------------------------
        await jQuery("#comment_submit_special").click(async function() { //根据国籍发送评论给选择的好友
                
                setTimeout(async()=>{
                        date = new Date();
                        startTime = date.getTime();
                        
                        if(g_conf[0].isTranslationText == false){
                                return;
                        }
                        
                        const total = jQuery("#search_results .selected.selectable").length; //选择的朋友总数
                        const msg = jQuery("#comment_textarea").val(); //获取评论内容
                        const msg_CN = jQuery("#comment_textarea_zhc").val(); //获取评论内容
                        const msg_EN = jQuery("#comment_textarea_en").val(); //获取评论内容
                        const msg_JP = jQuery("#comment_textarea_jp").val(); //获取评论内容
                        const msg_CN_SG = jQuery("#comment_textarea_zh_sg").val(); //获取评论内容
                        const msg_CN_HANT = jQuery("#comment_textarea_zh_hant").val(); //获取评论内容
                        const msg_CN_HK = jQuery("#comment_textarea_zh_hk").val(); //获取评论内容
                        const msg_CN_MO = jQuery("#comment_textarea_zh_mo").val(); //获取评论内容
                        const msg_CN_TW = jQuery("#comment_textarea_zh_tw").val(); //获取评论内容
                        
                        var newMgs = "";
                        var mode = 0;
                        var SpecialName = undefined;
                        var steamName = undefined;
                        var name = undefined;
                                
                        if (total > 0 && msg.length > 0) {
                                
                                if(g_conf[0].isCommentRunStatus == false)
                                        jQuery("#log_head, #log_body").html("");
                                
                                //jQuery(".selected").each(async function(i) {
                                //var jqobj = jQuery(".selected");
                                //var jqobj = jQuery(".selected[data-steamid]"); //排除掉选择的其他的东西
                                var jqobj = jQuery("#search_results .selected.selectable"); //排除掉选择的其他的东西
                                
                                for (let i = 0; i < jqobj.length; i++) {
                                        let cur = jqobj.get(i);
                                        g_conf[0].YunStatus = true; //正在运行
                                        g_conf[0].isCommentRunStatus = true;
                                        //--------------------------------------------------------------------
                                        SpecialName = undefined;
                                        steamName = undefined;
                                
                                        // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                        //      //获取备注
                                        //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                        //      SpecialName = undefined;
                                        //      if (SpecialNameobj != "undefined") {
                                        //              SpecialName = SpecialNameobj[0].innerText; //备注
                                        //      }
                                        //      //获取steam名称
                                        //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                        //      name = steamName;
                                        // } else //否则如果是好友界面
                                        //{
                                                //获取名称,然后判断是备注还是steam名称
                                                var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                                var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                                SpecialName = undefined;
                                                if (SpecialNameobj.length > 0) //安全检查
                                                {
                                                        if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                        {
                                                                console.log("获取到的是备注");
                                                                SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                                steamName = undefined; //就没有名称
                                                                name = SpecialName;
                                                        } else if (nicknameObj.length == 0) {
                                                                console.log("获取到的是steam名称");
                                                                SpecialName = undefined; //就没有备注
                                                                steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                                name = steamName;
                                                        }
                                                }
                                        //}
                                        //--------------------------------------------------------------------
                                        //判断选择的模式
                                        if ($("select_islName_checkbox").checked == true) {
                                                mode = 1;
                                        }
                                        else if ($("select_isSpecialName_checkbox").checked == true) {
                                                mode = 2;
                                        }
                                        else if ($("select_isCustom_checkbox").checked == true) {
                                                mode = 3;
                                        }
                                        else //如果都没有选中,则直接发送消息
                                                mode = 0;
                                
                                        var getVA = function(steamName, SpecialName) {
                                                return steamName == undefined ? steamName : SpecialName;
                                        };
                                
                                        console.log("DBG 0", steamName, SpecialName, name);
                                
                                        if (mode == 1) { //是否为好友添加称呼 (如果好友没有备注则使用steam名称)
                                                //判断是否有备注,没有则使用steam名称
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                newMgs = SpecialName + msg_CN;
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                newMgs = SpecialName + msg_EN;
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                newMgs = SpecialName + msg_JP;
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                newMgs = SpecialName + msg_CN_SG;
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                newMgs = SpecialName + msg_CN_HANT;
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                newMgs = SpecialName + msg_CN_HK;
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                newMgs = SpecialName + msg_CN_MO;
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                newMgs = SpecialName + msg_CN_TW;
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != "")
                                                                        newMgs = SpecialName + msg_EN;
                                                                else if (msg_JP != undefined && msg_JP != "")
                                                                        newMgs = SpecialName + msg_JP;
                                                                else if (msg_CN != undefined && msg_CN != "")
                                                                        newMgs = SpecialName + msg_CN;
                                                                else
                                                                        newMgs = SpecialName + msg;
                                                        }
                                                        console.log("DBG 1", steamName, SpecialName, name, strNationality);
                                                        console.log("为" + SpecialName + "添加称呼: " + SpecialName);
                                                        //newMgs = SpecialName + msg;
                                                } else {
                                                        let strNationality = steamName.slice(0, steamName.indexOf('}') + 1); //提取国籍
                                                        steamName = steamName.slice(steamName.indexOf('}') + 1); //去掉国籍标识
                                
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                newMgs = steamName + msg_CN;
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                newMgs = steamName + msg_EN;
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                newMgs = steamName + msg_JP;
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                newMgs = steamName + msg_CN_SG;
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                newMgs = steamName + msg_CN_HANT;
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                newMgs = steamName + msg_CN_HK;
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                newMgs = steamName + msg_CN_MO;
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                newMgs = steamName + msg_CN_TW;
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != "")
                                                                        newMgs = steamName + msg_EN;
                                                                else if (msg_JP != undefined && msg_JP != "")
                                                                        newMgs = steamName + msg_JP;
                                                                else if (msg_CN != undefined && msg_CN != "")
                                                                        newMgs = steamName + msg_CN;
                                                                else
                                                                        newMgs = steamName + msg;
                                                        }
                                                        console.log("DBG 2", steamName, SpecialName, name, strNationality);
                                                        console.log("为" + steamName + "添加称呼: " + steamName);
                                                        //newMgs = steamName + msg;
                                                }
                                        } else if (mode == 2) { //是否为好友添加称呼 (请为好友设置备注为需要的称呼,否则不添加称呼)
                                                //判断是否有备注,没有则不操作
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                newMgs = SpecialName + msg_CN;
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                newMgs = SpecialName + msg_EN;
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                newMgs = SpecialName + msg_JP;
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                newMgs = SpecialName + msg_CN_SG;
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                newMgs = SpecialName + msg_CN_HANT;
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                newMgs = SpecialName + msg_CN_HK;
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                newMgs = SpecialName + msg_CN_MO;
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                newMgs = SpecialName + msg_CN_TW;
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != "")
                                                                        newMgs = SpecialName + msg_EN;
                                                                else if (msg_JP != undefined && msg_JP != "")
                                                                        newMgs = SpecialName + msg_JP;
                                                                else if (msg_CN != undefined && msg_CN != "")
                                                                        newMgs = SpecialName + msg_CN;
                                                                else
                                                                        newMgs = SpecialName + msg;
                                                        }
                                                        console.log("DBG 3", steamName, SpecialName, name, strNationality);
                                                        console.log("为" + steamName + "添加称呼: " + SpecialName);
                                                        //newMgs = SpecialName + msg;
                                                } else {
                                                        let strNationality = steamName.slice(0, steamName.indexOf('}') + 1); //提取国籍
                                                        steamName = steamName.slice(steamName.indexOf('}') + 1); //去掉国籍标识
                                
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                newMgs = msg_CN;
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                newMgs = msg_EN;
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                newMgs = msg_JP;
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                newMgs = msg_CN_SG;
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                newMgs = msg_CN_HANT;
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                newMgs = msg_CN_HK;
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                newMgs = msg_CN_MO;
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                newMgs = msg_CN_TW;
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != "")
                                                                        newMgs = msg_EN;
                                                                else if (msg_JP != undefined && msg_JP != "")
                                                                        newMgs = msg_JP;
                                                                else if (msg_CN != undefined && msg_CN != "")
                                                                        newMgs = msg_CN;
                                                                else
                                                                        newMgs = msg;
                                                        }
                                                        console.log("DBG 4", steamName, SpecialName, name, strNationality);
                                                        //newMgs = msg;
                                                }
                                        } else if (mode == 3) { //是否为好友添加称呼 (请为好友设置备注为需要的称呼,否则不添加称呼)
                                                //判断是否有备注,没有则不操作
                                                if (SpecialName != undefined) {
                                                        let strNationality = SpecialName.slice(0, SpecialName.indexOf('}') + 1); //提取国籍
                                                        SpecialName = SpecialName.slice(SpecialName.indexOf('}') + 1); //去掉国籍标识
                                                        
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                if(msg_CN == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                if(msg_EN == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_EN;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                if(msg_JP == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_JP;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                if(msg_CN_SG == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_SG;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                if(msg_CN_HANT == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_HANT;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                if(msg_CN_HK == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_HK;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                if(msg_CN_MO == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_MO;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                if(msg_CN_TW == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_TW;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != ""){
                                                                        let str = msg_EN;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                                }       
                                                                else if (msg_JP != undefined && msg_JP != ""){
                                                                        let str = msg_JP;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                                }
                                                                else if (msg_CN != undefined && msg_CN != ""){
                                                                        let str = msg_CN;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                                }
                                                                else{
                                                                        let str = msg;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),SpecialName); //把占位符全部替换为备注
                                                                }
                                                        }
                                                        console.log("DBG 3", steamName, SpecialName, name, strNationality);
                                                        console.log("为" + steamName + "添加称呼: " + SpecialName);
                                                        //newMgs = SpecialName + msg;
                                                } else {
                                                        let strNationality = steamName.slice(0, steamName.indexOf('}') + 1); //提取国籍
                                                        steamName = steamName.slice(steamName.indexOf('}') + 1); //去掉国籍标识
                                                
                                                        if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                                if(msg_CN == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                                if(msg_EN == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_EN;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                                if(msg_JP == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_JP;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                                if(msg_CN_SG == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_SG;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                                if(msg_CN_HANT == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_HANT;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                                if(msg_CN_HK == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_HK;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                                if(msg_CN_MO == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_MO;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                                if(msg_CN_TW == undefined){
                                                                        return alert("您为选择的好友设置的国籍没有对应翻译过的文本,建议在'选择需要翻译的文本'那里的右上角选择全选,现在将停止运行.\n" + "好友名称:"+SpecialName+"国籍:"+strNationality);
                                                                }
                                                                let str = msg_CN_TW;
                                                                newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                        } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                        {
                                                                if (msg_EN != undefined && msg_EN != ""){
                                                                        let str = msg_EN;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                                }       
                                                                else if (msg_JP != undefined && msg_JP != ""){
                                                                        let str = msg_JP;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                                }
                                                                else if (msg_CN != undefined && msg_CN != ""){
                                                                        let str = msg_CN;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                                }
                                                                else{
                                                                        let str = msg;
                                                                        newMgs = str.replace(new RegExp(g_conf[0].strRemarkPlaceholder, 'g'),steamName); //把占位符全部替换为steam名称
                                                                }
                                                        }
                                                        console.log("DBG 4", steamName, SpecialName, name, strNationality);
                                                        //newMgs = msg;
                                                }
                                        } else if (mode == 0) { //直接发送内容
                                                let strNationality = name.slice(0, name.indexOf('}') + 1); //提取国籍
                                                name = name.slice(name.indexOf('}') + 1); //去掉国籍标识
                                
                                                if (strNationality == "{CN}" || strNationality == "{CN-N}") {
                                                        newMgs = msg_CN;
                                                } else if (strNationality == "{EN}" || strNationality == "{EN-N}") {
                                                        newMgs = msg_EN;
                                                } else if (strNationality == "{JP}" || strNationality == "{JP-N}") {
                                                        newMgs = msg_JP;
                                                } else if (strNationality == "{CN-SG}" || strNationality == "{CN-SG-N}") {
                                                        newMgs = msg_CN_SG;
                                                } else if (strNationality == "{CN-HANT}" || strNationality == "{CN-HANT-N}") {
                                                        newMgs = msg_CN_HANT;
                                                } else if (strNationality == "{CN-HK}" || strNationality == "{CN-HK-N}") {
                                                        newMgs = msg_CN_HK;
                                                } else if (strNationality == "{CN-MO}" || strNationality == "{CN-MO-N}") {
                                                        newMgs = msg_CN_MO;
                                                } else if (strNationality == "{CN-TW}" || strNationality == "{CN-TW-N}") {
                                                        newMgs = msg_CN_TW;
                                                } else //没有设置国籍则默认使用英文,日语,简体中文,原始语言
                                                {
                                                        if (msg_EN != undefined && msg_EN != "")
                                                                newMgs = msg_EN;
                                                        else if (msg_JP != undefined && msg_JP != "")
                                                                newMgs = msg_JP;
                                                        else if (msg_CN != undefined && msg_CN != "")
                                                                newMgs = msg_CN;
                                                        else
                                                                newMgs = msg;
                                                }
                                                console.log("DBG 5", steamName, SpecialName, name, strNationality);
                                                //ewMgs = msg;
                                        }
                                        console.log("[Debug] mode:", mode);
                                        console.log("[Debug] SpecialName:", SpecialName, "steamName:", steamName);
                                        console.log("[Debug] newMgs:", newMgs, "msg:", msg);
                                        //--------------------------------------------------------------------
                                        let profileID = cur.getAttribute("data-steamid");
                                        
                                        if (SpecialName != undefined) {
                                                if (SpecialName.indexOf(g_conf[0].strNoOperate) != -1) {
                                                        jQuery("#log_body")[0].innerHTML +=
                                                                "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                "\">" + '[' + (i + 1) + '/' + total + '] 已跳过留言! ' + profileID + '  ' + name + "</a><br>";
                                                        continue;
                                                }
                                        }
                                        
                                        (function(i, profileID) {
                                                //setTimeout(function() {
                                
                                                jQuery.post("//steamcommunity.com/comment/Profile/post/" + profileID + "/-1/", {
                                                        comment: newMgs,
                                                        count: 6,
                                                        sessionid: g_sessionID
                                                }, function(response) {
                                                        if (response.success === false) {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        "<a style='color:#ff2c85;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                        "\">" + '[' + (i + 1) + '/' + total + '] 留言失败了! ' + profileID + '  ' + name +
                                                                        '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                        } else {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        '[' + (i + 1) + '/' + total + '] ' +
                                                                        "成功发表评论于 <a target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID + "\">" +
                                                                        profileID + '  ' + name + "</a>" +
                                                                        "<span> → </span><a style='color:#FB7299;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                        profileID + "#commentthread_Profile_"+ profileID +"_textarea" + "\">" + newMgs + "</a><br>";
                                                        }
                                                }).fail(function() {
                                                        jQuery("#log_body")[0].innerHTML +=
                                                                '[' + (i + 1) + '/' + total + '] ' +
                                                                "<span style='color:#DA2626;'>无法发表评论于 <a style='color:#DA2626;' target='_blank' href=\"http://steamcommunity.com/profiles/" +
                                                                profileID + "\">" +
                                                                profileID + '  ' + name + "</a></span><br>";
                                                }).always(function() {
                                                        jQuery("#log_head").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个好友.<b>");
                                                });
                                                
                                                
                                                //}, i * 6000);
                                
                                        })(i, profileID);
                                        await sleep(g_conf[0].delay * 1000)
                                        //console.log(cur)
                                }
                                
                                
                                date = new Date();
                                endTime = date.getTime();
                                let time = endTime - startTime;
                                //console.log("time",time,endTime,startTime);
                                //--------------------------------------------------------------------------------
                                //计算出相差天数
                                var str = "";
                                let days = Math.floor(time / (24 * 3600 * 1000))
                                //计算出小时数
                                let leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
                                let hours = Math.floor(leave1 / (3600 * 1000))
                                //计算相差分钟数
                                let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
                                let minutes = Math.floor(leave2 / (60 * 1000))
                                //计算相差秒数
                                let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
                                //let seconds=Math.round(leave3/1000)
                                let seconds = leave3 / 1000
                                if (days > 0)
                                        str += days + "天";
                                if (hours > 0)
                                        str += hours + "小时";
                                if (minutes > 0)
                                        str += minutes + "分钟";
                                if (seconds > 0)
                                        str += seconds + "秒";
                                //--------------------------------------------------------------------------------
                                jQuery("#log_body")[0].innerHTML +=
                                        "<b>留言完毕! 用时: <span style='color:#35ff8b;'>" + str + "</span></b><br>";
                                //});
                                g_conf[0].isCommentRunStatus = false;
                                
                                g_conf[0].YunStatus = false; //没有运行
                                
                        } else {
                                alert("请确保您输入了一条消息并选择了1个或更多好友。");
                        }
                },0);
        });
        
        var GroupMode = 0; //分组标志 0没有分组 1是国籍 2是离线时间
        
        jQuery("#NationalityGroup").click(async function() { //按国籍进行高亮分组
                //1.遍历所有好友,针对不同国籍进行上色
                //2.对好友进行排序
        
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selectable").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        jQuery("#log_head, #log_body").html("");
                        
                        var jqobj = jQuery("#search_results .selectable");
        
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                g_conf[0].YunStatus = true; //正在运行
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
        
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.indexOf('{CN}') != -1 ||
                                                                SpecialName.indexOf('{EN}') != -1 ||
                                                                SpecialName.indexOf('{JP}') != -1 ||
                                                                SpecialName.indexOf('{CN-SG}') != -1 ||
                                                                SpecialName.indexOf('{CN-HANT}') != -1 ||
                                                                SpecialName.indexOf('{CN-HK}') != -1 ||
                                                                SpecialName.indexOf('{CN-MO}') != -1 ||
                                                                SpecialName.indexOf('{CN-TW}') != -1
                                                        ) //检查是否设置了国籍标识
                                                        {
                                                                if (SpecialName.indexOf('{CN}') != -1) {
                                                                        cur.style.background = "#66cc";
                                                                } else if (SpecialName.indexOf('{EN}') != -1) {
                                                                        cur.style.background = "#0C7FB2";
                                                                } else if (SpecialName.indexOf('{JP}') != -1) {
                                                                        cur.style.background = "#008080";
                                                                } else if (SpecialName.indexOf('{CN-SG}') != -1) {
                                                                        cur.style.background = "#808000";
                                                                } else if (SpecialName.indexOf('{CN-HANT}') != -1) {
                                                                        cur.style.background = "#ae7844";
                                                                } else if (SpecialName.indexOf('{CN-HK}') != -1) {
                                                                        cur.style.background = "#649115";
                                                                } else if (SpecialName.indexOf('{CN-MO}') != -1) {
                                                                        cur.style.background = "#0f965b";
                                                                } else if (SpecialName.indexOf('{CN-TW}') != -1) {
                                                                        cur.style.background = "#173eac";
                                                                }
                                                        } else if (SpecialName.indexOf('{CN-N}') != -1 ||
                                                                SpecialName.indexOf('{EN-N}') != -1 ||
                                                                SpecialName.indexOf('{JP-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-SG-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HANT-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-HK-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-MO-N}') != -1 ||
                                                                SpecialName.indexOf('{CN-TW-N}') != -1
                                                        ) //检查是否设置了国籍标识
                                                        {
                                                                if (SpecialName.indexOf('{CN-N}') != -1) {
                                                                        cur.style.background = "#66cc";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{EN-N}') != -1) {
                                                                        cur.style.background = "#0C7FB2";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{JP-N}') != -1) {
                                                                        cur.style.background = "#008080";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{CN-SG-N}') != -1) {
                                                                        cur.style.background = "#808000";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{CN-HANT-N}') != -1) {
                                                                        cur.style.background = "#ae7844";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{CN-HK-N}') != -1) {
                                                                        cur.style.background = "#649115";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{CN-MO-N}') != -1) {
                                                                        cur.style.background = "#0f965b";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                } else if (SpecialName.indexOf('{CN-TW-N}') != -1) {
                                                                        cur.style.background = "#173eac";
                                                                        cur.style.borderColor = "#FF00FF";
                                                                }
                                                        } else {
                                                                //设置了备注没有设置国籍
                                                                cur.style.background = "#188038";
                                                        }
                                                } else if (nicknameObj.length == 0) {
                                                        console.log("获取到的是steam名称");
                                                        steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        //jQuery("#log_body")[0].innerHTML +=
                                                        //      "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                        //      "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有备注不能取消! ' + profileID + '  ' + steamName + "</a><br>";
                                                        //continue;
                                                }
                                        }
                                //}
                                console.log("[Debug] name:", SpecialName);
                                //await sleep(1000);
                                //console.log(cur)
                        }
                        g_conf[0].YunStatus = false; //没有运行
                        //window.location.reload(true); //强制从服务器重新加载当前页面
                }
        
        
        });
        
        await jQuery("#NationalitySortGroup").click(async function() { //按国籍进行排序分组
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selectable").length; //所有的朋友总数
                jQuery("#log_head, #log_body").html("");
                var jqobj = jQuery("#search_results .selectable"); //所有的朋友
        
        
                var child_CN, child_EN, child_JP, child_CN_SG, child_CN_HANTd, child_CN_HK, child_CN_MO, child_CN_TW;
                if (GroupMode != 1) {
                        var mainFriendObj;
                        if (GroupMode == 2) { //节点已经被模式2处理过
                                //备份和处理
                                if (document.getElementById("search_results1") == null) { //没有被模式1处理过
                                        mainFriendObj = document.getElementById("search_results0"); //获取原节点
                                        var newCopyObj = mainFriendObj.cloneNode(true);
                                        var mainFriendObj1 = document.getElementById("search_results"); //获取之前模式的节点
                                        mainFriendObj1.style.display = "none"; //之前模式的节点隐藏
                                        mainFriendObj1.id = "search_results2"; //之前模式的节点
                                        mainFriendObj1.className = "profile_friends search_results2"; //之前模式的节点
                                        newCopyObj.style.display = ""; //克隆的原节点取消隐藏(显示)
                                        newCopyObj.id = "search_results"; //克隆的原节点
                                        newCopyObj.className = "profile_friends search_results"; //克隆的原节点
                                        mainFriendObj.parentNode.appendChild(newCopyObj); //再添加一个新的备份节点
                                } else { //被模式1处理过
                                        var obj = document.getElementById("search_results1");
                                        var mainFriendObj1 = document.getElementById("search_results"); //获取之前模式的节点
                                        mainFriendObj = document.getElementById("search_results0"); //获取原节点
                                        mainFriendObj1.style.display = "none"; //之前模式的节点隐藏
                                        mainFriendObj1.id = "search_results2"; //之前模式的节点
                                        mainFriendObj1.className = "profile_friends search_results2"; //之前模式的节点
                                        obj.style.display = ""; //取消隐藏(显示)
                                        obj.id = "search_results"; //节点
                                        obj.className = "profile_friends search_results"; //节点
                                }
        
                        } else { //节点还没有被动过
                                //备份和处理
                                mainFriendObj = document.getElementById("search_results"); //获取原节点
                                var newCopyObj = mainFriendObj.cloneNode(true);
                                newCopyObj.style.display = "none"; //克隆的原节点隐藏
                                newCopyObj.id = "search_results0"; //克隆的原节点
                                newCopyObj.className = "profile_friends search_results0"; //克隆的原节点
                                mainFriendObj.parentNode.appendChild(newCopyObj); //再添加一个新的备份节点
        
        
                        }
                        // //备份和处理
                        // var mainFriendObj = document.getElementById("search_results"); //获取原节点
                        // var newCopyObj = mainFriendObj.cloneNode(true);
                        // newCopyObj.style.display = "none"; //隐藏
                        // mainFriendObj.parentNode.appendChild(newCopyObj); //再添加一个新的备份节点
        
                        var StateObj = mainFriendObj.getElementsByClassName("state_block");
                        for (let i = 0; i < StateObj.length; i++) {
                                StateObj[i].style.display = "none"; //隐藏状态条
                        }
        
                        //创建新盒子和克隆分组节点
                        console.log("开始分组...");
                        child_CN = document.createElement('div'); //创建
                        child_CN.id = "Firend_CN";
                        child_CN.style.display = "flex";
                        child_CN.style.flex = "1 100%";
                        child_CN.style.flexFlow = "row wrap";
                        child_CN.style.margin = "8px 0px 0px 0px";
                        // child_CN.style.justifyContent = "space-start";
                        mainFriendObj.appendChild(child_CN);
        
                        child_EN = child_CN.cloneNode(true); //克隆
                        child_EN.id = "Firend_EN";
                        mainFriendObj.appendChild(child_EN);
        
                        child_JP = child_EN.cloneNode(true); //克隆
                        child_JP.id = "Firend_JP";
                        mainFriendObj.appendChild(child_JP);
        
                        child_CN_SG = child_EN.cloneNode(true); //克隆
                        child_CN_SG.id = "Firend_CN_SG";
                        mainFriendObj.appendChild(child_CN_SG);
        
                        child_CN_HANTd = child_EN.cloneNode(true); //克隆
                        child_CN_HANTd.id = "Firend_CN_HANTd";
                        mainFriendObj.appendChild(child_CN_HANTd);
        
                        child_CN_HK = child_EN.cloneNode(true); //克隆
                        child_CN_HK.id = "Firend_CN_HK";
                        mainFriendObj.appendChild(child_CN_HK);
        
                        child_CN_MO = child_EN.cloneNode(true); //克隆
                        child_CN_MO.id = "Firend_CN_MO";
                        mainFriendObj.appendChild(child_CN_MO);
        
                        child_CN_TW = child_EN.cloneNode(true); //克隆
                        child_CN_TW.id = "Firend_CN_TW";
                        mainFriendObj.appendChild(child_CN_TW);
        
                        //-------------------------------------------------
        
                        var newGroupTitle = StateObj[0].cloneNode(true); //克隆
                        newGroupTitle.style.display = ""; //去除隐藏样式
                        newGroupTitle.innerText = "CN";
                        child_CN.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "EN";
                        child_EN.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "JP";
                        child_JP.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "CN_SG";
                        child_CN_SG.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "CN_HANTd";
                        child_CN_HANTd.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "CN_HK";
                        child_CN_HK.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "CN_MO";
                        child_CN_MO.appendChild(newGroupTitle);
        
                        newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                        newGroupTitle.innerText = "CN_TW";
                        child_CN_TW.appendChild(newGroupTitle);
        
                        //遍历所有节点,向盒子里添加节点
                        for (let i = 0; i < jqobj.length; i++) {
                                let cur = jqobj.get(i);
                                let profileID = cur.getAttribute("data-steamid");
                                //--------------------------------------------------------------------
                                SpecialName = undefined;
                                steamName = undefined;
        
                                // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                //      //获取备注
                                //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                //      SpecialName = undefined;
                                //      if (SpecialNameobj != "undefined") {
                                //              SpecialName = SpecialNameobj[0].innerText; //备注
                                //      }
                                //      //获取steam名称
                                //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                //      name = steamName;
                                // } else //否则如果是好友界面
                                //{
                                        //获取名称,然后判断是备注还是steam名称
                                        var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                        var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                        SpecialName = undefined;
        
                                        if (SpecialNameobj.length > 0) //安全检查
                                        {
                                                if (nicknameObj.length > 0) //节点存在则是备注,不存在则是steam名称
                                                {
                                                        //console.log("获取到的是备注");
                                                        SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                        steamName = undefined; //就没有名称
                                                        if (SpecialName.indexOf('{CN}') != -1 || SpecialName.indexOf('{CN-N}') != -1) { //检查是否设置了国籍标识
                                                                child_CN.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{EN}') != -1 || SpecialName.indexOf('{EN-N}') != -1) {
                                                                child_EN.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{JP}') != -1 || SpecialName.indexOf('{JP-N}') != -1) {
                                                                child_JP.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{CN-SG}') != -1 || SpecialName.indexOf('{CN-SG-N}') != -1) {
                                                                child_CN_SG.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{CN-HANT}') != -1 || SpecialName.indexOf('{CN-HANT-N}') != -1) {
                                                                child_CN_HANT.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{CN-HK}') != -1 || SpecialName.indexOf('{CN-HK-N}') != -1) {
                                                                child_CN_HK.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{CN-MO}') != -1 || SpecialName.indexOf('{CN-MO-N}') != -1) {
                                                                child_CN_MO.appendChild(SpecialNameobj[0].parentNode);
                                                        } else if (SpecialName.indexOf('{CN-TW}') != -1 || SpecialName.indexOf('{CN-TW-N}') != -1) {
                                                                child_CN_TW.appendChild(SpecialNameobj[0].parentNode);
                                                        } else {
                                                                // jQuery("#log_body")[0].innerHTML +=
                                                                //      "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                                //      "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有设置国籍不能取消! ' + profileID + '  ' + SpecialName + "</a><br>";
                                                                // continue;
                                                        }
                                                } else if (nicknameObj.length == 0) {
                                                        //console.log("获取到的是steam名称");
                                                        // steamName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("\n")); //提取steam名称
                                                        // jQuery("#log_body")[0].innerHTML +=
                                                        //      "<a style='color:#00ffd8;' target='_blank' href=\"http://steamcommunity.com/profiles/" + profileID +
                                                        //      "\">" + '[' + (i + 1) + '/' + total + '] 已跳过, 没有备注不能取消! ' + profileID + '  ' + steamName + "</a><br>";
                                                        // continue;
                                                }
                                        }
                                //}
                                //console.log("[Debug] name:", name);
                        }
                        GroupMode = 1;
                }
        
        });
        
        await jQuery("#OfflineTimeGroup").click(async function() { //按在线时间进行排序分组
                var SpecialName = undefined;
                var steamName = undefined;
                var name = undefined;
                var mode = 0;
                const total = jQuery("#search_results .selectable.offline").length; //选择的朋友总数
                if (total > 0) //选择的朋友总数
                {
                        jQuery("#log_head, #log_body").html("");
                        var jqobj = jQuery("#search_results .selectable.offline"); //选择离线的好友
                        var ArrOfflineTime = [];
        
                        if (GroupMode != 2) {
                                var mainFriendObj;
                                if (GroupMode == 1) { //节点已经被模式1处理过
                                        //备份和处理
                                        if (document.getElementById("search_results2") == null) { //没有被模式2处理过
                                                mainFriendObj = document.getElementById("search_results0"); //获取原节点
                                                var newCopyObj = mainFriendObj.cloneNode(true);
                                                var mainFriendObj1 = document.getElementById("search_results"); //获取之前模式的节点
                                                mainFriendObj1.style.display = "none"; //之前模式的节点隐藏
                                                mainFriendObj1.id = "search_results1"; //之前模式的节点
                                                mainFriendObj1.className = "profile_friends search_results1"; //之前模式的节点
                                                newCopyObj.style.display = ""; //克隆的原节点取消隐藏(显示)
                                                newCopyObj.id = "search_results"; //克隆的原节点
                                                newCopyObj.className = "profile_friends search_results"; //克隆的原节点
                                                mainFriendObj.parentNode.appendChild(newCopyObj); //再添加一个新的备份节点
                                        } else { //被模式2处理过
                                                var obj = document.getElementById("search_results2");
                                                var mainFriendObj1 = document.getElementById("search_results"); //获取之前模式的节点
                                                mainFriendObj = document.getElementById("search_results0"); //获取原节点
                                                mainFriendObj1.style.display = "none"; //之前模式的节点隐藏
                                                mainFriendObj1.id = "search_results1"; //之前模式的节点
                                                mainFriendObj1.className = "profile_friends search_results1"; //之前模式的节点
                                                obj.style.display = ""; //取消隐藏(显示)
                                                obj.id = "search_results"; //节点
                                                obj.className = "profile_friends search_results"; //节点
                                        }
                                } else { //节点还没有被动过
                                        //备份和处理
                                        mainFriendObj = document.getElementById("search_results"); //获取原节点
                                        var newCopyObj = mainFriendObj.cloneNode(true);
                                        newCopyObj.style.display = "none"; //克隆的原节点隐藏
                                        newCopyObj.id = "search_results0"; //克隆的原节点
                                        newCopyObj.className = "profile_friends search_results0"; //克隆的原节点
                                        mainFriendObj.parentNode.appendChild(newCopyObj); //再添加一个新的备份节点
        
        
                                }
        
                                var StateObj = mainFriendObj.getElementsByClassName("state_block");
                                for (let i = 0; i < StateObj.length; i++) {
                                        StateObj[i].style.display = "none"; //隐藏状态条
                                }
                                //创建新盒子和克隆分组节点
                                console.log("开始分组...");
                                child_Offline = document.createElement('div'); //创建
                                child_Offline.id = "Firend_Offline";
                                child_Offline.style.display = "flex";
                                child_Offline.style.flex = "1 100%";
                                child_Offline.style.flexFlow = "row wrap";
                                child_Offline.style.margin = "8px 0px 0px 0px";
                                // child_Offline.style.justifyContent = "space-start";
                                mainFriendObj.appendChild(child_Offline);
        
                                child_Online = child_Offline.cloneNode(true); //克隆
                                child_Online.id = "Firend_Online";
                                mainFriendObj.appendChild(child_Online);
        
                                child_InGame = child_Offline.cloneNode(true); //克隆
                                child_InGame.id = "Firend_InGame";
                                mainFriendObj.appendChild(child_InGame);
        
                                //-------------------------------------------------
        
                                var newGroupTitle = StateObj[0].cloneNode(true); //克隆
                                newGroupTitle.style.display = ""; //去除隐藏样式
                                newGroupTitle.innerText = "Offline";
                                child_Offline.appendChild(newGroupTitle);
        
                                newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                                newGroupTitle.innerText = "Online";
                                child_Online.appendChild(newGroupTitle);
        
                                newGroupTitle = newGroupTitle.cloneNode(true); //克隆
                                newGroupTitle.innerText = "InGame";
                                child_InGame.appendChild(newGroupTitle);
        
                                for (let i = 0; i < jqobj.length; i++) {
                                        let cur = jqobj.get(i);
                                        let profileID = cur.getAttribute("data-steamid");
                                        //--------------------------------------------------------------------
                                        SpecialName = undefined;
                                        steamName = undefined;
        
                                        // if (document.URL.indexOf("/friends") == -1) { //如果是在个人资料页面
                                        //      //获取备注
                                        //      var SpecialNameobj = document.getElementsByClassName("nickname"); //nickname
                                        //      SpecialName = undefined;
                                        //      if (SpecialNameobj != "undefined") {
                                        //              SpecialName = SpecialNameobj[0].innerText; //备注
                                        //      }
                                        //      //获取steam名称
                                        //      steamName = document.getElementsByClassName("actual_persona_name")[0].innerText; //steam名称
                                        //      name = steamName;
                                        // } else //否则如果是好友界面
                                        //{
                                                //获取名称,然后判断是备注还是steam名称
                                                var SpecialNameobj = cur.getElementsByClassName("friend_block_content");
                                                var nicknameObj = cur.getElementsByClassName("player_nickname_hint");
                                                SpecialName = undefined;
        
                                                var OfflineTime = SpecialNameobj[0].getElementsByClassName("friend_last_online_text");
                                                var strOfflineTime = "";
        
                                                var nYear = "0",
                                                        nMonth = "0",
                                                        nDay = "0",
                                                        nHours = "0",
                                                        nMinutes = "0",
                                                        nSeconds = "0";
                                                var strData = "";
                                                if (OfflineTime.length > 0) //找到了
                                                {
                                                        strOfflineTime = OfflineTime[0].innerText.slice(5); //去掉‘上次在线’字符串
                                                        var strOfflineTimeArr = strOfflineTime.split(' ');
                                                        strOfflineTimeArr[strOfflineTimeArr.length - 1] = strOfflineTimeArr[strOfflineTimeArr.length - 1].slice(0,
                                                                -1); //去掉最后的‘前’字符串
                                                        //console.log("strOfflineTime",strOfflineTime,strOfflineTimeArr);
                                                        for (let i = 0; i < strOfflineTimeArr.length; i += 2) {
                                                                if (strOfflineTimeArr[i + 1] == "年")
                                                                        nYear = strOfflineTimeArr[i];
                                                                else if (strOfflineTimeArr[i + 1] == "月")
                                                                        nMonth = strOfflineTimeArr[i];
                                                                else if (strOfflineTimeArr[i + 1] == "天")
                                                                        nDay = strOfflineTimeArr[i];
                                                                else if (strOfflineTimeArr[i + 1] == "小时")
                                                                        nHours = strOfflineTimeArr[i];
                                                                else if (strOfflineTimeArr[i + 1] == "分钟")
                                                                        nMinutes = strOfflineTimeArr[i];
                                                                else if (strOfflineTimeArr[i + 1] == "秒")
                                                                        nSeconds = strOfflineTimeArr[i];
                                                        }
                                                        strData = nYear + '/' + nMonth + '/' + nDay + ' ' + nHours + ':' + nMinutes + ':' + nSeconds;
                                                        //console.info("strData",strData);
        
                                                        var hzWeek = new Array("日", "一", "二", "三", "四", "五", "六", "日");
        
                                                        function cweekday(wday) {
                                                                return hzWeek[wday];
                                                        }
        
                                                        function calaDay() { //计算时间差: 一个是当前时间,一个是相差的时间,就都转为秒数进行相减,再还原时间
                                                                var date = new Date();
                                                                ddd = parseInt(nDay); //转数字后取对应负数
                                                                //ttt = new Date(y, m - 1, d).getTime() + ddd * 24000 * 3600;
                                                                ttt = date.getTime() + ~(ddd * 86400);
                                                                theday = new Date();
                                                                theday.setTime(ttt);
                                                                //document.getElementById("result1").innerHTML = theday.getFullYear() + "年" + (1 + theday.getMonth()) + "月" + theday.getDate() + "日" + "星期" + cweekday(theday.getDay());
                                                                return theday.getTime(); //获取对应的时间戳
                                                        }
                                                        
                                                        function calbHMS() { //计算时间差: 一个是当前时间,一个是相差的时间,就都转为秒数进行相减,再还原时间
                                                                var date = new Date();
                                                                var date1 = new Date();
                                                                var s = nHours * 3600 + nMinutes * 60 + nSeconds;
                                                                // y2 = date.getYear();
                                                                // m2 = date.getMonth();
                                                                // d2 = date.getDay();
                                                                date1.setTime(date.getTime() + ~s);
                                                                // y3 = document.getElementById("SY3").value;
                                                                // m3 = document.getElementById("SM3").value;
                                                                // d3 = document.getElementById("SD3").value;
                                                                // day2 = new Date(y2, m2 - 1, d2);
                                                                // day3 = new Date(y3, m3 - 1, d3);
                                                                //document.getElementById("result2").innerHTML = (day3 - day2) / 86400000;
                                                                return date1.getTime();
                                                        }
        
                                                        var nS = 0;
                                                        if (nDay > 0) {
                                                                nS = calaDay()
                                                                //console.log("calaDay(nDay):",nS);
                                                        } else {
                                                                nS = calbHMS()
                                                                //console.log("calbHMS()",nS);
                                                        }
                                                        ArrOfflineTime.push([nS, i]);
                                                }
        
        
                                                //SpecialName = SpecialNameobj[0].innerText.slice(0, SpecialNameobj[0].innerText.indexOf("*")); //提取备注
                                                //创建离线区和在线区
        
                                                //遍历所有的好友,找到离线的好友,解析字符串,装入Date对象 //6个数字指定年、月、日、小时、分钟、秒(0)  //没有的就写0
                                                //获取毫秒数 dateObject.getTime()   或者用   Date.parse(datestring)
                                                // var d=new Date("5/05/11 1:10:0");
                                                // document.write("从 1970/01/01 至今已有:" + d.getTime() + " 毫秒。");
                                                // document.write("从 1970/01/01 至今已有:" + Date.parse("5/05/11 1:10:0") + " 毫秒。");
        
                                                //存储在二维数组里,一个是毫秒数,一个是数组下标
                                                //对秒数进行升序排序,然后取下标,对指定好友依次添加
                                        //}
                                        //console.log("[Debug] name:", name);
                                } //for
                                
                                //console.log(ArrOfflineTime);
                                ArrOfflineTime.sort(function(a, b) {
                                        if (a[0] > b[0])
                                                return 1;
                                        if (a[0] < b[0])
                                                return -1;
                                        return 0;
                                }); //对时间戳排序
                                //console.log(ArrOfflineTime);
        
                                //遍历二维数组,然后取下标,对指定好友依次添加
                                for (let i = 0; i < ArrOfflineTime.length; i++) {
                                        child_Offline.appendChild(jqobj[ArrOfflineTime[i][1]]); //.getElementsByClassName("friend_block_content").parentNode
                                }
                                //将游戏中和在线的好友也添加到分组里
                                var jqobj1 = jQuery("#search_results .selectable.online"); //选择在线的好友
                                var jqobj2 = jQuery("#search_results .selectable.in-game"); //选择游戏中的好友
                                var jqobj3 = jQuery("#search_results .selectable.golden"); //选择金色的好友
                                for (let i = 0; i < jqobj3.length; i++) {
                                        var strGame = jqobj3[i].getElementsByClassName("friend_small_text")[0].innerText;
                                        var game = strGame.replace(/^\s+|\s+$/g, ""); //去除两边的空格
                                        //console.log("strGame");
                                        if (game == "") {
                                                //console.log("在线");
                                                child_Online.appendChild(jqobj3[i]);
                                        } else {
                                                //console.log(game);
                                                child_InGame.appendChild(jqobj3[i]);
                                        }
                                }
                                for (let i = 0; i < jqobj1.length; i++) {
                                        child_Online.appendChild(jqobj1[i]);
                                }
                                for (let i = 0; i < jqobj2.length; i++) {
                                        child_InGame.appendChild(jqobj2[i]);
                                }
                                GroupMode = 2;
                        }
                }
        });
        
        await jQuery("#ShowFriendData").click(async function() { //显示好友详细数据(不可用)
                traverseAllFriend(); //遍历所有好友
        
        });
        
        if((window.location.origin + window.location.pathname).indexOf('/groups') != -1){ //去除参数和锚点后的url
                jQuery("#comment_submit_special").unbind("click"); //取消绑定点击事件
                jQuery("#comment_submit_special").click(async function() {
                        layer.alert("目前还没有完善,请使用旁边第一个按钮!)",{icon: 0});
                        return;
                });
                
                //document.getElementById('group_tab_content_overview').style.display = "block"; //显示
                
                //InitGroupPage
                
                // if ( window.location.hash ) //锚点被提取
                //      {
                //              initial_group_url = window.location.hash.substr( 1 );
                //      }
                //      history.replaceState //锚点被清除
                
                //$('group_tab_content_overview').hide(); //UI被隐藏
                
                jQuery("#comment_submit").unbind("click"); //取消绑定点击事件
                jQuery("#comment_submit").click(async function() { //组留言
                        var postUrl = "https://steamcommunity.com/comment/Clan/post/";  //发布
                        var delUrl = "https://steamcommunity.com/comment/Clan/delete/"; //删除
                        var endUrl = "/-1/";                                            //结尾
                        
                        const newMgs= jQuery("#comment_textarea").val(); //获取评论内容
                        
                        var jqObj = jQuery('.group_block.selected');
                        var total = jqObj.length;
                        
                        if (total > 0) //选择的朋友总数
                        {
                                jQuery("#log_head, #log_body").html("");
                                var jqobj = jQuery("#search_results .selectable.offline"); //选择离线的好友
                                
                                //遍历所有节点,向盒子里添加节点
                                for (let i = 0; i < total; i++) {
                                        var idStr = jqObj[i].getElementsByClassName('groupMemberStat linkStandard steamLink')[0].href;
                                        var id = idStr.slice(idStr.indexOf('\'')+1,idStr.lastIndexOf('\'')); //id
                                        var link = jqObj[i].getElementsByClassName('linkTitle')[0].href; //组链接
                                        var anchorName = "/#commentthread_Clan_" + id + "_area"; //锚点名称
                                        var name = jqObj[i].getElementsByClassName('linkTitle')[0].innerText; //名称
                                        
                                        
                                        (function(i, id) {
                                                //setTimeout(function() {
                                                
                                                jQuery.post(postUrl + id + endUrl, {
                                                        comment: newMgs,
                                                        count: 6,
                                                        sessionid: g_sessionID,
                                                        feature2: -1
                                                }, function(response) {
                                                        if (response.success === false) {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        "<a style='color:#ff2c85;' target='_blank' href=\"" + link + "\">" + '[' + (i + 1) + '/' + total + '] 留言失败了! ' + name +
                                                                        '&nbsp;&nbsp;&nbsp;&nbsp;' + response.error + "</a><br>";
                                                        } else {
                                                                jQuery("#log_body")[0].innerHTML +=
                                                                        '[' + (i + 1) + '/' + total + '] ' +
                                                                        "成功发表评论于 <a target='_blank' href=\"" + link + "\">" + name + "</a>" +
                                                                        "<span> → </span><a style='color:#FB7299;' target='_blank' href=\"" + (link + anchorName) + "\">" + newMgs + "</a><br>";
                                                        }
                                                }).fail(function() {
                                                        jQuery("#log_body")[0].innerHTML +=
                                                                '<span style="color:#DA2626;">[' + (i + 1) + '/' + total + '] ' +
                                                                "无法发表评论于 <a style='color:#DA2626;' target='_blank' href=\"" + link + "\">" + name + "</a></span><br>";
                                                }).always(function() {
                                                        jQuery("#log_head").html("<br><b>当前处理了 " + (i + 1) + "个, 总计 " + total + " 个组.<b>");
                                                });
                                                
                                                //}, i * 6000);
                                                
                                        })(i, id);
                                        await sleep(3000);
                                }
                        }
                        
                });
        }
        
}

/**
 * app.js
 */

class App{
        /**
         * 主程序运行环境初始化
         * @param {Object} yunMode 运行模式: 保留,当前未使用
         */
        constructor(yunMode) {
                //初始化 资源(必要)
                if(gc_res == null) gc_res = new resource();
                //初始化 UI(必要)
                if(gc_menu_friends_ui == null) gc_menu_friends_ui = new menu_friends_ui();            //您的好友
                if(gc_menu_friends_invite_ui == null) gc_menu_friends_invite_ui = new menu_friends_invite_ui();     //待处理邀请
                if(gc_menu_shielding_ui == null) gc_menu_shielding_ui = new menu_shielding_ui();          //已屏蔽
                if(gc_menu_gameFriend_ui == null) gc_menu_gameFriend_ui = new menu_gameFriend_ui();         //近期共同游戏的玩家
                if(gc_menu_liveAdmin_ui == null) gc_menu_liveAdmin_ui = new menu_liveAdmin_ui();          //直播版主
                if(gc_menu_following_Players_ui == null) gc_menu_following_Players_ui = new menu_following_Players_ui();  //关注的玩家
                if(gc_menu_groups_ui == null) gc_menu_groups_ui = new menu_groups_ui();             //您的组
                if(gc_menu_groups_invite_ui == null) gc_menu_groups_invite_ui = new menu_groups_invite_ui();      //待处理邀请
                
                //初始化 外部API(可选)
                if(gc_exApis == null) gc_exApis = new externalApis();
                
                //初始化 拓展功能(测试)
                // if(!gc_steamdb)
                // {
                //      gc_steamdb = new SteamDB();
                //      gc_steamdb.getFreeGameInfo();
                // }
                
                // if(!gc_ai)
                // {
                //      gc_ai = new intelligenceAI();
                //      gc_ai.getWeather('北京');
                // }
                
                return (async () => {
                        await this._runtimeInit(); //运行环境初始化
                        return this; // Return the newly-created instance
                }).call(this);
        }
        
        async _runtimeInit(){ //运行环境初始化
                await gc_res.init(true);
        }
        
        _lazyInit(){ //延迟初始化
                var customUrl = "";
                var profileID = getBaseInfo(0);
                if(gc_friAct == null) gc_friAct = new friendActivity(profileID || customUrl);
        }
        
        /* 初始化应用程序
        */
        async init(type){
                //0.读取错误信息数据库,检查是否需要进行恢复
                
                //1.读取存储数据库
                
                //2.准备基本运行环境
                
                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url
                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                if(URLs.g_friendUrlRegExp.test(url)){
                        console.log("重新构建UI-您的好友.");
                        if(gc_menu_friends_ui && typeof gc_menu_friends_ui.initUI === 'function')
                                return await gc_menu_friends_ui.initUI(true); //调用回调s
                }
                
                else if(URLs.g_otherUrlRegExp1_1.test(url)){
                        console.log("不处理-添加好友.");
                        //不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_2.test(url)){
                        console.log("不处理-好友待处理邀请.");
                        //暂时 不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_3.test(url)){
                        console.log("重新构建UI-已屏蔽.");
                        if(gc_menu_shielding_ui && typeof gc_menu_shielding_ui.initUI === 'function')
                                return await gc_menu_shielding_ui.initUI(true); //调用回调
                }
                else if(URLs.g_otherUrlRegExp1_4.test(url)){
                        console.log("不处理-近期共同游戏的玩家.");
                        //暂时 不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_5.test(url)){
                        console.log("重新构建UI-直播版主.");
                        if(gc_menu_liveAdmin_ui && typeof gc_menu_liveAdmin_ui.initUI === 'function')
                                return await gc_menu_liveAdmin_ui.initUI(true); //调用回调
                }
                
                else if(URLs.g_otherUrlRegExp2_1.test(url)){
                        console.log("重新构建UI-关注的玩家.");
                        if(gc_menu_following_Players_ui && typeof gc_menu_following_Players_ui.initUI === 'function')
                                return await gc_menu_following_Players_ui.initUI(true); //调用回调
                }
                else if(URLs.g_otherUrlRegExp2_2.test(url)){
                        console.log("重新构建UI-您的组.");
                        //window.location.reload(false); //重新加载当前页面
                        if(gc_menu_groups_ui && typeof gc_menu_groups_ui.initUI === 'function')
                                return await gc_menu_groups_ui.initUI(true); //调用回调
                }
                else if(URLs.g_otherUrlRegExp2_3.test(url)){
                        console.log("不处理UI-组待处理邀请!");
                        //window.location.reload(false); //重新加载当前页面
                        //暂时 不处理
                        return false;
                }
                
                // else if(URLs.g_otherUrlRegExp3.test(url)){
                //      console.log("重新构建UI-您的好友.");
                // if(gc_menu_friends_ui && typeof gc_menu_friends_ui.initUI === 'function')
                //      return await gc_menu_friends_ui.initUI(true); //调用回调s
                // }
                
                
        }
        /* 运行应用程序
        //方式: 内置, 悬浮窗口 => "internal", "window"
        //语言: 重新设置要加载的语言 ==> 参考 g_languageList 对象
        */
        async run(){
                //0.前置准备
                
                //1.创建应用程序UI
                
                //2.注册应用程序事件
                // (async()=>{
                //      console.log("异步加载绘制资源..");
                //      await gc_res._loadDrawResources();//异步加载绘制资源
                // })();
                
                var url = window.location.origin + window.location.pathname; //window.location.href //去除参数和锚点后的url
                //https://steamcommunity.com/id/miku-39/friends?l=english#state_online => https://steamcommunity.com/id/miku-39/friends
                if(URLs.g_friendUrlRegExp.test(url)){
                        console.log("重新构建UI-您的好友.");
                        if(gc_menu_friends_ui && typeof gc_menu_friends_ui.initUI === 'function')
                                return await gc_menu_friends_ui.createUI(); //调用回调
                }
                
                else if(URLs.g_otherUrlRegExp1_1.test(url)){
                        console.log("不处理-添加好友.");
                        //不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_2.test(url)){
                        console.log("不处理-好友待处理邀请.");
                        //暂时 不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_3.test(url)){
                        console.log("重新构建UI-已屏蔽.");
                        if(gc_menu_shielding_ui && typeof gc_menu_shielding_ui.initUI === 'function')
                                return await gc_menu_shielding_ui.createUI(); //调用回调
                }
                else if(URLs.g_otherUrlRegExp1_4.test(url)){
                        console.log("不处理-近期共同游戏的玩家.");
                        //暂时 不处理
                        return false;
                }
                else if(URLs.g_otherUrlRegExp1_5.test(url)){
                        console.log("重新构建UI-直播版主.");
                        if(gc_menu_liveAdmin_ui && typeof gc_menu_liveAdmin_ui.initUI === 'function')
                                return await gc_menu_liveAdmin_ui.createUI(); //调用回调
                }
                
                else if(URLs.g_otherUrlRegExp2_1.test(url)){
                        console.log("重新构建UI-关注的玩家.");
                        if(gc_menu_following_Players_ui && typeof gc_menu_following_Players_ui.initUI === 'function')
                                return await gc_menu_following_Players_ui.createUI(); //调用回调
                }
                else if(URLs.g_otherUrlRegExp2_2.test(url)){
                        console.log("重新构建UI-您的组.");
                        //window.location.reload(false); //重新加载当前页面
                        if(gc_menu_groups_ui && typeof gc_menu_groups_ui.initUI === 'function')
                                return await gc_menu_groups_ui.createUI(); //调用回调
                }
                else if(URLs.g_otherUrlRegExp2_3.test(url)){
                        console.log("不处理UI-组待处理邀请!");
                        //window.location.reload(false); //重新加载当前页面
                        //暂时 不处理
                        return false;
                }
                
                // else if(URLs.g_otherUrlRegExp3.test(url)){
                //      console.log("重新构建UI-您的好友.");
                //      gc_menu_friends_ui && typeof gc_menu_friends_ui.initUI === 'function' && return await gc_menu_friends_ui.createUI(); //调用回调s
                // }
        }
        /* 停止应用程序运行
        //级别: 注销当前事件和UI 停止脚本运行, +还原改动, +释放资源  => "stop", "reModify", "releReSource"
        //方式: 内置, 悬浮窗口 => "internal", "window" 
        */
        stop(rank){
                //
        }
        /* 重新运行应用程序
        //级别: 从缓存重新加载, 从服务器重新加载, 只重新加载,不运行脚本 => "reLoadCache", "reLoadServer", "onlyLoad"
        //方式: 内置, 悬浮窗口 => "internal", "window" 
        */
        async reRun(rank){
                
        }
        /* 设置显示模式
        //模式: 显示, 隐藏 => "show", "hide"
        //方式: 内置, 悬浮窗口 => "internal", "window" 
        */
        setShowMode(showMode = "show", showType = "internal"){
                
        }
        /* 设置窗口参数
        //位置: Position: x, y => css单位
        //大小: Size: width, height => css单位
        //背景透明度: 百分比 => 0~1
        //是否描绘边框: bool => true, false
        //是否显示标题栏: bool => true, false
        */
        reSetWindow(posX, posY, width, height, alpha = 1, isShowBorder = true, isShowTitleBar = true){
                
        }
}

(async()=>{
        gc_app = await new App();
        if(await gc_app.init(true) != false){
                await gc_app.run();
        }
})();