﻿/**
 *	@name			flash.js
 *	@type			check
 *	@facility		FLASH出力及びプラグインのチェック
 *	@created date	2003/11/06
 *	@author			so
 *	@version		1.1
 *	@copyright (c) 2003 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を追加
 **/

var nUserAgent	= navigator.userAgent;
var nAppVersion	= navigator.appVersion;
var nAppName	= navigator.appName;
var nMimeTypes	= navigator.mimeTypes;

var IE = /*@cc_on!@*/false;
var OPERA = (nUserAgent.indexOf("Opera", 0) != -1);
var FIREFOX = (nUserAgent.indexOf("Firefox", 0) != -1);
var SAFARI = (nUserAgent.indexOf("Safari", 0) != -1);
var WIN = (nUserAgent.indexOf("Win", 0) != -1);
var MAC = (nUserAgent.indexOf("Mac", 0) != -1);

var flashPlugin;
var flashVer;

var fId;
var fWidth;
var fHeight;
var fFile;
var fRequiredVer;		// [4/5/6]
var fBgcolor;
var fLanguage;			// [0(JP)/1(EN)]
var fMenu;
var fQuality;			// [LOW/MEDIUM/HIGH/AUTOHIGH/AUTOLOW]
var fWmode				// [window/opaque/transparent]
var fAllowScriptAccess	// [always/never]
var fScale				// [showall/noborder/exactfit/noscale]
var fSalign				// [L/R/T/B/TL/TR/BL/BR]
var fBase				// [./(BASE URL)]
var fVars;
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
)


function hasPlugin(flashReqVer)
{
	fRequiredVer = 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;
	}

	return true;
}

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

	if(!fId)			fId = "default";
	if(!fBgcolor)		fBgcolor = "#ffffff";
	if(!fLanguage)		fLanguage = 1;
	if(!fQuality)		fQuality = "AUTOHIGH";
	if(!fMenu)			fMenu = "false";
}

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(fBase) rtnStr += '<param name="base" value="' + fBase + '">';
	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(fVars) rtnStr += ' FlashVars="' + fVars + '"';
	if(fWmode) rtnStr += ' wmode="' + fWmode + '"';
	if(fAllowScriptAccess) rtnStr += ' allowscriptaccess="' + fAllowScriptAccess + '"';

	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 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;	// <-- とりあえず、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)
			{
				// ver 6.0.22-29はおちるので強制的に値を挿入
				if(num == 6)
				{
					x = "WIN 6,0,21,0";
				}
			}
			num--;
			if(x || num < 0) break;
		}
		tmpVer = x.replace(/^WIN /,'').replace(/,[0-9]+$/,'').replace(/,/g,'.');
	}

	return tmpVer;
}

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

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);
}

