/**
 * @author Bostjan Rihter
 */

(function($) {

	$.fn.wiggle = function( options ) {  
		
		// defaults mechanism
		var defaults = {
			offset	: 20,   
			speed	: 700,
			dynamic	: true
		};
		
		// extend possible user options		 
		var options = $.extend(defaults, options);
		
		var width;
		var count 		= 0;
		var appendix 	= 0;
		var sign 		= "+";
		
		// dont break the chaining
		return this.each(function() {  
			
			count++;
			appendix = 0;
			
			// use positive and later on negative offset
			if (count%2==0) {
				sign = "+";
				count = 0;
			}		
			else
				sign = "-";

			// if in dynamic mode, generate a random offset + 10%;
			if ( options.dynamic == true )
				appendix = Math.ceil(Math.random()*10);
			
			width = jQuery(this).width();
			
			// animate
			jQuery(this).animate({width: (width + options.offset + appendix)+'px'}, options.speed, function() {
				jQuery(this).wiggle( {offset: -( options.offset + appendix), speed: options.speed, dynamic: false } );
			});
			
		});
		
	};
	
	$.fn.wiggletize = function( options ) {
		
		// default mechanism,
		var defaults = {
			elements	: 5,															// number of elements
			z_offset	: 10000,														// z-index offset (to overlay existing layers
			height		: '5px',														// wiggle height
			colors		: [ '#FFBF40', '#D7F01D', '#60F01D', '#3DD94A', '#1C7068' ],	// colors in hex
			alignment	: [ 20, 20, 20, 20, 20 ],										// alignment values in percent
			wiggle		: [
				{offset: 35, speed: 1500},
				{offset: 55, speed: 1000},
				{offset: 45, speed: 2000},
				{offset: 25, speed: 3000},
				{offset: 15, speed: 1000},
			]
		};
		
		// extend possible user options
		var options = $.extend(defaults, options);
		
		var i,j,tmp;
		
		// dont break the chaining
		return this.each(function() {
			
			// add "wiggles" and attach properties
			for (i=0; i<options.elements; i++) {
				tmp = 'wiggle-' + i;
				jQuery(this).append('<div id="' + tmp + '"></div>');
				$( '#' + tmp ).css( 'position', 'absolute' );
				$( '#' + tmp ).css( 'top', '0px' );
				$( '#' + tmp ).css( 'background-color', options.colors[i] );
				if (i==0) {
					$( '#' + tmp ).css( 'left', '0px' );
				} else {
					var sum = 0;
					for (j=0; j<i; j++) {
						sum += options.alignment[j];
					}
					$( '#' + tmp ).css( 'left', sum+'%' );
				}
				$( '#' + tmp ).css( 'width', options.alignment[i]+'%' );
				$( '#' + tmp ).css( 'height', options.height );
				$( '#' + tmp ).css( 'z-index', (options.z_offset + (options.elements - i) ) );
			}
			
			// create the animations, we dont need to animate the last one
			for (i = 0; i < (options.elements-1); i++) {
				
				tmp = '#wiggle-' + i;
				
				rOffset	= options.wiggle[i].offset;
				rSpeed	= options.wiggle[i].speed;
				
				$( tmp ).wiggle({
					offset	: rOffset,   
					speed	: rSpeed,
					dynamic	: true
				});
				
			};
			
		});
		
	};
	
})(jQuery);
