(function($){$.fn.jqzoom=function(options){var settings={zoomType:"standard",zoomWidth:200,zoomHeight:200,xOffset:10,yOffset:0,position:"right",lens:true,lensReset:false,imageOpacity:0.2,title:true,alwaysOn:false,showEffect:"show",hideEffect:"hide",fadeinSpeed:"fast",fadeoutSpeed:"slow",preloadImages:true,showPreload:true,preloadText:"Loading zoom",preloadPosition:"center"};
|
options=options||{};
|
$.extend(settings,options);
|
return this.each(function(){var a=$(this);
|
var aTitle=a.attr("title");
|
$(a).removeAttr("title");
|
$(a).css("outline-style","none");
|
var img=$("img",this);
|
var imageTitle=img.attr("title");
|
img.removeAttr("title");
|
var smallimage=new Smallimage(img);
|
var smallimagedata={};
|
var btop=0;
|
var bleft=0;
|
var loader=null;
|
loader=new Loader();
|
var ZoomTitle=(trim(aTitle).length>0)?aTitle:(trim(imageTitle).length>0)?imageTitle:null;
|
var ZoomTitleObj=new zoomTitle();
|
var largeimage=new Largeimage(a[0].href);
|
var lens=new Lens();
|
var lensdata={};
|
var largeimageloaded=false;
|
var scale={};
|
var stage=null;
|
var running=false;
|
var mousepos={};
|
var firstime=0;
|
var preloadshow=false;
|
var isMouseDown=false;
|
var dragstatus=false;
|
smallimage.loadimage();
|
$(this).click(function(){return false
|
});
|
$(this).hover(function(e){mousepos.x=e.pageX;
|
mousepos.y=e.pageY;
|
activate()
|
},function(){deactivate()
|
});
|
if(settings.alwaysOn){setTimeout(function(){activate()
|
},150)
|
}function activate(){if(!running){smallimage.findborder();
|
running=true;
|
imageTitle=img.attr("title");
|
img.removeAttr("title");
|
aTitle=a.attr("title");
|
$(a).removeAttr("title");
|
largeimage=new Largeimage(a[0].href);
|
largeimage.loadimage();
|
a[0].blur();
|
return false
|
}}function deactivate(){if(settings.zoomType=="reverse"&&!settings.alwaysOn){img.css({opacity:1})
|
}if(!settings.alwaysOn){running=false;
|
largeimageloaded=false;
|
$(lens.node).unbind("mousemove");
|
lens.remove();
|
if($("div.jqZoomWindow").length>0){stage.remove()
|
}if($("div.jqZoomTitle").length>0){ZoomTitleObj.remove()
|
}img.attr("title",imageTitle);
|
a.attr("title",aTitle);
|
$().unbind();
|
a.unbind("mousemove");
|
firstime=0;
|
if(jQuery(".zoom_ieframe").length>0){jQuery(".zoom_ieframe").remove()
|
}}else{if(settings.lensReset){switch(settings.zoomType){case"innerzoom":largeimage.setcenter();
|
break;
|
default:lens.center();
|
break
|
}}}if(settings.alwaysOn){activate()
|
}}function Smallimage(image){this.node=image[0];
|
this.loadimage=function(){this.node.src=image[0].src
|
};
|
this.findborder=function(){var bordertop="";
|
bordertop=$(img).css("border-top-width");
|
btop="";
|
var borderleft="";
|
borderleft=$(img).css("border-left-width");
|
bleft="";
|
if(bordertop){for(i=0;
|
i<3;
|
i++){var x=[];
|
x=bordertop.substr(i,1);
|
if(isNaN(x)==false){btop=btop+""+bordertop.substr(i,1)
|
}else{break
|
}}}if(borderleft){for(i=0;
|
i<3;
|
i++){if(!isNaN(borderleft.substr(i,1))){bleft=bleft+borderleft.substr(i,1)
|
}else{break
|
}}}btop=(btop.length>0)?eval(btop):0;
|
bleft=(bleft.length>0)?eval(bleft):0
|
};
|
this.node.onload=function(){a.css({cursor:"crosshair",display:"block"});
|
if(a.css("position")!="absolute"&&a.parent().css("position")){a.css({cursor:"crosshair",position:"relative",display:"block"})
|
}if(a.parent().css("position")!="absolute"){a.parent().css("position","relative")
|
}else{}$(img).css({position:"absolute",top:"0px",left:"0px"});
|
smallimagedata.w=$(this).width();
|
smallimagedata.h=$(this).height();
|
smallimagedata.h=$(this).height();
|
smallimagedata.pos=$(this).offset();
|
smallimagedata.pos.l=$(this).offset().left;
|
smallimagedata.pos.t=$(this).offset().top;
|
smallimagedata.pos.r=smallimagedata.w+smallimagedata.pos.l;
|
smallimagedata.pos.b=smallimagedata.h+smallimagedata.pos.t;
|
a.height(smallimagedata.h);
|
a.width(smallimagedata.w);
|
if(settings.preloadImages){largeimage.loadimage()
|
}};
|
return this
|
}function Lens(){this.node=document.createElement("div");
|
$(this.node).addClass("jqZoomPup");
|
this.node.onerror=function(){$(lens.node).remove();
|
lens=new Lens();
|
lens.activate()
|
};
|
this.loadlens=function(){switch(settings.zoomType){case"reverse":this.image=new Image();
|
this.image.src=smallimage.node.src;
|
this.node.appendChild(this.image);
|
$(this.node).css({opacity:1});
|
break;
|
case"innerzoom":this.image=new Image();
|
this.image.src=largeimage.node.src;
|
this.node.appendChild(this.image);
|
$(this.node).css({opacity:1});
|
break;
|
default:break
|
}switch(settings.zoomType){case"innerzoom":lensdata.w=smallimagedata.w;
|
lensdata.h=smallimagedata.h;
|
break;
|
default:lensdata.w=(settings.zoomWidth)/scale.x;
|
lensdata.h=(settings.zoomHeight)/scale.y;
|
break
|
}$(this.node).css({width:lensdata.w+"px",height:lensdata.h+"px",position:"absolute",display:"none",borderWidth:1+"px"});
|
a.append(this.node)
|
};
|
return this
|
}Lens.prototype.activate=function(){this.loadlens();
|
switch(settings.zoomType){case"reverse":img.css({opacity:settings.imageOpacity});
|
(settings.alwaysOn)?lens.center():lens.setposition(null);
|
a.bind("mousemove",function(e){mousepos.x=e.pageX;
|
mousepos.y=e.pageY;
|
lens.setposition(e)
|
});
|
break;
|
case"innerzoom":$(this.node).css({top:0,left:0});
|
if(settings.title){ZoomTitleObj.loadtitle()
|
}largeimage.setcenter();
|
a.bind("mousemove",function(e){mousepos.x=e.pageX;
|
mousepos.y=e.pageY;
|
largeimage.setinner(e)
|
});
|
break;
|
default:(settings.alwaysOn)?lens.center():lens.setposition(null);
|
$(a).bind("mousemove",function(e){mousepos.x=e.pageX;
|
mousepos.y=e.pageY;
|
lens.setposition(e)
|
});
|
break
|
}return this
|
};
|
Lens.prototype.setposition=function(e){if(e){mousepos.x=e.pageX;
|
mousepos.y=e.pageY
|
}if(firstime==0){var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;
|
var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;
|
$("div.jqZoomPup").show();
|
if(settings.lens){this.node.style.visibility="visible"
|
}else{this.node.style.visibility="hidden";
|
$("div.jqZoomPup").hide()
|
}firstime=1
|
}else{var lensleft=mousepos.x-smallimagedata.pos.l-(lensdata.w)/2;
|
var lenstop=mousepos.y-smallimagedata.pos.t-(lensdata.h)/2
|
}if(overleft()){lensleft=0+bleft
|
}else{if(overright()){if($.browser.msie){lensleft=smallimagedata.w-lensdata.w+bleft+1
|
}else{lensleft=smallimagedata.w-lensdata.w+bleft-1
|
}}}if(overtop()){lenstop=0+btop
|
}else{if(overbottom()){if($.browser.msie){lenstop=smallimagedata.h-lensdata.h+btop+1
|
}else{lenstop=smallimagedata.h-lensdata.h-1+btop
|
}}}lensleft=parseInt(lensleft);
|
lenstop=parseInt(lenstop);
|
$("div.jqZoomPup",a).css({top:lenstop,left:lensleft});
|
if(settings.zoomType=="reverse"){$("div.jqZoomPup img",a).css({position:"absolute",top:-(lenstop-btop+1),left:-(lensleft-bleft+1)})
|
}this.node.style.left=lensleft+"px";
|
this.node.style.top=lenstop+"px";
|
largeimage.setposition();
|
function overleft(){return mousepos.x-(lensdata.w+2*1)/2-bleft<smallimagedata.pos.l
|
}function overright(){return mousepos.x+(lensdata.w+2*1)/2>smallimagedata.pos.r+bleft
|
}function overtop(){return mousepos.y-(lensdata.h+2*1)/2-btop<smallimagedata.pos.t
|
}function overbottom(){return mousepos.y+(lensdata.h+2*1)/2>smallimagedata.pos.b+btop
|
}return this
|
};
|
Lens.prototype.center=function(){$("div.jqZoomPup",a).css("display","none");
|
var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;
|
var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;
|
this.node.style.left=lensleft+"px";
|
this.node.style.top=lenstop+"px";
|
$("div.jqZoomPup",a).css({top:lenstop,left:lensleft});
|
if(settings.zoomType=="reverse"){$("div.jqZoomPup img",a).css({position:"absolute",top:-(lenstop-btop+1),left:-(lensleft-bleft+1)})
|
}largeimage.setposition();
|
if($.browser.msie){$("div.jqZoomPup",a).show()
|
}else{setTimeout(function(){$("div.jqZoomPup").fadeIn("fast")
|
},10)
|
}};
|
Lens.prototype.getoffset=function(){var o={};
|
o.left=parseInt(this.node.style.left);
|
o.top=parseInt(this.node.style.top);
|
return o
|
};
|
Lens.prototype.remove=function(){if(settings.zoomType=="innerzoom"){$("div.jqZoomPup",a).fadeOut("fast",function(){$(this).remove()
|
})
|
}else{$("div.jqZoomPup",a).remove()
|
}};
|
Lens.prototype.findborder=function(){var bordertop="";
|
bordertop=$("div.jqZoomPup").css("borderTop");
|
lensbtop="";
|
var borderleft="";
|
borderleft=$("div.jqZoomPup").css("borderLeft");
|
lensbleft="";
|
if($.browser.msie){var temp=bordertop.split(" ");
|
bordertop=temp[1];
|
var temp=borderleft.split(" ");
|
borderleft=temp[1]
|
}if(bordertop){for(i=0;
|
i<3;
|
i++){var x=[];
|
x=bordertop.substr(i,1);
|
if(isNaN(x)==false){lensbtop=lensbtop+""+bordertop.substr(i,1)
|
}else{break
|
}}}if(borderleft){for(i=0;
|
i<3;
|
i++){if(!isNaN(borderleft.substr(i,1))){lensbleft=lensbleft+borderleft.substr(i,1)
|
}else{break
|
}}}lensbtop=(lensbtop.length>0)?eval(lensbtop):0;
|
lensbleft=(lensbleft.length>0)?eval(lensbleft):0
|
};
|
function Largeimage(url){this.url=url;
|
this.node=new Image();
|
this.loadimage=function(){if(!this.node){this.node=new Image()
|
}this.node.style.position="absolute";
|
this.node.style.display="none";
|
this.node.style.left="-5000px";
|
this.node.style.top="10px";
|
loader=new Loader();
|
if(settings.showPreload&&!preloadshow){loader.show();
|
preloadshow=true
|
}document.body.appendChild(this.node);
|
this.node.src=this.url
|
};
|
this.node.onload=function(){this.style.display="block";
|
var w=Math.round($(this).width());
|
var h=Math.round($(this).height());
|
this.style.display="none";
|
scale.x=(w/smallimagedata.w);
|
scale.y=(h/smallimagedata.h);
|
if($("div.preload").length>0){$("div.preload").remove()
|
}largeimageloaded=true;
|
if(settings.zoomType!="innerzoom"&&running){stage=new Stage();
|
stage.activate()
|
}if(running){lens=new Lens();
|
lens.activate()
|
}if($("div.preload").length>0){$("div.preload").remove()
|
}};
|
return this
|
}Largeimage.prototype.setposition=function(){this.node.style.left=Math.ceil(-scale.x*parseInt(lens.getoffset().left)+bleft)+"px";
|
this.node.style.top=Math.ceil(-scale.y*parseInt(lens.getoffset().top)+btop)+"px"
|
};
|
Largeimage.prototype.setinner=function(e){this.node.style.left=Math.ceil(-scale.x*Math.abs(e.pageX-smallimagedata.pos.l))+"px";
|
this.node.style.top=Math.ceil(-scale.y*Math.abs(e.pageY-smallimagedata.pos.t))+"px";
|
$("div.jqZoomPup img",a).css({position:"absolute",top:this.node.style.top,left:this.node.style.left})
|
};
|
Largeimage.prototype.setcenter=function(){this.node.style.left=Math.ceil(-scale.x*Math.abs((smallimagedata.w)/2))+"px";
|
this.node.style.top=Math.ceil(-scale.y*Math.abs((smallimagedata.h)/2))+"px";
|
$("div.jqZoomPup img",a).css({position:"absolute",top:this.node.style.top,left:this.node.style.left})
|
};
|
function Stage(){var leftpos=smallimagedata.pos.l;
|
var toppos=smallimagedata.pos.t;
|
this.node=document.createElement("div");
|
$(this.node).addClass("jqZoomWindow");
|
$(this.node).css({position:"absolute",width:Math.round(settings.zoomWidth)+"px",height:Math.round(settings.zoomHeight)+"px",display:"none",zIndex:10000,overflow:"hidden"});
|
switch(settings.position){case"right":leftpos=(smallimagedata.pos.r+Math.abs(settings.xOffset)+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));
|
topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;
|
toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;
|
break;
|
case"left":leftpos=(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth>0)?(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth):(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset));
|
topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;
|
toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;
|
break;
|
case"top":toppos=(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight>0)?(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight):(smallimagedata.pos.t+smallimagedata.h+Math.abs(settings.yOffset));
|
leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;
|
leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;
|
break;
|
case"bottom":toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<$("body").height())?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));
|
leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;
|
leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;
|
break;
|
default:leftpos=(smallimagedata.pos.l+smallimagedata.w+settings.xOffset+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));
|
toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<screen.height)?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));
|
break
|
}this.node.style.left=leftpos+"px";
|
this.node.style.top=toppos+"px";
|
return this
|
}Stage.prototype.activate=function(){if(!this.node.firstChild){this.node.appendChild(largeimage.node)
|
}if(settings.title){ZoomTitleObj.loadtitle()
|
}document.body.appendChild(this.node);
|
switch(settings.showEffect){case"show":$(this.node).show();
|
break;
|
case"fadein":$(this.node).fadeIn(settings.fadeinSpeed);
|
break;
|
default:$(this.node).show();
|
break
|
}$(this.node).show();
|
if($.browser.msie&&$.browser.version<7){this.ieframe=$('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>').css({position:"absolute",left:this.node.style.left,top:this.node.style.top,zIndex:99,width:settings.zoomWidth,height:settings.zoomHeight}).insertBefore(this.node)
|
}largeimage.node.style.display="block"
|
};
|
Stage.prototype.remove=function(){switch(settings.hideEffect){case"hide":$(".jqZoomWindow").remove();
|
break;
|
case"fadeout":$(".jqZoomWindow").fadeOut(settings.fadeoutSpeed);
|
break;
|
default:$(".jqZoomWindow").remove();
|
break
|
}};
|
function zoomTitle(){this.node=jQuery("<div />").addClass("jqZoomTitle").html(""+ZoomTitle+"");
|
this.loadtitle=function(){if(settings.zoomType=="innerzoom"){$(this.node).css({position:"absolute",top:smallimagedata.pos.b+3,left:(smallimagedata.pos.l+1),width:smallimagedata.w}).appendTo("body")
|
}else{$(this.node).appendTo(stage.node)
|
}}
|
}zoomTitle.prototype.remove=function(){$(".jqZoomTitle").remove()
|
};
|
function Loader(){this.node=document.createElement("div");
|
$(this.node).addClass("preload");
|
$(this.node).html(settings.preloadText);
|
$(this.node).appendTo("body").css("visibility","hidden");
|
this.show=function(){switch(settings.preloadPosition){case"center":loadertop=smallimagedata.pos.t+(smallimagedata.h-$(this.node).height())/2;
|
loaderleft=smallimagedata.pos.l+(smallimagedata.w-$(this.node).width())/2;
|
break;
|
default:var loaderoffset=this.getoffset();
|
loadertop=!isNaN(loaderoffset.top)?smallimagedata.pos.t+loaderoffset.top:smallimagedata.pos.t+0;
|
loaderleft=!isNaN(loaderoffset.left)?smallimagedata.pos.l+loaderoffset.left:smallimagedata.pos.l+0;
|
break
|
}$(this.node).css({top:loadertop,left:loaderleft,position:"absolute",visibility:"visible"})
|
};
|
return this
|
}Loader.prototype.getoffset=function(){var o=null;
|
o=$("div.preload").offset();
|
return o
|
}
|
})
|
}
|
})(jQuery);
|
function trim(A){while(A.substring(0,1)==" "){A=A.substring(1,A.length)
|
}while(A.substring(A.length-1,A.length)==" "){A=A.substring(0,A.length-1)
|
}return A
|
};
|