﻿$Dom().nameSpace('AnswerList');
AnswerList.funs = (function(){
	var answer = {
		//【我要关注】
		cFocus : $('focus'), //checkbox
		score : $('score'),  //span 悬赏分
		focusScore : $('focus-score'), // span 关注

		// 【提问补充】
		b_addQuestion : $('add-question'),//a
		addQuestions : $Dom(document).getElementsByClassName('ques_add'),
		question_submit : $('question-submit'), // span confirm
		question_cancel : $('question-cancel'), // span cancel

		// 【选为最佳答案】
		answer_area : $('qna_answ_tab'), //div
		b_best_answers :  $Dom(document).getElementsByClassName('best-answer'), //a list
		title : $('answerTitle'), // h5

		// 【发表评论/跟贴】
		bbs : $Dom(document).getElementsByClassName('bbs'),	// a【发表评论】
		bbs_num : $Dom(document).getElementsByClassName('bbsNum'),	// a【评论(xxx)】
		submit_bbs : $Dom(document).getElementsByClassName('submitBBS'), // a comment1
		//submit_bbsNum : $Dom(document).getElementsByClassName('submit_bbsNum'), // a comment2
		//login_name : $('userName').value

		// 【登录页面】
		iframe : $('loginFrame')
	};

	// ---------------------【我要关注】改变【悬赏分】及【关注】数 ---------------------------------//
	var _focus_score = function(){
	    function _callbackScore(res)
	    {
	        var ajaxResult = res.text();
	        if(ajaxResult==1){
			var _this = this;
	        	if(this.checked){
					this.disabled = true;
					answer.score.innerHTML = parseInt(answer.score.innerHTML) + 5;
					answer.focusScore.innerHTML = parseInt(answer.focusScore.innerHTML) + 1;
					setTimeout(function(){
						_this.disabled = false;
					}, 300);
				}else{
					if(answer.score.innerHTML <= 0 || answer.focusScore.innerHTML <= 0){
						this.checked = false;
						return;
					}
					this.disabled = true;
					answer.score.innerHTML = parseInt(answer.score.innerHTML) - 5;
					answer.focusScore.innerHTML = parseInt(answer.focusScore.innerHTML) - 1;
					setTimeout(function(){
						_this.disabled = false;
					}, 300);
				}
	        }else{
	        	this.checked = false;
	        	alert(decodeURIComponent(ajaxResult));
	        }
	    }

		function act(evt){
			if(typeof sLoginUserId == "undefined" || sLoginUserId == "") {
				var	iframe_doc = answer.iframe.contentWindow.document,
					login = iframe_doc.getElementById('loginid');

                                alert(sLoginMessage);
				login.focus();
                                $EVENT().stopEvent(evt);
                                return;
                        }
			var questionId = document.getElementById("questionId").value;
                        var boardId = document.getElementById("boardId").value;
			//Ajax submit
			var owner = this;
			var option = {
			        onload: $Fn(_callbackScore, owner).bind()
                   };
			var ajax = Ajax(careUrl, option);
			if(this.checked){
    			ajax.request({questionId: questionId, careYn: 1, boardId: boardId});
			}else{
				ajax.request({questionId: questionId, careYn: 0, boardId: boardId});
			}
		};
		$EVENT(answer.cFocus).addEvent('click', act);
	};

	//  ----------------------------------【提问补充】---------------------------------//
	var _add_question = function(){
		var addQuestions = answer.addQuestions,
					question = addQuestions[0],
					input_question =question.getElementsByTagName('textarea')[0],
					show_question = addQuestions[1];
        var oldAppendContent = document.getElementById("oldAppendContent");
		// 显示【提问补充】
		function showQuestion(evt){
			$Dom(question).setStyle('display', 'block');
			$Dom(show_question).setStyle('display', 'none');
			if(show_question.innerHTML){
				input_question.value = show_question.innerHTML;
			}

			$EVENT().stopEvent(evt);
		};
		if(!answer.b_addQuestion) return;
		$EVENT(answer.b_addQuestion).addEvent('click', showQuestion);

		function _callbackQuestion(res)
		{
		    var ajaxResult = res.text();
		    if(ajaxResult==1){
		    	show_question.innerHTML = input_question.value;
			    oldAppendContent.value = input_question.value;
				$Dom(question).setStyle('display', 'none');
				$Dom(show_question).setStyle('display', 'block');
		    }else{
		    	alert(decodeURIComponent(ajaxResult));
		    }
		}

		// 提交【提问补充】
		function submit_question(evt){
			var boardId = document.getElementById("boardId").value;
			var questionId = document.getElementById("questionId").value;

			var insertYn;
			if(oldAppendContent.value){
				insertYn = 0;
			}else{
				insertYn = 1;
			}
			//Ajax submit
			var option = {
			        onload: _callbackQuestion
                };
			var ajax = Ajax(questionAppendUrl, option);
			ajax.request({questionId: questionId, appendContent: input_question.value, insertYn: insertYn, boardId: boardId});

			$EVENT().stopEvent(evt);
		};
		$EVENT(answer.question_submit).addEvent('click', submit_question);

		// 取消【提问补充】
		var cancel_question = function(evt){
			$Dom(question).setStyle('display', 'none');
			$Dom(show_question).setStyle('display', 'block');
			$EVENT().stopEvent(evt);
		}
		$EVENT(answer.question_cancel).addEvent('click', cancel_question);
	};

		//----------------------------------【选为最佳答案】 ----------------------------------//
		var _best_answer = function(){
			var best_answers = answer.b_best_answers;

			for(var i = 0, len = best_answers.length; i < len; i++){
				$EVENT(best_answers[i]).addEvent('click', function(evt){
				    var win = window.open(bestAnswerPopup, 'wndConfirm', 'width=424, height=175, scrollbars=0, status=0, resizable=0, toolbar=0, titlebar=0, location=0');
					var owner = this;
					window.bestAnswerElement = this;
					//_selectedBestAnswer();
					$EVENT().stopEvent(evt);
				});
			}
		};

		var _callbackBestAnswer = function(res)
		{
		    var ajaxResult = res.text();
		    if(ajaxResult == 1){
		    	var owner = window.bestAnswerElement;
			    if(typeof owner == "undefined")
			        return;
			    var best_answers = answer.b_best_answers;
			    var best = $Dom(owner).getNode('view_box'), // get div that className is view_box
				first_node = $Dom(answer.answer_area).getFirstChild(),
				title = $Dom(best).getElementsByClassName('answer-title')[0],
				face = $Dom(best).getElementsByClassName('border')[0];
	            first_node.innerHTML = "Other Answer";
				$Dom(best).replaceClass('view_box', 'view_box_q');
				$Dom(first_node).insertBefore(best);
				title.innerHTML = answer.title.innerHTML;
				$Dom(face).setImgSize('78', '78');
				for(var k = 0, len = best_answers.length; k < len; k++){
					$Dom(best_answers[k].parentNode).setStyle('display', 'none');
				}
				var prev = answer.focusScore.parentNode.previousSibling;
				while(prev.nodeType != 1)
				prev = prev.previousSibling;
				prev.innerHTML = "Resolved";
				window.bestAnswerElement = null;
		    }else{
		    	alert(decodeURIComponent(ajaxResult));
		    }
		}
		var _selectedBestAnswer = function()
		{
			var boardId = document.getElementById("boardId").value;
			var questionId = document.getElementById("questionId").value;
			var answerId = document.getElementById("bestAnswerId").value;
		    //Ajax submit
			var option = {
			        onload: _callbackBestAnswer
                };

			var ajax = Ajax(bestAnswerUrl, option);
			ajax.request({questionId: questionId, answerId: answerId, boardId: boardId});

		};

		//----------------------------------【发表评论/跟贴】 ----------------------------------//
		var _BBS = function(){
			var bbs = answer.bbs,
						bbs_num = answer.bbs_num;
			//初始化<a>发表评论 </a>粗体显示
			for(var i=0; i<bbs.length; i++)
			{
			    bbs[i].style.fontWeight = "bold";
			}

			// 显示【发表评论/评论】区
			function __showBBS(evt){
			        //没有登陆用户不能进行评论

					var parent = $Dom(this).getNode('ssub_view_box'),
								img = this.getElementsByTagName('img')[0],
								img_index = img.src.lastIndexOf('/'),
								img_name = img.src.substring(img_index+1),
								bbs_box = $Dom(parent).getElementsByClassName('review');

					if(img_name == 'btn_down02.gif'){
						img.src = img.src.substring(0, img_index) + '/btn_up02.gif';
					}else{
						img.src = img.src.substring(0, img_index) + '/btn_down02.gif';
					}
					$Dom(bbs_box[0]).toggle();
					$EVENT().stopEvent(evt);
			};

			for(var i = 0, len = bbs.length; i < len; i++){
				$EVENT(bbs[i]).addEvent('click', __showBBS);
			}
			for(var i = 0, len = bbs_num.length; i < len; i++){
				$EVENT(bbs_num[i]).addEvent('click', __showBBS);
			}
		};

		// 提交【评论】
		var _submit_BBS = function(){
			var submitBBS = answer.submit_bbs;
            var user = sLoginUserId?sLoginUserId:"undefined";
			function __getDay(){
				var today = new Date(),
							year = today.getFullYear(),
							month = today.getMonth()+1,
							day = today.getDate(),
							hour = today.getHours(),
							minutes = today.getMinutes();

				if(month < 10){
					month = '0'+month;
				}
				return year+'.'+month+'.'+day+'   '+hour+':'+minutes;
			};

			function __tab(_this){
				var parent = _this.parentNode;
				var tabs = $Dom(parent.parentNode).getElementsByClassName('right');
				var num = 0;
				if($Dom(tabs[0]).getElementsByClassName('bbsNum').length != 0)
				{//update 评论(num);
				    num = $Dom(tabs[0]).getElementsByClassName('bbsNum')[0].innerHTML.match(/\d+/)[0];
				}
				else
				{//change 发表评论 to 评论(num)
				    $Dom(tabs[0]).getElementsByClassName('bbs')[0].style.fontWeight = "";
				    $Dom(tabs[0]).getElementsByClassName('bbs')[0].className = "tc_point01  bbsNum";

				}
				num++;
				$Dom($Dom(tabs[0]).getElementsByClassName('bbsNum')[0]).getFirstChild().innerHTML = 'Comments('+num+')';
				return num;
			};

			function __callbackBBS(date, res)
			{
			    var ajaxResult = res.text();
			    if(ajaxResult==1){
			    	var parent = this.parentNode,
					bbs_textarea = parent.getElementsByTagName('textarea')[0],
					content = $('<div>');

				    var numComment = __tab(this);
					if(numComment != 1)
					    $Dom(content).addClass('review_f');
					content.innerHTML = '<h5>' + user + '<span class="gray"> | </span>' + date + '</h5><p>' + bbs_textarea.value + '</p>';
					$Dom(bbs_textarea).insertBefore(content);
					bbs_textarea.value = "";
			    }else{
			    	alert(decodeURIComponent(ajaxResult));
			    }
			}

			for(var i = 0, len = submitBBS.length; i < len; i++){
				$EVENT(submitBBS[i]).addEvent('click', function(evt){
					if(typeof sLoginUserId == "undefined" || sLoginUserId == "") {
					var	iframe_doc = answer.iframe.contentWindow.document,
						login = iframe_doc.getElementById('loginid');

						alert(sLoginMessage);
						login.focus();
						$EVENT().stopEvent(evt);
						return;
					}
					var	parent = this.parentNode,
						bbs_textarea = parent.getElementsByTagName('textarea')[0];

					if(bbs_textarea.value == ''){
						alert('Comments can not be empty！');
						bbs_textarea.focus();
						$EVENT().stopEvent(evt);
						return;
					}

					var boardId = document.getElementById("boardId").value;
					var questionId = document.getElementById("questionId").value;
					var answerId = document.getElementById("answerId").value;
					var content = bbs_textarea.value;

					//Ajax submit
					var date = __getDay();
    					var owner = this;
    					var option = {
    						onload: $Fn(__callbackBBS, owner).bind(date)
					};
					if(!_checkMaxLength(content, 2000)){
						$EVENT().stopEvent(evt);
						return;
					}
    					var ajax = Ajax(commentUrl, option);
					ajax.request({questionId: questionId, answerId: answerId, content: content, boardId: boardId});
					$EVENT().stopEvent(evt);
				});
			}
		};

		// 判断最大长度【1个中文 = 2个英文字符】
		var _checkMaxLength = function(cont, maxLen){
			var	isEN = false, isZH = false, mix = 0;

			for(var i = 0, len = cont.length; i < len; i++){
				if(cont.charCodeAt(i) !== 13 && cont.charCodeAt(i) !== 32 &&  cont.charCodeAt(i) !== 10){
					(cont.charCodeAt(i) < 255) ? isEN = true : isZH = true;
				}
			}

			// 英文
			if(!isZH && isEN){
				if(cont.length > maxLen){
					alert('Your post cannot be longer than '+maxLen/2+' Chinese characters or '+maxLen+' English letters.');
					return false;
				}else{
					return true;
				}
			}

			// 中文
			if(!isEN && isZH){
				if(cont.length > maxLen/2){
					alert('Your post cannot be longer than '+maxLen/2+' Chinese characters or '+maxLen+' English letters.');
					return false;
				}else{
					return true;
				}
			}

			// 混合
			if(isEN && isZH){
				for(var i = 0; i  < cont.length; i++){
					(cont.charCodeAt(i) < 255) ? mix++ : mix+=2;
				}
				if(mix > maxLen){
					alert('Your post cannot be longer than '+maxLen/2+' Chinese characters or '+maxLen+' English letters.');
					return false;
				}else{
					return true;
				}
			}
		};

	return{
		focusScore : function(){
			_focus_score();
		},
		addQuestion : function(){
		    _add_question();
		},
		best_answer : function(){
			_best_answer();
		},
		selectBest : function(){
		    _selectedBestAnswer();
	    },
		BBS : function(){
			_BBS();
			_submit_BBS();
		}
	}
})();
