GalleryControl = function(id){
	
	this.id = id;
	this._images = new Array();
	this._wrapper = null;
	this._container = null;
	this._current = 0;
	this._loaded = new Array();
	
	this.__construct = function(){
		
		GalleryControl._instances[this.id] = this;
		
		this._wrapper = $('#'+this.id);
		this._container = $(
			'<div class="classic_gallery">' + 
			'</div>'
		);
		
		var header = $('<div class="classic_galleryHeader"></div>');
		var image = $('<div class="classic_galleryImage"></div>');
		var footer = $('<div class="classic_galleryFooter"></div>');
		var footerInner = $('<div class="classic_galleryFooterContent"></div>');
		
		var prevCont = $('<div class="previousImage"></div>');
		prevCont.hide();
		prevCont.css('position','absolute');
		prevCont.css('zIndex','2');
		
		var nextCont = $('<div class="nextImage"></div>');
		nextCont.hide();
		nextCont.css('position','absolute');
		nextCont.css('zIndex','1');
		nextCont.css('cursor','hand');
		nextCont.css('cursor','pointer');
		
		var index = $('<div class="index"></div>');
		index.css('position','absolute');
		index.css('zIndex','3');
		
		nextCont.click(new Function("GalleryControl.next('"+this.id+"');"));
		
		image.append(prevCont);
		image.append(nextCont);
		image.append(index);
		
		if (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6) {
			var prev = $('<div class="classic_galleryPrev"><a href="javascript:GalleryControl.previous(\''+this.id+'\')"><img src="/images/emptyPng.png" alt="Edellinen" title="Edellinen" style="width: 25px;height: 25px;filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'/images/slideshowPrev.png\', sizingMethod=\'scale\');"></a></div>');
			var next = $('<div class="classic_galleryNext"><a href="javascript:GalleryControl.next(\''+this.id+'\')"><img src="/images/emptyPng.png" alt="Seuraava" title="Seuraava" style="width: 25px;height: 25px;filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'/images/slideshowNext.png\', sizingMethod=\'scale\');"></a></div>');
		}
		else{
			var prev = $('<div class="classic_galleryPrev"><a href="javascript:GalleryControl.previous(\''+this.id+'\')"><img src="/images/slideshowPrev.png" alt="Edellinen"></a></div>');
			var next = $('<div class="classic_galleryNext"><a href="javascript:GalleryControl.next(\''+this.id+'\')"><img src="/images/slideshowNext.png" alt="Seuraava"></a></div>');
		}
		
		var clearer = $('<div class="classic_galleryClearer">&nbsp;</div>');
		
		var controllContainer = $('<div class="classic_controllerContainer"></div>');
		var imageCaption = $('<div class="classic_caption"></div>');
		
		controllContainer.append(prev);
		controllContainer.append(next);
		
		footerInner.append(imageCaption);
		footerInner.append(controllContainer);
		footerInner.append(clearer);
		
		footer.append(footerInner);

		this._container.append(header);
		this._container.append(image);
		this._container.append(footer);		
	}
	
	this.update = function(){
		this._wrapper.empty();
		this._wrapper.append(this._container);
		
		var index = this._container.find('.index');
		var item;
		for(var i = 0; i<this._images.length; i++){
			item = $('<div class="item"></div>');
			item.click(new Function("GalleryControl.show('"+this.id+"', "+i+");"));
			
			index.append(item);
		}
		
		this.show(0);
	}
	
	this.addImages = function(images){
		var img;
		
		for(var i=0;i<images.length;i++){
			img = images[i];
			this.addImage(img.uri, img.caption);
		}
	}
	
	this.addImage = function(uri, caption){
		var img;
		
		this._images.push({uri:uri, caption:caption});
		
		img = new Image();
		img.src = uri;
		img.name = caption;
		
		this._loaded.push(img);
	}
	
	this.previous = function(){
		var current = this._current;
		
		if (this._current == 0) {
			current = this._images.length;
		}
		
		if (this._current < 0) {
			current = 0;
			return false;
		}
		
		this.show(current-1);
		return true;
	}
	
	this.next = function(){
		if(this._images.length == 0){
			return false;
		}
				
		var current = this._current;
		
		if (!this.hasNext()) {
			current = -1;
		}
		
		this.show(current+1);
		return true;
	}
	
	this.show = function(index){
		if(index < 0 || index >= this._images.length) return false;
		
		var image = this._images[index];
		
		var imageContainer = this._container.find('.classic_galleryImage');

		var footerContainer = this._container.find('.classic_galleryFooter');

		var exists = imageContainer.find('img').length > 0;

		if(exists){
			imageContainer.find('.previousImage').empty();
			imageContainer.find('.previousImage').append(imageContainer.find('.nextImage').find('img'));
			imageContainer.find('.previousImage').show();
		}
		
		imageContainer.find('.nextImage').empty();
		imageContainer.find('.nextImage').append($(this._loaded[index]));	
		imageContainer.find('.nextImage').show();	
			
		if(exists){
			imageContainer.find('.previousImage').fadeOut();
		}
		
		var captionContainer = this._container.find('.classic_galleryFooter .classic_caption');
		captionContainer.html(image.caption);
		
		this._container.find('.index').find('.item:eq('+this._current+')').removeClass('itemSelected');
		this._container.find('.index').find('.item:eq('+index+')').addClass('itemSelected');
		
		imageContainer.height(imageContainer.find('.nextImage').height());
		footerContainer.width(imageContainer.find('.nextImage').width());
		
		this._current = index;
	}
	
	this.hasNext = function(){
		return this._images.length-1 > this._current;
	}
	
	this.__construct();
}

GalleryControl._instances = new Object();

GalleryControl.next = function(id){
	GalleryControl._instances[id].next();
}

GalleryControl.previous = function(id){
	GalleryControl._instances[id].previous();
}

GalleryControl.show = function(id, position){
	GalleryControl._instances[id].show(position);
}
