
var VXModalBox=new Class({setOptions:function(options,mobile){this.options={'title':'','content':'','html':'','url':'','width':300,'height':0,'scrollbars':true,'maxHeight':500,'vertical':'middle','horizontal':'center','delay':0,'overlay':true,'scroll':true,'effect':'grow','buttons':0,'spinner':true,'id_overlay':'vxmodalbox_overlay','id_container':'vxmodalbox','id_box':'vxmodalbox_box','class_container':'','z_index':100,'btn_close':true,'overlay_fx':true,'overlay_opacity':0.8,'success_code':'success','onLoadSuccess':null,'onCodeSuccess':null,'beforeLoadContent':null,'afterOpen':null,'afterClose':null,'clickableOverlay':true};if(mobile){$extend(this.options,{'effect':'slide','scroll':false});}
$extend(this.options,options);},initialize:function(options,mobile){this.setOptions(options,mobile);this.fnc_handleKeyDown=this.handleKeyDown.pass(null,this);document.addEvent('keydown',this.fnc_handleKeyDown)
if(this.options.overlay){this.overlay=new Element('div').setProperty('id',this.options.id_overlay);if(this.options.clickableOverlay){this.overlay.addEvent('click',this.close.pass(null,this));}
this.overlay.setStyles({'position':'absolute','top':0,'left':0,'width':'100%','visibility':'hidden','z-index':this.options.z_index}).inject(document.body);}
this.container=new Element('div').setProperties({'id':this.options.id_container,'class':this.options.class_container});this.container.setStyles({'position':'absolute','visibility':'hidden','z-index':this.options.z_index+1}).inject(document.body);if(this.options.btn_close){this.btn_close=new Element('div').setProperty('class','btn_close');this.btn_close.addEvent('click',this.close.pass(null,this));this.btn_close.setStyles({'cursor':'pointer','z-index':this.options.z_index+2}).inject(this.container);}
this.box=new Element('div').setProperty('id',this.options.id_box);this.box.setStyle('width',this.options.width+'px');this.enableScrollbars(this.options.scrollbars);this.box.inject(this.container);if(this.box.getStyle('background-color')==''||this.box.getStyle('background-color')=='transparent'){this.box.setStyle('background-color',this.container.getStyle('background-color'));}
if(this.options.url==''){if(this.options.html!=''){this.box.set('html',this.options.html);}else{this.header=new Element('h3').setProperty('class','header').appendText(this.options.title).inject(this.box);if($type(this.options.content)=='element'){this.options.content.inject(this.box)}else{this.content=new Element('div').setProperty('class','content').inject(this.box);this.content.set('html',this.options.content);}}}
if(this.options.buttons>0){this.buttons=new Element('div').setProperty('class','buttons').inject(this.box);if(this.buttons.getStyle('background-color')==''||this.buttons.getStyle('background-color')=='transparent'){this.buttons.setStyle('background-color',this.box.getStyle('background-color'));}
for(var i=1;i<=this.options.buttons;i++){if(typeof(this.options['button'+i])=='undefined'){this.options['button'+i]='Button';}
if($type(this.options['button'+i])=='element'){this['button'+i]=this.options['button'+i]
this['button'+i].inject(this.buttons);}else{this['button'+i]=new Element('input').setProperties({type:'button',value:this.options['button'+i]}).inject(this.buttons);}
if(typeof(this.options['button'+i])=='undefined'){this.options['onButton'+i]=Class.empty;}
this['button'+i].onclick=this.close.pass([this.options['onButton'+i]],this);}}
this.boxHeight=(this.box.offsetHeight<this.options.maxHeight)?this.box.offsetHeight:this.options.maxHeight;this.boxHeight=(this.options.height>0)?this.options.height:this.boxHeight;this._position();if(this.options.scroll){this.eventPosition=this._position.bind(this);window.addEvent('scroll',this.eventPosition).addEvent('resize',this.eventPosition);}
this.box.setStyle('display','none');if(this.options.overlay){if(this.options.overlay_opacity==0.0){this.overlay.setStyle('opacity',0);this.overlay.setStyle('visibility','visible');}else if(this.options.overlay_fx){this.fx_overlay=new Fx.Tween(this.overlay,{'property':'opacity','duration':500}).start(0,this.options.overlay_opacity);}else{this.overlay.setStyle('opacity',this.options.overlay_opacity);}}
if(this.options.effect=='grow'){this.container.setStyle('top',(Window.getScrollTop()+(Window.getHeight()/2))+'px');var style={};style.height=0;style.width=0;if(!isNaN(this.options.horizontal)){style['left']=((this.options.horizontal*1)+(this.options.width/2))+'px';}else if(this.options.horizontal!='center'){style[this.options.horizontal]=(this.options.width/2)+'px';}
if(!isNaN(this.options.vertical)){style['top']=((this.options.vertical*1)+(this.boxHeight/2))+'px';}else if(this.options.vertical=='top'){style[this.options.vertical]=(Window.getScrollTop()+(this.boxHeight/2))+'px';}else if(this.options.vertical=='bottom'){style.top=(Window.getScrollTop()+Window.getHeight()-(this.boxHeight/2)-25)+'px';}
this.container.setStyles(style);this.container.setStyle('visibility','');this.fx_container=new Fx.Morph(this.container,{duration:500});this.fx_container.start({'width':[0,this.options.width],'margin-left':[0,-this.options.width/2],'margin-right':[0,-this.options.width/2],'height':[0,this.boxHeight],'margin-top':[0,-this.boxHeight/2],'margin-bottom':[0,-this.boxHeight/2]}).chain(function(){this.box.setStyles({'visibility':'hidden','display':'','height':this.boxHeight+'px'});new Fx.Tween(this.box,{'property':'opacity','duration':500}).start(0,1).chain(function(){if($type(this.options.afterOpen)=='function'){this.options.afterOpen(this);}
if(this.options.delay>0){var fn=function(){this.close()}.bind(this).delay(this.options.delay);}
if(this.options.url!=''){this.loadContent(this.options.url);}}.bind(this));}.bind(this));}else{this.container.setStyles({'height':this.boxHeight,'width':this.options.width,'left':'','visibility':'hidden'});this.box.setStyles({'visibility':'','display':'','height':this.boxHeight+'px'});this.fx_container=new Fx.Morph(this.container,{duration:500});var special={};if(!isNaN(this.options.horizontal)){special['left']=[-this.options.width,(this.options.horizontal*1)];}else if(this.options.horizontal!='center'){special[this.options.horizontal]=[-this.options.width,0];}else{this.container.setStyles({'left':'50%','margin-left':(-this.options.width/2)+'px','margin-right':(-this.options.width/2)+'px'});}
if(!isNaN(this.options.vertical)){special['top']=[(this.options.vertical*1)-this.boxHeight,(this.options.vertical*1)];}else if(this.options.vertical=='top'){special[this.options.vertical]=[Window.getScrollTop()-this.boxHeight,Window.getScrollTop()];}else if(this.options.vertical=='bottom'){special.top=[Window.getScrollTop()+Window.getHeight(),Window.getScrollTop()+Window.getHeight()-this.boxHeight-25];}else{this.container.setStyles({'top':(Window.getScrollTop()+(Window.getHeight()/2))+'px','margin-top':(-this.boxHeight/2)+'px','margin-bottom':(-this.boxHeight/2)+'px'});}
special.opacity=[0,1];this.fx_container.start(special).chain(function(){if($type(this.options.afterOpen)=='function'){this.options.afterOpen(this);}
if(this.options.delay>0){var fn=function(){this.close()}.bind(this).delay(this.options.delay);}
if(this.options.url!=''){this.loadContent(this.options.url);}}.bind(this));}},_position:function(){var wHeight=(Window.getScrollHeight()>Window.getHeight())?Window.getScrollHeight():Window.getHeight();var lr=(this.options.effect=='grow')?this.options.width/2:0;var tb=(this.options.effect=='grow')?this.boxHeight/2:0;if(this.options.overlay){this.overlay.setStyles({height:wHeight+'px'});}
switch(this.options.vertical){case'top':this.container.setStyle('top',(Window.getScrollTop()+tb)+'px');break;case'middle':this.container.setStyle('top',(Window.getScrollTop()+(Window.getHeight()/2))+'px');break;case'bottom':this.container.setStyle('top',(Window.getScrollTop()+Window.getHeight()-this.boxHeight+tb-25)+'px');break;default:if(!isNaN(this.options.vertical)){this.container.setStyle('top',((this.options.vertical*1)+tb)+'px');}}
if(!isNaN(this.options.horizontal)){this.container.setStyle('left',((this.options.horizontal*1)+lr)+'px');}else if(this.options.horizontal=='center'){this.container.setStyle('left','50%');}else{this.container.setStyle(this.options.horizontal,lr+'px');}},handleKeyDown:function(event){if(event.code==27){event.stop();this.close();}
return true;},showSpinner:function(){if(this.options.spinner){new Element('span').setProperty('class','spinner').inject(this.box,'top');}},_redirectLinks:function(){this.box.getElements('a[target=_overlay]').each(function(el,index){el.removeEvents('click');el.addEvent('click',function(event,link){event.stop();this.loadContent(link.getProperty('href'));}.bindWithEvent(this,el));}.bind(this));},_redirectForms:function(){this.box.getElements('form[target=_overlay]').each(function(el,index){el.removeEvents('submit');el.addEvent('submit',function(event,form){if($type(event)=='event'){event.stop();}
this.loadContent(form);}.bindWithEvent(this,el));}.bind(this));},afterContentLoaded:function(){this._redirectLinks();this._redirectForms();if($type(this.options.onLoadSuccess)=='function'){this.options.onLoadSuccess(this);}},enableScrollbars:function(enable){if(enable){this.box.setStyle('overflow','auto');}else{this.box.setStyle('overflow','hidden');}},loadContent:function(src){if($type(this.options.beforeLoadContent)=='function'){this.options.beforeLoadContent(this);}
this.showSpinner();if($type(src)=='string'){var url=src;new Request.HTML({'url':url,'evalScripts':false,'update':false,'onSuccess':function(responseTree,responseElements,responseHTML,responseJavaScript){if(responseHTML!=this.options.success_code){this.box.empty();this.box.scrollTop=0;this.box.set('html',responseHTML);$exec(responseJavaScript);}else{if($type(this.options.onCodeSuccess)=='function'){this.options.onCodeSuccess(this);}else{this.close();}}
this.afterContentLoaded();}.bindWithEvent(this)}).get();}else if(($type(src)=='element')&&src.match('form')){var form=src;new Request.HTML({'url':form.getProperty('action'),'evalScripts':false,'update':false,'onSuccess':function(responseTree,responseElements,responseHTML,responseJavaScript){if(responseHTML!=this.options.success_code){this.box.empty();this.box.scrollTop=0;this.box.set('html',responseHTML);$exec(responseJavaScript);}else{if($type(this.options.onCodeSuccess)=='function'){this.options.onCodeSuccess(this);}else{this.close();}}
this.afterContentLoaded();}.bindWithEvent(this)}).post(form);}},close:function(fn){document.removeEvent('keydown',this.fnc_handleKeyDown)
for(var i=1;i<=this.options.buttons;i++){this['button'+i].removeEvents('click');}
if($type(this.fx_overlay)){this.fx_overlay.cancel();}
this.fx_container.cancel();if(typeof(fn)=='function'){fn();}
if(this.options.overlay){if(this.options.overlay_fx&&(this.options.overlay_opacity>0.0)){new Fx.Tween(this.overlay,{'property':'opacity','duration':250}).start(this.options.overlay_opacity,0);}else{this.overlay.setStyle('opacity',0);}}
new Fx.Tween(this.container,{'property':'opacity',duration:250,onComplete:function(){if(this.options.scroll){window.removeEvents('scroll',this.eventPosition).removeEvents('resize',this.eventPosition);}
if(this.options.overlay){this.overlay.dispose();}
this.container.dispose();if($type(this.options.afterClose)=='function'){this.options.afterClose(this);}}.bind(this)}).start(1,0);}});VXModalBox.implement(new Chain);