/**

 * Project Name:	jActivating

 * Project URI:	http://jactivating.sourceforge.net

 * Description:	Allows website users to interact with embedded content without 'activating' it first

 * Author:		David Muņoz <donraspu AT gmail DOT com>

 * Version:		1.1.2 - May 16, 2007

 * License:		This software is Public Domain (no rights reserved)

 *

 * Installation: 

 * 1) Upload embeddedcontent.js into some directory on your web server.

 * 2) Include the JavaScript file in the <head> of your document like this:

 * 		<script type="text/javascript" src="embeddedcontent.js" defer="defer"></script>

 */

var jActivating = 

{



	// Checks for Internet Explorer

	isMSIE : (document.all && !window.opera) ? true : false,

	

	

	/**

	 * Activates embedded content reinserting it

	 * @return void

	 */

	reinsertContent : function()

	{	

	var totalNodes = new Array(3);

		totalNodes['object'] = document.getElementsByTagName('object').length;

		totalNodes['embed'] = document.getElementsByTagName('embed').length;

		totalNodes['applet'] = document.getElementsByTagName('applet').length;

		for(var tagName in totalNodes)

		{

			var counter = totalNodes[tagName] - 1;

			for(var node; node = document.getElementsByTagName(tagName)[counter]; counter--)

			{

				sourceCode = jActivating.getSourceCode(node);

				if(sourceCode)

				{

					node.outerHTML = sourceCode;

				}

			}

		}

		jActivating.isMSIE = null;

	},

	

	

	/**

	 * Retrieves the object and its content in HTML.

	 * @param object - The analyzed node

	 * @return string - The HTML received, NULL for malformed syntax (end tag)

	 */

	getSourceCode : function(node)

	{

		var sourceCode = node.outerHTML;

		switch(node.nodeName.toLowerCase())

		{

			case 'embed':

				return sourceCode;

			break;

			case 'object':

			case 'applet':

				var openTag = sourceCode.substr(0, sourceCode.indexOf('>') + 1);

				var closeTag = sourceCode.substr(sourceCode.length - 9).toLowerCase();

				if(closeTag != '</object>' && closeTag != '</applet>')

				{

					// Filters malformed syntax for avoid unexpected results in Internet Explorer

					return null;

				}

				if(jActivating.isMSIE)

				{

					var innerCode = jActivating.getInnerCode(node);

					sourceCode = openTag + innerCode + closeTag;

				}

				return sourceCode;

			break;

		}

	},

	

	

	/**

	 * Retrieves the HTML between start and end tags of the object.

	 * @param object - The analyzed node

	 * @return string - The HTML received

	 *

	 * NOTE: the innerHTML property isn't used because Internet Explorer

	 * sometimes returns a empty result.

	 */

	getInnerCode : function(node)

	{

		var innerCode = '';

		var totalChilds = node.childNodes.length - 1;

		for(var counter = totalChilds, child; child = node.childNodes[counter]; counter--)

		{

			innerCode += child.outerHTML;

		}

		return innerCode;

	}

	

}





// Execute script only for Internet Explorer and Opera (9+)

if(document.attachEvent)

{

	if(window.opera)

	{

		document.attachEvent("DOMContentLoaded", jActivating.reinsertContent);

	}

	else

	{

		jActivating.reinsertContent();

	}

}