/**
 * 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+)
function embeddedContentPatient() 
{ 
    if(document.attachEvent)
    {
	    if(window.opera)
	    {
		    document.attachEvent("DOMContentLoaded", jActivating.reinsertContent);
	    }
	    else
	    {
		    jActivating.reinsertContent();
	    }
    }
}