BAOZI = {
  Autotag: '<div id="allbaozi" postit="" bg=white opacity=90 width=700 height=200 left="c-150" top="b-250"></div>',
  current: 0,
  next: function (n){
	BAOZI.current+=n;
	if(BAOZI.current>999) BAOZI.current=980;
	DYN.ih(BAOZI.tmpid, BAOZI.list(20));
	return false;
  },
  prev: function (n){
	BAOZI.current-=n;
	if(BAOZI.current<0) BAOZI.current=0;
	DYN.ih(BAOZI.tmpid, BAOZI.list(20));
	return false;
  },
  id:   function (n){
	if(n<10) return '00'+n;
	if(n<100) return '0'+n;
	return n;
  },
  url:  function (id){
	return BAOZI.url_dir + id+'.gif';
  },
  use:  function (id){
	document.forms[0].baozi_id.value=id;
	return false;
  },
  list: function (n){
	var max = BAOZI.current -0 +n;
	if (max > 999) max = 999;
	var s = '<table align="center"><tr valign="bottom" align="center">';
	for(var i = BAOZI.current; i < max; i++) {
		var id = BAOZI.id(i);
		s+=STR.prf('<td><input type=image src="%s" onclick="return(BAOZI.use(\''+id+'\'))"/><br/>%s</td>', BAOZI.url(id), id, id);
		if (i%10 == 9) s+= '</tr><tr valign="bottom" align="center">';
	}
	s+='</tr></table>';
	return s;
  },
  display: function (e, n){
	var obj = document.getElementById('allbaozi');

	obj.setAttribute('left', POSTIT.last_x);
	obj.setAttribute('top',  POSTIT.last_y);
	obj.setAttribute('postit', '<div align=center><a onclik="BAOZI.prev(100)"> Prev 100 </a>&nbsp;&nbsp;<a onclick="BAOZI.prev(20)"> Prev 20 </a>&nbsp;&nbsp;<a onclick="BAOZI.next(20)"> Next 20 </a>&nbsp;&nbsp;<a onclick="BAOZI.next(100)"> Next 100 </a></div>');
	BAOZI.tmpid = RANDOM.id('baozi');
	obj.innerHTML = '<div id='+BAOZI.tmpid+'>'+BAOZI.list(n)+'</div>';
	POSTIT.render([obj]);
	return false;
  }
};

function submit_ok(){
	DYN.ih('submit', '<input type="submit" value="提交 Submit" name="B1"/></input>');
}

function show_bldg_from_iframe(id) {
	var el = document.getElementById(id);
	var doc;
	if (el.contentDocument) {
		doc= el.contentDocument;
	} else if (el.contentWindow) {
		doc = el.contentWindow.document;
	} else {
		doc = window.frames[id].document;
	}
	BLDG.render(doc);
	//DYN.ih('upload_status', "");
	return true;
}

function setup_async_upload(p) {
	var tmp_id = RANDOM.id('f');
	var tmp_div = document.createElement('DIV');
	tmp_div.innerHTML = STR.prf('<iframe style="display:none" src="about:blank" id="%s" name="%s" onload="show_bldg_from_iframe(\'%s\')"></iframe>', tmp_id, tmp_id, tmp_id);
	document.body.appendChild(tmp_div);
	p.setAttribute('target', tmp_id);
}

POST = {
  Widgets: ['chess', 'countdown', 'typist', 'postit', 'sudoku', 'censor', 'secret'],
  WMap: {'chess':CHESS, 'countdown':COUNTDOWN, 'typist':TYPIST, 'postit':POSTIT,
	 'sudoku':SUDOKU, 'censor':CENSOR, 'secret':SECRET},
  Content: '<textarea rows="10" name="content" cols="120" id="content" onkeydown="submit_ok();"></textarea>',
  AllBaozi: '<div id="allbaozi" postit="" bg=white opacity=90 width=700 height=200 left="c-150" top="b-250"></div>',
  BaoziLabel: '包子 emoticon:',
  Baozi: '<input type="text" name="baozi_id" size="3" maxlength="3"/> (3-digit code) <a href="#" onclick="return(BAOZI.display(this, 20))" onmouseup="BAOZI.remember_pos(event)">浏览全部包子 Browse all emoticons</a ',
  URLLabel: '相关地址 Link URL:',
  URL: '<input type="text" name="url" size="40" maxlength="100"/>&nbsp;(可省略 http:// may be omitted)',

  form_outline: function(trid, previd){
	var h = STR.prf('<form name=f0 method="POST" action="rpc.perl" enctype="multipart/form-data" onsubmit="return POST.submit(this, %s)"><input name="F" type="hidden" value="post" />', "'"+trid+"'");
	var edid;
	if (trid && /^[tr]\d+/.test(trid)) {
		edid = trid;
	} else {
		edid = 'post_form';
		previd = 'preview';
	}
	PREVIEW.Tag = previd;
	var divs = document.getElementsByTagName('div');
	if (trid) {
		h += '<input type="hidden" name="tid" value="'+trid+'"/>';
	}
	if (!trid || /^t\d+$/.test(trid)) {
		h += '标题 Title: <input type="text" name="title" size="40" maxlength="200"/>';
	}
	h += '<table><tr><td width="300">帖子内容<br/>Content:</td><td><div id="html"></div></td></tr></table>';
	h += '<table><tr><td>'+POST.Content+'</td><td align="center"><div id="widgets"></div></td></tr></table>';
	h += POST.AllBaozi;
	h += '<table id="extra"><tr><td align="right">'+POST.BaoziLabel+'</td><td>'+POST.Baozi+'</td></tr><tr><td align="right">'+POST.URLLabel+'</td><td>'+POST.URL+'</td></tr> </table>';
	h += '<div id="recapt"></div><input type="button" value="Preview" onclick="PREVIEW.render(document.forms[0]);return false"></input> <span id="submit"></span> <span id="noreply"></span></form>';
	h += '<span id="sess2"></span>';
	for(var i=0; i<divs.length; i++){
		var id = divs[i].getAttribute('id');
		if (id == null) continue;
		if (id == edid) {
			DYN.ih(id, h);
		} else {
			if (id == 'post_form') {
				DYN.ih(id, "<a style=\"font-size:14pt\" onclick=\"POST.show_edit_form(BLDG.tid, 'post_form', 'preview');\">Reply to this post</a>");
			} else {
				if (/^[tr]\d+$/.test(id)) DYN.ih(id, '');
			}
		}
	}
  },

  widget: function(inp) {
	var name=inp.value;
	var w=POST.WMap[name];
	if (w==null) return;
	document.forms[0].content.value += w.Autotag;
	return false;
  },

  bells_n_whistles: function(obj, trid) {
	var f0 = document.forms[0];
	if (!f0) return;
	if(obj.getAttribute('uid')>0){
		DYN.ih('recapt',"");
	} else {
		Recaptcha.create("6LcpEwAAAAAAADr-MwyOuokb7IRM9-H0ylJEWZtA", "recapt", { theme: "white" });
	}
	DYN.ih('sess2', SESSION.Content_Mesg);
	var old, html, buttons = "";
	if (obj.getAttribute('html_allowed') == 'yes') {
		if (SESSION.UseHTML == 'unknown') {
			SESSION.UseHTML = "CHECKED";
		} else if(f0 && f0.use_html && f0.use_html.checked) {
			SESSION.UseHTML = "CHECKED";
		} else {
			SESSION.UseHTML = "";
		}
		html=STR.prf(' 使用HTML(空格换行必须自己加入)<br/><input type="checkbox" %s name="use_html" onclick="SESSION.UseHTML=document.forms[0].use_html"></input> Use HTML and take care of line breaks yourself.', SESSION.UseHTML);
		buttons='<input type="image" src="/im/nl.png" value="chess" onclick="return POST.widget(this)"/>';
		for (var i = 1; i < POST.Widgets.length; i++) {
			buttons += '<br/><input type=button value="'+POST.Widgets[i]+'" onclick="return POST.widget(this)"/>';
		}
	} else {
		if (f0.use_html) f0.use_html.checked = false;
		html='注意：' + SESSION.Currency + '不够，HTML无效。<br/>You do not have enough ' + SESSION.Currency + ' to use HTML.';
	}

	DYN.ih('html', html);
	DYN.ih('widgets', buttons);

	var xtbl = document.getElementById('extra');
	var xrow = 2;
	if (obj.getAttribute('image_allowed') == 'yes') {
		if (f0.img_url) {
			old = f0.img_url.value;
		} else {
			var row_img = xtbl.insertRow(xrow++);
			var col1 = row_img.insertCell(0);
			col1.setAttribute("align","right");
			col1.innerHTML='相关图片 Image URL:';
			var col2 = row_img.insertCell(1);
			if (old == undefined) old = "";
			var s = '<input type="text" name="img_url" value="'+old+'" size="40" maxlength="200"/> &nbsp;(可省略 http:// may be omitted)';
			if (obj.getAttribute('copy_allowed') == 'yes') {
				if (f0.copy_img) {
					old = f0.copy_img.checked ? "CHECKED" : "";
				} else {
					old = "CHECKED";
				}
				s+=STR.prf('<input type="checkbox" name="copy_img" %s /> copy image', old);
			}
			col2.innerHTML = s;
		}
	} else {
		if (xtbl.rows.length > 2) xtbl.deleteRow(xrow);
	}
	if (obj.getAttribute('upload_allowed') == 'yes') {
		if (f0.upload) {
			old = f0.upload.value;
		} else {
			var row_ul = xtbl.insertRow(xrow++);
			var col1 = row_ul.insertCell(0);
			col1.setAttribute("align","right");
			col1.innerHTML='文件上传 Upload:';
			var col2 = row_ul.insertCell(1);
			col2.innerHTML = STR.prf('<input type="file" name="upload" value="%s" size="40" maxlength="100" onchange="submit_ok();"> 限10MB以下 Maximum 10MB', old);
		}
	} else {
		if (xtbl.rows.length > 2) xtbl.deleteRow(xrow);
	}
	if (SESSION.Can_Set_No_Reply && !/^r\d+$/.test(trid)) {
		if (f0.noreply) {
			old = f0.noreply.checked ? "CHECKED" : "";
		} else {
			old = SESSION.No_Reply;
		}
		DYN.ih('noreply', STR.prf('<input type="checkbox" name="no_reply" %s ></input>谢绝回复 Decline reply', old));
	}
	if (BLDG.Obj) {
		var floor = BLDG.Obj.getElementsByTagName('floor');
		if (/^t\d+$/.test(trid)) {
			POST.fill_blanks(f0, floor[0]);
			submit_ok();
		} else if (/^r(\d+)$/.test(trid)) {
			var rid = RegExp.$1;
			for(var i = 1; i < floor.length; i++) {
				if (floor[i].getAttribute('rid') != rid) continue;
				POST.fill_blanks(f0, floor[i]);
				break;
			}
			submit_ok();
		}
	}
	if (/J2ME/i.test(navigator.appVersion)) {
		submit_ok();
	}
  },

  fill_blanks: function(f0, floor) {
	f0.content.value = DYN.xml_value(floor, 'content');
	f0.title.value = DYN.xml_value(floor, 'title');
	f0.use_html.disabled = false;
	var fields = ["baozi_id", "url", "img_url", "upload"];
	for(var i=0; i<fields.length; i++){
		var v = floor.getAttribute(fields[i]);
		if (v && v.length > 0) {
			f0[fields[i]].value = v;
		}
	}
  },

  show_edit_form: function(trid, previd){
	POST.form_outline(trid, previd);
	POST.bells_n_whistles(SESSION.Obj, trid);
  },

  submit: function (p, trid) {
	var params='F=post';
	if(p.tid && /\d+/.test(p.tid.value)){
		params+='&tid='+p.tid.value;
	}
	if (p.title){
		var title = p.title.value;
		if (title.length==0) {
			alert("新贴无标题。 The title is empty.");
			return false;
		}
		params+='&title='+POST.esc(title);
	}

	if(p.content.value.length==0){
		if (/^t/.test(trid)) {
			if (!confirm("Delete topic "+trid+"?")) {
				return false;
			}
		} else if (/^r/.test(trid)) {
			if (!confirm("Deleted reply "+trid+"?")) {
				return false;
			}
		} else {
			alert("无内容。 The content is empty.");
			return false;
		}
	}
	var cntnt = POST.esc(p.content.value);
	if (/<div +type=['"]?aesctr/i.test(cntnt)) {
		var x = /<div +type="aesctr" +key="([\w!@#$%&*\-+=:;,.? ]+)" *>(.+?)<\/div>/i.exec(cntnt);
		if (x) {
			var crypt = CTR_AES_encrypt(x[2], x[1]);
			cntnt = cntnt.replace(/<div +type="aesctr" .+?<\/div>/i, '<div type="aesctr">'+encode64(crypt)+'</div>');
		} else {
			alert("Invalid secret.  Please make sure a valid key is provided and the secret is not empty.  Keys can only consist of alphanumeric characters, _!@#$%&*-+=:;,.? and spaces.");
			return false;
		}
	}
	params+='&content='+cntnt;
	if(p.recaptcha_response_field){
		if(p.recaptcha_response_field.value.length==0||p.recaptcha_challenge_field.value.length==0){
			alert("匿名请输入验证码。Please use recaptcha for anonymous posting.");
			return false;
		}
		params+='&recaptcha_challenge_field='+p.recaptcha_challenge_field.value+'&recaptcha_response_field='+p.recaptcha_response_field.value;
	}
	if(p.use_html && p.use_html.checked) {
		params+='&use_html=on';
	}
	params+='&baozi_id='+escape(p.baozi_id.value)+'&url='+escape(p.url.value);
	if(p.img_url) {
		params+='&img_url='+escape(p.img_url.value);
	}
	if (p.upload && p.upload.value.length > 0) {
		setup_async_upload(p);
		DYN.ih('submit', '');
		DYN.ih('preview', '');
		return true;
	}
	if (p.copy_img && p.copy_img.checked) {
		params+='&copy_img=on';
	}
	ASYNC.post('rpc.perl', params, BLDG.render, 'mesg');
	DYN.ih('submit', '');
	DYN.ih('preview', '');
	return false;
  },
  esc: function(str){
	return str.replace(/&/g, '%26').replace(/;/g, '%3b').replace(/\n/g, '%0a').replace(/\+/g, '%2b');
  },
  unesc: function(str){
	return str.replace(/%26/ig, '&').replace(/%3b/ig, ';').replace(/%0a/ig, "\n").replace(/%2b/ig, '+');
  }
};
