﻿/**
 *	@name			swfobj.js
 *	@facility		FLASH出力及びプラグインのチェック
 *	@created date	2003/11/06
 *	@copyright (c) 2003-2008 COCONOE inc.
 *
 *	[更新履歴]
 *	@v1.1		:	2003/11/06	:	execScriptにて、VBScriptを実行できるように修正
 *	@v1.2		:	2004/12/07	:	wmodeを引数に追加（透過設定）
 *	@v1.3		:	2004/05/13	:	allowScriptAccess, scale, salign, baseを引数に追加
 *	@v1.4		:	2006/10/30	:	flashVarsを引数に追加
 *	@v1.5		:	2008/04/04	:	embedのwmodeを追加
 *	@v1.6		:	2008/05/01	:	・common.jsと一まとめに
 *									・divのidと被ると、ExternalInterfaceでJSエラーが出る件の修正
 *									・バージョンの取得方法を変更
 *	@v1.7		:	2008/05/08	:	htmlDivIdのバグ修正
 *	@v1.8		:	2008/07/25	:	instanceof、for(...in...)を削除…。※古いブラウザでは使えませんでした。
 **/

var nUserAgent = navigator.userAgent;
var nMimeTypes = navigator.mimeTypes;

var IE = /*@cc_on!@*/false;
var WIN = (nUserAgent.indexOf("Win", 0) != -1);

var flashPlugin			= 0;
var flashVer			= "0.0.0";

var fId					= "defaultSwf";
var fWidth				= 0;
var fHeight				= 0;
var fFile				= "";
var fBgcolor			= "#ffffff";
var fMenu				= false;
var fQuality			= "AUTOHIGH";
var fWmode				= "";
var fAllowScriptAccess	= "";
var fScale				= "noscale";
var fSalign				= "";
var fPluginspages = new Array(
	"http://www.macromedia.com/jp/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash",	// JPN PLUGIN'S PAGES
	"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"		// ENG PLUGIN'S PAGES
)


/**
 * フラッシュの表示用タグを記述する
 *
 * @param	flashReqVer			FlashPlayerの必要バージョン (ex. 9, "9.0.28")
 * @param	flashDivId			記述するDIVのID (ex. <div id="hoge">...)
 * @param	htmlDivId			代わりに消去するDIVのID ※配列で複数指定可能です (ex. "hogehtml", ["hogehtml01", "hogehtml02"])
 * @param	args				挿入するパラメータ(以下 パラメータ)
 *
 *			id					FlashのID (ex. "flashdemo")
 *			width				横幅 (ex. 800)
 *			height				高さ (ex. 600)
 *			file				swfファイルのパス (ex. "./swf/demo.swf")
 *			bgcolor				背景色 (ex. "#0f0f0f")
 *			menu				メニュー表示の可否 (true/false)
 *			quality				表示クォリティ (LOW/MEDIUM/HIGH/AUTOHIGH/AUTOLOW)
 *			wmode				表示モード (window/opaque/transparent)
 *			allowscriptaccess	スクリプト実行の可否 (always/never)
 *			scale				スケール (showall/noborder/exactfit/noscale)
 *			salign				配置位置 (L/R/T/B/TL/TR/BL/BR)
 *			vars				パラメータ (ex. arg01=hoge&arg02=hoge)
 *
 * @usage
 *			var flashArgs				= new Object();
 *			flashArgs.id				= "hogeexternal";
 *			flashArgs.width				= "250";
 *			flashArgs.height			= "700";
 *			flashArgs.file				= "./hoge.swf";
 *			flashArgs.bgcolor			= "#ffffff";
 *			flashArgs.quality			= "MEDIUM";
 *			flashArgs.menu				= false;
 *			flashArgs.scale				= "noscale";
 *			flashArgs.salign			= "";
 *			flashArgs.wmode				= "transparent";
 *			
 *			createFlashArea("9.0.28", "flashmenu", "htmlmenu", flashArgs);
 */

function createFlashArea(flashReqVer, flashDivId, htmlDivId, args)
{
	if(hasPlugin(flashReqVer))
	{
		// 消すHTMLのID(配列でも可)
		if(htmlDivId)
		{
			//if(htmlDivId instanceof Array)
			if(typeof htmlDivId == "Array")
			{
				for(var i=0; i<htmlDivId.length; i++)
				{
					hideHtmlArea(htmlDivId[i]);
				}
			}
			else
			{
				hideHtmlArea(htmlDivId);
			}
		}
		
		document.open();
		with(document)
		{
			write('<div id="' + flashDivId + '">');
			write(getFlashTag(args));
			write('</div>');
		}
		document.close();
	}
}

function hasPlugin(flashReqVer)
{
	flashPlugin = getFlashPlugin();
	flashVer = getFlashVer(flashPlugin);

	var tmpCurVer = (getMajorVer(flashVer) * 1000 * 1000) + (getMinorVer(flashVer) * 1000) + getRevision(flashVer);
	var tmpReqVer = (getMajorVer(flashReqVer) * 1000 * 1000) + (getMinorVer(flashReqVer) * 1000) + getRevision(flashReqVer);

	if(tmpCurVer < tmpReqVer)
	{
		return false;
	}

	//alert("ver. " + flashVer);

	return true;
}

function hideHtmlArea(id)
{
	if(document.getElementById(id))
	{
		document.getElementById(id).style.display = "none";
		document.getElementById(id).style.visibility = "hidden";
	}
}

function setAuguments(args)
{
	fId					= args.id;
	fWidth				= args.width;
	fHeight				= args.height;
	fFile				= args.file;
	fBgcolor			= args.bgcolor;
	fMenu				= args.menu;
	fQuality			= args.quality;
	fWmode				= args.wmode;
	fAllowScriptAccess	= args.allowscriptaccess;
	fScale				= args.scale;
	fSalign				= args.salign;
	fVars				= args.vars;
}

function getFlashTag(args)
{
	setAuguments(args);
	
	var rtnStr =

	'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+
	' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"'+
	' id="' + fId + '"'+
	' width="' + fWidth + '"'+
	' height="' + fHeight + '"'+
	'>'+
	'<param name="movie" value="' + fFile + '" />'+
	'<param name="quality" value="' + fQuality + '" />'+
	'<param name="bgcolor" value="' + fBgcolor + '" />'+
	'<param name="menu" value="' + fMenu + '" />';

	if(fWmode) rtnStr += '<param name="wmode" value="' + fWmode + '" />';
	if(fAllowScriptAccess) rtnStr += '<param name="allowscriptaccess" value="' + fAllowScriptAccess + '" />';
	if(fScale) rtnStr += '<param name="scale" value="' + fScale + '" />';
	if(fSalign) rtnStr += '<param name="salign" value="' + fSalign + '" />';
	if(fVars) rtnStr += '<param name="FlashVars" value="' + fVars + '" />';

	rtnStr +=
	'<embed src="' + fFile + '"'+
	' name="' + fId + '"'+
	' align="middle"'+
	' quality="' + fQuality + '"'+
	' bgcolor="' + fBgcolor + '"'+
	' width="' + fWidth + '"'+
	' height="' + fHeight + '"'+
	' menu="' + fMenu + '"';

	if(fWmode) rtnStr += ' wmode="' + fWmode + '"';
	if(fAllowScriptAccess) rtnStr += ' allowscriptaccess="' + fAllowScriptAccess + '"';
	if(fScale) rtnStr += ' scale="' + fScale + '"';
	if(fSalign) rtnStr += ' salign="' + fSalign + '"';
	if(fVars) rtnStr += ' FlashVars="' + fVars + '"';

	rtnStr +=
	' type="application/x-shockwave-flash"' +
	' pluginspage="' + fPluginspages[isJpn()] + '"' +
	'>'+
	'</embed>'+
	'</object>';

	return rtnStr;
}

function isJpn()
{
	if(!navigator.userLanguage) return 1;
	if(navigator.language && (navigator.language.indexOf("ja") != -1 || navigator.userLanguage.indexOf("ja") != -1)) return 0;
	return 1;
}

function getMajorVer(ver){ return getVerDetail(ver, 0); }
function getMinorVer(ver){ return getVerDetail(ver, 1); }
function getRevision(ver){ return getVerDetail(ver, 2); }

function getVerDetail(ver, len)
{
	ver = ver + "";
	var tmpVer = 0;
	if(ver.indexOf(".") != -1)
	{
		var sepVer = ver.split(".");
		if(sepVer.length > len)
		{
			tmpVer = sepVer[len];
		}
	}
	return parseInt(tmpVer);
}

function getFlashPlugin()
{
	return (nMimeTypes && nMimeTypes["application/x-shockwave-flash"]) ? nMimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
}

function getFlashVer(plugin)
{
	var tmpVer = "0.0.0";
	
	if(plugin && plugin.description)
	{
		tmpVer = plugin.description.replace(/^[A-Za-z\s]+/, '').replace(/(\s+r|\s+b[0-9]+)/, ".");
	}
	else if(IE && WIN)
	{
		var num = 15;	// <-- とりあえず、ver.15から下がっていく
		var x = '';
		var axo;

		while(true)
		{
			try
			{
				var ssf = "ShockwaveFlash.ShockwaveFlash";
				if(num != 0) ssf += "." + num;
				
				axo = new ActiveXObject(ssf);
				x = axo.GetVariable("$version");
			}
			catch(e)
			{
			}
			num--;
			if(x || num < 0) break;
		}
		if(x != 0) tmpVer = x.replace(/^WIN /,'').replace(/,[0-9]+\$/,'').replace(/,/g,'.');
	}

	return tmpVer;
}

