function SlideShowClass() {
	this.parent;
	this.viewable;
	this.image;
	
	this.thumbnail_div;
	this.thumbnail_holder;
	this.slideshow_controls;
	
	this.thumb_position = 0;
	this.picArray = new Array;
	this.pArray = new Array;
	this.selected = 0;
	this.thumbnail_max_width = 43;
	this.thumbnail_max_height = 32;
	
	this.current_image_width = 525;
	this.current_image_height = 370;
	
	this.thumbnail_spacing = 12;
	this.thumbnail_parent_holder_width = 466;
	this.thumbnail_holder_width = 0;
	
	this.image_path = mediapath;
	
	this.construct();
}

SlideShowClass.prototype.construct = function () {
	this.parent = document.createElement('div');
	this.parent.id = 'slideshow';
	
	this.slideshow_controls = createDiv('slideshow_controls');
	this.controls_set("play",0);
	this.parent.appendChild(this.slideshow_controls);
	
	this.thumbnail_div = createDiv('slideshow_thumbnails');
	this.parent.appendChild(this.thumbnail_div);
	
	var div = createDiv('thumb_left');
	div.innerHTML = "<a href=\"javascript:void(0);\" class=\"thumb_control_button\" onmousedown=\"move_left();\" onmouseup=\"stop_thumb();\" onmouseout=\"stop_thumb();\">LEFT</a>\n";
	this.thumbnail_div.appendChild(div);

	this.thumbnail_outside_holder = createDiv('thumbnail_outside_holder');
	this.thumbnail_div.appendChild(this.thumbnail_outside_holder);
	
	this.thumbnail_holder = createDiv('thumb_holder');
	this.thumbnail_outside_holder.appendChild(this.thumbnail_holder);
	
	div = createDiv('thumb_right');
	div.innerHTML = "<a href=\"javascript:void(0);\" class=\"thumb_control_button\" onmousedown=\"move_right();\" onmouseup=\"stop_thumb();\" onmouseout=\"stop_thumb();\">RIGHT</a>\n";
	this.thumbnail_div.appendChild(div);

	this.viewable = createDiv('slideshow_viewable');
	this.parent.appendChild(this.viewable);	
}

SlideShowClass.prototype.getPointer = function () {
	return this.parent;
}

SlideShowClass.prototype.set = function (xmlDoc) {
	// clear old values
	while (this.thumbnail_holder.firstChild != null) {
		this.thumbnail_holder.removeChild(this.thumbnail_holder.firstChild);
	}
	this.picArray.length = 0;

	var root_ = get_firstchild(xmlDoc);
	
	var images = xmlDoc.getElementsByTagName('image');
	for (i=0;i<images.length;i++) {
		this.picArray[i] = images[i].getElementsByTagName('id')[0].childNodes[0].nodeValue;
		try { this.pArray[i] = images[i].getElementsByTagName('caption')[0].childNodes[0].nodeValue; } catch(err) { this.pArray[i] = "&nbsp;" }
	}
	
	this.image_construct();
}

SlideShowClass.prototype.image_construct = function () {
	var anchor;
	var img;
	for (i=0;i<this.picArray.length;i++) {
		anchor = document.createElement('a');
		anchor.href = "javascript:showPic('"+i+"');";
		anchor.id = "a_"+this.picArray[i];
		img = document.createElement('img');
		img.src = this.image_path+"?id="+this.picArray[i]+"&maxImgHeight="+this.thumbnail_max_height+"&maxImgWidth="+this.thumbnail_max_width;
		//this.thumbnail_holder_width += parseInt(img.width) + this.thumbnail_spacing;
		this.thumbnail_holder_width += this.thumbnail_max_width + this.thumbnail_spacing;
		anchor.appendChild(img);
		this.thumbnail_holder.appendChild(anchor);
	}
	
	this.thumbnail_holder_width = -1 * this.thumbnail_holder_width;
	this.showPic(0);
}

SlideShowClass.prototype.showPic = function (i) {
	if (this.image == null) {

		this.image = new ImageClass();
	}

	this.image.img.src = this.image_path+"?id="+this.picArray[i]+"&maxImgHeight="+this.current_image_height+"&maxImgWidth="+this.current_image_width;
	this.image.p.innerHTML = this.pArray[i];

	if (this.viewable.firstChild == null) {
		this.viewable.appendChild(this.image.holder);
	}

	this.shiftThumb(parseInt(i));
	
	this.selected = parseInt(i);
	this.preload(i);
}

SlideShowClass.prototype.preload = function (i) {
	if (i < this.picArray.length-1) {
		p = i+1;
	}
	else {
		p = 0;
	}
	load = new Image();
	load.src = this.image_path+"?id="+this.picArray[p]+"&maxImgHeight="+this.current_image_height+"&maxImgWidth="+this.current_image_width;
	
	if (i < this.picArray.length-2 && i != this.picArray.length-1) {
		p = i+2;
	}
	else {
		p = 1;
	}
	load = new Image();
	load.src = this.image_path+"?id="+this.picArray[p]+"&maxImgHeight="+this.current_image_height+"&maxImgWidth="+this.current_image_width;
}

SlideShowClass.prototype.shiftThumb = function (i) {
	// if the thumbnail position does not go beyond the right edge
	anchor = objId('a_'+this.picArray[this.selected]);

	anchor.className = "";
	
	anchor = objId('a_'+this.picArray[i]);
	anchor.className = "thumb_selected";
	
	// check this 		if (-i*(thumbnail_spacing+thumbnail_max_width) > thumbnail_holder_width+thumbnail_parent_holder_width) {
	this.thumb_position = 0;
	if  (this.thumbnail_holder_width*-1 > this.thumbnail_parent_holder_width) {
		for (j=0;j<i;j++) {
			anchor = objId('a_'+this.picArray[j]);
			this.thumb_position += this.thumbnail_spacing + parseInt(anchor.firstChild.width);
		}
		this.thumb_position = this.thumb_position * -1;
		if (this.thumb_position <= this.thumbnail_holder_width+this.thumbnail_parent_holder_width) {
			this.thumb_position = this.thumbnail_holder_width + this.thumbnail_parent_holder_width;
		}
	}
	this.thumbnail_holder.style.left = this.thumb_position+"px";
}
// checks if the current thumbnail is within the viewable area
SlideShowClass.prototype.inView = function (i) {
	thumb = 0;
	for (j=0;j<i;j++) {
		anchor = objId('a_'+this.picArray[j]);
		thumb += this.thumbnail_spacing + parseInt(anchor.firstChild.width);
	}
	thumb = thumb * -1;
	return (this.thumb_position >= thumb && thumb > this.thumb_position-this.thumbnail_parent_holder_width+(this.thumbnail_spacing+this.thumbnail_max_width));
}

SlideShowClass.prototype.selectNext = function () {
	if (this.selected < this.picArray.length - 1) {
		this.showPic(this.selected+1);
	}
	else {
		this.showPic(0);
	}
}

SlideShowClass.prototype.thumbnails_left = function () {
	if (this.thumb_position < 0) {
		this.thumb_position += 10;
	}
	else {
		this.thumb_position = 0;
	}
	this.thumbnail_holder.style.left = this.thumb_position+"px";
}

SlideShowClass.prototype.thumbnails_right = function () {
	//alert('thumb_position '+this.thumb_position+'\n'+'thumbnail_holder_width '+this.thumbnail_holder_width+'\n'+'thumbnail_parent_holder_width '+this.thumbnail_parent_holder_width);
	if (this.thumb_position > this.thumbnail_holder_width+this.thumbnail_parent_holder_width) {
		this.thumb_position -= 10;
	}
	else if (this.thumbnail_holder_width*-1 < this.thumbnail_parent_holder_width) {
		this.thumb_position = 0;
	}
	else {
		this.thumb_position = this.thumbnail_holder_width + this.thumbnail_parent_holder_width;
	}	
	this.thumbnail_holder.style.left = this.thumb_position+"px";
}

SlideShowClass.prototype.controls_set = function (setting,ispeed) {
	var temp = "<div>";
	temp += "<a href=\"javascript:"+setting+"_slideshow();\" class=\"play_pause_button\" id=\""+setting+"_button\">"+setting+"</a>\n";

	var speed = new Array();
	speed[0] = slideshow_slow;
	speed[1] = slideshow_medium;
	speed[2] = slideshow_fast;
	
	for (i=0;i<speed.length;i++) {
		if (ispeed == i+1) {
			temp +=	"<a class=\"speed_selected\">"+speed[i]+"</a>\n";
		}
		else {
			temp +=	"<a href=\"javascript:slideshow_speed("+(i+1)+");\">"+speed[i]+"</a>\n";
		}
	}
	temp += "<div style=\"clear: both;\"></div></div>";
	this.slideshow_controls.innerHTML = temp;
}

/**********/

/* Viewer/Slideshow Functions */
function showPic(img) {
	var slideshow = scene.getSlideshow();
	slideshow.showPic(img);
}

function slidethrough() {
	var slideshow = scene.getSlideshow();
	slideshow.selectNext();
}
function slideshow_speed(speed) {
	pause_slideshow();
	ss_speed = speed;
	play_slideshow();
}

function play_slideshow() {
	var slideshow = scene.getSlideshow();
	if (ss_speed == 3) {
		slideshow.controls_set("pause",3);
		interval = 1000;
	}
	else if (ss_speed == 2) {
		slideshow.controls_set("pause",2);
		interval = 2500;
	}
	else {
		slideshow.controls_set("pause",1);
		interval = 5000;
	}
	ss_timer = setInterval(slidethrough,interval);
}

function pause_slideshow() {
	var slideshow = scene.getSlideshow();
	slideshow.controls_set("play",0);
	clearInterval(ss_timer);
}

/* Thumbnail Functions */
function move_left() {
	ss_thumbnail_timer = setInterval(thumbnails_left,40);
}

function move_right() {
	ss_thumbnail_timer = setInterval(thumbnails_right,40);
}

function thumbnails_left() {
	var slideshow = scene.getSlideshow();
	slideshow.thumbnails_left();
}

function thumbnails_right() {
	var slideshow = scene.getSlideshow();
	slideshow.thumbnails_right();
}

function stop_thumb() {
	clearInterval(ss_thumbnail_timer);
}

/***************************************/

var ss;
var ss_speed = 2;
var ss_timer = null;
var ss_thumbnail_timer = null;

//addDOMLoadEvent(function () {
//	ss = new SlideShow();
//})