/**

 * Flash (http://jquery.lukelutman.com/plugins/flash)

 * A jQuery plugin for embedding Flash movies.

 * 

 * Version 1.0

 * November 9th, 2006

 *

 * Copyright (c) 2006 Luke Lutman (http://www.lukelutman.com)

 * Dual licensed under the MIT and GPL licenses.

 * http://www.opensource.org/licenses/mit-license.php

 * http://www.opensource.org/licenses/gpl-license.php

 * 

 * Inspired by:

 * SWFObject (http://blog.deconcept.com/swfobject/)

 * UFO (http://www.bobbyvandersluis.com/ufo/)

 * sIFR (http://www.mikeindustries.com/sifr/)

 * 

 * IMPORTANT: 

 * The packed version of jQuery breaks ActiveX control

 * activation in Internet Explorer. Use JSMin to minifiy

 * jQuery (see: http://jquery.lukelutman.com/plugins/flash#activex).

 *

 **/ 

;(function(){

	

var $$;



/**

 * 

 * @desc Replace matching elements with a flash movie.

 * @author Luke Lutman

 * @version 1.0.1

 *

 * @name flash

 * @param Hash htmlOptions Options for the embed/object tag.

 * @param Hash pluginOptions Options for detecting/updating the Flash plugin (optional).

 * @param Function replace Custom block called for each matched element if flash is installed (optional).

 * @param Function update Custom block called for each matched if flash isn't installed (optional).

 * @type jQuery

 *

 * @cat plugins/flash

 * 

 * @example $('#hello').flash({ src: 'hello.swf' });

 * @desc Embed a Flash movie.

 *

 * @example $('#hello').flash({ src: 'hello.swf' }, { version: 8 });

 * @desc Embed a Flash 8 movie.

 *

 * @example $('#hello').flash({ src: 'hello.swf' }, { expressInstall: true });

 * @desc Embed a Flash movie using Express Install if flash isn't installed.

 *

 * @example $('#hello').flash({ src: 'hello.swf' }, { update: false });

 * @desc Embed a Flash movie, don't show an update message if Flash isn't installed.

 *

**/

$$ = jQuery.fn.flash = function(htmlOptions, pluginOptions, replace, update) {

	

	// Set the default block.

	var block = replace || $$.replace;

	

	// Merge the default and passed plugin options.

	pluginOptions = $$.copy($$.pluginOptions, pluginOptions);

	

	// Detect Flash.

	if(!$$.hasFlash(pluginOptions.version)) {

		// Use Express Install (if specified and Flash plugin 6,0,65 or higher is installed).

		if(pluginOptions.expressInstall && $$.hasFlash(6,0,65)) {

			// Add the necessary flashvars (merged later).

			var expressInstallOptions = {

				flashvars: {  	

					MMredirectURL: location,

					MMplayerType: 'PlugIn',

					MMdoctitle: jQuery('title').text() 

				}					

			};

		// Ask the user to update (if specified).

		} else if (pluginOptions.update) {

			// Change the block to insert the update message instead of the flash movie.

			block = update || $$.update;

		// Fail

		} else {

			// The required version of flash isn't installed.

			// Express Install is turned off, or flash 6,0,65 isn't installed.

			// Update is turned off.

			// Return without doing anything.

			return this;

		}

	}

	

	// Merge the default, express install and passed html options.

	htmlOptions = $$.copy($$.htmlOptions, expressInstallOptions, htmlOptions);

	

	// Invoke $block (with a copy of the merged html options) for each element.

	return this.each(function(){

		block.call(this, $$.copy(htmlOptions));

	});

	

};

/**

 *

 * @name flash.copy

 * @desc Copy an arbitrary number of objects into a new object.

 * @type Object

 * 

 * @example $$.copy({ foo: 1 }, { bar: 2 });

 * @result { foo: 1, bar: 2 };

 *

**/

$$.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);

		// don't clobber one flash vars object with another

		// merge them instead

		if(arg.flashvars == undefined) continue;

		jQuery.extend(flashvars, arg.flashvars);

	}

	options.flashvars = flashvars;

	return options;

};

/*

 * @name flash.hasFlash

 * @desc Check if a specific version of the Flash plugin is installed

 * @type Boolean

 *

**/

$$.hasFlash = function() {

	// look for a flag in the query string to bypass flash detection

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

		// player is less than required

		if(pv[i] < rv[i]) return false;

		// player is greater than required

		if(pv[i] > rv[i]) return true;

	}

	// major version, minor version and revision match exactly

	return true;

};

/**

 *

 * @name flash.hasFlash.playerVersion

 * @desc Get the version of the installed Flash plugin.

 * @type String

 *

**/

$$.hasFlash.playerVersion = function() {

	// ie

	try {

		try {

			// avoid fp6 minor version lookup issues

			// see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/

			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];

	// other browsers

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

};

/**

 *

 * @name flash.htmlOptions

 * @desc The default set of options for the object or embed tag.

 *

**/

$$.htmlOptions = {

	height: 240,

	flashvars: {},

	pluginspage: 'http://www.adobe.com/go/getflashplayer',

	src: '#',

	type: 'application/x-shockwave-flash',

	width: 320		

};

/**

 *

 * @name flash.pluginOptions

 * @desc The default set of options for checking/updating the flash Plugin.

 *

**/

$$.pluginOptions = {

	expressInstall: false,

	update: true,

	version: '6.0.65'

};

/**

 *

 * @name flash.replace

 * @desc The default method for replacing an element with a Flash movie.

 *

**/

$$.replace = function(htmlOptions) {

	this.innerHTML = '<div class="alt">'+this.innerHTML+'</div>';

	jQuery(this)

		.addClass('flash-replaced')

		.prepend($$.transform(htmlOptions));

};

/**

 *

 * @name flash.update

 * @desc The default method for replacing an element with an update message.

 *

**/

$$.update = function(htmlOptions) {

	var url = String(location).split('?');

	url.splice(1,0,'?hasFlash=true&');

	url = url.join('');

	var msg = '<p>This content requires the Flash Player. <a href="http://www.adobe.com/go/getflashplayer">Download Flash Player</a>. Already have Flash Player? <a href="'+url+'">Click here.</a></p>';

	this.innerHTML = '<span class="alt">'+this.innerHTML+'</span>';

	jQuery(this)

		.addClass('flash-update')

		.prepend(msg);

};

/**

 *

 * @desc Convert a hash of html options to a string of attributes, using Function.apply(). 

 * @example toAttributeString.apply(htmlOptions)

 * @result foo="bar" foo="bar"

 *

**/

function toAttributeString() {

	var s = '';

	for(var key in this)

		if(typeof this[key] != 'function')

			s += key+'="'+this[key]+'" ';

	return s;		

};

/**

 *

 * @desc Convert a hash of flashvars to a url-encoded string, using Function.apply(). 

 * @example toFlashvarsString.apply(flashvarsObject)

 * @result foo=bar&foo=bar

 *

**/

function toFlashvarsString() {

	var s = '';

	for(var key in this)

		if(typeof this[key] != 'function')

			s += key+'='+encodeURIComponent(this[key])+'&';

	return s.replace(/&$/, '');		

};

/**

 *

 * @name flash.transform

 * @desc Transform a set of html options into an embed tag.

 * @type String 

 *

 * @example $$.transform(htmlOptions)

 * @result <embed src="foo.swf" ... />

 *

 * Note: The embed tag is NOT standards-compliant, but it 

 * works in all current browsers. flash.transform can be

 * overwritten with a custom function to generate more 

 * standards-compliant markup.

 *

**/

$$.transform = function(htmlOptions) {

	htmlOptions.toString = toAttributeString;

	if(htmlOptions.flashvars) htmlOptions.flashvars.toString = toFlashvarsString;

	return '<embed ' + String(htmlOptions) + '/>';		

};



/**

 *

 * Flash Player 9 Fix (http://blog.deconcept.com/2006/07/28/swfobject-143-released/)

 *

**/

if (window.attachEvent) {

	window.attachEvent("onbeforeunload", function(){

		__flash_unloadHandler = function() {};

		__flash_savedUnloadHandler = function() {};

	});

}

	

})();



// larry added this to the end

jqflash = function(htmlOptions) {

	htmlOptions.flashvars.txt = this.innerHTML;

	this.innerHTML = '<div>'+this.innerHTML+'</div>';

	var $alt = $(this.firstChild);

	htmlOptions.height = $alt.height();

	htmlOptions.width = $alt.width();

	$alt.addClass('alt');

	$(this)

		.addClass('flash-replaced')

		.prepend($.fn.flash.transform(htmlOptions));						

}