51NB Asst

51助手,黑名单,自动签到

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name          51NB Asst
// @description  51助手,黑名单,自动签到
// @namespace  by 51nb.com-FlyToSky
// @version        3.1.3
// @grant           GM_setValue
// @grant           GM_getValue
// @grant           GM_addStyle
// @include      *forum.51nb.com/*
// @include      *.51nb.com/forum/*
// ==/UserScript==

// 3.1.3 -- 修复提交BUG--重要
// 3.1.2 -- 修复小尾巴BUG
// 3.1.1 -- 修复回复引用帖子时添加小尾巴(需要Greasemonkey3.0以上支持)功能;调整界面。
// 3.1.0 -- 支持论坛新改版,修复一些BUG
// 3.0.0 -- 增加支持GreaseMonkey2.0以上,Firefox30以上

var bid_Settings;
var bid_BlackLists;
var bid_blacklistStr;
var bid_signed;
var bid_formhash;
var bid_uid;
var bid_fid;
var bid_keywords;
var bid_Key_lastTid;
var bid_VIEWTHREAD = window.location.href.indexOf('/thread-') >= 0 || (window.location.href.indexOf('/forum.php?') >= 0 && window.location.href.indexOf('mod=viewthread') >= 0);
var bid_FORUMDISPLAY = window.location.href.indexOf('/forum-') >= 0 || (window.location.href.indexOf('/forum.php?') >= 0 && window.location.href.indexOf('mod=forumdisplay') >= 0);

if (!this.GM_getValue) {
    this.GM_getValue = function (key,def) {
        return localStorage.getItem(key) || def;
    }
    this.GM_setValue = function (key,value) {
        return localStorage.setItem(key, value);
    }
    this.GM_deleteValue = function (key) {
        return localStorage.removeItem(key);
    }
}

if (!this.GM_addStyle) {
    this.GM_addStyle = function(css) {
        var head, style;
        head = document.getElementsByTagName('head')[0];
        if (!head) { return; }
        style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = css;
        head.appendChild(style);
    }
}

function bid_xpath(q) {
    return document.evaluate(q, document, null,    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}

//读取设置
function bid_readConfig(){
    var s=GM_getValue('51Asst_Settings_' + bid_uid,'');
    if (s) {
        bid_Settings = JSON.parse(s);
        bid_signed = (bid_Settings.lastSignDate == (new Date()).toDateString()) ? true : false;
    } else {
        bid_Settings = new Object();
    }
    
    s=GM_getValue('51Asst_BlackLists_' + bid_uid,'');
    bid_blacklistStr = ',';
    if (s) {
        bid_BlackLists = JSON.parse(s);
        for (i=0;i<bid_BlackLists.blacklist.length;i++) {
            bid_blacklistStr += bid_BlackLists.blacklist[i].id + '=' + bid_BlackLists.blacklist[i].name + ',';
        }
    } else {
        bid_BlackLists= new Object();
        bid_BlackLists.blacklist = new Array();
    }

    s=GM_getValue('51Asst_keywords_' + bid_uid,'');
    if (s) {
        bid_keywords = JSON.parse(s);
    } else {
        bid_keywords = new Object();
        bid_keywords.key = new Array();
    }
}

var bid_BtnID;    
function bid_AddBlockBtn(){        // 添加屏蔽按钮
    s = bid_xpath('//div[starts-with(@id,"favatar")]/div[@class="pi"]/div/a');
    for (i = 0; i < s.snapshotLength; ++i) {
        var a = s.snapshotItem(i);
        if( a != undefined){
            a.addEventListener('mouseenter', function(e){clearTimeout(bid_BtnID);var p=bid_GetPos(e.target);var d=document.getElementById('_51nbbl_div');e.target.parentNode.parentNode.appendChild(d);d.style.left=parseInt(p.left)+'px';d.style.top=parseInt(p.top)+24+'px';d.style.display='';},false);
            a.addEventListener('mouseleave', function(e){bid_BtnID=setTimeout("document.getElementById('_51nbbl_div').style.display='none';",500)},false);
        }
    }
}

function bid_GetPos(obj) {        //获取元素的绝对坐标
    var curleft=0;
    var curtop=0;
    var curwidth=0;
    var curheight=0;

    if (obj.offsetParent) {        //返回父元素
        curwidth = obj.offsetWidth;
        curheight = obj.offsetHeight;
        while (obj.offsetParent) {        //遍历所有父元素
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
            obj = obj.offsetParent;        
        }
    } else if (obj.x) {
        curleft += obj.x;
        curtop += obj.y;
    }
    return {left:curleft,top:curtop,right:curleft+curwidth,bottom:curtop+curheight};
}

function bid_BlockUser(e){      //点击屏蔽按钮
    var a = e.target.parentNode.parentNode.getElementsByClassName('authi')[0].getElementsByTagName('a')[0];
    var nm= a.text.replace(/[\r\n]/g,'');
    var id= a.href.substring(a.href.indexOf('uid-')+4,a.href.indexOf('.html'));
    bid_readConfig();                    //先读取一下,解决多窗口情况下的同步问题
    if (bid_blacklistStr.indexOf(','+id+'=') < 0) {    //检查黑名单是否已存在
        bid_blacklistStr += id + '=' + nm;
        bid_addBidlist(id,nm);
        bid_SaveConfig(2)
    }
    bid_BlockList();
}

function bid_BlockList(){      // 屏蔽黑名单
    switch (bid_fid) {
        case '88':
            if (!bid_Settings.blockForum88) return;
            break;
        case '41':
            if (!bid_Settings.blockForum41) return;
            break;
        default:
            if (!bid_Settings.blockForumother) return;
    }
    if(bid_VIEWTHREAD){   // 帖子
        //屏蔽回复
        var s = bid_xpath('//div[starts-with(@id,"favatar")]/div[@class="pi"]/div/a');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if( a != undefined){
                var id= a.href.substring(a.href.indexOf('uid-')+4,a.href.indexOf('.html'));
                if (bid_blacklistStr.indexOf(','+id+'=')>=0)
                    a.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display='none';
            }
        }
        // 屏蔽被引用内容
        var s = bid_xpath('//div[@class="msgbody"]/div[@class="msgborder"]/font[1]');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            var n = a.textContent.substring(0,a.textContent.indexOf(' '));
            if (bid_blacklistStr.indexOf('='+n+',')>=0)
                a.parentNode.parentNode.style.display = 'none';
        }

        // 屏蔽点评内容
        var s = bid_xpath('//div[starts-with(@id,"comment_")]/div[@class="pstl xs1 cl"]/div[@class="psta vm"]/a[starts-with(@href,"space-uid")]');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            var id = a.href.substring(a.href.indexOf('-uid-')+5,a.href.indexOf('.html'));
            if (bid_blacklistStr.indexOf(','+id+'=')>=0)
                a.parentNode.parentNode.style.display = 'none';
        }
        
        //重新设置背景色
        var s = bid_xpath('//div["postlist"]/div[starts-with(@id,"post_") and starts-with(@class,"bbs")]');
        var j=0;
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if( a != undefined){
                if (a.style.display != 'none') {
                    a.className = (j%2)==0?"bbs2":"bbs1";
                    ++j;
                }
            }
        }

    } else if(bid_FORUMDISPLAY){ // 论坛列表
        // 屏蔽主题帖
        var s = bid_xpath('//table["threadlisttableid"]/tbody/tr/td[@class="author"]/cite/a[starts-with(@href,"space-uid")]');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if( a != undefined){
                var id= a.href.substring(a.href.indexOf('uid-')+4,a.href.indexOf('.html'));
                if (bid_blacklistStr.indexOf(','+id+'=')>=0)
                    a.parentNode.parentNode.parentNode.parentNode.style.display='none';
            }
        }

        //重新设置背景色
        var s = bid_xpath('//table["threadlisttableid"]/tbody[starts-with(@id,"normalthread_")]');
        var j=0;
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if( a != undefined){
                if (a.style.display != 'none') {
                    if (a.id == 'forumnewshow') {
                        j=0;
                    } else {
                        a.childNodes[1].bgColor = (j % 2)==0?"#E3E3E3":"#F7F7F7";
                    }
                    ++j;
                }
            }
        }
    
        // 隐藏最后回复位置的显示
        var s = bid_xpath('//table["threadlisttableid"]/tbody/tr/td[@class="by"]/cite/a[starts-with(@href,"space-username-")]');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if(a != undefined) {
                var n = a.text.replace(/[\r\n]/g,'');
                if (bid_blacklistStr.indexOf(('='+n+','))>=0) a.innerHTML='anonymous';
            }
        }
    }
}

function bid_menu(m) {
    var cur_menu=document.getElementById(m).parentNode;
    for (i=0;i<cur_menu.parentNode.childNodes.length;i++) {
        if (cur_menu.parentNode.childNodes[i].className=="_c_menu")
            cur_menu.parentNode.childNodes[i].className="";
    }
    cur_menu.className="_c_menu";
    document.getElementById("_51nb_setting1").style.display="none";
    document.getElementById("_51nb_setting2").style.display="none";
    document.getElementById("_51nb_setting3").style.display="none";
    switch(m) {
        case "_bid_m1":
            document.getElementById("_51nb_setting1").style.display="";
            break;
        case "_bid_m2":
            document.getElementById("_51nb_setting2").style.display="";
            break;
        case "_bid_m3":
            document.getElementById("_51nb_setting3").style.display="";
            break;
    }
}

function bid_CreatConfigPanel(){    //创建面板
    GM_addStyle(
        '#_51nbccp_div {position: fixed;left:50%;bottom:50px;padding:0px 15px;margin-left:-115px; margin-top:-135px;align:center;width:220px;z-index:99;background:#d3d3d3;border:1px solid #bfbfbf;opacity:0.95;text-align:center;font-size:12px}'+
        '#_51nbccp_div table,#_51nbccp_div input,#_51nbccp_div select {font-size: 12px;}'+
        '#_51nbccp_div input {height: 20px;}'+
        '#_51nbccp_div input[type="text"] {height:16px !important;}'+
        '#_51nbccp_div input[type="checkbox"] {height:16px !important;}'+
        '#_51nbccp_div input[type="button"] {height: 22px  !important;}'+
        '#_51nb_setting1,#_51nb_setting2,#_51nb_setting3 {padding:5px 0px;border-width: 1px 0px 0px;border-color:#a3a3a3;border-style:solid;height:180px;text-align:left}'+
        '#_bid_kw_up,#_bid_kw_down,#_bid_kw_modi,#_bid_kw_del {margin-top:-2px !important;height:18px !important;}'+
        '#_bid_menu li {list-style: none outside none;display:inline;}'+
        '#_bid_menu li {background:#b3b3b3;margin-left: 2px;}'+
        '#_bid_menu li._c_menu a {border-color:#a3a3a3;background:#d3d3d3;font-weight:bold;}'+
        '#_bid_menu a {border-width: 1px 1px 0px;border-color:#a3a3a3;border-style:solid;padding:1px 8px;height:25px;line-height:24px;text-decoration:none;color:#000;background:#b3b3b3;outline:none}'+
        '#_51nbgdb_div {position: fixed;top:180px;left:50%;margin-left:-75px; align:center;width:150px;padding: 7px;text-align:center;color:#fff;background:#66c;z-index:100;border-radius:5px;font-size:14px;box-shadow: 0px 0px 9px #999999;}'+
        '#_51nbsr_div {position: fixed;right:5px;bottom:5px;align:center;padding: 0px;z-index:98;background:#f7f7f7;border:1px solid #b6b6b6;opacity:0.90;text-align:left;}'+
        '#_51nbsr_div td{border-bottom:1px solid #c6c6c6;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding:2px 2px 2px 5px}'+
        '#_51nbbl_div {position:absolute;width:50px;padding:3px 5px;background:#f3f3f3;border:1px solid #e3e3e3;z-index:101;text-align:center;opacity:0.90;}'  //background:#b3b3b3;border:1px solid #b6b6b6;
    );
    if (bid_Settings.autoSign && (!bid_signed) && (bid_formhash)) {
        var bid_gdb = document.createElement("div");        //签到提示面板
        bid_gdb.id = '_51nbgdb_div';
        bid_gdb.style.display = "none";
        document.getElementsByTagName('body')[0].appendChild(bid_gdb);
    }

    var bid_sresult = document.createElement("div");        //关键字提示面板
    bid_sresult.id = '_51nbsr_div';
    bid_sresult.style.display = "none";
    bid_sresult.innerHTML='<div style="padding:2px;color:#fff;background:#6666cc;font-weight:bold;text-align:center">感兴趣主题'+
        '<a href="javascript:void(0)" id="_bid_close" style="float:right;color:#fff;font-weight:normal;font-size: 10px;">关闭</a></div>'+
        '<div style="height:94px;overflow-y:scroll">'+
        '<table id="_bid_tbl_sresult" cellspacing="0" style="width:200px;table-layout:fixed"></table>'+
        '</div>';
    document.getElementsByTagName('body')[0].appendChild(bid_sresult);
    document.getElementById('_bid_close').addEventListener('click', function(){document.getElementById('_51nbsr_div').style.display='none';}, false);

    var bid_div_block = document.createElement("div");        //屏蔽提示面板
    bid_div_block.id = '_51nbbl_div';
    bid_div_block.style.display = "none";
    var a=document.createElement("a");
    a.innerHTML='屏蔽';
    a.href='javascript:void(0)';
    a.addEventListener('click', bid_BlockUser,false);
    bid_div_block.appendChild(a);
    bid_div_block.addEventListener('mouseenter', function(e){clearTimeout(bid_BtnID);},false);
    bid_div_block.addEventListener('mouseleave', function(e){bid_BtnID=setTimeout("document.getElementById('_51nbbl_div').style.display='none';",500)},false);
    document.getElementsByTagName('body')[0].appendChild(bid_div_block);
    
    var bid_ccp = document.createElement("div");        //设置面板
    bid_ccp.id = "_51nbccp_div";
    bid_ccp.style.display = "none";
    bid_ccp.innerHTML = 
        '<div style="position:relative;margin:0px auto;width:90%;height:55px;padding:10px 0px 0px;"><font size=3>51助手'+/*<sub><font color=#e7e7e7>&nbsp;&nbsp;ver 2.0</font></sub>*/'</font>'+
        '<div id="_bid_menu" style="position:absolute;bottom:0px;padding:10px 0px 0px;height:20px"><ul>'+
        '<li class="_c_menu"><a id="_bid_m1" hidefocus="true" href="javascript:void(0)">黑名单</a></li>'+
        '<li><a id="_bid_m2" hidefocus="true" href="javascript:void(0)">关键字</a></li>'+
        '<li><a id="_bid_m3" hidefocus="true" href="javascript:void(0)">其它</a></li>'+
        '</ul></div></div>'+
        '<div id="_51nb_setting1">'+
        '<table id="_bid_cc1">'+
        '<tr><td>屏蔽版块:</td></tr>'+
        '<tr><td>'+
            '<input id="_bid_blockForum88" type="checkbox" />联谊区'+
            '<input id="_bid_blockForum41" type="checkbox" />交易区'+
            '<input id="_bid_blockForumother" type="checkbox" />其它版块'+
        '</td></tr>'+
        '<tr><td>黑名单:</td></tr>'+
        '<tr><td>'+
            '<select size="4" id="_bid_blacklist" multiple style="width:155px">'+
            '</select>'+
            '<div style="float:right;padding-left:2px;">'+
                '<input type="button" id="_bid_del" value="删除" onclick="javascript:void(0)"/>'+
            '</div>'+
        '</td></tr>'+
        '</table></div>'+
        '<div id="_51nb_setting2">'+
        '<table id="_bid_cc2">'+
        '<tr><td>版块:</td>'+
        '<td>'+
            '<select id="_bid_forum_list" style="height:17px;width:100px;padding:0px 0px">'+
            '<option value="1">技术区</option>'+
            '<option value="2">智能手机</option>'+
            '<option value="41">交易区</option>'+
            '<option value="88">联谊区</option>'+
            '<option value="113">推荐区</option>'+
            '</select>'+
        '</td></tr>'+
        '<tr><td>关键字:</td>'+
        '<td>'+
            '<input type="text" id="_bid_key" value="" style="width:100px;background:#fff"/>'+
            '&nbsp;<input type="button" id="_bid_kw_add" value="添加" onclick="javascript:void(0)"/>'+
        '</td></tr>'+
        '<tr><td></td><td>(多个关键字用"|"隔开)</td></tr>'+
        '<tr><td colspan="2">关键字列表:</td></tr>'+
        '<tr><td colspan="2">'+
            '<select size="4" id="_bid_keyslist" multiple style="width:155px"></select>'+
            '<div style="float:right;padding-left:2px;">'+
                '<input type="button" id="_bid_kw_up" value="上移" onclick="javascript:void(0)"/></br>'+
                '<input type="button" id="_bid_kw_down" value="下移" onclick="javascript:void(0)"/></br>'+
                '<input type="button" id="_bid_kw_modi" value="编辑" onclick="javascript:void(0)"/></br>'+
                '<input type="button" id="_bid_kw_del" value="删除" onclick="javascript:void(0)"/>'+
            '</div>'+
        '</td></tr>'+
        '</table></div>'+
        '<div id="_51nb_setting3">'+
        '<table id="_bid_cc3">'+
        '<tr><td>'+'发贴小尾巴:'+'</td></tr>'+
        '<tr><td>'+'&nbsp;&nbsp;&nbsp;文字&nbsp;&nbsp;'+'<input type="text" id="_bid_wb_text" value="" style="width:120px;background:#fff"/>'+'</td></tr>'+
        '<tr><td>'+'&nbsp;&nbsp;&nbsp;链接&nbsp;&nbsp;'+'<input type="text" id="_bid_wb_link" value="" style="width:120px;background:#fff"/>'+'</td></tr>'+
        '<tr><td>'+'<input id="_bid_autoSign" type="checkbox" />自动签到'+'</td></tr>'+
        '</table></div>'+
        '<div style="padding:0px 0px 15px;">'+
            '<input type="button" id="_bid_ok" value="确 定" onclick="javascript:void(0)"/>'+
            '&nbsp;&nbsp;&nbsp;'+
            '<input type="button" id="_bid_cancel" value="取 消" onclick="javascript:void(0)"/>'+
        '</div>'
        ;
        
    document.getElementsByTagName('body')[0].appendChild(bid_ccp);
    document.getElementById('_51nb_setting2').style.display='none';
    document.getElementById('_51nb_setting3').style.display='none';
    document.getElementById('_bid_ok').addEventListener('click', function(){bid_SaveConfig(99);bid_SaveConfig(0);}, false);
    document.getElementById('_bid_cancel').addEventListener('click', function(){bid_SaveConfig(0);}, false);
    document.getElementById('_bid_del').addEventListener('click', function(){bid_delBidlist();}, false);
    document.getElementById('_bid_m1').addEventListener('click', function(){bid_menu(this.id);}, false);
    document.getElementById('_bid_m2').addEventListener('click', function(){bid_menu(this.id);}, false);
    document.getElementById('_bid_m3').addEventListener('click', function(){bid_menu(this.id);}, false);
    document.getElementById('_bid_kw_add').addEventListener('click', function(){bid_key_add();}, false);
    document.getElementById('_bid_kw_del').addEventListener('click', function(){bid_key_del();}, false);
    document.getElementById('_bid_kw_modi').addEventListener('click', function(){bid_key_modi();}, false);
    document.getElementById('_bid_kw_up').addEventListener('click', function(){bid_key_move(-1);}, false);
    document.getElementById('_bid_kw_down').addEventListener('click', function(){bid_key_move(1);}, false);
    document.addEventListener('keydown', bid_keyHandle, false);
    bid_refreshCfgdiv();
}

function bid_key_add() {
    var key=document.getElementById("_bid_key");
    if (key.value) {
        var fl = document.getElementById("_bid_forum_list");
        var kl = document.getElementById("_bid_keyslist");
        for (i=0;i<kl.options.length;i++){
            if (kl[i].value==fl[fl.selectedIndex].value) {
                kl[i].text='['+fl[fl.selectedIndex].text+']'+key.value;
                document.getElementById("_bid_kw_add").value='添加';
                key.value='';
                return;
            }
        }
        var o = document.createElement('option');
        o.value = fl[fl.selectedIndex].value;
        o.text = '['+fl[fl.selectedIndex].text+']'+key.value;
        o.title=o.text;
        kl.options[kl.options.length] = o;
        key.value='';
    }
}

function bid_key_modi() {
    var kl = document.getElementById("_bid_keyslist");
    if (kl.selectedIndex<0) return;
    var key=document.getElementById("_bid_key");
    var fl = document.getElementById("_bid_forum_list");
    for (i=0;i<fl.options.length;i++){
        if (fl[i].value==kl[kl.selectedIndex].value) {
            fl.selectedIndex=i;
            key.value=kl[kl.selectedIndex].text.substring(kl[kl.selectedIndex].text.indexOf(']')+1);
            document.getElementById("_bid_kw_add").value='修改';
            break;
        }
    }
}

function bid_key_del() {
    var kl = document.getElementById("_bid_keyslist"); 
    for (i=0;i<kl.options.length;i++) {
        if (kl.options[i].selected) {
            kl.options.remove(i--);
        }
    }
}

function bid_key_move(d) {
    function moveitem(k,d){
        var o=k.options[k.selectedIndex];
        k.add(o,k.options[k.selectedIndex+d]);
    }
    
    var kl = document.getElementById("_bid_keyslist"); 
    if (kl.selectedIndex<0) return;
    if ((d == -1) && (kl.selectedIndex>0)) {
        moveitem(kl,d);
    } else if ((d == 1) && (kl.selectedIndex>-1 && kl.selectedIndex<kl.length-1)) {
        moveitem(kl,d+1);
    }
}

function bid_SaveConfig(s) {        //保存
    if (s>0) {
        if (s==1 || s==99) {        //保存设置
            bid_Settings.blockForum88 = document.getElementById('_bid_blockForum88').checked;
            bid_Settings.blockForum41 = document.getElementById('_bid_blockForum41').checked;
            bid_Settings.blockForumother = document.getElementById('_bid_blockForumother').checked;

            bid_Settings.autoSign = document.getElementById('_bid_autoSign').checked;
            
            bid_Settings.wb_text = document.getElementById('_bid_wb_text').value;
            bid_Settings.wb_link = document.getElementById('_bid_wb_link').value;

            
            GM_setValue('51Asst_Settings_' + bid_uid, JSON.stringify(bid_Settings));
        }
        
        if (s==2 || s==99) {        //保存黑名单
            bid_BlackLists.blacklist.length = 0;
            var bl = document.getElementById("_bid_blacklist"); 
            for ( i = 0; i<bl.options.length; i++) {
                bid_BlackLists.blacklist[i]=new Object();
                bid_BlackLists.blacklist[i].id=bl.options[i].value;
                bid_BlackLists.blacklist[i].name=bl.options[i].text;
            }
            GM_setValue('51Asst_BlackLists_' + bid_uid,JSON.stringify(bid_BlackLists));
        }
        
        if (s==3 || s==99) {        //保存关键字
            var bl = document.getElementById("_bid_keyslist"); 
            for (j=0;j<bid_keywords.key.length;j++) {
                var keyexist=false;
                for (i = 0; i<bl.options.length; i++) {
                    if (bid_keywords.key[j].fid==bl.options[i].value) {
                        keyexist=true;
                        break;
                    }
                }
                if (!keyexist) {
                    bid_keywords.key.splice(j--,1);
                }
            }
            for (i = 0; i<bl.options.length; i++) {
                var keyexist=false;
                for (j=0;j<bid_keywords.key.length;j++) {
                    if (bid_keywords.key[j].fid==bl.options[i].value) {
                        bid_keywords.key[j].keyword=bl.options[i].text;
                        keyexist=true;
                        if (i!=j) {
                            var o=bid_keywords.key[i];
                            bid_keywords.key[i]=bid_keywords.key[j];
                            bid_keywords.key[j]=o;
                        }
                        break;
                    }
                }
                if (!keyexist) {
                    bid_keywords.key[bid_keywords.key.length]=new Object();
                    bid_keywords.key[bid_keywords.key.length-1].fid=parseInt(bl.options[i].value);
                    bid_keywords.key[bid_keywords.key.length-1].keyword=bl.options[i].text;
                    bid_keywords.key[bid_keywords.key.length-1].chktime=0;
                    bid_keywords.key[bid_keywords.key.length-1].lastTid=0;
                }
            }
            GM_setValue('51Asst_keywords_' + bid_uid,JSON.stringify(bid_keywords));
        }
        
        if (s==1 || s==2) {
            bid_BlockList();
        }
    } else {
        document.getElementById('_51nbccp_div').style.display = (document.getElementById('_51nbccp_div').style.display == '')?'none':'';
        if (document.getElementById('_51nbccp_div').style.display == 'none') bid_refreshCfgdiv();        //刷新设置界面
    }
}

function bid_refreshCfgdiv() {        //刷新设置界面
    if (document.getElementById("_bid_blacklist").options.length != bid_BlackLists.blacklist.length) bid_addBidlist();

    document.getElementById('_bid_blockForum88').checked = bid_Settings.blockForum88;
    document.getElementById('_bid_blockForum41').checked = bid_Settings.blockForum41;
    document.getElementById('_bid_blockForumother').checked = bid_Settings.blockForumother;
    document.getElementById('_bid_wb_text').value = bid_Settings.wb_text?bid_Settings.wb_text:'';
    document.getElementById('_bid_wb_link').value = bid_Settings.wb_link!=undefined?bid_Settings.wb_link:'http://forum.51nb.com/thread-1459523-1-1.html';
    if (bid_uid) {
        document.getElementById('_bid_autoSign').checked = bid_Settings.autoSign;
        document.getElementById('_bid_autoSign').disabled = false;
    } else {
        document.getElementById('_bid_autoSign').checked = false;
        document.getElementById('_bid_autoSign').disabled = true;
    }
    var kl = document.getElementById("_bid_keyslist");
    for (i=0;i<bid_keywords.key.length;i++) {
        var o=document.createElement('option');
        o.value=bid_keywords.key[i].fid;
        o.text=bid_keywords.key[i].keyword;
        o.title=o.text;
        kl.options[i]=o;
    }
}

function bid_addBidlist(id,nm) {        //刷新新黑名单列表
    var bl = document.getElementById("_bid_blacklist");
    if (id !=undefined) {        //id非空时增加一个名单
        var o = document.createElement('option');
        o.value = id;
        o.text = nm;
        bl.options[bl.options.length] = o;
    } else {        //id为空时刷新列表
        bl.options.length = 0;
        for ( i = 0; i<bid_BlackLists.blacklist.length; i++) {
            var o = document.createElement('option');
            o.value = bid_BlackLists.blacklist[i].id;
            o.text = bid_BlackLists.blacklist[i].name;
            bl.options[bl.options.length] = o;
        }
    }
}

function bid_delBidlist() {        //删除黑名单列表选中的名单
    var bl = document.getElementById("_bid_blacklist"); 
    for (i=0;i<bl.options.length;i++) {
        if (bl.options[i].selected) {
            bl.options.remove(i--);
        }
    }
}

function bid_keyHandle(e) {        //热键回调函数
    if (/^(?:input|textarea)$/i.test(e.target.localName)) return;
    var keycom = e.ctrlKey? '1':'0';
    keycom += (e.metaKey || e.altKey)? '1':'0';
    keycom += e.shiftKey? '1':'0';
    keycom += String.fromCharCode(e.which);
    if (keycom=='010N') {
        e.preventDefault();e.stopPropagation();bid_SaveConfig(0); 
    }
}

function bid_sign() {
    if (bid_Settings.autoSign && (!bid_signed) && (bid_formhash)) {
        var d = new Date();
        if ((d.getHours()*60 + d.getMinutes()) < 10) return;        //0点10分以后才开始签到
        var http = new XMLHttpRequest();
        var url = 'plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&sign_as=1&&referer=http%3A//forum.51nb.com/forum.php&inajax=1';
        var data = 'formhash=' + bid_formhash + '&qdxq=kx';
        http.onreadystatechange=function() {
            if (http.readyState==4 && http.status==200) {        // 200 = http OK
                bid_signed = true;
                bid_Settings.lastSignDate = d.toDateString();
                bid_SaveConfig(1);
                var reg=/^<div class="c">[\s\S]* (\d+) nb\. <\/div>.*/gm;
                if (reg.test(http.responseText)) {
                    document.getElementById('_51nbgdb_div').innerHTML = '今日签到:+'+RegExp.$1+' NB';
                    document.getElementById('_51nbgdb_div').style.display = '';
                    setTimeout(function(){document.getElementById('_51nbgdb_div').style.display = 'none';}, 3000);
                }
            }
        }
        http.open('POST', url, true);
        http.setRequestHeader("Referer","http://forum.51nb.com/forum.php");
        http.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gbk");
        http.overrideMimeType("text/html;charset=gbk");
        http.send(data);
    }
}

function bid_search(i,p) {
    if (i >= bid_keywords.key.length) return;
    var gt=parseInt((new Date()).getTime()/1000);
    var dt=gt - bid_keywords.key[i].chktime;
    dt=dt>259200?259200:dt;        //只检测最近三天内的新主题
    if (dt > 30*60) {        //两次检测间隔30分钟
        dt += 60;
        var http = new XMLHttpRequest();
        var url = 'forum.php?mod=forumdisplay&fid='+bid_keywords.key[i].fid+'&orderby=dateline&filter=dateline&dateline='+dt+'&page='+p;
        http.onreadystatechange=function() {
            if (http.readyState==4 && http.status==200) {        // 200 = http OK
                var regstr='<input type="text" name="custompage"[^>]*><span [^>]*> \\/ ([\\d])+ .*';
                var reg=RegExp(regstr,'mi');
                var MaxPage=reg.test(http.responseText)?parseInt(RegExp.$1):0;
                MaxPage=MaxPage>3?3:MaxPage;        //最大读取3页

                if (bid_keywords.key[i].fid==113)        //处理推荐区
                    var regstr='<div[^>]* class="[^"]* noBg"><a.*href="forum\\.php\\?mod=viewthread&amp;tid=(\\d+)&[^>]*>([^<]*(?:' + bid_keywords.key[i].keyword.substring(bid_keywords.key[i].keyword.indexOf(']')+1) + ')[^<]*)<[\\s\\S]*?<span>发布者:\\s*(.*?)\\s*<\\/span>';
                else
                    var regstr='<a[^>]*href="forum\\.php\\?mod=viewthread&amp;tid=(\\d+)&[^>]*>([^<]*(?:'+bid_keywords.key[i].keyword.substring(bid_keywords.key[i].keyword.indexOf(']')+1)+')[^<]*)</a>[\\s\\S]*?<a.*href="space-uid-\\d+\\.html"[^>]*>([^<]*)</a>';
                var reg=RegExp(regstr,'gi');
                if (p==1) bid_Key_lastTid=bid_keywords.key[i].lastTid;
                while ((reg.exec(http.responseText)) != null) {
                    //RegExp.$1  TID
                    //RegExp.$2  标题
                    //RegExp.$3  作者
                    //console.log(RegExp.$1,RegExp.$2,RegExp.$3);
                    if (bid_Key_lastTid < parseInt(RegExp.$1)) {
                        if  (bid_blacklistStr.indexOf('='+RegExp.$3+',')<0) {
                            var tr=document.createElement('tr');
                            var td=document.createElement('td');
                            var a=document.createElement('a');
                            a.title='〖'+bid_keywords.key[i].keyword.substring(1,bid_keywords.key[i].keyword.indexOf(']'))+'〗'+RegExp.$2+'『'+RegExp.$3+'』';
                            a.href='thread-' + RegExp.$1 + '-1-1.html';
                            a.target='_blank';
                            a.innerHTML=RegExp.$2;
                            td.appendChild(a);
                            tr.appendChild(td);
                            document.getElementById('_bid_tbl_sresult').appendChild(tr);
                            document.getElementById('_51nbsr_div').style.display='';
                        }
                        if (bid_keywords.key[i].lastTid < parseInt(RegExp.$1))
                            bid_keywords.key[i].lastTid=parseInt(RegExp.$1);
                    }
                }
                if (p<MaxPage) {
                    setTimeout(function(){bid_search(i,++p);},0);
                } else {
                    bid_keywords.key[i].chktime=gt;
                    if (i==bid_keywords.key.length-1) {
                        GM_setValue('51Asst_keywords_' + bid_uid,JSON.stringify(bid_keywords));
                    }
                    setTimeout(function(){bid_search(++i,1);},0);
                }
            }
        }
        http.open('GET', url, true);
        http.setRequestHeader("Referer","http://forum.51nb.com/index.php");
        http.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gbk");
        http.overrideMimeType("text/html;charset=gbk");
        http.send(null);
    } else {
        setTimeout(function(){bid_search(++i,1);},0);
    }
}

function bid_getFormhash() {
    var s = bid_xpath('//a[starts-with(@href,"member.php?")]');
    for (i = 0; i < s.snapshotLength; ++i) {
        var a = s.snapshotItem(i);
        if( a != undefined && a.href.indexOf('action=logout') >= 0) {
            bid_formhash = a.href.substring(a.href.indexOf('formhash')+9, a.href.indexOf('formhash')+9+8);
        }
    }
    if (bid_formhash) {
        var s = bid_xpath('//div[@id="hd"]/div[@class="wp"]/div/div[@id="um"]/p/strong/a[starts-with(@href,"space-uid-")]');
        for (i = 0; i < s.snapshotLength; ++i) {
            var a = s.snapshotItem(i);
            if( a != undefined) {
                bid_uid = a.href.substring(a.href.indexOf('uid')+4,a.href.indexOf('.html'));
            }
        }
    }
    if (!bid_uid) bid_uid = '';
    
    var s = bid_xpath('//div[@id="wp"]/div[@id="pt"]/div/a[starts-with(@href,"forum-")]');
    for (i = 0; i < s.snapshotLength; ++i) {
        var a = s.snapshotItem(i);
        if( a != undefined) {
            bid_fid = a.href.substring(a.href.indexOf('forum-')+6,a.href.indexOf('.html'));
            bid_fid = bid_fid.substring(0,bid_fid.indexOf('-'));
        }
    }
}

function bid_addMessage() {
    var m='';
    if (bid_Settings.wb_text) {
        m='[size=1]'+bid_Settings.wb_text+'[/size]';
        m=/^(?:https{0,1}:\/\/|www\.).+/i.test(bid_Settings.wb_link)?'[url='+bid_Settings.wb_link+']'+m+'[/url]':m;
    }
    return m;
}

function bid_addCustom_post() {
    var f = document.forms['postform'];
    var v = f.message.value;
    var m=bid_addMessage();
    if (m && v.indexOf(m)<0)
        f.message.value = v + "\n\n" + m;
        
    f._submit();
}

function bid_addCustom_fastpost() {
    var f = document.forms['fastpostform'];
    var v = f.message.value;
    var m=bid_addMessage();
    if (m && v.indexOf(m)<0)
        f.message.value = v + "\n\n" + m;
        
    f._submit();
}

function bid_addCustom_vfastpost() {
    var f = document.forms['vfastpostform'];
    var v = f.message.value;
    var m=bid_addMessage();
    if (m && v.indexOf(m)<0)
        f.message.value = v + '    ' + m;
        
    f._submit();
}

function bid_addCustom() {
    if (this.id && (this.id=='postform' || this.id=='fastpostform' || this.id=='vfastpostform')) {
        var v = this.message.value;
        var m=bid_addMessage();
        if (m && v.indexOf(m)<0) {
            if (this.id=='vfastpostform')
                this.message.value = v + '    ' + m;
            else
                this.message.value = v + "\n\n" + m;
        }
    }
    this._submit();
}

bid_getFormhash();
bid_readConfig();        //读取设置参数
if (window.self === window.top)
    bid_CreatConfigPanel();        //生成设置面板

if (bid_VIEWTHREAD) {
    bid_AddBlockBtn();       //添加屏蔽按钮
}

if(bid_FORUMDISPLAY || bid_VIEWTHREAD) {
    bid_BlockList();        //屏蔽黑名单
}
if (bid_Settings.autoSign) {
    window.onload = setTimeout(function(){bid_sign();},500);        //自动签到
}

bid_search(0,1);        //关键字提醒

if (bid_Settings.wb_text) {        //添加发贴小尾巴
    ver = parseFloat(GM_info.version);
    if (ver >= 2 && ver < 3) {
        if (document.forms['postform']) {
            var f = document.forms['postform'];
            f._submit = f.submit;
            unsafeWindow.document.forms['postform'].submit = this.exportFunction?exportFunction(bid_addCustom_post, unsafeWindow):bid_addCustom_post;
        }
        if (document.forms['fastpostform']) {
            var f = document.forms['fastpostform'];
            f._submit = f.submit;
            unsafeWindow.document.forms['fastpostform'].submit = this.exportFunction?exportFunction(bid_addCustom_fastpost, unsafeWindow):bid_addCustom_fastpost;
        }
        if (document.forms['vfastpostform']) {
            var f = document.forms['vfastpostform'];
            f._submit = f.submit;
            unsafeWindow.document.forms['vfastpostform'].submit = this.exportFunction?exportFunction(bid_addCustom_vfastpost, unsafeWindow):bid_addCustom_vfastpost;
        }
    } else {
        HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
        unsafeWindow.HTMLFormElement.prototype.submit = this.exportFunction?exportFunction(bid_addCustom, unsafeWindow):bid_addCustom;
    }
}