if (typeof(AC) == "undefined") { AC = {}; }
AC.Detector = {
	getAgent: function() {return navigator.userAgent.toLowerCase();},
	isMac: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/mac/i);},
	isWin: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/win/i);},
	isWin2k: function(userAgent) {var agent = userAgent || this.getAgent();return this.isWin(agent) && (agent.match(/nt\s*5/i));},
	isWinVista: function(userAgent) {var agent = userAgent || this.getAgent();return this.isWin(agent) && (agent.match(/nt\s*6/i));},
	isWebKit: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/AppleWebKit/i);},
	isOpera: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/opera/i);},
	isIE: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/msie/i);},
	isIEStrict: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/msie/i) && !this.isOpera(agent);},
	isFirefox: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/firefox/i);},
	isiPhone: function(userAgent) {var agent = userAgent || this.getAgent();return agent.match(/iPhone/i);},
	isiTunesOK: function(userAgent) {var agent = userAgent || this.getAgent();return this.isMac(agent) || this.isWin2k(agent);},
	isQTInstalled: function() {
	var qtInstalled = false;
	if(navigator.plugins && navigator.plugins.length) {
			for(var i=0; i < navigator.plugins.length; i++ ) {
				var plugin = navigator.plugins[i];
			if(plugin.name.indexOf("QuickTime") > -1) { qtInstalled = true; }
			}
		} else {
			qtObj = false; 
			execScript('on error resume next: qtObj = IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))','VBScript');qtInstalled = qtObj;}return qtInstalled;
	},
	getQTVersion: function() {
		var version = "0";
		if (navigator.plugins && navigator.plugins.length) {
			for (var i = 0; i < navigator.plugins.length; i++) {
				var plugin = navigator.plugins[i];var match = plugin.name.match(/quicktime\D*([\.\d]*)/i);
				if (match && match[1]) {version = match[1];}}
		} else {
			ieQTVersion = null; //global for vbscript to write to
			execScript('on error resume next: ieQTVersion = (Hex(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1").QuickTimeVersion)/1000000)','VBScript');
			if (ieQTVersion) {version = (ieQTVersion +"").split(/\./)[0];}
		}
		return version;
	},
	isQTCompatible: function(required, actual) {
		function areCompatible(required, actual) {
			var requiredValue = parseInt(required[0])
			if (isNaN(requiredValue)) {requiredValue = 0;}
			var actualValue = parseInt(actual[0])
			if (isNaN(actualValue)) {actualValue = 0;}
			if (requiredValue == actualValue) {
			if (required.length > 1) {return areCompatible(required.slice(1), actual.slice(1));} else {return true;}
			} else if (requiredValue < actualValue) {return true;} else {return false;}
		}
		var expectedVersion = required.split(/\./);
		var actualVersion = actual ? actual.split(/\./) : this.getQTVersion().split(/\./);
		return areCompatible(expectedVersion, actualVersion);
	},
	isValidQTAvailable: function(required) {return this.isQTInstalled() && this.isQTCompatible(required)
	}
};













Event.Publisher = Class.create();
Object.extend( Event.Publisher, {
	_ls_event_targets: null,
	_event_source_id: null,
	_fl_trace_events: false,
	getEventSourceId: function() {
		if ( typeof this._event_source_id == 'function' )
			return this._event_source_id();
		else
		 return this._event_source_id;},
	getEventTarget: function( event_name ) {
		if ( ! this._ls_event_targets )
			this._ls_event_targets = new Array();
		if ( ! this._ls_event_targets[ event_name ] )
			document.body.appendChild(this._ls_event_targets[ event_name ] = document.createElement( 'A' ));
		return this._ls_event_targets[ event_name ];
	},
	addEventListener: function( event_name, callback_func, capturing ) {
		var targ = this.getEventTarget( event_name );
		Event.observe( targ, 'click', callback_func, capturing );
		if ( this._fl_trace_events ) {
			var data =  {publisher: this.getEventSourceId(),event_name: event_name,listener: callback_func,capturing: capturing,event_source_proxy: targ};
			this.dispatchEvent( 'eventListenerAdded', data, true, true );
		}
	},
	removeEventListener: function( event_name, callback_func, capturing ) {
		var targ = this.getEventTarget( event_name );
		Event.stopObserving( targ, 'click', callback_func, capturing );
		if ( this._fl_trace_events ) {
			var data =  {publisher: this.getEventSourceId(),event_name: event_name,listener: callback_func,capturing: capturing,event_source_proxy: targ};
			this.dispatchEvent( 'eventListenerRemoved', data, true, true );
		}
	},
	dispatchEvent: function( event_name, data, can_bubble, cancelable ) {
		var targ = this.getEventTarget( event_name );
		var event_data = {event_name: event_name,event_target: this,data: data ? data : null};
		if ( ! can_bubble ) can_bubble = false;
		if ( ! cancelable ) cancelable = false;
		var event = Event.create( event_data, can_bubble, cancelable, true, targ );
		if ( this._fl_trace_events ) {
			if ( event_name.match( /event(?:ListenerAdded|ListenerRemoved|Dispatched|Received)/ ) )
			return;
			var data =  {publisher: this.getEventSourceId(),event_name: event_name,event_data: event_data,can_bubble: can_bubble,cancelable: cancelable,event_source_proxy: targ,result: event};
			this.dispatchEvent( 'eventDispatched', data, true, true );
		}
	},
	toggleEventsTrace: function() {
		var trace = Event.Tracer.findTracer();
		if ( ! trace || ! this._fl_trace_events ) {
			this._fl_trace_events = true;
			trace = Event.Tracer.startTrace();
			trace.registerPublisher( this );
		}
		else {this._fl_trace_events = false;
			if ( trace )
				trace.unregisterPublisher( this );
		}return this._fl_trace_events;
	},
	isEventsTraceActive: function() {return this._fl_trace_events;
	}
} );
Event.Listener = Class.create();
Object.extend( Event.Listener,
{
	_listens: null,
	getEventHandlerName: function( event_name ) {
		var onEvent_name = event_name.split( /[ _]/ ).join( '-' ).camelize();
		return "on" + onEvent_name.charAt( 0 ).toUpperCase() + onEvent_name.substr( 1 );
	},
	listenForEvent: function( event_source, event_name, use_capture, onEvent_name ) {
		if ( ! onEvent_name )
			onEvent_name = this.getEventHandlerName( event_name );
		if ( ! this._listens ) this._listens = new Array();
		var eventHandler = this[onEvent_name];
		if(typeof(onEvent_name) == 'function') {
			eventHandler = onEvent_name;
		}
		var cb = eventHandler.bindAsEventListener( this );
		this._listens.push( [ event_source, event_name, use_capture, onEvent_name, cb ] )
		event_source.addEventListener( event_name, cb, use_capture );
	},
	stopListeningForEvent: function( event_source, event_name, use_capture, onEvent_name ) {
		if ( ! this._listens ) return false;
		if ( ! onEvent_name )
			onEvent_name = this.getEventHandlerName( event_name );
		var ix_item = -1;
		var ls = this._listens.detect( function( val, ix ) {
			if ( ( val[ 0 ] == event_source )
			  && ( val[ 1 ] == event_name )
			  && ( val[ 2 ] == use_capture )
			  && ( val[ 3 ] == onEvent_name ) ) {
				ix_item = ix;
				return true;
			}
		} );
		
		if ( ix_item >= 0 ) {
			this._listens.splice( ix_item, 1 );
			event_source.removeEventListener( event_name, ls[ 4 ], use_capture );
			return true;
		}
		return false;
	}
} );

Object.extend( Event,
{
	create: function( event_data, can_bubble, cancelable, fl_dispatch, target ) {
		var event;
		if ( document.createEvent ) {  // gecko, safari
			if ( ! can_bubble ) can_bubble = false;
			if ( ! cancelable ) cancelable = false;
			if ( /Konqueror|Safari|KHTML/.test( navigator.userAgent ) ) {
				event = document.createEvent( 'HTMLEvents' )
				event.initEvent( 'click', can_bubble, cancelable );
			}
			else {  // gecko uses MouseEvents
				event = document.createEvent( 'MouseEvents' )
				event.initMouseEvent( "click", can_bubble, cancelable,window, 0, 0, 0, 0, 0,false, false, false, false, 0, null );}
		}
		else {  // msie
			event = document.createEventObject();
			event.event_type = 'onclick';
		}
		event.event_data = event_data;
		if ( fl_dispatch )
			Event.dispatch( target, event );return event;
	},
	dispatch: function( target, event ) {
		if ( document.createEvent )return target.dispatchEvent( event );
		else
   return target.fireEvent( ( typeof( event.event_type ) != "undefined" ) ? event.event_type : 'onclick', event );
	}
} );








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(container){this.drawers=[];this.container=$(container);},
addDrawer:function(newDrawer){},
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(onFire,delay){this.triggerTimeout=setTimeout(onFire,delay);},
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(contentElement,handleElement,bureau,options){
this.contentElement=contentElement;this.handle=handleElement;
this.bureau=bureau;var triggerEvent='click';
if(options!=null&&typeof(options)!='undefined'){
this.beforeOpen=options.beforeOpen;this.afterOpen=options.afterOpen;this.beforeClose=options.beforeClose;this.afterClose=options.afterClose;
if(typeof(options.triggerEvent)!='undefined'){triggerEvent=options.triggerEvent;}
if(typeof(options.triggerDelay)!='undefined'){this.triggerDelay=options.triggerDelay;}
if(typeof(options.transitionDuration)!='undefined'){this.transitionDuration=options.transitionDuration;}}
if(AC.Detector.isiPhone()){this.transitionDuration=0;triggerEvent='click';}
Element.addClassName(this.contentElement,'last');
var fireTrigger=function(evt){Event.stop(evt);
if(this.triggerDelay>0){var onFire=this.trigger.bind(this);bureau.scheduleTrigger(onFire,this.triggerDelay);}else{this.trigger();}}
Event.observe(this.handle,triggerEvent,fireTrigger.bind(this),false);
Event.observe(this.handle,'mouseout',bureau.clearTrigger.bind(bureau),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(newDrawer){Element.addClassName(newDrawer.contentElement,'last');Element.addClassName(newDrawer.handle,'last');
if(this.hasDrawers()){var lastDrawer=this.getLastDrawer();lastDrawer.setNextDrawer(newDrawer);newDrawer.setPreviousDrawer(lastDrawer);
}else{Element.addClassName(newDrawer.contentElement,'first');Element.addClassName(newDrawer.handle,'first');}
this.listenForEvent(newDrawer,'beforeOpen',false,function(evt){var drawer=evt.event_data.data;this.open(drawer);});
this.listenForEvent(newDrawer,'afterOpen',false,function(evt){var drawer=evt.event_data.data;this.acknowledgeOpened(drawer);});
this.listenForEvent(newDrawer,'beforeClose',false,function(evt){var drawer=evt.event_data.data;this.close(drawer);});
this.listenForEvent(newDrawer,'afterClose',false,function(evt){var drawer=evt.event_data.data;this.acknowledgeClosed(drawer);});
if(!Element.hasClassName(newDrawer.contentElement,'open')){newDrawer.initiateClose();}else{this.currentDrawer=newDrawer;}
this.drawers.push(newDrawer);},
open:function(drawer){if(this.isLocked){return;}this.isLocked=true;
if(Element.getStyle(this.container,'position')=='relative'){var dimensions=Element.getDimensions(this.container);Element.setStyle(this.container,{height:dimensions.height+"px"});
this.wedgeDrawersAfter(drawer);
var minHeight=Element.getStyle(drawer.contentElement,'min-height');
if(minHeight){Element.setStyle(drawer.contentElement,{'min-height':'0px',height:minHeight})}}
if(this.currentDrawer){this.currentDrawer.initiateClose();}drawer.open(minHeight);},acknowledgeOpened:function(drawer){
this.currentDrawer=drawer;
if(Element.getStyle(this.container,'position')=='relative'){
if(!AC.Detector.isIEStrict()){Element.setStyle(this.container,{height:"auto"});}
this.unwedgeDrawers();}
this.isLocked=false;},close:function(drawer){
if(Element.getStyle(this.container,'position')=='relative'){
var minHeight=Element.getStyle(drawer.contentElement,'min-height');
if(minHeight){Element.setStyle(drawer.contentElement,{height:minHeight,'min-height':'0px'});}}drawer.close(minHeight);},
acknowledgeClosed:function(drawer){if(drawer==this.currentDrawer){this.currentDrawer=null;}},
wedgeDrawersAfter:function(drawerBeingOpened){var wedgeDrawer=function(drawer,offset){Element.setStyle(drawer.handle,{position:'absolute',bottom:offset+'px'})}
var drawer=this.getLastDrawer();var offset=0;
while(drawer!=this.currentDrawer&&drawer!=drawerBeingOpened){
wedgeDrawer(drawer,offset);offset+=drawer.handle.getHeight();drawer=drawer.previousDrawer;}},
unwedgeDrawers:function(){for(var i=this.drawers.length-1;i>=0;i--){Element.setStyle(this.drawers[i].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(drawer){this.nextDrawer=drawer;
Element.removeClassName(this.contentElement,'last');Element.removeClassName(this.handle,'last');},
setPreviousDrawer:function(drawer){this.previousDrawer=drawer;},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(minHeight){this.isTransitioning=true;Element.addClassName(this.contentElement,'open');Element.addClassName(this.handle,'open');var afterFinish=function(){this.isOpen=true;
if(minHeight){Element.setStyle(this.contentElement,{'min-height':minHeight});
if(!AC.Detector.isIEStrict()){Element.setStyle(this.contentElement,{'height':'auto'});}}
this.dispatchEvent('afterOpen',this);this.isTransitioning=false;}.bind(this);if(AC.Detector.isiPhone()){this.contentElement.show();afterFinish();
}else{new Effect.BlindDown(this.contentElement,{duration:this.transitionDuration,afterFinish:afterFinish});}},initiateClose:function(force){
if(this.isTransitioning||!this.isOpen){return;}this.dispatchEvent('beforeClose',this);},
close:function(minHeight){this.isTransitioning=true;var afterFinish=function(){
this.isOpen=false;Element.removeClassName(this.contentElement,'open');Element.removeClassName(this.handle,'open');
if(minHeight){Element.setStyle(this.contentElement,{'min-height':minHeight});
if(!AC.Detector.isIEStrict()){Element.setStyle(this.contentElement,{'height':'auto'});}}
this.dispatchEvent('afterClose',this);this.isTransitioning=false;
}.bind(this);
if(AC.Detector.isiPhone()){this.contentElement.hide();afterFinish();
}else{
new Effect.BlindUp(this.contentElement,{duration:this.transitionDuration,afterFinish:afterFinish});}}});
AC.ShingleBureau=Class.create();Object.extend(Object.extend(AC.ShingleBureau.prototype,AC.Bureau.prototype),{drawerDuration:0.5,addDrawer:function(newDrawer){
if(this.hasDrawers()){var lastDrawer=this.getLastDrawer();lastDrawer.setNextDrawer(newDrawer);newDrawer.setPreviousDrawer(lastDrawer);
newDrawer.closedOffset=lastDrawer.closedOffset+lastDrawer.getHandleHeight()-10;}else{Element.addClassName(newDrawer.contentElement,'first');
newDrawer.closedOffset=0-newDrawer.getHeight()+newDrawer.getHandleHeight()-10;newDrawer.indicateVisible();}
this.drawers.push(newDrawer);},getWidth:function(){return Element.getWidth(this.container);},getHeight:function(){return Element.getHeight(this.container);},
moveDrawer:function(drawer,x,y){new Effect.Move(drawer,{x:x,y:y,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(force){if(this.isOpen&&!force){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(force){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(drawer){this.previousDrawer=drawer;
this.indicateObscured();this.openedOffset=this.previousDrawer.openedOffset+this.previousDrawer.getHandleHeight()-10;
Element.setStyle(this.contentElement,{top:this.openedOffset+"px"});},
setNextDrawer:function(drawer){this.nextDrawer=drawer;Element.removeClassName(this.contentElement,'last');
if(this.previousDrawer!=null){this.previousDrawer.setNextDrawer(this);}
zIndex=parseInt(Element.getStyle(this.contentElement,'zIndex'));
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(newDrawer){this.drawers.push(newDrawer);newDrawer.handle.addClassName('obscured');Element.hide(newDrawer.contentElement);},
openingDrawer:function(drawer){if(this.currentDrawer!=null){this.currentDrawer.close();}
this.currentDrawer=drawer;}});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 afterTransition=function(){Element.show(this.contentElement);}.bind(this);
if(typeof(this.afterOpen)=='function'){this.bureau.locked=true;afterTransition=this.afterOpen.bind(this);}
this.bureau.openingDrawer(this);
if(typeof(this.beforeOpen)=='function'){this.beforeOpen();}this.isOpen=true;Element.removeClassName(this.handle,'obscured');
new Effect.Appear(this.contentElement,{afterFinish:afterTransition,duration:this.transitionDuration,queue:{scope:'sectionalscope'}});},
close:function(){if(typeof(this.beforeClose)=='function'){this.beforeClose();}this.isOpen=false;Element.addClassName(this.handle,'obscured');
var afterTransition=function(){if(typeof(this.afterClose)=='function'){this.afterClose();}}.bind(this)
new Effect.Fade(this.contentElement,{afterFinish:afterTransition,duration:this.transitionDuration,queue:{scope:'sectionalscope'}});},
reportFinishedOpening:function(){this.bureau.locked=false;}});