
/* Daniela */
function highlight(obj) {
	if ('pitem hovered' != obj.className) {
		obj.oldClass = obj.className;
	}
	obj.className = 'pitem hovered';
}
function unhighlight(obj) {
	obj.className = obj.oldClass;
}
function gotopost(url) {
	this.location = url;
}


forum = {
	ajaxURL: null,
	checkboxes: null,
	checkall: null,
	counter: 0,
	busy: true,
	confirmMsg: null,

	init: function(ajaxURL, confirmMessages) {
		if (!ajaxURL) return;
		if (confirmMessages) this.confirmMsg = confirmMessages;

		forum.ajaxURL = ajaxURL;
		forum.checkboxes = $('.msgsel');

		forum.checkall = document.getElementById('msgselall');

		forum.checkboxes.click(forum.selectOne);
		$('span.msgactions').click(forum.runAction);
		$('#msgselall').click(forum.selectAll);
		forum.busy = false;
	},

	selectAll: function() {
		var checked = this.checked;
		forum.checkboxes.each(function() { this.checked = checked });
	},

	selectOne: function(evt) {
		if (evt.stopPropagation) {
			evt.stopPropagation();
		}
		evt.cancelBubble = true;
		var oneChecked = false;
		var oneUnchecked = false;
		forum.checkboxes.each(function() { if (this.checked) oneChecked = true; else oneUnchecked = true; });
		if (!oneChecked) {
			forum.checkall.checked = false;
		} else if (!oneUnchecked) {
			forum.checkall.checked = true;
		} else {
			forum.checkall.checked = true;
		}
	},

	runAction: function() {
		if (forum.busy) return;


		var action = $(this).attr('action');

		if (this.confirmMsg && this.confirmMsg[action] && !confirm(this.confirmMsg[action])) return;

		ajaxURL = forum.ajaxURL;

		ajaxURL += '/action/' + action;

		var msg = '';
		forum.checkboxes.each(
			function() {
				if (this.checked) {
					msg += $(this).attr('messageId') + ',';
				}
			}
		);
		if (msg.length == 0) return;

		forum.checkall.disabled = true;
		forum.checkboxes.attr('disabled', true);
		forum.busy = true;

		ajaxURL += '/msg/' + msg;

		document.body.style.cursor = 'wait';

		ajaxURL += '/' + forum.counter;
		++forum.counter;

		$.get(ajaxURL, null, forum.completeAction, 'json');
	},

	completeAction: function(data) {
		document.body.style.cursor = 'default';
		forum.checkall.disabled = false;
		forum.checkall.checked = false;
		forum.checkboxes.attr('disabled', false);
		forum.checkboxes.val([]);
		forum.busy = false;

		if (!data) alert('Bad response...');

		if (data && data.error) return alert(data.error);

		for (i in data) {
			var exec = 'if (typeof forum.' + i + ' == \'function\') { forum.' + i + '(data[\''+i+'\']); } else { forum.defaultAction(\'' + i + '\', data[\''+i+'\']);}';
			eval(exec);
		}
	},

	defaultAction: function(action, data) {
		var enable = true;
		if (action.substr(0, 2) == 'un') {
			enable = false;
			action = action.substring(2);
		}


		var c = data.length;
		for (var i = 0; i < c; ++i) {
			var msgId = data[i];
			var item = document.getElementById('msg_' + msgId + '_' + action);
			if (!item) continue;
			if (enable) {
				item.style.visibility = 'visible';
			} else {
				item.style.visibility = 'hidden';
			}
		}
	},

	sticky: function(data) {
		forum.defaultAction('sticky', data);
		forum.moveTopic(true, data);
	},

	unsticky: function(data) {
		forum.defaultAction('unsticky', data);
		forum.moveTopic(false, data);
	},
	
	moveTopic: function(sticky, data) {
		var c = data.length;
		var stickyString = (sticky?'1':'0');

		for (var i = 0; i < c; ++i) {
			var msgId = data[i];
			var msgItem = $('#msg_' + msgId);

			if (msgItem.attr('sticky') == stickyString) continue;

			msgItem.attr('sticky', stickyString);

			jQuery('body',document).append(msgItem);

			var msgDate = msgItem.attr('date');

			var placed = false;

			var rows = document.getElementById('msg_table').rows;
			var rc = rows.length;

			for (var j = 0; j < rc; ++j) {
				var item = $(rows[j]);

				if (item.attr('sticky') == undefined || item.attr('date') == undefined) continue;
				
				if (sticky) {
					if ((item.attr('sticky') == '1') && (item.attr('date') >= msgDate)) continue;
				} else {
					if ((item.attr('sticky') == '1') || (item.attr('date') >= msgDate)) continue;
				}

				placed = true;
				item.before(msgItem);
				break;
			}
			if (!placed) {
				$('#msg_table').append(msgItem);
			}

		}
	}

};
