(function($) {
	
	// define function
	$.fn.tabbed_interface = function(options) {
		
		// valores padrao de variaveis
		var defaults = {
				switch_duration:   500,
				auto_switch:       true,
				auto_switch_delay: 2000,
				contents_tag:      'div',
				specific_list:     ''
		};
		
		// substitui os valores padrao, caso informados
		var options = $.extend(defaults, options);
		
		// para cada seletor oferecido, criamos uma interface com abas
		return this.each(function(el) {
			el = this;
			$(el).find('ul'+options.specific_list).find('li').find('a').click(function() {
				
				var obj = this.hash;
				
				//fade out e fade in. O tempo e divertido por 2 para cada parte da animacao
				$(el).find(options.contents_tag).fadeOut(options.switch_duration);
				setTimeout(function () { $(el).find(options.contents_tag).filter(obj).fadeIn(options.switch_duration); }, options.switch_duration-50 );
				
				// confere a tag ativa uma classe, removendo das outras
				$(el).find('ul'+options.specific_list).find('li').find('a').removeClass('active').filter(this).addClass('active');
								
				// encerra o evento de click
				return false;
			});
			
			// torna os posicionamentos dos conteudos absolutos
			$(el).find(options.contents_tag).css('position','absolute').not(':first').hide();
			
			// se auto_switch for true, iniciamos o timer
			if(options.auto_switch) {
				$(el).bind('tabTimer', function() {
					setTimeout(function() {
						var my_id = $(el).find(options.contents_tag).not(':hidden').next().attr('id') || $(el).find(options.contents_tag).not(':hidden').siblings(options.contents_tag).first().attr('id');
						$(el).find('ul'+options.specific_list).find('li').find('a[href="#'+my_id+'"]').click();
						
						// gatilho, pois o timer esta vinculado a um elemento
						$(el).trigger('tabTimer');
					}, options.auto_switch_delay);
				});
				
				// nova chamada para um novo timer
				$(el).trigger('tabTimer');
			}
		});
	};
})(jQuery);
