if(typeof (AC)=="undefined"){AC={}}

AC.Bureau=Class.create();
Object.extend(AC.Bureau.prototype,Event.Listener);
Object.extend(AC.Bureau.prototype,
{
	drawers:null,
	container:null,
	triggerTimeout:null,

	initialize:function(A)
	{	this.drawers=[];
		this.container=$(A)
	},

	addDrawer:function(A){},
	getDrawerCount:function(){return this.drawers.length},
	hasDrawers:function(){return(this.drawers.length>0)},
	getFirstDrawer:function(){return this.drawers[0]||null},
	getDrawer:function(i){return this.drawers[i]||null},
	
	getLastDrawer:function(){return this.drawers[this.drawers.length-1]||null},
	scheduleTrigger:function(B,A){this.triggerTimeout=setTimeout(B,A)},
	clearTrigger:function(){clearTimeout(this.triggerTimeout)}});
	
	AC.Drawer=Class.create();
	Object.extend(AC.Drawer.prototype,Event.Publisher);

	Object.extend(AC.Drawer.prototype,
	{
		bureau:null,
		contentElement:null,
		handle:null,
		indicator:null,
		isOpen:true,
		beforeOpen:null,
		afterOpen:null,
		beforeClose:null,
		afterClose:null,
		transitionDuration:0.3,
		triggerDelay:0,

		initialize:function(F,D,B,C)
		{
			this.contentElement=$(F);
			this.handle=$(D);
			this.bureau=B;
			var E="click";
			
			if(C!==null&&typeof (C)!="undefined")
			{
				this.beforeOpen=C.beforeOpen;
				this.afterOpen=C.afterOpen;
				this.beforeClose=C.beforeClose;
				this.afterClose=C.afterClose;
				
				if(typeof (C.triggerEvent)!="undefined")
				{E=C.triggerEvent}
				
				if(typeof (C.triggerDelay)!="undefined")
				{
					this.triggerDelay=C.triggerDelay
				}
				
				if(typeof (C.transitionDuration)!="undefined")
				{
					this.transitionDuration=C.transitionDuration
				}
			}
			
			if(AC.Detector.isiPhone())
			{
				this.transitionDuration=0;
				E="click"
			}
			
			Element.addClassName(this.contentElement,"last");
			
			var A=function(G)
			{
				if(AC.Detector.isiPhone()&&(this.isOpen&&(this.isVisible===true))&&this.handle.tagName.match(/a/i)){
					return 
				}
				
				Event.stop(G);
				
				if(this.triggerDelay>0)
				{
					var H=this.trigger.bind(this);
					B.scheduleTrigger(H,this.triggerDelay)
				}else{
					this.trigger()
				}
			};
			
			Event.observe(this.handle,E,A.bind(this),false);
			Event.observe(this.handle,"mouseout",B.clearTrigger.bind(B),false)
		},
		
		toggle:function(){},
		open:function(){},
		close:function(){}
	});
		
	
	
	AC.SlidingBureau=Class.create();
	Object.extend(AC.SlidingBureau.prototype,AC.Bureau.prototype);
	Object.extend(AC.SlidingBureau.prototype,
	{
		isLocked:false,
		
		addDrawer:function(B)
		{
			Element.addClassName(B.contentElement,"last");
			Element.addClassName(B.handle,"last");
			
			if(this.hasDrawers())
			{
				var A=this.getLastDrawer();
				A.setNextDrawer(B);
				B.setPreviousDrawer(A)
			}else{
				Element.addClassName(B.contentElement,"first");
				Element.addClassName(B.handle,"first")
			}
			
			this.listenForEvent(B,"beforeOpen",false,function(C)
			{
				var D=C.event_data.data;
				this.open(D)
			});
				
			this.listenForEvent(B,"afterOpen",false,function(C)
			{
					var D=C.event_data.data;
					this.acknowledgeOpened(D)
			});
				
				this.listenForEvent(B,"beforeClose",false,function(C)
				{
					var D=C.event_data.data;
					this.close(D)
				});
				
				this.listenForEvent(B,"afterClose",false,function(C)
				{
					var D=C.event_data.data;
					this.acknowledgeClosed(D)
				});
				
				if(!Element.hasClassName(B.contentElement,"open"))
				{
					B.initiateClose()
				}else{this.currentDrawer=B}
				
				this.drawers.push(B)},
				
				open:function(A)
				{
					if(this.isLocked){return }
					
					this.isLocked=true;
					var C=0;
					
					if(Element.getStyle(this.container,"position")=="relative")
					{
						var B=Element.getDimensions(this.container);
						Element.setStyle(this.container,{height:B.height+"px"});
					
						this.wedgeDrawersAfter(A);
					
						C=Element.getStyle(A.contentElement,"min-height");
					
						if(C){Element.setStyle(A.contentElement,{"min-height":"0px",height:C})}
					}
					
					if(this.currentDrawer)
					{
						this.currentDrawer.initiateClose()
					}
					
					A.open(C)},
					
					acknowledgeOpened:function(A)
					{
						this.currentDrawer=A;
						
						if(Element.getStyle(this.container,"position")=="relative")
						{
							if(!AC.Detector.isIEStrict())
							{
								Element.setStyle(this.container,{height:"auto"})
							}
							
							this.unwedgeDrawers()
						}
						
						this.isLocked=false
					},
					
					close:function(A)
					{
						var B=0;
						
						if(Element.getStyle(this.container,"position")=="relative")
						{
							B=Element.getStyle(A.contentElement,"min-height");
							
							if(B)
							{
								Element.setStyle(A.contentElement,{height:B,"min-height":"0px"})
							}
						}
						
						A.close(B)
					},
					
					acknowledgeClosed:function(A)
					{
						if(A==this.currentDrawer){this.currentDrawer=null}
					},
					
					wedgeDrawersAfter:function(D)
					{
						var A=function(E,F)
						{
							Element.setStyle(E.handle,{position:"absolute",bottom:F+"px"})
						};
						
						var B=this.getLastDrawer();
						var C=0;
						while(B!=this.currentDrawer&&B!=D)
						{
							A(B,C);C+=B.handle.getHeight();
							B=B.previousDrawer
						}
					},
					
					unwedgeDrawers:function()
					{
						for(var A=this.drawers.length-1;A>=0;A--)
						{
							Element.setStyle(this.drawers[A].handle,{position:"static"})
						}
					}
	});
	
	
	
	AC.SlidingDrawer=Class.create();
	Object.extend(AC.SlidingDrawer.prototype,AC.Drawer.prototype);
	Object.extend(AC.SlidingDrawer.prototype,
	
	{
		isLocked:false,
		isOpen:true,
		isTransitioning:false,
		setNextDrawer:function(A)
		{
			this.nextDrawer=A;
			Element.removeClassName(this.contentElement,"last");
			Element.removeClassName(this.handle,"last")
		},
		
		setPreviousDrawer:function(A)
		{this.previousDrawer=A},
			
		trigger:function()
		{
			if (!this.isLocked){
				this.toggle();
			}
		},
			
		toggle:function(){if(!this.isOpen)
		{
				this.initiateOpen()
		}
		},
			
		initiateOpen:function()
		{
			if(this.isTransitioning||this.isOpen)
			{return }
			
			this.dispatchEvent("beforeOpen",this)},
			
			open:function(C)
			{
				this.isTransitioning=true;
				if(typeof (this.beforeOpen)=="function")
				{
					this.beforeOpen(this)
				}
				
				Element.addClassName(this.contentElement,"open");
				Element.addClassName(this.handle,"open");
				
				var B=function()
				{
					this.isOpen=true;
					
					if(C){Element.setStyle(this.contentElement,{"min-height":C});
					if(!AC.Detector.isIEStrict())
					{
						Element.setStyle(this.contentElement,{"height":"auto"})
					}
					}
					
					this.dispatchEvent("afterOpen",this);
					this.isTransitioning=false;
					if(typeof (this.afterOpen)=="function")
					{
						this.afterOpen(this)
					}
				}.bind(this);
				
				if(AC.Detector.isiPhone())
				{
					this.contentElement.show();
					B()
				}else{
					var A=new Effect.BlindDown(this.contentElement,
					{
						duration:this.transitionDuration,afterFinish:B})
				}
			},
			
			initiateClose:function(A)
			{
				if(this.isTransitioning||!this.isOpen){return }
				this.dispatchEvent("beforeClose",this)},
				close:function(C)
				{
					this.isTransitioning=true;
					if(typeof (this.beforeClose)=="function")
					{
						this.beforeClose(this)
					}
					
					var B=function()
					{
						this.isOpen=false;
						Element.removeClassName(this.contentElement,"open");
						Element.removeClassName(this.handle,"open");
						if(C){Element.setStyle(this.contentElement,{"min-height":C});if(!AC.Detector.isIEStrict()){Element.setStyle(this.contentElement,{"height":"auto"})}}this.dispatchEvent("afterClose",this);this.isTransitioning=false;if(typeof (this.afterClose)=="function"){this.afterClose(this)}}.bind(this);if(AC.Detector.isiPhone()){this.contentElement.hide();B()}else{var A=new Effect.BlindUp(this.contentElement,{duration:this.transitionDuration,afterFinish:B})}}});
					
AC.ShingleBureau=Class.create();Object.extend(Object.extend(AC.ShingleBureau.prototype,AC.Bureau.prototype),{drawerDuration:0.5,addDrawer:function(B){if(this.hasDrawers()){var A=this.getLastDrawer();A.setNextDrawer(B);B.setPreviousDrawer(A);B.closedOffset=A.closedOffset+A.getHandleHeight()-10}else{Element.addClassName(B.contentElement,"first");B.closedOffset=0-B.getHeight()+B.getHandleHeight()-10;B.indicateVisible()}this.drawers.push(B)},getWidth:function(){return Element.getWidth(this.container)},getHeight:function(){return Element.getHeight(this.container)},moveDrawer:function(C,A,D){var B=new Effect.Move(C,{x:A,y:D,mode:"absolute",transition:Effect.Transitions.sinoidal,duration:this.drawerDuration})}});AC.ShingleDrawer=Class.create();Object.extend(Object.extend(AC.ShingleDrawer.prototype,AC.Drawer.prototype),{openedOffset:0,closedOffset:0,previousDrawer:null,nextDrawer:null,isVisible:false,trigger:function(){if(!this.isVisible){this.open(true);this.indicateVisible()}},toggle:function(){if(!this.isOpen){this.open();this.indicateVisible()}else{this.close()}},open:function(A){if(this.isOpen&&!A){return }if(this.previousDrawer!==null){this.previousDrawer.close();this.previousDrawer.indicateObscured()}if(this.nextDrawer!==null){this.nextDrawer.open();this.nextDrawer.indicateObscured()}this.indicateVisible();this.isOpen=true;this.bureau.moveDrawer(this.contentElement,0,this.openedOffset)},close:function(A){if(!this.isOpen){return }if(this==this.bureau.getLastDrawer()){return }if(this.previousDrawer!==null){this.previousDrawer.close()}this.bureau.moveDrawer(this.contentElement,0,this.closedOffset);this.indicateObscured();this.isOpen=false},setPreviousDrawer:function(A){this.previousDrawer=A;this.indicateObscured();this.openedOffset=this.previousDrawer.openedOffset+this.previousDrawer.getHandleHeight()-10;Element.setStyle(this.contentElement,{top:this.openedOffset+"px"})},setNextDrawer:function(A){this.nextDrawer=A;Element.removeClassName(this.contentElement,"last");if(this.previousDrawer!==null){this.previousDrawer.setNextDrawer(this)}zIndex=parseInt(Element.getStyle(this.contentElement,"zIndex"),10);Element.setStyle(this.contentElement,{"zIndex":zIndex+1})},indicateObscured:function(){Element.addClassName(this.contentElement,"obscured");this.isVisible=false},indicateVisible:function(){this.isVisible=true;Element.removeClassName(this.contentElement,"obscured")},getHandleWidth:function(){return Element.getWidth(this.handle)},getHandleHeight:function(){return Element.getHeight(this.handle)},getWidth:function(){return Element.getWidth(this.contentElement)},getHeight:function(){return Element.getHeight(this.contentElement)}});AC.SectionBureau=Class.create();Object.extend(AC.SectionBureau.prototype,AC.Bureau.prototype);Object.extend(AC.SectionBureau.prototype,{currentDrawer:null,locked:false,addDrawer:function(A){this.drawers.push(A);Element.addClassName(A.handle,"obscured");Element.hide(A.contentElement)},openingDrawer:function(A){if(this.currentDrawer!==null){this.currentDrawer.close()}this.currentDrawer=A}});AC.SectionDrawer=Class.create();Object.extend(AC.SectionDrawer.prototype,AC.Drawer.prototype);Object.extend(AC.SectionDrawer.prototype,{isOpen:false,trigger:function(){this.toggle()},toggle:function(){if(!this.isOpen){this.open()}},open:function(){if(this.bureau.locked){return }var B=function(){Element.show(this.contentElement)}.bind(this);if(typeof (this.afterOpen)=="function"){this.bureau.locked=true;B=this.afterOpen.bind(this)}this.bureau.openingDrawer(this);if(typeof (this.beforeOpen)=="function"){this.beforeOpen()}this.isOpen=true;Element.removeClassName(this.handle,"obscured");

var A=new Effect.Appear(this.contentElement,{afterFinish:B,duration:this.transitionDuration,queue:{scope:"sectionalscope"}})},close:function(){if(typeof (this.beforeClose)=="function"){this.beforeClose()}this.isOpen=false;Element.addClassName(this.handle,"obscured");

var A=function(){if(typeof (this.afterClose)=="function"){this.afterClose()}}.bind(this);

var B=new Effect.Fade(this.contentElement,{afterFinish:A,duration:this.transitionDuration,queue:{scope:"sectionalscope"}})},reportFinishedOpening:function(){this.bureau.locked=false}})

