﻿$.fn.slideshow = function(options) {
    var settings = {
        timeout: '2000',
        type: 'sequence',
        caption: null,
        plinks: null
    }
    if(options)
        $.extend(settings, options);

    var slides = $(this).children();
    var pauseState = 0;
    var current = 0;
    var last = slides.length - 1;
    var timer = '';

    var change = function () {
        if ( pauseState == 0 ) {
            for (var i = 0; i < slides.length; i++) {
                $(slides[i]).css('display', 'none');
            }
            $(slides[last]).css('display', 'block').css('zIndex', '0');
            $(slides[current]).css('zIndex', '1').fadeIn('slow');

            $(settings.plinks).children().eq(last).removeClass("hover");
            $(settings.plinks).children().eq(current).addClass("hover");

            if ( settings.caption != null ) {
                $(settings.caption).text($(slides[current]).attr("title"));
            }

            if ( settings.type == 'sequence' ) {
                if ( ( current + 1 ) < slides.length ) {
                    current = current + 1;
                    last = current - 1;
                }
                else {
                    current = 0;
                    last = slides.length - 1;
                }
            }
            else if ( settings.type == 'random' ) {
                last = current;
                while ( current == last ) {
                    current = Math.floor ( Math.random ( ) * ( slides.length ) );
                }
            }
            else {
                alert('type must either be \'sequence\' or \'random\'');
            }
            timer = setTimeout(change, settings.timeout);
        }
    }


    var pause = function() {
        if ( pauseState == 0 ) {
            pauseState = 1;
            clearTimeout(timer);
        }
        else {
            pauseState = 0;
            //change();
            timer = setTimeout(change, settings.timeout);
        }
        return false;
    }

    //this.css('position', 'relative');

    $.each(slides, function(i){
        $(slides[i]).css('zIndex', slides.length - i).css('position', 'absolute').css('top', '0').css('left', '0');
        $(slides[i]).hover(pause,pause);

        if ( settings.plinks != null ) {
            $("<a>"+ (i+1) +"</a>").click(function(){
                current = i;
                //last = i;
                clearTimeout(timer);
                change();
            }).hover(function(){$(this).addClass("hover");},function(){if(i != last)$(this).removeClass("hover");}).appendTo($(settings.plinks));
        }

    });

    if ( settings.type == 'sequence' ) {
        //timer = setTimeout(change, settings.timeout);
        change();
    }
    else if ( settings.type == 'random' ) {
        do { current = Math.floor ( Math.random ( ) * ( slides.length ) ); } while ( current == 0 )
        //timer = setTimeout(change, settings.timeout);
        change();
    }
    else {
        alert('type must either be \'sequence\' or \'random\'');
    }

    return this;
};