(function($) {

	$.Boz = { 

		BuildGallery : function(params) {

			var firstTime = true;

			var settings = jQuery.extend({
				thumbTargets : $('#galleryThumbs > ul > li'),
				gallery_uid : 2,
				displayTarget : $('#galleryImage img'),
				titleTarget : $('#galleryInfo h4'),
				placeholderImg : 'placeholder.gif',
				data : null,
				page:0,
				selectedIndex:1,				

				validate : function(){					

					if(this.data.length-1 < this.selectedIndex)
						this.selectedIndex = 0;
					else if(this.selectedIndex < 0) 
						this.selectedIndex = this.data.length-1;
					
					var maxPages = Math.ceil( this.data.length / this.thumbTargets.length )-1;
					
					if(this.page>maxPages)
						this.page = maxPages;
					else if(this.page<0)
						this.page = 0;
					else{
						return true;
					}
					return false;
				},

				

				drawPage : function(){
					if(!this.validate()) return;
					var startIndex = (this.page * this.thumbTargets.length);
					var endIndex = Math.min(startIndex + this.thumbTargets.length, this.data.length);
					var i = startIndex;
					settings = this;
					thumbTargets = this.thumbTargets;

					$.each(this.thumbTargets, function(index,thumbHolder){
						$(thumbHolder).fadeOut(150,function(){						

							if(i>=settings.data.length){
								var linkImage = '<img src="/images/'+settings.placeholderImg+'">';
								$(thumbHolder).html(linkImage);
								$(thumbHolder).fadeIn(150);
								return;
							}

							var imageData = settings.data[i];
							var linkImage = $(
								'<a href="'+imageData.imageUrlOrig+'">'+
									'<img src="'+imageData.imageUrlThumb+'" alt="'+imageData.title+'" />'+
								'</a>'
							);							

							$(thumbHolder).html(linkImage);
							$(linkImage).find('img').load(function(){
								$(thumbHolder).fadeIn(150);
							});

							var x = i;						

							$(linkImage).click(function(){
								if(!firstTime && x == settings.selectedIndex) return false;
								settings.selectedIndex = x;
								return settings.draw();
							});

							if(firstTime){
								$(linkImage).trigger('click');
								firstTime = false;
							}

							i++;
						});
					});
				},

				draw : function(){ 
					this.validate();
					imageData = this.data[this.selectedIndex];
					//$('#gallery > .image > .main > img').fadeOut(150 , function(){
						//$('#gallery > .image > .main > img').attr('src',imageData.imageUrl).load(

					var displayTarget = this.displayTarget;
					$(displayTarget).fadeOut(150 , function(){
						$(displayTarget).load(
							function(event) {
								$(displayTarget).fadeIn(150);
							}
						).attr('src',imageData.imageUrl);
					});
					this.titleTarget.html(imageData.title);
				return false;
				}

			}, params);

			var callback = function(data){
				settings.data = data;
				settings.drawPage(0);
			};			

			$.ajax({
				url: "../gallery_request.php?gallery_uid="+settings.gallery_uid,
				cache: true,
				dataType: 'json',                   
				success: callback
			});

			return settings;

		}

	};


})(jQuery);

 
