function Preload(images)
{
	var imagePreload=new Array();
	for (i=0;i<images.length;i++)
	{
		imagePreload[i]=new Image();
		// set the src attribute
		imagePreload[i].src=image[i];
	}
}

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 = slide.src;
	if (children["caption"])
		children["caption"].innerHTML = slide.caption;
}

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);
	setTimeout(function() { RunSlideShow(slideShow, slides, interval, changeSlideFunc); }, interval);
}

function StartSlideShow(slideShow, slides, interval, changeSlideFunc)
{
	RunSlideShow(slideShow, slides, interval, changeSlideFunc);
}

function InitializeSlideShow(slideShow, slides, changeSlideFunc)
{
	ShowNextImage(slideShow, slides, changeSlideFunc);
}
