(function($) {	

	$.fn.runningString = function(callerSettings) {	
		var me = this;		
		if(!me.length) { return false; }
		
		/*
		function log(str) {
			$('<p/>').text(str).appendTo("#console");
		}
		*/
		
        ////////////////////////////////////////////////////////////////////////
        // Normalizing parameters and defining local vars

		me.rsOptions = {
			state: 'stopped',
			oldIE: !$.support.cssFloat,
			autoWidth: false
		};		

        me.rsSettings = $.extend({
			width: 'auto',
			speed: 100
        }, callerSettings||{});
		
		if(me.rsSettings.width == 'auto') {
			me.rsSettings.width = me.parent().width();
			me.rsOptions.autoWidth = true;
		}		
		
		var testBlock = $('<span/>').text('a').appendTo(me);		
		me.rsOptions.stringWidth = testBlock.position().left - me.position().left;		
		testBlock.remove();		
		
		var runContainer = $('<div/>').addClass('rsRunContainer').css('overflow', 'hidden').width(me.rsSettings.width);
		var runningBlock = $('<div/>').addClass('rsRunningBlock');
		me.wrapInner(runningBlock);
		me.wrapInner(runContainer);

			// это хак для ie6-7
		$('.rsRunningBlock b:first, .rsRunningBlock strong:first').css('background','none').css('padding-left','0px');
				
		var length = me.rsSettings.width + me.rsOptions.stringWidth;
		me.rsOptions.duration = (length / me.rsSettings.speed) * 1000;
		
		if(me.rsOptions.autoWidth) {
			window.onresize = function() {
				me.rsSettings.width = me.parent().width();
				me.find('div.rsRunContainer').width(me.rsSettings.width);
				var length = me.rsSettings.width + me.rsOptions.stringWidth;
				me.rsOptions.duration = (length / me.rsSettings.speed) * 1000;
			};
		}		
		
        ////////////////////////////////////////////////////////////////////////
        // Animation control functions	
		
		me.rsStart = function() {		
			var runningBlock = me.find('div.rsRunningBlock');
			var duration = me.rsOptions.duration;
			if(me.rsOptions.state != 'paused') {
				runningBlock.css('margin-left', me.rsSettings.width);
			} else {
				var length =  me.rsOptions.stringWidth + parseInt(runningBlock.css('margin-left'));
				duration = (length / me.rsSettings.speed) * 1000;
			}
			me.rsOptions.state = 'playing';
			runningBlock.animate({
				marginLeft: -me.rsOptions.stringWidth
			},
			{
				duration: duration,
				easing: 'linear',
				complete: function() {
					me.rsOptions.state = 'stopped';
					me.rsStart();
				}			
			});
		};
		
		me.rsPause = function() {
			var runningBlock = me.find('div.rsRunningBlock');
			me.rsOptions.state = 'paused';
			runningBlock.stop();
		};
				
		me.rsStart();
		
		return me;	
	}

})(jQuery);
