/*
 * 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 true //!!(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)
        });
    return this
    }
})(jQuery);
