(function($)
{
	$global_options = null;
	$global_repository = null;
	
	$.fn.segmented = function(parameters)
	{
		var defaults =
		{
			delay: 100,
			segments: 10,
			prev: "",
			next: "",
			effect: "fadeout",
			didascalia: "",
			usekeyboard: false,
			thumbs_navigation: false,
			thumbs_container: ""
		},
			options = $.extend(defaults, parameters), 
			$div = $("<div>").css("display","none").attr("class","segmented_repository").html($(this).html()),
			$container = $(this),
			$immagini = $div.find("img").size() - 1,
			$first = $div.find("img:first-child"),
			$width = $(this).width(),
			$next = options.next!="" ? $next = true : $next = false,
			$prev = options.prev!="" ? $prev = true : $prev = false,
			$thumbs = options.thumbs_navigation,
			$height = $(this).height();

			function init()
			{
				$global_options = options;
				$global_repository = $div;
				$("body").prepend($div);			
				$container.empty().attr("rel","0").css({"position":"relative","overflow":"hidden","background":"url("+$first.attr("src")+") left top no-repeat"});
				if (options.didascalia!="") $(options.didascalia).html($first.attr("title"));
				if (options.thumbs_container!="") $(options.thumbs_container+" img:eq(0)").addClass("selected");

				var segmento = parseInt($width/options.segments,10);
				for (i=1; i<=options.segments+1; i++)
				{
					var margine = (i*segmento) - segmento,
						slice = $("<div>").css({
						"top":"0",
						"position":"absolute",
						"float":"left",
						"height":""+$height+"px",
						"width":""+segmento+"px",
						"left":""+margine+"px",
						"background-position":"-"+margine+"px 0"
						});
					$container.append(slice);
				}
			}

		    return this.each(function()
			{

				init();
						
				if (options.usekeyboard)
					$(document).keydown(function(e)	{
						if (e.keyCode == '39') { 
							if ($container.find("div:animated").size()==0) $container.trigger('click');
						} else if (e.keyCode == '37') {
							if ($container.find("div:animated").size()==0) $container.segmented_effect(-1,false);
						}
					});
					
				if ($thumbs) $(options.thumbs_container+" img").click(function() { 
					if ($container.find("div:animated").size()==0) { 
						if ($(this).parent().index()!=$container.attr("rel")) $container.segmented_effect($(this).parent().index(),false); 
					}
				});
				if ($next) $(options.next).click(function() { $container.trigger('click'); });
				if ($prev) $(options.prev).click(function() { if ($container.find("div:animated").size()==0) $container.segmented_effect(-1,false); });

				$container.click(function() { if ($container.find("div:animated").size()==0) $container.segmented_effect(-1,true); });

		    });
	};

	$.fn.segmented_effect = function(rel,fwd)
	{
		var i = 0,
			$container = $(this),
			$div = $global_repository,
			$immagini = $div.find("img").size() - 1,
			rel_immagine = parseInt($container.attr("rel"),10),
			immagine_to_slice = $div.find("img:eq("+rel_immagine+")");

		if (rel!=rel_immagine) {
			if (fwd)
				var rel_nuovo = rel_immagine==$immagini ? 0 : rel_immagine + 1, nuova_immagine = rel_immagine==$immagini ? $div.find("img:first-child") : $div.find("img:eq("+rel_nuovo+")");
			else
				var rel_nuovo = rel_immagine==0 ? $immagini : rel_immagine - 1,	nuova_immagine = rel_immagine==0 ? $div.find("img:last-child") : $div.find("img:eq("+rel_nuovo+")");
		
			if (rel>-1) var rel_nuovo = rel, nuova_immagine = $div.find("img:eq("+rel_nuovo+")");
			
			if ($global_options.thumbs_container!="") {
				$($global_options.thumbs_container+" img").removeClass("selected");
				$($global_options.thumbs_container+" img:eq("+rel_nuovo+")").addClass("selected");				
			}
		
			slices(immagine_to_slice.attr("src"),nuova_immagine.attr("src"),rel_nuovo);
			if ($global_options.didascalia!="") $($global_options.didascalia).html(nuova_immagine.attr("title"));

			$container.find("div").each(function()
			{
				var ritardo = i*$global_options.delay;

				switch($global_options.effect)
				{
					case "fadeout": $(this).delay(ritardo).fadeOut(500); break;
					case "slideup": $(this).delay(ritardo).slideUp(500); break;
					case "width": $(this).delay(ritardo).animate({width: 0}); break;
					case "slideupwidth": $(this).delay(ritardo).animate({width: 0, height: 0}); break;
					case "moveleft": $(this).delay(ritardo).animate({left: 0, opacity: 0}); break;
					case "moveright": $(this).delay(ritardo).animate({left: $(this).width()+$(this).width()*i, opacity: 0}); break;
					case "allwidth": $(this).animate({width: 0, opacity: 0.5}, 1000);
				}
				i++;
			});
		}	
		
		function slices(immagine,successiva,sel)
		{
			$container.find("div").each(function() {
				$(this).show().css("background-image","url("+immagine+")");
			});
			$container.attr("rel",""+sel+"").css("background","url("+successiva+") left top no-repeat");
			return false;
		}
		
		return false;
	};
})(jQuery);
