/**
 * Flashのバージョンチェック＆埋め込み
 * Hiroshi Miyajima@author
 * 2007.05.25@date
 * 1.0@version
 **/

/**
 * ・Flahsオブジェクトタグを書き出す
 * ・引数
 * 配列で、埋め込みパラメータと値をセットで順番に記入する。
 * 中でも、contentsTagパラメータとoverVerパラメータは特別な意味を持つ。
 * contentsTag:省略不可 Flashに置き換えるタグのid名。String型とする。
 * overVer:省略可 バージョン判別させたい場合に、メジャーバージョンを記入する。Number型とする。
 * その他のパラメータは、Flashの基本的なObjectタグのパラメータとする。全てString型で記入のこと。
 * 特に指定しない場合、初期値が使用される。
 * 例：
 *   writeFlashContents(
 * 		"contentsTag", "content",
 * 		"overVer", 8,
 * 		"width", "913",
 * 		"height", "575",
 * 		"src", "./swf/global_top.swf",
 * 		"wmode", "opaque",
 * 		"bgcolor", "#ffffff",
 * 		"movie", "./swf/global_top.swf"
 * 		);
 * 
 * ・使用方法
 * 以下の様な、Objectタグが内包されるタグをHTML内に作成しておく。
 * バージョンエラー等でObjectタグが書き出されない事を考慮し、
 * エラー時の表示内容等にしておくと良い。
 * 
 * <div id="content">
 * このページをご覧いただくには、最新のFlashPlayerが必要です。
 * <a href="http://www.adobe.com/go/getflashplayer"><img src="get_flash_player.gif"></a>
 * </div>
 * 
 * 次に、writeFlashContents()を実行する
 * 
 * <script language="javascript">
 * 	writeFlashContents(
 * 		"contentsTag", "content",
 * 		"overVer", 8,
 * 		"width", "913",
 * 		"height", "575",
 * 		"src", "./swf/global_top.swf",
 * 		"wmode", "opaque",
 * 		"bgcolor", "#ffffff",
 * 		"movie", "./swf/global_top.swf"
 * 		);
 * </script>
 * 
 * まとめると、以下のような感じ。
 * 
 * <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
 * <head>
 * <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
 * <title>SAMPLE</title>
 * <script src="flash_check.js" language="javascript"></script>
 * <script src="../js/click.js" type="text/javascript"></script>
</head>
 * <body>
 * <div id="content">
 * このページをご覧いただくには、最新のFlashPlayerが必要です。
 * <a href="http://www.adobe.com/go/getflashplayer"><img src="get_flash_player.gif"></a>
 * </div>
 * <script language="javascript">
 * 	writeFlashContents(
 * 		"contentsTag", "content",
 * 		"overVer", 8,
 * 		"width", "913",
 * 		"height", "575",
 * 		"src", "./swf/global_top.swf",
 * 		"wmode", "opaque",
 * 		"bgcolor", "#ffffff",
 * 		"movie", "./swf/global_top.swf"
 * 		);
 * </script>
 * </body>
 * </html>
 **/
function writeFlashContents() {
	//引数取得
	var argAry = new Array();
	for (i = 0;i < arguments.length;i++) {
		argAry.push(arguments[i]);
	}
	
	//contentsTag引数があるか
	var coTagName = "";
	for (i = 0;i < argAry.length;i += 2) {
		if (argAry[i] == "contentsTag") {
			coTagName = argAry[i + 1];
			argAry.splice(i,2);
			break;
		}
	}
	if (coTagName == "") {
		alert("contentsTagの指定がありません。");
		return;
	}
	
	//必要FlahPlayerバージョンを取得
	var necVer = 0;
	for (i = 0;i < argAry.length;i += 2) {
		if (argAry[i] == "overVer") {
			necVer = argAry[i + 1];
			argAry.splice(i,2);
			break;
		}
	}
	//Flashのバージョンチェック
	var verFlg = checkFlashPlayer(necVer);
	//バージョンチェックによる切り分け
	if (!verFlg) {//バージョンエラーの場合
		//何もしない
		return;
	}
	
	//オブジェクトタグの初期値を定義
	var objAtts = new Object();
	var params = new Object();
	var embAtts = new Object();
	
	objAtts.classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";
	objAtts.codebase = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0";
	objAtts.width = "100%";
	objAtts.height = "100%";
	objAtts.id = "flash_contents";
	objAtts.align = "middle";
	
	params.allowScriptAccess = "sameDomain";
	params.movie = "";
	params.quality = "high";
	params.bgcolor = "#ffffff";
	params.wmode = "";
	params.salign = "";
	params.flashvars = "";
	
	embAtts.src = "";
	embAtts.quality = "high";
	embAtts.bgcolor = "#ffffff";
	embAtts.width = "100%";
	embAtts.height = "100%";
	embAtts.name = "flash_contents";
	embAtts.align = "middle";
	embAtts.allowScriptAccess = "sameDomain";
	embAtts.type = "application/x-shockwave-flash";
	embAtts.pluginspage = "http://www.macromedia.com/go/getflashplayer";
	embAtts.wmode = "";
	embAtts.salign = "";
	embAtts.flashvars = "";
	
	//引数で書き換え
	for (i = 0;i < argAry.length;i += 2) {
		
		for (var j in objAtts) {
			if (j == argAry[i]) {
				objAtts[j] = argAry[i+1];
				break;
			}
		}
		
		for (var j in params) {
			if (j == argAry[i]) {
				params[j] = argAry[i+1];
				break;
			}
		}
		
		for (var j in embAtts) {
			if (j == argAry[i]) {
				embAtts[j] = argAry[i+1];
				break;
			}
		}
		
	}
	
	//タグ作成
	var inTag = "<object ";
	for (i in objAtts) {
		inTag += i + '="' + objAtts[i] + '" ';
	}
	inTag += '>';
	for (i in params) {
		inTag += '<param name="' + i + '" value="' + params[i] + '" /> ';
	}
	inTag += '<embed ';
	for (i in embAtts) {
		inTag += i + '="' + embAtts[i] + '" ';
	}
	inTag += ' ></embed></object>';
	
	//表示
	var coTag = document.getElementById(coTagName);
	coTag.innerHTML = inTag;
}

/**
 * ・FlashPlayerのバージョン判定
 * ・引数
 * fver:Number 必要バージョン
 * ・戻り値
 * Boolean true:FlashPlayerが必要バージョンを満たしている false:FlashPlayerが必要バージョンを満たしていない
 * FlashPlayerがインストールされていない場合、falseが返る。
 * ・使用例：
 * var tof = checkFlashPlayer(9);
 * if (tof) {
 * 	alert("ばーじょんOK!!");
 * } else {
 * 	alert("Flashがだめです!");
 * }
 * 
 * ・補足
 * メジャーバージョン1桁のみ対応で、マイナーバージョンの判別には対応しない。
 **/
function checkFlashPlayer(fver) {
	//環境を調べる
	var isNN = (navigator.appName.charAt(0)=="N" && navigator.userAgent.indexOf("Safari") == -1)? true:false;
	var isN6 = (document.getElementById && isNN)? true:false;
	var isIE = (navigator.userAgent.indexOf("MSIE") != -1)? true:false;
	var isSaf = (navigator.userAgent.indexOf("Safari") != -1)? true:false;
	var isOpe = (navigator.userAgent.indexOf("Opera") != -1)? true:false;
	var isMac = (navigator.userAgent.indexOf("Mac")!=-1)? true:false;
	var isMacIE5 = (isMac && navigator.userAgent.indexOf("MSIE 5")!=-1)? true:false;
	
	//実際にバージョンを取得
	var flashVer = 0;
	//IEの場合
	if (isIE && !isMac && !isOpe) {
		try {//FlashPlayerがインストールされているか
			flashVer = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").FlashVersion();
			flashVer = Math.floor(flashVer / 0x10000);
		} catch(e) {
			//何もしない
			flashVer = 0;
		}
	} 
	//それ以外
	else if ((isNN || isN6 || isSaf || isMacIE5 || isOpe) && navigator.plugins) {
		try {//FlashPlayerがインストールされているか
			flashVer = navigator.plugins["Shockwave Flash"].description.charAt(16);
		} catch(e) {
			//何もしない
			flashVer = 0;
		}
	}
	
	//バージョンを判断
	if (fver <= flashVer) {
		return true;
	} else {
		return false;
	}
}


/**
 * ・指定のクエリ値を返す
 * ・引数
 * query:String 必要なクエリ名
 * ・戻り値
 * String  指定されたクエリの値
 **/
 function getQryValue(query) {
	var qa = location.search.substr(1).split("&");
	var tSt = "";
	for (var i = 0;i < qa.length;i++) {
		if (qa[i].indexOf(query) != -1) {
			tSt = qa[i];
			break;
		}
	}
	if (tSt == "") return null;
	
	var tStAry = tSt.split("=");
	return tStAry[1];
}

