// ============================================================
// アニメ（クロスフェード）
// トップ
// 
// %update / 2012.01.10
// 
// %use / indispensableFunc.js
// %use / jquery
// %use / jquery.easing
// ============================================================

// 名前の衝突をふせぐために名前空間を用意する
var ANIM_CRSFD;
if( ( ANIM_CRSFD && ( (typeof ANIM_CRSFD !== 'object') || !('isNamespace' in ANIM_CRSFD) ) ) || (ANIM_CRSFD === false) || (ANIM_CRSFD === 0) ) {
	throw new Error('"ANIM_CRSFD" already exists! You cannot define "ANIM_CRSFD".');
} else if( ANIM_CRSFD && ('isNamespace' in ANIM_CRSFD) ) {
	throw new Error('Namespace "ANIM_CRSFD" already exists!');
}
ANIM_CRSFD = {};  // 名前空間用のオブジェ生成
ANIM_CRSFD.toString = function() { return '[object ANIM_CRSFD(is Namespace)]'; };
ANIM_CRSFD.isNamespace = true;

// ------------------
// 【定数・変数】
// ------------------
ANIM_CRSFD.clsHide = 'hide';  // 非表示class名

ANIM_CRSFD.selcetorArea = '#AnimFade01';  // エリアのCSSセレクタ
ANIM_CRSFD.selcetorLi = '#AnimFade01 .c_animFdCanvas li';  // <li>のCSSセレクタ

ANIM_CRSFD.frm = 0;  // フレーム
ANIM_CRSFD.frmStart = 1;
ANIM_CRSFD.frmEnd = 0;  // 最終フレーム（後で計算）
ANIM_CRSFD.frmLen = 0;  // フレームの長さ（後で計算）

ANIM_CRSFD.fade_flg = false;  // スライド中か？（true | false）（default:false）

ANIM_CRSFD.itemWidth = 757;  // アイテムの幅

ANIM_CRSFD.opacityStart = 0;  // opacity
ANIM_CRSFD.opacityEnd = 1;

ANIM_CRSFD.durationSecFade = 1.5;  // フェードの時間（sec）
ANIM_CRSFD.durationSecFreeze = 5;  // 1枚の静止時間（sec）
ANIM_CRSFD.easingFade = 'easeInOutCubic';  // フェードのeasing

ANIM_CRSFD.loop_flg = true;  // ループするか？（true | false）
ANIM_CRSFD.initAnim_flg = false;  // 初期アニメを再生するか？（true | false）

ANIM_CRSFD.timerIdFreeze = null;  // タイマーID（静止用）


// ------------------
// 【関数】
// ------------------
// ■初期化
// %param / なし
// ------
// %return / なし
/* HTML ex：
======
<!-- AnimFade01 ====== -->
<div id="AnimFade01">
<div class="c_animFdCanvas">
<ul>
<li class="hide"><img src="/_MK1/chk/rotvis_top/img/ind_tit1_01.jpg" alt="" /></li>
<li class="hide"><img src="/_MK1/chk/rotvis_top/img/ind_tit1_02.jpg" alt="" /></li>
<li class="hide"><img src="/_MK1/chk/rotvis_top/img/ind_tit1_03.jpg" alt="" /></li>
</ul>
</div><!-- /c_animFdCanvas -->
</div>
<!-- /AnimFade01 ====== -->
======
*/
ANIM_CRSFD.init = function() {

	var li_jq = null;  // <li>

	// <li>の設定
	li_jq = $(ANIM_CRSFD.selcetorLi);

	li_jq.css( {
	opacity : ANIM_CRSFD.opacityStart//,
	} );

	// フレーム設定
	ANIM_CRSFD.frmEnd = li_jq.size();  // 最終フレーム
	ANIM_CRSFD.frmLen = ANIM_CRSFD.frmEnd - ANIM_CRSFD.frmStart +1;  // フレームの長さ

	li_jq.removeClass(ANIM_CRSFD.clsHide);  // 表示
};


// ■再生
// %param / frm:Number / フレーム
// ------
// %return / なし
ANIM_CRSFD.play = function(frm) {

	var li_jq = null;  // <li>
	var liCr_jq = null;  // カレント<li>

	// 静止用タイマークリア
	if(ANIM_CRSFD.timerIdFreeze !== null) {
		clearTimeout(ANIM_CRSFD.timerIdFreeze);
	}

	// <li>の設定
	li_jq = $(ANIM_CRSFD.selcetorLi);

	// カレント<li>の設定
	liCr_jq = li_jq.eq(0);

	// フレームの設定
	ANIM_CRSFD.frm = frm;

	if(! ANIM_CRSFD.fade_flg) {  // フェード中でないとき

		// フェード中にする
		ANIM_CRSFD.fade_flg = true;

		if(ANIM_CRSFD.initAnim_flg) {  // 初期アニメを再生するとき

			// 初期アニメの再生
			ANIM_CRSFD.playInitAnim();

		} else {  // 初期アニメを再生しないとき

			liCr_jq.css( {
			opacity : ANIM_CRSFD.opacityEnd//,
			} );

			// 先頭を最後尾（最前列）へ移動
			li_jq.parent().append(liCr_jq);

			// フレームの設定
			ANIM_CRSFD.frm++;  // インクリメント

			// 静止用タイマー
			// 再生
			ANIM_CRSFD.timerIdFreeze = setTimeout( 'ANIM_CRSFD.play(' + ANIM_CRSFD.frm + ')', ANIM_CRSFD.durationSecFreeze *1000 );

		}

	} else {  // フェード中のとき

		// アイテムをフェード
		ANIM_CRSFD.fadeItem();

	}

};


// ■初期アニメの再生
// %param / なし
// ------
// %return / なし
ANIM_CRSFD.playInitAnim = function() {

	// アイテムをフェード
	ANIM_CRSFD.fadeItem();

};


// ■アイテムをフェード
// %param / なし
// ------
// %return / なし
ANIM_CRSFD.fadeItem = function() {

	var li_jq = null;  // <li>
	var liCr_jq = null;  // カレント<li>

	// <li>の設定
	li_jq = $(ANIM_CRSFD.selcetorLi);

	// カレント<li>の設定
	liCr_jq = li_jq.eq(0);

	liCr_jq.css( {
	opacity : ANIM_CRSFD.opacityStart//,
	} );

	// 先頭を最後尾（最前列）へ移動
	li_jq.parent().append(liCr_jq);

	liCr_jq.stop(true, true).animate(
		{
		opacity : ANIM_CRSFD.opacityEnd//,
		},  // param
		{
		duration : ANIM_CRSFD.durationSecFade *1000,
		easing: ANIM_CRSFD.easingFade,
		step : function(step) {

		},  // step :
		complete : function() {

			if(ANIM_CRSFD.frm < ANIM_CRSFD.frmEnd) {  // 最終フレームの一つ前までのとき

				ANIM_CRSFD.frm++;  // インクリメント

			} else {  // 最終フレーム、またはフレーム範囲外のとき

				if(! ANIM_CRSFD.loop_flg) {  // ループしないとき
					return;
				}

				ANIM_CRSFD.frm = ANIM_CRSFD.frmStart;  // リスタート
			}

			// 静止用タイマー
			// 再生
			ANIM_CRSFD.timerIdFreeze = setTimeout( 'ANIM_CRSFD.play(' + ANIM_CRSFD.frm + ')', ANIM_CRSFD.durationSecFreeze *1000 );

		}//,  // complete :
		}  // option
		);  // animate()

};


// ------------------------------------------------------------
// ▼処理
// ------------------------------------------------------------
$(document).ready( function() {

	// ==============================
	// ■アニメ
	( function() {

		// 初期化
		ANIM_CRSFD.init();
		
		// 再生
		ANIM_CRSFD.play(ANIM_CRSFD.frmStart);
		
	} )();
	// /==============================

} );  // ready()

