(function(J) {  
    J.anythingZoomer = {         
    }
    
    J.fn.extend({
        anythingZoomer:function(config) {
         
            var wrap = J(this);
        
            var smallArea = J(config.smallArea);
            var largeArea = J(config.largeArea);
            var zoomPort = J(config.zoomPort);
            var mover = J(config.mover);
            
            var xSpeedMultiplier = config.xSpeedMultiplier;
            var ySpeedMultiplier = config.ySpeedMultiplier;
            
            var smallImageHeight = config.smallImageHeight;
            var smallImageWidth = config.smallImageWidth;
            
            var largeImageWidth = config.largeImageWidth;
            var largeImageHeight = config.largeImageHeight;
            
             // Because the largeArea is often hidden, the width() function returns zero, take width from CSS instead  
		    largeArea.data("origWidth", largeArea.css("width"));

            setup(smallArea, largeArea, wrap, zoomPort, mover,  xSpeedMultiplier, ySpeedMultiplier, smallImageWidth, smallImageHeight, largeImageWidth, largeImageHeight);
           
            function setup(smallArea, largeArea, wrap, zoomPort, mover, xSpeedMultiplier, ySpeedMultiplier, smallImageWidth, smallImageHeight, largeImageWidth, largeImageHeight) {

                zoomPort
                    .fadeIn();
                    
                mover
                    .css({
                        width: mover.data("origWidth"),
                        height: mover.data("origHeight"),
                        overflow: "hidden"
                    })
                    .fadeOut(0);
                smallArea
                	.mouseenter(function(){
            		     mover.fadeIn();
            		})
            		.mouseout(function(){
            			mover.fadeOut();
            		})
            		.mousemove(function(e){	
            			var x = e.pageX - smallArea.offset().left;
            			var y = e.pageY - smallArea.offset().top;
            			var maxX = -(smallImageWidth*xSpeedMultiplier)+zoomPort.width();
              			var minX = 0;
            			var newX = ((-(x)*xSpeedMultiplier)+smallImageWidth/2);
            			newX = newX < minX ? newX : minX;
            			newX = newX < maxX ? maxX : newX;
            			
            			var maxY = -(smallImageHeight * ySpeedMultiplier)+smallImageHeight;
            			var minY = 0;
            			var newY = (-(y)*ySpeedMultiplier)+smallImageHeight/2;
            			newY = newY < minY ? newY : minY;
            			newY = newY < maxY ? maxY : newY;
            			largeArea.css({
            			    left: newX,
            			    top: newY          			
            			});
            		})	
            };
            return this;
        }
    });
})(jQuery);

    
function selectImage(selector, wrapId) {
	jQuery(function (J) {
	   	J('#'+wrapId).fadeIn();
	   	J('.gal-thumbnail').removeClass('gal-selected');
	   	J('.gal-wrap').css({
	   		display: "none"
	  		});
	   	J('#'+wrapId)
	   		.css({
	   			display: "block"
	   		});
	   	J(selector).addClass('gal-selected');
	});
}




