var hq_slideshows = Array();
var hq_slideshow_default_options = 	{
	index: 0,
	prevIndex: 0,
	homeIndex: 1,
	fadeTime: 1,
	fadeTimeLeft: 0,
	delayTime: 5,
	delayTimeLeft: 0,
	opacity: 0,
	textOpacity: 0,
	textFadeTime: 0,
	textFadeTimeLeft: 0,
	textDelayTime: 0,
	paused: false,
	count: 1
};


function SlideshowRegister(id, options)
{
	if(options == undefined) options = {};
	var slideshow = {};

	for(i in hq_slideshow_default_options)
	{
		if(options.hasOwnProperty(i))
		{
			slideshow[i] = options[i];
		}
		else if(hq_slideshow_default_options.hasOwnProperty(i))
		{
			slideshow[i] = hq_slideshow_default_options[i];
		}
	}

	hq_slideshows[id] = slideshow;
}


function SlideshowGet(id)
{
	if(hq_slideshows[id] == undefined)
	{
		SlideshowRegister(id);
	}

	return hq_slideshows[id];
}


function SlideshowJump(id, offset, fadeTime)
{
	var slideshow = SlideshowGet(id);
	SlideshowJumpTo(id, (slideshow.index%slideshow.count)+1, fadeTime);
}

function SlideshowJumpTo(id, index, fadeTime)
{
	var slideshow = SlideshowGet(id);
	if(index == undefined) index = slideshow.homeIndex;
	if(fadeTime == undefined) fadeTime = slideshow.fadeTime;

	slideshow.prevIndex = slideshow.index;
	slideshow.index = index;
	slideshow.fadeTimeLeft = fadeTime;
	slideshow.delayTimeLeft = slideshow.delayTime-fadeTime;
	if(fadeTime > 0)
		slideshow.opacity = 0;
	else
		slideshow.opacity = 1;

	var slide = document.getElementById('hq_slide_'+id+'_'+index);
	slide.style.visibility = 'visible';
	slide.style.zIndex = 11;
	SetOpacity(slide, slideshow.opacity);

	if(slideshow.prevIndex > 0)
	{
		var prevSlide = document.getElementById('hq_slide_'+id+'_'+slideshow.prevIndex);
		prevSlide.style.zIndex = 10;
		if(slideshow.opacity < 1)
		{
			prevSlide.style.visibility = 'visible';
			SetOpacity(prevSlide, 1);
		}
		else
		{
			prevSlide.style.visibility = 'hidden';
		}
	}

	for(i = 1;  i <= slideshow.count;  i += 1)
	{
		if(i == index)
			document.getElementById('hq_slidebutton_'+id+'_'+i).className = 'slideshow_button_disabled';
		else
			document.getElementById('hq_slidebutton_'+id+'_'+i).className = 'slideshow_button';
	}

	slideshow.textFadeTimeLeft = slideshow.textFadeTime;
	if(slideshow.paused)
	{
		slideshow.textFadeTimeLeft += slideshow.textDelayTime;
	}
	if(slideshow.textFadeTime > 0)
	{
		slideshow.textOpacity = 0;
	}
	else
	{
		slideshow.textOpacity = 1;
	}

	var slideTextBack = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_textback');
	SetOpacity(slideTextBack, slideshow.textOpacity*0.7);

	var slideText = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_text');
	SetOpacity(slideText, slideshow.textOpacity);
}


function SlideshowPause(id, paused)
{
	var slideshow = SlideshowGet(id);
	slideshow.paused = paused;
}


function SlideshowThink()
{
	for(id in hq_slideshows)
	{
		var slideshow = SlideshowGet(id);

		if(!slideshow.paused  &&  slideshow.textFadeTimeLeft < slideshow.textFadeTime)
		{
			if((slideshow.textFadeTime-slideshow.textFadeTimeLeft) >= 0.05)
			{
				slideshow.textOpacity -= slideshow.textOpacity*0.05/(slideshow.textFadeTime-slideshow.textFadeTimeLeft);
				slideshow.textFadeTimeLeft += 0.05;

				var slideTextBack = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_textback');
				SetOpacity(slideTextBack, slideshow.textOpacity*0.7);

				var slideText = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_text');
				SetOpacity(slideText, slideshow.textOpacity);
			}
			else if(slideshow.textFadeTimeLeft < slideshow.textFadeTime)
			{
				slideshow.textOpacity = 0;
				slideshow.textFadeTimeLeft = slideshow.textFadeTime;

				var slideTextBack = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_textback');
				SetOpacity(slideTextBack, 0);

				var slideText = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_text');
				SetOpacity(slideText, 0);
			}
		}
		else if(slideshow.fadeTimeLeft >= 0.05)
		{
			slideshow.opacity += (1-slideshow.opacity)*0.05/slideshow.fadeTimeLeft;
			slideshow.fadeTimeLeft -= 0.05;

			var slide = document.getElementById('hq_slide_'+id+'_'+slideshow.index);
			SetOpacity(slide, slideshow.opacity);

			if(slideshow.prevIndex > 0)
			{
				var prevSlide = document.getElementById('hq_slide_'+id+'_'+slideshow.prevIndex);
				SetOpacity(prevSlide, 1-slideshow.opacity);
			}
		}
		else if(slideshow.fadeTimeLeft > 0)
		{
			slideshow.opacity = 1;
			slideshow.fadeTimeLeft = 0;
			slideshow.delayTimeLeft = slideshow.delayTime;
			slideshow.textFadeTimeLeft = Math.max(slideshow.textFadeTime, slideshow.textFadeTimeLeft);

			var slide = document.getElementById('hq_slide_'+id+'_'+slideshow.index);
			SetOpacity(slide, 1);

			if(slideshow.prevIndex > 0)
			{
				var prevSlide = document.getElementById('hq_slide_'+id+'_'+slideshow.prevIndex);
				prevSlide.style.visibility = 'hidden';
			}
		}
		else if(slideshow.paused)
		{
			slideshow.delayTimeLeft = slideshow.delayTime;

			if(slideshow.textFadeTimeLeft >= 0.05)
			{
				slideshow.textFadeTimeLeft -= 0.05;
				slideshow.textOpacity = 1-Math.min(1, slideshow.textFadeTimeLeft/slideshow.textFadeTime);

				var slideTextBack = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_textback');
				SetOpacity(slideTextBack, slideshow.textOpacity*0.7);

				var slideText = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_text');
				SetOpacity(slideText, slideshow.textOpacity);
			}
			else if(slideshow.textFadeTimeLeft > 0)
			{
				slideshow.textOpacity = 1;
				slideshow.textFadeTimeLeft = 0;

				var slideTextBack = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_textback');
				SetOpacity(slideTextBack, 0.7);

				var slideText = document.getElementById('hq_slide_'+id+'_'+slideshow.index+'_text');
				SetOpacity(slideText, 1);
			}
		}
		else if(slideshow.delayTimeLeft >= 0.05)
		{
			slideshow.delayTimeLeft -= 0.05;
		}
		else if(slideshow.delayTimeLeft > 0)
		{
			SlideshowJump(id, 1);
		}
	}
}


function SetOpacity(slide, opacity)
{
	if(slide.filters  &&  slide.filters[0])
	{
		if(typeof slide.filters[0].opacity == "number") //if IE6+
		{
			slide.filters[0].opacity = opacity*100;
		}
		else //else if IE5.5-
		{
			slide.style.filter = "alpha(opacity="+(opacity*100)+")";
		}
	}
	else if(slide.style.MozOpacity)
	{
		slide.style.MozOpacity = opacity;
	}
	else if(slide.style.KhtmlOpacity)
	{
		slide.style.KhtmlOpacity = opacity;
	}
	else if(slide.style.opacity  &&  !slide.filters)
	{
		slide.style.opacity = opacity;
	}
}


function SlideshowInit()
{
	for(id in hq_slideshows)
	{
		if(hq_slideshows.hasOwnProperty(id))
			SlideshowJumpTo(id);
	}

	setInterval('SlideshowThink();', 50);
}
