var keys = [38,38,40,40,37,39,37,39,66,65], mposX, mposY;
function _(id) {
	return document.getElementById(id);
}

function GetXmlHttpObject() {
	var xhr = null;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xhr;
}

function toggleLogin() {
	var loginDiv = _('loginDiv');
	if (loginDiv.style.display) {
		loginDiv.style.display = '';
	} else {
		loginDiv.style.display = 'block';
		_('username').focus();
	}
}

function unformat(str) {
	var replaceFrom = new Array(
		new RegExp('<div class="?quoteWrap"?>(.*?)<\/div>','im'),
		new RegExp('<span class="strike">(.*?)<\/span>','im'),
		new RegExp('<span style="color: ([^;"]+);?">(.*?)<\/span>','im'),
		'<img .*? alt="([^"]+)" ?\/?>',
		'<img src="(.*?)" alt="" ?\/?>',
		'<img alt=([^ ]+) .*? ?\/?>', // Weird IE fix
		'<a href="([^"]+)">(.*?)<\/a>',
		'\r?\n','<b>','</b>','<i>','</i>','<u>','</u>','&lt;','&gt;','<br ?\/?>','&nbsp;','(^(\r?\n|\t)+|(\r?\n|\t)+$)'
	);
	var replaceTo = new Array(
		'[quote]$1[/quote]',
		'[s]$1[/s]',
		'[color=$1]$2[/color]',
		'$1',
		'[img]$1[/img]',
		'$1',
		'[url=$1]$2[/url]',
		'','[b]','[/b]','[i]','[/i]','[u]','[/u]','<','>','\n',' ',''
	);
	for(i in replaceFrom) {
		if(typeof(replaceFrom[i]) == "string") {
			str = str.replace(new RegExp(replaceFrom[i],'gi'),replaceTo[i]);
		}
		else {
			while(replaceFrom[i].test(str))
				str = str.replace(replaceFrom[i], replaceTo[i]);
		}
	}
	return str;
}

function checkBox(e,box) {
	if(window.event) e = window.event;
	var endBox = parseInt(box.id.substr(1));
	if(checkBox.startBox != undefined && e.shiftKey) {
		var checkBoxes = document.getElementsByName('quickdel');
		var step = (checkBox.startBox >= endBox ? -1 : 1);
		for(i=checkBox.startBox; i!=endBox; i+=step) {
			if(checkBoxes[i] && checkBoxes[i].checked != box.checked) checkBoxes[i].checked = box.checked;
		}
	}
	checkBox.startBox = parseInt(box.id.substr(1));
}

function quickDelete(news_id) {
	var checkBoxes = document.getElementsByName('quickdel');
	for(i=0; i<checkBoxes.length; i++) {
		if(checkBoxes[i].checked) {
			if(!url) var url = './fusion/?id=quickdelcomment&fn_id='+news_id+'&delpost='+checkBoxes[i].value;
			else url = url+','+checkBoxes[i].value;
		}
	}
	window.location=url;
}

function quickEdit(f_id) {
	var editForm, news_id = window.location.href.match(/[\?&]fn_id=(\d+)/i);
	var contDiv = news_id ?
		f_id === 0 ?
		_('div_news')
		: _('div_cmt'+f_id)
		: _('div_st'+f_id) ? 
		_('div_st'+f_id)
		: _('div_news'+f_id);
	if(!contDiv || (editForm = _('quickEditForm')) && (editForm.f_id.value == f_id || !quickEditCancel(false)))
		return;
	editForm = document.createElement('form');
	editForm.id = 'quickEditForm';
	editForm.method = 'post';
	editForm.action = 'status.php';
	var el = document.createElement('textarea');
	el.name = 'new_content';
	el.style.width = '100%';
	el.style.height = Math.min(600,contDiv.offsetHeight) + 'px';
	el.innerHTML = unformat(contDiv.innerHTML);
	if(_('div_st'+f_id)) {
		if(el.addEventListener) {
			el.addEventListener('paste', function() { parsePaste(this); }, true);
			el.addEventListener('keyup', function() { if(typeof parsePaste.selStart != 'undefined') parsePaste(); }, true);
			if(!parsePaste.obj)
				document.body.addEventListener('mousemove', function() { if(typeof parsePaste.selStart != 'undefined') parsePaste(); }, true);
		} else if(el.attachEvent) {
			el.attachEvent('onpaste', function() { parsePaste(f_id); });
			el.attachEvent('onkeyup', function() { if(typeof parsePaste.selStart != 'undefined') parsePaste(); });
			if(!parsePaste.obj)
				document.body.attachEvent('onmousemove', function() { if(typeof parsePaste.selStart != 'undefined') parsePaste(); }, true);
		}
	}
	editForm.appendChild(el);
	el = document.createElement('input');
	el.type = 'button';
	el.value = 'Apply';
	el.onclick = quickEditApply;
	editForm.appendChild(el);
	el = document.createElement('input');
	el.type = 'button';
	el.value = 'Preview';
	el.onclick = previewPost;
	editForm.appendChild(el);
	el = document.createElement('input');
	el.type = 'reset';
	el.value = 'Reset';
	editForm.appendChild(el);
	el = document.createElement('input');
	el.type = 'button';
	el.value = 'Cancel';
	el.onclick = quickEditCancel;
	editForm.appendChild(el);
	if(news_id) {
		el = document.createElement('input');
		el.type = 'hidden';
		el.name = 'news_id';
		el.value = news_id[1];
		editForm.appendChild(el);
	}
	el = document.createElement('input');
	el.type = 'hidden';
	el.name = 'f_id';
	el.value = f_id;
	editForm.appendChild(el);
	contDiv.className += ' hidden';
	contDiv.parentNode.insertBefore(editForm,contDiv);
}

function quickEditCancel(noprompt) {
	var editForm = _('quickEditForm'), orgDiv = editForm.nextSibling;
	if(noprompt !== true && editForm.new_content.innerHTML != editForm.new_content.value && !confirm('Discard edit?'))
		return;
	orgDiv.className = orgDiv.className.substr(0,orgDiv.className.length - 7);
	editForm.parentNode.removeChild(editForm);
	return true;
}

function quickEditApply() {
	var editForm = _('quickEditForm');
	if(editForm.new_content.innerHTML == editForm.new_content.value) {
		quickEditCancel(true);
		return;
	}
	var url = 'includes/ajax.php';
	var new_content = encodeURIComponent(editForm.new_content.value);
	var news_id = editForm.news_id ?
		editForm.news_id.value
		: editForm.f_id.value;
	if( isNaN(news_id) )
		return;
	var params = ( _('div_st'+editForm.f_id.value) && !isNaN(editForm.f_id.value)
		? 'action=quickedit&type=status&cat='+editForm.f_id.value+'&new_content='+new_content
		: ( editForm.news_id && !isNaN(editForm.news_id.value) && !isNaN(editForm.f_id.value) && editForm.f_id.value !== '0'
			? 'action=quickedit&type=comm&news_id='+news_id+'&comm_id='+editForm.f_id.value+'&new_content='+new_content
			: ( !isNaN(news_id)
				? 'action=quickedit&type=news&news_id='+news_id+'&new_content='+new_content
				: '' ) ) );
	xhr = GetXmlHttpObject();
	xhr.onreadystatechange = ajaxResponse;
	xhr.open("POST",url,true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.setRequestHeader("Content-Length", params.length);
	xhr.send(params);
}

function ajaxResponse() {
	if(xhr.readyState != 4) return;
	var result = xhr.responseText.split('\n');
	if(result.pop() !== "1") {
		alert(result.pop());
		return;
	}
	switch(result[0]) {
		case 'quickedit' :
			var editForm = _('quickEditForm');
			var oldDiv = editForm.nextSibling;
			editForm.parentNode.removeChild(editForm);
			var newDiv = oldDiv.cloneNode(false);
			newDiv.innerHTML = result.pop();
			newDiv.className = newDiv.className.substr(0,newDiv.className.length - 7);
			oldDiv.parentNode.replaceChild(newDiv,oldDiv);
			if(result.pop() == 'status') {
				var dateSpan = _('span_date'+result.pop());
				dateSpan.replaceChild(document.createTextNode(result.pop()),dateSpan.firstChild);
			}
			break;
		case 'preview' :
			var contentWrap, contentForm;
			if(!(contentForm = _('quickEditForm')))
				contentForm = _('comment_form');
			if((contentWrap = _('previewComment'))) {
				var newContentWrap = contentWrap.cloneNode(false);
				newContentWrap.innerHTML = result.pop();
				contentForm.replaceChild(newContentWrap,contentWrap);
			}
			else {
				contentWrap = document.createElement('div');
				contentWrap.className = contentForm.name ? 'commentWrap' : 'commentCont';
				contentWrap.id = 'previewComment';
				contentWrap.innerHTML = result.pop();
				contentForm.appendChild(contentWrap);
			}
			break;
		default :
			alert('Unknown response: '+result[0]);
	}
}

function quickQuote(comm_id) {
	var commDiv = _('div_cmt'+comm_id);
	var commInput = _('content');
	commInput.value += '[quote]'+unformat(commDiv.innerHTML)+'[/quote]';
	commInput.focus();
}

function previewPost() {
	var contentForm;
	if(!(contentForm = _('quickEditForm')))
		contentForm = _('comment_form');
	var url = 'includes/ajax.php';
	var params = ( contentForm.name
		? 'action=preview&type=comm&name='+encodeURIComponent(contentForm.name.value)+'&content='+encodeURIComponent(contentForm.content.value)
		: ( contentForm.news_id && !isNaN(contentForm.news_id.value)
			? 'action=preview&type=comm&content='+encodeURIComponent(contentForm.new_content.value)
			: ( !isNaN(contentForm.f_id.value)
				? 'action=preview&type=status&content='+encodeURIComponent(contentForm.new_content.value)
				: '' ) ) );
	xhr = GetXmlHttpObject();
	xhr.onreadystatechange = ajaxResponse;
	xhr.open("POST",url);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.setRequestHeader("Content-Length", params.length);
	xhr.setRequestHeader("Connection", "close");
	xhr.send(params);
}

function remchi() {
	document.body.removeChild(_('chi'));
}

function getKeyPress(e,cheat) {
	if(getKeyPress.ckey == undefined) getKeyPress.ckey = 0;
	keyPressed = (window.event ? e.keyCode : (e.keyCode ? e.keyCode : (e.which > 96 ? e.which : e.which - 32)));
	if(keyPressed && keys[getKeyPress.ckey] == keyPressed) getKeyPress.ckey++;
	else getKeyPress.ckey = 0;
	if(cheat || (getKeyPress.ckey == keys.length && !_('chi'))) {
		var chiPic = document.createElement('img');
		chiPic.setAttribute('id', 'chi');
		chiPic.style.position = 'absolute';
		chiPic.style.left = 0;
		chiPic.style.top = 0;
		chiPic.src = 'images/chimini.png';
		document.body.appendChild(chiPic);
		if (mposY > document.body.clientHeight - chiPic.height)
			chiPic.style.top = mposY - chiPic.height - 5 + 'px';
		else
			chiPic.style.top = mposY + 5 + 'px';
		if (mposX > document.body.clientWidth - chiPic.width - 5)
			chiPic.style.left = mposX - chiPic.width - 5 + 'px';
		else
			chiPic.style.left = mposX + 5 + 'px';
		getKeyPress.ckey = 0;
	}
	else if(getKeyPress.ckey == keys.length)
		remchi();
}

function getChi(e) {
	if (document.all) {
		mposX = event.clientX + document.documentElement.scrollLeft;
		mposY = event.clientY + document.documentElement.scrollTop;
	} else {
		mposX = e.pageX;
		mposY = e.pageY;
	}
	if (_('chi')) {
		var chiPic = _('chi');
		if (mposY > document.body.clientHeight - chiPic.height)
			chiPic.style.top = mposY - chiPic.height - 5 + 'px';
		else
			chiPic.style.top = mposY + 5 + 'px';
		if (mposX > document.body.clientWidth - chiPic.width - 5)
			chiPic.style.left = mposX - chiPic.width - 5 + 'px';
		else
			chiPic.style.left = mposX + 5 + 'px';
	}
}

function parsePaste(obj) {
	if(obj)
		parsePaste.obj = isNaN(obj) ? obj : document.getElementsByName('new_content')[0];
	if(!parsePaste.obj)
		return;
	if(document.selection) {
		var d = document.selection.createRange();
		var selection = d.duplicate();
		selection.moveToElementText(parsePaste.obj);
		selection.setEndPoint('EndToStart', d);
	}
	if(typeof parsePaste.selStart == 'undefined') {
		if(typeof parsePaste.obj.selectionStart != 'undefined')
			parsePaste.selStart = parsePaste.obj.selectionStart;
		else if(document.selection)
			parsePaste.selStart = selection.text.length;
	}
	else {
		selStart = parsePaste.selStart;
		delete parsePaste.selStart;
		if(typeof parsePaste.obj.selectionStart != 'undefined')
			selEnd = parsePaste.obj.selectionStart;
		else if(document.selection)
			selEnd = selection.text.length;
		var content = parsePaste.obj.value.substring(selStart,selEnd);
		var trim = content.match(/^[\r\n]/gm);
		if(trim) {
			selStart += trim.length;
			content = content.substring(trim.length);
		}
		if(content && !parsePaste.obj.value.substr(selStart-5,5).match(/\[url(\]|=)/) && content.match(/^http:\/\/\S+$/)) {
			var epNumber = content.match(/_(-_0*(\d+)_|0*(\d+)_%5B)/);
		 	epNumber = epNumber ? 'Episode '+(epNumber[2]?epNumber[2]:epNumber[3]) : prompt('Enter a name for the link','');
			content = content.replace(/\[/g,'%5B').replace(/\]/g,'%5D');
			if(epNumber) {
				var newContent = '[url='+content+']'+epNumber+'[/url]';
				parsePaste.obj.value = parsePaste.obj.value.substring(0,selStart) + newContent + parsePaste.obj.value.substring(selEnd);
				if(typeof parsePaste.obj.selectionStart != 'undefined') {
					parsePaste.obj.selectionStart = selStart + newContent.length;
					parsePaste.obj.selectionEnd = parsePaste.obj.selectionStart;
				}
				else if(document.selection) {
					var offset = parsePaste.obj.value.substring(0,selStart).match(/^\n/gm);
					offset = offset ? offset.length : 0;
					selection.collapse(true);
					selection.moveStart('character', selStart + newContent.length - offset);
					selection.moveEnd('character', 0);
					selection.select();
				}
			}
		}
	}
}

