// find elements within the parent element provided of class slide, and swap. 1st element to swap should be visible
function switchFade(element, speed0, speed1, jitter) {
	var slides = $(element+' .slide');
	var current_slide = slides.filter(':visible');
	var next_slide = 0;
	
	if(current_slide.index() < slides.length-1)
		next_slide = current_slide.next().index();
	
	jitter /= 2;
	
	current_slide.fadeOut(speed0+jitter,function(){ slides.eq(next_slide).fadeIn(speed1+jitter); });
}

// same as above, but fade in of one and fade out of other occur simultaneously
function switchCrossFade(element, speed0, speed1, jitter) {
	var slides = $(element+' .slide');
	var current_slide = slides.filter(':visible');
	var next_slide = 0;
	
	if(current_slide.index() < slides.length-1)
		next_slide = current_slide.next().index();
	
	current_slide.fadeOut(speed0+jitter);
	slides.eq(next_slide).fadeIn(speed1+jitter);
}

// new image fades in over old image
function switchCrossFade1(element, speed0, speed1, jitter) {
	var slides = $(element+' .slide');
	var current_slide = slides.filter(':visible');
	var z = current_slide.css('z-index');
	var next_slide = 0;
	
	if(current_slide.index() < slides.length-1)
		next_slide = current_slide.next().index();
	
	current_slide.css('z-index', z-1);
	slides.eq(next_slide).fadeIn(speed1+jitter, function(){
		current_slide.hide();
		current_slide.css('z-index', z);
	});
}

function startSlides(element, pause, speed0, speed1, jitter, mode) {
	jitter = typeof(jitter) != 'undefined' ? jitter : 0;
	mode = typeof(mode) != 'undefined' ? mode : 'fade';
	
	if(jitter>0)
		jitter = Math.floor(Math.random()*jitter);
	
	$(element+' .slide').eq(0).show();
	
	if(mode == 'fade') {
		setInterval(function(){ switchFade(element, speed0, speed1, jitter) }, pause);
	}
	else if(mode == 'crossfade') {
		setInterval(function(){ switchCrossFade(element, speed0, speed1, jitter) }, pause);
	}
	else if(mode == 'crossfade1') {
		setInterval(function(){ switchCrossFade1(element, speed0, speed1, jitter) }, pause);
	}
}

