jQuery.fn.imgZoom = function(options){
	
	var settings = jQuery.extend({
		largeImage:''
	}, options);

	var dim = {
		w:jQuery(this).width(),
		h:jQuery(this).height()
	};
	
	dim = jQuery.extend(dim, jQuery(this).position());
	
	if (jQuery('#imageZoom').length == 0) jQuery(this).offsetParent().append('<div id="imageZoom"></div>');
	
	var popUp = jQuery('#imageZoom');
	
	var largeImage = (typeof settings.largeImage == 'function')? settings.largeImage() : settings.largeImage;
	
	popUp.css({
		position: 'absolute',
		left: dim.left,
		top: dim.top,
		width: dim.w,
		height: dim.h,
		backgroundImage: 'url(' + largeImage + ')',
		display:'none'
	});
	
	jQuery(this).bind('mouseenter', function(event){
		var dim1 = jQuery(this).offset();
		var dim2 = jQuery(this).position();
		var largeImage = (typeof settings.largeImage == 'function')? settings.largeImage() : settings.largeImage;
		popUp.css({
			left: dim2.left,
			top: dim2.top,
			width: dim.w,
			height: dim.h,
			backgroundImage: 'url(' + largeImage + ')'
		});
		var left = (((event.pageX - dim1.left)  / dim.w) * 100).toFixed();
		var top = (((event.pageY - dim1.top)  / dim.h) * 100).toFixed();
		popUp.css('background-position', left + '% '+ top + '%');
		popUp.fadeIn();
	});
	
	jQuery(popUp).bind('mousemove', function(event){
		var dim1 = jQuery(this).offset();
		var left = (((event.pageX - dim1.left)  / dim.w) * 100).toFixed();
		var top = (((event.pageY - dim1.top)  / dim.h) * 100).toFixed();
		popUp.css('background-position', left + '% '+ top + '%');
	});
	
	jQuery(popUp).bind('mouseleave', function(event){
		popUp.fadeOut();
	});
	
	return this;

};
