var timer
var slideImagePreload
var tabImageOffPreload
var tabImageOnPreload

function Preload(slides)
{
	slideImagePreload = new Array();
	tabImageOffPreload = new Array();
	tabImageOnPreload = new Array();
	for (i = 0; i < slides.length; i++)
	{
		slideImagePreload[i] = new Image();
		tabImageOffPreload[i] = new Image();
		tabImageOnPreload[i] = new Image();
		
		slideImagePreload[i].src = slides[i].src;
		tabImageOffPreload[i].src = slides[i].imageOff;
		tabImageOnPreload[i].src = slides[i].imageOn;
	}
}

function GetChildren(elem, id2elem)
{
    if (!id2elem)
        id2elem = new Object();
    var children = elem.childNodes;
	for (var i=0, n=children.length; i<n; i++)
	{
	    var child = children[i];
	    id2elem[child.id] = child;
	    GetChildren(child, id2elem);
	}
	return id2elem;
}

function AddEvent(obj, evType, fn, useCapture) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, useCapture);
        return true;
    } else if (obj.attachEvent) {
      var r = obj.attachEvent('on'+evType, fn);
      return r;
    } else {
      alert('Handler could not be attached');
    }
 }

function ChangeImageSlide(slideShow, slides)
{
	var slide = slides[slideShow.num];
	var children = GetChildren(slideShow);
	if(slide.href)
		children["link"].href = slide.href;
	children["image"].src = slideImagePreload[slideShow.num].src;
	if (children["caption"])
		children["caption"].innerHTML = slide.caption;
	
	for(var i = 0; i < slides.length; i++) {
		var imgid = "img" + i;
	    children[imgid].src = tabImageOffPreload[i].src;
	}
	imgid = "img" + slideShow.num;
	children[imgid].src = tabImageOnPreload[slideShow.num].src;
}

function DeactivateSlideAndTab(slideShowId, slides, interval)
{
	var slideShow = document.getElementById(slideShowId);
	timer = setTimeout(function() { RunSlideShow(slideShow, slides, interval); },2000);
}

function ActivateSlideAndTab(activeId, slideShowId, slides)
{
	var slideShow = document.getElementById(slideShowId);
	clearTimeout(timer);
	if(slideShow.num != activeId)
	{
		slideShow.num = activeId;
		var slide = slides[activeId];
		var children = GetChildren(slideShow);
		if(slide.href)
			children["link"].href = slide.href;
		children["image"].src = slideImagePreload[activeId].src;
		if (children["caption"])
			children["caption"].innerHTML = slide.caption;
		
		for(var i = 0; i < slides.length; i++) {
			var imgid = "img" + i;
			children[imgid].src = tabImageOffPreload[i].src;
		}
		imgid = "img" + activeId;
		children[imgid].src = tabImageOnPreload[activeId].src;
	}
}

function HidePrevShowCurrSlide(slideShow, slides)
{
	if (slideShow.prevNum != null) {
		var prevSlide = slides[slideShow.prevNum];
		prevSlide.style.display = "none";
	}
	
	var currSlide = slides[slideShow.num];
	currSlide.style.display = "";
}

function Transition(slideShow, slides, changeSlideFunc)
{
	var isIeFilterEnabled = slideShow.filters && slideShow.filters.length > 0;
	if (isIeFilterEnabled)
		slideShow.filters[0].apply();
		
	if (!changeSlideFunc)
		changeSlideFunc = ChangeImageSlide;
	
	changeSlideFunc(slideShow, slides);
	
	if (isIeFilterEnabled)
		slideShow.filters[0].play();
}

function ShowPreviousImage(slideShow, slides, changeSlideFunc)
{
	if (slides.length == 0)
		return;
	
	slideShow.prevNum = slideShow.num;
	
	if (slideShow.num == null)
		slideShow.num = slides.length;
	
	slideShow.num--;
	
	// if first image is reached, display the first image
	if (slideShow.num < 0)
		slideShow.num = slides.length - 1;
		
	Transition(slideShow, slides, changeSlideFunc);
}

function ShowNextImage(slideShow, slides, changeSlideFunc)
{
	if (slides.length == 0)
		return;
	
	slideShow.prevNum = slideShow.num;
	
	if (slideShow.num == null)
		slideShow.num = -1;
	
	slideShow.num++;
	
	// if last image is reached, display the first image
	if (slideShow.num >= slides.length)
		slideShow.num = 0;
		
	Transition(slideShow, slides, changeSlideFunc);
}

function RunSlideShow(slideShow, slides, interval, changeSlideFunc)
{
	
	ShowNextImage(slideShow, slides, changeSlideFunc);
	timer = setTimeout(function() { RunSlideShow(slideShow, slides, interval, changeSlideFunc); }, interval);
}

function StartSlideShow(slideShow, slides, interval, changeSlideFunc)
{
	Preload(slides);
	RunSlideShow(slideShow, slides, interval, changeSlideFunc);
}

function InitializeSlideShow(slideShow, slides, changeSlideFunc)
{
	ShowNextImage(slideShow, slides, changeSlideFunc);
}

