jQuery.fn.slideshow = function(options) {
	var settings = {
		timeout: '5000',
		tag: 'img',
		pauselink: null,
		playcallback: null,
		pausecallback: null
	}
	if(options)
		jQuery.extend(settings, options);
	
	var params = {
		pauseState: 0,
		current: 1,
		last: 0,
		timer: ''
	}

	var slides = new Array;
	
	var change = function () {
		//alert(settings.id);
		if ( params.pauseState == 0 ) {
			for (var i = 0; i < slides.length; i++) {
				jQuery(slides[settings.id][i]).css('display', 'none');
			}
			jQuery(slides[settings.id][params.last]).css('display', 'block').css('zIndex', '0').fadeOut('slow');
			jQuery(slides[settings.id][params.current]).css('zIndex', '1').fadeIn('slow');

			var rcurr = params.current + 1;
			var rlast = params.last + 1;

			$('#' + settings.outerid + ' a#slide' + rlast).removeClass("current");
			$('#' + settings.outerid + ' a#slide' + rcurr).addClass("current");
			
			if ( ( params.current + 1 ) < slides[settings.id].length ) {
				params.current = params.current + 1;
				params.last = params.current - 1;
			}
			else {
				params.current = 0;
				params.last = slides[settings.id].length - 1;
			}

			params.timer = setTimeout(change, settings.timeout);
		}
	}
	
	var pause = function() {
		if ( params.pauseState == 0 ) {
			params.pauseState = 1;
			clearTimeout(params.timer);
			if ( settings.playcallback != null ) {
				settings.pausecallback(jQuery('#' + settings.pauselink));
			}
		}
		else {
			params.pauseState = 0;
			change();
			if ( settings.playcallback != null ) {
				settings.playcallback(jQuery('#' + settings.pauselink));
			}
		}
		return false;
	}

	var switchSlide = function(node){
		var setId = node.id.replace(/[^0-9]/g, '');
		params.current = setId - 1;
		params.pauseState = 0;
		change();
		params.pauseState = 1;
		clearTimeout(params.timer);
	}

	var prevSlide = function(){
		if(params.current == 0) params.current = slides[settings.id].length;
		params.current = params.current - 2;
		if(params.current < 0) params.current = slides[settings.id].length - 1;
		params.pauseState = 0;
		change();
		params.pauseState = 1;
		clearTimeout(params.timer);
	}

	var nextSlide = function(){
		//alert('uha');
		params.pauseState = 0;
		change();
		params.pauseState = 1;
		clearTimeout(params.timer);
	}
	
	slides[settings.id] = this.find(settings.tag).get();
	
	var aid = '#' + settings.outerid + ' a.nextBox';

	jQuery.each(slides[settings.id], function(i){
		jQuery(slides[settings.id][i]).css('zIndex', slides.length - i).css('position', 'absolute').css('display', 'none');
	});

	$('#' + settings.outerid + ' a.showBox').click(function(){
		switchSlide(this);
		return false;
	;})
	$('#' + settings.outerid + ' a.prevBox').click(function(){
		prevSlide(this);
		return false;
	;})
	$('#' + settings.outerid + ' a.nextBox').click(function(){
		nextSlide(this);
		return false;
	;})
	
	if (slides[settings.id].length > 1) {
		jQuery(slides[settings.id][0]).fadeIn('slow');
		params.timer = setTimeout(change, settings.timeout);
	}
	
	return this;
};


