var ReMooz=new Class({Implements:[Events,Options,Chain],options:{link:null,type:"image",container:null,className:null,centered:false,dragging:true,closeOnClick:true,shadow:(Browser.Engine.trident)?"onOpenEnd":"onOpen",resize:true,margin:20,resizeFactor:0.95,resizeLimit:false,fixedSize:false,cutOut:true,addClick:true,opacityLoad:0.6,opacityResize:1,opacityTitle:0.9,resizeOptions:{},fxOptions:{},closer:true,parse:false,parseSecure:false,temporary:false,onBuild:$empty,onLoad:$empty,onOpen:$empty,onOpenEnd:$empty,onClose:$empty,onCloseEnd:$empty,generateTitle:function(b){var d=b.get("title");if(!d){return false;}var c=d.split(" :: ");var a=new Element("h6",{"html":c[0]});return(c[1])?[a,new Element("p",{"html":c[1]})]:a;}},initialize:function(c,b){this.element=$(c);this.setOptions(b);if(this.options.parse){var d=this.element.getProperty(this.options.parse);if(d&&(d=JSON.decode(d,this.options.parseSecure))){this.setOptions(d);}}var a=this.options.origin;this.origin=((a)?$(a)||this.element.getElement(a):null)||this.element;this.link=this.options.link||this.element.get("href")||this.element.get("src");this.container=$(this.options.container)||this.element.getDocument();this.bound={"click":function(f){this.open.delay(1,this);return false;}.bind(this),"close":this.close.bind(this),"dragClose":function(f){if(f.rightClick){return;}this.close();}.bind(this)};if(this.options.addClick){this.bindToElement();}},destroy:function(){if(this.box){this.box.destroy();}this.box=this.tweens=this.body=this.content=null;},bindToElement:function(a){($(a)||this.element).addClass("remooz-element").addEvent("click",this.bound.click);return this;},getOriginCoordinates:function(){var a=this.origin.getCoordinates();delete a.right;delete a.bottom;return a;},open:function(a){if(this.opened){return(a)?this.close():this;}this.opened=this.loading=true;if(!this.box){this.build();}this.coords=this.getOriginCoordinates();this.coords.opacity=this.options.opacityLoad;this.coords.display="";this.tweens.box.set(this.coords);this.box.addClass("remooz-loading");ReMooz.open(this.fireEvent("onLoad"));this["open"+this.options.type.capitalize()]();return this;},finishOpen:function(){this.tweens.fade.start(0,1);this.drag.attach();this.fireEvent("onOpenEnd").callChain();},close:function(){if(!this.opened){return this;}this.opened=false;ReMooz.close(this.fireEvent("onClose"));if(this.loading){this.box.setStyle("display","none");return this;}this.drag.detach();this.tweens.fade.cancel().set(0).fireEvent("onComplete");if(this.tweens.box.timer){this.tweens.box.clearChain();}var a=this.getOriginCoordinates();if(this.options.opacityResize!=1){a.opacity=this.options.opacityResize;}this.tweens.box.start(a).chain(this.closeEnd.bind(this));return this;},closeEnd:function(){if(this.options.cutOut){this.element.setStyle("visibility","visible");}this.box.setStyle("display","none");this.fireEvent("onCloseEnd").callChain();if(this.options.temporary){this.destroy();}},openImage:function(){var a=new Image();a.onload=a.onabort=a.onerror=function(b){this.loading=a.onload=a.onabort=a.onerror=null;if(!a.width||!this.opened){this.fireEvent("onError").close();return;}var c={x:a.width,y:a.height};if(!this.content){this.content=$(a).inject(this.body);}else{a=null;}this[(this.options.resize)?"zoomRelativeTo":"zoomTo"].create({"delay":(a&&b!==true)?1:null,"arguments":[c],"bind":this})();}.bind(this);a.src=this.link;if(a&&a.complete&&a.onload){a.onload(true);}},openElement:function(){this.content=this.content||$(this.link)||$E(this.link);if(!this.content){this.fireEvent("onError").close();return;}this.content.inject(this.body);this.zoomTo({x:this.content.scrollWidth,y:this.content.scrollHeight});},zoomRelativeTo:function(c){var b=this.options.resizeLimit;if(!b){b=this.container.getSize();b.x*=this.options.resizeFactor;b.y*=this.options.resizeFactor;}for(var a=2;a--;){if(c.x>b.x){c.y*=b.x/c.x;c.x=b.x;}else{if(c.y>b.y){c.x*=b.y/c.y;c.y=b.y;}}}return this.zoomTo({x:c.x.toInt(),y:c.y.toInt()});},zoomTo:function(e){e=this.options.fixedSize||e;var b=this.container.getSize(),a=this.container.getScroll();var d=(!this.options.centered)?{x:(this.coords.left+(this.coords.width/2)-e.x/2).toInt().limit(a.x+this.options.margin,a.x+b.x-this.options.margin-e.x),y:(this.coords.top+(this.coords.height/2)-e.y/2).toInt().limit(a.y+this.options.margin,a.y+b.y-this.options.margin-e.y)}:{x:a.x+((b.x-e.x)/2).toInt(),y:a.y+((b.y-e.y)/2).toInt()};if(this.options.cutOut){this.element.setStyle("visibility","hidden");}this.box.removeClass("remooz-loading");var c={left:d.x,top:d.y,width:e.x,height:e.y};if(this.options.opacityResize!=1){c.opacity=[this.options.opacityResize,1];}else{this.box.set("opacity",1);}this.tweens.box.start(c).chain(this.finishOpen.bind(this));this.fireEvent("onOpen");},build:function(){this.addEvent("onBlur",function(){this.focused=false;this.box.removeClass("remooz-box-focus").setStyle("z-index",ReMooz.options.zIndex);},true);this.addEvent("onFocus",function(){this.focused=true;this.box.addClass("remooz-box-focus").setStyle("z-index",ReMooz.options.zIndexFocus);},true);var a=["remooz-box","remooz-type-"+this.options.type,"remooz-engine-"+Browser.Engine.name+Browser.Engine.version];if(this.options.className){a.push(this.options.className);}this.box=new Element("div",{"class":a.join(" "),"styles":{"display":"none","top":0,"left":0,"zIndex":ReMooz.options.zIndex}});this.tweens={"box":new Fx.Morph(this.box,$merge({"duration":400,"unit":"px","transition":Fx.Transitions.Quart.easeOut,"chain":"cancel"},this.options.resizeOptions)),"fade":new Fx.Tween(null,$merge({"property":"opacity","duration":(Browser.Engine.trident)?0:300,"chain":"cancel"},this.options.fxOptions)).addEvents({"onComplete":function(){if(!this.element.get("opacity")){this.element.setStyle("display","none");}},"onStart":function(){if(!this.element.get("opacity")){this.element.setStyle("display","");}}})};this.tweens.fade.element=$$();if(this.options.shadow){if(Browser.Engine.webkit420){this.box.setStyle("-webkit-box-shadow","0 0 10px rgba(0, 0, 0, 0.7)");}else{if(!Browser.Engine.trident4){var d=new Element("div",{"class":"remooz-bg-wrap"}).inject(this.box);["n","ne","e","se","s","sw","w","nw"].each(function(e){new Element("div",{"class":"remooz-bg remooz-bg-"+e}).inject(d);});this.tweens.bg=new Fx.Tween(d,{"property":"opacity","chain":"cancel"}).set(0);this.addEvent(this.options.shadow,this.tweens.bg.set.bind(this.tweens.bg,1),true);this.addEvent("onClose",this.tweens.bg.set.bind(this.tweens.bg,0),true);}}}if(this.options.closer){var c=new Element("a",{"class":"remooz-btn-close","events":{"click":this.bound.close}}).inject(this.box);this.tweens.fade.element.push(c);}this.body=new Element("div",{"class":"remooz-body"}).inject(this.box);var b=this.options.title||this.options.generateTitle.call(this,this.element);if(b){var b=new Element("div",{"class":"remooz-title"}).adopt(new Element("div",{"class":"remooz-title-bg","opacity":this.options.opacityTitle}),new Element("div",{"class":"remooz-title-content"}).adopt(b)).inject(this.box);this.tweens.fade.element.push(b);}this.tweens.fade.set(0).fireEvent("onComplete");this.drag=new Drag.Move(this.box,{"snap":15,"preventDefault":true,"onBeforeStart":function(){if(!this.focused&&!this.loading){ReMooz.focus(this);}else{if(this.loading||this.options.closeOnClick){this.box.addEvent("mouseup",this.bound.dragClose);}}}.bind(this),"onSnap":function(){this.box.removeEvent("mouseup",this.bound.dragClose);if(!this.options.dragging){this.drag.stop();}else{this.box.addClass("remooz-box-dragging");}}.bind(this),"onComplete":function(){this.box.removeClass("remooz-box-dragging");}.bind(this)});this.drag.detach();this.fireEvent("onBuild",this.box,this.element);this.box.inject(this.element.getDocument().body);}});ReMooz.factory=function(a){return $extend(this,a);};ReMooz.factory(new Options).factory({options:{zIndex:41,zIndexFocus:42,query:"a.remooz",modal:false},assign:function(b,a){return $$(b).map(function(c){return new ReMooz(c,a);},this);},stack:[],open:function(b){var a=this.stack.getLast();this.focus(b);if(a&&this.options.modal){a.close();}},close:function(b){var a=this.stack.length-1;if(a>1&&this.stack[a]==b){this.focus(this.stack[a-1]);}this.stack.erase(b);},focus:function(b){var a=this.stack.getLast();b.fireEvent("onFocus",[b]);if(a==b){return;}if(a){a.fireEvent("onBlur",[a]);}this.stack.erase(b).push(b);}});