var MultiBox=new Class({Implements:[Events,Options],options:{initialWidth:250,initialHeight:250,container:null,useOverlay:false,showControls:true,overlay:{},contentColor:'#FFFFFF',contentFade:false,waitDuration:2000,width:400,height:300,preload:false,requestOptions:{evalScripts:true,autoCancel:true,method:'get',salt:true,timestamp:true}},loading:false,initialize:function(a,b){this.options.container=this.options.container?$(this.options.container):document.body;this.setOptions(b);this.openClosePos={};this.timer=0;this.contentToLoad={};this.index=0;this.opened=false;this.contentObj={};this.containerDefaults={};if(this.options.useOverlay!=false){this.options.overlay.container=this.options.container;this.options.overlay.onClick=this.close.bind(this);this.overlay=new Overlay(this.options.overlay)}this.content=$$('.'+a);this.container=new Element('div',{'class':'MultiBoxContainer'}).inject(this.options.container);this.loadContainer=new Element('div',{'styles':{'display':'none'}}).inject(this.container);this.box=new Element('div',{'class':'MultiBoxContent'});this.closeButton=new Element('div',{'class':'MultiBoxClose','events':{'click':this.close.bind(this)}});if(this.options.showControls){this.previousButton=new Element('div',{'class':'MultiBoxPrevious','events':{'click':this.previous.bind(this)}}).inject(this.container);this.nextButton=new Element('div',{'class':'MultiBoxNext','events':{'click':this.next.bind(this)}}).inject(this.container)}this.container.adopt([this.box,this.closeButton]);this.attatch();if(this.options.preload){this.preload()}this.containerEffects=new Fx.Morph(this.container,{duration:400,transition:'sine:in:out'});this.reset()},attatch:function(b){var c=true;if(!$defined(b)){b=this.content;c=false}b.each(function(a,i){a.store('slug',a.href.replace(/[^A-z\d]+/g,'_'));a.store('loaded',false);if(c)this.content.push(a);a.index=i;a.addEvent('click',function(e){e.stop();this.open(a)}.bind(this));if(a.href.indexOf('#')>-1){a.content=$(a.href.substr(a.href.indexOf('#')+1));if(a.content){a.content.setStyle('display','none')}}},this)},preload:function(a){if(!$defined(a)){a=0}if(a<this.content.length){if(this.content[a].retrieve('loaded')==false&&this.setContentType(this.content[a])){var b=$extend(this.options.requestOptions,this.contentObj.requestOptions);var c=this.content[a].retrieve('slug');this.request(a,b,c,false,true)}}},setContentType:function(c){var d=c.href.substr(c.href.lastIndexOf('.')+1).toLowerCase();var e={};if($chk(c.rel)){var f=c.rel.split(',');f.each(function(a){var b=a.split(':');e[b[0]]=b[1]})}if($defined(e.type)){d=e.type}this.contentObj={};this.contentObj.requestOptions={'url':c.href};this.contentObj.xH=0;if(e.width){this.contentObj.width=e.width}else{this.contentObj.width=this.options.width}if(e.height){this.contentObj.height=e.height}else{this.contentObj.height=this.options.height}if(e.panel){this.panelPosition=e.panel}else{this.panelPosition=this.options.panel}if(e.panel){this.panelPosition=e.panel}else{this.panelPosition=this.options.panel}if(e.panel){this.panelPosition=e.panel}else{this.panelPosition=this.options.panel}this.type='ajax';if(e.iframe){this.type='iframe'}return true},reset:function(){this.container.setStyles({'opacity':0,'display':'none'});this.removeContent();this.opened=false},getOpenClosePos:function(a){if(a.getFirst()){var w=a.getFirst().getCoordinates().width-(this.container.getStyle('border').toInt()*2);if(w<0){w=0}var h=a.getFirst().getCoordinates().height-(this.container.getStyle('border').toInt()*2);if(h<0){h=0}this.openClosePos={width:w,height:h,top:a.getFirst().getCoordinates().top,left:a.getFirst().getCoordinates().left}}else{var w=a.getCoordinates().width-(this.container.getStyle('border').toInt()*2);if(w<0){w=0}var h=a.getCoordinates().height-(this.container.getStyle('border').toInt()*2);if(h<0){h=0}this.openClosePos={width:w,height:h,top:a.getCoordinates().top,left:a.getCoordinates().left}}return this.openClosePos},open:function(a){this.fireEvent('open',a);this.index=this.content.indexOf(a);this.openId=a.getProperty('id');if(!this.opened){this.opened=true;if(this.options.useOverlay){this.overlay.show()}this.container.setStyles(this.getOpenClosePos(a));this.container.setStyles({display:'block'});this.containerEffects.start({width:this.options.initialWidth,height:this.options.initialHeight,top:(window.getHeight()/2)-(this.options.initialHeight/2)-this.container.getStyle('border').toInt(),left:(window.getWidth()/2)-(this.options.initialWidth/2)-this.container.getStyle('border').toInt(),opacity:[0,1]});this.load(this.index)}else{this.getOpenClosePos(this.content[this.index]);this.timer=this.hideContent.bind(this).delay(500);this.timer=this.load.pass(this.index,this).delay(1100)}},getContent:function(a){this.setContentType(this.content[a]);this.contentToLoad={title:this.content[a].title,number:a+1}},close:function(){if(this.options.useOverlay){this.overlay.hide()}this.hideContent();this.containerEffects.cancel();this.zoomOut.bind(this).delay(100);this.fireEvent('close')},zoomOut:function(){this.containerEffects.start({width:this.openClosePos.width,height:this.openClosePos.height,top:this.openClosePos.top,left:this.openClosePos.left,opacity:0});this.reset.bind(this).delay(500)},load:function(a){this.box.addClass('MultiBoxLoading');this.getContent(a);this.resize(true)},loaded:function(a,b,c){this.content[a].store('loaded',true);if(c){this.contentContainer.grab(b);this.box.removeClass('MultiBoxLoading');if(this.options.contentFade){this.contentEffects.start({opacity:1})}else{this.contentEffects.set({opacity:1})}if(this.options.showControls){if(a==0){this.previousButton.addClass('MultiBoxPreviousDisabled')}else{this.previousButton.removeClass('MultiBoxPreviousDisabled')}if(a==this.content.length-1){this.nextButton.addClass('MultiBoxNextDisabled')}else{this.nextButton.removeClass('MultiBoxNextDisabled')}}}},resize:function(a){var b=(window.getHeight()/2)-((Number(this.contentObj.height)+this.contentObj.xH)/2)-this.container.getStyle('border').toInt()+window.getScrollTop();var c=(window.getWidth()/2)-(this.contentObj.width/2)-this.container.getStyle('border').toInt();if(b<0){b=0}if(c<0){c=0}this.containerEffects.cancel();if(a){var a=this.showContent.bind(this);this.containerEffects.addEvent('complete',function(){this.removeEvents('complete');a()})}this.containerEffects.start({width:this.contentObj.width,height:Number(this.contentObj.height)+this.contentObj.xH,top:b,left:c,opacity:1});$clear(this.timer)},showContent:function(){this.contentContainer=new Element('div',{'id':'MultiBoxContentContainer','styles':{'opacity':0,'width':this.contentObj.width+'px','height':(Number(this.contentObj.height)+this.contentObj.xH)+'px'}}).inject(this.box);this.contentEffects=new Fx.Morph(this.contentContainer,{duration:500,transition:'linear'});var a=this.content[this.index].retrieve('slug');if(this.type=='iframe'){var b=new Element('iframe',{id:a,width:this.contentObj.width,height:this.contentObj.height,src:this.contentObj.requestOptions.url,frameborder:0,scrolling:'auto'}).inject(this.loadContainer);this.loaded(this.index,b,true)}else{var c=$extend(this.options.requestOptions,this.contentObj.requestOptions);var d=this.loadContainer.getElementById(a);if(d==null){this.request(this.index,c,a,true,false)}else{this.loaded(this.index,d,true)}}},request:function(a,b,c,d,e){var f=this.loaded.bind(this);var g=new Element('div',{'id':c});this.loadContainer.grab(g);g.set('load',b);g.get('load').addEvent('success',function(){f(a,g,d)});if(e){var h=this.preload.bind(this);g.get('load').addEvent('success',function(){h(a+1)})}g.load()},jumpTo:function(a){this.setContentType(this.content[a]);this.resize(false);var b=this.content[a].retrieve('slug');var c=this.loadContainer.getElementById(b);this.loadContainer.grab($('MultiBoxContentContainer').getFirst());this.loaded(a,c,true)},hideContent:function(){this.box.addClass('MultiBoxLoading');if(this.options.contentFade){this.contentEffects.start({opacity:0})}else{this.contentEffects.set({opacity:0})}this.removeContent.bind(this).delay(500)},removeContent:function(){if($('MultiBoxContentContainer')){this.loadContainer.grab($('MultiBoxContentContainer').getFirst());$('MultiBoxContentContainer').dispose()}},next:function(){if(this.index<this.content.length-1){this.index++;this.openId=this.content[this.index].getProperty('id');this.getOpenClosePos(this.content[this.index]);if(this.content[this.index].retrieve('loaded')==true){this.jumpTo(this.index)}else{this.timer=this.hideContent.bind(this).delay(500);this.timer=this.load.pass(this.index,this).delay(1100)}}},previous:function(){if(this.index>0){this.index--;this.openId=this.content[this.index].getProperty('id');this.getOpenClosePos(this.content[this.index]);if(this.content[this.index].retrieve('loaded')==true){this.jumpTo(this.index)}else{this.timer=this.hideContent.bind(this).delay(500);this.timer=this.load.pass(this.index,this).delay(1100)}}}});var Overlay=new Class({Implements:Options,options:{onClick:$empty},layed:false,initialize:function(a){this.setOptions(a);if($('Overlay')){this.overlay=$('Overlay')}else{this.options.container=$(document.body);this.overlay=new Element('div').setProperty('id','Overlay').inject(this.options.container);this.overlay.addEvent('click',function(){this.options.onClick()}.bind(this));this.position();window.addEvent('resize',this.position.bind(this))}},position:function(){var a=this.options.container.getCoordinates();this.overlay.setStyles({top:a.top+'px',height:a.height+'px',left:a.left+'px',width:a.width+'px'})},show:function(){if(this.layed==false){this.overlay.setStyle('display','block');this.layed=true}},hide:function(){this.overlay.setStyle('display','none');this.layed=false}});
