function deletePost( id, confirmText, type, baseUrl )
{
	if( confirm( confirmText ) )
	{
		jQuery.ajax({
			'type' : 'POST',
			'url' : baseUrl + '/' + type + '/delete',
			'data' : {'id' : id},
			'success':function( data, textStatus )
			{
				switch( $('status', data).text() )
				{
					case 'error':
					var msg = $('message', data).text();
					addPostMessage( msg, 'failure', id );
						break;
					case 'ok':
					var msg = $('message', data).text();
					addPostMessage( msg, 'success', id );
					$('#'+ type + '_' + id).addClass('deleted');
						break;
				}
			},
			'error':function( XMLHttpRequest, textStatus, errorThrown )
			{
				var msg = 'There was an error: ' + textStatus + errorThrown;
				addPostMessage( msg, 'error', id );
			},
			'cache':false
		});
	}
	else return false;
}

function toggleSidebarCategories()
{
	if( $('#sidebar .categories').css('display') == 'block' )
		$('#sidebar .top a').removeClass( 'open' );
	else
		$('#sidebar .top a').addClass( 'open' );

	$('#sidebar .categories').slideToggle('fast');
}

function favorite( id, baseUrl )
{
	jQuery.ajax({
		'type' : 'POST',
		'data': {'id' : id},
		'url' : baseUrl + '/post/favorite',
		'success':function( data, textStatus )
		{
			switch( $('status', data).text() )
			{
				case 'error':
					var msg = $('message', data).text();
					addPostMessage( msg, 'failure', id );
					break;
				case 'ok':
					var msg = $('message', data).text();
					addPostMessage( msg, 'success', id );

					var favorites = $('currentFavorites', data).text();
					$('#numFavorites_' + id).text( favorites );
					var action = $('action', data).text();

					if( action == 'favoriteCancelled' )
						$('#favorite_' + id).attr('src', baseUrl + '/images/star_empty.png');
					else
						$('#favorite_' + id).attr('src', baseUrl + '/images/star_filled.png');
					break;
			}
		},
		'error':function( XMLHttpRequest, textStatus, errorThrown )
		{
			addPostMessage( 'There was an error: ' + textStatus + errorThrown, 'failure', id );
		},
		'cache':false
	});
}

function addUserMessage( message, messageType, selector )
{
	var aMessageTypes = new Array( 'success', 'failure', 'info' );

	for( x in aMessageTypes )
	{
		if( aMessageTypes[x] != messageType )
			$(selector).removeClass(aMessageTypes[x]+'Message');
	}

	$(selector).addClass(messageType+'Message').html(message);
	if( $(selector).css('display') != 'block' )
	{
		$(selector).slideDown('fast');
	}
	else
	{
		$(selector).animate({'opacity': '0.2'}, 400).animate({'opacity': '1'}, 400);
	}
}

function addPostMessage( message, messageType, postID )
{
	addUserMessage(message, messageType, '#postMessage_' + postID);
}

function ratePost( id, rating, baseUrl )
{
	jQuery.ajax({
		'type' : 'post',
		'data' : {'id' : id, 'rating' : rating},
		'success' : function( data, textStatus )
		{
			switch( $('status', data).text() )
			{
				case 'error':
					var msg = $('message', data).text();

					addPostMessage( msg, 'failure', id );
					break;
				case 'ok':
					var msg = $('message', data).text();
					addPostMessage( msg, 'success', id );

					var currentRating = $('currentRating', data).text();
					$('#rating_' + id).text( currentRating );

					var action = $('action', data).text();
					if( action == 'ratingCancelled' )
					{
						var filename = '';
						if( rating > 0 )
							filename = 'rate_up.gif';
						else
							filename = 'rate_down.gif';
							
						$('#rater_' + id + '_' + rating).attr('src', baseUrl + '/images/icons/' + filename);
						$('#rater_' + id + '_' + rating).removeClass('active')
					}
					else
					{
						var filename = '';
						if( rating > 0 )
							filename = 'rate_up_accepted.gif';
						else
							filename = 'rate_down_accepted.gif';

						$('#rater_' + id + '_' + rating).attr('src', baseUrl + '/images/icons/' + filename);
						$('#rater_' + id + '_' + rating).addClass('active');
					}

					break;
			}
		},
		'error' : function( XMLHttpRequest, textStatus, errorThrown )
		{
			addPostMessage( 'There was an error: ' + textStatus + errorThrown, 'error', id );
		},
		'url' : baseUrl + '/post/rate',
		'cache' : false
	});
}

function addComment( id, baseUrl )
{
	jQuery.ajax({
		'type' : 'POST',
		'url' : baseUrl + '/comment/add',
		'dataType' : 'xml',
		'data' : {'post_id' : id, 'content' : $('#post_content_' + id).val()},
		'success':function( data, textStatus )
		{
			switch( $('status', data).text() )
			{
				case 'error':
					var errorMsg = '';
					$('line', data).each( function(i) {
						errorMsg += $(this).text() + '<br/>';
					});
					addPostMessage( errorMsg, 'failure', id );
					break;
				case 'ok':
					var msg = $('message', data).text();
					addPostMessage( msg, 'success', id );
					$('#addComment_' + id).hide('slow');
					$('#addCommentBtn_' + id).show();
					break;
			}	
		},
		'error':function( XMLHttpRequest, textStatus, errorThrown )
		{
			msg = 'There was an error: ' + textStatus + errorThrown;

			addPostMessage( msg, 'error', id );
		},
		'cache':false
	});
}

function ajaxStart( id, baseUrl )
{
	var loadingImg = '<img src="' + baseUrl + '/images/icons/ajax-loader.gif" class="ajaxMessage" title="Loading...">';
	$('#' + id).after( loadingImg );
}

function ajaxEnd( id )
{
	$('.ajaxMessage').fadeOut('slow', function() {
		$('.ajaxMessage').remove();
	});
}

function getMore(id, numShow, url)
{
	$('#'+id+' .loading_wrapper').addClass('loading');

	jQuery.ajax({
		'type' : 'GET',
		'url' : url,
		'data' : {'scope' : id, 'page' : $('#'+id).attr('nextPage'), 'amount':numShow},
		'success':function( data, textStatus )
		{
			var currPage = $('#'+id).attr('nextPage')*1;
			$('#'+id).attr('nextPage', currPage+1);
			$('#' + id + ' .show_more_wrapper').before(data);
			$('#'+id+' .loading_wrapper').removeClass('loading');
		},
		'cache':false
	});
}

function catMenuToggleSubCats( category_id, baseUrl )
{
	//retrieve data if not yet retrieved
	var listItem = $('#catMenu_'+category_id);

	if(listItem.hasClass('closed') && !listItem.hasClass('retrieved'))
	{
		jQuery.ajax({
			'type' : 'POST',
			'url' : baseUrl + '/question_categories/getSubCategories',
			'dataType' : 'html',
			'data' : {'parent_id' : category_id, 'return_type' : 'list'},
			'success':function( data, textStatus )
			{
				listItem.addClass('retrieved');	
				listItem.append(data);
				$('#catMenu_list_'+category_id).slideToggle('slow');
				listItem.toggleClass('open').toggleClass('closed');
			},
			'error':function( XMLHttpRequest, textStatus, errorThrown )
			{
				msg = 'There was an error: ' + textStatus + errorThrown;

				addPostMessage( msg, 'error', id );
			},
			'cache':false
		});
	}
	else
	{
		listItem.toggleClass('open').toggleClass('closed');
		$('#catMenu_list_'+category_id).slideToggle('slow');
	}
}

function showAllCategories()
{
	 $('div.portlet.categories ul.hidden_items').slideDown('slow', function(){
		$('div.portlet.categories .show_more_wrapper').fadeOut('slow');
	 });
}
