/**
*\u8FD4\u56DE\u5B57\u7B26\u4E32_sDate\u5BF9\u5E94\u65E5\u671F\u4E0E1970\u5E741\u67081\u65E5\u5348\u591C\u95F4\u5168\u7403\u6807\u51C6\u65F6\u95F4\u7684\u6BEB\u79D2\u6570
*/
function parseDate(_sDate){
	try{
		//_sDate = _sDate.substr(0,10) + " " + _sDate.substr(10);
		var dateInfo = _sDate.split(" ");
        var datePart = dateInfo[0].split("-");
        var timePart = dateInfo[1].split(":");
		return new Date(datePart[0],datePart[1],datePart[2],timePart[0],timePart[1],timePart[2]).getTime();
	}catch(error){
		alert('\u65E5\u671F\u89E3\u6790\u9519\u8BEF:' + error.message);
	}
}


//iframe \u81EA\u9002\u5E94\u9AD8\u5EA6
function iframeAutoFit(iframes){
    var iframes = iframes || ["jbjs", "xgtp", "xgbd"]; 
    for (var i = 0; i < iframes.length; i++){
        var iframe = window.frames[iframes[i]];
        if(!iframe) continue;
        iframe.frameElement.height = iframe.document.body.offsetHeight;
    }
}

/**
*\u5609\u5BBE\u8BBF\u8C08\u7684\u914D\u7F6E\u4FE1\u606F\u7C7B
*/
var JBFTConfig = Class.create();
Object.extend(JBFTConfig.prototype, {
	configs : {
		iframesRefreshInterval	: 20,	//\u9875\u9762\u4E2D\u6307\u5B9A\u7684iframe\u5237\u65B0\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u4E3A\u79D2   
		iframesNeedRefresh		: true, //\u662F\u5426\u9700\u8981\u5B9A\u65F6\u5237\u65B0iframe
		needRefreshIframes		: ['jbjs', 'xgtp', 'xgbd'],	//\u9875\u9762\u4E2D\u9700\u8981\u5237\u65B0\u7684iframe\u96C6\u5408     
		intervalGetData			: 3,	//\u5F97\u5230\u6570\u636E\u4E4B\u540E\uFF0C\u6BCF\u9694\u591A\u957F\u65F6\u95F4\u89E3\u6790\u4E00\u6B21\uFF0C\u5355\u4F4D\u4E3A\u6BEB\u79D2
		jsonCountData			: 'vipcount.js',	//
		jsonData				: 'vipdata{0}.js',	//
		listOrder				: 'desc',	//\u5217\u8868\u6309\u65F6\u95F4\u7684\u6392\u5E8F\u65B9\u5F0F
		ascOrderId				: 'ascOrderId',
		descOrderId				: 'descOrderId',
		listAreaContent			: 'listContentArea',	//\u5217\u8868\u5185\u5BB9DOM ID
		listNavTop				: 'listNavTop',
		listNavBtm				: 'listNavBtm',
		ended					:  false
	},

    initialize : function(_oConfigs){
		Object.extend(this.configs, _oConfigs || {});
    },

	//\u8BBE\u7F6E\u4E00\u4E9B\u5173\u4E8E\u5609\u5BBE\u8BBF\u8C08\u7684\u914D\u7F6E\u4FE1\u606F
	setConfigs : function(_oConfigs){
		this.configs = _oConfigs || {};
	},

	addConfigItems : function(_oConfigItems){
		Object.extend(this.configs, _oConfigItems || {});
	}
});


/**
*\u5609\u5BBE\u8BBF\u8C08\u7684\u57FA\u7C7B
*/
var JBFTBase = Class.create();
Object.extend(JBFTBase.prototype, {
	oJBFTConfig			: null,		//\u5185\u90E8\u7684\u914D\u7F6E\u53D8\u91CF
	_executeRefreshing_	: false,	//\u662F\u5426\u6B63\u5728\u6267\u884Crefresh\u7684\u72B6\u6001\u6807\u8BB0
	isDataDealing		: false,	//\u662F\u5426\u6B63\u5728\u5904\u7406\u6570\u636E\u7684\u6807\u8BB0\uFF08\u5305\u62EC\u8F7D\u5165\u3001\u89E3\u6790\u4E24\u4E2A\u9636\u6BB5\uFF09\uFF0C\u9632\u6B62\u6570\u636E\u53EF\u80FD\u53D1\u751F\u4EA4\u53C9\u9519\u8BEF[setTimeout]
	timeStamp			: 0,		//\u9875\u9762\u4FDD\u7559\u7684\u65F6\u95F4\u6233\uFF0C\u8868\u793A\u6700\u540E\u8BBF\u95EE\u7684\u8BB0\u5F55\u65F6\u95F4

    initialize : function(_oJBFTConfig){
		this.oJBFTConfig = _oJBFTConfig || new JBFTConfig();		
		this.initEvents();
    },

	//\u90A6\u5B9A\u9875\u9762\u7684\u4E00\u4E9B\u57FA\u672C\u4E8B\u4EF6
	initEvents : function(){
		var fillQuestionDom = $('fillQuestion');
		if(fillQuestionDom){
			Event.observe(fillQuestionDom, 'click', function(){
				$('submitA').scrollIntoView(false);
				$('content').focus();
				$('content').select();
			}.bind(this));
		}
		var ascOrderDom = $('ascOrderId');
		if(ascOrderDom){
			Event.observe(ascOrderDom, 'click', function(){
				this.changeListOrder('asc');
			}.bind(this));
		}
		var descOrderDom = $('descOrderId');
		if(descOrderDom){
			Event.observe(descOrderDom, 'click', function(){
				this.changeListOrder('desc');
			}.bind(this));
		}
		var refresh = $('refreshId');
		if(refresh){
			Event.observe(refresh, 'click', function(){
				$(this.oJBFTConfig.configs.listAreaContent).innerHTML = '';
				this.timeStamp = 0;
				this.execRefresh();
			}.bind(this));
		}

		var configs = this.oJBFTConfig.configs;

		var navClick = function(event){
			var srcElement = Event.element(event || window.event);
			if(srcElement.className == 'navpage'){
				this.pageIndex = srcElement.getAttribute('pageindex', 2);
				this.stopRefresh();
				this.loadData();
				this.startRefresh();
			}
		}.bind(this);
		Event.observe($(configs.listNavTop), 'click', navClick);
		Event.observe($(configs.listNavBtm), 'click', navClick);

		if(configs.iframesNeedRefresh){
			var index = 0;
			setInterval(function(){
				var sIframe = configs.needRefreshIframes[index];
				var oIframe = $(sIframe);
				if(oIframe){
					var search = oIframe.contentWindow.location.search;
					if(!search){
						var oParams = {};
					}else{
						var oParams = search.toQueryParams();
					}
					oParams["r"] = new Date().getTime();
					try{
						oIframe.src = oIframe.contentWindow.location.pathname + "?" + $toQueryStr(oParams);
					}catch(e){}
				}
				index = (index + 1) % configs.needRefreshIframes.length;
			}, configs.iframesRefreshInterval*1000);
		}
	},

	/*
	*\u6539\u53D8\u5217\u8868\u7684\u987A\u5E8F
	*@_sOrder	: 'asc','desc'
	*/
	changeListOrder : function(_sOrder){		
		if(_sOrder){
			_sOrder = _sOrder.trim().toLowerCase();
			if(_sOrder != 'asc' && _sOrder != 'desc'){
				alert("\u6392\u5E8F\u65B9\u5F0F\u4E0D\u5408\u6CD5");
				return;
			}
		}else{
			_sOrder = this.oJBFTConfig.configs.listOrder == "desc" ? "asc" : "desc";
		}
		this.oJBFTConfig.configs.listOrder = _sOrder;		
		this.loadData();//\u6309\u6307\u5B9A\u987A\u5E8F\u5237\u65B0\u5217\u8868
	},

	//\u542F\u52A8\u201C\u5B9A\u65F6\u4E0E\u670D\u52A1\u5668\u8BF7\u6C42\u201D\u670D\u52A1
	startRefresh : function(){
		if(this._executeRefreshing_) return;
		this._executeRefreshing_ = true;
		var configs = this.oJBFTConfig.configs;
		this.myInterval = setTimeout(function(){
			this.execRefresh();
			setTimeout(arguments.callee.bind(this), configs.intervalGetData * 1000);
		}.bind(this), configs.intervalGetData * 1000);
	},

	//\u505C\u6B62\u201C\u5B9A\u65F6\u4E0E\u670D\u52A1\u5668\u8BF7\u6C42\u201D\u670D\u52A1
	stopRefresh : function(){
		this._executeRefreshing_ = false;
		clearTimeout(this.myInterval);
	},
	
	//\u6267\u884C\u5B9E\u9645\u7684\u5237\u65B0\u52A8\u4F5C
	execRefresh : function(){
		if(this._executeRefreshing_){
			this.loadData();
			this.loadNoticeData();
		}
	},

	loadData : function(){
		alert("need overwrite in subclass.");
	}
});
var m_oJBFTTemplate = {
	topic : [
        '<div class="record {4}" id="{0}">',
            '<div class="speaker">{1}:</div>',
			'<div class="posttime">{2}</div>',
            '<div class="content">{3}</div>',
        '</div>{5}'
	].join(''),
	post : [
        '<div class="postrecord" id="{0}">',
            '<div class="postspeaker">{1}:</div>',
			'<div class="postposttime">{2}</div>',
            '<div class="postcontent">{3}</div>',
        '</div>'
	].join(''),
	blank : '<div id="divNoObjectFound"><div></div></div>',
	nav : {
		total :[
			'<span class="nav">',
				'\u5171<span class="navtotalnum">{0}</span>\u4E2A\u95EE\u9898,',
				'\u6BCF\u9875<span class="navpagecount">{1}</span>\u4E2A&nbsp;&nbsp;',
				'{2}',
			'</span>'
		].join(''),
		curr :[
			'<span class="navcurr">{0}</span>&nbsp;&nbsp;'
		].join(''),
		page :[
			'<span class="navpage" pageindex="{0}">{0}</span>&nbsp;&nbsp;'
		].join('')
	},
	notice : {
		main : [
			 '<table border="0" width="100%"><tr>{0}</tr></table>'
		].join(''),
		item : '<td nowrap="true">{0}({1})&nbsp;&nbsp;&nbsp;&nbsp;</td>'
	},
	vip : {
		main : [
			'<select name="to" class="dabiankuang" id="to">',
				'{0}',
				'<option value="-1">\u4E0D\u9009\u62E9\u56DE\u7B54\u4EBA</option>',
            '</select>'                                             
		].join(''),
		item : '<option value="{0}">{0}</option>'
	}
};
Object.extend(String, {
    format : function(format){
        var args = Array.prototype.slice.call(arguments, 1);
        return format.replace(/\{(\d+)\}/g, function(m, i){
            return args[i];
        });
    }
});
//\u5609\u5BBE\u8BBF\u8C08\u7684\u5177\u4F53\u5B9E\u73B0\u7C7B
var JBFTImpl = Class.create();
Object.extend(JBFTImpl.prototype, JBFTBase.prototype);
Object.extend(JBFTImpl.prototype, {
	loadVipData : function(){
		var configs = this.oJBFTConfig.configs;	
		var docHead = document.getElementsByTagName("head")[0];
		var newScriptNode = document.createElement('script');
		newScriptNode.src = configs.vipJson + '?r=' + new Date().getTime();
		docHead.appendChild(newScriptNode);
	},
	renderVip : function(arrJson){
		if(!arrJson)return;
		var endTime = arrJson["EndTime"];
		if(endTime.toDate().getTime() <= new Date().getTime()){//\u8BBF\u8C08\u5DF2\u7ECF\u7ED3\u675F			
			var fillQuestionDom = $('fillQuestion');
			if(fillQuestionDom){				
				Event.destroyAll(fillQuestionDom);
				Event.observe(fillQuestionDom, 'click', function(){
					alert("\u672C\u6B21\u8BBF\u8C08\u5DF2\u7ECF\u7ED3\u675F,\u611F\u8C22\u60A8\u7684\u53C2\u4E0E!");						
				});
			}
			Element.hide($("postFormContainer"));			
		}
		arrJson = arrJson["CommentUsers"];
		var result = [];
		for(var i=0, n=arrJson.length; i<n; i++){
			var json = arrJson[i];
			result.push(String.format(m_oJBFTTemplate.vip.item,
				json["UserName"])
			);
		}
		$('vipsel').innerHTML = 
			String.format(m_oJBFTTemplate.vip.main,
				result.join('')
			);
	},
	loadNoticeData : function(){
		var configs = this.oJBFTConfig.configs;	
		var docHead = document.getElementsByTagName("head")[0];
		var newScriptNode = document.createElement('script');
		newScriptNode.src = configs.noticeJson + '?r=' + new Date().getTime();
		docHead.appendChild(newScriptNode);
	},
	renderNotice : function(arrJson){
		if(!arrJson)return;
		var result = [];
		for(var i=0, n=arrJson.length; i<n; i++){
			var json = arrJson[i];
			result.push(String.format(m_oJBFTTemplate.notice.item,
				json["Content"], json["PostTime"])
			);
		}
		
		$('notice').innerHTML = 
			String.format(m_oJBFTTemplate.notice.main,
				result.join('')
			);
	},
	//\u5411\u670D\u52A1\u5668\u8BF7\u6C42\u6570\u636E\u7684\u64CD\u4F5C
	loadData : function(){		
		//append script tag node, load pagenums, notifyRefreshNav()
		var configs = this.oJBFTConfig.configs;	
		var docHead = document.getElementsByTagName("head")[0];
		var newScriptNode = document.createElement('script');
		newScriptNode.src = configs.jsonCountData + '?r=' + new Date().getTime();
		docHead.appendChild(newScriptNode);
		//append script tag node, load data, notifyRefresh()
		newScriptNode = document.createElement('script');
		newScriptNode.src = String.format(configs.jsonData, this.pageIndex)
			+ '?r=' + new Date().getTime();
		docHead.appendChild(newScriptNode);
	},
	renderNav : function(countData){
		if(!countData)return;
		var configs = this.oJBFTConfig.configs;	
		var result = [];		
		//var pageNum = (countData.num + countData.pagesize - 1) / countData.pagesize;		
		var pageNum = Math.ceil(countData.num/countData.pagesize);
		if(pageNum <= 1) return;//\u53EA\u6709\u4E00\u9875
		
		this.pageIndex = parseInt(this.pageIndex, 10);
		var s = Math.max(1, this.pageIndex - 1);
		var e = Math.min(this.pageIndex + 1, pageNum);
		//start
		for(var i=1;i<4&&i<s;i++){
			result.push(String.format(m_oJBFTTemplate.nav.page, i));
		}
		if(i<s)result.push("<span>..</span>");
		//middle
		for(var i=s; i<=e; i++){
			if(this.pageIndex==i){
				result.push(String.format(m_oJBFTTemplate.nav.curr, i));
			}else{
				result.push(String.format(m_oJBFTTemplate.nav.page, i));
			}
		}
		//end
		if(pageNum-2>e+1)result.push("<span>..</span>");
		for(var i=pageNum-2;i>e&&i<=pageNum;i++){
			result.push(String.format(m_oJBFTTemplate.nav.page, i));
		}
		$(configs.listNavTop).innerHTML = 
			$(configs.listNavBtm).innerHTML = 
			String.format(m_oJBFTTemplate.nav.total,
				countData.num, countData.pagesize,
				result.join('')
			);
	},
	//\u5F97\u5230\u670D\u52A1\u5668\u8FD4\u56DE\u6570\u636E\u4E4B\u540E\u7684\u89E3\u6790\u64CD\u4F5C
	renderList : function(arrData){
		if(!arrData)return;
		var configs = this.oJBFTConfig.configs;			
		var result = [];
		if(configs.listOrder == 'desc'){
			for(var i=0, n=arrData.length; i<n; i++){
				var jsonData = arrData[i];
				jsonData.index = i;
				result.push(this._parseData(jsonData));
			}
		}else{
			for(var i=arrData.length-1; i>=0; i--){
				var jsonData = arrData[i];
				jsonData.index = arrData.length-1-i;
				result.push(this._parseData(jsonData));
			}
		}
		$(configs.listAreaContent).innerHTML = result.join('');
	},
	_parseData : function(jsonData, inner){
		if(!inner){
			return String.format(m_oJBFTTemplate.topic,
				jsonData.pt, jsonData.un, jsonData.pt,
				jsonData.c,
				jsonData.index % 2 == 1 ? 'even' : 'odd',
				this._parseData(jsonData.a, true)
			);
		}
		var result = [];
		var arrAnswer = jsonData;
		if(!arrAnswer)return "";
		for(var i=0, n=arrAnswer.length; i<n; i++){
			var answer = arrAnswer[i];
			result.push(String.format(m_oJBFTTemplate.post,
				answer.pt, answer.un, answer.pt,
				answer.c)
			);
		}
		return result.join('');
	}
});
function postAQuestion(){
	var formPost = $('frmPost');
	var content = formPost.title.value;
	if(content == null || content.length==0){
		alert("\u8BF7\u8F93\u5165\u63D0\u95EE\u5185\u5BB9\uFF01");
		return;
	}
	var postername = formPost.myname.value;
	if(postername.length > 10){
		alert("\u60A8\u7684\u540D\u5B57\u8D85\u51FA\u7CFB\u7EDF\u9650\u5236,\u6700\u591A10\u4E2A\u5B57\u7B26");
		return;
	}
	formPost.submit();	
	$("content").value = "";
	return false;
}
function postActionAttach(){
	var formPost = $('frmPost');
	formPost.id.value = window.V_VIPID;
	formPost.action = window.V_SYSURL + 'wcmonline/ajaxservice/postviaform.jsp';
	Event.observe($("submitA"), 'click', postAQuestion);
	Event.observe($("content"), "keypress", function(){		
		if(event.ctrlKey&&event.keyCode==13){
			postAQuestion();
		}
	});	
}
function resetPostForm(){	
	var formPost = $('frmPost');
	formPost.reset();
	formPost.id.value = window.V_VIPID;
}
Event.observe(window, 'load', function(){
	var oConfigs = new JBFTConfig();
	iframeAutoFit(oConfigs.configs.needRefreshIframes);
	var myObj = window.jbftObj = new JBFTImpl(oConfigs);
	var configs = myObj.oJBFTConfig.configs;
	configs.jsonData = window.V_BOOKDATAURL || configs.jsonData;
	configs.jsonCountData = window.V_BOOKCOUNTDATAURL || configs.jsonCountData;
	configs.vipJson = window.V_VIPDATAURL || configs.vipJson;
	configs.noticeJson = window.V_NOTICDATAURL || configs.noticeJson;
	configs.intervalGetData = 20;
	myObj.pageIndex = 1;
	myObj.loadNoticeData();	
	myObj.loadVipData();
	myObj.loadData();
	myObj.startRefresh();
	
	postActionAttach();
});

//util functions:
Object.extend(String.prototype,{
	lTrim : function () {
		return this.replace(/^\s*/, "");
	},
	rTrim : function () {
		return this.replace(/\s*$/, "");
	},
	trim : function () {
		return this.rTrim().lTrim();
	},
	toDate : function() {
		var _sFormat = 'yyyy-mm-dd HH:MM:ss';
		var re = /(yyyy|mm|dd|HH|MM|ss)/g;
		var arr = null;
		var s = {};
		while(arr=re.exec(_sFormat)){
			var sPattern = arr[0];
			var nIndex = arr.index;
			s[sPattern] = parseInt(this.substring(nIndex,nIndex+sPattern.length),10)||0;
		}
		var oDate = new Date();
		oDate.setSeconds(s["ss"]);
		oDate.setMinutes(s["MM"]);
		oDate.setHours(s["HH"]);
		oDate.setDate(s["dd"]);
		oDate.setMonth(s["mm"]-1);
		oDate.setFullYear(s["yyyy"]);
		return oDate;
	}
});

Object.extend(Event,{
	destroyAll : function(element){
		if (!this.observers) return;
		if (element.addEventListener) {
		  var observer = null;
		  for(var i=0,len=this.observers.length;i<len;i++){
			  observer = this.observers[i];
			  element.removeEventListener(observer[1], observer[2], observer[3]);
		  }		  
		} else if (element.attachEvent) {
		  var observer = null;
		  for(var i=0,len=this.observers.length;i<len;i++){
			  observer = this.observers[i];
			  element.detachEvent('on'+observer[1], observer[2]);
		  }		  		  
		}
	}
});
