(function($) {

		// Определяем плагин
    $.organicTabs = function(el, options) {
    
    	// Оригинальный вариант JavaScript
        var base = this;
        
        // Вариант jQuery
        base.$el = $(el);
        
        // Навигация для текущего селектора, переданная в плагин
        base.$nav = base.$el.find(".nav");
        
        // Выполняем один раз при вызове плагина
        base.init = function() {
        
        	// Загружаем опции
            base.options = $.extend({},$.organicTabs.defaultOptions, options);
                        
            // Скрываем то, что нужно скрыть
            $(".hide").css({
                "position": "relative",
                "top": 0,
                "left": 0,
                "display": "none"
            }); 
            
            // При нажатии на закладку навигации...
            base.$nav.delegate("a", "click", function(e) {
            
            	// Предотвращаем обработку по умолчанию
            	e.preventDefault();
            
                // Вычисляем текущий список по классу CSS
                var curList = base.$el.find("a.current").attr("href").substring(1),
                
                // Список переместится в
                    $newList = $(this),
                    
                // Вычисляем ID нового списка
                    listID = $newList.attr("href").substring(1),
                
                // Устанавливаем высоту внешнего контейнера для текущего внутреннего списка
                    $allListWrap = base.$el.find(".list-wrap"),
                    curListHeight = $allListWrap.height();
                		$allListWrap.height(curListHeight);
                                        
                if ((listID != curList) && ( base.$el.find(":animated").length == 0)) {
                                            
                    // Гасим текущий список
                    base.$el.find("#"+curList).fadeOut(base.options.speed, function() {
                        
                        // Выводим новый список в возвратной функции
                        base.$el.find("#"+listID).fadeIn(base.options.speed);
                        
                        // выравниваем внешний контейнер так, чтобы он прижимался к новому списку
                        var newHeight = base.$el.find("#"+listID).height();
                        $allListWrap.animate({
                            height: newHeight
                        }, base.options.speed);
                        
                        // Удаляем выделение - Добавляем закладку 
                        base.$el.find(".nav li a").removeClass("current");
                        $newList.addClass("current");
                        
												// Изменяем адресную строку окна - добавляем параметр URL 
												if (window.history && history.pushState) {
												  // ПРИМЕЧАНИЕ: не берем в счет текущие параметры
													history.replaceState("", "", "?" + base.options.param + "=" + listID);
                        }    
                    });
                    
                }   
                
                // Не будет работать как обычная ссылка.
                // Останавливаем дальнейшую обработку
                return false;
            });
            
        };
        base.init();
    };
    
		$.organicTabs.defaultOptions = {
		    "speed": 200,
		    "param": "tab"
		};
    
    $.fn.organicTabs = function(options) {
        return this.each(function() {
            (new $.organicTabs(this, options));
        });
    };
    
})(jQuery);
