// Documentation & updates available at:
// http://codecentre.eplica.is/js/eolasfix/test.htm

(function( Eolas_Fixed,
						win, doc,
						getElementsByTagName,
						outerHTML,
						parentNode,
						tags,
						elmsToRemoveOnload,
						x,
						is_ie,
						y,z,elm,childNode,HTML,dummy,eolasfix)
{
	// run only once!
	if (win[Eolas_Fixed]) return;
	win[Eolas_Fixed] = 1;

	eolasfix = function ()
	{
		// for each tag name specified in Array t
		while (tags[++x])
		{
			// find all elements of that type in the document
			// loop through the elements
			y = 0;
			while (elm = doc[getElementsByTagName](tags[x])[y++])
			{
				if (is_ie)
				{
					HTML = '>';
					z = 0;
					// <param> elements don't show up in innerHTML IE
					// so we need to collect their outerHTML.
					while (childNode = elm.childNodes[z++])
							HTML += childNode[outerHTML];

					// create a 'dummy' element 
					dummy = doc.createElement('i');
					// inject it next to `elm`,
					elm[parentNode].insertBefore(dummy, elm);
					// and turn it into an `elm` clone
					dummy[outerHTML] = elm[outerHTML].replace(/>/, HTML);
					// increment y to skip over it
					y++;

					// then hide the original elm
					elm.style.display = 'none';
					// and save it in 'The List of Elements to Remove Later'.
					elmsToRemoveOnload[elmsToRemoveOnload.length] = elm;
				}
				else
				{
					elm[outerHTML] = elm[outerHTML];
				}
			}
		}
	};

	// For IE run the fix straight away (because the defer="defer"
	// attribute has delayed execution until the DOM has loaded).
	// Then assign a window.onload event to purge the old elements.
	is_ie && !eolasfix() && win.attachEvent('onload', function(){
		x=0;
		while(elm = elmsToRemoveOnload[x++])
				elm[parentNode].removeChild(elm);
	});
	// For Opera set an `DOMContentLoaded` event to run the fix.
	win.opera && doc.addEventListener('DOMContentLoaded', eolasfix, 0);

})( '__Eolas_Fixed',
		window, document,
		'getElementsByTagName',
		'outerHTML',
		'parentNode',
		['object','embed','applet'],
		[],
		-1 /*@cc_on,1 @*/
	);