//Copyright (c) 2008 Djamil Legato <djamil@woolly-sheep.net>.

var ImgZoom=new Class({Implements:[Options,Events,Chain],options:{className:"imgzoom",zIndex:300,spinner:"/assets/images/spinner.gif",zoomIn:"/assets/images/zoom_in.cur",zoomOut:"/assets/images/zoom_out.cur",transition:"quad:out",duration:400},initialize:function(A){this.setOptions(A);
this.current=null;this.icons={};this.loading=this.opened=false;var B={"in":(Browser.Engine.gecko)?"-moz-zoom-in":"url("+this.options.zoomIn+"), pointer","out":(Browser.Engine.gecko)?"-moz-zoom-out":"url("+this.options.zoomOut+"), pointer"};
this.gallery=document.getElements("."+this.options.className).setStyle("cursor",B["in"]);this.wrapper=new Element("div",{"id":this.options.className+"-wrapper","styles":{"position":"absolute","opacity":0,"visibility":"hidden","cursor":B["out"],"z-index":this.options.zIndex}}).inject(document.body).addEvent("click",this.close.bind(this,false));
this.fx=new Fx.Morph(this.wrapper,{"duration":this.options.duration,"transition":this.options.transition,"link":"cancel"});this.cacheIcons().addClicks();
return this;},cacheIcons:function(){var A=new Asset.image(this.options.spinner);this.spinner=new Element("div",{"styles":{"position":"absolute","background":"#000 url("+A.src+") center center no-repeat","opacity":0.6,"z-index":Math.max(this.options.zIndex-100,0)}}).inject(this.wrapper,"after");
return this;},addClicks:function(){this.gallery.each(function(B){var A=B.getFirst();B.addEvent("click",function(D){D.stop();this.spinner.setStyle("visibility","hidden");
if(this.opened&&A==this.current){return ;}if(this.loading){this.cancel();}var C=A.getCoordinates();if(Browser.Engine.trident){C.left+=3;C.top+=3;}this.spinner.setStyles($merge(C,{opacity:0.5}));
this.loading=true;this.opened=true;this.image=null;this.current=A;this.open(A);}.bind(this));},this);return this;},loadImage:function(B){var C=B.getParent().get("href");
this.loading=true;var A=new Image();A.onload=A.onabort=A.onerror=function(){this.loading=A.onload=A.onabort=A.onerror=null;if(!A.width||this.opened){this.loading=false;
this.opened=false;this.close(B);return ;}this.from=B.getCoordinates();var D={x:A.width,y:A.height};if(!this.image){this.image=(Browser.Engine.webkit419)?new Element("img",{"src":A.src}):$(A);
this.image.inject(this.wrapper).setStyles({"width":"100%","height":"100%"});}else{A=null;}this.wrapper.setStyles({"left":this.from.left,"top":this.from.top});
this.zoomTo.create({"delay":1,"arguments":[D],"bind":this})();this.spinner.setStyle("visibility","hidden");this.opened=true;}.bind(this);A.src=C;if(A&&A.complete&&A.onload){A.onload(true);
}},zoomTo:function(D){var A=$(document.body).getSize();var C={x:A.x/2-D.x/2,y:(A.y/2)+document.body.getScroll().y-D.y/2};var B={"left":[this.from.left,C.x],"top":[this.from.top,C.y],"width":[this.from.width,D.x],"height":[this.from.height,D.y],"opacity":1};
this.fx.start(B);},cancel:function(){this.fx.cancel();this.loading=false;return this;},open:function(A){this.loadImage(A);return this;},close:function(A){this.opened=false;
var B=this;var C=$merge(this.from,{"opacity":0});A=A||false;this.fx.start(C).chain(function(){B.wrapper.empty();if(A){B.open(A);}});return this;}});window.addEvent("domready",function(){new ImgZoom();
});