var ByZoomer=new Class({Implements:Options,options:{duration:"normal",transition:"linear",border:"5px solid black",padding:"10px",background:"transparent",onZoomInStart:$empty,onZoomInComplete:$empty,onZoomOutStart:$empty,onZoomOutComplete:$empty,waitIcon:"zoom_wait.gif",errorIcon:"zoom_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:1000,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",1020);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,border:this.options.border,padding:this.options.padding,background:this.options.background,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(d){if(!Browser.Engine.trident){return d.getPosition()}var a=d.getBoundingClientRect(),c=d.getDocument().documentElement;return{x:a.left+c.scrollLeft-c.clientLeft,y:a.top+c.scrollTop-c.clientTop}}});