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(el){var text=el.get('title');if(!text)return false;var title=text.split(' :: ');var head=new Element('h6',{'html':title[0]});return(title[1])?[head,new Element('p',{'html':title[1]})]:head}},initialize:function(element,options){this.element=$(element);this.setOptions(options);if(this.options.parse){var obj=this.element.getProperty(this.options.parse);if(obj&&(obj=JSON.decode(obj,this.options.parseSecure)))this.setOptions(obj)}var origin=this.options.origin;this.origin=((origin)?$(origin)||this.element.getElement(origin):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(e){this.open.delay(1,this);return false}.bind(this),'close':this.close.bind(this),'dragClose':function(e){if(e.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(element){($(element)||this.element).addClass('remooz-element').addEvent('click',this.bound.click);return this},getOriginCoordinates:function(){var coords=this.origin.getCoordinates();delete coords.right;delete coords.bottom;return coords},open:function(e){if(this.opened)return(e)?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 vars=this.getOriginCoordinates();if(this.options.opacityResize!=1)vars.opacity=this.options.opacityResize;this.tweens.box.start(vars).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 tmp=new Image();tmp.onload=tmp.onabort=tmp.onerror=function(fast){this.loading=tmp.onload=tmp.onabort=tmp.onerror=null;if(!tmp.width||!this.opened){this.fireEvent('onError').close();return}var to={x:tmp.width,y:tmp.height};if(!this.content)this.content=$(tmp).inject(this.body);else tmp=null;this[(this.options.resize)?'zoomRelativeTo':'zoomTo'].create({'delay':(tmp&&fast!==true)?1:null,'arguments':[to],'bind':this})()}.bind(this);tmp.src=this.link;if(tmp&&tmp.complete&&tmp.onload)tmp.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(to){var scale=this.options.resizeLimit;if(!scale){scale=this.container.getSize();scale.x*=this.options.resizeFactor;scale.y*=this.options.resizeFactor}for(var i=2;i--;){if(to.x>scale.x){to.y*=scale.x/to.x;to.x=scale.x}else if(to.y>scale.y){to.x*=scale.y/to.y;to.y=scale.y}}return this.zoomTo({x:to.x.toInt(),y:to.y.toInt()})},zoomTo:function(to){to=this.options.fixedSize||to;var box=this.container.getSize(),scroll=this.container.getScroll();var pos=(!this.options.centered)?{x:(this.coords.left+(this.coords.width/2)-to.x/2).toInt().limit(scroll.x+this.options.margin,scroll.x+box.x-this.options.margin-to.x),y:(this.coords.top+(this.coords.height/2)-to.y/2).toInt().limit(scroll.y+this.options.margin,scroll.y+box.y-this.options.margin-to.y)}:{x:scroll.x+((box.x-to.x)/2).toInt(),y:scroll.y+((box.y-to.y)/2).toInt()};if(this.options.cutOut)this.element.setStyle('visibility','hidden');this.box.removeClass('remooz-loading');var vars={left:pos.x,top:pos.y,width:to.x,height:to.y};if(this.options.opacityResize!=1)vars.opacity=[this.options.opacityResize,1];else this.box.set('opacity',1);this.tweens.box.start(vars).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 classes=['remooz-box','remooz-type-'+this.options.type,'remooz-engine-'+Browser.Engine.name+Browser.Engine.version];if(this.options.className)classes.push(this.options.className);this.box=new Element('div',{'class':classes.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 shadow=new Element('div',{'class':'remooz-bg-wrap'}).inject(this.box);['n','ne','e','se','s','sw','w','nw'].each(function(dir){new Element('div',{'class':'remooz-bg remooz-bg-'+dir}).inject(shadow)});this.tweens.bg=new Fx.Tween(shadow,{'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 closer=new Element('a',{'class':'remooz-btn-close','events':{'click':this.bound.close}}).inject(this.box);this.tweens.fade.element.push(closer)}this.body=new Element('div',{'class':'remooz-body'}).inject(this.box);var title=this.options.title||this.options.generateTitle.call(this,this.element);if(title){var title=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(title)).inject(this.box);this.tweens.fade.element.push(title)}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(extended){return $extend(this,extended)};ReMooz.factory(new Options).factory({options:{zIndex:41,zIndexFocus:42,query:'a.remooz',modal:false},assign:function(elements,options){return $$(elements).map(function(element){return new ReMooz(element,options)},this)},stack:[],open:function(obj){var last=this.stack.getLast();this.focus(obj);if(last&&this.options.modal)last.close()},close:function(obj){var length=this.stack.length-1;if(length>1&&this.stack[length]==obj)this.focus(this.stack[length-1]);this.stack.erase(obj)},focus:function(obj){var last=this.stack.getLast();obj.fireEvent('onFocus',[obj]);if(last==obj)return;if(last)last.fireEvent('onBlur',[last]);this.stack.erase(obj).push(obj)}});var SqueezeBox={presets:{size:{x:600,y:450},sizeLoading:{x:200,y:150},marginInner:{x:20,y:20},marginImage:{x:50,y:75},handler:false,target:null,closable:true,closeBtn:true,zIndex:65555,overlayOpacity:0.7,classWindow:'',classOverlay:'',overlayFx:{},resizeFx:{},contentFx:{},parse:false,parseSecure:false,ajaxOptions:{},onOpen:$empty,onClose:$empty,onUpdate:$empty,onResize:$empty,onMove:$empty,onShow:$empty,onHide:$empty},initialize:function(presets){if(this.options)return this;this.presets=$merge(this.presets,presets);this.options={};this.setOptions(this.presets).build();this.bound={window:this.reposition.bind(this,[null]),scroll:this.checkTarget.bind(this),close:this.close.bind(this),key:this.onKey.bind(this)};this.isOpen=this.isLoading=false;return this},build:function(){this.overlay=new Element('div',{id:'sbox-overlay',styles:{display:'none',zIndex:this.options.zIndex}});this.content=new Element('div',{id:'sbox-content'});this.closeBtn=new Element('a',{id:'sbox-btn-close',href:'#'});this.win=new Element('div',{id:'sbox-window',styles:{display:'none',zIndex:this.options.zIndex+2}}).adopt(this.closeBtn,this.content);this.fx={overlay:new Fx.Tween(this.overlay,$merge({property:'opacity',onStart:Events.prototype.clearChain,duration:250,link:'cancel'},this.options.overlayFx)).set(0),win:new Fx.Morph(this.win,$merge({onStart:Events.prototype.clearChain,unit:'px',duration:750,transition:Fx.Transitions.Quint.easeOut,link:'cancel',unit:'px'},this.options.resizeFx)),content:new Fx.Tween(this.content,$merge({property:'opacity',duration:250,link:'cancel'},this.options.contentFx)).set(0)};$(document.body).adopt(this.overlay,this.win)},assign:function(to,options){return to.addEvent('click',function(){return!SqueezeBox.fromElement(this,options)})},fromElement:function(from,options){this.initialize();if(this.element)this.trash();this.element=$(from);this.setOptions($merge(this.presets,options||{}));if(this.element&&this.options.parse){var obj=this.element.getProperty(this.options.parse);if(obj&&(obj=JSON.decode(obj,this.options.parseSecure)))this.setOptions(obj)}this.assignOptions();this.url=((this.element)?(this.options.url||this.element.get('href')):from)||'';var handler=this.options.handler;if(handler)return this.setContent(handler,this.parsers[handler].call(this,true));var ret=false;this.parsers.some(function(parser,key){var content=parser.call(this);if(content){ret=this.setContent(key,content);return true}return false},this);return ret},assignOptions:function(){this.overlay.set('class',this.options.classOverlay);this.win.set('class',this.options.classWindow);if(Browser.Engine.trident4)this.win.addClass('sbox-window-ie6')},close:function(e){var stoppable=($type(e)=='event');if(stoppable)e.stop();if(!this.isOpen||(stoppable&&!$lambda(this.options.closable).call(this,e)))return this;this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this));this.win.setStyle('display','none');this.trash();this.toggleListeners();this.isOpen=false;this.fireEvent('onClose',[this.content]);return this},trash:function(){this.element=this.asset=null;this.options={};this.removeEvents().setOptions(this.presets).callChain()},onError:function(){this.asset=null;this.setContent('string','Error during loading')},setContent:function(handler,content){if(!this.handlers[handler])return false;this.content.className='sbox-content-'+handler;this.applyTimer=this.applyContent.delay(this.fx.overlay.options.duration,this,this.handlers[handler].call(this,content));if(this.overlay.retrieve('opacity'))return this;this.toggleOverlay(true);this.fx.overlay.start(this.options.overlayOpacity);return this.reposition()},applyContent:function(content,size){this.applyTimer=$clear(this.applyTimer);this.hideContent();if(!content){this.toggleLoading(true)}else{if(this.isLoading)this.toggleLoading(false);this.fireEvent('onUpdate',[this.content],20)}this.content.empty();if(['string','array',false].contains($type(content)))this.content.set('html',content||'');else this.content.adopt(content);this.callChain();if(!this.isOpen){this.toggleListeners(true);this.resize(size,true);this.isOpen=true;this.fireEvent('onOpen',[this.content])}else{this.resize(size)}},resize:function(size,instantly){var box=document.getSize(),scroll=document.getScroll();this.size=$merge((this.isLoading)?this.options.sizeLoading:this.options.size,size);var to={width:this.size.x,height:this.size.y,left:(scroll.x+(box.x-this.size.x-this.options.marginInner.x)/2).toInt(),top:(scroll.y+(box.y-this.size.y-this.options.marginInner.y)/2).toInt()};$clear(this.showTimer||null);this.hideContent();if(!instantly){this.fx.win.start(to).chain(this.showContent.bind(this))}else{this.win.setStyles(to).setStyle('display','');this.showTimer=this.showContent.delay(50,this)}return this.reposition()},toggleListeners:function(state){var fn=(state)?'addEvent':'removeEvent';this.closeBtn[fn]('click',this.bound.close);this.overlay[fn]('click',this.bound.close);document[fn]('keydown',this.bound.key)[fn]('mousewheel',this.bound.scroll);window[fn]('resize',this.bound.window)[fn]('scroll',this.bound.window)},toggleLoading:function(state){this.isLoading=state;this.win[(state)?'addClass':'removeClass']('sbox-loading');if(state)this.fireEvent('onLoading',[this.win])},toggleOverlay:function(state){this.overlay.setStyle('display',(state)?'':'none');$(document.body)[(state)?'addClass':'removeClass']('body-overlayed')},showContent:function(){if(this.content.get('opacity'))this.fireEvent('onShow',[this.win]);this.fx.content.start(1)},hideContent:function(){if(!this.content.get('opacity'))this.fireEvent('onHide',[this.win]);this.fx.content.set(0)},onKey:function(e){switch(e.key){case'esc':this.close(e);case'up':case'down':return false}},checkTarget:function(e){return this.content.hasChild(e.target)},reposition:function(){var size=document.getSize(),scroll=document.getScroll();this.overlay.setStyles({left:scroll.x+'px',top:scroll.y+'px',width:size.x+'px',height:size.y+'px'});this.win.setStyles({left:(scroll.x+(size.x-this.win.offsetWidth)/2).toInt()+'px',top:(scroll.y+(size.y-this.win.offsetHeight)/2).toInt()+'px'});return this.fireEvent('onMove',[this.overlay,this.win])},removeEvents:function(type){if(!this.$events)return this;if(!type)this.$events=null;else if(this.$events[type])this.$events[type]=null;return this},extend:function(properties){return $extend(this,properties)},handlers:new Hash(),parsers:new Hash()};SqueezeBox.extend(new Events($empty)).extend(new Options($empty)).extend(new Chain($empty));SqueezeBox.parsers.extend({image:function(preset){return(preset||(/\.(?:jpg|png|gif)$/i).test(this.url))?this.url:false},clone:function(preset){if($(this.options.target))return $(this.options.target);if(this.element&&!this.element.parentNode)return this.element;var bits=this.url.match(/#([\w-]+)$/);return(bits)?$(bits[1]):(preset?this.element:false)},ajax:function(preset){return(preset||(this.url&&!(/^(?:javascript|#)/i).test(this.url)))?this.url:false},iframe:function(preset){return(preset||this.url)?this.url:false},string:function(preset){return true}});SqueezeBox.handlers.extend({image:function(url){var size,tmp=new Image();this.asset=null;tmp.onload=tmp.onabort=tmp.onerror=(function(){tmp.onload=tmp.onabort=tmp.onerror=null;if(!tmp.width){this.onError.delay(10,this);return}var box=document.getSize();box.x-=this.options.marginImage.x;box.y-=this.options.marginImage.y;size={x:tmp.width,y:tmp.height};for(var i=2;i--;){if(size.x>box.x){size.y*=box.x/size.x;size.x=box.x}else if(size.y>box.y){size.x*=box.y/size.y;size.y=box.y}}size.x=size.x.toInt();size.y=size.y.toInt();this.asset=$(tmp);tmp=null;this.asset.setProperties({width:size.x,height:size.y});if(this.isOpen)this.applyContent(this.asset,size)}).bind(this);tmp.src=url;if(tmp&&tmp.onload&&tmp.complete)tmp.onload();return(this.asset)?[this.asset,size]:null},clone:function(el){return el.clone()},adopt:$arguments(0),ajax:function(url){this.asset=new Request.HTML($merge({method:'get'},this.options.ajaxOptions)).addEvents({onSuccess:function(resp){this.applyContent(resp);this.asset=null}.bind(this),onFailure:this.onError.bind(this)});this.asset.send.delay(10,this.asset,[{url:url}])},iframe:function(url){return new Element('iframe',$merge({src:url,frameBorder:0,width:this.options.size.x,height:this.options.size.y},this.options.iframeOptions))},string:function(str){return str}});SqueezeBox.handlers.url=SqueezeBox.handlers.ajax;SqueezeBox.parsers.url=SqueezeBox.parsers.ajax;SqueezeBox.parsers.adopt=SqueezeBox.parsers.clone;