<public:component>
  <public:method name="isMaximized" />
  <public:method name="maximize" />
  <public:method name="restoreSize" />
</public:component>

<script>
var data = {};
var elementMaximized = false;
var elementsHidden = null;
var elementsOriDisplay = null;

function isMaximized()
{
  return elementMaximized;
}
 
function maximize()
{
  if (elementMaximized)
    return;

  if (elementsHidden)
  {
    for (var i=0; i<elementsHidden.length; i++)
      elementsHidden[i].style.display = elementsOriDisplay[i];
    elementsHidden = null;
  }

  elementsHidden     = [];
  elementsOriDisplay = [];

  var el = element;
  while (el && (el != window.document.body))
  {
    var e = el.previousSibling;
    while (e)
    {
      if (e.style)
      {
        elementsHidden[elementsHidden.length] = e;
        if (e.currentStyle)
          elementsOriDisplay[elementsOriDisplay.length] = e.currentStyle.display;
        else
          elementsOriDisplay[elementsOriDisplay.length] = window.document.defaultView.getComputedStyle(e, "").getPropertyValue("display");
        e.style.display = 'none';
      }
      e = e.previousSibling;
    }
    var e = el.nextSibling;
    while (e)
    {
      if (e.style)
      {
        elementsHidden[elementsHidden.length] = e;
        if (e.currentStyle)
          elementsOriDisplay[elementsOriDisplay.length] = e.currentStyle.display;
        else
          elementsOriDisplay[elementsOriDisplay.length] = window.document.defaultView.getComputedStyle(e, "").getPropertyValue("display");
        e.style.display = 'none';
      }
      e = e.nextSibling;
    }

    el = el.parentNode;  
  }

  

  data.cssText = element.style.cssText;
  data.frameBorder = element.frameBorder;
  element.setAttribute('frameborder', 'no');
  if (element.contentWindow)
  {
    data.iframeDocumentCSSText = element.contentWindow.document.documentElement.currentStyle.cssText;
    element.contentWindow.document.documentElement.style.border = 'none';
  }
  element.style.position = 'absolute';
  element.style.top = '0px';
  element.style.left = '0px';
  element.style.width = '100%';
  element.style.height = '100%';
  element.style.border = 'none';
  element.border = '0';

  data.bodyCSSText = window.document.body.style.cssText;
  window.document.body.style.margin  = '0px';
  window.document.body.style.padding = '0px';
  window.document.body.style.overflow = 'hidden';

  elementMaximized = true;
}
function restoreSize()
{
  if (!elementMaximized)
    return;

  if (elementsHidden)
  {
    for (var i=0; i<elementsHidden.length; i++)
      elementsHidden[i].style.display = elementsOriDisplay[i];
    elementsHidden = null;
  }

  element.style.cssText = data.cssText;
  element.setAttribute('frameborder', data.frameBorder);
  window.document.body.style.cssText = data.bodyCSSText;
  if (element.contentWindow)
  {
    element.contentWindow.document.documentElement.style.cssText = data.iframeDocumentCSSText;
  }

  elementMaximized = false;
}
</script>

