
/*CommentSmiley start*/
//用于给评论增加表情功能
function initCommentSmiley(){
    //局部变量用于防止产生过多全局函数
    var obj={
        addSmileyBar:function(bib){
            if(bib.smileyBar)return;
            if(!bib.postCommentBox)return;
			var _bar=$se('dd','smiley','表情：');
			for(var i=1;i<=16;i++){
				var _img=$se('img');
				_img.src='plugins/CommentSmiley/onion/'+i+'.gif';
				_img.style.width='25px';
				_img.style.height='25px';
				_bar.appendChild(_img);
				_img.style.cursor='pointer';
				_img.style.marginRight='2px';
				
				_img.onclick=(function(s){
					return function(){
						var _fb=bib.postCommentBox.main;
						_fb.setValue('content',_fb.getValue('content')+'[s:'+s+']');
					}
				})(i);
			}
			bib.postCommentBox.box.firstChild.insertBefore(_bar,bib.postCommentBox.box.firstChild.lastChild);
			bib.smileyBar=true;
        }
        ,onToggleViewComment:function(topicId,dl){
			var bib=BlogItemBoxes[topicId];
			if(bib.showSmileyHook)return;
			bib.showSmileyHook=true;
			var self=this;
			var obj2={};
			obj2.showSmiley2=function(c){
				if(!c==c.parentNode.firstChild)return;
				self.showSmiley(bib.viewCommentBox);
			}
			X2.Observer.observeAsEvent(obj2,'showSmiley2',bib,'setOpen');
        }
        ,showSmiley:function(b){
            var _html=b.innerHTML;
			_html=_html.replace(/(\[s:(\d+)\])/g,'<img src="plugins/CommentSmiley/onion/$2.gif" alt=""/>');
			b.innerHTML=_html;
        }
        ,onTogglePostCommentBox:function(topicId,dl){
            var bib=BlogItemBoxes[topicId];
            if(bib.smileyBar)return;
			this.addSmileyBar(bib);
        }
    };
    try{
		X2.Observer.observeAsEvent(obj,'onTogglePostCommentBox',window,'togglePostCommentBox');
		X2.Observer.observeAsEvent(obj,'onToggleViewComment',window,'toggleViewComment');
	}catch(e){}
	
	//如果是单篇日志显示，需要对其中的评论进行替换
	if(window._firstTopicIdOfCommentList){
	    var _vcb=$('firstTopicIdOfCommentList'+_firstTopicIdOfCommentList);
	    obj.showSmiley(_vcb);
	    
	}
}

//绑定到初始化过程
X2.Observer.observe(window,'initCommentSmiley',window,'init');
/*CommentSmiley end*/

/*LatestArticles start*/
function PluginConfig_LatestArticles(myPcb){
    myPcb.showTip('正在获取数据，请稍候……');
    var json=new X2.Json('plugins/LatestArticles/ajax.aspx',myPcb.tipBox);
    json.onlogicalsuccess=function(jso){
	    var fb=new FormBox('commonFormBox');
	    fb.insertItem("text","count",{attributes:{maxLength:4,style:'width:40px;'},value:jso.singleInfo,foreLabel:'最新日志显示数量：'});
	    fb.insertItem("button","btnOk",{sameLine:true,className:'button',sameLine:true,value:'确定',tip:'* 只能是数字'});
	    myPcb.body.appendChild(fb.getBox());
	    myPcb.setWidth(420);
    	myPcb.hideTip();
    	
    	
	    fb.items['btnOk'].onclick=function(){
	        var count=fb.getValue('count');
	        if(!/^\d+$/g.test(count) || count==''){
	            myPcb.showTip('参数必须为数字！');
	            return;
	        }
	        myPcb.showTip('正在提交数据，请稍候……','noButton');
	        var json2=new X2.Json('plugins/LatestArticles/ajax.aspx',myPcb.tipBox);
	        json2.onlogicalsuccess=function(jso){
	            myPcb.showTip('参数设置成功！');
    	        
	        }
	        json2.open('setCount',{count:count});
	    }
	}
	json.open('getCount');
}
/*LatestArticles end*/

/*X2Vote start*/

//实现参数配置
/*
PluginConfig_PluginName是插件参数配置必须实现的函数，PluginName必须为插件名称
用于提供进行参数配置的界面

*以下是一些接口说明
pcb是参数配置容器，提供一些通用的操作：
pcb.showTip(msg)：显示提示
pcb.hideTip(msg)：隐藏提示框
pcb.show()：显示容器
pcb.hide()：隐藏容器
pcb.setWidth(width)：设置容器宽度
pcb.setHeight(height)：设置容器高度
pcb.setTitle(title)：设置标题
pcb.body：主容器，是一个div标记，用于放置自定义的界面


X2.Json，FormBox，ItemList均为X2Blog的内置Javascript类
更多技术资料请参考X2Blog官方Blog：http://www.x2blog.cn/supNate/


*/
function PluginConfig_X2Vote(pcb){
    pcb.showTip('正在获取数据，请稍候……');
    var json=new X2.Json('plugins/X2Vote/ajax.aspx',pcb.tipBox);
    json.onlogicalsuccess=function(jso){
	    var fb=new FormBox('commonFormBox');
	    fb.insertItem("text","voteTitle",{attributes:{size:40},value:jso.singleInfo,foreLabel:'设置调查标题：'});
	    fb.insertItem("button","btnOk",{sameLine:true,className:'button',sameLine:true,value:'确定'});
	    
	    fb.insertItem("select","sltTitle",{foreLabel:''});
	    fb.insertItem("button","btnDelete",{sameLine:true,className:'button',value:'删除'});
	    fb.insertItem("text","title",{attributes:{maxLength:50,size:50},foreLabel:'选项：'});
	    fb.insertItem("checkbox","type",{attributes:{checked:true},foreLabel:'单选：',tip:'* 选中表示单选，否则表示多选'});
	    fb.insertItem("text","count",{attributes:{maxLength:5,value:0,size:50},foreLabel:'票数：'});
	    fb.insertItem("button","btnNew",{className:'button',value:'添加'});
	    fb.insertItem("button","btnEdit",{sameLine:true,className:'button',value:'修改'});
	    
	    fb.insertItem("","intro1",{className:'intro',tip:'！重要：要禁用调查可在模块设置里，卸载插件将会丢失已有数据！'});
	    fb.insertItem("","intro2",{className:'intro',tip:'！点击<a href="plugins/X2VoteData.xml" target="_blank">这里</a>备份调查数据。'});
	    
	    
	    //初始化下拉框
	    jso.data.each(function(value){
	        fb.addSelectValue('sltTitle',value.title,value.title);
	    });
	    fb.setValue("voteTitle",jso.singleInfo);
	    
	    
	    //当下拉框变化时改变值
	    fb.items['sltTitle'].onchange=function(){
	        fb.setValue('title',this.value);

			var data=jso.data.detect(function(value){
				if(value.title==fb.getValue('title'))return true;
			});
			if(data){
				fb.setValue('count',data.count);
				fb.setValue('type',data.type);
			}

	    }
	    if(fb.items['sltTitle'].options.length>0)fb.items['sltTitle'].options[0].selected=true;
	    
	    pcb.body.appendChild(fb.getBox());
	    pcb.setWidth(420);
    	pcb.hideTip();

	    fb.items['btnOk'].onclick=function(){
	        pcb.showTip('正在提交数据，请稍候……','noButton');
	        var json2=new X2.Json('plugins/X2Vote/ajax.aspx',pcb.tipBox);
	        json2.onlogicalsuccess=function(jso){
	            pcb.showTip('调查标题设置成功！');
	        }
	        json2.open('setTitle',{title:fb.getValue('voteTitle')});
	    }
	    
	    fb.items['btnNew'].onclick=function(){
	        var count=fb.getValue('count');
	        if(!/^\d+$/g.test(count) || count==''){
	            pcb.showTip('票数必须为数字！');
	            return;
	        }
	        if(fb.getValue('title')==''){
	            pcb.showTip('选项不得为空。');
	            return;
	        }
	        pcb.showTip('正在提交数据，请稍候……','noButton');
	        var json2=new X2.Json('plugins/X2Vote/ajax.aspx',pcb.tipBox);
	        json2.onlogicalsuccess=function(jso){
	            pcb.showTip('选项增加成功！');
	            fb.addSelectValue('sltTitle',fb.getValue('title'),fb.getValue('title'));
	            fb.setValue('title','');
	            fb.setValue('count','0');
	        }
	        json2.open('addItem',{title:fb.getValue('title'),count:count,type:fb.getValue('type')});
	    }
	    
	    fb.items['btnEdit'].onclick=function(){
	        var count=fb.getValue('count');
	        if(!/^\d+$/g.test(count) || count==''){
	            pcb.showTip('票数必须为数字！');
	            return;
	        }
	        if(fb.getValue('title')==''){
	            pcb.showTip('选项不得为空。');
	            return;
	        }
	        pcb.showTip('正在提交数据，请稍候……','noButton');
	        var json2=new X2.Json('plugins/X2Vote/ajax.aspx',pcb.tipBox);
	        json2.onlogicalsuccess=function(jso){
	            pcb.showTip('选项修改成功！');
	            with(fb.items['sltTitle'].options[fb.items['sltTitle'].selectedIndex]){
	                value=text=fb.getValue('title');
	            }
	        }
	        json2.open('modifyItem',{oldTitle:fb.getValue('sltTitle'),title:fb.getValue('title'),count:count,type:fb.getValue('type')});
	    }
	    
	    fb.items['btnDelete'].onclick=function(){
	        if(!confirm('确定删除此调查项吗？'))return;
	        pcb.showTip('正在提交数据，请稍候……','noButton');
	        var json2=new X2.Json('plugins/X2Vote/ajax.aspx',pcb.tipBox);
	        json2.onlogicalsuccess=function(jso){
	            pcb.showTip('选项删除成功！');
	            fb.deleteSelectValue('sltTitle',fb.getValue('title'));
	        }
	        json2.open('deleteItem',{title:fb.getValue('sltTitle')});
	    }
	    pcb.hideTip();
	}
	json.open('getItems');
}

//调查显示模块
var PluginX2Vote=Class.create();
PluginX2Vote.prototype={
    initialize:function(){
		Element.cleanWhitespace($('PluginX2Vote'));
        this.box=$('PluginX2Vote').childNodes[1];
        this.items=[];
        var self=this;
        //获取所有的选项
        var json=new X2.Json('plugins/X2Vote/ajax.aspx');
        json.onlogicalsuccess=function(jso){
            self.title=jso.singleInfo;
            self.box.innerHTML='';
            jso.data.each(function(value){
                var item=$se('li','item'
                    ,(value.type==1?'<input type="radio" name="X2VoteOption"/>':'<input type="checkbox"/>')+'<span>'+value.title+'</span>'
                );
                item.count=value.count;
                self.items.push(item);
            });
            self.showItems();
        }
        json.open('getItems');
    }
    ,showItems:function(){
        if(this.tipBox){
            Element.show(this.ul);
            Element.show(this.bar);
            return;
        }
        this.tipBox=new TipBox('',{elementName:'div'});
        $ap(this.box,this.tipBox.box);
        //调查标题
        $bd(this.box,'div','title',this.title);
        //调查项
        this.ul=$se('ul','items');
        var self=this;
        this.items.each(function(li){
            $ap(self.ul,li);
        });
        $ap(this.box,this.ul);
        
        //按钮
        this.bar=$bd(this.box,'div','bar');
        this.btnOk=$sf('button','button','投票');
        this.btnViewResult=$sf('button','button','查看结果');
        $ap(this.bar,this.btnOk);
        $ap(this.bar,this.btnViewResult);
        //提交调查
        this.btnOk.onclick=function(){
            //获取被选中的项
            var items=self.items.inject([],function(memo,item,i){
                if(item.firstChild.checked)memo.push(i);
                return memo;
            });
            if(items.length==0){
                self.showTip('至少选择一个调查项。');
                return;
            }
            
            //如果已经参加过调查
            if(ch.getValue('X2Vote')!=''){
                self.showTip('您已经参与过投票！');
                return;
            }
            //设置cookie标识已经参加过调查
            ch.setValue('X2Vote',1,1);
            
            self.showTip('正在提交数据，请稍候……',true);
            //提交调查
            var json2=new X2.Json('plugins/X2Vote/ajax.aspx',self.tipBox);
            json2.onlogicalsuccess=function(jso){
                //本地增加调查结果
                items.each(function(item){
                    self.items[item].count++;
                });
                self.showTip('提交成功，感谢您的参与！');
                self.reset();
                self.showResult();
                //window.setTimeout(self.showResult.bind(self),300);
            }
            json2.open('vote',{items:items.join(',')});
        }
        //查看调查结果
        this.btnViewResult.onclick=this.showResult.bind(this);

    }
    //重置调查项
    ,reset:function(){
        this.items.each(function(item){item.firstChild.checked=false;});
    }
    ,showResult:function(){
        if(this.resultBox){
            hideResult();
        }
        
        Element.hide(this.ul);
        Element.hide(this.bar);
        
        this.resultBox=$bd(this.box,'div','result');
        this.resultTitle=$bd(this.resultBox,'div','resultTitle','调查结果（共');
        var max=0;
        var sum=this.items.inject(0,function(memo,item){
			if(max<item.count)max=item.count;
            return memo+item.count;
        });
        this.resultTitle.innerHTML+=sum+'票）：';
        
        this.resultUl=$bd(this.resultBox,'ul');
        var self=this;
        this.items.each(function(li){
            var title=li.childNodes[1].innerHTML;
            var count=li.count;
            
            var percent=count==0?'0%':Math.round(10000*count/sum)/100+'%';
			var width=2;
			if(max)width=count/max*(self.resultBox.offsetWidth-100);
			if(width<2)width=2;
			width=Math.round(width);

            var li2=$se('li','','<span>'+title+'</span><br/><img src="plugins/X2Vote/bar.gif" width="'+width+'px"/>'
						+ '<span class="count" >'+percent+' - '+count+'</span>');
            $ap(self.resultUl,li2);
        });
        
        this.resultBar=$bd(this.resultBox,'div','bar');
        this.btnHideResult=$sf('button','button','确定');
        this.btnHideResult.onclick=function(){
            self.hideResult();
            self.showItems();
        }
        $ap(this.resultBar,this.btnHideResult);
        
    }
    ,hideResult:function(){
        Element.remove(this.resultBox);
        this.resultBox=null;
    }
    ,showTip:function(msg,noButton){
        this.tipBox.show(msg,noButton);
    }
    ,hideTip:function(){
        this.tipBox.hide();
    }
    
}
//初始化调查模块
function initX2Vote(){
	//用户需要启用了此模块
	if(!$('PluginX2Vote'))return;
    var x2vote=new PluginX2Vote();
}

//绑定调查到初始化过程
X2.Observer.observe(window,'initX2Vote',window,'init');


/*X2Vote end*/

