;(function($){
	var options = {}, imgPreloader = new Image, imgTypes = ['png', 'jpg', 'jpeg', 'gif'];
	// Call this function to initialise the gallery
	$.fn.mfGallery = function(itemArray) {
		
		options.itemArray = [];
		options.itemNum = 0;
		options.initialised = false;
		
		// Initialise the gallery for the first time
		$.fn.mfGallery.initialise(itemArray);
		
		// Return the jQuery object to activate the gallery on click.
		return this.each(function(){
			$(this).unbind('click').click(function(){
				$.fn.mfGallery.changeItem(0);
				return false;
			});
		});
	};
	
	$.fn.mfGallery.initialise = function(itemArray) {
		// Create the wrapper element for the gallery
		$('<div id="mfgallery-wrapper"><div id="mfgallery-outer"><div id="mfgallery-inner"><div id="mfgallery-loading"></div><div id="mfgallery-content"></div></div><div id="mfgallery-thumbs"><ul></ul></div><div id="mfgallery-close"></div></div></div>').appendTo('body');
		// Remove any current thumbnails
		$('#mfgallery-thumbs ul').empty();
		// Close the gallery window when the close button is clicked
		$('#mfgallery-close').click($.fn.mfGallery.close);
		// Load the images from the external page
		options.itemArray = itemArray;
		$(options.itemArray).each(function(i) {
			$('<li><a id="mfgallery-image-' + i + '" href="' + options.itemArray[i].url + '"><img src="' + options.itemArray[i].thumbUrl + '" alt="' + options.itemArray[i].title + '" /></a></li>').appendTo('#mfgallery-thumbs ul');
			$('#mfgallery-image-' + i).unbind('click').click(function(){
				$.fn.mfGallery.changeItem(i);
				return false;
			});
		});
		
		options.initialised = true;	
	}
	
	$.fn.mfGallery.changeItem = function(n) {
		
		if(!options.initialised) {
			$.fn.mfGallery.initialise(options.productId);
		}
		
		$('#mfgallery-wrapper:hidden').css({
			'left': ($(window).width() - $('#mfgallery-wrapper').width()) / 2,
			'top': ($(window).height() - $('#mfgallery-wrapper').height()) / 2
		});
			
		options.itemNum = n;
		$(document).unbind("keydown");
		
		imgRegExp = imgTypes.join('|');
    	imgRegExp = new RegExp('\.' + imgRegExp + '$', 'i');
    	    	
    	var url = options.itemArray[n].url;
    	
    	if(url.match(imgRegExp)) {
    		$("#mfgallery-loading").show();
			$("#mfgallery-wrapper").fadeIn();    		
			$(imgPreloader).unbind('load').bind('load', function() {
				$.fn.mfGallery.showItem(imgPreloader.src);
			}).attr('src', url + '?rand=' + Math.floor(Math.random() * 999999999) );    	
    	}
	};
	
	$.fn.mfGallery.showItem = function(val) {
		if (options.active) {
			$('#mfgallery-content').fadeOut("normal", function() {
				$("#mfgallery-content").css('background-image', 'url(' + val + ')').show();
				$("#mfgallery-loading").hide();
			});
		} else {
			options.active = true;
			$("#mfgallery-content").empty();
			$("#mfgallery-content").css('background-image', 'url(' + val + ')').show();
			$("#mfgallery-loading").hide();			
		}
		$.fn.mfGallery.updateDetails();			
	};
	
	$.fn.mfGallery.updateDetails = function() {
		$(document).keydown(function(event) {
			if (event.keyCode == 27) {
            	$.fn.mfGallery.close();
			} else if(event.keyCode == 37 && options.itemNum != 0) {
            	$.fn.mfGallery.changeItem(options.itemNum - 1);
			} else if(event.keyCode == 39 && options.itemNum != (options.itemArray.length - 1)) {
            	$.fn.mfGallery.changeItem(options.itemNum + 1);
			}
		});	
	};
	
	$.fn.mfGallery.close = function() {
		$(imgPreloader).unbind('load');
		$(document).unbind("keydown");
		
		$("#mfgallery-wrapper").fadeOut('fast', function(){
			$('#mfgallery-wrapper').remove();
		});
		
		options.active = false;
		options.initialised = false;
	};
})(jQuery);

