/**
 * Author: Constantin Boiangiu (constantin[at]php-help.ro)
 * Homepage: http://www.php-help.ro/php-tutorials/zoomit-javascript-image-zoom/
 * jQuery version: 1.6
 * Copyright (c) author
 * License: MIT (http://www.opensource.org/licenses/mit-license.php)
 */
var ZoomIt=new Class({Implements:[Events,Options],options:{container:null,elems:".zoomIt",mouseEvent:"mouseenter",multiplier:1,zoomPosition:"bottom",zoomDistance:10,zoomClass:"zoomIt_zoomed",zoomLoadingClass:"zoomIt_loading",zoomAreaClass:"zoomIt_area",zoomAreaColor:"#FFF",zoomAreaOpacity:0.5,zoomAreaMove:"mousemove"},initialize:function(A){this.setOptions(A);if(!this.options.elems){return}this.elements=$(this.options.container||document.body).getElements(this.options.elems);this.zoomerVisible=false;this.current=-1;this.zoomer=new Element("div",{id:"MooZoom_zoomer","class":this.options.zoomClass,styles:{display:"block",position:"absolute",top:-1000,overflow:"hidden"}}).injectInside(document.body);this.elements.each(function(G,E){var H={};H.bigImgURL=G.getProperty("href");G.setProperty("href","#");var F=G.getElement("img").getSize();H.imgSize=F;var D=G.getPosition(),C=G.getSize();H.position={x:D.x,y:D.y};switch(this.options.zoomPosition){case"right":default:D.x+=C.x+this.options.zoomDistance;break;case"left":D.x-=F.x*(this.options.multiplier||1)+this.options.zoomDistance;break;case"bottom":D.y+=C.y+this.options.zoomDistance;break;case"top":D.y-=F.y*(this.options.multiplier||1)+this.options.zoomDistance;break}H.zoomPosition=D;var B=new Element("div",{"class":this.options.zoomAreaClass,styles:{background:this.options.zoomAreaColor||"#999",opacity:this.options.zoomAreaOpacity||0.7,display:"none",position:"absolute",top:0,left:0,cursor:"move"}}).injectInside(G.getParent());H.dragged=B;G.store("params",H);G.addEvent(this.options.mouseEvent||"mouseenter",function(I){I.preventDefault();this.startZoom(E)}.bind(this));G.getParent().addEvent("mouseleave",this.closeZoom.bind(this))}.bind(this))},startZoom:function(G){if(this.zoomerVisible){return}this.zoomerVisible=true;this.current=G;var H=this.elements[G],A=H.retrieve("params"),I=A.imgSize,C=A.bigImgURL,E=A.dragged,D=H.retrieve("dragParams"),J=0,B=0;if(D&&D.fullImageSize){J=D.fullImageSize.x;B=D.fullImageSize.y}else{J=I.x*(this.options.multiplier||1);B=I.y*(this.options.multiplier||1)}this.zoomer.empty().setStyles({width:J,height:B}).setPosition(A.zoomPosition);if(D){D.bigImg.injectInside(this.zoomer);E.setStyles({display:"block",width:D.dragW,height:D.dragH});this.fireEvent("onZoom",H);return}this.zoomer.addClass(this.options.zoomLoadingClass);var F=Asset.image(C,{onLoad:function(O){this.zoomer.removeClass(this.options.zoomLoadingClass);F.setStyles({position:"absolute",top:0,left:0}).injectInside(this.zoomer);var N=F.getSize(),K=N.x/I.x,R=N.y/I.y,Q=I.x/K*(this.options.multiplier||1),M=I.y/R*(this.options.multiplier||1);if(this.options.multiplier>K&&this.options.multiplier>R){this.zoomer.setStyles({width:N.x,height:N.y});var P={};P.bigImg=F;P.fullImageSize=N;this.elements[G].store("dragParams",P);return}E.setStyles({display:"block",width:Q,height:M});var L=E.getPosition(E.getParent());F.setStyles({top:-(L.y*R),left:-(L.x*K)});var P={};P.bigImg=F;P.dragW=Q;P.dragH=M;this.elements[G].store("dragParams",P);if(this.options.zoomAreaMove=="mousemove"){this.elements[G].addEvent("mousemove",function(U){var T=U.page.x-A.position.x-Q/2,S=U.page.y-A.position.y-M/2;if(U.page.x>(A.position.x+A.imgSize.x-Q/2)){T=A.imgSize.x-Q}if(U.page.y>(A.position.y+A.imgSize.y-M/2)){S=A.imgSize.y-M}E.setPosition({x:T,y:S})}.bind(this));E.addEvent("mousemove",function(S){var W=S.page.x-A.position.x-Q/2,T=S.page.y-A.position.y-M/2;if(S.page.x<A.position.x+Q/2){W=0}if(S.page.y<A.position.y+M/2){T=0}if(S.page.x>(A.position.x+A.imgSize.x-Q/2)){W=A.imgSize.x-Q}if(S.page.y>(A.position.y+A.imgSize.y-M/2)){T=A.imgSize.y-M}E.setPosition({x:W,y:T});var X=E.getPosition(E.getParent()),V=-(X.x*K),U=-(X.y*R);F.setPosition({x:V,y:U})})}else{new Drag(E,{modifiers:{x:"left",y:"top"},grid:1,limit:{x:[0,(I.x-Q)],y:[0,(I.y-M)]},onDrag:function(S){var V=S.getPosition(S.getParent()),U=-(V.x*K),T=-(V.y*R);F.setPosition({x:U,y:T})}.bind(this)})}this.fireEvent("onZoom",O)}.bind(this)})},closeZoom:function(B){if(this.current==-1){return}var C=this.elements[this.current],A=C.retrieve("params").dragged.setStyle("display","none");this.zoomer.setStyles({top:-1000}).empty();this.current=-1;this.zoomerVisible=false;this.fireEvent("onClose",C)},destroy:function(){this.elements.each(function(B){var A=B.retrieve("params");B.setProperty("href",A.bigImgURL);A.dragged.dispose();B.eliminate("params").eliminate("dragParams");B.removeEvents();B.getParent().removeEvents()});this.zoomer.dispose()}});
