window.addEvent(
	 'domready'
	, function( ) {
		
		// Slide show
		if( isset( 'slides' ) ) {
			new Slides( $( 'Splash' ) )
				.load( slides, 'asset/image/home/_slides/' )
				.start( );
			
			$( 'Splash' ).getFirst(  ).dispose( );
			$( 'Splash' ).addClass( 'loaded' );
		}
		
		// Twitter feed
		if( $( 'twtr-profile-widget' ) ) {
			new TWTR.Widget( {
				  version: 2
				, id: 'twtr-profile-widget'
				, type: 'profile'
				, rpp: 4
				, interval: 6000
				, width: 224
				, height: 235
				, theme: {
					  shell: {
						  background: '#dddddd'
						, color: '#424242'
					  }
					, tweets: {
						  background: '#ffffff'
						, color: '#424242'
						, links: '#225786'
					  }
				  }
				, features: {
					  scrollbar: false
					, loop: true
					, live: true
					, hashtags: true
					, timestamp: false
					, avatars: false
					, behavior: 'default'
				  }
			} )
			.render( )
			.setUser( 'portlandwebwork' )
			.start( );
		}
	  }
);

var Slides = new Class( {
	
	  slides: []
	, timer: null
	, container: null
	, lastBtn: null
	
	, initialize: function( container ) {
		this.container = container;
		this.slides = new CycleIterator( );
	  }
	
	, addSlide: function( slide ) {
		this.slides.add( slide );
	  }
	
	, load: function( files, path ) {
		var slides = new Element( 'div', { id: 'Slides' } );
		var nav = new Element( 'ul', { 'class': 'nav flat' } );
		
		files.each( function( file, i ) {
			var btn = new Element( 'li', { html: '&bull;' } );
			var slide = new Slide( );
			
			slide.asset.addEvent(
				 'load'
				, function( ) {
					btn.fade( 'in' );
					btn.addClass( 'loaded' );
					btn.addEvent(
						 'click'
						, function( e ) {
							this.click.attempt( [ e, slides, btn, slide ], this );
						  }.bind( this )
					);
				  }.bind( this )
			);
			
			slide.load( path+file );
			slide.btn = btn;
			
			this.addSlide( slide );
			
			nav.grab( btn );
			slides.grab( slide.asset );
		}.bind( this ) );
		
		this.container.grab( slides );
		this.container.grab( nav );
		
		this.lastBtn = nav.getFirst( );
		this.lastBtn.addClass( 'current' );
		
		if( !isIE( ) ) {
			nav.getChildren( ).fade( .25 );
		}
		
		return this;
	  }
	
	, start: function( ) {
		this.timer = this.jump.periodical( 8000, this );
	  }
	
	, pause: function( ) {
		clearInterval( this.timer );
	  }
	
	, jump: function( ) {
		this.slides.next( ).btn.fireEvent( 'click' );
	  }
	
	, click: function( e, slides, btn, slide ) {
		var isClick = e && e.type === 'click';
		
		this.lastBtn.removeClass( 'current' );
		btn.addClass( 'current' );
		this.lastBtn = btn;
		
		var transition, duration;
		
		if( isClick ) {
			this.pause( );
			transition = 'expo:in:out';
			duration = 'normal';
		}
		else {
			transition = 'back:in:out';
			duration = 'long';
		}
		
		slides.set( 'tween', { transition: transition, duration: duration } );
		
		this.slides.cursor = this.slides.keyOf( slide );
		slides.tween(
			 'left'
			, -slide.asset.getSize( ).x * this.slides.cursor
		);
		
		if( isClick ) {
			this.start( );
		}
	  }
	
} );

var Slide = new Class( {
	  asset: null
	, src: ''
	
	, initialize: function( ) {
		this.asset = new Image( );
		$( this.asset ).addClass( 'slide' );
	  }
	
	, load: function( src ) {
		this.src = auri( src );
		this.asset.src = this.src;
	  }
	
	/**
	 *	@browser Firefox-specific feature
	 */
/*	,  __noSuchMethod__: function( method, args ) {
		return this.asset[ method ].apply( this.asset, args );
	  }*/
} );

