(function($){
	
	$.fn.extend({ 
		paginateajaxli: function(options) { 
            var defaults = {
					ajaxurl:				"data.json",
					orderBy:				"date desc",
					rowsperpage:			6,				//righe per pagina
					paginationClass:		"pagination",	//classe paginazione
					previousLabel:			"prec",
					nextLabel:				"succ",
					filter:					"publishdate isNull or publishdate <=#timeodate",
					totalResults:			"none",
					enableTruncate:			false,
					sizeTruncate:			160,
					enableLinkToDetails:	false,
					linkPath:				"/"
            };
			var options = $.extend(defaults, options); 
            
			//GLOBAL VARS
			var viewing_page = 1;
			var num_pages = 0;
			
			var last_row_viewed = 0;
			
			var obj;
			var pagination_box;
			var list;
	
            return this.each(function() { 
                       
                obj = $(this);
				
                //Create references to the options
                var rowsperpage = options.rowsperpage;
				var paginationClass = options.paginationClass;
				var previousLabel = options.previousLabel;
				var nextLabel = options.nextLabel;
				var ajaxurl = options.ajaxurl;
				var orderBy = options.orderBy;
				var filter = checkfilter(options.filter);
				var totalResults = options.totalResults;
				var enableTruncate = options.enableTruncate;
				var sizeTruncate = options.sizeTruncate;
				var enableLinkToDetails = options.enableLinkToDetails;
				var linkPath = options.linkPath;
				
				function pattern(data, pattern){
					if(pattern=="dd/MM/yyyy"){
						var year = data.substring(0,4);
						var month = data.substring(5,7);
						var day = data.substring(8,10);
						return day+"/"+month+"/"+year;
					}else if(pattern=="timeoSTD"){
						var year = data.getFullYear();
						var month = addZero((data.getMonth()+1));
						var day = addZero(data.getDate());
						var timeodate = year+"-"+month+"-"+day+"T00:00:00Z";
						return timeodate;
					}
				}
				
				function checkfilter(managefilter){
					
					if(managefilter.indexOf("#timeodate")!=-1){
						today = pattern(new Date(), "timeoSTD");
						managefilter = managefilter.replace(/#timeodate/g, today);
					}
					return managefilter;
				}
				
				function addZero(value){
					value=parseInt(value, 10);
					if(value<10 && value>=0){
						value="0"+value;
						value=value.toString();
					}
					return value;
				}
				
				function removeP(data){
					data = data.replace(/<p>/g,"");
					if(enableTruncate){
						data = smartTruncate(data, sizeTruncate);
					}
					return data;
				}
				
				function smartTruncate(text, size){
					var firsttxt = text.substring(0, size);
					var secondtxt = text.substr(size, text.length).split(" ", 1);
					return firsttxt+secondtxt+"...";
				}
				function getLink(id){
					if(enableLinkToDetails && id!=""){
						return "<a title=\"Vai al dettaglio della notizia\" class=\"link right\" href=\"" + linkPath + id + "\">Leggi</a>";
					}
					return "";
				}
				
				obj.html("");
				
				var params = "offset=0&limit="+rowsperpage+"&orderBy="+orderBy+"&filter="+filter;
				
				var completeurl = ajaxurl+"?"+params;
				
				//getJSON
				
				$.get(completeurl, function(d){
						var dd = d.split(",}").join("}");
						var data;
						eval ("data = " + dd);
						if(totalResults!="none"){
							$(totalResults).html(data.totalCount.toString());
						}
						var floordata = data.totalCount / rowsperpage;
						num_pages = Math.floor(floordata);
						if((data.totalCount % rowsperpage)!=0){
							num_pages++;
						}
						$.each(data.contentList, function(i,item){
								var html = "<li><span>";
								
								if(typeof(item.date)!="undefined"){
									html = html + pattern(item.date, "dd/MM/yyyy");
								}
								if(typeof(item.subtitle)!="undefined"){
									html = html + "<br />"+item.subtitle+"</span>";
								}
								if(typeof(item.thumbnail)!="undefined"){
									html = html + "<img src=\""+item.thumbnail["kca:src"]+"\"";
									if(typeof(item.title)!="undefined"){
										html = html + " alt=\""+item.title+"\"";
									}
									html = html + " width=\"100\" height=\"66\" />";
								}
								html = html + "<div>";
								if(typeof(item.title)!="undefined"){
									html = html + "<h3>"+item.title+"</h3>";
								}
								if(typeof(item.richtext)!="undefined"){
									html = html + "<p>"+removeP(item.richtext)+"</p>";
								}
								if(typeof(item["kca:id"])!="undefined"){
									html = html + getLink(item["kca:id"]);
								}
								html = html + "</div></li>";
								
								obj.append(html);
						});
						paginate();
				},'text');
				
				var box_class = $(this).attr("class");
				
				//getRelativePagination
				pagination_box = $("."+box_class+" ~ div." + paginationClass + ":first span");
				$(pagination_box).attr("id", this.id+"_pagination");
				
				//paginate
				paginate();
				
				//update pagination after click on pagination
				function paginate(){
					pagination_box.html("");
					pagination_box.hide();
					pagination_box.append("<a id=\"" + obj[0].id + "_prev" + "\" href=\"#page" + (viewing_page-1) + "\">" + previousLabel + "</a>");
					$("#" + obj[0].id + "_prev").click(function(){
						viewing_page--;
						ajaxcall(viewing_page);
						return true;
						//paginate();
					});
					var startj;
					var endj;
					
					if(viewing_page-2>0){
						startj = viewing_page-2;
					}else{
						if(viewing_page-1>0){
							startj = viewing_page-1;
						}else{
							startj = viewing_page;
						}
					}
					
					if(viewing_page+2<=num_pages){
						endj = viewing_page+2;
					}else{
						if(viewing_page+1<=num_pages){
							endj = viewing_page+1;
						}else{
							endj = viewing_page;
						}
					}
					
					for(var j=startj; j<=endj; j++){
						if(j==viewing_page){
							pagination_box.append("<b>" + j + "</b>");
						}else{
							pagination_box.append("<a id=\"" + obj[0].id + "_pag" + j + "\" href=\"#page" + j + "\">" + j + "</a>");
							setClick(obj[0].id, j);
						}
						if(j!=num_pages){
							pagination_box.append("|");
						}
					}
					pagination_box.append("<a id=\"" + obj[0].id + "_next" + "\" href=\"#page" + (viewing_page+1) + "\">" + nextLabel + "</a>");
					$("#" + obj[0].id + "_next").click(function(){
						viewing_page++;
						ajaxcall(viewing_page);
						//paginate();
					});
					if(num_pages>1){
						pagination_box.show();
					}
					if(num_pages>1 && viewing_page<num_pages){
						$("#" + obj[0].id + "_next").show();
					}else{
						$("#" + obj[0].id + "_next").hide();
					}
					if(viewing_page>1){
						$("#" + obj[0].id + "_prev").show();
					}else{
						$("#" + obj[0].id + "_prev").hide();
					}
				}
				
				function ajaxcall(val){
					viewing_page = val;
					obj.html("");
					var params = "offset="+((val*rowsperpage)-rowsperpage)+"&limit="+rowsperpage+"&orderBy="+orderBy+"&filter="+filter;
				
					//getJSON
					var completeurl = ajaxurl+"?"+params;
					$.get(completeurl, function(d){
						var dd = d.split(",}").join("}");
						var data;
						eval ("data = " + dd);
						if(totalResults!="none"){
							$(totalResults).html(data.totalCount.toString());
						}
						num_pages = Math.floor(data.totalCount / rowsperpage);
						if((data.totalCount % rowsperpage)!=0){
							num_pages++;
						}
						$.each(data.contentList, function(i,item){
							var html = "<li><span>";
								
								if(typeof(item.date)!="undefined"){
									html = html + pattern(item.date, "dd/MM/yyyy");
								}
								if(typeof(item.subtitle)!="undefined"){
									html = html + "<br />"+item.subtitle+"</span>";
								}
								if(typeof(item.thumbnail)!="undefined"){
									html = html + "<img src=\""+item.thumbnail["kca:src"]+"\"";
									if(typeof(item.title)!="undefined"){
										html = html + " alt=\""+item.title+"\"";
									}
									html = html + " width=\"100\" height=\"66\" />";
								}
								html = html + "<div>";
								if(typeof(item.title)!="undefined"){
									html = html + "<h3>"+item.title+"</h3>";
								}
								if(typeof(item.richtext)!="undefined"){
									html = html + "<p>"+removeP(item.richtext)+"</p>";
								}
								if(typeof(item["kca:id"])!="undefined"){
									html = html + getLink(item["kca:id"]);
								}
								html = html + "</div></li>";
								
								obj.append(html);
								
								//obj.append("<li><span>"+pattern(item.date, "dd/MM/yyyy")+" "+item.hour+"<br />"+item.subtitle+"</span><img src=\""+item.thumbnail["kca:src"]+"\" alt=\""+item.title+"\" width=\"100\" height=\"66\" /><div><h3>"+item.title+"</h3><p>"+removeP(item.richtext)+"</p>"+getLink(item["kca:id"])+"</div></li>");
						});
						paginate();
					}, 'text');
				}
				
				//set click on pagination function
				function setClick(id, val){
					$("#" + id + "_pag" + val).click(function(){
						ajaxcall(val);
						return true;
					});
				}
			}); 
        } 
    }); 
})(jQuery);