(function ($) {
    var slide = 'slide',
    slidePublic,
    settings,
    defaults = {
        item_container: 'div',
        anim_container: 'blockquote',
        check_child_height: false,
        anim_height: 158,
        anim_child_height: 36,
        open_speed: 300,
        close_speed: 300,
        cont_sel_style: 'sel',
        anim_sel_style: 'anim_block',
        dont_touch: 'opened',
        auto_open: false
    };

    function open(target, force) {
        var this_el = target,
            active_container = this_el.children(settings.item_container);
            act_anim_container = active_container.children(settings.anim_container);
            
        if((!this_el.hasClass(settings.dont_touch) && !active_container.hasClass(settings.cont_sel_style)) || force == true){
            
            act_anim_container.stop(true);
            
            active_container.addClass(settings.cont_sel_style);

            //var height = settings.anim_height;
            var height = 0;
            
            if(settings.check_child_height == true) {
                $(act_anim_container).find("li").each(function(id, item) {
                    height = height + $(item).outerHeight(true);
                })
            } else {
                height = settings.anim_height;
            }

            if(height > 0) {
                act_anim_container.delay(450)                    
                    .addClass(settings.anim_sel_style)
                    .animate( 
                        { height: height + 'px' }, 
                        settings.open_speed, 
                        "swing", 
                        function(){

                        }
                );
            }
        }
    }
    
    function close(target) {
        var this_el = target,
            active_container = this_el.children(settings.item_container);
            act_anim_container = active_container.children(settings.anim_container);

        if(!this_el.hasClass(settings.dont_touch) && active_container.hasClass(settings.cont_sel_style)){
            act_anim_container.stop(true);
            
            if(act_anim_container.height() > 0) {
                act_anim_container.delay(550).animate(
                    { height:"0px" }, 
                    settings.close_speed, 
                    "swing", 
                    function(){
                        $(this).prev("a").removeAttr("style");
                        $(this).removeAttr("style");
                        $(this).removeAttr("class");
                        active_container.removeClass(settings.cont_sel_style);
                    }
                );
            } else {
                active_container.removeClass(settings.cont_sel_style);
            }

        }
    }
    
    slidePublic = $.fn.slide = function (options) {
        element = this;
        $(element).data(slide, $.extend({}, defaults, options));
        settings = $(element).data(slide);
        
        // Автоматически открывает пункт с классом open, если settings.auto_open == true
        speed = settings.open_speed;
        settings.open_speed = 1;
        open($(element).children("li."+settings.dont_touch), settings.auto_open);
        settings.open_speed = speed;
          
        $(element).children("li").each(function(){
            $(this).hover(
                function () {
                    open($(this));
                },
                function () {
                    close($(this));
                }
            )
        })
        

    }

})(jQuery);