var htmlwinlayout =
{
  position    : 'absolute',
  margin      : 0,
  padding     : 10,
  borderW     : 0,
  borderS     : 'solid',
  borderC     : '#666',
  bgColor     : '#eee',
  naviH       : 24,
  showNavi    : false
};

var htmlwinprops = {};

function gethtmlwinprops(width, height)
{
  var l = htmlwinlayout;
  var p = htmlwinprops;

  p.frameW  = l.margin + l.padding + l.borderW;
  p.loadinW = width;
  p.loadinH = height;
  p.innerW  = p.loadinW;
  p.innerH  = height + (l.showNavi==true ? l.naviH : 0);
  p.outerW  = p.innerW + p.frameW * 2;
  p.outerH  = p.innerH + p.frameW * 2;

  return(p);
}

function sethtmlwinlayout(init)
{
  var l = htmlwinlayout;

  if(init.position) l.position = init.position;
  if(init.margin)   l.margin   = init.margin;
  if(init.padding)  l.padding  = init.padding;
  if(init.borderW)  l.borderW  = init.borderW;
  if(init.borderS)  l.borderS  = init.borderS;
  if(init.borderC)  l.borderC  = init.borderC;
  if(init.bgColor)  l.bgColor  = init.bgColor;
  if(init.naviH)    l.naviH    = init.naviH;
  if(init.showNavi) l.showNavi = init.showNavi;

  return(l);
}

function resizehtmlwin(width, height)
{
  if($('htmlwin') == undefined) return;
  
  var l = htmlwinlayout;
  var p = htmlwinprops;
  
  var iframe = $('htmlwin_loadin').contentWindow;

  if(!width || width == 'auto') width = iframe.document.getElementsByTagName('body')[0].firstChild.offsetWidth;
  else if(width == 'keep') width = p.loadinW;

  if(!height || height == 'auto') height = iframe.document.getElementsByTagName('body')[0].firstChild.offsetHeight;
  else if(height == 'keep') height = p.loadinH;
  
  var p = gethtmlwinprops(width, height);

  $('htmlwin').style.width = p.outerW+'px';
  $('htmlwin').style.height = p.outerH+'px';
  $('htmlwin').style.marginLeft = (-p.outerW/2)+'px';

  $('htmlwin_frame').style.width = p.innerW+'px';
  $('htmlwin_frame').style.height = p.innerH+'px';

  $('htmlwin_loadin').style.width = p.loadinW+'px';
  $('htmlwin_loadin').style.height = p.loadinH+'px';

  if(l.showNavi==true)
    $('htmlwin_navi').style.width = p.loadinW+'px';
}

function tweenhtmlwinsize()
{
  if($('htmlwin') == undefined) return;
  
  var l = htmlwinlayout;
  var p = htmlwinprops;
  
  var iframe = $('htmlwin_loadin').contentWindow;
  var iframebody = iframe.document.getElementsByTagName('body')[0];
  
  oldWidth = p.loadinW;
  oldHeight = p.loadinH;
  
  var newWidth = 0;
  var newHeight = 0;
  
  for(var i=0; i < iframebody.childNodes.length; i++)
  {
    var n = iframebody.childNodes[i];
    
    if(n.nodeType == 1 && n.offsetWidth > 0
    && (n.style.position == 'relative'
    || n.style.position == 'absolute'))
    {
      newWidth = Math.max(newWidth, n.offsetWidth);
      newHeight = Math.max(newHeight, n.offsetHeight);
    }
  }
  
  //newWidth = iframe.document.getElementsByTagName('body')[0].firstChild.offsetWidth;
  //newHeight = iframe.document.getElementsByTagName('body')[0].firstChild.offsetHeight;
  
  new Effect.Tween(null, oldWidth, newWidth, { duration: 0.4 }, function(p){ resizehtmlwin(p, 'keep'); });
  new Effect.Tween(null, oldHeight, newHeight, { duration: 0.4 }, function(p){ resizehtmlwin('keep', p); });
}

function openhtmlwin(source, width, height, init)
{
  if(!init) init = {};
  
  var l = sethtmlwinlayout(init);
  var p = gethtmlwinprops(width, height);

  var pagesize = getPageSize();

  var htmlwinbg_CSS =
  'position: absolute; left: 0; top: 0; '+
  'width: '+pagesize[0]+'px; '+
  'height: '+pagesize[1]+'px; '+
  'background-color: #000; z-index: 5000;';

  var htmlwin_CSS =
  'position: '+l.position+'; left: 50%; top: 80px; '+
  'width: '+p.outerW+'px; height: '+p.outerH+'px; '+
  'margin-left: '+(-p.outerW/2)+'px; z-index: 5001;';

  var htmlwin_frame_CSS =
  'width: '+p.innerW+'px; height: '+p.innerH+'px; '+
  'margin: '+l.margin+'px; padding: '+l.padding+'px; '+
  'border: '+l.borderW+'px '+l.borderS+' '+l.borderC+'; '+
  'background-color: '+l.bgColor+';';

  var htmlwin_loadin_CSS =
  'width: '+p.loadinW+'px; height: '+p.loadinH+'px; '+
  'display: block; border: none;';

  var htmlwin_navi_CSS =
  'width: '+p.loadinW+'px; height: '+l.naviH+'px;';

  var htmlwin_btn_CSS =
  'display: block; float: right; '+
  'padding-top: 10px;';

  closehtmlwin();
  var objBody = $$('body')[0];

  objBody.appendChild(Builder.node('div',
  {id:'htmlwinbg', style:htmlwinbg_CSS, className:'zero_alpha'}));

  objBody.appendChild(Builder.node('div',
  {id:'htmlwin', style:htmlwin_CSS}));

  $('htmlwin').appendChild(Builder.node('div',
  {id:'htmlwin_frame', style:htmlwin_frame_CSS}));

  $('htmlwin_frame').appendChild(Builder.node('iframe',
  {id:'htmlwin_loadin', src:source,
  marginheight:'0', marginwidth:'0', frameborder:'0', scrolling:'no',
  allowtransparency:'true', style:htmlwin_loadin_CSS}));

  if(l.showNavi==true)
  {
    $('htmlwin_frame').appendChild(Builder.node('div',
    {id:'htmlwin_navi', style:htmlwin_navi_CSS}));
    
    $('htmlwin_navi').appendChild(Builder.node('a',
    {id:'htmlwin_btnclose', href:'javascript:closehtmlwin();',
    style:htmlwin_btn_CSS}));

    $('htmlwin_btnclose').innerHTML = 'Fenster schliessen';
  }
  
  new Effect.Opacity('htmlwinbg', { from: 0, to: 0.8, duration: 0.25 });
}

function closehtmlwin()
{
  var objBody = $$('body')[0];

  if($('htmlwinbg') != undefined)
    objBody.removeChild($('htmlwinbg'));

  if($('htmlwin') != undefined)
    objBody.removeChild($('htmlwin'));
}

function getPageSize()
{
  var scrollX, scrollY;
  var windowWidth, windowHeight;
  var pageWidth, pageHeight;

  if(window.innerHeight && window.scrollMaxY)
  {
    scrollX = window.innerWidth + window.scrollMaxX;
    scrollY = window.innerHeight + window.scrollMaxY;
  }
  else if(document.body.scrollHeight > document.body.offsetHeight)
  {
    scrollX = document.body.scrollWidth;
    scrollY = document.body.scrollHeight;
  }
  else
  {
    scrollX = document.body.offsetWidth;
    scrollY = document.body.offsetHeight;
  }

  if(self.innerHeight)
  {
    if(document.documentElement.clientWidth)
    {
      windowWidth = document.documentElement.clientWidth;
    }
    else
    {
      windowWidth = self.innerWidth;
    }

    windowHeight = self.innerHeight;
  }
  else if(document.documentElement && document.documentElement.clientHeight)
  {
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  }
  else if(document.body)
  {
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  }

  if(scrollY < windowHeight)
  {
    pageHeight = windowHeight;
  }
  else
  {
    pageHeight = scrollY;
  }

  if(scrollX < windowWidth)
  {
    pageWidth = scrollX;
  }
  else
  {
    pageWidth = windowWidth;
  }

  return [pageWidth,pageHeight];
}
