YAHOO.util.Event.onDOMReady(initPGrade);

var pGrade = function(){
	var instance = function(dDom){
		this.dom = dDom;
		this.dAgainst = null;
		this.dSupport = null;
		this.fid = null;
		this.pid = null;
		this.from = null;
		this.ajaxUrl = null;
		this.hasVoted = false;
		this.isMyself = false;
		this.nAgainst = null;
		this.ndSupport = null;
	};
	instance.prototype = {
		config:{},
		init:function(){
			var oThis = this;
			this.dAgainst.onclick = function(e){oThis.against();return false;}
			this.dSupport.onclick = function(e){oThis.support();return false;}
		},
		against:function(){
			if(!pGradeConfig.isLogin){this.showErr("請登入！\r\nPlease login!");return false;}
			if(this.isMyself){return false;}
			if(this.hasIVoted){this.showErr(this.config.been_voted);return false;}
			if(pGradeConfig.Grade_Timmer){
				this.showErr(this.config.busy_to_vote);
				return false;
			}else{
				pGradeConfig.Grade_Timmer = setTimeout(function(){pGradeConfig.Grade_Timmer=null;},pGradeConfig.timeExpire);
			};
			var oThis = this;
			var url = this.ajaxUrl+"&action=vote_against"+"&rd="+Math.random();
			$.getJSON(url,function(o){oThis.againstHandler(o);});
		},
		support:function(){
			if(!pGradeConfig.isLogin){this.showErr("請登入！\r\nPlease login!");return false;}
			if(this.isMyself){return false;}
			if(this.hasIVoted){this.showErr(this.config.been_voted);return false;}
			if(pGradeConfig.Grade_Timmer){
				this.showErr(this.config.busy_to_vote);
				return false;
			}else{
				pGradeConfig.Grade_Timmer = setTimeout(function(){pGradeConfig.Grade_Timmer=null;},pGradeConfig.timeExpire);
			};
			var oThis = this;
			var url = this.ajaxUrl+"&action=vote_support"+"&rd="+Math.random();
			$.getJSON(url,function(o){oThis.supportHandler(o);});
		},
		againstHandler:function(o){
			if(o.info == "ok"){
				YAHOO.util.Dom.addClass(this.dom,"i_againsted");
				this.nAgainst.innerHTML = parseInt(this.nAgainst.innerHTML)+1;
				this.hasIVoted = true;
				if(!this.hasVoted){this.hasVoted = true;YAHOO.util.Dom.addClass(this.dom,"voted");}
			}else if(o.info == "err"){
				this.showErr(o.msg);
			}
		},
		supportHandler:function(o){
			if(o.info == "ok"){
				YAHOO.util.Dom.addClass(this.dom,"i_supported");
				this.nSupport.innerHTML = parseInt(this.nSupport.innerHTML)+1;
				this.hasIVoted = true;
				if(!this.hasVoted){this.hasVoted = true;YAHOO.util.Dom.addClass(this.dom,"voted");}
			}else if(o.info == "err"){
				this.showErr(o.msg);
			}
		},
		showErr:function(s){
			if(s.toLowerCase() != "null"){alert(s);}
		}
	};
	return instance;
}();
function initPGrade(){
	pGradeConfig = {timeExpire:10000,Grade_Timmer:null,isLogin:false};
	var dGrades = YAHOO.util.Dom.getElementsByClassName("vote","dd",document.getElementById("postlist"));
	for(var i=0;i<dGrades.length;i++){
		var dp = new pGrade(dGrades[i]);
		dp.dAgainst = YAHOO.util.Dom.getElementsByClassName("against","span",dGrades[i])[0];
		dp.nAgainst = dp.dAgainst.getElementsByTagName("span")[0];
		dp.dSupport = YAHOO.util.Dom.getElementsByClassName("support","span",dGrades[i])[0];
		dp.nSupport = dp.dSupport.getElementsByTagName("span")[0];
		dp.pid = dGrades[i].parentNode.id.match(/\d+/)[0];
		dp.fid = dGrades[i].parentNode.getAttribute("fid");
		dp.from = dGrades[i].parentNode.getAttribute("from");
		dp.ajaxUrl = "http://forum.tvb.com/forumapi/post_api.php?f="+dp.fid+"&p="+dp.pid+"&from="+dp.from+"&come_from=1";
		dp.hasVoted = YAHOO.util.Dom.hasClass(dGrades[i],"voted");
		dp.hasIVoted = YAHOO.util.Dom.hasClass(dGrades[i],"i_againsted") || YAHOO.util.Dom.hasClass(dGrades[i],"i_supported");
		dp.isMyself = YAHOO.util.Dom.hasClass(dGrades[i],"cur");
		dp.init();
	}
	$.getJSON("http://forum.tvb.com/forumapi/post_api.php?action=config"+"&rd="+Math.random(),
				function(o){
					pGradeConfig.timeExpire = o.msg.vote_interval*1000;
					pGradeConfig.isLogin = (o.msg.login.nickname!=null);
					pGrade.prototype.config = o.msg.lang;
				}
	);
}