/*
 * imgPreview jQuery plugin
 * Copyright (c) 2009 James Padolsey
 * j@qd9.co.uk | http://james.padolsey.com
 * Dual licensed under MIT and GPL.
 * Updated: 09/02/09
 * @author James Padolsey
 * @version 0.22
 */
(function(c) {
	c.expr[':'].linkingToImage = function(a, g, e) {
		return !!(c(a).attr(e[3]) && c(a).attr(e[3]).match(
				/\.(gif|jpe?g|png|bmp)$/i))
	};
	c.fn.imgPreview = function(j) {
		var b = c.extend( {
			imgCSS : {},
			distanceFromCursor : {
				top : 10,
				left : 10
			},
			preloadImages : true,
			onShow : function() {
			},
			onHide : function() {
			},
			onLoad : function() {
			},
			containerID : 'imgPreviewContainer',
			containerLoadingClass : 'loading',
			thumbPrefix : '',
			srcAttr : 'href'
		}, j), d = c('<div/>').attr('id', b.containerID).append('<img/>')
				.hide().css('position', 'absolute').appendTo('body'), f = c(
				'img', d).css(b.imgCSS), h = this
				.filter(':linkingToImage(' + b.srcAttr + ')');
		if (!h.length)
			return this;
		function i(a) {
			return a.replace(/(\/?)([^\/]+)$/, '$1' + b.thumbPrefix + '$2')
		}
		if (b.preloadImages) {
			(function(a) {
				var g = new Image(), e = arguments.callee;
				g.src = i(c(h[a]).attr(b.srcAttr));
				g.onload = function() {
					h[a + 1] && e(a + 1)
				}
			})(0)
		}
		h.mousemove(function(a) {
			d.css( {
				top : a.pageY + b.distanceFromCursor.top + 'px',
				left : a.pageX + b.distanceFromCursor.left + 'px'
			})
		}).hover(function() {
			var a = this;
			d.addClass(b.containerLoadingClass).show();
			f.load(function() {
				d.removeClass(b.containerLoadingClass);
				f.show();
				b.onLoad.call(f[0], a)
			}).attr('src', i(c(a).attr(b.srcAttr)));
			b.onShow.call(d[0], a)
		}, function() {
			d.hide();
			f.unbind('load').attr('src', '').hide();
			b.onHide.call(d[0], this)
		});
		return this
	}
})(jQuery);
