(function($){

var _images = new Array();

function thumbnail( filename ){
    return _imageDir +'/'+ _thumbSize + '/' + filename;
}

function fullsize( filename ){
    return _imageDir +'/'+ _fullSize + '/' + filename;
}

jQuery.gallery =
{
	add_corners: function(){
		$('#thumbnails').append('<div class="tl"></div><div class="tr"></div><div class="bl"></div><div class="br"></div>');
		$('#fullsize').append('<div class="tl"></div><div class="tr"></div><div class="bl"></div><div class="br"></div>');
	},
	
	preload: function(){
		var assets = ['next_base.jpg','next_over.jpg','prev_base.jpg','prev_over.jpg'];
		$.preload(assets,{'base':'/assets/'});
	},
	
	load : function( gallery_id ){
		//window.loadFirebugConsole(); 
		//Set number of thumbs to show
		_thumbsPerPage = $('#thumbnails li').get().length;
		//get the images for gallery_id
		$('#thumbnails .loader').addClass("loading");
		var params = gallery_id ? 'g=' + gallery_id : '';
		$.ajax({ 
			type: "GET", url: "api/gallery.php", data: params,
			success: function( json ){
				var r = eval('('+json+')');
				var preload = new Array();
				//store the images
				$.each(r, function(i){
					_images.push(this);
					preload.push(this.filename);
				});
				//preload them
				//$.preload(preload,{'base':_imageDir+'/'+_fullSize+'/'});
				$.preload(preload,{'base':_imageDir+'/'+_thumbSize+'/'});
				//display them
				$.gallery.display_thumbs(0,true);
			}
		});
	},
	
	display_thumbs : function( start, displayFullsize ){
		//Display the loader
		$('#thumbnails .loader').addClass("loading");
		
		var toLoad = _thumbsPerPage < (_images.length - start) ? _thumbsPerPage : (_images.length - start);
		var i = start;
		var loaded = 0;
		//Add the thumbnails
		$('#thumbnails li').each(function(){$(this).children().remove();});
		$('#thumbnails li').each(function(){
			var img = new Image();
			var parent = this;
			if( i < _images.length ){
				var index = i;
				$(img)
				.load(function () {
					//Load Events
					$(this).css({opacity:0});
					$(parent).append(this);
					if( ++loaded == toLoad ){
						//var offset = (_fullSize - $('#thumbnails ul').height()) / 2;
						if( displayFullsize ){
							$.gallery.display_image(_images[0], function(){
								$('#thumbnails ul').center();
								$('#thumbnails li img').fadeTo('slow',1);
								$('#thumbnails .loader').removeClass('loading');
							});
						}else{
							$('#thumbnails ul').center();
							$('#thumbnails li img').fadeTo('slow',1);
							$('#thumbnails .loader').removeClass('loading');
						}
					}
				})
				.click(function(){
					$.gallery.display_image(_images[index]);
				})
				.attr('src', thumbnail(_images[index].filename));
			}else
				$(parent).children().remove();
			i++;
		});	
		//Next Prev Buttons
		$('#prev, #next').unbind('click');
		if( i < (_images.length - 1) ){
			$('#next').addClass("active");
			$('#next').bind('click', function(){
				$.gallery.display_thumbs(i);
			});
		}else
			$('#next').removeClass("active");
		if( start > 0 ){
			var prev_start = (start - _thumbsPerPage) < 0 ? 0 : (start - _thumbsPerPage);
			$('#prev').addClass("active");
			$('#prev').bind('click', function(){
				$.gallery.display_thumbs(prev_start);
			});
		}else
			$('#prev').removeClass("active");
	},
	
	display_image : function( image, callback ){
		$('#fullsize').children('img').remove();
		$('#fullsize .loader').addClass("loading");
		$('#image_info').hide();
		var full_img = new Image();
		$(full_img).load(function(){
			$(this).css({opacity:0});
			$('#fullsize').append(this);
			$(this).center();
			$(this).fadeTo('slow',1,function(){
				//Display Image Info
				$('#image_info .title, #image_info .desc').empty();
				$('#image_info .title').append(image.title.replace(/(\\")/g,'"').replace(/\\'/,"'")	);
				$('#image_info .desc').append(image.description.replace(/(\\")/g,'"').replace(/\\'/,"'"));
				$('#image_info').slideDown();
			});
			$('#fullsize .loader').removeClass('loading');
			if( callback )
				callback.call();
		}).attr('src', fullsize(image.filename));
	}
	
}

})(jQuery);