var SlideImages = Class.create();
SlideImages.prototype = {
    nextImageIndex: 0,
    imageElements: [],
    nextElement: null,
    currentElement: null,
    checkLoaded: true,
    nextImage: null,
    timerComplete: true,

    initialize: function(containerElement, images) 
    {
    	this.containerElement = $(containerElement);
    	this.images = images;
    	this.loadNext(); // load the first image
    	this.setCurrentImage(this.nextElement);
    	this.incrementNextIndex();
    	this.loadNext();
    },
    
    loadNext: function()
    {
    	// load the next image
    	var index = this.nextImageIndex;
    	
    	this.nextElement = this.imageElements[index];
    	this.checkLoaded = false;
    	
    	if(!this.nextElement)
    	{
    		this.checkLoaded = true;
    		img = new Element('IMG');
    		img.id = 'image' + index;
    		img.src = this.images[index].src;
    		img.title = this.images[index].alt;
    		img.alt = this.images[index].alt;
		img.style.display = 'block';
    		this.nextImage = img;
    		
    		if(this.images[index].link)
    		{
	    		link = new Element('A');
	    		link.href = this.images[index].link;
			link.id = 'image_link' + index;
			link.style.display = 'block';
	    		link.appendChild(img);
	    		this.imageElements.push(link);
    			this.nextElement = link;
	    	}
	    	else
	    	{
	    		this.imageElements.push(img);
    			this.nextElement = img;
    		}
    	}
    	return true;
    },
  
    next: function()
    {
    	if(this.checkLoaded && !this.nextImage.complete) return false;
    	this.setCurrentImage(this.nextElement);
    	this.incrementNextIndex();
    	return this.loadNext();
    },
    
    incrementNextIndex: function()
    {
	    this.nextImageIndex++;
    	if(this.nextImageIndex>=this.images.length) this.nextImageIndex = 0;
    },
    
    setCurrentImage: function(img)
    {
	if(this.currentElement) 
	{
		//this.currentElement.style.zIndex = 0;
    		var remove = function() {
			var nodes = this.containerElement.childNodes;
			for(var i=0;i<nodes.length;i++)
    			{
				this.containerElement.removeChild(nodes[i]);
    			}
		}
		this.timerId = setTimeout(remove.bind(this), 3000);
    	}
	
	this.currentElement = img;
   	this.containerElement.appendChild(img);
	var elementId = img.id;
	if(img.nodeName=='A')
	{
		var images = img.select('IMG');
		elementId = images[0].id;
	}
	$(elementId).style.display = 'none';
	Effect.Appear(elementId, { duration: 1.0 });
    }
};
