function Slideshow(slideshow, viewer, thumbnails, slider, information, arrowleft, arrowright, additionalimages, lang, initimage) {
	var Owner = this;
	
	var Slideshow = $(slideshow);
	var Viewer = $(viewer);
	var Thumbnails = $(thumbnails);
	var Slider = $(slider);
	var Information = $(information);
	var InformationData = document.createElement("div");
	var ArrowLeft = $(arrowleft);
	var ArrowRight = $(arrowright);
	var AdditionalImages = $(additionalimages);
	var AutoScroll;
	var oMore = lang[0];
	var oLess = lang[1];
	
	var Elements = [];
	var AdditionalElements = [];
	var CurrentElement = 0;
	var CurrentAdditionalElement = 0;
	
	var IsImageChanging = false;
	
	var showImage = function(img, f) {
		exp.alpha.set(img, 0);
		img.style.position = "absolute";
		Viewer.appendChild(img);
		img.style.left = ((parseInt(Viewer.offsetWidth) - parseInt(img.offsetWidth)) / 2) + "px";
		exp.alpha.fadeIn(img, 100, 20, f);
	}
	
	var hideImage = function(img) {
		exp.alpha.set(img, 100);
		exp.alpha.fadeOut(img, 0, 20);
	}
	
	var showInformationData = function(elem, additionalelem) {
		exp.slide.right(Information, 10, -1);
		exp.slide.right(InformationData, 10, -1, function() {
			InformationData.IsClosing = undefined;
			if(!InformationData.Container) {
				InformationData.Container = $c("div");
			}
			InformationData.Container.innerHTML = elem.preview;
			InformationData.Preview = elem.preview;
			InformationData.Content = elem.content;
			InformationData.appendChild(InformationData.Container);
			
			if(!InformationData.More) {
				InformationData.More = $c("div");
				InformationData.More.style.textAlign = "right";

				var oA = $c("a");
				oA.innerHTML = oMore + " »";
				oA.href = "javascript: function showMoreInformation(){showMoreInformation=''}showMoreInformation();";
				oA.onclick = function() {
					if(InformationData.IsMoving != undefined && InformationData.IsMoving == false) {
						window.clearTimeout(AutoScroll);
						InformationData.IsExpanded = true;
						oA.oldonclick = oA.onclick;
						exp.expand.move(Information,1,Viewer.offsetWidth,10);
						exp.expand.move(InformationData,1,Viewer.offsetWidth,10);
						exp.alpha.fadeOut(InformationData, 0, 10, function() {
							$$("a", InformationData.More)[0].innerHTML = "« " + oLess;
							$$("a", InformationData.More)[0].onclick = function() {
								exp.expand.move(Information,-1,351,10);
								exp.expand.move(InformationData,-1,351,10);
								exp.alpha.fadeOut(InformationData, 0, 10, function() {
									$$("a", InformationData.More)[0].innerHTML = oMore + " »";
									$$("a", InformationData.More)[0].onclick = $$("a", InformationData.More)[0].oldonclick;
									InformationData.Container.innerHTML = InformationData.Preview;
									exp.alpha.fadeIn(InformationData, 100, 10, function() {
										setAutoScroll(10000);
									});
								});
							};
							InformationData.Container.innerHTML = InformationData.Content;
							exp.alpha.fadeIn(InformationData, 100, 10, function() {
							});
						});
					}
				}
				
				InformationData.More.appendChild(oA);
			}
			InformationData.appendChild(InformationData.More);
		});
		if(InformationData.CloseTimeout) {
			window.clearTimeout(InformationData.CloseTimeout);
		}
		InformationData.CloseTimeout = window.setTimeout(function() {
			exp.slide.right(Information, 10, 1);
			exp.slide.right(InformationData, 10, 1, function() {
				InformationData.IsMoving = false;
			});
		}, 4000);
	}
	
	var setSelectedImage = function(elem, target) {
		for(var i = 0; i < $$("img", target).length; i++) {
			$$("img", target)[i].className = "";
		}
		$$("img", target)[elem].className = "selected";
		
		/*for(var i = 0; i < Elements.length; i++) {
			Elements[i].thumbnail.className = "";
		}
		Elements[elem].thumbnail.className = "selected";*/
	}
	
	var setAutoScroll = function(milliseconds) {
		AutoScroll = window.setTimeout(function() {
			Elements[CurrentElement + 1 >= Elements.length ? 0 : CurrentElement + 1].thumbnail.onclick(true);
			setAutoScroll(milliseconds);
		}, milliseconds);
	}
	
	this.init = function(initimage) {
		Slideshow.style.display = "none";
		
		Viewer.style.position = "relative";
		Viewer.style.overflow = "hidden";

		Slider.style.position = "relative";
		Slider.style.overflow = "hidden";
		Slider.style.whiteSpace = "nowrap";
		
		Information.style.position = "absolute";
		Information.style.zIndex = "5";
		Information.style.left = "-" + parseInt(Information.offsetWidth) + "px";
		
		InformationData.style.position = "absolute";
		InformationData.style.zIndex = "6";
		InformationData.className = "ssinformationdata";
		InformationData.style.left = Information.style.left;
		
		Information.parentNode.appendChild(InformationData);
		
		var oElements = $$('li', Slideshow);
		for(var i = 0; i < oElements.length; i++) {
			var imgs = [];
			for(var j = 0; j < $$('a', oElements[i]).length; j++) {
				imgs.push({
					img : $$('img', oElements[i])[j],
					href : $$('a', oElements[i])[j].href
				});
			}
			Elements[i] = {
				title : $$('h3', oElements[i])[0].innerHTML,
				preview : $$('div', oElements[i])[0].innerHTML,
				content : $$('div', oElements[i])[1].innerHTML,
				img : $$('img', oElements[i])[0],
				href : $$('a', oElements[i])[0].href,
				'imgs' : imgs,
				element : oElements[i]
			};
			if(initimage != undefined) {
				if($$('span', oElements[i])[0].innerHTML != initimage) {
					CurrentElement++;
				} else {
					initimage = undefined;
				}
			}

			var im = $c("img");
			im.src = Elements[i].img.src;
			im.element = i;
			im.style.width = "auto";
			im.onclick = this.OnClickImg;
			Elements[i].thumbnail = im;
			
			Slider.appendChild(im);
		}

		Elements[CurrentElement].thumbnail.onclick(true);
		$$("img", AdditionalImages)[0].className = "selected";

		ArrowLeft.onmouseover = bindFunction(function() {exp.scroll.move(Slider, -1, 5);}, this);
		ArrowLeft.onmouseout = bindFunction(function() {exp.scroll.clear(Slider);}, this);
		
		ArrowRight.onmouseover = bindFunction(function() {exp.scroll.move(Slider, 1, 5);}, this);
		ArrowRight.onmouseout = bindFunction(function() {exp.scroll.clear(Slider);}, this);
		
		setAutoScroll(10000);
	}
	
	this.OnClickImg = function(autoclick) {
		if(InformationData.IsClosing == undefined && !IsImageChanging) {
			InformationData.IsMoving = true;
			if(typeof autoclick != 'boolean') {
				window.clearTimeout(AutoScroll);
			} else {
				if(parseInt(this.offsetLeft + this.offsetWidth) > parseInt(Slider.offsetWidth)) {
					Slider.scrollLeft = (parseInt(this.offsetLeft + this.offsetWidth) - parseInt(Slider.offsetWidth));
				} else {
					Slider.scrollLeft = 0;
				}
			}

			IsImageChanging = true;
			if(exp.alpha.get(Elements[CurrentElement].img) > 0) {
				hideImage(Elements[CurrentElement].img);
			}
			if(this.parentNode != AdditionalImages) {
				CurrentElement = this.element;
				CurrentAdditionalElement = 0;
				showImage(Elements[CurrentElement].img, function() {IsImageChanging = false;});
				ShowAdditionalImages(CurrentElement);
				setSelectedImage(CurrentElement, this.parentNode);
			} else {
				hideImage(Elements[CurrentElement].imgs[CurrentAdditionalElement].img);
				CurrentAdditionalElement = this.element;
				showImage(Elements[CurrentElement].imgs[CurrentAdditionalElement].img, function() {IsImageChanging = false;});
			}
			setSelectedImage(CurrentAdditionalElement, AdditionalImages);
			
			//$$("a", InformationData.More)[0].onclick = undefined;
			InformationData.IsClosing = true;
			if(InformationData.IsExpanded != undefined && InformationData.IsExpanded == true) {
				exp.expand.move(Information,-1,351,20);
				exp.expand.move(InformationData,-1,351,20, function() {
					$$("a", InformationData.More)[0].innerHTML = oMore + " »";
					$$("a", InformationData.More)[0].onclick = $$("a", InformationData.More)[0].oldonclick;
					//showInformationData(Elements[CurrentElement]);
					showInformationData(Elements[CurrentElement]);
				});
			} else {
				//showInformationData(Elements[CurrentElement]);
				showInformationData(Elements[CurrentElement]);
			}
		}
	}
	
	var ShowAdditionalImages = function(idx) {
		for(var i = $$("img", AdditionalImages).length; i > 0; i--) {
			AdditionalImages.removeChild($$("img", AdditionalImages)[i - 1]);
		}
		for(var i = 0; i < Elements[idx].imgs.length; i++) {
			var im = $c("img");
			im.src = Elements[idx].imgs[i].img.src;
			im.element = i;
			im.onclick = Owner.OnClickImg;
			AdditionalImages.appendChild(im);
		}
	}
	
	this.init(initimage);
}
