/*<script>*/ //just want js hilight

var lastPage=1;
var nav; //instantiate in init()
var poster;
var tid = 0;
var raw;

function addQuote(name, id) {
	poster.show();
	poster.insertTag('[quote='+name+':'+id+']'+raw.get(''+id).strip()+'\n[/quote]');
}

function endEdit(id, time){
	var msgCell = $$('#r'+id+' td.msg')[0], lastEdit = $('r'+id).next().down('.lastedit');
	//alert(msgCell.clone());
	//msgCell.update(bbcode(raw.get(id)));
	msgCell.update(msgCell.down('div.preview').innerHTML);
	if(time) {
		lastEdit.update('แก้ไขล่าสุด  '+time);
		// !! error when display code
		//dp.SyntaxHighlighter.HighlightAll('code');
	}
}

function edit(id) {
	var msgCell = $$('#r'+id+' td.msg')[0], content = msgCell.innerHTML;
	
	if(msgCell.down('.poster'))
		return;

	msgCell.update(
		'<div id="editBox'+id+'" class="poster inplace">'
		+'<div class="preview">'+content+'</div><br/>'
		+'<div class="status" align="right" style="display:none"></div>'
		+'<form class="formdata" style="display:none">'
		+'<div class="toolbar">b,i,u,img,url,quote,|,list,list=1,code,font,size,color</div>'
		+'<div class="leftouter"><textarea name="msg">'+raw.get(id)+'</textarea></div>'
		+'<input name="tid" type="hidden" value="'+tid+'">'
		+'<input name="id" type="hidden" value="'+id+'">'
		+'<button class="submit">แก้ไข</button><button class="reset">ต้นฉบับ</button>'
		+'<button class="togglebutton" onclick="endEdit('+id+')">ยกเลิก</button>'
		+'</form>'
		+'</div>'
	);
	var editor = new Poster('editBox'+id,'edit.php',function(output) {
				if(output.responseText.length==0) {
					editor.setStatus("เกิดข้อผิดพลาด! กรุณาลองอีกครั้ง");
				}
				else {
					//editor.resetForm();
					//editor.setStatus(output.responseText);
					//editor.toggleForm();
					raw.set(id, msgCell.down('.poster textarea').value);
					endEdit(id, output.responseText);
				}
			}, {show:'ยกเลิก', hide:'ยกเลิก'});
	editor.show();
}

function vote() {
	if(confirm('ต้องการโหวตให้กระทู้นี้?')) {
		new Ajax.Request('vote.php', {
			onComplete: function(output) {
				var r = $('response');
				if(output.responseText.substring(0,2)=='ok') {
					r.setStyle({color:'blue'});
					r.update('โหวตแล้ว');
					$('vLabel').update(output.responseText.substring(3));
				} else {
					r.setStyle({color:'red'});
					r.update(output.responseText);
				}
			},
			parameters: $('viewOption')['id'].serialize()
		});
	}
}
function updateStepLink() {
	//update step link
	var content='<div class="page_link"><span>แสดงผล</span> ';
	var curStep=nav.getOption('step'),steps=[10,25,50];
	var t = new Template('<a href="t#{seoString}" onclick="location.href=\'#{queryString}\'; return false;">#{step}</a>');
	for(var i=0;i<steps.length;i++) {
		if(steps[i]==curStep)
			content+='<span class="current">'+curStep+'</span>';
		else
			content+=t.evaluate({seoString: nav.getSEOString({step: steps[i], page: 1}),queryString: nav.getQueryString({step: steps[i], page: 1},'#'), step: steps[i]});
	}
	if(curStep!=0)
		content += t.evaluate({seoString: nav.getSEOString({step: 0, page: 1}),queryString: nav.getQueryString({step: 0, page: 1},'#'), step: 'ทั้งหมด'});
	else
		content += '<span class="current">ทั้งหมด</span>';
	content+='</div>';
	$$('.stepbar').invoke('update',content);
}
function updatePageLink(output) {
	//update page link
	var data = new XMLData(output.responseXML,'topic')
	var content = data.getData(0,'pagelink');
	$$('.pagebar').invoke('update',content=='-'?'':content);
	//update permalink
	/*$('permalink').value = location.href.split('?')[0].split('#')[0]
		+ '?id='+nav.getOption('id');
		+ nav.getQueryString(false,'#');*/
}
function updateReply(output) {
	var content='';
	if(output.responseText.length==0) {
		$('post').update(content='<tr><td class="error">เกิดข้อผิดพลาด</td></tr>');
	}
	else {
		var t = new Template('<tr id="r#{id}"><td class="info" rowspan="2">'
								+'<div class="outer">'
								+'<div class="top"><div class="left">&nbsp;</div><div class="right">&nbsp;</div>&nbsp;</div>'
								+'<div class="middle">'
								+'<a name="rep=#{id}"></a><div class="ref">'
								+'<b>#{ref}</b><br /><small>#{datetime}</small></div>'
								+'<h1>#{name}<br /><img src="#{avatar}" /></h1>'
								+'#{info}</div>'
								+'<div class="bottom"><div class="left"></div><div class="right"></div></div>'
								+'</div></td><td class="msg">#{msg}</td></tr>'
								+'<tr><td class="bottombar"><span class="lastedit">#{lastedit}</span>'
								+'<div>#{edit} <img src ="/pictures/comment3.gif" />'
								+'<a href="javascript:addQuote(\'#{display}\',#{id})">[อ้างอิง]</a></div>'
								+'</td></tr>');
		var info = new Template('เข้าร่วม: #{join}<br />ตอบ: #{posts}<br /><br />');
		var editLink = new Template('<img src="/pictures/plugin_edit.gif" /><a href="javascript:edit(#{id})">[แก้ไข]</a>')
		var data0 = new XMLData(output.responseXML,'post');
		var uid0 = parseInt(data0.getData(0,'uid'),10), name0 = data0.getData(0,'name').escapeHTML();
		var tag = data0.readAttribute(0,'tag');
		var editable = data0.readAttribute(0,'editable');
		var header = '<tr class="rhead"><td colspan="2">'
			+ data0.getData(0,'title').escapeHTML()
			+' <small>(+<span id="vLabel">'+data0.getData(0,'votes')+'</span> โหวต)</small>'
			+( tag.empty() ? ''
			:'<br /><span class="tagbar">tag: '
			+tag.gsub(/(^|,)\s*([^\s,]+)\s*/,'<a href="/search.php?q=#{2}">#{2}</a> ')
			+'</span>')
			+'</td></tr>';
		tid = data0.readAttribute(0, 'id');
		raw = $H({0: data0.getData(0,'msg')});
		var lastedit = data0.getData(0, 'lastedit');
		$('post').update(header+t.evaluate({ id: 0,
								ref: '',
								display: name0,
								avatar: data0.getData(0,'avatar'),
								name: uid0 == 0 ? name0 : userLink.evaluate({uid: uid0, name: name0}),
								info: uid0 == 0 ? '' : info.evaluate({join: data0.getData(0,'joined'), posts: data0.getData(0,'posts')}),
								msg: bbcode(data0.getData(0,'msg')), 
								datetime: data0.getData(0,'datetime'),
								lastedit: lastedit != '-' ? 'แก้ไขล่าสุด '+lastedit : '',
								edit: editable ? editLink.evaluate({id: 0}) : ''
							}));
		//var t=new Template('<tr><td>#{name}<br> @ #{datetime}</td><td>#{msg}</td></tr>');
		var data = new XMLData(output.responseXML,'reply');
		if(data.length == 0) {
			content += '<tr><td class="error">ยังไม่มีข้อความตอบกระทู้นี้</td></tr>'
		} else {
			for(var i=0; i<data.length; i++) {
				var auid = parseInt(data.getData(i,'uid'),10), aname = data.getData(i,'name').escapeHTML();
				var id = data.readAttribute(i,'rid');
				var editable = data.readAttribute(i,'editable');
				var lastedit = data.getData(i, 'lastedit');
				//alert(editable);
				raw.set(''+id, data.getData(i,'msg'));
				content += t.evaluate({ id: id,
					ref: '#'+id,
					display: aname,
					avatar: data.getData(i,'avatar'),
					name: auid == 0 ? aname : userLink.evaluate({uid: auid, name: aname}),
					info: auid == 0 ? '' : info.evaluate({join: data.getData(i,'joined'), posts: data.getData(i,'posts')}),
					msg: bbcode(data.getData(i,'msg')), 
					datetime: data.getData(i,'datetime'),
					lastedit: lastedit != '-' ? 'แก้ไขล่าสุด '+lastedit : '',
					edit: editable == 'editable' ? editLink.evaluate({id: id}) : ''
				});
			}
		}
	}
	$('topic').update(content);
	dp.SyntaxHighlighter.HighlightAll('code');
}
function updateContent() {
	new Ajax.Request("topic.xml.php", {
			onCreate: function() {
				var ls = '<tr><td align="center">กำลังโหลดข้อมูล <img src="/pictures/loading_16x16.gif"/></td></tr>';
				$('post').update(ls);
				$('topic').update(ls);
			},
			onComplete: function(output) {
				var tmp = $H(location.hash.substring(1).toQueryParams()).get('rep');
				if(tmp == 'last') { //#rep=last
					tmp = (new XMLData(output.responseXML,'topic')).readAttribute(0,'reps');
					location.replace(nav.getQueryString({rep: tmp},'#'));
				} else {
					updateReply(output);
					updatePageLink(output);
					updateStepLink();
					if(tmp) {
						$('r'+tmp).scrollTo();
					}
				}
			},
			parameters: $('viewOption').serialize(),
			method: 'get'
		}
	);
}
function initPoster() {
	poster = new Poster('replyBox','reply.php',function(output) {
				if(output.responseText.length==0) {
					poster.setStatus("เกิดข้อผิดพลาด! กรุณาลองอีกครั้ง");
				}
				else {
					//number of replies return as responseText for using in page calculation
					//####(assume that no replies has been deleted)####
					location.hash = nav.getQueryString({rep:'last'},'#');
					poster.resetForm();
					//poster.setStatus(output.responseText);
					poster.toggleForm();
				}
			}, {show:'ตอบกระทู้'});
	poster.addToggleButton('tb2');
}
function init() {
	initPoster();
	nav = new Nav('viewOption',{step: 10, page: 1}, updateContent, 'rep');
	nav.setOption();
	init = initPoster = null; //destroy the functions
}