/* #####################################################################################

	NAME:		animetion.js
	
		NOTES:	HTMLオブジェクトのアニメーション処理を行う
				
	
	
	AUTHOR:		Yoshikatsu Iyo.		2009/08/28
									Copyright, PorkHamlet Co.Ltd. All rights reserved.

##################################################################################### */


/*~~< variable(s) >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~< object(s) >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
function Anime(){
}


/*~~< program(s) >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

/* =========================================================================**
	Anime.getOpacity
		notes:	オブジェクトの不透明度を取得
				
*========================================================================== */
Anime.getOpacity = function(	elm		// HTMLオブジェクト
){
	
	var		ret		=	0;
	
	if( navigator.userAgent.indexOf('Safari') != -1 || navigator.userAgent.indexOf('KHTML ') != -1 )
	{
		ret		=	parseFloat( elm.style.opacity );
	}
	else if( document.all )
	{
//		alert( elm.style.filter );
		if( "" == elm.style.filter )
		{
			ret		=	parseFloat( elm.style.opacity );
			ret		/=	100;
		}
		else
		{
			var		str			=	elm.style.filter;
//			var		str			=	elm.style.-ms-filter;
			var		p			=	/alpha.opacity=[0-9]+\.*[0-9]*./;
			var		result		=	str.match(p);
			
			var		str2		=	result[0];
			var		p2			=	/[0-9]+\.*[0-9]*/;
			var		result2		=	str2.match(p2);
			
			ret		=	parseFloat( result2[0] );
			ret		/=	100;
		}
	}
	else if( navigator.userAgent.indexOf('Gecko') != -1 )
	{
		ret		=	parseFloat( elm.style.opacity );
	}
	return ret;
}


/* =========================================================================**
	Anime.setOpacity
		notes:	オブジェクトの不透明度を設定
				
*========================================================================== */
Anime.setOpacity = function(	elm,		// HTMLオブジェクト
								opacity		// 不透明度
){

	if( navigator.userAgent.indexOf('Safari') != -1 || navigator.userAgent.indexOf('KHTML ') != -1 )
	{
		elm.style.opacity	=	opacity;
	}
	else if( document.all )
	{
		opacity				=	Math.floor( opacity * 100 );
		elm.style.filter	=	'alpha(opacity=' + opacity + ')';
//		elm.style.-ms-filter	=	'"alpha(opacity=' + opacity + ')"';
//		elm.style.filter.opacity	=	"alpha(opacity=" + opacity + ")";
//		elm.filters.alpha.Opacity	=	opacity;
	}
	else if( navigator.userAgent.indexOf('Gecko') != -1 )
	{
		elm.style.MozOpacity	=	opacity;
	}
}


/* =========================================================================**
	Anime.fadeIn
		notes:	オブジェクトをフェードイン
				
*========================================================================== */
Anime.fadeIn = function(	elm,		// HTMLオブジェクト
							max,		// 最終不透明度
							callback	// フェードイン完了時のコールバック関数
){

	if( !max )
	{
		var		max			=	1;
	}
	if( !callback )
	{
		var		callback	=	null;
	}
	
	var		step		=	0.2;
	var		time		=	30;
	var		opacity		=	Anime.getOpacity(elm);
	
	opacity			+=	step;
	
	if( opacity > max )
	{	
		opacity		=	max;
	}
	
	Anime.setOpacity( elm, opacity );
	
	if( max > opacity )
	{
		setTimeout(	function(){
						Anime.fadeIn( elm, max, callback );
		},time);
	}
	else if( null != callback )
	{
		callback();
	}
}


/* =========================================================================**
	Anime.slideImages
		notes:	オブジェクト複数をまとめてスライド
				
*========================================================================== */
Anime.slideImages = function(	elms,			// HTMLオブジェクトの配列
								x_distance,		// 残スライドピクセル数
								obj,			// ???
								callback		// スライド完了時のコールバック関数
){
	if( !callback )
	{
		var		callback	=	null;
	}
	
	var		x_step		=	Math.floor( x_distance * 30 / 100  );
	var		time		=	30;
	
			if( 3 > Math.abs(x_step) )
			{
				if( 0 < x_distance )		x_step	=	3;
				else if( 0 > x_distance )	x_step	=	-3;
			}
			
			if( Math.abs(x_distance) < Math.abs(x_step) )
			{
				x_step	=	x_distance;
			}
			
			
			for( var cnt = 0 ; cnt < elms.length ; cnt++ )
			{
				var		elm		=	elms[ cnt ];
				var		x_pos	=	parseInt( elm.offsetLeft );
				
				var		new_x_pos	=	x_pos + x_step;
						
				elm.style.left	=	new_x_pos + "px";
			}
			
	if( x_step != x_distance )
	{
		x_distance	-=	x_step;
		obj.animeID		=	setTimeout(	function(){
						Anime.slideImages( elms, x_distance, obj, callback );
		},time);
	}
	else if( null != callback )
	{
		obj.animeID		=	"undefined";
		callback();
	}
}












