jQuery.fn.infiniticker = function(settings) {
		settings = jQuery.extend({
		  speed: 30,
      height: "60px",
      ticker_elements: "li, div, p",
      dir: "rtl" // possible values: rtl, ltr
		}, settings);		
		return this.each(function(){
				var $strip = jQuery(this);
				
				var stripWidth = 0;
				var $mask = $strip.wrap("<div class='mask'></div>");
				var $tickercontainer = $strip.parent().wrap("<div class='tickercontainer'></div>");								
				var containerWidth = $strip.parent().parent().width();	//a.k.a. 'mask' width 	
        $strip.parent().css("overflow", "hidden").css("position", "relative").css("height", settings.height);
				$strip.addClass("newsticker").css("list-style-type", "none").css("position", "absolute");
        $strip.parent().parent().css("overflow", "hidden");
				$strip.children(settings.ticker_elements).each(function(i){
          jQuery(this, i).css("float", "left");
				  stripWidth += jQuery(this, i).width();
				});

        // Für Endlos-Ticker muss der Ticker mindestens so lang sein wie der container,
        // deshalb Childelemente im Zweifelsfall vervielfachen 
        while ($strip.children().length > 0 && stripWidth > 0 && stripWidth < containerWidth) {
          $strip.children(settings.ticker_elements).each(function(i){
            jQuery(this, i).clone().appendTo($strip);
            stripWidth += jQuery(this, i).width();
          });
        }
				$strip.width(stripWidth);			
        
        // Für Endlos-Ticker brauchen wir ein 2. Ticker-Objekt
        var $strip2 = $strip.clone().attr('id', 'cs_tick2').appendTo($strip.parent());
        
        i = 0;
        var timer;

        function startticker() {
          timer = setInterval(function() {
            if (settings.dir == "ltr") {
              if (i < stripWidth) {
                i++;
              } else {
                i = 0;
              }
              $strip.css("left", i + "px");
              var b = i - stripWidth ;
              $strip2.css("left", b + "px");
            } else {  // default direction: right-to-left
              if (i < stripWidth) {
                i++;
              } else {
                i = 0;
              }
              $strip.css("left", "-" + i + "px");
              var b = stripWidth - i;
              $strip2.css("left", b + "px");
            }
          }, settings.speed);
        }

        function stopticker() {
          clearInterval(timer);
        }

        startticker();

				$strip.hover(function(){
          stopticker();
				},
				function(){
          startticker();
				});			
				$strip2.hover(function(){
          stopticker();
				},
				function(){
          startticker();
				});			
		});	
};

