$.fn.slideshow = function( overrides )
{
    var defaults = {
        interval: 5,
        omitIndeces: [],
        stopAtIndex: -1,
        transition: 1
    };
    var settings = $.extend( defaults, overrides );
    
    var omitIndeces = {};
    if ( settings.omitIndeces )
    {
        for ( var i=0; i<settings.omitIndeces.length; i++ ) omitIndeces[settings.omitIndeces[i]] = true;
    }
    
    var allSlides = this.children();
    for ( var j=0; j<allSlides.length; j++ )
    {
        var slide = $( allSlides[j] );
        slide.attr( "tabIndex", "-1" );
        if ( ( ( settings.stopAtIndex == -1 ) || j<settings.stopAtIndex ) && !omitIndeces[j]  )
        {
            slide.addClass( "slideshow-display" );
        }
    }
    
    var container = this;
    setInterval( function() {
        var currentActive = $( ".active", container );
        var nextActive = ( currentActive.nextAll( ".slideshow-display" ).length ) ? $( currentActive.nextAll( ".slideshow-display" )[0] ) : $( ".slideshow-display:first", container );
        nextActive
            .animate( {opacity: 1.0}, settings.transition * 1000, function() {
                currentActive
                    .removeClass( "active" )
                    .css( {opacity: 0.0} );
                $( this ).addClass( "active" );
            });
    }, settings.interval * 1000 );
}
