﻿// Call this constructor function with an object defining the following properties:
// .sliderobj = the object to act on
// .pausebutton = the pause button to use with this

function LoopSlider(inob)
{
	var speed = _adjustScrollSpeed(inob.speed);
	var time = inob.time;
	// inob.wrapperid = the DOM id of the display element
	// var wrapperid = inob.wrapperid;
	var wrapperwidth = $('#' + inob.wrapperid).width();
	// inob.sliderid = the DOM id of the display element
	var slider = $('#' + inob.sliderid);
	var sliderwidth = $(slider).width();
	if(sliderwidth < wrapperwidth)
		return;
	$(slider).css({'position':'absolute','left':0});
	var sc = $(slider).children();
	for(var x = (sc.length - 1); x > -1; x--)
	{
		if($(sc[x]).attr('slider') == 'element')
		{
			var p = $(sc[x]).position();
			$(sc[x]).css({'position':'absolute','left':p.left,'top':p.top});
			$(sc[x]).data('cloned', false);
			$(sc[x]).data('xpos', p.left);
			$(sc[x]).data('width', $(sc[x]).width());
		}
		else
		{
			$(sc[x]).remove();
		}
	}
	var sliderfunc = speed < 0 ? _left : _right;
	var inslide = false;
	var pauseloop = false;

	// The left slide action is perford in here
	function _left()
	{
		if(pauseloop)
		{
			return;
		}
		inslide = true;
		var sc = $(slider).children();
		var currentx = $(sc[(sc.length - 1)]).data('xpos') + $(sc[(sc.length - 1)]).data('width');
		for(var x = 0; x < sc.length; x++) {
			var e = sc[x];
			var xpos = $(e).data('xpos');
			var xwidth = $(e).data('width');
			if(x == 0)
			{
				if($(e).data('cloned') && xpos + xwidth < 0)
				{
					$(e).remove();
					continue;
				}
				else if(xpos < 0 && !$(e).data('cloned'))
				{
					var cloner = $(e).clone();
					$(slider).append(cloner);
					$(cloner).css('left', (currentx + speed));
					$(cloner).data('xpos', (currentx + speed));
					$(cloner).data('cloned', false);
					$(cloner).data('width', xwidth);
					$(e).data('cloned', true);
					currentx += xwidth;
				}
			}
			$(e).css({'left':(xpos + speed)});
			$(e).data('xpos', (xpos + speed));
		}
		inslide = false;
		setTimeout(sliderfunc, time)
	}

	// The right slide action is perford in here
	function _right()
	{
		if(pauseloop)
		{
			return;
		}
		inslide = true;
		var sc = $(slider).children();
		var currentx = $(sc[0]).data('xpos');
		for(var x = sc.length - 1; x > -1; x--) {
			var e = sc[x];
			var xpos = $(e).data('xpos');
			var xwidth = $(e).data('width');
			if((xpos + xwidth) > wrapperwidth)
			{
				if(xpos > wrapperwidth && $(e).data('cloned'))
				{
					$(e).remove();
					continue;
				}
				else if(!$(e).data('cloned'))
				{
					var cloner = $(e).clone();
					$(slider).prepend(cloner);
					currentx -= xwidth;
					$(cloner).css({'left':(currentx + speed)});
					$(cloner).data('xpos', (currentx + speed));
					$(cloner).data('cloned', false);
					$(cloner).data('width', xwidth);
					$(e).data('cloned', true);
				}
			}
			$(e).css({'left':(xpos + speed)});
			$(e).data('xpos', (xpos + speed));
		}
		inslide = false;
		setTimeout(sliderfunc, time)
	}
	
	// The up/down slide action is performed in here
	function _down()
	{
	}

	// The up/down slide action is performed in here
	function _up()
	{
	}

	// The pause function
	this.stop = function()
	{
		pauseloop = true;
	}
	
	var start_speed = 0;
	var start_obj = false;

	this.start = function(obj)
	{
		_start(obj);
	}
	
	function _start(obj)
	{
		if(obj)
		{
			start_speed = _adjustScrollSpeed(obj.speed);
			start_obj = true;
		}
		else
		{
			start_obj = true;
		}
		pauseloop = true;
		if(inslide)
		{
			setTimeout('_start', 10)
		}
		if(start_obj)
		{
			var changedirection = ((speed < 0 && start_speed < 0) || (speed > 0 && start_speed > 0)) ? false : true;
			speed = start_speed;
			var sc = $(slider).children();
			if(changedirection && obj.speed < 0)
			{
				if($(sc[(sc.length - 1)]).data('cloned'))
				{
					$(sc[(sc.length - 1)]).remove();
					// $(sc[0]).remove();
				}
				sliderfunc = _left;
			}
			else if(changedirection && obj.speed > 0)
			{
				if($(sc[0]).data('cloned'))
				{
					$(sc[0]).remove();
					// $(sc[(sc.length - 1)]).remove();
				}
				sliderfunc = _right;
			}
			if(changedirection)
			{
				sc = $(slider).children();
				for(var x = 0; x < sc.length; x++)
				{
					$(sc[x]).data('cloned', false);
				}
			}
		}
		pauseloop = false;
		setTimeout(sliderfunc, 10)
	}
	
	function _adjustScrollSpeed(sp)
	{
		if($.browser.webkit)
		{
			return (sp / 4);
		}
		else if($.browser.mozilla)
		{
			return (sp / 2);
		}
		else
		{
			return sp;
		}
	}

}
