jQuery.fn.slideshow = function(options) { var settings = { timeout: '2000', type: 'sequence', pauselink: null, playcallback: null, pausecallback: null } if(options) jQuery.extend(settings, options); var pauseState = 0; var current = 1; var last = 0; var timer = ''; var change = function () { if ( pauseState == 0 ) { for (var i = 0; i < slides.length; i++) { jQuery(slides[i]).css('display', 'none'); } jQuery(slides[last]).css('display', 'block').css('zIndex', '0'); jQuery(slides[current]).css('zIndex', '1').fadeIn('slow'); 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); if ( settings.playcallback != null ) { settings.pausecallback(jQuery('#' + settings.pauselink)); } } else { pauseState = 0; change(); if ( settings.playcallback != null ) { settings.playcallback(jQuery('#' + settings.pauselink)); } } return false; } this.css('position', 'relative'); var slides = this.find('img').get(); jQuery.each(slides, function(i){ jQuery(slides[i]).css('zIndex', slides.length - i).css('position', 'absolute').css('top', '0').css('left', '0'); }); if ( settings.type == 'sequence' ) { timer = setTimeout(change, settings.timeout); } else if ( settings.type == 'random' ) { do { current = Math.floor ( Math.random ( ) * ( slides.length ) ); } while ( current == 0 ) timer = setTimeout(change, settings.timeout); } else { alert('type must either be \'sequence\' or \'random\''); } if ( settings.pauselink != null ) { jQuery('#' + settings.pauselink).click(pause); } return this; };