/**
* Funzioni e oggetti per la gestione delle liste video via ajax
*
*/
(function($) {
	/**
	 * $ is an alias to jQuery object
	 *
	 */
	// plugin initialization
	$.fn.extend({
		boardtv_list_videos: function(settings) { 
			return new $.boardtv_list_videos(this, settings) ;
		}		
	});	
	
	// Costruttore
	$.boardtv_list_videos = function(el, settings) {   
		// store this instance
		var _this  = $.data(el, "boardtv_list_videos", this);
			
		this.init(el, _this, settings); 	
		
		this.get_data() ;	
	};
		
	$.extend($.boardtv_list_videos.prototype, { 

		init: function(el, obj, settings)  {
			var _this 	= obj ;
			
			this.error 	= false ;
			this.msg_error = "TEST" ;
			this.target_obj	= el ;
			this.count_page 	= 0 ;
			this.current_page 	= 0 ;
			
			this.offset 		= 0 ;
		
			this.settings = jQuery.extend({
				beforeSubmit:		_resetError,		// Before call
			        	internal_success:    	_showResponse,  	// callback
			        	error:			_errorResonse,	// Funzione chiamata in caso d'errore
		        		success:	false,				// Funzione chiamata dopo il caricamento degli items
			        	base_url:	"",				// Utilizzato per costruire gli URL ajax
			        	url:		"/ajax/",			// URL per preleva gli items
		        		data:		{},				// Dove inserirre in filtri per la ricerca
				page:	1,					// Pagina dell'elenco da caricare
				dim:	4					// Dimensione delal pagina
			}, settings || {});
			
			this.current_page = this.settings.page ;
			
			// Funzione chiamata prima dell'inizio de caricamento, per visualizzare  icona d'attesa
			function _resetError() {
				error = false ;
				msg_error = "" ;
			
				// Per caricare un oggetto di transizione caricamento dati
				$("#loading").show();
			}
			
			// Funzione chiamata con la fine della ricezione dei dati
			function _showResponse(data, textStatus) {
				$("#loading").hide();
		
				if(textStatus == "success") {
					_this.target_obj.html(data.output) ;
					_this.count_page	= data.count_page ;
					
					if(data.offset != undefined) {
						_this.offset = data.offset ;
					}
					
					if(_this.settings.success) {
						_this.settings.success(data);
					}
				} else {
					if(_this.settings.error)  _this.settings.error() ;
				}
			}
			
			function _errorResonse(XMLHttpRequest, textStatus, errorThrown) {
				 
			}
		},
		
		// Carica la lista dei video
		get_data: function() {
			this.settings.data["page"] = this.current_page ;
			this.settings.data["dim"] = this.settings.dim ;

			var data = {"data": $.toJSON(this.settings.data).toString()}
			
// PROVA !!!!

var url = this.settings.base_url + this.settings.url ;		
for(_key in this.settings.data) {
	url += "/" + escape(this.settings.data[_key]) ;
}	
	
			$.ajax(
				{
					beforeSend: this.settings.beforeSubmit,
					success: this.settings.internal_success,
					error:this.settings.error,
					dataType: "json",
					type: "POST",
					url: url,//url:this.settings.base_url + this.settings.url,
					data: data
				}
			) ;
		},
		
		/**
		* Attiva l'evento click su ogni item caricato
		* item		selettore item
		* player	selettore destinazione player
		* details	selettore destinazione dettaglio descrittivo del video selezionato
		* comments	selettore destinazione commenti
		*/
		setup_items: function (item, player, details, comments) {
			var _this = this ;
						
			// attiva la selezione per i singoli item
			$(item).click(function () {
				_this.select_event(this, item, player, details, comments) ;
			}) ;			
		},
		
		select_event: function (obj, item, player, details, comments) {
				if(!$(obj).size()) return ;
				
				var key = $(obj)[0]["name"] ;
					
				// Carica un singolo video
				$(player).boardtv_list_videos({
					url:	this.settings.base_url + "ajax/video_get_player",
					data: 	{code: key}
				}) ;
				
				// Carica la descrizione del video
				$(details).boardtv_list_videos({
					url:	this.settings.base_url + "ajax/video_get_details",
					data: 	{code: key},
					success: function() {
						    $("#example > ul").tabs();
					}
				}) ;	
				
				// Carica i commenti	
/*				
				if(comments != undefined) {			
					$(comments).boardtv_list_videos({
						url:	this.settings.base_url + "ajax/video_get_comments",
						data: 	{code: key},
						success: function() {
						},		
					}) ;			
				}		
*/				

		},
		
		select_item: function (key, item, player, details, comments) {
				// Carica un singolo video
				$(player).boardtv_list_videos({
					url:	this.settings.base_url + "ajax/video_get_player",
					data: 	{code: key}
				}) ;
				
				// Carica la descrizione del video
				$(details).boardtv_list_videos({
					url:	this.settings.base_url + "ajax/video_get_details",
					data: 	{code: key},
					success: function() {
						    $("#example > ul").tabs();
					}
				}) ;		
					
				// Carica i commenti	
/*				
				if(comments != undefined) {			
					$(comments).boardtv_list_videos({
						url:	this.settings.base_url + "ajax/video_get_comments",
						data: 	{code: key},
						success: function() {
						},		
					}) ;			
				}		
*/
		},
		
		scroll_page: function(_this, index_request, status) {
			
			// Se richiesta una pagina precedente ed e' presente la carica
			if(index_request < 0 && _this.current_page > 1) {
				_this.current_page-- ;				
				_this.get_data() ;
				
				return false ;
			}
			
			// Se richiesta una pagina sucessiva ed e' presente la carica
			if((index_request > (status.length  - status.size)) && _this.current_page < _this.count_page) {
				_this.current_page++ ;
				_this.get_data() ;
				
				return false ;
			}
			
			return true ;
		}

		
	} ) ;
})(jQuery); // Call and execute the function immediately passing the jQuery object

