/**
 * Chmura tekstów - ustawia teksty w podanym kontenerze w pseudo-losowej
 * kolejności, delikatnie je animuje
 * 
 */
(function($) {
	$.fn.wnTextCloud= function(options) {
		var defaults = {
			textSelector: "span",
			maxMovement: 50,
			maxMovementTime: 2000,
			startFontSize: 30,
			fontSizeResizeRadius: 30,
			minimumOpacity: 0.4
		};
		
		var options = $.extend(defaults, options);
		var $container;
		var $texts;
		var textsCount;
		var retardedBrowser;
		
		
		/**
		 * Funkcja wyszukuje sobie losowy tekst i go animuje.
		 */
		var doAnimate = function() {
			var textIndex  = Math.floor(Math.random()*(textsCount+1));
			var movement = options.maxMovement/3 + Math.floor(Math.random()*(2*options.maxMovement/3+1));
			var movementTime = options.maxMovementTime/3 + Math.floor(Math.random()*(2*options.maxMovementTime/3+1));
			
			
			var $text = $($texts[textIndex]);
			var currentOpacity = $text.css('opacity');
			
			var animationParams = {left: '+='+movement};
			if(!retardedBrowser) {
				animationParams.opacity = 1;
			}
			
			$text.animate(animationParams, movementTime);
			
			
			animationParams = {left: '-='+movement};
			if(!retardedBrowser) {
				animationParams.opacity = currentOpacity;
			}
			
			$text.animate(animationParams, movementTime, function() {
				setTimeout(doAnimate, Math.floor(Math.random()*50));
			});
			
		}
		
		
		/**
		 * Przygotowuje napisy do pozniejszych animacji :)
		 */
		var initialize = function() {
			
			for(x=0; x<textsCount; x++) {
				var $text = $($texts[x]);
				var opacity = Math.random();
				if(opacity < options.minimumOpacity) {
					opacity = options.minimumOpacity;
				}
				
				var resizeFactor = Math.floor(Math.random()*options.fontSizeResizeRadius);
				var fontSize = options.startFontSize;

				if(resizeFactor%2) {
					fontSize -= fontSize*(resizeFactor/100);
				} else {
					fontSize += fontSize*(resizeFactor/100);
				}
				
				
				$($texts[x]).css("font-size", fontSize+"px");
				if(!retardedBrowser) {
					$($texts[x]).css("opacity", opacity);
				}
			}
		};
		
		
		return this.each(function() {
			$container = $(this);
			$texts = $("> "+options.textSelector, $container);
			textsCount = $texts.length;
			retardedBrowser = ($.browser.msie && $.browser.version < 9) || ($.browser.mozilla && parseInt($.browser.version) < 4);
						
			initialize();
			
			doAnimate();
			doAnimate();
			doAnimate();
		});
	};
})(jQuery);
