(function($) {
	$.fn.fast_tabs = function(selector, user_options) {
		var containers = $(selector);
		var tabs = this;
		
		if (containers.length != this.length) {
			throw 'The number of tabs needs to be equals to number of containers';
		}
		
		var options = {
			selected_index: 0,
			current_tab_class: null
		};
		
		$.extend(options, user_options);
		
		if (options.selected_index < 0) {
			options.selected_index = tabs.length - options.selected_index - 1;
		} else if (options.selected_index > (tabs.length - 1)) {
			options.selected_index = options.selected_index % tabs.length;
		}
		
		var set_tab = function(index) {
			containers.hide();
			$(containers[index]).show();
			
			if (options.current_tab_class) {
				tabs.removeClass(options.current_tab_class);
				
				$(tabs[index]).addClass(options.current_tab_class);
			}
		};
		
		set_tab(options.selected_index);
		
		for (var i = 0; i < containers.length; i++) {
			var c = $(containers[i]);
			var t = $(this[i]);
			
			t.click((function() {
				var x = i;
				
				return function(event) {
					set_tab(x);
					
					return false;
				}
			})());
		}
	}
})(jQuery);