var Carrossel = {
	Class : function(/*id, next, prev, callback*/){

		// Constructor
		var self = this
		var rotate = false
		var interval
		var painel = jQuery(arguments[0])
		var callback = arguments[1]
		var tamUL = 0
		var direction
		var timeout
		
			if (arguments[1] && arguments[2]) {
				jQuery(arguments[2]).click(function(){ 
					clearInterval(interval)
					movement("before")				
				})
				jQuery(arguments[1]).click(function(){ 
					clearInterval(interval)
					movement("after") 
				})	
				callback = arguments[3]
			}

		//pega a largura e calcula o valor da esquerda
		var item_width = painel.find('li').outerWidth()
		var left_value =  - item_width		
		
		painel.find('li').each(function(){ tamUL += jQuery(this).width() })		
		//move o último item antes do primeiro item
		painel.find('li:first').before( painel.find('li:last') )
				
		//seta o item default para a posição correta
		painel.find('ul').css({ 'left' : left_value, 'width': tamUL })
		
		var movement = function(type){		
			//pegar a posição correta
			if(type == "before")
				var left_indent = parseInt(painel.find('ul').css('left')) + item_width
			else
				var left_indent = parseInt(painel.find('ul').css('left')) - item_width
			//slide o item
			painel.find('ul:not(:animated)').animate({'left' : left_indent}, 250, function(){
				//move o último item e o coloca em primeiro
				if(type == "before")
					painel.find('li:first')[type]( painel.find('li:last') ) 	
				else
					painel.find('li:last')[type]( painel.find('li:first') )								
				//seta o item default para a posição correta
				painel.find('ul').css({'left' : left_value})
					if(callback)
						callback(painel.find('li:eq(1)'))
			})
				
			return false
		}		
		
		callback ? callback(this) : null
					
		this.rotate = function(options){		
			direction = options && options.direction ? options.direction : "next"
			timeout = options && options.timeout ? options.timeout : 4000
				interval = setInterval(function(){
					movement( direction == "next" ? "after" : "before"  )
				}, timeout )
			return this
		}	
		
		this.stop = function(){ clearInterval(interval) ; return this}
		this.play = function(){ 
			interval = setInterval(function(){
				self.rotate({
					direction:direction, timeout:timeout
				})
			}); 
			return this 
		}
		
		this.next = function(){ movement("after") ; return this}
		this.prev = function(){ movement("before") ; return this}
	},
		
	New : function(id, next, prev,options){ return new this.Class( id, next, prev,options ) }	
}	
