/*!
 * Custom RSS scroll animation
 * Called from the page like.
 * e.q. $(ID).rssScroller();
 */

jQuery.fn.rssScroller = function(settings) {
	jQuery.fn.rssScroller.settings = 
	{
			hoverMe:0, 
			speed: 50, 
			distanceSpeed: 5, 
			distanceList:200,
			elementsW:[],
			elementsLi:[],
			firstParentWidth:null,
			lastParentWith:null,
			mask:null,
			currentItem:0,
			delay: 4000,
			uberparentClassName:null,
			setRssScrollAni : function()
			{
				set = jQuery.fn.rssScroller.settings;
				if (set.hoverMe == 0)
				{
					p = set.parent;
					p.css('left', (p.position().left - set.distanceSpeed)+'px');
				}
				
				/**
				 * If a element has reached the beginning of the mask then stop the scroll and
				 * define the custom classes
				 */
				if (Math.abs(set.mask.position().left - ((set.elementsW[set.currentItem]+set.mask.position().left)+p.position().left)) < (set.distanceSpeed+2))
				{
					set.elementsLi[set.currentItem].addClass(set.uberparentClassName + '-li-focus');
				
					setTimeout(function()
						{
							set = jQuery.fn.rssScroller.settings;
							set.elementsLi[(set.currentItem > 0) ? set.currentItem-1 : 0].removeClass(set.uberparentClassName + '-li-focus');
							set.setRssScrollAni();
						}, 
					set.delay);
					
					set.currentItem++;
					return;
				}
				/**
				 * If reached the end the start over
				 */
				if (p.position().left < (0 - (set.lastParentWith-50)))
				{
					p.css('left', set.firstParentWidth + 'px');
					set.currentItem = 0;
					set.setRssScrollAni();
					return;
				}
				else
				{
					setTimeout(set.setRssScrollAni , set.speed)
				}
			}		
	};	
	
	/**
	 * Redefine if custom settings are set
	 */
	for ( i in settings)
	{
		if (typeof(jQuery.fn.rssScroller.settings[i]) != 'undefined')
		{
			jQuery.fn.rssScroller.settings[i] = settings[i];
		}
	};
	
		return this.each(
			function()
			{
				var $strip = jQuery(this);
				var parent = $strip.parent();
				parent.css('left', '0px');
				var set = jQuery.fn.rssScroller.settings;
				
				/**
				 * Set for the first time the width of the parent layer so when 
				 * it grows because of the list elements we always have the 
				 * orig width
				 */
				if (set.firstParentWidth == null)
				{
					set.firstParentWidth = parent.width();
					set.motherParent = $strip.parent().parent().parent();
				}
				$strip.css('margin-left',(set.distanceList)+'px');
				/**
				 * Set the elements width properties and the reference
				 */
				set.elementsW[set.elementsW.length] = (set.distanceList+$strip.position().left);
			
				// Make the parent horizontal bigger
				parent.css('width', parent.width()+($strip.width() + set.distanceList));
				set.lastParentWith = parent.width();
				$strip.attr('class', 'tickerelement');
				/**
				 * When the loop reaches the end of the Rss elements we define 
				 * The mask, the position of the rssticker container, global vars
				 */
				if ($strip.next().html() == null)
				{	
					
					parent.css('visibility', 'visible');
					/**
					 * Set the parent of this element
					 */
					set.parent = parent;
					//parent.css('left', parent.parent().width() + 'px');
					
					/**
					 * Copy the InnerHMTL of the parent.parent
					 */
					parenthtml = parent.parent().parent().html();
					set.uberparentClassName = (parent.parent().parent().attr('class'));
					/**
					 * Clean the parent parent html
					 */
					parent.parent().parent().html('');
					
					/**
					 * Append a mask div to copy the list rss html content inside
					 */
					$('<div id="mask"></div>').appendTo(set.motherParent);
					set.mask = $mask = $('.'+set.motherParent.attr('class')+' #mask');
					$(parenthtml).appendTo($mask);
					
					set.parent =  $('.'+set.motherParent.attr('class')+' #mask #rssticker');
					set.parent.hover(
							function()
							{
								var set = jQuery.fn.rssScroller.settings;
								set.hoverMe = 1;
							},
							function()
							{
								var set = jQuery.fn.rssScroller.settings;
								set.hoverMe = 0;
							}
						);
					
					/**
					 * Set all the redefine elements in a list
					 */
					$('.'+set.motherParent.attr('class')+' #mask #rssticker .tickerelement').each
					(
						function()
						{
							set.elementsLi[set.elementsLi.length] = $(this);
						}
					);
					
					/**
					 * Scroll function of the RssFeed
					 */
					set.setRssScrollAni();
				}
			}
		);			
};
