(function($) {

	var G   = {};
	var _ua = navigator.userAgent.toLowerCase();

	var requiredMajorVersion = 9;   // Major version
	var requiredMinorVersion = 0;   // Minor version
	var requiredRevision     = 115; // Reversion

	var b_air = true;

	G.os      = {};
	G.browser = {};

	// Judge OS
	if ((_ua.indexOf("windows") > -1) || (_ua.indexOf("win32")>-1)) {
		G.os.windows = true;
	} else if (_ua.indexOf("iphone") > -1) {
		G.os.iphone = true;
	} else if (_ua.indexOf("ipad") > -1) {
		G.os.ipad = true;
	} else if (_ua.indexOf("ipod") > -1) {
		G.os.ipod = true;
	} else if ((_ua.indexOf("macintosh") > -1) || (_ua.indexOf("mac os x") > -1)) {
		G.os.mac = true;
	} else if (_ua.indexOf("linux") > -1) {
		G.os.linux = true;
	}

	// Judge Browser
	G.browser.ie     = _ua.indexOf("msie")>-1;
	G.browser.ie6    = _ua.indexOf("msie 6")>-1;
	G.browser.ie7    = _ua.indexOf("msie 7")>-1;
	G.browser.gecko  = (_ua.indexOf("gecko")>-1) && (_ua.indexOf("safari")==-1);
	G.browser.webKit = _ua.indexOf("applewebkit/")>-1;

	G.options = {
		 id      : ''   // バッジ表示欄のID
		,badge   : ''   // バッジswfファイルのパス
		,btn     : ''   // ボタン画像ファイルのパス
		,air     : ''   // AirアプリファイルのURL
		,airName : ''   // Airアプリのアプリケーション名
		,agreeId : ''   // "同意する"チェックボックスのID
		,width   : 329
		,height  : 60
		,badgeHeight : 140
		,badgeWrapId : 'badgeWrap'
	};

	G.msgHeight = {
		'row1' : 75,
		'row2' : 90,
		'row3' : 110
	}

	// Functions ///////////////////////////
	/**
	 * AirDownloaderの初期化
	 * 
	 */
	G.init = function(options) {
		// Optionの取得
		if(options) {
			applyOption(G.options, options);
		}

		var check = G.validate();
		if (check) {
			alert(check);
			return false;
		}

		$(function() {
			G.setup();
		});

	};

	/**
	 * 初期値のチェック
	 * 
	 */
	G.validate = function() {
		var msg = '';

		// パラメータのチェック
		if (!G.options.id || (trim(G.options.id) == '')) {
			msg += 'IDを指定してください\n';
		}
		if (!G.options.badge || (trim(G.options.badge) == '')) {
			msg += 'Badge用swfファイルを指定してください\n';
		}
		if (!G.options.btn || (trim(G.options.btn) == '')) {
			msg += 'ボタン用画像ファイルを指定してください\n';
		}
		if (!G.options.air || (trim(G.options.air) == '')) {
			msg += 'AirアプリファイルのURLを指定してください\n';
		}
		if (!G.options.agreeId || (trim(G.options.agreeId) == '')) {
			msg += '"同意する"チェックボックスのIDを指定してください\n';
		}

		return msg;
	};


	/**
	 * ダウンロードバッジの表示（ページ読み込み完了後）
	 * 
	 */
	G.setup = function() {
		// 必要なフィールドの存在チェック
		// バッジ表示欄
		var msg = '';
		if ($('#' + G.options.id).size() == 0) {
			msg += '指定IDを持つ表示用のタグが見つかりません\n';
		}
		// "同意する"チェックボックス
		if ($('#'+G.options.agreeId).size() == 0) {
			msg += '指定IDを持つチェックボックス用のタグが見つかりません\n';
		}
		// エラーの場合処理終了
		if (msg) {
			alert(msg);
			return false;
		}

		$('#' + G.options.agreeMsgId).css('display', 'block');
		document.getElementById(G.options.agreeId).checked = false;

		// FlashPlayerの存在チェック
		var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
		// FlashPlayerの該当バージョンがインストールされている場合
		if (hasReqestedVersion) {
			//alert('Flash');

			$('#' + G.options.agreeId).click(function() {
				var cb = document.getElementById(G.options.agreeId);
				if (cb.checked) {
					$('#' + G.options.id + ' a').css('display', 'none');
					$('#' + G.options.badgeWrapId).css('display', 'block');

				} else {
					$('#' + G.options.id + ' a').css('display', 'inline');
					$('#' + G.options.badgeWrapId).css('display', 'none');
					//$('#' + G.options.badgeWrapId).css('height', G.options.height);
				}
			});

			$('#' + G.options.id + ' a').click(function() {

				// "同意する"チェックボックスにチェックがない場合
				var cb = document.getElementById(G.options.agreeId);
				if (!cb.checked) {
					alert('「注意事項」を読み、「同意します」のチェックボックスにチェックを入れてください。');
					return false;
				}

				return false;
			});


			// バッジの表示
			var _flavars = '';
			var _config  = {
				 appname      : G.options.airName
				,appurl       : G.options.air
				,imageurl     : G.options.btn
				,messagecolor : "000000"
				,airversion   : "2.5"
				,ctrlfunc     : "AirDownloder.ctrlArea"
			}

			for (var _key in _config)
				_flavars += ((_config[_key] && (_config[_key].length > 0))?'&':'') + _key + '=' + _config[_key];

			var _code = AC_FL_GetContent(
				 'codebase'    ,'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab'
				,'pluginspage' ,'http://www.macromedia.com/go/getflashplayer'
				,'src'         ,G.options.badge
				,'movie'       ,G.options.badge
				,'width'       ,G.options.width
				,'height'      ,G.options.badgeHeight
				,'id'          ,'badge'
				,'name'        ,'badge'
				,'align'       ,'middle'
				,'quality'     ,'high'
				,'wmode'     ,'transparent'
				,'bgcolor'     ,'#ffffff'
				,'flashvars'   ,_flavars
				,'allowscriptaccess','always'
			);

			// バッチ用HTMLタグの追加
			var _badgeArea = $('<div></div>').attr('id', G.options.badgeWrapId).appendTo('#' + G.options.id);
			_badgeArea.css('width', G.options.width);
			_badgeArea.css('height', G.options.height);
			_badgeArea.css('margin', '0 auto');
			_badgeArea.css('overflow', 'hidden');
			_badgeArea.css('display', 'none');
			_badgeArea.append(_code);

		// FlashPlayerの該当バージョンがインストールされていない場合
		} else {

			// クリック時にメッセージを表示
			$('#' + G.options.id + ' a').click(function() {

				// "同意する"チェックボックスにチェックがない場合
				var cb = document.getElementById(G.options.agreeId);
				if (!cb.checked) {
					alert('「注意事項」を読み、「同意します」のチェックボックスにチェックを入れてください。');
					return false;
				}

				window.open('fp_download.html', 'win_download', 'width=700,height=235');
				return false;
			});
		}

	};

	G.ctrlArea = function(values) {

		var b_installed = values[0];
		var type = values[1];

		if (!b_installed)
			b_air = false;

		// Init : Airランタイムがインストールされている場合
		if (type == "1") {
			b_airInstall = true;
			//$('#' + G.options.badgeWrapId).css('height', G.options.height);
			$('#' + G.options.badgeWrapId).css('height', G.msgHeight.row1);

		// Init : Airランタイムがインストールされていない場合
		} else if (type == "2") {
			b_airInstall = false;
			$('#' + G.options.badgeWrapId).css('height', G.msgHeight.row3);

		// onClick : Airラインタイムがインストールされている場合
		} else if (type == "3") {
			$('#' + G.options.badgeWrapId).css('height', G.msgHeight.row2);

		// onClick : Airランタイムがインストールされていない場合
		} else if (type == "4") {
			$('#' + G.options.badgeWrapId).css('height', G.options.badgeHeight);

		// Airがインストールできない場合
		//} else {
		//	$('#' + G.options.badgeWrapId).css('height', G.options.height);

		}

	}

	// Common Function ///////////////////////////////////////////////////////////
	/**
	 *
	 *
	 */
	function checkSupport() {
		var body = document.body
		var div  = document.createElement("div");

		G.support.opacity = typeof div.style.opacity==="string";
		div.style.position = "fixed";
		div.style.margin   = 0;
		div.style.top      = "20px";
		body.appendChild(div,body.firstChild);

		G.support.fixed = (div.offsetTop==20);
		body.removeChild(div);
	}

	/**
	 * Marge Option
	 *
	 */
	function applyOption(original, extension) {
		for(var property in extension) {
			original[property] = extension[property];
		}

		return original;
	}

	function trim(str) {
		return str?str.replace(/(^\s+)|(\s+$)/g, ''):'';
	}

	window.AirDownloder = G;
})(jQuery);


function closeFPDownload(url) {
	window.open(url, '_blank');
	window.close();
}

