var KMCmd = true;
var mode = 'list';
var buddy = null;
var s_author = null;
var s_subject = null;
var postAction = null;
/*
		var hrefs = document.getElementsByTagName('a');
		for (i = 0; i < hrefs.length; i++) {
			try {
				hrefs[i].addEventListener('mouseover', function () {
					// do something //
				}, false);
				hrefs[i].addEventListener('mouseout', function () {
					// do something //
				}, false);
			} catch (e) {
				hrefs[i].attachEvent('onmouseover', function () {
					// do something //
				});
				hrefs[i].attachEvent('onmouseout', function () {
					// do something //
				});
			}
		}
*/
window.onload = function() {
	if (document.getElementById('bbs_operate')) {
		try {
			document.onkeydown = keypress;
		} catch (e) {
			document.onkeypress = keypress;
		}
		document.onmousewheel = wheel;
		if (window.addEventListener) {
			window.addEventListener('DOMMouseScroll', wheel, false);
		}
	}
}

function wheel(event) {
	window.onscroll = function() {
//		window.scrollTo(0, 0);
	}
	try {
		var delta = -window.event.wheelDelta;
	} catch (e) {
		var delta = event.detail;
	}
	if (KMCmd) {
		switch (delta > 0) {
			case true:
				switch (mode) {
					case 'list':
					case 'search':
						barScrollDown();
						break;
					case 'post':
						pageScrollDown(3);
						showPage(bbsBody, postShift);
						break;
					default:
						break;
				}
				break;
			case false:
				switch (mode) {
					case 'list':
					case 'search':
						barScrollUp();
						break;
					case 'post':
						pageScrollUp(3);
						showPage(bbsBody, postShift);
						break;
					default:
						break;
				}
				break;
		}
	}
}

var keyinfo = new Array();
keyinfo[8] = 'BackSpace';
keyinfo[9] = 'Tab';
keyinfo[13] = 'Enter';
keyinfo[27] = 'Esc';
keyinfo[32] = 'Space';
keyinfo[33] = 'PageUp';
keyinfo[34] = 'PageDown';
keyinfo[35] = 'End';
keyinfo[36] = 'Home';
keyinfo[37] = 'Left';
keyinfo[38] = 'Up';
keyinfo[39] = 'Right';
keyinfo[40] = 'Down';
keyinfo[191] = 'Slash';
for (i = 65; i <= 90; i++)
	keyinfo[i] = String.fromCharCode(i + 32);
for (i = 48; i <= 57; i++)
	keyinfo[i] = String.fromCharCode(i);

function keypress(e) {
	if (!e)
		e = window.event;
	var key = e['keyCode'];
	var keyup = e.type == 'keyup';
	if (KMCmd && !(isNaN(key) || keyup) && key !== 16 && key !== 17 && key !== 18) {
		keyevent = keyinfo[key];
		if (e.shiftKey)
			keyevent = 'Shift + ' + keyevent;
		if (e.ctrlKey)
			keyevent = 'Ctrl + ' + keyevent;
		if (e.altKey)
			keyevent = 'Alt + ' + keyevent;
//		alert(keyevent + ' (' + key + ')');
		keyprocess(keyevent);
//		return false;
	}
}

function checkReg() {
	var regForm = document.getElementById('regForm');
	if (regForm.username.value.length == 0) {
		alert('請輸入帳號名稱。');
		return false;
	}
	var filter = /^([a-z])([a-z0-9])+$/;
	if (!filter.test(regForm.username.value)) {
		alert('僅限用小寫英文字母與數字組合作為帳號，且第一個需為英文字母。');
		return false;
	}
	if (regForm.password.value.length < 6) {
		alert('請輸入密碼，並且確認密碼長度至少六位。');
		return false;
	}
	if (regForm.password.value !== regForm.pwdchk.value) {
		alert('請確認兩次輸入的密碼相同。');
		return false;
	}
	var filter = /^([a-zA-Z0-9\+-_.])+\@(([a-zA-Z0-9_-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(regForm.email.value)) {
		alert('請輸入正確的 E-mail 信箱。');
		return false;
	}
	regForm.submit();
}

function checkOpt() {
	var optForm = document.getElementById('optForm');
	if (optForm.oldpwd.value.length == 0) {
		if (optForm.newpwd.value.length !== 0 || optForm.newpwd.value.length !== 0) {
			alert('若要變更密碼，必須輸入正確的舊密碼。');
			return false;
		}
	} else {
		if (optForm.newpwd.value.length < 6) {
			alert('請輸入新密碼，並且確認密碼長度至少六位。若不想變更密碼，請保持舊密碼欄位空白。');
			return false;
		}
		if (optForm.newpwd.value !== optForm.newpwdchk.value) {
			alert('請確認兩次輸入的新密碼相同。');
			return false;
		}
	}
	var filter = /^([a-zA-Z0-9\+-_.])+\@(([a-zA-Z0-9_-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(optForm.email.value)) {
		alert('請輸入正確的 E-mail 信箱。');
		return false;
	}
	optForm.submit();
}

function ajaxLoader(target, querystr, reaction) {
	KMCmd = false;
	var ajaxObj = false;
	document.getElementById('loading').style.display = 'inline';
	if (window.XMLHttpRequest) {
		ajaxObj = new XMLHttpRequest();
		if (ajaxObj.overrideMimeType) {
			ajaxObj.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) {
		try {
			ajaxObj = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			try {
				ajaxObj = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e) {
			}
		}
	}

	ajaxObj.onreadystatechange = function () {
		if (ajaxObj.readyState == 4 && ajaxObj.status == 200) {
			document.getElementById('loading').style.display = 'none';
			reaction();
			KMCmd = true;
		} else {
			document.getElementById('loading').display = 'inline';
			KMCmd = false;
		}
	}

	ajaxObj.open('POST', target, true);
	ajaxObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajaxObj.send(querystr);

	return ajaxObj;
}

function getXmlCode(xmldoc) {
	try {
		xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		xmlDoc.loadXML(xmldoc);
	} catch(e) {
		try {
			parser = new DOMParser();
			xmlDoc = parser.parseFromString(xmldoc, 'text/xml');
		} catch (e) {
		}
	}
	return xmlDoc.getElementsByTagName('result')[0].childNodes[0].nodeValue;
}

function postProcessor(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	curId = postid;
	switch (postAction) {
		case 'editpostsubject':
			var subject = curPostObj.childNodes[5].innerHTML.replace(/^(□|◇) /, '');
			if (subject === '（本文沒有標題）')
				newsubject = prompt('更改標題', '');
			else
				newsubject = prompt('更改標題', subject);
			if (newsubject !== subject && newsubject !== null)
				editPostSubject(postid);
			break;
		case 'delete':
			if (confirm('確定要刪除嗎？'))
				delPost(postid);
			break;
		case 'mark':
			markPost(postid);
			break;
		case 'setunread':
			setPostUnread(postid);
			break;
		case 'setread':
			setPostRead(postid);
			break;
		default:
			postLoader(postid);
			break;
	}
}

function editPostSubject(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	var reaction = function() {
		switch (getXmlCode(http_request.responseText)) {
			case '-1':
				alert('修改文章標題失敗！');
				break;
			case '1':
				break;
			default:
				break;
		}
	}
	if (typeof(postid) === 'number') {
		var http_request = ajaxLoader('postprocessor.php', 'action=editpostsubject&postid=' + postid + '&subject=' + newsubject, reaction);
		if (newsubject.match(/^(Re|R:|Re:) /))
			newsubject = newsubject.replace(/^(Re|R:|Re:) /, 'R: ');
		else {
			if (curPostObj.childNodes[3].innerHTML === '            ')
				newsubject = '◇ ' + newsubject;
			else
				newsubject = '□ ' + newsubject;
		}
		if (newsubject === '□ ' || newsubject === '◇ ')
			curPostObj.childNodes[5].innerHTML = newsubject + '（本文沒有標題）';
		else
			curPostObj.childNodes[5].innerHTML = newsubject;
	}
}

function delPost(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	var reaction = function() {
		switch (getXmlCode(http_request.responseText)) {
			case '-1':
				alert('刪除文章失敗！');
				break;
			case '0':
				alert('無法刪除被標記的文章！');
				break;
			default:
				if (getXmlCode(http_request.responseText).match(/ kb$/)) {
					curPostObj.childNodes[1].innerHTML = '&nbsp;';
					curPostObj.childNodes[3].innerHTML = '-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
					curPostObj.childNodes[5].innerHTML = '（本文已被刪除）';
					document.getElementById('quota').innerHTML = http_request.responseText;
					curPostObj.childNodes[5].onclick = function () {
						alert('本文已被刪除！');
						if ((s_author === '' || s_author === null) && (s_subject === '' || s_subject === null))
							mode = 'list';
						else
							mode = 'search';
						return false;
					}
				}
				break;
		}
	}
	if (typeof(postid) === 'number')
		var http_request = ajaxLoader('postprocessor.php', 'action=delpost&postid=' + postid, reaction);
}

function markPost(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	var reaction = function() {
		switch (getXmlCode(http_request.responseText)) {
			case '-1':
				alert('改變文章標記失敗！');
				break;
			case '1':
				curPostObj.childNodes[1].innerHTML = 'm';
				break;
			case '2':
				curPostObj.childNodes[1].innerHTML = 'M';
				break;
			case '3':
				curPostObj.childNodes[1].innerHTML = '&nbsp;';
				break;
			case '4':
				curPostObj.childNodes[1].innerHTML = '+';
				break;
			default:
				break;
		}
	}
	if (typeof(postid) === 'number')
		var http_request = ajaxLoader('postprocessor.php', 'action=markpost&postid=' + postid, reaction);
}

function setPostUnread(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	var reaction = function() {
		switch (getXmlCode(http_request.responseText)) {
			case '-1':
				alert('將文章設為未讀失敗！');
				break;
			case '1':
				curPostObj.childNodes[1].innerHTML = '+';
				break;
			case '2':
				curPostObj.childNodes[1].innerHTML = 'M';
				break;
			default:
				break;
		}
	}
	if (typeof(postid) === 'number')
		var http_request = ajaxLoader('postprocessor.php', 'action=setpostunread&postid=' + postid, reaction);
}

function setPostRead(postid) {
	var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	var reaction = function() {
		switch (getXmlCode(http_request.responseText)) {
			case '-1':
				alert('將文章設為已讀失敗！');
				break;
			case '1':
				curPostObj.childNodes[1].innerHTML = '&nbsp;';
				break;
			case '2':
				curPostObj.childNodes[1].innerHTML = 'm';
				break;
			default:
				break;
		}
	}
	if (typeof(postid) === 'number')
		var http_request = ajaxLoader('postprocessor.php', 'action=setpostread&postid=' + postid, reaction);
}

function downloadPost(postid, mode) {
	if (typeof(postid) === 'number')
		window.location.href = 'dlpost.php?postid=' + postid + '&mode=' + mode;
}

function forwardPost(postid) {
	to = prompt('請輸入轉寄地址', '');
	var filter = /^([a-zA-Z0-9\+-_.])+\@(([a-zA-Z0-9_-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (typeof(to) === 'object' || to === '') {
		alert('取消轉寄');
	} else if (!filter.test(to)) {
		alert('位址錯誤');
	} else {
		var reaction = function() {
			switch (getXmlCode(http_request.responseText)) {
				case '-1':
					alert('轉寄失敗！');
					break;
				case '1':
					alert('轉寄成功！');
					break;
				default:
					break;
			}
		}
		if (typeof(postid) === 'number')
			var http_request = ajaxLoader('fwdpost.php', 'to=' + to + '&postid=' + postid, reaction);
	}
}

function listLoader(buddy, author, subject) {
	var reaction = function() {
		document.getElementById('functions').innerHTML = '<li><a href="#" onclick="forwardPost(Number(document.getElementById(\'postlist\').childNodes[curPost - 1].getAttribute(\'rel\').replace(/^postid_/, \'\'))); return false;">轉寄</a></li><li><a href="#" onclick="downloadPost(Number(document.getElementById(\'postlist\').childNodes[curPost - 1].getAttribute(\'rel\').replace(/^postid_/, \'\')), \'html\'); return false;">下載為網頁</a></li><li><a href="#" onclick="downloadPost(Number(document.getElementById(\'postlist\').childNodes[curPost - 1].getAttribute(\'rel\').replace(/^postid_/, \'\')), \'ansi\'); return false;">下載 ANSI 原始檔</a></li><li><a href="backupall.php">大量打包</a></li>';
		if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1)
			document.getElementById('bbsbody').innerHTML = '<pre>' + http_request.responseText + '</pre>';
		else 
			document.getElementById('bbsbody').childNodes[0].innerHTML = http_request.responseText;
		if (typeof(curId) === 'number') {
			itemFound = false;
			for (i = 0; i < document.getElementById('postlist').childNodes.length; i++) {
				if (document.getElementById('postlist').childNodes[i].getAttribute('rel') === 'postid_' + curId) {
					curPost = i + 1;
					itemFound = true;
					break;
				}
			}
		}
		if (typeof(curPost) !== 'number' || !document.getElementById('postlist').childNodes[curPost - 1])
			curPost = document.getElementById('postlist').childNodes.length;
		document.getElementById('postlist').childNodes[curPost - 1].style.background = 'gray';
	}
	var qstr = '';
	if (buddy !== null && buddy !== '')
		qstr += 'buddy=' + buddy + '&';
	if (author !== null && author !== '') {
		qstr += 'author=' + author + '&';
		mode = 'search';
	}
	if (subject !== null && subject !== '') {
		qstr += 'subject=' + subject + '&';
		mode = 'search';
	}
	qstr = qstr.replace(/&$/, '');
	var http_request = ajaxLoader('listloader.php', qstr, reaction);
}

function postLoader(postid) {
	postShift = 0;
	curId = postid;
	var reaction = function() {
		document.getElementById('functions').innerHTML = '<li><a href="#" onclick="forwardPost(curId); return false;">轉寄</a></li><li><a href="#" onclick="downloadPost(curId, \'html\'); return false;">下載為網頁</a></li><li><a href="#" onclick="downloadPost(curId, \'ansi\'); return false;">下載 ANSI 原始檔</a></li>';
		mode = 'post';
		if (bbsMode) {
			bbsBody = http_request.responseText.split("\r\n");
			showPage(bbsBody, postShift);
		} else {
			if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1)
				document.getElementById('bbsbody').innerHTML = '<pre>' + http_request.responseText + '</pre>';
			else
				document.getElementById('bbsbody').childNodes[0].innerHTML = http_request.responseText;
		}
	}
	var http_request = ajaxLoader('postloader.php', 'postid=' + postid, reaction);
}

function keyprocess(keyevent) {
	try {
		var curPostObj = document.getElementById('postlist').childNodes[curPost - 1];
	} catch (e) {
	}
	switch (keyevent) {
		case 'PageUp':
			switch (mode) {
				case 'list':
					break;
				case 'search':
					break;
				case 'post':
					pageScrollUp(22);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Up':
			switch (mode) {
				case 'list':
				case 'search':
					barScrollUp();
					break;
				case 'post':
					pageScrollUp(1);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'PageDown':
			switch (mode) {
				case 'list':
					break;
				case 'search':
					break;
				case 'post':
					pageScrollDown(22);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Down':
			switch (mode) {
				case 'list':
				case 'search':
					barScrollDown();
					break;
				case 'post':
					pageScrollDown(1);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Left':
			returnPrevious();
			break;
		case 'Right':
			switch (mode) {
				case 'list':
				case 'search':
					mode = 'post';
					execPostProcess();
					break;
				case 'post':
					pageScrollDown(22);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Ctrl + Left':
			largeScaler();
			break;
		case 'Ctrl + Right':
			normalScaler();
			break;
		case 'Home':
			switch (mode) {
				case 'list':
					curPostObj.style.background = 'black';
					curPost = 1;
					document.getElementById('postlist').childNodes[curPost - 1].style.background = 'gray';
					break;
				case 'search':
					break;
				case 'post':
					postShift = 0;
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'End':
			switch (mode) {
				case 'list':
					curPostObj.style.background = 'black';
					curPost = document.getElementById('postlist').childNodes.length;
					document.getElementById('postlist').childNodes[curPost - 1].style.background = 'gray';
					break;
				case 'search':
					break;
				case 'post':
					if (bbsBody.length - postShift > 23)
						postShift = bbsBody.length - 23;
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Enter':
			switch (mode) {
				case 'list':
					execPostProcess();
					break;
				case 'search':
					mode = 'post';
					execPostProcess();
					break;
				case 'post':
					pageScrollDown(1);
					showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'Space':
			switch (mode) {
				case 'list':
					break;
				case 'search':
					break;
				case 'post':
				pageScrollDown(22);
				showPage(bbsBody, postShift);
					break;
				default:
					break;
			}
			break;
		case 'h':
			var help = new Array(
				Array('滑鼠滾輪', '捲動光棒、文章'),
				Array('↑', '游標上移'),
				Array('↓', '游標下移'),
				Array('←', '離開正在閱讀的文章'),
				Array('→', '閱讀游標所在的文章'),
				Array('PageUp', '上移一頁'),
				Array('PageDown', '下移一頁'),
				Array('Home', '移到文章列表、文章的最前端'),
				Array('End', '移到文章列表、文章的最末端'),
				Array('Enter', ''),
				Array('<空白鍵>', ''),
				Array('<數字鍵>', '跳至第幾項'),
				Array('ｓ', '搜尋作者、標題'),
				Array('ｐ', '發表文章（尚未開放）'),
				Array('ｑ', '離開正在閱讀的文章'),
				Array('ｆ', '轉寄文章'),
				Array('ｗ', '下載為網頁'),
				Array('ｄ', '刪除文章'),
				Array('ｔ', '變更文章標題'),
				Array('ｍ', '設定／取消文章的 mark 標記'),
				Array('ｕ', '將文章設定為未讀'),
				Array('ｖ', '將文章設定為已讀'),
				Array('ｈ', '本說明文件')
			);
			var helpmsg = '';
			for (key in help)
				helpmsg += help[key][0] + '：' + help[key][1] + "\n";
			alert(helpmsg);
			break;
		case 'q':
			returnPrevious();
			break;
		case 'p':
			alert('想波文？晚點再說吧！');
			break;
		case 'f':
			if (mode === 'list' || mode === 'search')
				forwardPost(Number(document.getElementById('postlist').childNodes[curPost - 1].getAttribute('rel').replace(/^postid_/, '')));
			else if (mode === 'post')
				forwardPost(curId);
			break;
		case 't':
			if (mode === 'list' || mode === 'search') {
				postAction = 'editpostsubject';
				execPostProcess();
			}
			break;
		case 'd':
			if (mode === 'list' || mode === 'search') {
				postAction = 'delete';
				execPostProcess();
			}
			break;
		case 'm':
			if (mode === 'list' || mode === 'search') {
				postAction = 'mark';
				execPostProcess();
			}
			break;
		case 'u':
			if (mode === 'list' || mode === 'search') {
				postAction = 'setunread';
				execPostProcess();
			}
			break;
		case 'v':
			if (mode === 'list' || mode === 'search') {
				postAction = 'setread';
				execPostProcess();
			}
			break;
		case 'w':
			if (mode === 'list' || mode === 'search')
				downloadPost(Number(document.getElementById('postlist').childNodes[curPost - 1].getAttribute('rel').replace(/^postid_/, '')), 'html');
			else if (mode === 'post')
				downloadPost(curId, 'html');
			break;
		case 'Shift + 1':
			alert('文章狀態：' + curPostObj.childNodes[1].innerHTML);
			break;
		case 'Shift + 2':
			alert('文章作者：' + curPostObj.childNodes[3].innerHTML);
			break;
		case 'Shift + 3':
			alert('文章主旨：' + curPostObj.childNodes[5].innerHTML);
			break;
		case 'Shift + 4':
			alert('搜尋好友：' + buddy);
			break;
		case 'Shift + 5':
			alert('搜尋作者：' + s_author);
			break;
		case 'Shift + 6':
			alert('搜尋主旨：' + s_subject);
			break;
		case 'Shift + 7':
			if (mode === 'list' || mode === 'search')
				alert('文章編號：' + document.getElementById('postlist').childNodes[curPost - 1].getAttribute('rel').replace(/^postid_/, ''));
			else if (mode === 'post')
				alert('文章編號：' + curId);
			break;
		case 'Shift + 8':
			break;
		case 'Shift + 9':
			break;
		case 'Shift + 0':
			break;
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			if (mode === 'list' || mode === 'search') {
				var jump = prompt('跳至第幾項', keyevent);
				if (jump < 1)
					var jump = 1;
				if (jump > document.getElementById('postlist').childNodes.length)
					var jump = document.getElementById('postlist').childNodes.length;
				curPostObj.style.background = 'black';
				curPost = jump;
				document.getElementById('postlist').childNodes[curPost - 1].style.background = 'gray';
			}
			break;
		case 'a':
			if (mode === 'list' || mode === 'search') {
				s_author = prompt('搜尋作者：');
				if (s_author !== null && typeof(s_author) !== 'undefined' && s_author !== '')
					listLoader(buddy, s_author, s_subject);
		}
			break;
		case 's':
			if (mode === 'list' || mode === 'search') {
				s_author = prompt('搜尋作者：', '');
				if (s_author !== null && typeof(s_author) !== 'undefined') {
					s_subject = prompt('搜尋標題：', curPostObj.childNodes[5].innerHTML.replace(/^(□|◇|Re:) /, ''));
					if (s_subject !== null && typeof(s_subject) !== 'undefined')
						listLoader(buddy, s_author, s_subject);
				}
			}
			break;
		default:
//			alert(keyevent);
			break;
	}
}

function execPostProcess() {
	try {
		document.getElementById('postlist').childNodes[curPost - 1].childNodes[5].onclick();
		postAction = null;
	} catch (e) {
	}
}

function showPage(content, postShift) {
	var output = '';
	for (i = postShift; i < (postShift + 23); i++) {
		if (!(bbsBody[i] === '' || typeof(bbsBody[i]) === 'undefined'))
			output += bbsBody[i];
		output += "\r\n";
	}
	if (navigator.userAgent.indexOf('Macintosh') !== -1)
		// 修正 Mac 空白字元無法等寬問題（未完全搞定）
		output = output.replace(/ {2}/g, '<span style="background: black; color: white; padding-left: 1em;"></span>');
	if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1)
		document.getElementById('bbsbody').innerHTML = '<pre><div>' + output + '</div></pre>';
	else
		document.getElementById('bbsbody').childNodes[0].innerHTML = output;
}

function pageScrollUp(shifts) {
	postShift = postShift - shifts;
	if (postShift < 0)
		postShift = 0;
}

function pageScrollDown(shifts) {
	postShift = postShift + shifts;
	if (postShift > bbsBody.length - 23)
		postShift = bbsBody.length - 23;
	if (postShift < 0)
		postShift = 0;
}

function barScrollUp() {
	if (curPost > 1) {
		curPost--;
		document.getElementById('postlist').childNodes[curPost - 1].style.background = 'gray';
		document.getElementById('postlist').childNodes[curPost].style.background = 'black';
	}

}

function barScrollDown() {
	if (document.getElementById('postlist').childNodes[curPost]) {
		document.getElementById('postlist').childNodes[curPost - 1].style.background = 'black';
		document.getElementById('postlist').childNodes[curPost].style.background = 'gray';
		curPost++;
	}
}

function returnPrevious() {
	switch (mode) {
		case 'list':
			break;
		case 'search':
			s_author = null;
			s_subject = null;
			mode = 'list';
			listLoader(buddy, s_author, s_subject);
			break;
		case 'post':
			if ((s_author === '' || s_author === null) && (s_subject === '' || s_subject === null))
				mode = 'list';
			else
				mode = 'search';
			listLoader(buddy, s_author, s_subject);
			break;
		default:
			break;
	}
}

function largeScaler() {
	document.getElementById('ctrlPanel').style.display = 'none';
	document.getElementById('bbs_post').style.width = '977px';
	document.getElementById('bbsbody').childNodes[0].style.width = '913px';
	document.getElementById('bbsbody').style.fontSize = '1.4em';
	document.getElementById('bbsbody').style.lineHeight = '1em';
//	document.getElementById('bbsbody').childNodes[0].style.offsetWidth = '977';
}

function normalScaler() {
	document.getElementById('ctrlPanel').style.display = 'block';
	document.getElementById('bbs_post').style.width = '704px';
	document.getElementById('bbsbody').childNodes[0].style.width = '640px';
	document.getElementById('bbsbody').style.fontSize = '1em';
}