/*
Plugin: crossfade v 1.0.1
Author: paolo rosi (doc@netsnap.it)
Tools: PSPad
*/

(function($){

	// constructor
	$.fn.crossfade = function(options){
		$.fn.crossfade.defaults =
		{
			display_time: 5000,						// numero di millisendi di attesa prima di passare alla prossima immagine
			transition_speed: 'normal',  	// velocità di fade (jquery)
			auto_run: true 								// se true l'ambaradan parte automaticamente
		};

		var opts = $.extend({}, $.fn.crossfade.defaults, options);

		return this.each(function()	{
			// variaibili
			var $this = $(this), 									// velocizza un pochino il $(this)
					currentimg=0,                     // il tag <img> corrente su cui visualizzare l'immagine
	        oldimage=null,
					loadedimages=new Array(),
					imagescount = opts.images.length; // il numero globale di immagini

			// setuppa il tutto
			setup();

			// parte visualizzando la prima immagine
      if (opts.auto_run)
				nextImage();

			// setup
			function setup(){
				$this.css({position:'relative',width:opts.width,height:opts.height, overflow:'hidden'});
				imagestags=$this.children().css({position:'absolute',top:0,left:0,'z-index':1}).hide();
				currentimg=0;
			}

			// do fade
			function dofade(img){
				img.fadeIn(opts.transition_speed, function() {
					if (oldimage)
	          oldimage.css('z-index', 1).hide();
					oldimage=img;
		      setTimeout (nextImage, opts.display_time);
				});
			}

			// next image
			function nextImage()	{
			  //console.log('set image '+currentimg);
				if (!loadedimages[currentimg]){
				  loadedimages[currentimg]=$('<img />').appendTo($this).css({position:'absolute',top:0,left:0,'z-index':2}).hide();
					img=loadedimages[currentimg];
					if (oldimage)
	          oldimage.css('z-index', 1);
				  img.attr('src',opts.images[currentimg]);
					img.load(function(){
				    //console.log('image caricata ('+currentimg+')');
						dofade(img);
					 });
				}else{
					img=loadedimages[currentimg];
          oldimage.css('z-index', 1);
          img.css('z-index', 2).hide();
					dofade(img);
				}
				currentimg=++currentimg % imagescount;

			}


		});
	}

	// start
	$.fn.start = function(){
		nextImage();
	}


})(jQuery);


