function initMessagingAdminBox(siteId, locale, pageId, numPerPage) {
	Event.observe(window, 'load', function() {
		window.currPage = 0; // paging for message thread list
		window.numPerPage = numPerPage; // paging for message thread list
		window.msgAdminSort = "lastMsgDate$$";
		getThreadList(siteId, locale, pageId, numPerPage, 0);
		addAdminActionEvents(siteId, locale, pageId);
		addThreadSelectorEvents();
		addAdminDropdownEvents(siteId, locale, pageId);
	});
}

function initMessageThread(siteId, locale, pageId) {
	Event.observe(window, 'load', function() {
		addThreadViewEvents(siteId, locale, pageId);
		scrollToLastMessage();
	});
}

function scrollToLastMessage() {
	//scroll to last message if order is bottom to top
	if (!orderTopBottom) {
		$$('.cmsg_message_last').each(function(e) {
			e.scrollTo();
		});
	}
}

/**
 * Attach events to the thread list in the admin box view 
 */
function addThreadListEvents(siteId, locale, pageId) {
	addThreadDeleteEvent(siteId, locale, pageId);
	addThreadListPagingEvents(siteId, locale, pageId);
	addMarkAsUnreadEvent(siteId, locale, pageId, 'adminbox');
	addMarkAsUnreadOrReadEvent(siteId, locale, pageId, true, 'adminbox');
}

/**
 * Attach all necessary events needed in the thread display view. 
 */
function addThreadViewEvents(siteId, locale, pageId) {
	addThreadPagingEvents(siteId, locale, pageId);
	addThreadDeleteEvents(siteId, locale, pageId, delMessagingThreadCallback, false);
	addMarkAsUnreadEvent(siteId, locale, pageId);
	addReportUserEvent(siteId, locale, pageId);
	
	Element.observe($('sendMessageForm_message'), 'keyup', toggleSubmitButton);
	Element.observe($('sendMessageForm_message'), 'paste', toggleSubmitButton);
	
	$('sendMessageForm_btnSubmit').observe('click', function(item) {
		if(!Form.Element.getValue($('sendMessageForm_message')).empty())
			sendAnswer(siteId, locale, pageId);
	});
	
}

function addReportUserEvent(siteId, locale, pageId) {
	$$('.cmsg_thread_reportUser a').each(function(item){
		item.observe('click', function(event){
			event.preventDefault();
			var tid = null;
			item.classNames().each(function(cn){
				if (cn.indexOf('cmsg_thread_id_')==0) {
					tid = cn.substring('cmsg_thread_id_'.length, cn.length);
				}
			});
			var htmlDialogElementId = 'reportMessagePartnerDialog';
			showSimpleModalDialog(htmlDialogElementId, function afterOkClickHandler() {
				// show confirm message
				var url = 'servlet/AjaxActionServlet?';
				var parameters = 'siteid=' + siteId
					+ '&thread=' + tid
					+ '&locale=' + locale
					+ '&action=commMsg'
					+ '&func=reportUser'
					+ '&pageId=' + pageId;
				new Ajax.Request(url, {
					method: 'post',
					parameters: parameters,
					onLoading: function() {
						showSimpleModalWaitingDialog(htmlDialogElementId);
					},
					onComplete: function() {
						hideSimpleModalWaitingDialog(htmlDialogElementId);
					},
					onSuccess: function(response) {
						var responseStatus = getAjaxResponseReturncode(response);
						if(responseStatus != 0 && responseStatus != -1) { // error occurred ?
							// show error message
							showSimpleModalErrorDialog(htmlDialogElementId, response);
							return;
						}
						else {
							// show success message
							showSimpleModalSuccessDialog(htmlDialogElementId, function() {
								showAjaxWaitingScreen('cmsg_admin_waiting', 'cmsg_threads');
								callback(response, siteId, locale, pageId);
							});
						}
					}
				});
			});
		});
	});	
}

function toggleSubmitButton() {
	var btn = $('sendMessageForm_btnSubmit');
	if(Form.Element.getValue($('sendMessageForm_message')).empty()) {
		btn.addClassName('disabled');
	} else {
		btn.removeClassName('disabled');
	}		
}

function addThreadListPagingEvents(siteId, locale, pageId) {
	// add onclick for paging links
	$$('a.cmsgPageLink').each(function(item){
		var pageNum = 0;
		Element.classNames(item).each(function(className) {
			if (className.indexOf('cmsgPageLinkNum_')==0) {
				pageNum = parseInt(className.substring('cmsgPageLinkNum_'.length, className.length));
			}
		});
		item.observe('click', function(event){
			event.preventDefault();
			if(!item.up('div').hasClassName('inactive')) {
				getThreadList(siteId, locale, pageId, window.numPerPage, pageNum);
			}
		});
	});
}

function addAdminDropdownEvents(siteId, locale, pageId) {
	// actions dropdown
	$$('.cmsg_threads_admin_actions_dropdown_container select').each(function(item) {
		$(item).observe('change', function(){
			var selectedOption = item.options[item.selectedIndex];
			var actionValue = selectedOption ? selectedOption.value : null;
			if(actionValue =='markRead') {
				updateSelectedThreads(siteId, locale, pageId, 'markAsRead');
			}
			else if(actionValue =='markUnread') {
				updateSelectedThreads(siteId, locale, pageId, 'markAsUnread');
			}
			else if(actionValue =='delete') {
				var htmlDialogElementId = 'deleteSelectedMessageThreadsDialog';
				showSimpleModalDialog(htmlDialogElementId, function handler() {
					updateSelectedThreads(siteId, locale, pageId, 'deleteSelectedThreads', htmlDialogElementId);
				});
			}
		});
	});
	// sort dropdown
	$$('.cmsg_threads_admin_sort_dropdown_container select').each(function(item) {
		$(item).observe('change', function(){
			var selectedOption = item.options[item.selectedIndex];
			var sortValue = selectedOption ? selectedOption.value : null;
			if (sortValue) {
				window.msgAdminSort = sortValue;
				getThreadList(siteId, locale, pageId, window.numPerPage, 0);
			}
		});
	});
}

/**
 * add click events for links like 'mark as read' (marks selected threads as read).
 */
function addAdminActionEvents(siteId, locale, pageId) {
	$$('a.cmsg_threads_admin_action').each(function(link) { // only one element should be exist. this div contain all action links.
		Event.observe(link, 'click', function(event) {
			event.stop(); // prevents default link behavior. like event.preventDefault() but is maybe saver, because preventDefault is not documented in prototype.
			if(this.hasClassName('cmsg_threads_admin_action_markAsRead')) {
				updateSelectedThreads(siteId, locale, pageId, 'markAsRead');
			}
			else if(this.hasClassName('cmsg_threads_admin_action_markAsUnread')) {
				updateSelectedThreads(siteId, locale, pageId, 'markAsUnread');
			}
			else if(this.hasClassName('cmsg_threads_admin_action_delete')) {
				var htmlDialogElementId = 'deleteSelectedMessageThreadsDialog';
				showSimpleModalDialog(htmlDialogElementId, function handler() {
					updateSelectedThreads(siteId, locale, pageId, 'deleteSelectedThreads', htmlDialogElementId);
				});
			}
		});
	});
}

/**
 * perform an action on selected message threads (e.g. set threads status to read).
 * @param funcName 'markAsRead' or 'markAsUnread'.
 * @param htmlDialogElementId optional (for showing waiting dialog).
 */
function updateSelectedThreads(siteId, locale, pageId, funcName, htmlDialogElementId) {
	if('markAsRead' == funcName) {
		// collect selected and unread thread DIVs
		divArr = $$('.cmsg_thread').findAll(function(threadElmt) {
			return Form.Element.getValue(threadElmt.down('.cmsg_thread_selector').down()) // checkbox value (true/false)
				&& threadElmt.hasClassName('cmsg_thread_unread');
		});
	}
	else if('markAsUnread' == funcName) {
		// collect selected and read thread DIVs
		divArr = $$('.cmsg_thread').findAll(function(threadElmt) {
			return Form.Element.getValue(threadElmt.down('.cmsg_thread_selector').down()) // checkbox value (true/false)
				&& !threadElmt.hasClassName('cmsg_thread_unread');
		});
	}
	else if('deleteSelectedThreads' == funcName) {
		// collect selected thread DIVs
		divArr = $$('.cmsg_thread').findAll(function(threadElmt) {
			return Form.Element.getValue(threadElmt.down('.cmsg_thread_selector').down()); // checkbox value (true/false)
		});
	}
	else {
		return;
	}

	if(divArr.size() > 0) { // are threads selected ?
		// extract threads IDs from threads DIVs
		var idListStr = ''; // id list as string for AJAX parameter
		divArr.each(function(threadElmt) { // build id list as string
			idListStr += threadElmt.readAttribute('database_id') + ',';
		});

		// set (per AJAX) status of extracted threads (IDs) to read/unread.
		var url = 'servlet/AjaxActionServlet?';
		var parameters = 'siteid=' + siteId
			+ '&locale=' + locale
			+ '&action=commMsg'
			+ '&func=' + funcName
			+ '&threadIds=' + idListStr
			+ '&pageId=' + pageId
			+ '&pageId='+pageId
			+ '&numPerPage='+window.numPerPage
			+ '&currPage='+window.currPage;
		if (window.msgAdminSort != '') {
			parameters += '&sort='+window.msgAdminSort;
		}
		if('markAsUnread' == funcName || 'markAsRead' == funcName) {
			parameters += '&ret=list';
		}
		new Ajax.Request(url, {
			method: 'post',
			parameters: parameters,
			onLoading: function() {
				if('deleteSelectedThreads' == funcName) {
					showSimpleModalWaitingDialog(htmlDialogElementId);
				}
				else {
					showAjaxWaitingScreen('cmsg_admin_waiting', 'cmsg_threads');
				}
			},
			onComplete: function() {
				hideSimpleModalWaitingDialog(htmlDialogElementId);
			},
			onSuccess: function(response) {
				// check if status of AJAX response is OK
				if(getAjaxResponseReturncode(response) != 0) { // error occurred ?
					if('deleteSelectedThreads' == funcName) {
						showSimpleModalErrorDialog(htmlDialogElementId, response);
					}
					return;
				}
				else {
					if('deleteSelectedThreads' == funcName) {
						showSimpleModalSuccessDialog(htmlDialogElementId, function() {
							// update thread list with return content
							showThreadList(response, siteId, locale, pageId);
							// update message that show number unread threads in header DIV
							updateUnreadThreadsNotification(siteId, locale);
						});
					}
					else {
						hideAjaxWaitingScreen('cmsg_admin_waiting');
						// update thread list with return content
						showThreadList(response, siteId, locale, pageId);
						// update message that show number unread threads in header DIV
						updateUnreadThreadsNotification(siteId, locale);
					}
				}
			}
		});
	}	
}

function updateUnreadThreadsNotification(siteId, locale) {
	if($('usersUnreadThreadsNotification')) {
		var url = 'servlet/AjaxActionServlet?';
		url += 'siteid=' + siteId + '&locale=' + locale;
		renderUsersUnreadThreadsNotification(url, "usersUnreadThreadsNotification");
	}	
}

/**
 * add click events for links for selection of threads (no, all, unread, read).
 */
function addThreadSelectorEvents() {
	$$('a.cmsg_threads_admin_selector_link').each(function(link) { 
		Event.observe(link, 'click', function(event) {
			event.stop(); // prevents default link behavior. like event.preventDefault() but is maybe saver, because preventDefault is not documented in prototype.
			divArr = $$('.cmsg_thread_selector'); // div array. each div contain checkbox.
			if(this.hasClassName('cmsg_threads_admin_selector_link_selectNo')) {
				divArr.each(function(divEl) {
					Form.Element.setValue(divEl.down(), false); // set checkbox to false/unchecked;
				});
			}
			else if(this.hasClassName('cmsg_threads_admin_selector_link_selectAll')) {
				divArr.each(function(divEl) {
					Form.Element.setValue(divEl.down(), true);
				});
			}
			else if(this.hasClassName('cmsg_threads_admin_selector_link_selectUnread')) {
				divArr.each(function(divEl) {
					if(divEl.siblings().any(function (sibling) {
							return sibling.hasClassName('cmsg_thread_unreadmarker');
						})
					) Form.Element.setValue(divEl.down(), true);
					else Form.Element.setValue(divEl.down(), false);
				});
			}
			else if(this.hasClassName('cmsg_threads_admin_selector_link_selectRead')) {
				divArr.each(function(divEl) {
					if(!divEl.siblings().any(function (sibling) {
							return sibling.hasClassName('cmsg_thread_unreadmarker');
						})
					) Form.Element.setValue(divEl.down(), true);
					else Form.Element.setValue(divEl.down(), false);
				});
			}
		});
	});
	
}

function addThreadDeleteEvents(siteId, locale, pageId, callback, fromList) {
	$$('a.cmsg_thread_delete_link').each(function(link) {
		Event.observe(link, 'click', function(event) {
			event.preventDefault();
			var htmlDialogElementId = 'deleteMessageThreadDialog';
			showSimpleModalDialog(htmlDialogElementId, function afterOkClickHandler() {
				var tid = null;
				link.classNames().each(function(cn){
					if (cn.indexOf('cmsg_thread_id_')==0) {
						tid = cn.substring('cmsg_thread_id_'.length, cn.length);
					}
				});
				if (tid!=null) {
					var url = 'servlet/AjaxActionServlet?';
					var parameters = 'siteid=' + siteId
						+ '&thread=' + tid
						+ '&locale=' + locale
						+ '&action=commMsg'
						+ '&func=del'
						+ '&pageId=' + pageId;
//					if(fromList) {
//						parameters += '&func=delThread';
//					} else {
//						parameters += '&func=del';					
//					}
					new Ajax.Request(url, {
						method: 'post',
						parameters: parameters,
						onLoading: function() {
							showSimpleModalWaitingDialog(htmlDialogElementId);
						},
						onComplete: function() {
							hideSimpleModalWaitingDialog(htmlDialogElementId);
						},
						onSuccess: function(response) {
							var responseStatus = getAjaxResponseReturncode(response);
							if(responseStatus != 0 && responseStatus != -1) { // error occurred ?
								showSimpleModalErrorDialog(htmlDialogElementId, response);
								return;
							}
							else {
								showSimpleModalSuccessDialog(htmlDialogElementId, function() {
									showAjaxWaitingScreen('cmsg_admin_waiting', 'cmsg_threads');
									callback(response, siteId, locale, pageId);
								});
							}
						}
					});
				}
			});
		});
	});
}

function addThreadDeleteEvent(siteId, locale, pageId) {
	// events for deleteThread-image-link
	$$('a.cmsg_thread_delete_link').each(function(link) { // only one element should be exist. this div contain all action links.
		Event.observe(link, 'click', function(event) {
			event.stop(); // prevents default link behavior. like event.preventDefault() but is maybe saver, because preventDefault is not documented in prototype.
			if(this.hasClassName('cmsg_thread_delete_link')) {
				var htmlDialogElementId = 'deleteSelectedMessageThreadsDialog';
				var threadId = this.up().up().readAttribute('database_id');
				showSimpleModalDialog(htmlDialogElementId, function handler() {
					// set checkbox to true because updateSelectedThreads need it
					var checkbox = $('cmsg_thread_sel_' + threadId);
					if(checkbox) {
						Form.Element.setValue(checkbox, true);
					}
					updateSelectedThreads(siteId, locale, pageId, 'deleteSelectedThreads', htmlDialogElementId);
				});
			}
		});
	});	
}

function getThreadList(siteId, locale, pageId, numPerPage, currPage) {
	showAjaxWaitingScreen('cmsg_admin_waiting', 'cmsg_threads');
	var url = 'servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&action=commMsg';
	url += '&func=list';
	url += '&pageId='+pageId;
	url += '&numPerPage='+window.numPerPage;
	url += '&currPage='+currPage;
	if (window.msgAdminSort != '') {
		url += '&sort='+window.msgAdminSort;
	}
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			hideAjaxWaitingScreen('cmsg_admin_waiting');
		},
		onSuccess: function(r) {
			showThreadList(r, siteId, locale, pageId);
		}
	});	
}

/**
 * callback for delete action in admin box view
 */
function showThreadList(response, siteId, locale, pageId) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				alert('Error [' + code + ']');
			} else {
				// paging
				if(elem.getElementsByTagName('paging')) {
					var pagingContent = elem.getElementsByTagName('paging')[0].firstChild.nodeValue;					
					$$('div.cmsg_admin_paging').each(function(item){
						item.update(pagingContent);
					});
				}
				// thread list
				if(elem.getElementsByTagName('threadlist')) {
					var div = $('cmsg_threadslist').down('div.cmsg_threads');
					var list = elem.getElementsByTagName('threadlist')[0].firstChild.nodeValue;
					Element.update(div, list);
					addThreadListEvents(siteId, locale, pageId);
				}
				// current page
				if(elem.getElementsByTagName('currPage')) {
					var currPage = elem.getElementsByTagName('currPage')[0].firstChild.nodeValue;
					if(currPage) {
						window.currPage = currPage;
					}
				}
			}
		}
	}	
}

/**
 * callback for delete action in thread view
 */
function delMessagingThreadCallback(response, siteId, locale, pageId) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code > '0') {
				alert('Error [' + code + ']');
			} else {
				if(code == '-1') {
					if(elem.firstChild) {
						var uri = elem.firstChild.data;
						if(uri) {
							window.location.href = uri;
						}						
					}
				} else {					
					Element.update($('cmsg_threadview'), elem.firstChild.data);
					addThreadViewEvents(siteId, locale, pageId);
				}
			}
		}
	}	
}

function showSendMessageBox(siteId, loc, uid, waitingGif, reloadParent) {
	if (!$('lyr_sendMessage')) {
	
		// div#layer
		if (!$('layer'))
			$$('div.container')[0].insert({before: new Element('div', { 'id': 'layer'})});
		var lyrDiv = $('layer');
		
		// div#lyr_sendMessage_lightbox
		var lyrDivBG = createElement('div', 'lyr_sendMessage_lightbox', 'lightbox_class');
		// div#lyr_sendMessage
		var lyrDivBox = createElement('div', 'lyr_sendMessage', 'layer_instance');
		lyrDivBox.setStyle({
			position: 'absolute',
			display: 'none',
			width: '400px',
			height: '250px',
			zIndex: '10000'
			});
	
		if(!$('sendMessageWait')) {
			// div#sendMessageWait
			var waitingDiv = createElement('div', 'sendMessageWait', 'ajax_box_waiting');
			waitingDiv.setStyle({
				height: '100%'
			});
			var waitingDivInner = createElement('div', null, null);
			waitingDivInner.setStyle({
				backgroundImage: 'url('+waitingGif+')'
			});
			Element.insert(waitingDiv, waitingDivInner);
			Element.insert(lyrDivBox, waitingDiv);
		}
	
		// div#sendMessageWrapper
		var wrapper = createElement('div', 'sendMessageWrapper', null);
		
		Element.insert(lyrDivBox, wrapper);
		Element.insert(lyrDiv, lyrDivBG);
		Element.insert(lyrDiv, lyrDivBox);
	
		var layerId = 'lyr_sendMessage';
		var lyrWidth = '400';
		var lyrHeight= '250';
		var startX = 1;
		var startY = 1;
		var endX = 1;
		var endY = 1;
		var lyrSpeed = '';
		var easeFactor = ''; 
		var lyrDelay = '';
		var lyrDisplay = 'false';
		var foTime = '';
		var foPath = '';
	
		layer_sendMessageLayer = new Layer(layerId, lyrWidth, lyrHeight, startX, startY, endX, endY, lyrSpeed, easeFactor, lyrDelay, lyrDisplay, foTime, foPath);
	}
	
	layer_sendMessageLayer.ShowLayer();

	$('lyr_sendMessage_lightbox').setStyle({
		height: document.compatMode=="CSS1Compat" ? Math.max(document.documentElement.clientHeight, document.body.offsetHeight)+"px" : body.clientHeight+"px"
	});
	
	var url = 'servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&action=commMsg';
	url += '&func=write';
	url += '&to='+uid;
	
	Element.hide($('sendMessageWrapper'));
	Element.show($('sendMessageWait'));
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			Element.hide($('sendMessageWait'));
		},
		onSuccess: function(r) {
			showSendMessageBoxComplete(siteId, loc, uid, r, reloadParent);
		}
	});
}

function showSendMessageBoxComplete(siteId, loc, uid, response, reloadParent) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				alert('Error [' + code + ']');
			} else {
				var layer_content = elem.firstChild.data;
				if(layer_content) {
					Element.update($('sendMessageWrapper'), elem.firstChild.data);
					Element.show($('sendMessageWrapper'));
					if($('sendMessageForm_btnSubmit')) {
						Event.observe('sendMessageForm_btnSubmit', 'click', function(event) {
							event.preventDefault();							
							var subject = Form.Element.getValue($('sendMessageForm_subject'));
							var msg = Form.Element.getValue($('sendMessageForm_message'));
							if(!subject.empty() && !msg.empty())
								sendMessage(siteId, loc, uid, subject, msg, null, -1, function(){sendMessageFromLayerComplete(response);});
						});						
					}
						
					if($('sendMessageForm_btnCancel')) {
						Event.observe('sendMessageForm_btnCancel', 'click', function(event) {
							event.preventDefault();
							$('sendMessageWrapper').update('');
							layer_sendMessageLayer.HideLayer();
							if (reloadParent) {location.reload();}
						});
					}
					if($('sendMessageForm_btnOk')) {
						Event.observe('sendMessageForm_btnOk', 'click', function(event) {
							event.preventDefault();
							$('sendMessageWrapper').update('');
							layer_sendMessageLayer.HideLayer();
							if (reloadParent) {location.reload();}
						});
					}
				
				}
			}
		}
	}
}

function sendMessage(siteId, locale, uid, subject, message, threadId, pageId, callback) {
	var url = 'servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&pageId='+pageId;
	url += '&action=commMsg';
	url += '&func=send';
	url += '&to='+uid;
	if(typeof orderTopBottom != "undefined") {
		url += '&orderTB='+orderTopBottom;
	}
	if(subject) {
		url += '&subject='+encodeURIComponent(subject);
	}
	url += '&msg='+encodeURIComponent(message);
	if(threadId) {
		url += '&thread='+threadId;		
	}
	if(subject) { // are we called from profile page ?
		showAjaxWaitingScreen('sendMessageWait');
		$('sendMessageForm').hide();
	}
	else { // we are called from thread view page
		showAjaxWaitingScreen('cmsg_threadview_waiting');
	}
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			hideAjaxWaitingScreen('cmsg_threadview_waiting');
			Element.hide($('sendMessageWait'));
		},
		onSuccess: function(response) {
			callback(response);
		}
	});
}

function sendMessageFromLayerComplete(response) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				alert('Error [' + code + ']');
			} else {
				$('sendMessageForm').hide();
				$('sendMessage_success').show();
			}
		}
	}
}

function sendAnswer(siteId, locale, pageId) {
	var msg = Form.Element.getValue($('sendMessageForm_message'));
	var to = Form.Element.getValue($('to'));
	var threadId = Form.Element.getValue($('threadId'));
	sendMessage(siteId, locale, to, null, msg, threadId, pageId, function(response){sendAnswerComplete(response, siteId, locale, pageId);});
}

function sendAnswerComplete(response, siteId, locale, pageId) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				alert('Error [' + code + ']');
			} else {
				getThreadComplete(response, siteId, locale, pageId);
			}
		}
	}
}

function getNodeText(requestParams, tagName) {
	var stNodes = requestParams[0].getElementsByTagName(tagName);
	if (stNodes && stNodes.length > 0 && stNodes[0].firstChild) {
		return stNodes[0].firstChild.data;
	}
	return null;
}

function addThreadPagingEvents(siteId, locale, pageId) {
	$$(".cmsg_thread_prev_link").each(function(link) {
		Event.observe(link, 'click', function(event) {
			event.preventDefault();
			var tid = null;
			link.classNames().each(function(cn){
				if (cn.indexOf('cmsg_prev_thread_id_')==0) {
					tid = cn.substring('cmsg_prev_thread_id_'.length, cn.length);
				}
			});
			getThread(siteId, locale, pageId, tid);
		});
	});
	$$(".cmsg_thread_next_link").each(function(link) {
		Event.observe(link, 'click', function(event) {
			event.preventDefault();
			var tid = null;
			link.classNames().each(function(cn){
				if (cn.indexOf('cmsg_next_thread_id_')==0) {
					tid = cn.substring('cmsg_next_thread_id_'.length, cn.length);
				}
			});
			getThread(siteId, locale, pageId, tid);
		});
	});
}

function getThread(siteId, locale, pageId, threadId) {
	var url = 'servlet/AjaxActionServlet?';
	url += 'siteid='+siteId;
	url += '&locale='+locale;
	url += '&pageId='+pageId;
	url += '&action=commMsg';
	url += '&func=show';
	url += '&thread='+threadId;
	url += '&orderTB='+orderTopBottom;

	showAjaxWaitingScreen('cmsg_threadview_waiting');
	
	new Ajax.Request(url, {
		method: 'post',
		onComplete: function() {
			hideAjaxWaitingScreen('cmsg_threadview_waiting');
		},
		onSuccess: function(response) {
			getThreadComplete(response, siteId, locale, pageId);
		}
	});	
}

function getThreadComplete(response, siteId, locale, pageId) {
	var xmlDoc = response.responseXML;
	if(xmlDoc) {
		var elem = xmlDoc.firstChild;
		if(elem) {
			var code = elem.getAttribute("code");
			if (code != '0') {
				alert('Error [' + code + ']');
			} else {
				Element.update($('cmsg_threadview'), elem.firstChild.data);
				scrollToLastMessage();
				addThreadViewEvents(siteId, locale, pageId);
			}
		}
	}	
}

// You can use this from the CG CommunityMessageAdminBox (mode='adminbox') or CommunityMessageAdminThread (all other modes)
function addMarkAsUnreadEvent(siteId, locale, pageId, mode) {
	addMarkAsUnreadOrReadEvent(siteId, locale, pageId, false, mode);
}

function addMarkAsUnreadOrReadEvent(siteId, locale, pageId, markAsRead, mode) {
	var className = markAsRead ? 'cmsg_thread_markAsRead_link' : 'cmsg_thread_markAsUnread_link';
	$$('a.'+className).each(function(link) {
		Event.observe(link, 'click', function(event) {
			event.preventDefault();
			var tid = null;
			link.classNames().each(function(cn){
				if (cn.indexOf('cmsg_thread_id_')==0) {
					tid = cn.substring('cmsg_thread_id_'.length, cn.length);
				}
			});
			if (tid!=null) {
				var url = 'servlet/AjaxActionServlet?';
				url += 'siteid='+siteId;
				url += '&locale='+locale;
				url += '&action=commMsg';
				if (markAsRead)
					url += '&func=markAsRead';
				else 
					url += '&func=markAsUnread';
				url += '&threadIds='+tid;
				url += '&pageId='+pageId;
				new Ajax.Request(url, {
					method: 'post',
					onLoading: function() {
						if (mode=='adminbox') {
							showAjaxWaitingScreen('cmsg_admin_waiting', 'cmsg_threads');
						} else {
							showAjaxWaitingScreen('cmsg_threadview_waiting');
						}
					},
					onComplete: function() {
						if (mode=='adminbox') {
							hideAjaxWaitingScreen('cmsg_admin_waiting');
						}
					},
					onSuccess: function(r) {
						var xmlDoc = r.responseXML;
						if(xmlDoc) {
							var elem = xmlDoc.firstChild;
							if(elem) {
								var code = elem.getAttribute("code");
								if (code > '0') {
									alert('Error [' + code + ']');
								} else {
									if (mode=='adminbox') {
										getThreadList(siteId, locale, pageId, window.numPerPage, window.currPage);										
										updateUnreadThreadsNotification(siteId, locale);
									} else {
										if(elem.firstChild) {
											var uri = elem.firstChild.data;
											if(uri) {
												window.location.href = uri;
											}						
										}
									}
								}
							}
						}
					}
				});
			}
		});
	});
}
