(function($){
	$.jqContentSlider = function(el, options)
	{
		var base = this;
		//Context Element
		base.contextEl = $(el); 
	
		base.setEvents = function()
		{
			//Configurar o evento click para o elemento que retrocede o slide
			if(base.options.prev != '')
			{
				$(base.options.prev).click(function(){
					if(base.options.autoSlide)
					{
						clearInterval(base.autoRun);
					}

					base.prevSlide();
				});
			};
			
			//Configurar o evento click para o elemento que avança o slide
			if(base.options.next != ''){
				$(base.options.next).click(function(){
					if(base.options.autoSlide)
					{
						clearInterval(base.autoRun);
					}

					base.nextSlide();
				});
			};
			
			//Configurar o autoslide
			if(base.options.autoSlide)
			{
				base.autoSlide();
			};
		};
		
		base.configAutoSlideElement = function()
		{
			if(base.options.autoSlideElement != '')
			{
				var i=-1;
				$(base.options.autoSlideElement).bind({
					mouseenter : function(){
						++i;
						//Efectuar logo uma mudança
						if(i == 0)
						{
							if(base.options.autoSlideDirection == 'prev')
							{
								base.prevSlide();
							}
							else if(base.options.autoSlideDirection == 'next')
							{
								base.nextSlide();
							}
						}
						
						base.autoSlide();
					},
					
					mouseleave : function(){
						i=-1;
						clearInterval(base.autoRun);
					}
				});
			};
		};
		
		base.buildNavigation = function()
		{
			if(base.options.slideNavigation && base.options.slideNavigationElement !='')
			{
				//Criar elementos da paginação
				if(base.options.buildNavigation)
				{
					base.childs.each(function(i){
						var elemClass = 'unsel';
						
						if(i == (base.options.startSlide - 1))
						{
							elemClass = 'sel';
						}
	
						var objAttrLink = {
							'class' : elemClass,
							'href' : '#',
							'rel' : i
						};
						
						$(base.options.slideNavigationElement).append($(document.createElement('li')).append($(document.createElement('a')).attr(objAttrLink)));
					});
					
					//Calcular width do elemento
					if(base.options.setNavigationElementWidth)
					{
						var ulChilds = $(base.options.slideNavigationElement).children().length,
						childWidth = $(base.options.slideNavigationElement + ' li:last').outerWidth(true);
						
						$(base.options.slideNavigationElement).width(parseInt((ulChilds * childWidth), 10));
					}
				}
				else
				{
					$(base.options.slideNavigationElement + ' li:eq(' + (base.options.startSlide - 1) + ') a').attr('class', 'sel');
				}

				//Adicionar evento aos elementos previamente criados
				$(base.options.slideNavigationElement + ' li a').click(function(ev){
					ev.preventDefault();
					
					clearInterval(base.autoRun);
					
					var that = $(this);
					
					if(base.options.msiedetection && $.browser.msie)
					{
						$(base.childs[base.currentSlide - 1]).hide();
					}
					else
					{
						$(base.childs[base.currentSlide - 1]).fadeOut('fast', 'linear');
					}
					
					$(base.options.slideNavigationElement + ' li a.sel').attr('class', 'unsel');
					
					base.currentSlide = parseInt(that.attr('rel'), 10) + 1;
					
					if(base.options.msiedetection && $.browser.msie)
					{
						$(base.childs[base.currentSlide - 1]).show();
					}
					else
					{
						$(base.childs[base.currentSlide - 1]).fadeIn(base.options.animSpeed, 'linear');
					}
					
					that.attr('class', 'sel');
					
					//Configurar o autoslide
					if(base.options.autoSlide && !base.options.stopAutoSlideWhenClick){
						base.autoSlide();
					}
				});
			};
		};
		
		base.prevSlide = function()
		{
			if(base.currentSlide == 1)
			{
				base.currentSlide = base.totChilds;
				
				if(base.options.msiedetection && $.browser.msie)
				{
					$(base.childs[0]).hide();
					$(base.childs[base.currentSlide - 1]).show();
				}
				else
				{
					$(base.childs[0]).fadeOut('fast', 'linear');
					$(base.childs[base.currentSlide - 1]).fadeIn(base.options.animSpeed, 'linear');
				}
				
				//Seleccionar elemento de navegação
				if(base.options.slideNavigation && base.options.slideNavigationElement !='')
				{
					base.slideNavigationCurrent(base.currentSlide - 1);
				}
			}
			else
			{
				if(base.options.msiedetection && $.browser.msie)
				{
					$(base.childs[base.currentSlide - 1]).hide();
					$(base.childs[base.currentSlide - 2]).show();
				}
				else
				{
					$(base.childs[base.currentSlide - 1]).fadeOut('fast', 'linear');
					$(base.childs[base.currentSlide - 2]).fadeIn(base.options.animSpeed, 'linear');
				}
				
				//Seleccionar elemento de navegação
				if(base.options.slideNavigation && base.options.slideNavigationElement !='')
				{
					base.slideNavigationCurrent(base.currentSlide - 2);
				}

				base.currentSlide--;
			}
		};
	
		base.nextSlide = function()
		{
			if(base.currentSlide == base.totChilds)
			{
				base.currentSlide = 1;
				
				if(base.options.msiedetection && $.browser.msie){
					$(base.childs[base.totChilds - 1]).hide();
					$(base.childs[base.currentSlide - 1]).show();
				}
				else{
					$(base.childs[base.totChilds - 1]).fadeOut('fast', 'linear');
					$(base.childs[base.currentSlide - 1]).fadeIn(base.options.animSpeed, 'linear');
				}
					
				//Seleccionar elemento de navegação
				if(base.options.slideNavigation && base.options.slideNavigationElement !=''){
					base.slideNavigationCurrent(base.currentSlide - 1);
				}
			}
			else
			{
				if(base.options.msiedetection && $.browser.msie)
				{
					$(base.childs[base.currentSlide - 1]).hide();
					$(base.childs[base.currentSlide]).show();
				}
				else
				{
					$(base.childs[base.currentSlide - 1]).fadeOut('fast', 'linear');
					$(base.childs[base.currentSlide]).fadeIn(base.options.animSpeed, 'linear');
				}
				
				//Seleccionar elemento de navegação
				if(base.options.slideNavigation && base.options.slideNavigationElement !=''){
					base.slideNavigationCurrent(base.currentSlide);
				}
				
				base.currentSlide++;
			}
		};
			
		//Função de autoslide
		base.autoSlide = function()
		{
			if(base.options.autoSlideDirection == 'prev'){
				base.autoRun = setInterval(function (){ base.prevSlide()}, base.options.autoSlideInterval);
			}
			else if(base.options.autoSlideDirection == 'next'){
				base.autoRun = setInterval(function (){ base.nextSlide()}, base.options.autoSlideInterval);
			}
		};
		
		base.slideNavigationCurrent = function(toCompare)
		{
			$(base.options.slideNavigationElement + ' li a.sel').attr('class', 'unsel');
			
			$(base.options.slideNavigationElement + ' li a').filter(function(i){
				return (parseInt($(this).attr('rel'), 10) == (toCompare)) ? true : false;
			}).attr('class', 'sel');
		};
		
		base.init = function()
		{
			base.options = $.extend($.jqContentSlider.defaultOptions, options);
			
			base.childs = base.contextEl.children().hide();
			$(base.childs[base.options.startSlide - 1]).show();
			
			base.currentSlide = base.options.startSlide;
			base.totChilds = base.childs.length;
			
			base.setEvents();
			base.buildNavigation();
			base.configAutoSlideElement();
		}
		
		base.init();
	};
	
	$.jqContentSlider.defaultOptions = {
		animSpeed : 600,
		prev : '',
		next : '',
		autoSlide : false,
		autoSlideInterval : 1000,
		autoSlideElement : '',
		autoSlideDirection : 'next',
		slideNavigation : false,
		slideNavigationElement : '',
		buildNavigation : true,
		setNavigationElementWidth : true,
		stopAutoSlideWhenClick : false,
		startSlide : 1,
		msiedetection : true
	};
	
	$.fn.jqContentSlider = function(options)
	{
		return this.each(function(){
			(new $.jqContentSlider(this, options));
		});
	};
})(jQuery);
