(function($) {
 
$.fn.pagedGallery = function(settings) {
	var opts = {
		'count'		: 'Image [current] of [total]',
		'maxThumbs'	: 31,
		'thumbspeed': 50,
		'pagespeed'	: 0
	};
	if (settings) opts = $.extend(opts, settings);
		
	//Código específico para cada slider encontrado.
	var obj= this;
	var ii = 1;
	this.each(function() {
		var $this = $(this);
		var current = 0;
		var currentPage = 1;
		var link_list = $this.find("a");
		var totalImages = link_list.length;
		var pages = Math.ceil(totalImages/opts.maxThumbs);
		var min_link;
		var max_link;
		
		generateLayout();
		$this.find(".big img").hide();
		showPage(1);
		setCount();
		handleThumbs();
		handleControls();
		show(0);
		ii++;
		
		
		function handleThumbs(){
			link_list.click(function(){
				var index = link_list.index(this);
				show(index);
				return false;
			});
		}
		function handleControls(){
			$this.find(".controls .next").click(function(e){
				show(nextIndex());
				e.preventDefault();
			});
			$this.find(".controls .prev").click(function(e){
				show(prevIndex());
				e.preventDefault();
			});
			
			$this.find(".paginator .nextPage").click(function(e){
				showPage(currentPage+1);
				e.preventDefault();
			});
			$this.find(".paginator .prevPage").click(function(e){
				showPage(currentPage-1);
				e.preventDefault();
			});
		}
		function showPage(num){
			currentPage = num;
			var h = num*opts.maxThumbs-opts.maxThumbs+1;
			min_link = h-1;
			max_link = min_link+opts.maxThumbs;
			var i = 1;
			link_list.hide();
			
			var tmp_time = 10;
			link_list.each(	function(){
				var obj = this;
				if(i > min_link){
					if(i > max_link)return;
					setTimeout(function(){
						$(obj).fadeIn();
					},tmp_time);
					tmp_time += opts.thumbspeed;
				}
				i++;
			});
			if(num == 1)$this.find(".prevPage").fadeOut(opts.pagespeed);
			else $this.find(".prevPage").fadeIn(opts.pagespeed);
			if(num == pages)$this.find(".nextPage").fadeOut(opts.pagespeed);
			else $this.find(".nextPage").fadeIn(opts.pagespeed);
		}
		function nextIndex(){
			return (current < totalImages-1)?current+1:0;
		}
		function prevIndex(){
			return (current > 0)?current-1:totalImages-1;
		}
		function show(index){
			link_list.eq(index).addClass("active").siblings().removeClass("active");	
			current = index;
			if(current >= max_link)showPage(currentPage+1);
			if(current < min_link)showPage(currentPage-1);
			var currentImg = $this.find(".big img:eq("+index+")");
			currentImg.stop().fadeIn().siblings().fadeOut();
			$this.find(".description h3").html(link_list.eq(index).find("img").attr("alt"));
			setCount();
		}
		function setCount(){
			var count_txt = opts.count.replace(/\[total\]/ig,"<span class='total'>"+totalImages+"</span>").replace(/\[current\]/ig,"<span class='current'>"+(current+1)+"</span>");
			$($this).find(".count").html(count_txt);
		}
		function generateLayout(){
			var wrapper = $("<div>").addClass("pagedGallery").attr("id","pagedGallery"+ii);
			$this.wrapInner('<div class="thumbs"></div>');
			$this.wrap(wrapper);
			
			//Lista de imágenes grandes obtenidas del atributo "href" de cada <a>
			var bigImg = $("<div>").addClass("big");
			var txt = "";
			$this.find("a").each(function(){
				bigImg.append($("<img>").attr("src",this.href));
			});
			
			var desc = $("<div>").addClass("description");
			desc.append('<div class="count"></div><h3></h3>');
			
			var controls = $("<div>").addClass("controls");
			controls.html('<a href="#;" id="prev" class="prev">Anterior</a><a href="#;" id="next" class="next">Siguiente</a>');
			
			var paginator = $("<div>").addClass("paginator").html('<a href="#;" class="prevPage">Anterior</a><a href="#;" class="nextPage">Siguiente</a>');
			
			$this.find(".thumbs").append(paginator);
			$this.prepend(controls);	
			$this.prepend(desc);
			$this.prepend(bigImg);
		}
	});
	return this;
}; 
})(jQuery);
