

	/* --------------------------
		Products's Carrousel
	-------------------------- */


He.Bootstrap('He.Components.Carrousel');

He.Components.Carrousel.Params = {
	carrousel_ul			: null,
	carrousel_li			: null,
	carrousel_width			: 990,
	carrousel_max			: null,
	ul_width				: null,
	product_width			: 110,
	carrousel_drag			: 108,
	carrousel_track			: 930,
	slider					: null,
	interval_track			: 930,
	interval_arr			: new Array(),
	current_pos				: null,
	handle					: null,
	handle_left				: null,
	currentArrowInterval	: null,
	direction				: null,
	speed					: 0,
	multiplier				: 1.1,
	marker					: null
}

He.Components.Carrousel.SetUp = function()
{
	He.Components.Carrousel.Params.carrousel_ul	= $('#carrousel ul');
	He.Components.Carrousel.Params.carrousel_li	= $('#carrousel ul li');
	He.Components.Carrousel.Params.marker		= $('#carrousel li.scroll-marker');
	
	He.Components.Carrousel.Params.ul_width = (He.Components.Carrousel.Params.carrousel_li.length * He.Components.Carrousel.Params.product_width);
		
	if(He.Components.Carrousel.Params.ul_width > He.Components.Carrousel.Params.carrousel_width)
	{
		He.Components.Carrousel.Params.slider = true;
	}
	
	He.Components.Carrousel.Params.carrousel_max = He.Components.Carrousel.Params.ul_width - He.Components.Carrousel.Params.carrousel_width;
	
	He.Components.Carrousel.Params.carrousel_ul.css('width', He.Components.Carrousel.Params.ul_width);
	
	if(He.Components.Carrousel.Params.ul_width < He.Components.Carrousel.Params.carrousel_width)
	{
		He.Components.Carrousel.Params.carrousel_ul.css('margin', '0 auto');
	}
}

He.Components.Carrousel.SetMarker = function()
{
	var i = 0;
	
	He.Components.Carrousel.Params.carrousel_li.each(function(index)
	{
		var element = $(this);
		if(element.hasClass('scroll-marker'))
		{
			He.Components.Carrousel.Params.interval_arr[i] = {
				l	: null,
				r	: null,
				pi	: {
					cl: (He.Components.Carrousel.Params.product_width * index),
					fl: 0
				}
			};
			/**/
			var title		= element.attr('title');
			var title_full	= '';
			
			if(title.length > 18)
			{
				title_full	= ' title="'+title+'"';
				title		= title.substr(0, 15) +'...';
			}
			
			$('<span class="product truncate"'+title_full+'>'+title+'</span>').appendTo("#slider");
			/**/
			element.attr('title', '');
			i++;
		}		
	});
	
	var marker_zone		= Math.floor(He.Components.Carrousel.Params.interval_track / i);
	var marker_center	= Math.floor(
									 (marker_zone / 2) - (He.Components.Carrousel.Params.carrousel_drag / 2)
									);
	var element_margin	= 0;
	var element_right	= 0;
	console.log('marker_zone: '+marker_zone+' - marker_center:'+marker_center);
	$('#slider span.product').each(function(index)
	{
		var marker_left		= element_margin + marker_center;
		var marker_right	= marker_left + He.Components.Carrousel.Params.carrousel_drag;
		
		console.log('marker_left: '+marker_left+' - marker_right:'+marker_right);
		
		He.Components.Carrousel.Params.interval_arr[index].l = marker_left;
		He.Components.Carrousel.Params.interval_arr[index].r = marker_right;

		He.Components.Carrousel.Params.interval_arr[index].pi.fl = Math.floor(
			100 * ((marker_left + marker_center) / He.Components.Carrousel.Params.carrousel_track)
		);

		$(this).css('margin-left', marker_left);
		element_margin = element_margin + marker_zone;
	});
}

He.Components.Carrousel.CheckIndex = function(value)
{
	var arr_size	= He.Components.Carrousel.Params.interval_arr.length;
	
	var val = value / 100;
	var pos = He.Components.Carrousel.Params.current_pos;
		
	for(var i = 0; i < arr_size; i++)
	{
		if(pos >= He.Components.Carrousel.Params.interval_arr[i].l && pos <= He.Components.Carrousel.Params.interval_arr[i].r)
		{
			He.Components.Carrousel.ElementsPositions(	He.Components.Carrousel.Params.interval_arr[i].pi.cl, 
														He.Components.Carrousel.Params.interval_arr[i].l, 
														He.Components.Carrousel.Params.interval_arr[i].pi.fl);
			break;
		}
	}
}

He.Components.Carrousel.GetHandleLeft = function()
{
	return parseInt(He.Components.Carrousel.Params.handle.css('left'));
}

He.Components.Carrousel.SetCursorMove = function(direction)
{
	He.Components.Carrousel.Params.handle_left	= He.Components.Carrousel.GetHandleLeft();
	He.Components.Carrousel.Params.speed		= direction;
	He.Components.Carrousel.Params.direction	= parseInt(direction);
	
	switch(direction)
	{
		case -1	:	if(He.Components.Carrousel.Params.handle_left != 0)
					{
						He.Components.Carrousel.CursorMove(); 
						He.Components.Carrousel.Params.currentArrowInterval = setInterval(He.Components.Carrousel.CursorMove, 100);
					}
					break;
					
		case 1	:	if(He.Components.Carrousel.Params.handle_left != 100)
					{
						He.Components.Carrousel.CursorMove(); 
						He.Components.Carrousel.Params.currentArrowInterval = setInterval(He.Components.Carrousel.CursorMove, 100);
					}
					break;
					
		case 0	:	clearInterval(He.Components.Carrousel.Params.currentArrowInterval); 
					He.Components.Carrousel.Params.currentArrowInterval = null; 
					break;
	}
}

He.Components.Carrousel.CursorMove = function()
{
	var ui_value								= (He.Components.Carrousel.GetHandleLeft() + He.Components.Carrousel.Params.speed);
	He.Components.Carrousel.Params.speed		= He.Components.Carrousel.Params.speed * He.Components.Carrousel.Params.multiplier;
	
	if(ui_value <= 0 || ui_value >= 100)
	{
		ui_value = (ui_value < 0 ) ? 0 : 100;	
		clearInterval(He.Components.Carrousel.Params.currentArrowInterval);
	}

	He.Components.Carrousel.SetElementsPositions(ui_value);
	$('a.ui-slider-handle').css('left', ui_value+'%');
}

He.Components.Carrousel.SetElementsPositions = function(value)
{
	var val = value / 100;
	
	var true_pos = He.Components.Carrousel.Params.carrousel_track * val;
	
	var c_pos	= Math.floor((He.Components.Carrousel.Params.ul_width - He.Components.Carrousel.Params.carrousel_width) * val);
	var fh_pos	= Math.floor((He.Components.Carrousel.Params.carrousel_track - He.Components.Carrousel.Params.carrousel_drag) * val);
	
	He.Components.Carrousel.Params.current_pos = true_pos;

	He.Components.Carrousel.ElementsPositions(c_pos, fh_pos, null);

}

He.Components.Carrousel.ElementsPositions = function(c_pos, fh_pos, t_pos)
{
	if(c_pos > (He.Components.Carrousel.Params.ul_width - He.Components.Carrousel.Params.carrousel_width))
	{
		c_pos = He.Components.Carrousel.Params.ul_width - He.Components.Carrousel.Params.carrousel_width;
	}
	
	if(jQuery.browser.msie && jQuery.browser.version < 7)
	{
		He.Components.Carrousel.Params.carrousel_ul.css('margin-left', -c_pos+'px');
		$('#fake_handle').css('left', fh_pos+'px');
	}
	else
	{
		He.Components.Carrousel.Params.carrousel_ul.stop().animate({marginLeft:-c_pos+'px'},{queue:false, duration:500, easing: 'easeOutCubic'}) ;
		$('#fake_handle').stop().animate({left:fh_pos+'px'},{queue:false, duration:200, easing: 'easeOutCubic'}) ;
	}
	
	if(t_pos != null)
	{
		$('a.ui-slider-handle').css('left', t_pos+'%');
	}
}

He.Components.Carrousel.Init = function()
{
	if(!He.Application.Config.IBrowser)
	{
		$('#carrousel').css('overflow', 'hidden');
		He.Components.Carrousel.SetUp();
		
		if(He.Components.Carrousel.Params.slider)
		{
			$('#carrousel').append('<div id="slider"><div id="handle"></div></div>');
			$('#slider').append('<div id="fake_handle"></div><span class="btn_arrow" id="slider_left" /><span class="btn_arrow" id="slider_right" />');
			
			He.Components.Carrousel.SetMarker();
			
			$('#slider_left').mousedown(function()
			{
				He.Components.Carrousel.SetCursorMove(-1);
			});
			
			$('#slider_right').mousedown(function()
			{
				He.Components.Carrousel.SetCursorMove(1);
			});
			
			$('#slider_right, #slider_left').mouseup(function()
			{
				He.Components.Carrousel.SetCursorMove(0);
			});
	
			$("#handle").slider({
				stop: function(event, ui) 
				{
					He.Components.Carrousel.CheckIndex(ui.value);
				},
				slide: function(event, ui) 
				{
					He.Components.Carrousel.SetElementsPositions(ui.value);
				}
			});
			
			He.Components.Carrousel.Params.handle = $("a.ui-slider-handle");
		}
		
		if(!He.Components.Carrousel.Params.slider && He.Components.Carrousel.Params.marker.size() > 0)
		{
			$('#carrousel').append('<div id="slider" class="no_pointer"></div>');
			He.Components.Carrousel.SetMarker();
		}
	}
	else
	{
		He.Components.Carrousel.SetUp();
		var _obj = $('#carrousel').find('ul').get(0);
		
		myScroll = new iScroll(_obj,'x');
	}
}

