$.fn.SO_gallery = function(options){
	
	var options = $.extend({
		rootUrl: 		'',
		thumbsPerPage: 	11
	}, options || {});
	
	// ----------- //
	
	var $galleriesSet = $(this);
	
	$galleriesSet.each(function(){ // START - main
		
		var $gallery			= $(this);
		var $contentWrapper 	= $('div.content-wrapper', $(this));
		var $scrollable 		= $('div.scrollable', $(this));
		var $items 				= $(".items a", $scrollable);
		var $loading			= $('div.loading', $(this));
		var $autoplayWrapper	= $('div.autoplay', $(this));
		
		var api 				= $(this).scrollable({ size:options.thumbsPerPage, api:true });
		var autoplay 			= do_autoplay( api, $(this), 10000, 'init' );
		
		$items.click(function(event){
			clearInterval(autoplay);
			$autoplayWrapper.slideDown('fast');
			do_play( api, $gallery, $(this).index() );
			event.preventDefault();
		});
		
		$autoplayWrapper.find('a').click(function(event){
			$autoplayWrapper.slideUp('fast');
			autoplay = do_autoplay( api, $gallery, 10000, 'resume' );
			event.preventDefault();
		});		
		
	}); // END - main
	
	function do_autoplay( api, $gallery, timeout, mode ){
		if( mode=='init'){
			setTimeout(function(){
				do_play( api, $gallery, 0 );
			}, 1000);			
		} else if( mode=='resume'){
			do_play( api, $gallery, 'next' );
		}
		return setInterval(function(){
			do_play( api, $gallery, 'next' );
		}, timeout);		
	}
	
	function do_play( api, $gallery, itemIndex ){

		var $contentWrapper 	= $('div.content-wrapper', $gallery);
		var $items 				= $("div.scrollable .items a", $gallery);
		
		if( itemIndex=='next' ){
			var $candidato 	= $items.filter('.active').next();
			var $next		= ($candidato.size()) ? $candidato.index() : 0;
		} else {
			var $next 		= itemIndex;
		}

		api.click($next);
		
		var file 	= ($items.eq($next).attr('href')) 		? $items.eq($next).attr('href') 		: '';
		var caption	= ($items.eq($next).attr('caption'))	 ? $items.eq($next).attr('caption') 	: '';
		
		if( file ){
			$.ajax({
				type: 	"GET",
				url: 	options.rootUrl+"loadImage.php",
				data: 	"file="+file+caption,
				success: function(data){
					$contentWrapper.html(data);					
				},
				error: function(){
					alert('Cannot load the requested image.')
				}
			});
		}
	}
  
}
