/*!
* liScroll 1.1 updated by @davetayls
*
* Examples and documentation at:
* http://the-taylors.org/blog/2010/03/15/liscroll-jquery-news-ticker-customisation-with-next-previous-play/
* http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html
*
* 2007-2009 Gian Carlo Mingati
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
(function($){

jQuery.fn.liScroll = function(settings) {

settings = $.extend({
travelocity: 0.05,
showControls: false
}, settings);

return this.each(function() {
var strip = this,
$strip = $(strip);

$strip.addClass("liScroll-ticker")
$stripItems = $strip.find("li");

var stripWidth = 0,
$mask = $strip.wrap("<div class='liScroll-mask'></div>"),
$tickercontainer = $strip.parent().wrap("<div class='liScroll-container'></div>").parent(),
paused = false,
containerWidth = $strip.parent().parent().width(); //a.k.a. 'mask' width

var currentItemIndex = function() {
var index = 0,
currentLeft = parseInt($strip.css("left")),
accumulatedWidth = 0;

if (currentLeft > 0) {
return 0;
} else {
$strip.find("li").each(function(i) {
if (currentLeft == (0 - accumulatedWidth)) {
index = i;
return false;
}
accumulatedWidth += $(this).width();
if (currentLeft > (0 - accumulatedWidth)) {
index = i;
return false;
}
return true;
});
}
return index;
};
var next = function() {
pause();
var index = currentItemIndex();
if (index >= $stripItems.length - 1) {
$strip.css("left", "0px");
} else {
var $itm = $stripItems.eq(index + 1);
$strip.css("left", (0 - $itm.position().left) + "px");
}
};
var pause = function() {
$strip.stop();
$tickercontainer
.removeClass("liScroll-playing")
.addClass("liScroll-paused");
paused = true;
};
var previous = function() {
pause();
var index = currentItemIndex(),
$itm = null;

if (index == 0) {
$itm = $stripItems.eq($stripItems.length - 1);
} else {
$itm = $stripItems.eq(index - 1);
}
$strip.css("left", (0 - $itm.position().left) + "px");
};
var play = function() {
var offset = $strip.offset(),
residualSpace = offset.left + stripWidth,
residualTime = residualSpace / settings.travelocity;

scrollnews(residualSpace, residualTime);
$tickercontainer
.addClass("liScroll-playing")
.removeClass("liScroll-paused");
paused = false;
};
var togglePlay = function() {
if (paused) {
play();
} else {
pause();
}
};

if (settings.showControls) {
var $prev = $('<div class="liScroll-prev">&lt;</div>')
.appendTo($tickercontainer)
.click(function() { previous.call(strip); });
var $pause = $('<div class="liScroll-play">Pause</div>')
.appendTo($tickercontainer)
.click(function() { togglePlay.call(strip); });
var $next = $('<div class="liScroll-next">&gt;</div>')
.appendTo($tickercontainer)
.click(function() { next.call(strip); });
}

// calculate full width
$strip.width(10000); // temporary width to prevent inline elements wrapping to initial width of ul
$stripItems.each(function(i) {
stripWidth += $(this).outerWidth();
});
$strip.width(stripWidth);

var totalTravel = stripWidth + containerWidth,
defTiming = totalTravel / settings.travelocity; // thanks to Scott Waye

function scrollnews(spazio, tempo) {
$strip.animate(
{ left: '-=' + spazio },
tempo,
"linear",
function() {
$strip.css("left", containerWidth);
scrollnews(totalTravel, defTiming);
}
);
}
scrollnews(totalTravel, defTiming);
$tickercontainer.addClass("liScroll-playing");
$strip.hover(pause, play);
});
};

})(jQuery);
