/*
 * 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+')');

		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)
				}
		);

		this.click(function(){return false;});
		return this
	}
})(jQuery);
