(function($){  
	 	   
     //Attach this new method to jQuery  
     $.fn.extend({   
           
        //This is where you write your plugin's name  
        gallery: function(galleryId, numImages) {
    	 
    	 var pages = new Array();
    	 var currentPage = 0;
    	 var currentImage = null;
    	 
    	 var loadGallery = function (galleryId, numImages) {    		 
    		 $.ajax({
 				data: {'galleryId':galleryId,'numImages':numImages},
 				dataType: 'json',
 				error: function () {
 					alert('Error loading gallery.');
 				},
 				success: loadImages,
 				type: 'post',
 				url: 'gallery/load-gallery/'
 			});    		 
    	 };
    	 
    	 var loadImages = function (json) {
    		if (!json.errors) {
				pages = json.data.pages;
			}
    	 };
    	 
    	 var nextPage = function () {
    		 var next = currentPage + 1;
    		 if (pages[next].images) {
    			 loadPage(next);
    			 currentPage = next;
    		 }
    	 };
    	 
    	 var prevPage = function () {
    		 var prev = currentPage - 1;
    		 if (pages[prev].images) {
    			 loadPage(prev);
    			 currentPage = prev;
    		 }
    	 };
    	 
    	 var loadPage = function (index) {
    		 $('#gallery-images').animate({opacity:0},500, function () {
    			 var newPage = "";
        		 var images = pages[index].images;
        		 var brCount = 0;
        		 for (idx in images) {
        			 newPage += '<div class="gallery-image"><div class="gallery-image-frame" style="background: url(images/resize/300_300_'+images[idx].filename+') no-repeat top left;" title="'+images[idx].caption+'"></div></div>';
        			 brCount++;
        			 if (brCount == 3) {
        				 newPage += '<br clear="both" />';
        				 brCount = 0;
        			 }        			 
        		 }
        		 
        		 $('#gallery-images').html(newPage.toString());
        		 
        		 registerImageEvents();
        		 
        		 $('#gallery-images').animate({opacity:100},500);
    		 });     		 
    	 };
    	 
    	 var registerImageEvents = function () {
    		 var count = 0;
    		 $('.gallery-image-frame').each(function () {
    			 $(this).attr('id', 'gimg_' + count);
    			 $(this).bind('mouseover', function () {
    				 $(this).animate({opacity:0}, 350, function () { $(this).animate({opacity:100}, 350);  });
    			 });
    			 $(this).bind('click', function () {
    				 currentImage = this;
    				 var imageUrl = $(this).css('backgroundImage').toString().replace(/[0-9]{1,4}_[0-9]{1,4}/,'400_400');
    				 imageUrl = imageUrl.substr(4, imageUrl.length - 5).replace(/resize/, 'resize-gallery-image');
    				 imageUrl.replace(/\"/gi, '');
    				 var title = $(this).attr('title');
    				 
    				 $.ajax({
    					 	data: {'image-url':imageUrl},
    					 	dataType: 'json',
    		 				error: function () {
    		 					alert('Error loading image.');
    		 				},
    		 				success: function (json) {
    		 					gui.dialog(title, '<div id="gallery-image-large"></div>', false, json[0] + 40, json[1] + 115, true, {});
    		 					
    		 					$('#gallery-image-large').html('<img id="gallerypop-image" src="'+ imageUrl +'" width="'+json[0]+'px" height="'+json[1]+'px" /><div id="gallery-pop-prev-btn" title="previous"></div><div id="gallery-pop-next-btn" title="next"></div>');
    		 					$('#dialog').animate({height: $('#gallery-image-large').outerHeight() + 67}, 200);
    		 					$('.ui-dialog').animate({width: json[0] + 50}, 200);
    		 					
    		 					$('#gallerypop-image, #gallery-pop-next-btn').bind('click', nextImage);
    		 					$('#gallery-pop-prev-btn').bind('click', prevImage);
    		 				},
    		 				type: 'post',
    		 				url: '/images/gen-gallery-image/'
    		 			});
    			 });
    			 count++;
    		 });    		 
    	 };
    	 
    	 var nextImage = function () {
    		 var imgId = parseInt($(currentImage).attr('id').match(/[0-9]/)) + 1;
    		 if (imgId == 9) {
    			 nextPage();
    			 $('.ui-widget-overlay').trigger('click');
    			 return false;
    		 }
    		 
    		 $('#gimg_' + imgId).trigger('click');
    	 };
    	 
    	 var prevImage = function () {
    		 var imgId = parseInt($(currentImage).attr('id').match(/[0-9]/)) - 1;
    		 if (imgId < 0) {
    			 prevPage();
    			 $('.ui-widget-overlay').trigger('click');
    			 return false;
    		 }
    		 $('#gimg_' + imgId).trigger('click');
    	 };
    	
    	//Iterate over the current set of matched elements  
         return this.each(function () {
        	      			
 			loadGallery(galleryId, numImages);
 			
 			// setting click events
 			$('#gallery-prev-btn').bind('click', prevPage);
 			$('#gallery-next-btn').bind('click', nextPage);
 			
 			registerImageEvents();
         
         });
     	}
     });         
})(jQuery);
