/* PLUGINS */

/*
	Slimbox v1.71 - The ultimate lightweight Lightbox clone
	(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/
var Slimbox=(function(){var F=window,n=Browser.Engine.trident4,u,g,G=-1,o,w,E,v,y,M,s,m={},t=new Image(),K=new Image(),I,a,h,q,J,e,H,c,A,L,x,i,d,C;F.addEvent("domready",function(){$(document.body).adopt($$(I=new Element("div",{id:"lbOverlay",events:{click:D}}),a=new Element("div",{id:"lbCenter"}),H=new Element("div",{id:"lbBottomContainer"})).setStyle("display","none"));h=new Element("div",{id:"lbImage"}).injectInside(a).adopt(q=new Element("div",{styles:{position:"relative"}}).adopt(J=new Element("a",{id:"lbPrevLink",href:"#",events:{click:B}}),e=new Element("a",{id:"lbNextLink",href:"#",events:{click:f}})));c=new Element("div",{id:"lbBottom"}).injectInside(H).adopt(new Element("a",{id:"lbCloseLink",href:"#",events:{click:D}}),A=new Element("div",{id:"lbCaption"}),L=new Element("div",{id:"lbNumber"}),new Element("div",{styles:{clear:"both"}}))});function z(){var N=F.getScroll(),O=F.getSize();$$(a,H).setStyle("left",N.x+(O.x/2));if(v){I.setStyles({left:N.x,top:N.y,width:O.x,height:O.y})}}function l(N){["object",n?"select":"embed"].forEach(function(P){Array.forEach(document.getElementsByTagName(P),function(Q){if(N){Q._slimbox=Q.style.visibility}Q.style.visibility=N?"hidden":Q._slimbox})});I.style.display=N?"":"none";var O=N?"addEvent":"removeEvent";F[O]("scroll",z)[O]("resize",z);document[O]("keydown",p)}function p(O){var N=O.code;return u.closeKeys.contains(N)?D():u.nextKeys.contains(N)?f():u.previousKeys.contains(N)?B():false}function B(){return b(w)}function f(){return b(E)}function b(N){if(N>=0){G=N;o=g[N][0];w=(G||(u.loop?g.length:0))-1;E=((G+1)%g.length)||(u.loop?0:-1);r();a.className="lbLoading";m=new Image();m.onload=k;m.src=o}return false}function k(){a.className="";d.set(0);h.setStyles({backgroundImage:"url("+o+")",display:""});q.setStyle("width",m.width);$$(q,J,e).setStyle("height",m.height);A.set("html",g[G][1]||"");L.set("html",(((g.length>1)&&u.counterText)||"").replace(/{x}/,G+1).replace(/{y}/,g.length));if(w>=0){t.src=g[w][0]}if(E>=0){K.src=g[E][0]}M=h.offsetWidth;s=h.offsetHeight;var P=Math.max(0,y-(s/2)),N=0,O;if(a.offsetHeight!=s){N=i.start({height:s,top:P})}if(a.offsetWidth!=M){N=i.start({width:M,marginLeft:-M/2})}O=function(){H.setStyles({width:M,top:P+s,marginLeft:-M/2,visibility:"hidden",display:""});d.start(1)};if(N){i.chain(O)}else{O()}}function j(){if(w>=0){J.style.display=""}if(E>=0){e.style.display=""}C.set(-c.offsetHeight).start(0);H.style.visibility=""}function r(){m.onload=$empty;m.src=t.src=K.src=o;i.cancel();d.cancel();C.cancel();$$(J,e,h,H).setStyle("display","none")}function D(){if(G>=0){r();G=w=E=-1;a.style.display="none";x.cancel().chain(l).start(0)}return false}Element.implement({slimbox:function(N,O){$$(this).slimbox(N,O);return this}});Elements.implement({slimbox:function(N,Q,P){Q=Q||function(R){return[R.href,R.title]};P=P||function(){return true};var O=this;O.removeEvents("click").addEvent("click",function(){var R=O.filter(P,this);return Slimbox.open(R.map(Q),R.indexOf(this),N)});return O}});return{open:function(P,O,N){u=$extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeTransition:false,initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},N||{});x=new Fx.Tween(I,{property:"opacity",duration:u.overlayFadeDuration});i=new Fx.Morph(a,$extend({duration:u.resizeDuration,link:"chain"},u.resizeTransition?{transition:u.resizeTransition}:{}));d=new Fx.Tween(h,{property:"opacity",duration:u.imageFadeDuration,onComplete:j});C=new Fx.Tween(c,{property:"margin-top",duration:u.captionAnimationDuration});if(typeof P=="string"){P=[[P,O]];O=0}y=F.getScrollTop()+(F.getHeight()/2);M=u.initialWidth;s=u.initialHeight;a.setStyles({top:Math.max(0,y-(s/2)),width:M,height:s,marginLeft:-M/2,display:""});v=n||(I.currentStyle&&(I.currentStyle.position!="fixed"));if(v){I.style.position="absolute"}x.set(0).start(u.overlayOpacity);z();l(1);g=P;u.loop=u.loop&&(g.length>1);return b(O)}}})();

// AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED)
Slimbox.scanPage = function() {
	$$("a").filter(function(el) {
		return el.rel && el.rel.test(/^lightbox/i);
	}).slimbox({/* Put custom options here */}, null, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
};
if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
	window.addEvent("domready", Slimbox.scanPage);
}

/*
---
description: TinyTab - Tiny and simple tab handler for Mootools.

license: MIT-style

authors:
- Danillo César de O. Melo

requires:
- core/1.2.4: '*'

provides: TinyTab

...
*/
(function($) {
	this.TinyTab = new Class({
		Implements: Events,
		initialize: function(tabs, contents, opt) {
			this.tabs = tabs;
			this.contents = contents;
			if(!opt) opt = {};
			this.css = opt.selectedClass || 'selected'; 
			this.select(this.tabs[0]);
			tabs.addEvent('click',function(e){
				this.select(e.target);
				e.stop();
			}.bind(this));
		},

		select: function(el) {
			this.tabs.removeClass(this.css);
			el.addClass(this.css);
			this.contents.setStyle('display','none');
			var content = this.contents[this.tabs.indexOf(el)];
			content.setStyle('display','block');
			this.fireEvent('change',[content,el]);
		}
	});
})(document.id);

/* TAB */


/*
Script: PeriodicalExecuter.js
    port of the Prototype.js timer to Mootools

    License: MIT-style license.
    Copyright: Copyright (c) 2007 Thierry bela <bntfr at yahoo dot fr>

    License:
        MIT-style license.

    Authors:
        Thierry Bela

    TODO: possibility to stop the timer when the window is idle ?
*/          

var PeriodicalExecuter=new Class({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.stop();this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);return this},execute:function(){this.callback(this);return this},stop:function(){if(!this.timer)return this;clearInterval(this.timer);this.timer=null;return this},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();}finally{this.currentlyExecuting=false;}}return this}});


/*
---
script: Tab.js
license: MIT-style license.
description: Tab - Minimalistic but extensible tab swapper.
copyright: Copyright (c) 2008 Thierry Bela
authors: [Thierry Bela]

requires: 
  core:1.2.3: 
  - Class.Extras
  - Element.Event
  - Element.Style
  - Element.Dimensions
  - Fx.Morph
  - Array
provides: [Tab, Tab.plugins.None]
...
*/


var Tab=new Class({options:{fx:{transition:'sine:out',link:'chain'},inactiveClass:'',activeClass:'',animation:'None'},current:0,Implements:[Options,Events],initialize:function(options){this.addEvents({onCreate:function(newPanel,index){this.tabs.each(function(el,val){el[val==index?'removeClass':'addClass'](options.inactiveClass)[val==index?'addClass':'removeClass'](options.activeClass)});this.selected=newPanel;this.current=index}.bind(this),onChange:function(newPanel,oldPanel,index,oldIndex){var _new=this.tabs[index],_old=this.tabs[oldIndex],options=this.options
if(_old)_old.removeClass(options.activeClass).addClass(options.inactiveClass);if(_new)_new.removeClass(options.inactiveClass).addClass(options.activeClass);this.selected=newPanel;this.current=index}.bind(this)}).setOptions(options);options=this.options;this.tabs=$$(options.tabs);this.panels=$(options.container).getChildren(options.selector);this.tabs.each(function(el,index){el.set({styles:{cursor:'pointer'},events:{click:function(e){e.stop();var forward=this.current<index?index-this.current:this.panels.length-this.current+index,backward=this.current>index?this.current-index:this.current+this.panels.length-index;this.setSelectedIndex(index,Math.abs(forward)<=Math.abs(backward)?1:-1)}.bind(this)}}).addClass(options.inactiveClass).removeClass(options.activeClass);},this);this.anim=new this.plugins[options.animation](this.panels,options.params,options.fx);var current=options.current||0;this.fireEvent('onCreate',[this.panels[current],current]);this.setSelectedIndex(current||0);return this},next:function(){return this.setSelectedIndex((this.getSelectedIndex()+this.panels.length+1)%this.panels.length,1);},previous:function(){return this.setSelectedIndex((this.getSelectedIndex()+this.panels.length-1)%this.panels.length,-1);},getSelectedIndex:function(){return this.current},setSelectedIndex:function(index,direction){var current=this.current,curPanel=this.panels[current],newPanel=this.panels[index],params=[newPanel,curPanel,index,current,direction];if(this.current==index||this.selected==newPanel||index<0||index>=this.panels.length)return this;this.anim.move.apply(this.anim,params);return this.fireEvent('onChange',params)}});Tab.prototype.plugins={None:new Class({initialize:function(panels){panels.each(function(el,index){el.setStyle('display',index==0?'block':'none')})},move:function(newPanel,oldPanel){newPanel.setStyle('display','block');if(oldPanel)oldPanel.setStyle('display','none')}})};






/*
---
script: Tab.Extra.js
license: MIT-style license.
description: Extends Tab with automatic slide.
copyright: Copyright (c) 2008 Thierry Bela
authors: [Thierry Bela]

requires: 
  - Tab
provides: [Tab.Extra]
...
*/

Tab.Extra=new Class({Extends:Tab,Binds:['update','start','stop'],initialize:function(options){this.parent(options);this.reverse=!!this.options.reverse;this.timer=new PeriodicalExecuter(this.update,options.interval||10);return this},update:function(){return this[this.reverse?'previous':'next']()},start:function(){return this.timer.registerCallback();return this},stop:function(){this.timer.stop();return this}});




/*
---
script: Tabs.Plugins.Move.js
license: MIT-style license.
description: Move - swap tab horizontally or vertically.
copyright: Copyright (c) 2008 Thierry Bela
authors: [Thierry Bela]

requires: 
  tab:0.1.3.6: 
  - Tab
provides: [Tab.plugins.Move]
...
*/


Tab.prototype.plugins.Move=new Class({options:{mode:'horizontal'},fx:{link:'chain',duration:1000},initialize:function(panels,options,fx){this.options=$merge(this.options,options);this.panels=panels.map(function(el){return el.setStyles({position:'absolute',display:'block'})});this.fx=new Fx.Elements(panels,$merge(this.fx,fx));this.reorder(0,1).container=panels[0].getParent().setStyles({overflow:'hidden',position:'relative',width:panels[0].offsetWidth,height:panels[0].offsetHeight})},reorder:function(offset,direction){var pos=0,i,options=this.options,panels=this.panels,length=panels.length,horizontal=options.mode=='horizontal',side=horizontal?'offsetWidth':'offsetHeight';if(direction==-1){for(i=length;i>0;i--){index=(i+offset+length)%length;panel=panels[index];if(horizontal)panel.setStyle('left',pos);else panel.setStyles({left:0,top:pos});pos-=panel[side];}}else if(direction==1)for(i=0;i<length;i++){index=(i+offset+length)%length;panel=panels[index];if(horizontal)panel.setStyle('left',pos);else panel.setStyles({left:0,top:pos});pos+=panel[side];}return this},move:function(newTab,curTab,newIndex,oldIndex,direction){this.fx.cancel();var obj={},options=this.options,horizontal=options.mode=='horizontal',property=horizontal?'offsetLeft':'offsetTop',offset,opacity=options.opacity||.7;if(oldIndex!=undefined&&options.circular)this.reorder(oldIndex,direction);offset=newTab[property];this.panels.each(function(panel,index){obj[index]=horizontal?{opacity:opacity,left:[panel[property],panel[property]-offset]}:{opacity:opacity,top:[panel[property],panel[property]-offset]};});if(!options.useOpacity)$each(obj,function(k){delete k.opacity});this.fx.start(obj).chain(function(){newTab.tween('opacity',1)}.bind(this));this.container.morph({height:newTab.offsetHeight,width:newTab.offsetWidth})}});
