(function($){

	$.fn.slideshow = function(params) {
		
		return this.each(function() {
		
			var cont = $(this);
			var stage = cont.find('.stage');
			var slides = cont.find('.slide');
			var arrowleft = cont.find('.arrow-left');
			var arrowright = cont.find('.arrow-right');
			var dot_wrapper = cont.find('.dots');
			var dots;
			var timer;
			var delay = 6000;
			var old = 0;
			var cr = 0;
			var sw = stage.width(); //stage width;
			var ns = slides.length;
			
			stage.css({position:'relative'});
			slides.css({position:'absolute',left:0}).hide();
			slides.eq(0).show();
			
			for (var i=0; i<ns; i++)
			{
				dot_wrapper.append('<div class="dot"></div>');
			}
			
			dots = dot_wrapper.find('.dot');
			
			arrowleft.click(prev);
			arrowright.click(next);
			
			dots.click(function(){		
				var ps = dots.index(this);
				old = cr;
				cr = ps;
				return go(0);
			});
			
			fix_dot();
			
			function go(dir)
			{
				clearTimeout(timer);
				fix_dot();
				
				if ( dir < 0 || ( dir == 0 && cr < old ) )
				{
					//vado indietro
					slides.eq(old).css({left:0}).animate({left:sw});
					slides.eq(cr).show().css({left:-sw}).animate({left:0});
				}
				else
				{
					//vado avanti
					slides.eq(old).css({left:0}).animate({left:-sw});
					slides.eq(cr).show().css({left:sw}).animate({left:0});
				}
				//stage.animate({left:offset});
				timer = setTimeout(next, delay);
				return false;
			}
			
			function next()
			{
				old = cr;
				cr++;
				if (cr > ns-1)
				{
					cr=0;
				}
				return go(+1);
			}
			
			function prev()
			{
				old = cr;
				cr--;
				if (cr < 0)
				{
					cr=ns-1;
				}
				return go(-1);
			}
			
			function fix_dot()
			{
				dots.removeClass('cdot');
				dots.eq(cr).addClass('cdot');
			}
			
			timer = setTimeout(next, delay);
		});
	}
	
	$.fn.gallery = function() {
	
		return this.each(function() {
		
			var thumbs = $(this).find('.thumbs a');
			var stage = $(this).find('.stage');
			var imgbig = $('<img />');
			
			//innanzitutto mostro la prima...
			imgbig.hide().attr('src', thumbs.eq(0).attr('href'));
			stage.append(imgbig);
			
			imgbig.load(function() {
				$(this).fadeIn();
			});
			
			thumbs.click(function() {
				newSrc = $(this).attr('href');
				imgbig.fadeOut(function() {
					imgbig.attr('src', '');
					imgbig.attr('src', newSrc);
				});
				return false;
			})
		
		});
	
	}
	
	$.fn.paginate = function() {
	
		return this.each(function() {
		
			var wrapper = $(this);
			var digits = $('<div class="digits"></div>');
			var pages = wrapper.find('.page:has(a)');
			var count = pages.length;
			
			if (count > 1)
			{

				wrapper.append(digits);
				
				wrapper.height(pages.eq(0).height() + 50);
				
				pages.hide();
				pages.eq(0).show();
				
				for (i=0; i<count; i++)
				{
					var digit = i+1;
					var link = $('<a href="#">' + digit + '</a>');
					
					link.click(function() {
						digits.find('a').removeClass('current');
						$(this).addClass('current');
						var n = $(this).html();
						pages.hide().hide();
						pages.eq(n-1).show();
					});
					
					digits.append(link);
				}
				
				digits.find('a:first').addClass('current');
			
			}
		});
	
	}
	
	$.fn.valign = function() {
	
		return this.each(function() {
		
			var height = $(this).height();

			$(this).css({
				position: 'relative',
				top:-height/2
			});
		
		});
	
	}

})(jQuery)
