(function($) {$.fn.flickerBox = function(sizes, colors, delays, keepItOnComplete, zindex, targetDOMElm) {
	//traceOut('flickerBox()...');
	
	if(!zindex) zindex = 0;
	if(!targetDOMElm) targetDOMElm = $('body');
	if(!sizes) sizes = [];
	
	var _this = this;
	var sizesCount = 0;
	var rect;
	
	startNextRect();
	
	function setupARect() {
		//traceOut('flickerBox().setupARect():parent.id=='+$(_this).parent().attr('id'))
		
		clearRect();
		
		rect = $('<div class="__flickerBox_Rect"></div>');
		rect.css({
			'position':'absolute',
			'z-index':-100,
			'width':sizes[sizesCount].width,
			'height':sizes[sizesCount].height,
			'background-color':colors[sizesCount],
			'left':_this.offset().left - $(_this).parent().offset().left + $(_this).width()*.5 - sizes[sizesCount].width*.5,
			'top':_this.offset().top - $(_this).parent().offset().top + $(_this).height()*.5 - sizes[sizesCount].height*.5
		});
		
		$(_this).parent().append(rect);
		
		sizesCount++;
		
		_this.data('__flickerBoxObj',rect);
		_this.data('__flickerBox_TimerId', setTimeout(function() {
			startNextRect();
		}, delays[sizesCount]));
		
	}
	
	function clearRect() {
		_this.data('__flickerBoxObj',null);
		$('.__flickerBox_Rect').remove();
		clearTimeout(_this.data('__flickerBox_TimerId'));
	}
	
	function startNextRect() {
		if(sizesCount < sizes.length) {
			setupARect();
		} else {
			if(!keepItOnComplete) clearRect();
		}
	}
	
}})(jQuery);
