;(function($) {
	$.fn.jgallery = function (){
		// primero de todo vinculamos el click de la galeria con el cambio de imagen en la principal
		$(this).each(function(i,el){
			var ptr = 0;
			var actual = 0;
			var raiz = $(this);
			
			var slider = $(el).find('.listado');
			var nodecol = $(el).find('.listado .image');
			var visibles = 4;
			var limit = nodecol.length-visibles;
			
			var hugeProfile = [640,480]; 
			var capaMain = $(el).find('.grande');
			var main = $(capaMain).find('img');
			var linker = $(el).find('.grande a');
			var preloader = new Image();
			$(el).find('.listado .image a').bind('click',function(){
				var href = $(this).attr('href');
				var id = actual = parseInt($(this).attr('rel'));
				main.before('<div class="loader" />');
				main.parent().find('div.loader').css({
					width:main.width(),
					height:main.height(),
					opacity:0,
					zIndex:9999,
					position:'absolute',
					top:main.offset()['top'],
					left:main.offset()['left']
				}).animate({opacity:1},"slow")
				
				main.animate({opacity:0},"slow",function(){
					preloader.onload = function(){
						raiz.find('.info .paginacion').html((id+1)+'/'+nodecol.length)
						main.attr({
							src:preloader.src
						});
						linker.attr({
							href:preloader.src.replace(/([0-9]*)x([0-9]*)\.jpg/,hugeProfile[0]+"x"+hugeProfile[1]+".jpg")
						})
						main.animate({opacity:1},600,function(){
							main.parent().find('div.loader').fadeOut(500,function(){
								$(this).remove()
							});
						});
					}
					preloader.src = href;
					return false;
				});
				return false;
			})
			$(el).find('.control a.ampliar').bind('click',function(){
				linker.trigger('click');
				return false;
			})
			linker.fancybox();
			
			slider.addClass('slider');
			slider.wrap('<div class="visor" />');
			visor = slider.parent();
			visor.wrap('<div class="controls" />')
			var controls = visor.parent();
			
			controls.append('<a class="left" href="javascript:;"></a><a class="right" href="javascript:;"></a>')
			
			controls.find('a.left').bind('click',function(){
				if($(slider).is(':animated')){
					return;
				}
				if(ptr>0){ // base 0
					ptr--;
				}else{
					return;
				}
				var lf = nodecol[ptr].offsetWidth;
				cssLeft = parseInt(slider.css('left'));
				lf = cssLeft + lf;
				slider.animate({
					left:lf+'px'
				},200)
			})
			controls.find('a.right').bind('click',function(){
				if($(slider).is(':animated')){
					return;
				}
				if(ptr<limit){
					ptr++;
				}else{
					return;
				}
				var lf = nodecol[ptr].offsetWidth;
				cssLeft = parseInt(slider.css('left'));
				lf = cssLeft - lf;
				slider.animate({
					left:lf+'px'
				},200);
			})
			
			capaMain.after('<div class="info" />')
			.parent()
			.find('.info')
			.append('<a class="left" href="javascript:;"></a><span class="paginacion">'+(ptr+1)+'/'+nodecol.length+'</span><a class="right" href="javascript:;"></a>')
			.find('.left').bind('click',function(){
				//controls.find('.left').trigger('click');
				if($(main).parent().find('.loader').length>0){return;}
				if(actual>0){actual--;}else{return;};
				$(nodecol[actual]).find('a').trigger('click');
				return false;
			}).parent()
			.find('.right').bind('click',function(){
				//controls.find('.right').trigger('click');
				if($(main).parent().find('.loader').length>0){return;}
				if((actual+1)<nodecol.length){actual++;}else{return;};
				$(nodecol[actual]).find('a').trigger('click');
				return false;
			})
			
			nodecol.each(function(i,el){
				$(el).find('a').attr({rel:i});
				slider.width(slider.width()+(84));
			})
		})
	}
})(jQuery);