function SlideShow(idImage, idTitle, idEpigraph, interval)
{
	var m_idImage = idImage;
	var m_idTitle = idTitle;
	var m_idEpigraph = idEpigraph;
	var m_interval = interval;
	var m_intervalPtr = null;
	var m_cache = new Cache();
	var m_slides = new Array();
	var m_showPosition = -1;
	var m_maxWidth=0;
	var m_maxHeight=0;

	function imageObject()
	{
		return document.getElementById(m_idImage);
	}

	function titleObject()
	{
		return document.getElementById(m_idTitle);
	}

	function epigraphObject()
	{
		return document.getElementById(m_idEpigraph);
	}

	this.setMaxWidth = function(width)
	{
		m_maxWidth = width;
	}

	this.setMaxHeight = function(height)
	{
		m_maxHeight = height;
	}

	this.bindToImage = function()
	{
		var binded = imageObject().SlideShow;
		if(!binded)
		{
			imageObject().SlideShow = this;
		}
	}

	this.addSlide = function(imgSrc, title, epigraph, link)
	{
		m_slides.push(new Slide(title, epigraph, link));
		m_cache.addImage(imgSrc);
	}

	this.getImage = function()
	{
		var arrImages = m_cache.getImages();
		if(arrImages.length==0) return null;
		return arrImages[m_showPosition];
	}

	this.setPosNext = function()
	{
		m_showPosition = (++m_showPosition + m_slides.length) % m_slides.length;
	}

	this.setPosPrev = function()
	{
		if(m_showPosition==-1) m_showPosition = 0;
		m_showPosition = (--m_showPosition + m_slides.length) % m_slides.length;
	}

	this.moveNext = function()
	{
		this.setPosNext();
		this.setCurrentSlide();
	}

	this.movePrev = function()
	{
		this.setPosPrev();
		this.setCurrentSlide();
	}

	this.setCurrentSlide = function()
	{
		var slide = m_slides[m_showPosition];
		var currentImage = this.getImage();
		if(currentImage)
		{
			var maxWidth  = m_maxWidth ? m_maxWidth : currentImage.width;
			var maxHeight = m_maxHeight ? m_maxHeight : currentImage.height;
			var resized   = getImageResize(currentImage, maxWidth, maxHeight);

			imageObject().setAttribute('src', currentImage.src);
			imageObject().setAttribute('width', resized.width);
			imageObject().setAttribute('height', resized.height);

			titleObject().innerHTML = slide.title;
			epigraphObject().innerHTML = slide.epigraph;


			if(slide.link)
			{
				imageObject().onclick = titleObject().onclick = epigraphObject().onclick = function()
				{
					var finalLink
					var reJS = /^javascript:/i;
					if(reJS.test(slide.link)) { eval(slide.link.replace(reJS, '')); }
					else { window.location.href = slide.link; }
				};
			}

			/* [TICKET:008368] */
		  if( document.getElementById("current_img_pos") ){
		    document.getElementById("current_img_pos").innerHTML = "<b>"+(parseInt(m_showPosition) + 1)+"</b>";
		  }

		}
	}

	this.start = function()
	{
		this.stop();
		this.bindToImage();
		this.moveNext();
		var autoMoveNextCode = "var __SlideShow = document.getElementById('" + m_idImage + "').SlideShow; if(__SlideShow!=null) __SlideShow.moveNext(); ";
		m_intervalPtr = setInterval(autoMoveNextCode, m_interval);
	}

	this.stop = function()
	{
		if(this.isPlaying())
		{
			clearInterval(m_intervalPtr);
			m_intervalPtr = null;
		}
	}

	this.isPlaying = function()
	{
		return m_intervalPtr!=null;s
	}

	this.autoplay = function()
	{
		if(this.isPlaying())
		{
			this.stop();
		}
		else
		{
			this.start();
		}
	}
}

function Slide(title, epigraph, link)
{
	this.title = title;
	this.epigraph = epigraph;
	this.link = link;
}