// Written by Ian Henderson in 2005.  Copy and modify freely, as long as this line is present and unmodified.

var editing = null;
var editingId = '';
var editingButton = null;

function hilite(hiliting, event)
{
	if (!_canUseXMLHttp) {
		return;
	}
	var object = objectOfEvent(event);
	if (object == editing) {
		hiliting = false;
	}
	var bg = hiliting ? "#FFC" : "#FFF";
	object.style.backgroundColor=bg;
}

function replaceInPlaceEditing(text)
{
	editing.innerHTML=text;
	editing = null;
	scaleImages();
}

function cancelInPlaceEditing()
{
	loadPage({what:'Post', which:editingId, how:'htmlContent'}, 'replaceInPlaceEditing');
}

function finishInPlaceEditing(event)
{
	var inPlaceView = document.getElementById('_editInPlace');
	if (!inPlaceView) {
		alert('in-place editing failed');
	}
	editingButton = objectOfEvent(event);
	editingButton.disabled = true;
	var rid = editObject('Post', editingId, {content:inPlaceView.value});
	runWhenReady(rid, 'blargy', 'cancelInPlaceEditing()', 'editingButton.disabled=false');
}

function startInPlaceEditing(text)
{
	if (!editing) {
		return;
	}
	var height = editing.offsetHeight;
	if (height < 200) {
		height = 200;
	}
	editing.innerHTML = text;
}

function editInPlace(id)
{
	if (!_canUseXMLHttp || editing) {
		return;
	}
	editing = document.getElementById("_post" + id);
	editingId = id;
	editing.style.backgroundColor="#FFF";
	loadPage({what:'Post', which:id, how:'editInPlace'}, 'startInPlaceEditing');
}

function quote(id)
{
	if (!_canUseXMLHttp) {
		return;
	}
	loadPage({what:'Post', which:id, how:'quoteInPlace'}, 'startReply');
}

function reply()
{
	if (!_canUseXMLHttp) {
		return;
	}
	loadPage({what:'Post', how:'createInPlace'}, 'startReply');
}

// From QuirksMode.com
function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function findWindowHeight()
{
	return(window.innerHeight ? window.innerHeight : document.body.clientHeight);
}

function findScrollY()
{
	return(window.scrollY ? window.scrollY : document.body.scrollTop);
}

// ensureVisible function stolen from tiddlywiki (http://www.tiddlywiki.com)
// Copyright (c) Osmosoft Limited, 14 April 2005
// BSD license goes here
function ensureVisible(e)
{
	var posTop = findPosY(e);
	var posBot = posTop + e.offsetHeight;
	var winTop = findScrollY();
	var winHeight = findWindowHeight();
	var winBot = winTop + winHeight;
	if(posTop < winTop)
		return(posTop);
	else if(posBot > winBot)
	{
		if(e.offsetHeight < winHeight)
			return(posTop - (winHeight - e.offsetHeight));
		else
		return(posTop);
	}
	else
		return(winTop);
}

function startReply(text)
{
	if (document.getElementById("_reply")) {
		return;
	}
	var content = document.getElementById("content");
	var reply = document.createElement("div");
	var threadControls = document.getElementById("threadControls");
	reply.id = "_reply";
	reply.className = "item";
	reply.innerHTML = text;
	reply.style.zIndex = 0;
	fadeIn(reply, 0);
	content.insertBefore(reply, threadControls);
	var scrollstart = findScrollY();
	var scrollend = ensureVisible(reply);
	animate(reply, function (obj, p) {fadeIn(obj,p); window.scrollTo(0, scrollstart + (scrollend - scrollstart)*smoothInterpolate(p))}, 500, false);
}

function finishReply(event)
{
	var inPlaceView = document.getElementById('_replyText');
	if (!inPlaceView) {
		alert('reply failed!');
	}
	editingButton = objectOfEvent(event);
	if (editingButton) {
		editingButton.disabled = true;
	}
	var rid = createObject('Post', {content:inPlaceView.value, threadId:currentThread()});
	runWhenReady(rid, 'blargy', 'refreshPage();', 'editingButton.disabled=false');
}

function cancelReply()
{
	var reply = document.getElementById("_reply");
	animate(reply, fadeOut, 500, 'removeNode(document.getElementById("_reply"))');
}
