window.addEvent(
	 'domready'
	, function( ) {
		if( isset( 'slides' ) ) {
			new Slides( $( 'Splash' ) )
				.load( slides, 'asset/image/home/_slides/' )
				.start( );
			
			$( 'Splash' ).getFirst(  ).dispose( );
			$( 'Splash' ).addClass( 'loaded' );
		}
	  }
);

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 ) {
							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( );
							}
						  }.bindWithEvent( 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( ) {
		$clear( this.timer );
	  }
	
	, jump: function( ) {
		this.slides.next( ).btn.fireEvent( 'click' );
	  }
	
} );

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 );
	  }*/
} );