;(function() {
	var $$;
	$$ = jQuery.fn.flash = function(htmlOptions, pluginOptions) {
		var block = $$.replace;
		pluginOptions = $$.copy($$.pluginOptions, pluginOptions);
		if (!$$.hasFlash(pluginOptions.version)) {
			if ($$.hasFlash(6,0,65)) {
				$('.hide').hide();
				var player = (jQuery.browser.msie == true) ? 'ActiveX' : 'PlugIn';
				document.title = document.title.slice(0, 12) + ' - Flash Player Installation';
				var express = '/express.swf?MMplayerType='+player+'&MMredirectURL='+location+'&MMdoctitle='+document.title;
				var htmlOptions = { src:express }
			}
			else {
				$('.hide').hide();
				block = $$.update;
			}
		}
		htmlOptions = $$.copy($$.htmlOptions, htmlOptions);
		return this.each(function() {
			block.call(this, $$.copy(htmlOptions));
		});
	};
	$$.copy = function() {
		var options = {}, flashvars = {};
		for (var i = 0; i < arguments.length; i++) {
			var arg = arguments[i];
			if (arg == undefined) continue;
			jQuery.extend(options, arg);
			if (arg.flashvars == undefined) continue;
			jQuery.extend(flashvars, arg.flashvars);
		}
		options.flashvars = flashvars;
		return options;
	};
	$$.hasFlash = function() {
		if (/hasFlash\=true/.test(location)) return true;
		if (/hasFlash\=false/.test(location)) return false;
		var pv = $$.hasFlash.playerVersion().match(/\d+/g);
		var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || String($$.pluginOptions.version).match(/\d+/g);
		for (var i = 0; i < 3; i++) {
			pv[i] = parseInt(pv[i] || 0);
			rv[i] = parseInt(rv[i] || 0);
			if(pv[i] < rv[i]) return false;
			if(pv[i] > rv[i]) return true;
		}
		return true;
	};
	$$.hasFlash.playerVersion = function() {
		try {
			try {
				var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
				try { axo.AllowScriptAccess = 'always';	} 
				catch(e) { return '6,0,0'; }				
			} 
			catch(e) {}
			return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
		}
		catch(e) {
			try {
				if (navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) {
					return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
				}
			} 
			catch(e) {}		
		}
		return '0,0,0';
	};
	$$.htmlOptions = {
		width: 400,
		height: 270,
		flashvars: {},
		wmode: 'transparent',
		quality: 'best',
		menu:'false',
		scale:'scale',
		bgcolor:'#FFFFFF',
		pluginspage: 'http://www.adobe.com/go/getflashplayer',
		src: '',
		allowFullScreen: true,
		allowscriptaccess: 'always',
		type: 'application/x-shockwave-flash',
		caption: ''
	};
	$$.pluginOptions = {
		version: '9'
	};
	$$.replace = function(htmlOptions) {
		this.innerHTML = '<div class="caption">'+ htmlOptions.caption+ '</div>';
		jQuery(this).prepend($$.transform(htmlOptions));
	};
	$$.update = function(htmlOptions) {
		var msg = 'The Flash Player plug-in by Abode is required to view this virtual tour.<br /><a target="_blank" href="http://get.adobe.com/flashplayer/">You can download the latest version here</a>.';
		jQuery(this).prepend(msg);
	};
	function toAttributeString() {
		var s = '';
		for (var key in this)
			if (typeof this[key] != 'function')	s += key+'="'+this[key]+'" ';
		return s;
	};
	function toFlashvarsString() {
		var s = '';
		for (var key in this)
			if (typeof this[key] != 'function') s += key+'='+encodeURIComponent(this[key])+'&';
		return s.replace(/&$/, '');		
	};
	$$.transform = function(htmlOptions) {
		htmlOptions.toString = toAttributeString;
		if (htmlOptions.flashvars) htmlOptions.flashvars.toString = toFlashvarsString;
		return '<embed ' + String(htmlOptions) + '/>';		
	};
	if (window.attachEvent) {
		window.attachEvent("onbeforeunload", function(){
			__flash_unloadHandler = function() {};
			__flash_savedUnloadHandler = function() {};
		});
	}
})();