(function($) {
	$.fn.roleta = function(options){
			
		this.each(function(){
						   
			//DEFAULT CONFIGS
			//-------------------------------------
			var defaults = {
				moveView: false,
				boundaries: true,
				autoFoward: false,
				timeFoward: 5000,
				globalWidth: 0
			}
			
			var $ro = $.extend(defaults, options);
			$ro.obj = $(this);
			$ro.interval;
			$ro.containerWidth = $(this).find(".roleta_container").width();
			$ro.globalWidth = 0;
			var qtdElements = $(this).find(".roleta_container .global").children().length;
			var qtdElementsPerView = Math.floor($ro.containerWidth/$ro.elementWidth);
			
			//-------------------------------------
			if(!$ro.boundaries){
				if(qtdElements>qtdElementsPerView){
					lastElementsView = qtdElements-qtdElementsPerView-1;
					var lastElement = $(this).find(".roleta_container .global").children(":gt("+lastElementsView+")");
					var firstElement = $(this).find(".roleta_container .global").children(":lt("+qtdElementsPerView+")");
					$(firstElement).clone().appendTo($(this).find(".roleta_container .global"));
					$(lastElement).clone().prependTo($(this).find(".roleta_container .global"));
				}
			}
		
			qtdElements = $(this).find(".roleta_container .global").children().length;
			$ro.globalWidth = qtdElements*$ro.elementWidth;
			
			//alert(qtdElements+" * "+$ro.elementWidth+" = "+$ro.globalWidth+" | "+$ro.boundaries);
			
			$(this).find(".roleta_container .global").width($ro.globalWidth);
			$(this).find(".roleta_container .global").css("marginLeft", "0");
			//alert($ro.globalWidth+" - "+$ro.containerWidth);
			if($ro.globalWidth<=$ro.containerWidth){
				$(this).find("img.foward").attr("src", $ro.rightArrowDisabled);
				$(this).find(".btn_right a").attr("onclick","");
				$(this).find("img.backward").attr("src", $ro.leftArrowDisabled);
				$(this).find(".btn_left a").attr("onclick","");
			}else{
				if($ro.autoFoward)$ro.interval = setInterval(function(){foward($ro);}, $ro.timeFoward);
				if($ro.boundaries){
					$(this).find("img.foward").attr("src", $ro.rightArrowEnabled);
					$(this).find(".btn_right a").click(function(){foward($ro);});
					$(this).find("img.backward").attr("src", $ro.leftArrowDisabled);
					$(this).find(".btn_left a").unbind("click");
				}else{
					$(this).find(".roleta_container .global").css("marginLeft",-$ro.containerWidth+$ro.elementWidth+"px");
					$(this).find("img.foward").attr("src", $ro.rightArrowEnabled);
					$(this).find(".btn_right a").click(function(){foward($ro);});
					$(this).find("img.backward").attr("src", $ro.leftArrowEnabled);
					$(this).find(".btn_left a").click(function(){backward($ro);});
				}
			}
		});
		
		function foward($ro){
			if($ro.moveView){
				var margin = $($ro.obj).find(".roleta_container .global").css("marginLeft").replace("px","");
				var leftBound = -($ro.globalWidth-$ro.containerWidth);
				
				$($ro.obj).find(" .btn_right a").unbind("click");
				
				if((margin-$ro.containerWidth)<leftBound){
					move = margin-leftBound;
					moveRoleta(-move, margin, $ro);
				}else{
					moveRoleta(-$ro.containerWidth, margin, $ro);
				}
			}else{
				var margin = $($ro.obj).find(" .roleta_container .global").css("marginLeft").replace("px","");
				moveRoleta(-$ro.elementWidth, margin, $ro);
			}
			
		}
		
		function backward($ro){
			if($ro.moveView){
				var margin = $($ro.obj).find(".roleta_container .global").css("marginLeft").replace("px","");
				
				$($ro.obj).find(".btn_left a").unbind("click");
				if(margin > -$ro.containerWidth){
					move = -margin;
					$($ro.obj).find(".btn_right a").unbind("click");
					moveRoleta(move, margin, $ro);
				}else{
					moveRoleta($ro.containerWidth, margin, $ro);
				}
			}else{
				var margin = $($ro.obj).find(".roleta_container .global").css("marginLeft").replace("px","");
				moveRoleta($ro.elementWidth, margin, $ro);
			}	
		}
		
		function moveRoleta(num, margin, $ro){
			$($ro.obj).find(".btn_left a").unbind("click");
			$($ro.obj).find(".btn_right a").unbind("click");
			var value = parseInt(margin)+num;
			$($ro.obj).find(".roleta_container .global").animate({ 
				marginLeft: parseInt(value)+"px"
			}, 250, "swing", function(){verifica($ro);} );
		} 
		
		function verifica($ro){
			if($ro.autoFoward) clearInterval($ro.interval);			
			var margin = $($ro.obj).find(".roleta_container .global").css("marginLeft").replace("px","");
			
			//$ro.globalWidth = $($ro.obj).find(" .roleta_container .global").width();
			//$ro.containerWidth = $($ro.obj).find(" .roleta_container").width();
			
			var leftBound = ($ro.globalWidth-$ro.containerWidth)*(-1);
			
			if(margin==0 && $ro.globalWidth>$ro.containerWidth){
				if($ro.boundaries){
					$($ro.obj).find("img.backward").attr("src", $ro.leftArrowDisabled);
					$($ro.obj).find("img.foward").attr("src", $ro.rightArrowEnabled);
					$($ro.obj).find(".btn_right a").click(function(){foward($ro);});
					$($ro.obj).find(".btn_left a").unbind("click");
					if($ro.autoFoward) $ro.interval = setInterval(function(){foward($ro);}, $ro.timeFoward);
				}else{
					$($ro.obj).find(".roleta_container .global").css("marginLeft",(leftBound+$ro.containerWidth)+"px");
					$($ro.obj).find("img.foward").attr("src", $ro.rightArrowEnabled);
					$($ro.obj).find(".btn_right a").click(function(){foward($ro);});
					$($ro.obj).find("img.backward").attr("src", $ro.leftArrowEnabled);
					$($ro.obj).find(".btn_left a").click(function(){backward($ro);});
					if($ro.autoFoward)$ro.interval = setInterval(function(){foward($ro);}, $ro.timeFoward);
				}
			}else if(margin==leftBound && $ro.globalWidth>$ro.containerWidth){
				if($ro.boundaries){
					$($ro.obj).find("img.foward").attr("src", $ro.rightArrowDisabled);
					$($ro.obj).find("img.backward").attr("src", $ro.leftArrowEnabled);
					$($ro.obj).find(".btn_left a").click(function(){backward($ro);});
					$($ro.obj).find(".btn_right a").unbind("click");
				}else{
					$($ro.obj).find(".roleta_container .global").css("marginLeft",-$ro.containerWidth+"px");
					$($ro.obj).find("img.foward").attr("src", $ro.rightArrowEnabled);
					$($ro.obj).find(".btn_right a").click(function(){foward($ro);});
					$($ro.obj).find("img.backward").attr("src", $ro.leftArrowEnabled);
					$($ro.obj).find(".btn_left a").click(function(){backward($ro);});
					if($ro.autoFoward)$ro.interval = setInterval(function(){foward($ro);}, $ro.timeFoward);
				}
			}else{
				$($ro.obj).find("img.foward").attr("src", $ro.rightArrowEnabled);
				$($ro.obj).find(".btn_right a").click(function(){foward($ro);});
				$($ro.obj).find("img.backward").attr("src", $ro.leftArrowEnabled);
				$($ro.obj).find(".btn_left a").click(function(){backward($ro);});
				if($ro.autoFoward)$ro.interval = setInterval(function(){foward($ro);}, $ro.timeFoward);
			}
			
		}
	};
	
})(jQuery);
