(function($){
    var xyMouse;
    $.fn.extend({
        scrollGallery: function(options){
            var defaults = {
				speedAutoStart: 2, //Velocità dell'autoStart
				velScroll: 2, //Velocità spostamento
				autoStart: true, //AutoStart
				directionAutoStart: 'left' //left or right
            };
            var options = $.extend(defaults, options);
			
			
            return this.each(function(){
				var a, ul;
				
				a = $('ul li', this).find('a');
				
				ul = $(this).find('ul');
				img = $(this).find('img');
				var width = 0;
				
				ul.css("overflow", "hidden");
				
				$('ul li a img', $(this)).each( function(){
					width += Number(parseFloat($(this).attr('width')));					   
					width += Number(parseFloat($(this).css('marginLeft')));	
					width += Number(parseFloat($(this).css('paddingLeft')));	
					width += Number(parseFloat($(this).css('paddingRight')));	
					width += Number(parseFloat($(this).css('marginRight')));
				});
				
				width = width + 300;
				var direction, widthMask;
				
				ul.css('width', width + 'px');
				var height = Number(parseFloat($(this).css('height')));
				widthMask = Number(parseFloat($(this).css('width'))); //Grandezza Maschera
				xMin = Number(ul.offset().left);
				xMax = Number(width - xMin);
			 	yMin = Number(ul.offset().top);
				yMax = Number(yMin + height);

				//Hover per l'opacità delle immagini
				img.css('opacity', '0.5');
				
				img.hover(
					function(){
						$(this).stop().animate({
							opacity: '1'
						}, 500);
					},
					function(){
						$(this).stop().animate({
							opacity: '0.5'
						}, 500);
					}
				);
				
				$(ul).css('marginLeft', '0px');
				
				//AutoStart
				if(options.autoStart){
					if( options.directionAutoStart == 'left' )$(ul).css('marginLeft', '-'+xMax+'px');
						$.fn.startAnimation( xMax, widthMask, ul, options.velScroll, options.directionAutoStart, options.speedAutoStart );
				}
				
				//Movimento Gallery
				/*$(this).mouseover(function(e){
					//$.fn.stopAnimation(ul);
					//$.fn.refreshXYMouse(e.clientX, e.clientY, $(this) );
					//direction = $.fn.getDirection(widthMask);
					//if($.fn.isPositionActive(xMax, direction, ul))
						//$.fn.startAnimation( xMax, widthMask, ul, options.velScroll, options.directionAutoStart, options.speedAutoStart );
					//else 
						//$.fn.stopAnimation(ul);
				});*/
				
				/*$(this).mouseout(function(e){
					//$.fn.startAnimation(ul);
				});*/
				
				/*$(this).mousemove(function(e){
					//$.fn.refreshXYMouse(e.clientX, e.clientY, $(this));
					//direction = $.fn.getDirection(widthMask);
					//if(!$.fn.isPositionActive(xMax, direction, ul))
						//$.fn.stopAnimation(ul);
				});*/
            });
        },
        
		startAnimation: function( xMax, widthMask, ul, velScroll, directionAutoStart, speedAutoStart ){
			$(ul).everyTime(50, 'scroll', function(){
				$.fn.scrollPhoto(xMax, widthMask, ul, velScroll, true, directionAutoStart, speedAutoStart)
			}, 0);
		},
		stopAnimation: function(ul){
			$(ul).stopTime('scroll');	
		},

		refreshXYMouse: function(mouseX, mouseY, _this) {
			var offset = $(_this).offset();
			var xPos = mouseX - offset.left;
			var yPos = mouseY - offset.top;
			xyMouse = { x: xPos, y: yPos };
			//console.debug("Posizione X Mouse:" + xPos);
		},
		
		//Ottengo true se il mouse è entrato in un'area attiva e non ha superato i limiti
		isPositionActive: function(xMax, direction, ul) {
			var marginLeft = parseFloat(ul.css('marginLeft'));
			//console.debug("MarginLeft UL:" + marginLeft);
			if(direction == 'left'){
				if(marginLeft <= 0)return true;
			}else{
				if(Math.abs(marginLeft) < xMax)return true;
			}
			
		},	
		
		//Ottengo verso quale direzione devo andare left o right
		getDirection: function(widthMask) {
			if(xyMouse.x < (widthMask / 2) )direction = 'left';
			else direction = 'right';
			return direction;
			//console.debug("Direzione:" + direction);
		},	
		
		//Ottengo la velocità in cui devo spostare la gallery
		getSpeed: function(direction, widthMask, velScroll){
			var speed;
			
			if(xyMouse.x > (widthMask / 2) )var x = xyMouse.x - (widthMask / 2);
			else var x = xyMouse.x;
			
			var velAvg = widthMask;
				speed = velScroll;
		
			//console.debug("Px spostamento:" + speed);
			return speed;
		},
		
		scrollPhoto: function( xMax, widthMask, ul, velScroll, autoStart, dirAutoStart, velAutoStart){
			if( !autoStart ){
				var direction = $.fn.getDirection(widthMask);
				var speed = $.fn.getSpeed(direction, widthMask, velScroll);
			}else{
				var direction = dirAutoStart;
				var speed = velAutoStart;
			} 
			if( $.fn.isPositionActive(xMax, direction, ul) ){
				var mLeft = Number(parseFloat(ul.css('marginLeft')));
				if(direction == 'left'){
					var res = mLeft + speed;
					$(ul).css({marginLeft: res+'px'});
				}else{
					var res = mLeft - speed;
					$(ul).css({marginLeft: res+'px'});
				}
			}else{
				$.fn.stopAnimation(ul);
				if( direction == "left" ){
					$.fn.startAnimation( xMax, widthMask, ul, velAutoStart, "right", 2 );
				}else{
					$.fn.startAnimation( xMax, widthMask, ul, velAutoStart, "left", 2 );
				}
					
			}
			
			
		}
	});
})(jQuery);

