/**
 * a + img 	> a.profielPopupButton
 * a + text > a.profielPopup
 *
 * Bovendien dient de href-attribuut te zijn: "#profielPopup" en 
 * het rel-attribuut bevat de taak van de popup (bv: mailbox) en het id van de account gescheiden door : (semi-kolom)
 */

function updateNumberOfIboxMessages()
{
	if ($('a[rel$=inbox]').size() > 0)
	{		
		$.ajax({
				url: 		'/post/aantal-berichten/'
			,	type: 		'POST'
			,	cache:		false
			,	success: 	function(data){
					$('a[rel$=inbox] span').html('Inbox (' + data + ')');
			}
		});
	}
}

$(document).ready(function()
{
	/**
	 * Koppel de jQuery UI dialog aan de a-tags
	 */
	if ($('a.profielPopup[rel], ' +  
		  'a.profielPopupButton[rel]').size() > 0)
	{
		/**
		 * Voeg de handler om het dialoogvenster te openen toe aan de betreffende elementen
		 * Inplaats van direct 'click' wordt 'live' gebruikt, zodat het click-event ook automatisch wordt toegepast op 
		 * de betreffende elementen die dynamisch aan het dialoogvenster worden toegevoegd (na het laden van content voor het dialoogvenster).
		 */
		$('a.profielPopup[rel], ' + 
		  'a.profielPopupButton[rel]')
			.live('click', function(e){
				/**
				 * haal de id en de taak op uit het rel-attribuut
				 */				
				var profielOptions = $(this).attr('rel').split(':', 2);
				
				/**
				 * Bepaal de parameters voor het openen van het dialoogvenster
				 */
				switch(true)
				{
					case $(profielOptions).size() == 2:
						profielOptions = {'profielId': profielOptions[0], 'showTab': profielOptions[1]};
						break;
					case $(profielOptions).size() == 1:
						profielOptions = {'profielId': profielOptions[0], 'showTab': 'generalInfo'};
						break;
					default:
						/* Doe niets met het dialoogvenster */
						return false;
				}
				
				/**
				 * Open het profiel Dialoogvenster afhankelijk van de showTab optie
				 */
				
				/**
				 * Verstuur een bericht naar een Roffa5314 gebruiker
				 */
				if (profielOptions.showTab == 'send_message')
				{
					var theForm = $('div.roffaPopup form');
					
					$.post( $(theForm).attr('action') 
						  , $(theForm).serialize()
						  , function(data){
						  		var response = data.split(':');
						  		
						  		if (response[0] == 'error' && response[1].length > 0)
						  		{
						  			$('<div id="ajaxFormError" title="Foutmelding"></div>')
						  				.html(response[1])
						  				.appendTo(theForm)
						  				.dialog({
						  							autoOpen: true
						  						,	buttons:  {
						  								'ok': function(){
						  									$(this).dialog('close');
						  								}
						  						}
						  				});
						  				
						  			return false;
						  		}
						  		else if(response[1].length > 0)
						  		{
						  			profielOptions = {'profielId': response[0], 'showTab': response[1]};
						  			
									$('div#profielPopup')
										.load(
												'/include/paginas/profiel/index.php'
											, 	profielOptions 
											, 	function(data){
													if (data !== '')
													{
														updateNumberOfIboxMessages();
														Cufon.replace('h2');
														$(this).dialog('open');
														CSBfleXcroll('userDescription');
														CSBfleXcroll('mailPlaceholder');
													}
											});
						  		}
						  });
				}
				/**
				 * Verwijder een bericht uit de inbox
				 */
				else if (profielOptions.showTab.match(/^delete_mail_/i))
				{
					$('div#profielConfirmationPopup')
						.data('message', {id: profielOptions.showTab.match(numbersRE), obj: $(this).parents('tr')})
						.empty()
						.append('<p>Wil je dit bericht definitief verwijderen?</p>')
						.dialog('option', 'title', 'Bericht verwijderen')
						.dialog('open');
				}
				/**
				 * Open het dialoogvenster met de meegestuurde opties
				 */
				else
				{
					if(profielOptions.showTab.match(/^qryVriendenLijst_page_/i))
					{
						var pageId = profielOptions.showTab.match(numbersRE);
						profielOptions.showTab = 'generalInfo';
						profielOptions.qryVriendenLijst_page = pageId;
					}
					
					$('div#profielPopup')
						.load(
								'/include/paginas/profiel/index.php'
							, 	profielOptions 
							, 	function(data){
									if (data !== '')
									{
										/**
								    	 * Werk het aantal nieuwe berichten op de pagina bij
								    	 */
								    	updateNumberOfIboxMessages();
								    	
										Cufon.replace('h2');							
										$(this).dialog('open');
										CSBfleXcroll('userDescription');
										CSBfleXcroll('mailPlaceholder');
									}
							});
				}

				return false;
				
			}); // End: handlers toevoegen voor profiel Dialoog-venster
		
		/**
		 * Voeg div-container voor het profiel Dialoog-venster toe en maak er een jQuery UI dialog handler van
		 */
		$('<div id="profielPopup"></div>')
			.prependTo('body')
			.dialog({
					autoOpen:		false
				,	width:			723
				,	minWidth:		723
				,	height:			467
				,	minHeight:		467
				,	resizable:		false
				,	dialogClass:	'roffaPopup'
				,	title:			'Profiel van'
				,	modal:			true
			});
		
		/**
		 * Voeg div-container voor het bevestigings Dialoog-venster toe en maak er een jQuery UI dialog handler van
		 */
		$('<div id="profielConfirmationPopup"></div>')
			.prependTo('body')
			.dialog({
					autoOpen:	false
				,	modal:		true
				,	buttons:	{
						'ja'	: function(){
							/**
							 * De gegevens voor het te verwijderen bericht zijn in een datastore opgeslagen.
							 * De div-container van dialoogvenster is hiervoor verantwoordelijk
							 */
							var messageID  = $(this).data('message').id
							,	messageObj = $(this).data('message').obj;
							
							/**
							 * Voer Ajax request uit om het bericht te verwijderen
							 */						
							$.ajax({
							   		type: 		'POST'
							   	,	cache:		false
							   	,	url: 		'/post/verwijder-bericht/'
							   	,	data: 		({messageId : messageID})
							   	,	error:		function(XMLHttpRequest, textStatus, errorThrown){
							   			/**
							   			 * Als er een fout is opgetreden, dan moet hiervan een melding gemaakt worden.
							   			 * Wanneer de melding gesloten wordt moet de datastore worden geleegd en zowel de melding als het
							   			 * bevestigings Dialoog-venter worden gesloten
							   			 */
										$('<div id="ajaxHandlerError" title="Foutmelding"></div>')
						  					.html(XMLHttpRequest.responseText)
						  					.prependTo('body')
						  					.dialog({
						  							autoOpen: true
						  						,	close: function(){
						  								$('div#profielConfirmationPopup')
												    		.removeData('message')
												    		.dialog('close');
						  							}
						  						,	buttons:  {
						  								'ok': function(){
						  									$(this)
						  										.dialog('close');

												    		$('div#profielConfirmationPopup')
												    			.removeData('message')
												    			.dialog('close');
						  								}
						  						}
						  					});
							   	}
							   	,	success: 	function(data, textStatus){
							   			/**
							   			 * Als het bericht verwijderd is, dan moet het ook weer de datastore worden geleegd en het
							   			 * bevestigings Dialoog-venster gesloten worden.
							   			 */
								    	$('div#profielConfirmationPopup')
								    		.removeData('message')
								    		.dialog('close');
								    	/**
								    	 * Werk het aantal nieuwe berichten op de pagina bij
								    	 */
								    	updateNumberOfIboxMessages();
								    	
								    	/**
								    	 * Voeg animatie toe om het bericht dat verwijderd is niet meer te tonen.
								    	 * Na de animatie wordt het element, waarin het bericht stond, uit de DOM verwijderd
								    	 */
							   			$(messageObj)
							   				.fadeOut('slow', function(){ 
							   					$(this).remove();
							   				});
								}
							});
						}
						
						,	'nee'	: function(){
								$(this)
									.removeData('message')
									.dialog('close');
						}
					}
		});
		
		/**
		 * Pas Cufon toe voor het profiel venster
		 */
		Cufon('div.roffaPopup .ui-widget-header');
	}
});
