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 ) {  
			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 {  
				event = document.createEvent( 'MouseEvents' )
				
				event.initMouseEvent( "click", can_bubble, cancelable,
				                      window, 0, 0, 0, 0, 0,
				                      false, false, false, false, 0, null );
			}
		}
		else {  
			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 );
	}
} );

var storiesSlider = null;
Event.observe(window, 'load', function() {
	var container = $('storiesslider');
	storiesSlider = new AC.SlidingBureau(container);
	var drawers = $$("#storiesslider .drawers>li");
	for (var i = 0; i < drawers.length; i++) {
		var handle = drawers[i].getElementsByClassName('drawer-handle')[0];
		var content = drawers[i].getElementsByClassName('drawer-content')[0];
		var drawer = new AC.SlidingDrawer(content, handle, storiesSlider, {
			triggerEvent: 'mouseover', triggerDelay: 120});
		storiesSlider.addDrawer(drawer);
	}
	setTimeout(freeDrawers(container), 1000);
});


var freeDrawers = function(container) {
	return function() {
		if (!AC.Detector.isIEStrict()) {
			container.setStyle({height: 'auto'});
		}
	};
};	


if(typeof (AC)==="undefined"){AC={};}AC.Detector={getAgent:function(){return navigator.userAgent.toLowerCase();},isMac:function(x){var M=x||this.getAgent();return !!M.match(/mac/i);},isWin:function(x){var M=x||this.getAgent();return !!M.match(/win/i);},isWin2k:function(x){var M=x||this.getAgent();return this.isWin(M)&&(M.match(/nt\s*5/i));},isWinVista:function(x){var M=x||this.getAgent();return this.isWin(M)&&(M.match(/nt\s*6/i));},isWebKit:function(x){var M=x||this.getAgent();return !!M.match(/AppleWebKit/i);},isOpera:function(x){var M=x||this.getAgent();return !!M.match(/opera/i);},isIE:function(x){var M=x||this.getAgent();return !!M.match(/msie/i);},isIEStrict:function(x){var M=x||this.getAgent();return M.match(/msie/i)&&!this.isOpera(M);},isFirefox:function(x){var M=x||this.getAgent();return !!M.match(/firefox/i);},isiPhone:function(x){var M=x||this.getAgent();return this.isMobile(M);},isMobile:function(x){var M=x||this.getAgent();return this.isWebKit(M)&&M.match(/Mobile/i);},isiTunesOK:function(x){var M=x||this.getAgent();return this.isMac(M)||this.isWin2k(M);}};

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}})


