
/**	swfオブジェクトにアクセスする。
例:	$.getSwfObject('swf_id').funcName(..);
*/
jQuery.getSwfObject = function ( id ) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
//↓↓IE9β環境において、window[id]で取得できた[object]が[object HTMLObjectcollection]に変更されたことでflashとの通信ができない問題に対する対処
//[object HTMLObjectcollection]の[0]に入っている[object HTMLObjectElement]を渡すように修正
		if ($.browser.msie && $.browser.version > 8) {
			return window[id][0];
		} else {
			return window[id];
		}
    }
    else {
        return document[id];
    }
}

/**	swfオブジェクト内に定義された関数を呼び出す。
	読み込み直後に関数呼び出しが失敗することに備えて呼び出し失敗した場合は一定時間間隔でリトライする。

@param	swf_id				swfのid値を指定する。
@param	requestFuncName		呼び出し対象のswf内function名を指定する。
@param	funcCallSwfFunc		swf内function呼び出しを実装するfunction。呼び出し準備が整った後に呼び出される。
@param	funcFail			呼び出し失敗したときに呼び出される。

例:	$.callSwfFunction(
		'swf_id', 
		'my_function', 
		function(swf) {
			swf.my_function(....);
		},
		function() {
			logger.error( 'error!' );
		}
	);
*/
jQuery.callSwfFunction = function( swf_id, requestFuncName, funcCallSwfFunc, funcFail )
{
	var	retryCount = 0, retryCountLimit=5, firstMSec = 2000, stepMSec = 1000;

	var	proc = function(){
		var	swf = jQuery.getSwfObject( swf_id );
		var	success = false;
		var	isTypeFunction = typeof(swf[requestFuncName]);
		
		if( swf && typeof(swf[requestFuncName])=='function' ) {
			//呼び出すべき関数が定義されているので実処理を呼び出す
			var	ret = funcCallSwfFunc(swf);
			switch( typeof(ret) ) {
				case	'boolean':
					success = ret;
					break;
				case	'undefined':
					success = true;
					break;
				default:
					break;
			}
		}

		if( !success ) {
			//alert("!success");
			//関数が定義されていない
			//←swf読み込み中
			//→一定時間待ってリトライ
			if( retryCount++<retryCountLimit ) {
				setTimeout( proc, firstMSec+(Math.random() * retryCount*stepMSec) );
			}else{
				if( typeof(funcFail)=='function' ) {
					funcFail();
				}else{
					logger.error("retry over! callSwfFunction(swf_id:"+swf_id+", requestFuncName:"+requestFuncName+")");
				}
			}
		}
	};
	setTimeout( proc, 0 );
	//↑↑mac&safari 環境においてtypeof(swf[requestFuncName])=='function')の結果がtrueにも関わらず実際にはfunctionを実行できない問題に対処するため
	//	onreadyの直後にproc関数を呼ぶことで対応している 
	//追記 IE9βでも同様の問題を確認 tomioka 110226
}


