var ByZoomer=new Class({Implements:Options,options:{duration:"normal",transition:"linear",onZoomInStart:$empty,onZoomInComplete:$empty,onZoomOutStart:$empty,onZoomOutComplete:$empty,waitIcon:"wait.gif",errorIcon:"error.png"},initialize:function(A,B){this.setOptions(B);this.id=1;this.selector=$pick(A,"byzoomer");this.links=$$("."+this.selector);this.previewElements=$H();this.largeElements=$H();this.pleaseWait=new Element("div",{styles:{zIndex:10,position:"absolute",opacity:0.8,backgroundColor:"#ffffff",border:"1px solid #707070",backgroundImage:"url("+this.options.waitIcon+")",backgroundRepeat:"no-repeat",backgroundPosition:"center center"}});this.links.each(function(C){this.prepareLink(C)},this)},prepareLink:function(A){var C=this.selector+"Elm"+this.id++;var B=A.getElement("img");if(!B){B=A}this.previewElements[C]=B;this.largeElements[C]=$H({element:null,loaded:false,width:0,height:0,src:A.get("href")});document.addEvent("click",function(D){this.unzoom(this.zoomed)}.bind(this));A.addEvent("click",function(D,E){new Event(D).stop();document.fireEvent("click");this.zoom(C)}.bindWithEvent(this,A))},loadLarge:function(A){this.largeElements[A].loaded=true;this.pleaseWait.setStyles({width:this.previewElements[A].getWidth()-2,height:this.previewElements[A].getHeight()-2,top:this.getPosition(this.previewElements[A]).y,left:this.getPosition(this.previewElements[A]).x});$(document.body).adopt(this.pleaseWait);this.largeElements[A].element=new Asset.image(this.largeElements[A].src,{id:A,onerror:function(){this.pleaseWait.dispose();this.setError(A)}.bind(this),onload:function(B){this.pleaseWait.dispose();if(!B.width){this.setError(A)}else{this.largeElements[A].extend({width:B.width,height:B.height});this.zoom(A)}}.bind(this)}).setStyle("z-index",20);this.largeElements[A].element.set("morph",{duration:this.options.duration,transition:this.options.transition})},zoom:function(A){if(!this.largeElements[A].loaded){this.loadLarge(A);return }if($(A)){return }this.zoomed=A;this.largeElements[A].element.setStyles({position:"absolute",opacity:0,width:this.previewElements[A].getWidth(),height:this.previewElements[A].getHeight(),top:this.getPosition(this.previewElements[A]).y,left:this.getPosition(this.previewElements[A]).x});$(document.body).adopt(this.largeElements[A].element);this.options.onZoomInStart();this.largeElements[A].element.get("morph").start({opacity:1,width:this.largeElements[A].width,height:this.largeElements[A].height,left:window.getScroll().x+(window.getWidth()-this.largeElements[A].width)/2,top:window.getScroll().y+(window.getHeight()-this.largeElements[A].height)/2}).chain(function(){this.options.onZoomInComplete()}.bind(this))},unzoom:function(A){if(!A){return }this.zoomed=false;this.options.onZoomOutStart();this.largeElements[A].element.get("morph").start({opacity:0,width:this.previewElements[A].getWidth(),height:this.previewElements[A].getHeight(),left:this.getPosition(this.previewElements[A]).x,top:this.getPosition(this.previewElements[A]).y}).chain(function(){this.largeElements[A].element.dispose();this.options.onZoomOutComplete()}.bind(this))},setError:function(B){var A=this.pleaseWait.clone();A.setStyles({backgroundColor:"#ffd0d0",backgroundImage:"url("+this.options.errorIcon+")",width:this.previewElements[B].getWidth()-2,height:this.previewElements[B].getHeight()-2,left:this.getPosition(this.previewElements[B]).x,top:this.getPosition(this.previewElements[B]).y});$(document.body).adopt(A)},getPosition:function(C){if(!Browser.Engine.trident){return C.getPosition()}var A=C.getBoundingClientRect(),B=C.getDocument().documentElement;return{x:A.left+B.scrollLeft-B.clientLeft,y:A.top+B.scrollTop-B.clientTop}}});