// 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 @*/

  );


