

AirBadge = function() {

	// -----------------------------------------------------------------------------
	// Globals
	// Major version of Flash required
	var requiredMajorVersion = 9;
	// Minor version of Flash required
	var requiredMinorVersion = 0;
	// Minor version of Flash required
	var requiredRevision = 115;		// This is Flash Player 9 Update 3
	// -----------------------------------------------------------------------------
	// -->

	//v1.7
	// Flash Player Version Detection
	// Detect Client Browser type
	// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

	function ControlVersion()
	{
		var version;
		var axo;
		var e;

		// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

		try {
			// version will be set for 7.X or greater players
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = axo.GetVariable("$version");
		}
		catch (e) {}

		if (!version) {
			try {
				// version will be set for 6.X players only
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

				// installed player is some revision of 6.0
				// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
				// so we have to be careful.

				// default to the first public version
				version = "WIN 6,0,21,0";

				// throws if AllowScripAccess does not exist (introduced in 6.0r47)
				axo.AllowScriptAccess = "always";

				// safe to call for 6.0r47 or greater
				version = axo.GetVariable("$version");

			}
			catch (e) {}
		}

		if (!version) {
			try {
				// version will be set for 4.X or 5.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = axo.GetVariable("$version");
			}
			catch (e) {}
		}

		if (!version) {
			try {
				// version will be set for 3.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			}
			catch (e) {}
		}

		if (!version) {
			try {
				// version will be set for 2.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			}
			catch (e) {
				version = -1;
			}
		}

		return version;
	}

	// JavaScript helper required to detect Flash Player PlugIn version information
	function GetSwfVer()
	{
		// NS/Opera version >= 3 check for Flash plugin in plugin array
		var flashVer = -1;

		if (navigator.plugins != null && navigator.plugins.length > 0) {
			if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
				var descArray = flashDescription.split(" ");
				var tempArrayMajor = descArray[2].split(".");
				var versionMajor = tempArrayMajor[0];
				var versionMinor = tempArrayMajor[1];
				var versionRevision = descArray[3];
				if (versionRevision == "") {
					versionRevision = descArray[4];
				}
				if (versionRevision[0] == "d") {
					versionRevision = versionRevision.substring(1);
				}
				else if (versionRevision[0] == "r") {
					versionRevision = versionRevision.substring(1);
					if (versionRevision.indexOf("d") > 0) {
						versionRevision =
							versionRevision.substring(0, versionRevision.indexOf("d"));
					}
				}
				flashVer = [versionMajor, ".", versionMinor, ".", versionRevision].join('');
			}
		}
		// MSN/WebTV 2.6 supports Flash 4
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) {
			flashVer = 4;
		}
		// WebTV 2.5 supports Flash 3
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) {
			flashVer = 3;
		}
		// older WebTV supports Flash 2
		else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) {
			flashVer = 2;
		}
		else if ( isIE && isWin && !isOpera ) {
			flashVer = ControlVersion();
		}
		return flashVer;
	}

	// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or
	// greater is available
	function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
	{
		versionStr = GetSwfVer();
		if (versionStr == -1 ) {
			return false;
		}
		else if (versionStr != 0) {
			if(isIE && isWin && !isOpera) {
				// Given "WIN 2,0,0,11"
				tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
				tempString        = tempArray[1];			// "2,0,0,11"
				versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
			}
			else {
				versionArray      = versionStr.split(".");
			}
			var versionMajor      = versionArray[0];
			var versionMinor      = versionArray[1];
			var versionRevision   = versionArray[2];

				// is the major.revision >= requested major.revision AND the minor version >= requested minor
			if (versionMajor > parseFloat(reqMajorVer)) {
				return true;
			}
			else if (versionMajor == parseFloat(reqMajorVer)) {
				if (versionMinor > parseFloat(reqMinorVer)) {
					return true;
				}
				else if (versionMinor == parseFloat(reqMinorVer)) {
					if (versionRevision >= parseFloat(reqRevision)) {
						return true;
					}
				}
			}
			return false;
		}
	}

	function AC_AddExtension(src, ext)
	{
		if (src.indexOf('?') != -1) {
			return src.replace(/\?/, ext+'?');
		}
		else {
			return [src, ext].join('');
		}
	}



	function AC_Generateobj(objAttrs, params, embedAttrs)
	{
		var str = [],
		i;

		if (isIE && isWin && !isOpera)
		{
			str[str.length] = '<object ';
			for (i in objAttrs)
			{
				str[str.length] = [i, '="', objAttrs[i], '" '].join('');
			}
			str[str.length] = '>';
			for (i in params)
			{
				str[str.length] = ['<param name="', i, '" value="', params[i], '" /> '].join('');
			}
			str[str.length] = '</object>';
		}
		else
		{
			str[str.length] = '<embed ';
			for (i in embedAttrs)
			{
			str[str.length] = [i, '="', embedAttrs[i], '" '].join('');
			}
			str[str.length] = '> </embed>';
		}

		document.write(str.join(''));
	}

	function AC_FL_RunContent()
	{
		var ret =
			AC_GetArgs
			(  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
			, "application/x-shockwave-flash"
			);
		AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
		}

	function AC_SW_RunContent()
	{
		var ret =
			AC_GetArgs
			(  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
			, null
			);
		AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	}

	function AC_GetArgs(args, ext, srcParamName, classid, mimeType)
	{
		var ret = new Object(),
		i = 0,
		currArg;

		ret.embedAttrs = new Object();
		ret.params = new Object();
		ret.objAttrs = new Object();
		for (; i < args.length; i=i+2){
			currArg = args[i].toLowerCase();

			switch (currArg){
			case "classid":
				break;
			case "pluginspage":
				ret.embedAttrs[args[i]] = args[i+1];
				break;
			case "src":
			case "movie":
				args[i+1] = AC_AddExtension(args[i+1], ext);
				ret.embedAttrs["src"] = args[i+1];
				ret.params[srcParamName] = args[i+1];
				break;
			case "onmouseup":
				if(args[i+1].length) {
                    ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
                }
				break;
			case "onafterupdate":
			case "onbeforeupdate":
			case "onblur":
			case "oncellchange":
			case "onclick":
			case "ondblclick":
			case "ondrag":
			case "ondragend":
			case "ondragenter":
			case "ondragleave":
			case "ondragover":
			case "ondrop":
			case "onfinish":
			case "onfocus":
			case "onhelp":
			case "onmousedown":
			case "onmouseover":
			case "onmousemove":
			case "onmouseout":
			case "onkeypress":
			case "onkeydown":
			case "onkeyup":
			case "onload":
			case "onlosecapture":
			case "onpropertychange":
			case "onreadystatechange":
			case "onrowsdelete":
			case "onrowenter":
			case "onrowexit":
			case "onrowsinserted":
			case "onstart":
			case "onscroll":
			case "onbeforeeditfocus":
			case "onactivate":
			case "onbeforedeactivate":
			case "ondeactivate":
			case "type":
			case "codebase":
			case "id":
				ret.objAttrs[args[i]] = args[i+1];
				break;
			case "width":
			case "height":
			case "align":
			case "vspace":
			case "hspace":
			case "class":
			case "title":
			case "accesskey":
			case "name":
			case "tabindex":
				ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
				break;
			default:
				ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
			}
		}
		ret.objAttrs["classid"] = classid;
		if (mimeType) ret.embedAttrs["type"] = mimeType;
			return ret;
	}


	// Display Adobe AIR download 'badge'
	return {
		display: function(appUrl, imgUrl, swfUrl, pluginVersion, redirect, stats) {

			// Version check based upon the values entered above in "Globals"
			var hasReqestedVersion = DetectFlashVer(
					requiredMajorVersion,
					requiredMinorVersion,
					requiredRevision);

			// Check to see if the version meets the requirements for playback
			if (hasReqestedVersion) {
				// if we've detected an acceptable version
				// embed the Flash Content SWF when all tests are passed

				// want to redirect (base page) when clicking on Badge
				document.airBadgeRedirectURL =
					typeof redirect === 'string' && redirect !== null && redirect.length
					? redirect : null;

				document.airBadgeStatsAction =
					typeof stats === 'string' && stats !== null && stats.length
					? stats : null;

				AC_FL_RunContent(
					'codebase',
					'//fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab',
					'width','217',
					'height','180',
					'id','badge',
					'align','middle',
					'src','badge',
					'quality','high',
					'bgcolor','#FFFFFF',
					'name','badge',
					'wmode', 'transparent',
					'onmouseup',
					document.airBadgeRedirectURL !== null || document.airBadgeStatsAction !== null
						? '_AirBadgeOnMouseup()' : '',
					'allowscriptaccess','all',
					'pluginspage', '//www.macromedia.com/go/getflashplayer',
					'flashvars', ['appname=Sky%20Poker&appurl=', appUrl,
								  '&airversion=', pluginVersion,
								  '&imageurl=' ,imgUrl].join(''),
					'movie', swfUrl );
			}
			else {

				// Flash Player is too old or we can't detect the plugin
				document.write(['<table id="AIRDownloadMessageTable"><tr><td>Download <a href="',
					appUrl,
					'">Sky Poker</a> now.<br /><br /><span id="AIRDownloadMessageRuntime">',
					'This application requires the <a href="'].join(''));

				var platform = 'unknown';
				if (typeof(window.navigator.platform) !== undefined)
				{
					platform = window.navigator.platform.toLowerCase();
					if (platform.indexOf('win') !== -1) {
						platform = 'win';
					}
					else if (platform.indexOf('mac') !== -1) {
						platform = 'mac';
					}
				}

				if (platform === 'win') {
					document.write('http://airdownload.adobe.com/air/win/download/latest/AdobeAIRInstaller.exe');
				}
				else if (platform === 'mac') {
					document.write('http://airdownload.adobe.com/air/mac/download/latest/AdobeAIR.dmg');
				}
				else {
					document.write('http://www.adobe.com/go/getair/');
				}

				document.write('">Adobe&#174;&nbsp;AIR&#8482; runtime</a>.</span></td></tr></table>');
			}
		}
	};
}();


/* onmouseup event handler
 * Actions are dependent on:
 *  document.airBadgeStatsAction   - asynchronous action
 *                                   on event, will trigger this action
 *  document.airBadgeRedirectURL   - redirect URL
 *                                    on event, will redirect to this URL (after aysnc action)
 *
 *   _tm  - redirect timeout, ms (500)
 */
function _AirBadgeOnMouseup(_tm)
{
	if(
		typeof document.airBadgeStatsAction === 'string' &&
		document.airBadgeStatsAction !== null &&
		document.airBadgeStatsAction.length
	) {
		document.airBadgeState = new AirBadgeStat(document.airBadgeStatsAction);
		return;
	}


	if(
		typeof document.airBadgeRedirectURL === 'string' &&
		document.airBadgeRedirectURL !== null &&
		document.airBadgeRedirectURL.length
	) {
		if(typeof _tm === 'undefined') _tm = 500;
		if(_tm <= 0) window.location = document.airBadgeRedirectURL;
		else setTimeout(function() { window.location = document.airBadgeRedirectURL; }, _tm);
	}
}



/**********************************************************************
 * AirBadgeStat Class
 **********************************************************************/

// AirBadgeStatsAction
function AirBadgeStat(_action)
{
	this._init(_action);
}



/* One time init.
 *
 *   _action  - stats action
 */
AirBadgeStat.prototype._init = function(_action)
{
	var name = 'AirBadgeStat',
	self = this;

	try { delete document.airBadgeStatsAction; }
	catch(_e) { document.airBadgeStatsAction = null; }

	this.req = ReqLib(
		name,
		{
			reqType      : name,
			type         : null,
			refreshNormal: null,
			refreshIdle  : null,
			url          : null,
			respType     : 'arr',
			renderDelay  : null
		});

	this.req.regPar({
		pub    : (this.pub = {name: name, busy: false}),
		makeId : function() { return ''; },
		hint   : function() { },
		makeURL: function() { return [getBaseURL(), '?action=', _action].join(''); },
		render : function() { self._cb(); },
		Req    : self.req
	});


	this.midRequest = true;
	this.req.req();

	this.timer = setTimeout(function() { self._render(); }, 5000);
};



/* Private function to handle AJAX callback.
 * Attempts to redectict the page; dont care about server-response
 */
AirBadgeStat.prototype._cb = function()
{
	if(!this.midRequest) return;
	this.midRequest = false;

	_AirBadgeOnMouseup(0);
};

