/**
 * @author Bruno
 * jQuery extension mewsAutoFill
 */
(function($){
	var mbNewsObj = function($stage, options)
	{
	//$stage deve essere un oggetto jQuery
		if(!($stage instanceof jQuery))
		{
			alert('mbPrettyNews: è necessario passare un parametro di tipo jquery');
			return;
		}
		this.stage = $stage;
		if(!options) options={};
		//impostazioni di default
		var settings = 	{
							sUrl:"",
							iPageLength:15,
							iStart:1,
							iMaxDescLength: 100,
							drawNews:null,
							drawNavigateButtons:null
						};
		this.stage = $stage;
		this.options = {};
		$.extend(this.options, settings, options);
		//metodi definiti dal plugin
		this.drawNews = this.options.drawNews;
		this.drawNavigateButtons = this.options.drawNavigateButtons;
		this.getFilter = this.options.getFilter;
		this.sUrl = this.options.sUrl;
		
		this.load = function(url, pars)
		{
			if ((typeof url) == 'object')
			{
				pars = url;
				url = this.sUrl;
			}
			else
			{
				this.sUrl = url;
			}
			
			var me = this;
			
			//combino i parametri con le informazioni passate nelle options
			if (pars.Start)
				this.options.iStart = pars.Start
			else
				pars.Start = this.options.iStart;
				
			if (pars.Length)
				this.options.iPageLength = pars.Length
			else
				pars.Length = this.options.iPageLength;
				
			if (pars.Tag)
				this.options.sParentTag = pars.Tag
			else
				pars.Tag = this.options.sParentTag;
			
			if (pars.maxDesc)
				this.options.iMaxDescLength = pars.maxDesc
			else
				pars.maxDesc = this.options.iMaxDescLength;
				
			pars.filter = this.getFilter();
			
			//se la div che contiene la news non esiste la creo
			var thediv = jQuery('.news_auto_fill', this.stage); 
			if (thediv.length == 0)
				thediv = jQuery('<div></div>').appendTo(this.stage)
											  .addClass('news_auto_fill')
											  .hide();
			this.newscontainer = thediv;
			//dissolvenza out
			thediv.fadeOut('slow', function()
			{
				me.stage.addClass('mb-utility-loading'); //caricamento in corso...
				jQuery.getJSON(url, pars, function(data)
				{
					me.aaNews = data.aaData;
					me.iStart = data.start;
					me.iLength = data.length;
					me.iTotal = data.total;
					if(me.drawNews)
						me.drawNews(me);
					if(me.drawNavigateButtons)
						me.drawNavigateButtons(me);
					me.stage.removeClass('mb-utility-loading');//caricamento finito
					//dissolvenza in
					thediv.fadeIn('slow');
				})
				
			})
		};
	};


	$.fn.mbNewsAutoFill = function(url, parameters, options)
	{
		if(!options) options = {};
		$stage = this;
		//default
		var settings = 	{
							iPageLength:15,
							sUrl:'/ajaxNews/ajax_grupponews_JSON.aspx',
							sParentTag:'News per Sito',
							bShowDescriptions:true,
							sNewsClass:'mb-af-news',
							sShowNewsBtnClass:'mb-af-newsbtn',
							sShowNewsBtnText:'leggi la notizia'
						};
		var methods = 	{
							drawNews: function(obj)
							{
								$('*', obj.newscontainer).remove();
								for(var i = 0; i < obj.aaNews.length; i++)
								{
									var el = obj.aaNews[i];
									thenews = jQuery('<div></div>')
										.appendTo(jQuery(obj.newscontainer))
										.addClass(obj.options.sNewsClass);
									jQuery('<h5>'+ el[2] +'</h5>').appendTo(thenews);
									jQuery('<h2>'+ el[1] +'</h2>').appendTo(thenews);
									if (obj.options.bShowDescriptions)
										$(el[3]).appendTo(thenews);
									jQuery('<a>' + obj.options.sShowNewsBtnText + '</a>').attr('id',el[0])
																						 .attr('href','#')
													 									 .appendTo(thenews)
																						 .addClass(obj.options.sShowNewsBtnClass);
								}
							},
							
							drawNavigateButtons: function(obj)
								{
									var start = obj.iStart;
									var pageLength = obj.iLength;
									var numNews = obj.iTotal;
									var navbar =jQuery('<div></div>').appendTo(obj.newscontainer)
														 			 .addClass('mb-pn-navbar');
									if(obj.aaNews.length == 0)
									{
										jQuery('<div></div>').appendTo(navbar)
															 .html('non è stata trovata alcuna notizia');
										return;
										
									}
									if(start > 1)
									{
										var s = start - pageLength;
										jQuery('<a href="#">&nbsp;</a>').addClass('mb-pn-navbar-btnleft')
																		 .click(function()
																		 {
																		 	obj.load({Start:s});
																			return false;
																		 })
																		 .appendTo(navbar);
									}

									jQuery('<div></div>').appendTo(navbar)
														 .html(start + ' - ' + (start + pageLength - 1) + ' su ' + numNews);

									if((start + pageLength) < numNews)
									{
										var s1 = start + pageLength;
										jQuery('<a href="#">&nbsp;</a>').addClass('mb-pn-navbar-btnright')
																		 .click(function()
																		 {
																		 	obj.load({Start:s1});
																			return false;
																		 })
																		 .appendTo(navbar);
									}
														 
									jQuery('<div></div>').appendTo(navbar)
														 .addClass('mb-utility-clear');
								},
							getFilter: function()
								{
									return '';
								}						
						};
						
		var o = $.extend({},  settings, methods, options );
		//solo il primo elemento
		var newsObj = new mbNewsObj(this, o);
		var pars = $.extend({},parameters, {Start:1})
		newsObj.load(url, pars);
		if (options.searchButton)
		{
			options.searchButton.click(function()
			{
				newsObj.load(url,{Start:1})
			});
		}	
		if (options.searchField)
		{
			options.searchField.keyup(function()
			{
				newsObj.load(url,{Start:1})
			});
		}	
		return $stage;
	}
})(jQuery)

