
var Slideshow = Class.create();

Slideshow.prototype =
{

	currentImage : null,
    loadInterval : 0,
    
	imageNum : 0,
	groupName : null,
	
	imageArray : null,
	
	imageNumCounters : null,
	imageTitles : null,
	imageDescriptions : null,
	images : null,
	imageLinks : null,
	
	playLink : null,
	running : false,
	timer : 0,
	slideInterval : 5000,
 	initialize : function()
 	{
		this.images = $$('[rel="slideshow[img]"]').collect(function(tag){ return [ tag ]; }).uniq();
		this.imageTitles = $$('[rel="slideshow[title]"]').collect(function(tag){ return [ tag ]; }).uniq();
		this.imageDescriptions = $$('[rel="slideshow[description]"]').collect(function(tag){ return [ tag ]; }).uniq();
		this.descriptionArray = $$('[rel="lightbox[description]"]').collect(function(tag){ return [ tag ]; }).uniq();
		this.imageNumCounters = $$('[rel="slideshow[num]"]').collect(function(tag){ return [ tag ]; }).uniq();
	}
	,
	loadGroup : function(group)
	{
	
		if(group==this.groupName) return;
		
		this.groupName = group;
		this.imageNum = 0;

		this.imageLinks = $$('[rel="lightbox"]').collect(function(tag){ return [ tag ]; }).uniq();
						
		this.imageArray = 
            $$('A[href][rel="' + group + '"]').
            collect(function(anchor){ return [anchor.href, anchor.title, anchor, $(anchor.getAttribute("descriptionElement")) ]; }).
            uniq();
        /*
        this.imageArray = new Array();
        var itm = null;
        for(var i=0;itm=arr[i];i++)
        {
            var add = true;
            for(var ii=0;ii<this.imageArray.length;ii++)
            {
            	if(this.imageArray[ii][0]==itm[0])
            	{
            		this.imageArray[ii] = itm;
            		add = false;
				}
			}
			if(add)
            	this.imageArray.push(itm);
		}*/
	}
	,
	Start : function(group, pl)
	{
	 	this.loadGroup(group);
	 	this.playLink = pl;
	 	if(this.running)
	 	{
	 		this.Stop();
		}
		else
	 	{
	 		this.timer = setTimeout(function () { SlideShow.doNext() },  this.slideInterval);
	 		this.running = true;
	 		this.setLinkText();
		}
	 	
	}
	,
	Stop : function()
	{
		this.running = false;
		clearTimeout(this.timer);
		this.setLinkText();
	}
	,
	setLinkText : function()
	{
		if(this.playLink)
		{
			this.playLink.innerHTML = (this.running?"Stop Slideshow":"Start Slideshow");
			this.playLink.className = this.running ? "gcstop" : "gcplay";
		}
	}
	,
	doNext : function()
	{
		if(!this.Next(this.groupName))
			this.Stop();
		else
	 		this.timer = setTimeout(function () { SlideShow.doNext() }, this.slideInterval);
	}
	,
	Previous : function(group)
	{	
		this.loadGroup(group);
		if(this.imageNum<1) return false;
		this.imageNum--;
		this.setImage(this.imageNum);
		return true;
	}
	,
	Next : function(group)
	{
		this.loadGroup(group);
		if(this.imageNum>=this.imageArray.length-1) return false;
		this.imageNum++;
		this.setImage(this.imageNum);
		return true;
	}
	,
	Jump : function(num, group)
	{
		this.loadGroup(group);
		this.imageNum = num-1;
		this.setImage();
	}
	,
	setImage : function()
	{        

		for(var i=0;i<this.imageArray.length;i++)
		{
			this.imageArray[i][2].className = "";
		}
		this.imageArray[this.imageNum][2].className = "gton";
							
		if(this.images)
		{
			var throbber = document.createElement("img");
			throbber.src = "/images/ajax-loader_black.gif";
			throbber.style.position = "absolute";
			document.body.appendChild(throbber);   
			Slideshow.currentImage = null;
	        Slideshow.loadInterval = setInterval(function()
	        {
            	if(Slideshow.currentImage)
            	{
					throbber.style.left = (findPosX(Slideshow.currentImage) + Slideshow.currentImage.width/2 - 15) + "px";
					throbber.style.top = (findPosY(Slideshow.currentImage) + Slideshow.currentImage.height/2 - 15) + "px";
            		if(Slideshow.currentImage.complete || Slideshow.currentImage.readystate == "complete")
            		{
            	 		clearInterval(Slideshow.loadInterval);
            	 		document.body.removeChild(throbber);
					}
				}
			},100);
			for(var i=0;i<this.images.length;i++)
			{
	            Slideshow.currentImage = this.images[i][0];
                this.images[i][0].src = this.imageArray[this.imageNum][0];
			}
		}
		
		if(this.imageLinks.length)
		{                                  
        	this.imageLinks[0][0].href = this.imageArray[this.imageNum][0];
        	this.imageLinks[0][0].title = this.imageArray[this.imageNum][1];
		}

		if(this.imageTitles)
		{
			for(var i=0;i<this.imageTitles.length;i++)
	 			this.imageTitles[i][0].innerHTML = this.imageArray[this.imageNum][1];
		}

		if(this.imageNumCounters)
		{
			for(var i=0;i<this.imageNumCounters.length;i++)
	 			this.imageNumCounters[i][0].innerHTML = (this.imageNum+1);
		}

		if(this.imageDescriptions && this.descriptionArray[this.imageNum])
		{
			for(var i=0;i<this.imageDescriptions.length;i++)
	 			this.imageDescriptions[i][0].innerHTML = this.descriptionArray[this.imageNum][0].innerHTML;
	 			
		}
		
	}
}

var SlideShow = null;
document.observe('dom:loaded', function () { SlideShow = new Slideshow() });