var Messages=new Class({Implements:[Options,Events],options:{container:'div',containerClass:'messages',group:'ol',item:'li',closeClass:'close',closeMessage:'Close message',closeInject:'bottom',typeClasses:{info:'info',success:'success',error:'error',warning:'warning'},autoclose:['success'],delay:'10000',slide:true,onClose:$empty},initialize:function(element,options){this.element=$(element);this.setOptions(options);this.initCloseable();this.initAutoclose();},initCloseable:function(){this.element.getElements(this.options.container+'.'+this.options.containerClass+' '+this.options.group+' '+this.options.item).each(function(item){this.addCloseButton(item);}.bind(this));},addCloseButton:function(item){item.adopt(new Element('span',{'html':this.options.closeMessage,'class':this.options.closeClass}).addEvent('click',function(event){event.stop();this.close(item);}.bind(this)));},initAutoclose:function(){this.options.autoclose.each(function(type){this.element.getElements(this.options.container+'.'+this.options.containerClass+' .'+this.options.typeClasses[type]+' '+this.options.item).each(function(item){this.addAutoclose(item);}.bind(this));}.bind(this));},addAutoclose:function(item){item.store('autoclose',(function(){this.close(item);}.bind(this)).delay(this.options.delay));},close:function(item){var group=item.getParent(this.options.group);var container=this.getContainer();if(item.retrieve('autoclose')){$clear(item.retrieve('autoclose'));}
if(group.getChildren().length==1){if(container.getChildren().length==1){this.dispose(container);}else{if(this.options.group.toLowerCase()!='li'&&(container.tagName.toLowerCase()=='ol'||container.tagName.toLowerCase()=='ul')){this.dispose(group.getParent('li'));}else{this.dispose(group);}}}else{this.dispose(item);}
this.fireEvent('close');},dispose:function(element){if(this.options.slide){new Fx.Slide(element).slideOut().chain(function(){element.getParent().dispose();});}else{element.dispose();}},exists:function(item,group){var exists=false;group.getElements(this.options.item).each(function(i){if(i.get('html')==item.get('html')){exists=true;}}.bind(item));return exists;},show:function(element){if(this.options.slide){new Fx.Slide(element).hide().chain(function(){element.set('display','');}).slideIn();}else{element.set('display','');}},create:function(message,type){var container=this.getContainer();var group=this.getGroup(type);var item=new Element(this.options.item,{'html':message,'display':(container.get('display')=='none'?'':(group.get('display')=='none'?'':'none'))});this.addCloseButton(item);if(this.exists(item,group)){return null;}
item.inject(group);this.show((container.get('display')=='none'?container:(group.get('display')=='none'?group:item)));if(this.options.autoclose.contains(type)){this.addAutoclose(item);}
return item;},getContainer:function(){var container=this.element.getElement(this.options.container+'.'+this.options.containerClass);if(!container){container=new Element(this.options.container,{'class':this.options.containerClass,'display':'none'}).inject(this.element);}
return container;},getGroup:function(type){var container=this.getContainer();var group;var elements=container.getElements('.'+this.options.typeClasses[type]);if(elements.length>0){group=elements[0];}else{group=new Element(this.options.group,{'class':this.options.typeClasses[type],'display':(container.get('display')=='none'?'':'none')});if(this.options.group.toLowerCase()!='li'&&(container.tagName.toLowerCase()=='ol'||container.tagName.toLowerCase()=='ul')){group.inject(new Element('li').inject(container));}else{group.inject(container);}}
return group;}});
var SqueezeBox={presets:{onOpen:$empty,onClose:$empty,onUpdate:$empty,onResize:$empty,onMove:$empty,onShow:$empty,onHide:$empty,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,shadow:true,document:null,ajaxOptions:{}},initialize:function(presets){if(this.options)return this;this.presets=$merge(this.presets,presets);this.doc=this.presets.document||document;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.win=new Element('div',{id:'sbox-window',styles:{display:'none',zIndex:this.options.zIndex+2}});if(this.options.shadow){if(Browser.Engine.webkit420){this.win.setStyle('-webkit-box-shadow','0 0 10px rgba(0, 0, 0, 0.7)');}else if(!Browser.Engine.trident4){var shadow=new Element('div',{'class':'sbox-bg-wrap'}).inject(this.win);var relay=function(e){this.overlay.fireEvent('click',[e]);}.bind(this);['n','ne','e','se','s','sw','w','nw'].each(function(dir){new Element('div',{'class':'sbox-bg sbox-bg-'+dir}).inject(shadow).addEvent('click',relay);});}}
this.content=new Element('div',{id:'sbox-content'}).inject(this.win);this.closeBtn=new Element('a',{id:'sbox-btn-close',href:'#'}).inject(this.win);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)};$(this.doc.body).adopt(this.overlay,this.win);},assign:function(to,options){return($(to)||$$(to)).addEvent('click',function(){return!SqueezeBox.fromElement(this,options);});},open:function(subject,options){this.initialize();if(this.element!=null)this.trash();this.element=$(subject)||false;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.url=((this.element)?(this.element.get('href')):subject)||this.options.url||'';this.assignOptions();var handler=handler||this.options.handler;if(handler)return this.setContent(handler,this.parsers[handler].call(this,true));var ret=false;return this.parsers.some(function(parser,key){var content=parser.call(this);if(content){ret=this.setContent(key,content);return true;}
return false;},this);},fromElement:function(from,options){return this.open(from,options);},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.fireEvent('onClose',[this.content]);this.trash();this.toggleListeners();this.isOpen=false;return this;},trash:function(){this.element=this.asset=null;this.content.empty();this.options={};this.removeEvents().setOptions(this.presets).callChain();},onError:function(){this.asset=null;this.setContent('string',this.options.errorMsg||'An error occurred');},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){if(!this.isOpen&&!this.applyTimer)return;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);}
if(content){if(['string','array'].contains($type(content)))this.content.set('html',content);else if(!this.content.hasChild(content))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){this.showTimer=$clear(this.showTimer||null);var box=this.doc.getSize(),scroll=this.doc.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()};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);this.doc[fn]('keydown',this.bound.key)[fn]('mousewheel',this.bound.scroll);this.doc.getWindow()[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){var full=this.doc.getSize().x;this.overlay.setStyle('display',(state)?'':'none');this.doc.body[(state)?'addClass':'removeClass']('body-overlayed');if(state){this.scrollOffset=this.doc.getWindow().getSize().x-full;this.doc.body.setStyle('margin-right',this.scrollOffset);}else{this.doc.body.setStyle('margin-right','');}},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.cancel().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=this.doc.getSize(),scroll=this.doc.getScroll(),ssize=this.doc.getScrollSize();this.overlay.setStyles({width:ssize.x+'px',height:ssize.y+'px'});this.win.setStyles({left:(scroll.x+(size.x-this.win.offsetWidth)/2-this.scrollOffset).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=this.doc.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.width=size.x;this.asset.height=size.y;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){if(el)return el.clone();return this.onError();},adopt:function(el){if(el)return el;return this.onError();},ajax:function(url){var options=this.options.ajaxOptions||{};this.asset=new Request.HTML($merge({method:'get',evalScripts:false},this.options.ajaxOptions)).addEvents({onSuccess:function(resp){this.applyContent(resp);if(options.evalScripts!==null&&!options.evalScripts)$exec(this.asset.response.javascript);this.fireEvent('onAjax',[resp,this.asset]);this.asset=null;}.bind(this),onFailure:this.onError.bind(this)});this.asset.send.delay(10,this.asset,[{url:url}]);},iframe:function(url){this.asset=new Element('iframe',$merge({src:url,frameBorder:0,width:this.options.size.x,height:this.options.size.y},this.options.iframeOptions));if(this.options.iframePreload){this.asset.addEvent('load',function(){this.applyContent(this.asset.setStyle('display',''));}.bind(this));this.asset.setStyle('display','none').inject(this.content);return false;}
return this.asset;},string:function(str){return str;}});SqueezeBox.handlers.url=SqueezeBox.handlers.ajax;SqueezeBox.parsers.url=SqueezeBox.parsers.ajax;SqueezeBox.parsers.adopt=SqueezeBox.parsers.clone;
window.addEvent('domready',function(){if(window.top.location!=window.location||window.name!=window.top.name){$(document.body).dispose();window.top.location=window.location;window.top.location.reload();}
$$('.admin-options a').each(function(a){a.addEvent('click',function(event){event.stop();SqueezeBox.open(a.href+(a.href.contains('?')?'&':'?')+'plain',{handler:'iframe',size:{x:800,y:600}});});});});

