
/**
 * removes a single favorite-item specified by its node_id
 */
function xen_favorites_del( node_id )
{
	/*
	response of the ajax-request:
	json (object)
		- error 			(true|false)
		- error_message		(string)
		- affected_items	(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
		- error_items		(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
	*/
	
    // create a ajax-request to /favorites/ajax/del/node_id  and fetch the output
    var res = $.ajax({
	    global: false,
	    type: "GET",
	    url: "/favorites/ajax/del/" + node_id,
        dataType: "json",
        beforeSend: function(){
	        // display the ajax-spin-logo
	    },
	    complete: function(){
	        // hide the ajax-spin-logo
	    },
	    error: function (XMLHttpRequest, textStatus, errorThrown){
		    // show errormessage
			xen_favorites_showmessage( errorThrown, '', '' );
	    },
	    success: function(json){
			
			var msg_error = '';
			var msg_error_items = '';
			var msg_affected_items = '';
			
			// do we have any errors?
			if( json.error )
				msg_error = json.error_message;
			
			// get affected/positive items of the operation
			if( json.affected_items && $(json.affected_items).size() > 0 )
			{
				$.each(json.affected_items,function(index, item){
					// remove the element from the favorites-list because it has been deleted from database successfully
					$('#favorites_line_'+item['node_id']).fadeOut(600, function(){
						$('#favorites_line_'+item['node_id']).remove();
					});
				});
			}
			// affected_items
			
			// fetch error/negative items of the operation
			if( json.error_items && $(json.error_items).size() > 0 )
			{
				msg_error_items = 'Folgende Produkte konnten nicht entfernt werden:<ul>';
				$.each(json.error_items,function(index, item){
					msg_error_items += '<li>'+item['name']+' ('+item['message']+')</li>';
				});
				msg_error_items += '</ul>';
			}
			// error_items
			
			// only show message-popup when error has occured
			if( msg_error != '' || msg_error_items != '' )
				xen_favorites_showmessage( msg_error, msg_affected_items, msg_error_items );
	    }
    });
}
//



/**
 * adds a single node to the favorites-list, spcified by its node_id
 */
function xen_favorites_add( node_id )
{
    /*
	response of the ajax-request:
	json (object)
		- error 			(true|false)
		- error_message		(string)
		- affected_items	(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
		- error_items		(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
	*/
    
    // create a ajax-request to /favorites/ajax/add/node_id  and fetch the output
    var res = $.ajax({
	    global: false,
	    type: "GET",
	    //data: {nodeId:nodeId},
	    dataType: "json",
	    url: "/favorites/ajax/add/" + node_id,
	    beforeSend: function(){
	        // ...
	    },
	    complete: function(){
	        // ...
	    },
	    error: function (XMLHttpRequest, textStatus, errorThrown){
		    // show errormessage
			xen_favorites_showmessage( errorThrown, '', '' );
	    },
	    success: function(json){
			
            var msg_error = '';
			var msg_error_items = '';
			var msg_affected_items = '';
			
			// do we have any errors?
			if( json.error )
				msg_error = json.error_message;
			
			// get affected/positive items of the operation
			if( json.affected_items && $(json.affected_items).size() > 0 )
			{
				msg_affected_items = 'Folgende Produkte wurden hinzugefügt:<ul>';
				$.each(json.affected_items,function(index, item){
					msg_affected_items += '<li>'+item['name']+'</li>';
				});
				msg_affected_items += '</ul>';
			}
			// affected_items
			
			// fetch error/negative items of the operation
			if( json.error_items && $(json.error_items).size() > 0 )
			{
				msg_error_items = 'Folgende Produkte konnten nicht hinzugefügt werden:<ul>';
				$.each(json.error_items,function(index, item){
					msg_error_items += '<li>'+item['name']+' ('+item['message']+')</li>';
				});
				msg_error_items += '</ul>';
			}
			// error_items
			
			// show message-popup
			xen_favorites_showmessage( msg_error, msg_affected_items, msg_error_items );
	    }
    });
    return false; 
}
//



/**
 * retreives a list of ALL favorites items 
 */
function xen_favorites_get_all( )
{
    /*
	response of the ajax-request:
	json (object)
		- error 			(true|false)
		- error_message		(string)
		- affected_items	(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
		- error_items		(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
	*/
    
    // create a ajax-request to /favorites/ajax/get_all  and fetch the output
    var res = $.ajax({
	    global: false,
	    type: "GET",
	    //data: {nodeId:nodeId},
	    dataType: "json",
	    url: "/favorites/ajax/get_all",
	    beforeSend: function(){
	        // ...
	    },
	    complete: function(){
	        // ...
	    },
	    error: function (XMLHttpRequest, textStatus, errorThrown){
		    // show errormessage
			//xen_favorites_showmessage( errorThrown, '', '' );
			return false;
	    },
	    success: function(json){
            return json;
	    }
    });
    
}
//



/**
 * do print each selected item in the list.
 */
function xen_favorites_print( form_id )
{
    // set form action
    $('#'+form_id).attr('action', '/favorites/printlist');
    $('#'+form_id).attr('target', '_blank');
    
    // submit the form
    $('#'+form_id).submit();
    
    return false;
}
//



/**
 * Submits a form specified by form_id. the target is /favorites/ajax and it
 * will determine by the action what to do.
 * currently we do have
 * - del
 * - add
 */
function xen_favorites_multipleaction( action, form_id )
{
	/*
	response of the ajax-request:
	json (object)
		- error 			(true|false)
		- error_message		(string)
		- affected_items	(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
		- error_items		(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
	*/
	
    // create a ajax-request to /favorites/ajax/<action> 
    var res = $.ajax({
	    global: false,
	    type: "POST",
	    data: $('#'+form_id).serialize(),
	    dataType: "json",
	    url: "/favorites/ajax/" + action,
	    beforeSend: function(){
	        // ...
	    },
	    complete: function(){
	        // ...
	    },
	    error: function (XMLHttpRequest, textStatus, errorThrown){
		    // show errormessage
			xen_favorites_showmessage( errorThrown, '', '' );
	    },
	    success: function(json){
			
            var msg_error = '';
			var msg_error_items = '';
			var msg_affected_items = '';
			
			// do we have any errors?
			if( json.error )
				msg_error = json.error_message;
			
			// get affected/positive items of the operation
			if( json.affected_items && $(json.affected_items).size() > 0 )
			{
				if( action == 'add' )
				{
					msg_affected_items = 'Folgende Produkte wurden hinzugefügt:<ul>';
					$.each(json.affected_items,function(index, item){
						msg_affected_items += '<li>'+item['name']+'</li>';
					});
					msg_affected_items += '</ul>';
				}
				else if (action == 'del' )
				{
					//msg_affected_items = 'Folgende Produkte wurden entfernt:<ul>';
					$.each(json.affected_items,function(index, item){
						//msg_affected_items += '<li>'+item['name']+'</li>';
						
						// if desired action is DELETE items, remove them from the list
						$('#favorites_line_'+item['node_id']).fadeOut(600, function(){
							$('#favorites_line_'+item['node_id']).remove();
						});
					});
					//msg_affected_items += '</ul>';
				}	
			}
			// affected_items
			
			// fetch error/negative items of the operation
			if( json.error_items && $(json.error_items).size() > 0 )
			{
				if( action == 'add' )
				{
					msg_error_items = 'Folgende Produkte konnten nicht hinzugefügt werden:<ul>';
					$.each(json.error_items,function(index, item){
						msg_error_items += '<li>'+item['name']+' ('+item['message']+')</li>';
					});
					msg_error_items += '</ul>';
				}
				else if( action == 'del' )
				{
					msg_error_items = 'Folgende Produkte konnten nicht entfernt werden:<ul>';
					$.each(json.error_items,function(index, item){
						msg_error_items += '<li>'+item['name']+' ('+item['message']+')</li>';
					});
					msg_error_items += '</ul>';
				}
			}
			// error_items
			
			
			// only show message-popup when error has occured
			// action = add
			// OR errors occured
			if( action == 'add' || ( msg_error != '' || msg_error_items != '' ) )
				xen_favorites_showmessage( msg_error, msg_affected_items, msg_error_items );
			
			
			
			// get the total number of products in favorites
			// and update the infobox on top
			$.ajax({
				global: false,
				type: "GET",
				//data: {nodeId:nodeId},
				dataType: "json",
				url: "/favorites/ajax/get_all",
				beforeSend: function(){
					// ...
				},
				complete: function(){
					// ...
				},
				error: function (XMLHttpRequest, textStatus, errorThrown){
					// show errormessage
					//xen_favorites_showmessage( errorThrown, '', '' );
				},
				success: function(json_all){
					// 2. anzahl zählen
					var count = $(json_all.affected_items).size();
					
					// 3. update machen
					$('#favorites-count').html( count+' Produkt(e)' );
				}
			});
			
			
			
	    }
    });
    return false; 
}
//



/**
 * posts selected node_id's to  /favorites/tipafriend
 */
function xen_favorites_tipafriend( form_id )
{
    // set form action
    $('#'+form_id).attr('action', '/favorites/tipafriend');
    
    // submit the form
    $('#'+form_id).submit();
}
//



/**
 * Submits a form specified by form_id. the target is /favorites/saveaspdf which
 * generates pdf's of the node_id's submitted by the form.
 * the generated pdf's are mailed to the users mailaddress.
 *
 * this function waits for a json-response. the format is below.
 */
function xen_favorites_saveaspdf( form_id )
{
	/*
	response of the ajax-request:
	json (object)
		- error 			(true|false)
		- error_message		(string)
		- affected_items	(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
		- error_items		(array)
			- node_id		(int)
			- title			(string)
			- name			(string)
			- message		(string)
	*/
	
    // create a ajax-request to /favorites/saveaspdf
    var res = $.ajax({
	    global: false,
	    type: "POST",
	    data: $('#'+form_id).serialize(),
	    dataType: "json",
	    url: "/favorites/saveaspdf",
	    beforeSend: function(){
	        // show message-popup
			msg_affected_items = 'Das generieren der PDFs und versenden als Email kann einige Sekunden dauern.';
			xen_favorites_showmessage( '', msg_affected_items, '' );
	    },
	    complete: function(){
	        // ...
	    },
	    error: function (XMLHttpRequest, textStatus, errorThrown){
		    // show errormessage
			xen_favorites_showmessage( errorThrown, '', '' );
	    },
	    success: function(json){
			
			var msg_error = '';
			var msg_error_items = '';
			var msg_affected_items = '';
			
			// do we have any errors?
			if( json.error )
				msg_error = json.error_message;
			
			// get affected/positive items of the operation
			if( json.affected_items && $(json.affected_items).size() > 0 )
			{
				msg_affected_items = 'Folgende Produkte wurden Ihnen als E-Mail zugesandt:<ul>';
				$.each(json.affected_items,function(index, item){
					msg_affected_items += '<li>'+item['name']+'</li>';
				});
				msg_affected_items += '</ul>';
			}
			// affected_items
			
			// fetch error/negative items of the operation
			if( json.error_items && $(json.error_items).size() > 0 )
			{
				msg_error_items = 'Folgende Produkte konnten nicht als PDF der E-Mail hinzugefügt werden:<ul>';
				$.each(json.error_items,function(index, item){
					msg_error_items += '<li>'+item['name']+' ('+item['message']+')</li>';
				});
				msg_error_items += '</ul>';
			}
			// error_items
			
			// show message-popup
			xen_favorites_showmessage( msg_error, msg_affected_items, msg_error_items );
	    }
    });
	
    return false; 
}
//






/**
 * display a message using facebox (http://famspam.com/facebox)
 *
 */
function xen_favorites_showmessage( msg_error, msg_affected_items, msg_error_items)
{
	// identifier of the div which holds the infotext to show in a dialogue
	var infobox = 'favorites-info';
	
	// now display a nice error-dialogue
	var msg_total = '';
	if( msg_error != '' )
		msg_total += '<p class="favorites-error">'+msg_error+'</p>';
	if( msg_affected_items != '' )
		msg_total += '<p class="favorites-items-ok">'+msg_affected_items+'</p>';
	if( msg_error_items != '' )
		msg_total += '<p class="favorites-items-error">'+msg_error_items+'</p>';
	jQuery.facebox( msg_total );
	
	return false;
}
//

