/*
 * background.js
 *
 * Author: Kenji Morisaki
 * Url: http://decremented.net
 *
 */

(function($){
	
	var isIE = $.browser.msie && !$.support.opacity;
	var isIE6 = isIE && $.browser.version < 7;
	
	
	$.fn.background = function( options )
	{
		var elements = this;
		
		var w = 0;
		var h = 0;
		var imgW = 0;
		var imgH = 0;
		var targetW = 0;
		var targetH = 0;
		var scale = 0;
		var cnt = 0;
		
		var intervalId;
		
		var defaults = {
			list: null,
			minW: 1024,
			minH: 768,
			interval: 5000
		};
		
		var options = $.extend( {}, defaults, options );
		
		
		this.img = undefined;
		this.imgList = [];
		
		/**
		 * initialize
		 */
		this.init = function()
		{
			//$( 'body' ).fadeTo( 0, 0 );
			
			this.css({
				display: 'block',
				position: 'absolute',
				top: 0,
				height: 0,
				overflow: 'hidden',
				zIndex: -10
			});
			
			options.list.css( 'display', 'block' );
			var $img;
			$( 'img', options.list ).each( function()
			{
				$img = $( '<img />' );
				$img.attr({
					src: $( this ).attr( 'src' ),
					width: $( this ).attr( 'width' ),
					height: $( this ).attr( 'height' )
				})
				
				elements.imgList.push( $img )
			});
			options.list.css( 'display', 'none' );
			
			this.img = $( '<img />' );
			this.img
				.fadeTo( 0, 0 )
				.css( 'position', 'absolute' )
				.appendTo( this );
			
			// array shhule
			//Util.shuffle( elements.imgList );
			
			$( window ).bind( 'resize orientationchange', onResize );
			$( window ).bind( 'load', function( e )
			{
				// show body
				//$( 'body' ).animate( { opacity: 1 }, 600, 'easeInOutQuad' );
				
				// resize
				onResize( e );
				
				// set image
				setImage();
			});
		}
		
		/**
		 * set image
		 */
		function setImage()
		{
			var $obj = $( elements.imgList[ cnt ] );
			elements.img.attr( 'src', $obj.attr( 'src' ) );
			
			// size
			imgW = $obj.attr( 'width' );
			imgH = $obj.attr( 'height' );
			
			// resize
			$( window ).resize();
			
			// show
			showImage();
		}
		
		/**
		 * show image
		 */
		function showImage()
		{
			elements.img
				.show()
				.animate( { opacity: 1 }, 1000, 'easeInOutQuad', function()
				{
					if ( elements.imgList.length > 1 )
					{
						// count
						cnt = ++cnt % elements.imgList.length;
						
						// set timeout
						intervalId = setTimeout( hideImage, options.interval );
					}
				})
		}
		
		/**
		 * hide image
		 */
		function hideImage()
		{
			// clear timeout
			clearTimeout( intervalId );
			
			elements.img.animate( { opacity: 0 }, 1000, 'easeOutQuad', setImage );
		}
		
		/**
		 * resize
		 */
		function onResize( e )
		{
			w = Math.max( options.minW, $( window ).width() );
			h = Math.max( options.minH, $( window ).height() );
			
			if ( imgW && imgH ) scale = Math.max( w / imgW, h / imgH );
			targetW = Math.max( 1, imgW * scale );
			targetH = Math.max( 1, imgH * scale );
			
			$( '#container' ).height( h );
			
			elements.css({
				width		: w,
				height	: h
			});
			
			elements.img.css({
				width: targetW,
				height: targetH,
				left: ( w - targetW ) >> 1,
				top: ( h - targetH ) >> 1
			});
				
			if ( !isIE )
			{
				$( 'body' ).css({
					overflowX: ( $( window ).width() > options.minW ) ? 'hidden' : 'scroll',
					overflowY: ( $( window ).height() > options.minH ) ? 'hidden' : 'scroll'
				});
			}
		}
		
		
		elements.each( function()
		{
			elements.init();
		});
		
		
		return this;
	};

})(jQuery);
