(function($)
{
    settings = {
        //shorten
        length      : 30,
        appendix    : '...',
        
        //teaser
        teaserBreak : 'teaser-break',   
        teaserMarker : 'hr.teaser',
        teaserEnd   : 'hr.separator',
        teaserWrapper : 'teaser-hide',
        togglerTextHidden : '>> Ganzen Artikel anzeigen',
        togglerTextOpened : '>> Artikel schließen' 
    },
    
    globalMethods = {
        shorten : function(){ 
            $this   = this;
            $this.each(function(){
                sum = 0; 
                $paragraphs = $('p', $(this));
                $paragraphs.each(function(){
                    $p  = $(this);
                    l   = $p.text().length;
                    
                    if (sum < settings.length) {
                        //last p-tag -> shorten
                        if (sum + l > settings.length) {
                            rest    =  (sum + l) - settings.length;                           
                            count   =  l - rest;
                            $p.text($p.text().substr(0, count) + settings.appendix);
                        }
                    } else {
                        $p.remove();
                    }
                    sum += $p.text().length;
                });
            });
        },
        
        oeteaser : function(){
            return this.each(function(){
                $marker = $(settings.teaserMarker, this);
                $marker.each(function(){
                    $break  = $(this).nextAll('.' + settings.teaserBreak).eq(0);
                    $break = $break.nextUntil($(settings.teaserEnd));
                    $break.wrapAll($('<div>', {'class' : settings.teaserWrapper}));
                });
                
                $wrapper    = $('div.' + settings.teaserWrapper);
                $wrapper.before('<a class="toggler details_hidden" href="#">' + settings.togglerTextHidden + '</a>')
                        .hide();
                $('a.toggler').click(privateMethods.teaserToggle);
            });
        }
    },
    
    privateMethods = {
        teaserToggle : function(){
            $toggler    = $(this);
            $target     = $toggler.next('div.' + settings.teaserWrapper);
//            console.log($target);
            if ($toggler.hasClass('details_shown')) {
                $target.slideUp();
                $toggler.text(settings.togglerTextHidden)
                        .removeClass('details_shown')
                        .addClass('details_hidden');
            } else if($toggler.hasClass('details_hidden')) {
                $target.slideDown();
                $toggler.text(settings.togglerTextOpened)
                        .removeClass('details_hidden')
                        .addClass('details_shown');
            }
            return false;
        }
    }
    
    $.fn.ezutils = function(method, options)
    {
        if ( globalMethods[method] ) { 
            $.extend(settings, options);
            return globalMethods[method].apply( this, new Array(options));
        } else {
            $.error('unknown method ' + method + ' in plugin fmAnimate');
        }
    }
})(jQuery);

