var SqueezeBox={presets:{size:{x:660,y:440},sizeLoading:{x:200,y:150},marginInner:{x:10,y:10},marginImage:{x:150,y:200},handler:false,adopt:null,closeWithOverlay:true,zIndex:65555,overlayOpacity:0.7,classWindow:"",classOverlay:"",disableFx:false,onOpen:Class.empty,onClose:Class.empty,onUpdate:Class.empty,onResize:Class.empty,onMove:Class.empty,onShow:Class.empty,onHide:Class.empty,fxOverlayDuration:250,fxResizeDuration:750,fxContentDuration:250,ajaxOptions:{}},initialize:function(options){if(this.options){return this}this.presets=$merge(this.presets,options);this.setOptions(this.presets);this.build();this.listeners={window:this.reposition.bind(this,[null]),close:this.close.bind(this),key:this.onkeypress.bind(this)};this.isOpen=this.isLoading=false;this.window.close=this.listeners.close;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.btnClose=new Element("a",{id:"sbox-btn-close",href:"#"});this.window=new Element("div",{id:"sbox-window",styles:{display:"none",zIndex:this.options.zIndex+2}}).adopt(this.btnClose,this.content);if(!window.ie6){this.overlay.setStyles({position:"fixed",top:0,left:0});this.window.setStyles({position:"fixed",top:"50%",left:"50%"})}else{this.overlay.style.setExpression("marginTop",'document.documentElement.scrollTop + "px"');this.window.style.setExpression("marginTop",'0 - parseInt(this.offsetHeight / 2) + document.documentElement.scrollTop + "px"');this.overlay.setStyles({position:"absolute",top:"0%",left:"0%"});this.window.setStyles({position:"absolute",top:"0%",left:"0%"})}$(document.body).adopt(this.overlay,this.window);this.fx={overlay:this.overlay.effect("opacity",{duration:this.options.fxOverlayDuration,wait:false}).set(0),window:this.window.effects({duration:this.options.fxResizeDuration,wait:false}),content:this.content.effect("opacity",{duration:this.options.fxContentDuration,wait:false}).set(0)}},addClick:function(el){return el.addEvent("click",function(){if(this.fromElement(el)){return false}}.bind(this))},fromElement:function(el,options){this.initialize();this.element=$(el);if(this.element&&this.element.rel){options=$merge(options||{},Json.evaluate(this.element.rel))}this.setOptions(this.presets,options);this.assignOptions();this.url=(this.element?(this.options.url||this.element.href):el)||"";if(this.options.handler){var handler=this.options.handler;return this.setContent(handler,this.parsers[handler].call(this,true))}var res=false;for(var key in this.parsers){if((res=this.parsers[key].call(this))){return this.setContent(key,res)}}return this},assignOptions:function(){this.overlay.setProperty("class",this.options.classOverlay);this.window.setProperty("class",this.options.classWindow)},close:function(e){if(e){new Event(e).stop()}if(!this.isOpen){return this}this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this));this.window.setStyle("display","none");this.trashImage();this.toggleListeners();this.isOpen=null;this.fireEvent("onClose",[this.content]).removeEvents();this.options={};this.setOptions(this.presets).callChain();this.content.empty();return this},onError:function(){if(this.image){this.trashImage()}this.setContent("Error during loading")},trashImage:function(){if(this.image){this.image=this.image.onload=this.image.onerror=this.image.onabort=null}},setContent:function(handler,content){this.content.setProperty("class","sbox-content-"+handler);this.applyTimer=this.applyContent.delay(this.fx.overlay.options.duration,this,[this.handlers[handler].call(this,content)]);if(this.overlay.opacity){return this}this.toggleOverlay(true);this.fx.overlay.start(this.options.overlayOpacity);this.reposition();return this},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()[["string","array",false].contains($type(content))?"setHTML":"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 sizes=window.getSize();this.size=$merge(this.isLoading?this.options.sizeLoading:this.options.size,size);var to={width:this.size.x,height:this.size.y,marginLeft:-this.size.x/2,marginTop:-this.size.y/2};$clear(this.showTimer||null);this.hideContent();if(!instantly){this.fx.window.start(to).chain(this.showContent.bind(this))}else{this.window.setStyles(to).setStyle("display","");this.showTimer=this.showContent.delay(50,this)}this.reposition(sizes)},toggleListeners:function(state){var task=state?"addEvent":"removeEvent";this.btnClose[task]("click",this.listeners.close);if(this.options.closeWithOverlay){this.overlay[task]("click",this.listeners.close)}document[task]("keydown",this.listeners.key);window[task]("resize",this.listeners.window);window[task]("scroll",this.listeners.window)},toggleLoading:function(state){this.isLoading=state;this.window[state?"addClass":"removeClass"]("sbox-loading");if(state){this.fireEvent("onLoading",[this.window])}},toggleOverlay:function(state){this.overlay.setStyle("display",state?"":"none");$(document.body)[state?"addClass":"removeClass"]("body-overlayed")},showContent:function(){if(this.content.opacity){this.fireEvent("onShow",[this.window])}this.fx.content.start(1)},hideContent:function(){if(!this.content.opacity){this.fireEvent("onHide",[this.window])}this.fx.content.stop().set(0)},onkeypress:function(e){switch(e.key){case"esc":case"x":this.close();break}},reposition:function(sizes){sizes=sizes||window.getSize();this.overlay.setStyles({width:sizes.size.x,height:sizes.size.y});this.fireEvent("onMove",[this.overlay,this.window,sizes])},removeEvents:function(type){if(!this.$events){return this}if(!type){this.$events=null}else{if(this.$events[type]){this.$events[type]=null}}return this},parsers:{image:function(preset){return(preset||this.url.test(/\.(jpg|jpeg|png|gif|bmp)$/i))?this.url:false},adopt:function(preset){if($(this.options.adopt)){return $(this.options.adopt)}if(preset||($(this.element)&&!this.element.parentNode)){return $(this.element)}var bits=this.url.match(/#([\w-]+)$/);return bits?$(bits[1]):false},url:function(preset){return(preset||(this.url&&!this.url.test(/^javascript:/i)))?this.url:false},iframe:function(preset){return(preset||this.url)?this.url:false},iframing:function(preset){return(preset||this.url)?this.url:false},iframer:function(preset){return(preset||this.url)?this.url:false},string:function(preset){return true}},handlers:{image:function(url){this.image=new Image();var events={loaded:function(){var win={x:window.getWidth()-this.options.marginImage.x,y:window.getHeight()-this.options.marginImage.y};var size={x:this.image.width,y:this.image.height};for(var i=0;i<2;i++){if(size.x>win.x){size.y*=win.x/size.x;size.x=win.x}else{if(size.y>win.y){size.x*=win.y/size.y;size.y=win.y}}}size={x:parseInt(size.x),y:parseInt(size.y)};if(window.webkit419){this.image=new Element("img",{src:this.image.src})}else{$(this.image)}this.image.setProperties({width:size.x,height:size.y});this.applyContent(this.image,size)}.bind(this),failed:this.onError.bind(this)};(function(){this.src=url}).delay(10,this.image);this.image.onload=events.loaded;this.image.onerror=this.image.onabort=events.failed},adopt:function(el){return el.clone()},url:function(url){this.ajax=new Ajax(url,this.options.ajaxOptions);this.ajax.addEvent("onSuccess",function(resp){this.applyContent(resp);this.ajax=null}.bind(this));this.ajax.addEvent("onFailure",this.onError.bind(this));this.ajax.request.delay(10,this.ajax)},iframe:function(url){return new Element("iframe",{src:url,frameBorder:0,width:this.options.size.x,height:this.options.size.y})},iframing:function(url){return new Element("iframe",{src:url,frameBorder:0,width:this.options.size.x,height:this.options.size.y})},iframer:function(url){return new Element("iframe",{src:url,frameBorder:0,width:this.options.size.x,height:this.options.size.y})},string:function(str){return str}},extend:$extend};SqueezeBox.extend(SqueezeBox,Events.prototype);SqueezeBox.extend(SqueezeBox,Options.prototype);SqueezeBox.extend(SqueezeBox,Chain.prototype);
