/*
 * jQuery Photo Loader
 * version: 1.0.0 (2010/09/10)
 * Author: Emanuele Tortolone @ FillStudio
 * http://www.fillstudio.com
 */
 
 /*
	Usage Note:
	-----------
	
	$('#media_container').PhotoLoader(
			{
				transitionType:'alpha',
				easeIn:'easeInOutQuart',
				easeInTime:800
			}
		);
	*/ 
;(function($) {
	$.fn.PhotoLoader = function(attr)
	{
		var _instance = $(this);
		if(!attr) attr = new Object();
		
		var _width = $(this).css('width');
		var _height = $(this).css('height');
		var _image_width = attr.image_width ?attr.image_width : 0;
		var _image_height = attr.image_height ?attr.image_height : 0;
		var _transitionType = attr.transitionType ? attr.transitionType : 'alpha';
	
		var _easeIn = attr.easeIn ? attr.easeIn : 'easeInOutQuart';
		var _easeInTime = attr.easeInTime ? attr.easeInTime : 800;
		
		var _oldImage;
		var _newImage;
		
		//	INIT
		function init()
		{	
			createLoading();
			setDefaultStyle();
		};
		
		_instance.load = function(src)
		{
			loadImage(src);
		}
		
		
		//	CREATE LOADING
		function createLoading()
		{
			_instance.append("<div id='media_loading_icon'></div>");	
			$('#media_loading_icon').hide();
		}
		
		function setDefaultStyle()
		{
			//	CONTAINER
			_instance.css({
			'position': 'relative',
			'overflow':'hidden'
			});
			
			//	LOADING
			$('#media_loading_icon').html('<span>Loading...</span>');
			$('#media_loading_icon').css({
			'z-index':'5',
			'position':'absolute'
			});
		}
		
		//	SHOW / HIDE LOADING
		function showLoading()
		{
			$('#media_loading_icon').fadeIn();
		}
		
		function hideLoading()
		{
			$('#media_loading_icon').fadeOut();
		}

		//	LOAD NEXT IMAGE
		function loadImage(src)
		{
			_canLoadAnother = false;
			
			showLoading();
			
			var loadUrl = String(src);
			
			if(_newImage != null) _newImage = null;
			_newImage = new Image();
			
			$(_newImage).attr('src', loadUrl);
			$(_newImage).load(onImageLoaded);
		};
		
		function onImageLoaded()
		{
			removeOldContent();
			initNewImage();
			showImage();
			hideLoading();
		};
		
		function removeOldContent()
		{
			$('img', _instance).remove();
		}
		
		function initNewImage()
		{
			_instance.append(_newImage);
		}
		
		//	SHOW NEW IMAGE
		function showImage()
		{
			if(_transitionType == 'alpha')
			{
				$(_newImage).hide();
				$(_newImage).fadeIn(_easeInTime, onNewImageTweenComplete);
			}
			else
			{
				alert("SET A VALID TRANSITION TYPE ('slide' or 'alpha')");
			}
		};
		
		
		function onNewImageTweenComplete()
		{
			_oldImage = _newImage;
			_canLoadAnother = true;
		};

		///////////////////////////////////////////////////////////
		//	END PLUGIN
		init();
		
		return _instance;
	};

})(jQuery);
