var Milkbox=new Class({Implements:[Options,Events],options:{overlayOpacity:0.7,topPosition:50,initialWidth:250,initialHeight:250,canvasBorderWidth:'0px',canvasBorderColor:'#000000',canvasPadding:'0px',resizeDuration:500,resizeTransition:'sine:in:out',autoPlay:false,autoPlayDelay:7,removeTitle:false,onXmlGalleries:$empty,onClosed:$empty,onFileReady:$empty},initialize:function(options){this.setOptions(options);this.autoPlayBkup={autoPlayDelay:this.options.autoPlayDelay,autoPlay:this.options.autoPlay};this.fullOptionsBkup={};this.galleries=[];this.families=[];this.xmlFiles=[];this.loadedImages=[];this.currentFile=null;this.currentIndex=null;this.currentGallery=null;this.currentRequest=null;this.currentResponse=null;this.mode=null;this.closed=true;this.busy=true;this.paused=true;this.fileReady=false;this.eventsok=false;this.first=true;this.intObj=null;this.formtags=null;this.prepareGalleries();if(this.galleries.length==0){return;};this.initMilkbox();this.saveOptions();},initMilkbox:function(){this.prepareHTML();this.prepareEffects();this.prepareEvents();this.formtags=$$('select','textarea');this.activated=true;},openMilkbox:function(gallery,index){this.closed=false;if(this.formtags.length!=0){this.formtags.setStyle('display','none')};this.overlay.setStyles({'top':-$(window).getScroll().y,'height':$(window).getScrollSize().y+$(window).getScroll().y});this.center.setStyle('top',$(window).getScroll().y+this.options.topPosition);this.currentGallery=gallery;this.currentIndex=index;this.overlay.tween('opacity',this.options.overlayOpacity);if(gallery.length==1){this.mode='singleFile';this.loadFile(gallery[index],index);}else{this.mode='fileGallery';var playpauseWidth=0;$$(this.prev,this.next,this.count).setStyle('display','block');if(this.options.autoPlay){this.playpause.setStyle('display','block');var playpauseWidth=this.playpause.getSize().x;}
var border=this.center.getStyle('border-right-width').toInt();var navWidth=this.prev.getSize().x+this.next.getSize().x+this.close.getSize().x+playpauseWidth+border;this.navigation.setStyle('width',navWidth);this.description.setStyle('margin-right',navWidth);var next=(index!=gallery.length-1)?gallery[index+1]:gallery[0];var prev=(index!=0)?gallery[index-1]:gallery[gallery.length-1];var preloads=(prev==next)?[prev]:[prev,next];this.loadFile(gallery[index],preloads);}},loadFile:function(fileObj,preloads){this.fileReady=false;var swf=this.checkFileType(fileObj,'swf');if(!swf){if(!this.loadedImages.contains(fileObj.retrieve('href'))){this.center.addClass('mbLoading');}
this.loadImage(fileObj.retrieve('href'));}else{this.loadSwf(fileObj);}
if(preloads){this.preloadFiles(preloads);}},preloadFiles:function(preloads){preloads.each(function(fileObj,index){var swf=this.checkFileType(fileObj.retrieve('href'),"swf");if(!swf){this.preloadImage(fileObj.retrieve('href'));}},this);},loadImage:function(file){var imageAsset=new Asset.image(file,{onload:function(img){if(!this.loadedImages.contains(file)){this.loadedImages.push(file);};this.currentFile=img;this.loadAux(this.currentFile);}.bindWithEvent(this)});},preloadImage:function(file){if(!this.loadedImages.contains(file)){var imageAsset=new Asset.image(file,{onload:function(img){this.loadedImages.push(file);}.bindWithEvent(this)});}},loadSwf:function(swf){var swfObj=new Swiff(swf.retrieve('href'),{width:swf.retrieve('width').toInt(),height:swf.retrieve('height').toInt(),params:{wMode:'opaque',swLiveConnect:'false'}});this.currentFile=swfObj;this.loadAux(swf);},loadAux:function(file){this.fileReady=true;this.fireEvent('fileReady');$$(this.description,this.navigation).setStyle('visibility','hidden');this.navigation.setStyle('height','');$$(this.next,this.prev,this.close).setStyle('backgroundPosition','0 0');this.showFile(file);},showFile:function(file){if(this.closed){return;};var fileSize=new Hash();var targetSize={};var b=null;var p=null;if(this.options.canvasBorderWidth.toInt()!=0&&this.canvas.getStyle('borderWidth').toInt()==0){b=this.options.canvasBorderWidth+' solid '+this.options.canvasBorderColor;this.canvas.setStyle('border',b);}
if(this.options.canvasPadding.toInt()!=0&&this.canvas.getStyle('padding').toInt()==0){p=this.options.canvasPadding;this.canvas.setStyle('padding',p);}
var canvasSize=this.canvas.getSize();var canvasAddSize=this.canvas.getStyle('borderWidth').toInt()*2+this.canvas.getStyle('padding').toInt()*2;this.canvas.setStyles({'opacity':0,'width':'','height':''});if(!file.retrieve('width')){fileSize=fileSize.extend(file.getProperties('width','height')).map(function(item,index){return item.toInt();});}else{fileSize.extend({'height':file.retrieve('height').toInt(),'width':file.retrieve('width').toInt()});}
var centerSize=new Hash(this.center.getStyles('width','height')).map(function(item,index){return item.toInt();});if(fileSize.width!=centerSize.width){targetSize.width=fileSize.width+canvasAddSize;targetSize.marginLeft=-(targetSize.width/2).round();}
var gap=(canvasSize.y-canvasAddSize>0)?centerSize.height-canvasSize.y:0;targetSize.height=fileSize.height+canvasAddSize+gap;this.canvas.setStyles({'width':fileSize.width,'height':fileSize.height});this.center.removeClass('mbLoading');var d=0;if(this.first){d=500;this.first=false;}
(function(){this.center.morph(targetSize);}).delay(d,this)},showGallery:function(opt){if(!opt||!opt.gallery){return;}
var fileIndex=($chk(opt.index))?opt.index:0;var g=this.getGallery(opt.gallery);var auto=false;var d;if(opt.autoplay||(g['options']&&g['options'].autoplay)){auto=true;}
if(g!=-1&&!this.opened){if(auto){d=(opt&&opt.delay)?opt.delay:(g['options']&&g['options'].delay)?g['options'].delay:this.autoPlayDelay;this.startAutoPlay({gallery:g,index:fileIndex,delay:d});}else{this.openMilkbox(g,fileIndex);}}},addGalleries:function(xmlfile){this.currentRequest=new Request({method:'get',autoCancel:true,url:xmlfile,onRequest:function(){}.bindWithEvent(this),onSuccess:function(text,xml){var t=text.replace(/(<a.+)\/>/gi,"$1></a>");this.setGalleries(new Element('div',{html:t}),xmlfile);}.bindWithEvent(this),onFailure:function(transport){alert('Milkbox :: addGalleries: XML file path error or local test');}});this.currentRequest.send();},setGalleries:function(container,xmlfile){if(!this.xmlFiles.contains(xmlfile)){this.xmlFiles.push(xmlfile);}
var c=container;var galleries=c.getElements('.gallery');var links=[];var aplist=[];galleries.each(function(gallery,i){var obj={gallery:gallery.getProperty('name'),autoplay:Boolean(gallery.getProperty('autoplay')),delay:Number(gallery.getProperty('delay'))}
var l=gallery.getChildren('a');var lx=l.map(function(link){return link.setProperty('rel','milkbox['+obj.gallery+']');});links.push(lx);if(obj.autoplay){aplist.push(obj);}});this.prepareGalleries(links.flatten());this.setAutoPlay(aplist);if(!this.activated){this.initMilkbox();}
this.fireEvent('xmlGalleries');},checkFileType:function(file,type){var href=null;if($type(file)!='string'){href=file.retrieve('href');}
else{href=file;}
var regexp=new RegExp("\.("+type+")$","i");return href.split('?')[0].test(regexp);},getGallery:function(gallery){var f=null;if(gallery.test(/^milkbox/i)){f=this.families;}else{f=this.families.map(function(item){var cleaned=item.trim();return cleaned.slice(0,cleaned.length-1).substr(8);});}
var i=f.indexOf(gallery);var g=(i!=-1)?this.galleries[i]:i;return g;},setFileProps:function(fileObj,propString){var s=propString.split(',');s.each(function(p,i){var clean=p.trim().split(':');fileObj.store(clean[0].trim(),clean[1].trim())},this);},changeOptions:function(obj){if(!obj){return;}
this.setOptions(obj);this.center.get('morph').setOptions({transition:this.options.resizeTransition,duration:this.options.resizeDuration});},saveOptions:function(obj){if($chk(obj)){this.fullOptionsBkup=obj;}else{this.fullOptionsBkup=this.options;}},restoreOptions:function(){this.setOptions(this.fullOptionsBkup);b=this.options.canvasBorderWidth+' solid '+this.options.canvasBorderColor;this.canvas.setStyles({'border':b,'padding':this.options.canvasPadding});this.center.get('morph').setOptions({transition:this.options.resizeTransition,duration:this.options.resizeDuration});},reloadGalleries:function(){this.galleries=[];this.families=[];this.formtags=$$('select','textarea');this.prepareGalleries();this.setGalleriesEvents();if(this.xmlFiles.length==0){return;}
this.xmlFiles.each(function(xmlfile,index){this.addGalleries(xmlfile);}.bind(this));},setAutoPlay:function(list){var l=($type(list)=='object')?[list]:list;l.each(function(item){var g=this.getGallery(item.gallery);if(g==-1){return;}
var a=(item.autoplay==true)?item.autoplay:false;var d=($chk(item.delay)&&a)?item.delay:this.options.autoPlayDelay;g['options']={autoplay:a,delay:d}},this);},startAutoPlay:function(opt){var g=-1;var i,d;if(opt&&opt.gallery){if($type(opt.gallery)=='array'){g=opt.gallery}
else if($type(opt.gallery)=='string'){g=this.getGallery(opt.gallery);}}
if(g==-1){g=this.galleries[0];}
d=(opt&&opt.delay&&($type(opt.delay)=='number'))?opt.delay*1000:(g['options']&&g['options'].delay)?g['options'].delay*1000:this.options.autoPlayDelay*1000;i=(opt&&opt.index&&($type(opt.index)=='number'))?opt.index:0;if(d<this.options.resizeDuration*2){d=this.options.resizeDuration*2};this.options.autoPlayDelay=d/1000;if(!this.options.autoPlay){this.setOptions({autoPlay:true,autoPlayDelay:this.options.autoPlayDelay});}
if(this.closed){this.openMilkbox(g,i);if(this.mode!='fileGallery'){return;}
this.addEvent('fileReady',function(){this.intObj=this.next_prev_aux.periodical(d,this,[null,'next']);this.removeEvents('fileReady');}.bindWithEvent(this));}else{if(!this.closed){this.next_prev_aux(null,'next');}
this.intObj=this.next_prev_aux.periodical(d,this,[null,'next']);}
this.paused=false;},stopAutoPlay:function(){if(this.intObj){$clear(this.intObj);this.intObj=null;}
this.playpause.setStyle('backgroundPosition','0 -44px');this.paused=true;},setGalleriesEvents:function(){this.galleries.each(function(gallery){$$(gallery).addEvent('click',function(e){var button=($(e.target).match('a'))?$(e.target):$(e.target).getParent('a');e.preventDefault();var g=this.getGallery(button.rel);if(g.options&&g.options.autoplay){this.setOptions({autoPlay:g.options.autoplay,autoPlayDelay:g.options.delay});}
if(this.options.autoPlay){this.startAutoPlay({gallery:gallery,index:gallery.indexOf(button)});}else{this.openMilkbox(gallery,gallery.indexOf(button));}}.bindWithEvent(this));},this);},prepareEvents:function(xml){this.setGalleriesEvents();this.next.addEvent('click',this.next_prev_aux.bindWithEvent(this,'next'));this.prev.addEvent('click',this.next_prev_aux.bindWithEvent(this,'prev'));$$(this.next,this.prev,this.close).addEvents({'mouseover':function(){this.setStyle('backgroundPosition','0 -22px');},'mouseout':function(){this.setStyle('backgroundPosition','0 0');}});$(window.document).addEvent('keydown',function(e){if(this.mode!='fileGallery'||this.busy==true){return;}
if(e.key=='right'||e.key=='space'){this.next_prev_aux(e,'next');}
else if(e.key=='left'){this.next_prev_aux(e,'prev');}
else if(e.key=='esc'){this.closeMilkbox();}}.bindWithEvent(this));this.playpause.addEvents({'mouseover':function(e){if(this.paused==false){this.playpause.setStyle('backgroundPosition','0 -22px');}
else{this.playpause.setStyle('backgroundPosition','0 -66px');}}.bindWithEvent(this),'mouseout':function(){if(this.paused==false){this.playpause.setStyle('backgroundPosition','0 0');}
else{this.playpause.setStyle('backgroundPosition','0 -44px');}}.bindWithEvent(this),'click':function(){if(this.paused==false){this.stopAutoPlay();this.paused=true;this.playpause.setStyle('backgroundPosition','0 -66px');}else{var d=(this.currentGallery.options&&this.currentGallery.options.delay)?this.currentGallery.options.delay:this.options.autoPlayDelay;this.startAutoPlay({gallery:this.currentGallery,index:this.currentIndex+1,delay:d});this.paused=false;this.playpause.setStyle('backgroundPosition','0 0');}}.bindWithEvent(this)});this.overlay.get('tween').addEvent('onComplete',function(){if(this.overlay.getStyle('opacity')==this.options.overlayOpacity){this.center.tween('opacity',1);}else if(this.overlay.getStyle('opacity')==0){this.overlay.setStyles({'height':0,'top':''});};}.bindWithEvent(this));this.center.get('morph').addEvent('onComplete',function(){if($type(this.currentFile)=="element"){this.canvas.grab(this.currentFile);}else{(function(){this.canvas.grab(this.currentFile);}).delay(500,this);}
this.canvas.tween('opacity',1);var d=(!(this.mode=='showThisImage'))?this.currentGallery[this.currentIndex].retrieve('title'):this.specialDescription;if($chk(d)){this.description.innerHTML=d;};if(this.mode=='fileGallery'){this.count.appendText((this.currentIndex+1)+' of '+this.currentGallery.length);}
var currentCenterHeight=this.center.getStyle('height').toInt();this.navigation.setStyle('height',this.bottom.getStyle('height').toInt());var bottomSize=this.bottom.getSize().y;var targetOffset=(currentCenterHeight>this.canvas.getSize().y)?(this.bottom.getSize().y+this.canvas.getSize().y)-currentCenterHeight:bottomSize;this.bottom.setStyle('display','none');this.center.retrieve('setFinalHeight').start(currentCenterHeight,currentCenterHeight+targetOffset);}.bindWithEvent(this));this.center.retrieve('setFinalHeight').addEvent('onComplete',function(){this.bottom.setStyles({'visibility':'visible','display':'block'});$$(this.description,this.navigation).setStyle('visibility','visible');var scrollSize=$(window).getScrollSize().y;var scrollTop=$(window).getScroll().y;this.overlay.setStyles({'height':scrollSize+scrollTop,'top':-scrollTop});this.busy=false;}.bindWithEvent(this));window.addEvent('resize',function(){if(this.overlay.getStyle('opacity')==0){return;};var scrollSize=$(window).getScrollSize().y;var scrollTop=$(window).getScroll().y;this.overlay.setStyles({'height':scrollSize+scrollTop,'top':-scrollTop});}.bindWithEvent(this));$$(this.overlay,this.close).addEvent('click',function(){this.closeMilkbox();}.bindWithEvent(this));this.eventsok=true;},next_prev_aux:function(e,direction){if(e){e.preventDefault();this.stopAutoPlay();}else{if(this.busy||!this.fileReady){return;}}
this.busy=true;var backupIndex=this.currentIndex;if(direction=="next"){var i=(this.currentIndex!=this.currentGallery.length-1)?this.currentIndex+=1:this.currentIndex=0;var _i=(this.currentIndex!=this.currentGallery.length-1)?this.currentIndex+1:0;}else{var i=(this.currentIndex!=0)?this.currentIndex-=1:this.currentIndex=this.currentGallery.length-1;var _i=(this.currentIndex!=0)?this.currentIndex-1:this.currentGallery.length-1;};this.canvas.empty();this.description.empty();this.count.empty();this.loadFile(this.currentGallery[i],[this.currentGallery[_i]]);},prepareEffects:function(){this.overlay.set('tween',{duration:'short',link:'cancel'});this.center.set('tween',{duration:'short',link:'chain'});this.center.set('morph',{duration:this.options.resizeDuration,link:'chain',transition:this.options.resizeTransition});this.center.store('setFinalHeight',new Fx.Tween(this.center,{property:'height',duration:'short'}));this.canvas.set('tween',{link:'chain'});},prepareGalleries:function(responseElements){var milkbox_a=[];var gIndex;var a_tags=(responseElements)?responseElements:$$('a');a_tags.each(function(a){if(a.rel&&a.rel.test(/^milkbox/i)&&a.href.split('?')[0].test(/\.(gif|jpg|png|swf)$/i)){if(a.rel.length>7&&!this.families.contains(a.rel)){this.families.push(a.rel);};milkbox_a.push(a);}},this);milkbox_a.each(function(a){$(a).store('href',a.href);$(a).store('rel',a.rel);$(a).store('title',a.title);if(this.checkFileType(a.href,"swf")){this.setFileProps($(a),a.rev);}
if(this.options.removeTitle){$(a).removeProperty('title');}
if(a.rel.length>7){this.families.each(function(f,i){if(a.rel==f){var gMounted=false;var index;this.galleries.each(function(g,k){if(g[0].rel==f){gMounted=true;index=k;return;}});if(gMounted==true){this.galleries[index].push($(a));}
else{this.galleries.push([$(a)]);}};},this);}else{this.galleries.push([$(a)]);};},this);},prepareHTML:function(){this.overlay=new Element('div',{'id':'mbOverlay','styles':{'opacity':0,'visibility':'visible','height':0,'overflow':'hidden'}}).inject($(document.body));this.center=new Element('div',{'id':'mbCenter','styles':{'width':this.options.initialWidth,'height':this.options.initialHeight,'marginLeft':-(this.options.initialWidth/2),'opacity':0}}).inject($(document.body));this.canvas=new Element('div',{'id':'mbCanvas'}).inject(this.center);this.bottom=new Element('div',{'id':'mbBottom'}).inject(this.center).setStyle('visibility','hidden');this.navigation=new Element('div',{'id':'mbNavigation'}).setStyle('visibility','hidden');this.description=new Element('div',{'id':'mbDescription'}).setStyle('visibility','hidden');this.bottom.adopt(this.navigation,this.description,new Element('div',{'class':'clear'}));this.close=new Element('a',{'id':'mbCloseLink'});this.next=new Element('a',{'id':'mbNextLink'});this.prev=new Element('a',{'id':'mbPrevLink'});this.playpause=new Element('a',{'id':'mbPlayPause'});this.count=new Element('span',{'id':'mbCount'});$$(this.next,this.prev,this.count,this.playpause).setStyle('display','none');this.navigation.adopt(this.close,this.next,this.prev,this.playpause,new Element('div',{'class':'clear'}),this.count);},closeMilkbox:function(){this.cancelAllEffects();this.stopAutoPlay();this.setOptions(this.autoPlayBkup);this.currentFile=null;this.currentIndex=null;this.currentGallery=null;this.currentRequest=null;this.currentResponse=null;$$(this.prev,this.next,this.playpause,this.count).setStyle('display','none');this.playpause.setStyle('backgroundPosition','0 0');var border=this.center.getStyle('border-right-width').toInt();var navWidth=this.close.getSize().x+border;this.navigation.setStyles({'width':navWidth,'height':'','visibility':'hidden'});this.description.setStyle('margin-right',navWidth);this.description.empty();this.bottom.setStyles({'visibility':'hidden','display':''});this.canvas.setStyles({'opacity':0,'width':'','height':''});this.canvas.empty();this.count.empty();this.center.setStyles({'opacity':0,'width':this.options.initialWidth,'height':this.options.initialHeight,'marginLeft':-(this.options.initialWidth/2)});this.overlay.tween('opacity',0);if(this.formtags.length!=0){this.formtags.setStyle('display','')};this.mode=null;this.closed=true;this.first=true;this.fileReady=false;this.fireEvent('closed');},cancelAllEffects:function(){this.overlay.get('tween').cancel();this.center.get('morph').cancel();this.center.get('tween').cancel();this.center.retrieve('setFinalHeight').cancel();this.canvas.get('tween').cancel();}});window.addEvent('domready',function(){milkbox=new Milkbox();});