
    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;}, 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, {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 () {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;}});
