function Delete(id)
{
	var message = document.getElementById('message_' + id);
	var lblSubject = document.getElementById('subject_' + id);
	if (message == null || lblSubject == null)
		return false;
	
	if (confirm('Continuing will delete your message:' + "\n" + lblSubject.childNodes[0].nodeValue))
	{
		lblSubject.childNodes[0].nodeValue += ' (Deleted)';
		hideMessageBody(message);
		return PerformRemoteAction(deleteMessage, base_url + 'discuss/delete_message.ajax.php', 'delete=' + id);
	}
	return true;
}
function deleteMessage(success, msg)
{
	if (!success)
		alert('There may have been an error deleting your message!\nPlease refresh the page and try again.');
}

function Edit(id)
{
	// Need fields
	if (txtRelation == null || txtAction == null)
		return false;
	var message = document.getElementById('message_' + id);
	if (message == null)
		return false;
	
	// Set action
	txtAction.value = 'edit';
	txtRelation.value = id;
	
	// Set subject
	if (txtSubject != null)
	{
		// Get current subject
		var lblSubject = document.getElementById('subject_' + id);
		var subject = (lblSubject != null ? lblSubject.childNodes[0].nodeValue : '');
		txtSubject.value = subject;
		txtSubject.disabled = true;
		txtSubject_OnChange();
	}
	
	// Get current body and select
	if (rtfBody != null)
	{
		var body = getMessageBody(message);
		rtfBody.setEditorHTML(body.innerHTML);
		window.scroll(document.body.scrollLeft, window.innerHeight);
		rtfBody.show();
	}
	
	if (lblFormAction != null)
		lblFormAction.childNodes[0].nodeValue = 'Edit message';
	
	return true;
}

function ReplyTo(id)
{
	// Need fields
	if (txtRelation == null || txtAction == null)
		return false;
	
	// Set action
	txtAction.value = 'reply';
	txtRelation.value = id;
	
	// Set subject
	if (txtSubject != null)
	{
		// Get current subject and modify
		var lblSubject = document.getElementById('subject_' + id);
		var subject = (lblSubject != null ? lblSubject.innerHTML : '');
		if (subject.toLowerCase().substring(0, 3) != 're:')
			subject = 'Re: ' + subject;
		if (subject.length > 50)
			subject = subject.substring(0, 47) + '...';
		
		txtSubject.value = subject;
		txtSubject.disabled = false;
		txtSubject_OnChange();
	}
	
	// Select body
	if (rtfBody != null)
	{
		rtfBody.setEditorHTML('');
		window.scroll(document.body.scrollLeft, window.innerHeight);
		rtfBody.show();
	}
	
	if (lblFormAction != null)
		lblFormAction.childNodes[0].nodeValue = 'Reply to message';
	
	return true;
}

function Like(id)
{
	var message = document.getElementById('message_' + id);
	if (message != null)
		hideMessageBody(message, true);
	
	var rating = document.getElementById('rating_' + id);
	if (rating == null)
		return false;
	rating.style.display = 'none';
	
	var offrating = document.getElementById('offrating_' + id);
	if (offrating != null)
		offrating.style.display = 'block';
	
	return PerformRemoteAction(rateMessage, base_url + 'discuss/rate_message.ajax.php', 'like=' + id, null, id);
}

function Dislike(id)
{
	var message = document.getElementById('message_' + id);
	var rating = document.getElementById('rating_' + id);
	if (message == null || rating == null)
		return false;
	
	hideMessageBody(message);	
	rating.style.display = 'none';
	
	var offrating = document.getElementById('offrating_' + id);
	if (offrating != null)
		offrating.style.display = 'block';
	
	return PerformRemoteAction(rateMessage, base_url + 'discuss/rate_message.ajax.php', 'dislike=' + id, null, id);
}

function loadMessage(success, msg, arg)
{
	if (!success)
	{
		alert('Failed to load message.\nRemote server problem.');
	}
	else
	{
		var message = document.getElementById('message_' + arg);
		if (message != null)
		{
			var content = getMessageContent(message);
			if (content == null)
			{
				content = document.createElement('div');
				content.className = 'message_content';
				message.appendChild(content);
			}
			content.innerHTML = msg;
			content.old_height = content.offsetHeight;
			content.style.height = '0px';
			content.style.display = 'none';
			hideMessageBody(message, true);
		}
	}
}

function rateMessage(success, msg, arg)
{
	var rating = document.getElementById('rating_' + arg);
	if (!success)
	{
		alert('Failed to rate message.\nRemote server problem.');
		var message = document.getElementById('message_' + arg);
		if (message != null)
			hideMessageBody(message, true);
	}
	else
	{
		if (rating != null)
			rating.innerHTML = msg;
	}
	
	if (rating != null)
		rating.style.display = 'block';

	var offrating = document.getElementById('offrating_' + arg);
	if (offrating != null)
		offrating.style.display = 'none';
}

function getMessageElement(message, className)
{
	var els = getElementsByClassName(className, message);
	if (els.length > 0)
		return els[0];
	return null;
}
function getMessageContent(message)
{
	var els = getElementsByClassName('message_content', message);
	if (els.length > 0)
		return els[0];
	return null;
}
function getMessageBody(message)
{
	var els = getElementsByClassName('message_body', message);
	if (els.length > 0)
		return els[0];
	return null;
}

function hideMessageBody(message, show)
{
	var el = getMessageContent(message);
	if (el != null)
	{
		if (message.className.substring(message.className.length - 6) == '_admin')
			message.className = (!show ? 'bad_message' : 'message') + '_admin';
		else
			message.className = (!show ? 'bad_message' : 'message');
		
		var show_el = getMessageElement(message, 'message_show');
		if (show_el != null)
			show_el.style.display = (!show ? 'block' : 'none');
		
		if (!show)
			hideElement(el, 500, 1);
		else
			showElement(el);
	}
	else if (show)
	{
		// Doesn't exist
		var id = message.id.substring(8);
		PerformRemoteAction(loadMessage, base_url + 'discuss/load_message.ajax.php', 'id=' + id, null, id);
	}
}

/** Takes numeric id of hidden message to show */
function ShowMessageBody(msgId)
{
	// Hide 'Show' link
	var show = document.getElementById('show_' + msgId);
	if (show != null)
		show.style.display = 'none';
	
	// Load/show body
	var message = document.getElementById('message_' + msgId);
	hideMessageBody(message, true);
	
	// Show rating buttons
	var rating = document.getElementById('rating_' + msgId);
	if (rating != null)
		rating.style.display = 'block';
}
