/*!
* webTicker 1.3
* Examples and documentation at: 
* http://jonmifsud.com
* 2011 Jonathan Mifsud
* Version: 1.2 (26-JUNE-2011)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
* Requires:
* jQuery v1.4.2 or later
* 
*/
(function ($) {

    var globalSettings = new Array();

    var methods = {
        init: function (settings) { // THIS 
            settings = jQuery.extend({
                travelocity: 0.05,
                direction: 1,
                moving: true
            }, settings);
            globalSettings[jQuery(this).attr('id')] = settings;
            return this.each(function () {
                var $strip = jQuery(this);
                $strip.addClass("newsticker")
                var stripWidth = 0;
                var $mask = $strip.wrap("<div class='mask'></div>");
                $mask.after("<span class='tickeroverlay-left'>&nbsp;</span><span class='tickeroverlay-right'>&nbsp;</span>")
                var $tickercontainer = $strip.parent().wrap("<div class='tickercontainer'></div>");
                $strip.find("li").each(function (i) {
                    stripWidth += jQuery(this, i).outerWidth(true);
                });
                $strip.width(stripWidth + 200); //20 used for ie9 fix					
                function scrollnews(spazio, tempo) {
                    if (settings.direction == 1)
                        $strip.animate({ left: '-=' + spazio }, tempo, "linear", function () {
                            $strip.children().last().after($strip.children().first());
                            var first = $strip.children().first();
                            var width = first.outerWidth(true);
                            var defTiming = width / settings.travelocity;
                            //$strip.css("left", left);
                            $strip.css("left", '0');
                            scrollnews(width, defTiming);
                        });
                    else
                        $strip.animate({ right: '-=' + spazio }, tempo, "linear", function () {
                            $strip.children().last().after($strip.children().first());
                            var first = $strip.children().first();
                            var width = first.outerWidth(true);
                            var defTiming = width / settings.travelocity;
                            //$strip.css("left", left);
                            $strip.css("right", '0');
                            scrollnews(width, defTiming);
                        });
                }

                var first = $strip.children().first();
                var travel = first.outerWidth(true);
                var timing = travel / settings.travelocity;
                scrollnews(travel, timing);
                $strip.hover(function () {
                    jQuery(this).stop();
                },
				function () {
				    if (globalSettings[jQuery(this).attr('id')].moving) {
				        var offset = jQuery(this).offset();
				        var first = $strip.children().first();
				        var width = first.outerWidth(true);
				        var residualSpace;
				        if (settings.direction == 1) residualSpace = parseInt(jQuery(this).css('left').replace('px', '')) + width;
				        else residualSpace = parseInt(jQuery(this).css('right').replace('px', '')) + width;
				        var residualTime = residualSpace / settings.travelocity;
				        scrollnews(residualSpace, residualTime);
				    }
				});
            });
        },
        stop: function () {
            if (globalSettings[jQuery(this).attr('id')].moving) {
                globalSettings[jQuery(this).attr('id')].moving = false;
                return this.each(function () {
                    jQuery(this).stop();
                });
            }
        },
        cont: function () { // GOOD 	
            if (!(globalSettings[jQuery(this).attr('id')].moving)) {
                globalSettings[jQuery(this).attr('id')].moving = true;
                var settings = globalSettings[jQuery(this).attr('id')];
                return this.each(function () {
                    var $strip = jQuery(this);
                    function scrollnews(spazio, tempo) {
                        if (settings.direction == 1)
                            $strip.animate({ left: '-=' + spazio }, tempo, "linear", function () {
                                $strip.children().last().after($strip.children().first());
                                var first = $strip.children().first();
                                var width = first.outerWidth(true);
                                var defTiming = width / settings.travelocity;
                                //$strip.css("left", left);
                                $strip.css("left", '0');
                                scrollnews(width, defTiming);
                            });
                        else
                            $strip.animate({ right: '-=' + spazio }, tempo, "linear", function () {
                                $strip.children().last().after($strip.children().first());
                                var first = $strip.children().first();
                                var width = first.outerWidth(true);
                                var defTiming = width / settings.travelocity;
                                //$strip.css("left", left);
                                $strip.css("right", '0');
                                scrollnews(width, defTiming);
                            });

                    }
                    var offset = jQuery(this).offset();
                    var first = $strip.children().first();
                    var width = first.outerWidth(true);
                    var residualSpace;
                    if (settings.direction == 1) residualSpace = parseInt(jQuery(this).css('left').replace('px', '')) + width;
                    else residualSpace = parseInt(jQuery(this).css('right').replace('px', '')) + width;
                    var residualTime = residualSpace / settings.travelocity;
                    scrollnews(residualSpace, residualTime);

                });
            }
        }
    };

    $.fn.webTicker = function (method) {

        // Method calling logic
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.webTicker');
        }

    };

})(jQuery);
