

//http://devkick.com/lab/fsgallery/

(function($) {
	
var $$,tID;
var showingImage= false;


$$ = $.fn.fsGallery = function(options) {
	var $options = {
		loadingText:'loading...',
		delay: 200,
		fade: 200,
		slideshow: 1,
		interval: 4000,
		thumbnails: 1,
		raster: true,
		onLoad : function(){}
	};
	
	$$.options = $.extend($options,options);
	if($('body').find('#fsImage').length < 1) {
		$('body').prepend('<div id="fsImage"><div><table><tr><td><img src="/images/progress.gif" class="init"></td></tr></table></div></div>');
	}
	
	if ($$.options.slideshow){
		slideshow_interval = setInterval(function (){
		   $$.next ($(".fsGallery").find('.active'));
	   	}, $$.options.interval);
	}
	
	return this.each(function() {
		$(this).addClass('fsGallery');	
		$$.preload($(this).find('p:first'));
	});
};

	


$$.next = function(element) {
	if (!element || element.length < 1 || element.siblings().length < 1) {
		return false;
	} else {
		clearTimeout(tID);
		$$.show(element.next().length > 0 ? element.next() : element.siblings(':first'));
	}
}



$$.prev = function(element) {
	if (!element || element.length < 1 || element.siblings().length < 1) {
		return false;
	} else {
		clearTimeout(tID);
		$$.show(element.prev().length > 0 ? element.prev() : element.siblings(':last'));
	}
}



$$.preload = function(element) {

	var anchor  = element.find('img');
	var image   = $(new Image());
	if (anchor.text().length > 0) {
		anchor.text(anchor.text().replace(/ /,'\xa0'));
	}
	
	if (!$$.options.thumbnails){
		element.css('display','none');
	}
	
	element.addClass('loading');
	image.load(function() {
		element.removeClass('loading');
		if(anchor.length > 0) {
			//element.css({backgroundImage:'url('+anchor.attr('src')+')',backgroundRepeat:'no-repeat',backgroundPosition:'50% 50%'});
			element.find('img').css('display', 'block');
		}
		element.addClass('loaded').click(
			function() {
				$$.show($(this));
				return false;
			}
		);
				
		if (!showingImage && $('#fsImage td img:not(.init)').length < 1) { $$.show(element); }
		if (element.next().length > 0) { $$.preload(element.next()); }
		$(this).remove();
		$('#fsImage').show();
		
	}).attr('src',anchor.attr('src'));
};



$$.c = function(e) {
	return $(document.createElement(e));
};



$$.resize = function(image) {

	var ratio = Math.max($(window).width()/image.width(),$(window).height()/image.height());
	if ($(window).width() > $(window).height()) {
		image.css({width:image.width()*ratio,height:'auto'});
	} else {
		image.css({width:'auto',height:image.height()*ratio});
	}
};



$$.show = function(element) {

	showingImage = true;

	element.siblings('.active').removeClass('active');
	element.addClass('active');
	var image = $(new Image).attr({
		src: element.find('img').attr('src'),
		alt: element.find('img').attr('title')
	});
	
	var raster = $$.options.raster ? $$.c('span').addClass('raster') : false;

	$('#fsImage td').fadeOut('slow', function(){
		$('#fsImage td').empty().append(image.css('display','block')).prepend(raster);
		$('#fsImage td').fadeIn('slow', function(){
		});
			if(($.browser.msie) || $.browser.safari) {
				$(window).resize(function(){ $$.resize($('#fsImage td img:not(.init)')); });
				$(function($){$$.resize(image);});
			}
			$$.options.onLoad();
			
			showingImage = false;
	});
	
	
	
	
			
};



$.fn.hoverClass = function() {
	return this.hover(
		function() { $(this).addClass('hover') },
		function() { $(this).removeClass('hover') }
	);
}

})(jQuery);

