function initialize_slide_show() {
	slide_show_options.holder = document.getElementById(slide_show_options.holder);
	slide_show_options.img = document.getElementById(slide_show_options.img);
	slide_show_options.queue = document.getElementById(slide_show_options.queue);
	if (slide_show_options.scroll_thumbs) {
		slide_show_options.thumbs = document.getElementById(slide_show_options.thumbs);
	}

	slide_show_options.scroll_thumbs=false;

	/*
	if (slide_show_options.pause_on_mouseover) {
		slide_show_options.img.addEvent();
	}
	*/
	slide_show(0);
}

function select_thumb(new_image, index) {
	slide_transition(new_image, slide_show_options.fade_transition);
	slide_show_pause_play('pause');
}

function slide_show_pause_play(status) {
	if (status && status == 'mouse' && slide_show_control.hardpause) {
		return;
	}
	if (status && status == 'pause') {
		slide_show_control.play = false;
	}
	else if (status && status == 'play') {
		slide_show_control.play = true;
	}
	else {
		slide_show_control.play = !slide_show_control.play;
	}

	if (slide_show_control.play) {
		if (slide_show_control.skipped) {
			slide_show_control.skipped = false;
			slide_show(slide_show_control.current);
		}
		if (document.getElementById('pause_lnk')) {
			if (slide_show_options.pause_img) {
				pause = '<img src="'+slide_show_options.pause_img+'" />';
			}
			else {
				pause = '||';
			}
			document.getElementById('pause_lnk').innerHTML = pause;
		}
		slide_show_control.hardpause = false;
	}
	else {
		if (document.getElementById('pause_lnk')) {
			if (slide_show_options.play_img) {
				play = '<img src="'+slide_show_options.play_img+'" />';
			}
			else {
				play = '|>';
			}
			document.getElementById('pause_lnk').innerHTML = play;
		}
		if (!status || status != 'mouse') {
			slide_show_control.hardpause = true;
		}
	}
}

function slide_show(current) {
	if (!slide_show_control.play) {
		slide_show_control.skipped = true;
		return;
	}
	current_img = slide_show_options.directory+slides[current];

	current = ++current%slide_show_control.limit;
	slide_show_control.current = current;

	img_location = slide_show_options.directory+slides[current];
	slide_transition(img_location, current_img, slide_show_options.fade_transition);

	queue = (current+1)%slide_show_control.limit;
	slide_show_options.queue.src = slide_show_options.directory+slides[queue];

	if (slide_show_control.play) {
		setTimeout("slide_show("+current+", "+slide_show_control.limit+")", slide_show_options.img_transition);
	}
}

function slide_transition(new_img, current_img, timescale) {
	img = slide_show_options.img;
	holder = slide_show_options.holder;

	if (slide_show_options.scroll_thumbs) {
		for (i = 0; i < thumbnails.length; i++) {
			if (new_img == thumbnails[i]) {
				slide_show_control.current_thumb = i;
				break;
			}
		}
	}

	src_regxp = /^url\((.+?)\)$/;

	//alert("current:\n"+current_img+"\nsrc:\n"+img.src+"\nbackground:\n"+holder.style.backgroundImage+"\nnew:\n"+new_img);

	img.src = current_img;//holder.style.backgroundImage.replace(src_regxp, "$1");
	change_opacity(100, img.id);

	holder.style.backgroundImage = "url("+new_img+")";
	fade(0, timescale, img.id);
	if (slide_show_options.scroll_thumbs) {
		scroll(slide_show_control.current_thumb*slide_show_options.thumb_height, timescale, slide_show_options.thumbs.id);
	}
}

function scroll(target_scroll, timescale, id) {
	var hold = document.getElementById(id);

	current_scroll = hold.scrollTop;

	if (target_scroll == 0) {
		speed = Math.round(thumbnails.length/2);
	}
	else {
		speed = Math.round(timescale/50);
	}

	//var speed = Math.round(thumbnails.length/2);//Math.round(timescale / 200);
	var timer = 0;

	if (current_scroll > target_scroll) {
		for (i = current_scroll; i >= target_scroll; i--) {
			setTimeout("change_scroll("+i+", '"+id+"')", (timer * speed));
			timer++;
		}
	}
	else if (current_scroll < target_scroll) {
		for (i = current_scroll; i <= target_scroll; i++) {
			setTimeout("change_scroll("+i+", '"+id+"')", (timer * speed));
			timer++;
		}
	}
}

function fade(target_opacity, timescale, id) {
	var img = document.getElementById(id);

	current_opacity = img.style.opacity * 100;

	var speed = Math.round(timescale / 100);
	var timer = 0;

	if (current_opacity > target_opacity) {
		for (i = current_opacity; i >= target_opacity; i--) {
			setTimeout("change_opacity("+i+", '"+id+"')", (timer * speed));
			timer++;
		}
	}
	else if (current_opacity < target_opacity) {
		for (i = current_opacity; i <= target_opacity; i++) {
			setTimeout("change_opacity("+i+", '"+id+"')", (timer * speed));
			timer++;
		}
	}
}

function change_scroll(px, id) {
	var hold = document.getElementById(id);
	hold.scrollTop = px;
}

function change_opacity(opacity, id) {
	var img = document.getElementById(id).style;
	img.opacity = (opacity / 100); 
	img.MozOpacity = (opacity / 100); 
	img.KhtmlOpacity = (opacity / 100); 
	img.filter = "alpha(opacity=" + opacity + ")"; 
}