var attribWithAll="location=no,menubar=no,toolbar=no,status=no";
attribWithAll+=",resizable=yes,scrollbars=yes,width=640,height=450";

var subwindow=0,errcount=0,divcount=0,errlist="",errboard=0,elapse=500,xvelo=1,yvelo=1;
var aufgabe=0;
var initLocus=0;
var Handler=0;
var sublocation="";
var thelocation="";
var difflocation="";
var glob_msgpart=0;
var max=1;

function minimax()
{
  var msgboard=subwindow.document.getElementById("bmsgbox");
  if ((typeof(msgboard)=="object")&&msgboard&&glob_msgpart)
  {
    if (max)
    {
      msgboard.removeChild(glob_msgpart);
      max=0;
    }
    else
    {
      msgboard.appendChild(glob_msgpart);
      max=1;
    }
  }
}

window.minimax=minimax;

function SetHandler(a)
{
  Handler=a;
}

function ClosePopUp()
{
  if (!subwindow)
    return;
  if (subwindow.closed)
    return;
  subwindow.close();
}

function OpenPopUp(a)
{
  ClosePopUp();
  subwindow=window.open(a,"additional",attribWithAll);
  subwindow.moveTo(10,50);
  initLocus=1;
  if ((aufgabe)||(Handler))
    window.setTimeout("RunWatcher();",500);
}

function RunWatcher()
{
  var exceptionCode=0,runme=1;
  try
  {
    if ((subwindow)&&(!subwindow.closed))
      DoMove();
    else
    {
      runme=0;
      errcount=0;
      errlist="";
    }
    ShowMessages();
  }
  catch (e)
  {
    errcount++;
    exceptionCode=e;
  }
  finally
  {
    if (exceptionCode)
      errlist+=errcount+": "+exceptionCode+"<br>\n";
    else
    {
      errcount=0;
      errlist="";
    }
    ShowMessages();
  }
  if ((aufgabe||Handler)&&runme&&(errcount<30))
    window.setTimeout("RunWatcher();",elapse);
}

function DoMove()
{
  if ((typeof(subwindow.document)=="undefined")||(!subwindow.document))
  {
    errcount++;
    return;
  }
  if ((typeof(subwindow.document.getElementById)=="undefined")||(!subwindow.document.getElementById))
  {
    errcount++;
    return;
  }
  sublocation=subwindow.document.location.href;
  if ((!sublocation)||(sublocation=="about:blank")||(sublocation.length<3))
    return;
  sublocation.replace(/\\/,"/");
  if (initLocus)
  {
    thelocation=sublocation;
    thelocation=thelocation.substr(0,thelocation.lastIndexOf("/")+1);
  }
  if (sublocation.indexOf(thelocation)!=0)
  {
    ClosePopUp();
    return;
  }
  initLocus=0;
  difflocation=sublocation.substr(thelocation.length,sublocation.length-thelocation.length);
  var msgboard=subwindow.document.getElementById("bmsgbox");
  var subbody=subwindow.document.body;
  var doInit=0;
  if ((!(typeof(msgboard)=="object"))||(!msgboard))
  {
    max=1;
    glob_msgpart=0;
    doInit=1;
    msgboard=subwindow.document.createElement("div");
    divcount++;
    msgboard.style.position="absolute";
    msgboard.style.left="-300px";
    msgboard.style.top="-300px";
    msgboard.style.width="250px";
    msgboard.style.minWidth="250px";
    msgboard.style.minHeight="20px";
    msgboard.style.maxWidth="250px";
    msgboard.style.border="solid 3px #602020";
    msgboard.style.background="transparent";
    msgboard.style.zIndex=2;    msgboard.style.margin="0px";
    msgboard.style.padding="3px";
    msgboard.style.overflow="visible";
    msgboard.id="bmsgbox";
    var msgpart=subwindow.document.createElement("div");
    msgpart.style.position="relative";
    msgpart.style.fontFamily="helvetica,sans-serif";
    msgpart.style.fontSize="12px";
    msgpart.style.color="#102030";
    msgpart.style.border="solid 1px #602020";
    msgpart.style.background="#FFFFF0";
    msgpart.style.zIndex=3;
    msgpart.style.margin="2px";
    msgpart.style.padding="3px";
    msgpart.style.overflow="visible";
    glob_msgpart=msgpart;
    var msghead=subwindow.document.createElement("div");
    msghead.style.position="relative";
    msghead.style.fontFamily="helvetica,sans-serif";
    msghead.style.fontSize="18px";
    msghead.style.fontWeight="bold";
    msghead.style.color="#102030";
    msghead.style.border="solid 3px #602020";
    msghead.style.background="#FFFFE0";
    msghead.style.zIndex=3;
    msghead.style.margin="2px";
    msghead.style.padding="3px";
    msghead.style.overflow="visible";
    var msgbtn=subwindow.document.createElement("div");
    msgbtn.style.position="absolute";
    msgbtn.style.fontFamily="helvetica,sans-serif";
    msgbtn.style.fontSize="12px";
    msgbtn.style.color="#102030";
    msgbtn.style.border="solid 1px #602020";
    msgbtn.style.background="#FFFFD0";
    msgbtn.style.zIndex=3;
    msgbtn.style.margin="2px";
    msgbtn.style.padding="5px";
    msgbtn.style.overflow="visible";
    msgbtn.style.textAlign="right";
    msgbtn.style.width="70px";
    msgbtn.style.left="180px";
    msgbtn.style.top="-10px";
    if (Handler)
      aufgabe=Handler(difflocation);
    msgpart.innerHTML=aufgabe;
    msghead.innerHTML='Wegweiser';
    msgbtn.innerHTML='<a href="javascript:window.opener.minimax();" style="text-decoration:none;">+- minimax</a>';
    subbody.appendChild(msgboard);
    msgboard.appendChild(msghead);
    msgboard.appendChild(msgbtn);
    msgboard.appendChild(msgpart);
  }
  var x=msgboard.offsetLeft;
  var y=msgboard.offsetTop;
  var xsize=subbody.clientWidth;
  var ysize=subbody.clientHeight;
  if (typeof(window.innerWidth)=="number")
  {
    xsize=subwindow.innerWidth;
    ysize=subwindow.innerHeight;
  }
  var xscroll=subbody.scrollLeft;
  var yscroll=subbody.scrollTop;
  var xt=xscroll+xsize-msgboard.offsetWidth-40;
  var yt=yscroll+ysize-msgboard.offsetHeight-20;
  if (doInit)
  {
    x=xt;
    y=-msgboard.offsetHeight;
    msgboard.style.left=x+"px";
    msgboard.style.top=y+"px";
    elapse=50;
    return;
  }
  if (x!=xt)
  {
    xvelo*=2; if (xvelo>60) xvelo=60;
    var xdiff=Math.abs(x-xt)/2;
    if (xvelo>xdiff)
      xvelo=xdiff/2;
    if (xvelo<1)
      xvelo=1;
    if (x>xt) x-=xvelo; else x+=xvelo;
  }
  else if (y!=yt)
  {
    yvelo*=2; if (yvelo>32) yvelo=32;
    var ydiff=Math.abs(y-yt);
    if (yvelo>ydiff/2)
      yvelo=ydiff/2;
    if (yvelo<1)
      yvelo=1;
    if (y>yt) y-=yvelo; else y+=yvelo;
  }
  if (y<yscroll-msgboard.offsetHeight)
  {
    x=xt;
    y=yscroll-msgboard.offsetHeight;
  }
  if (y>yscroll+ysize)
  {
    x=xt;
    y=yscroll+ysize;
  }
  if (x<xscroll-msgboard.offsetWidth)
  {
    y=yt;
    x=xscroll-msgboard.offsetWidth;
  }
  if (x>xscroll+xsize)
  {
    y=yt;
    x=xscroll+xsize;
  }
  elapse=500;
  if (msgboard.offsetLeft!=x)
  {
    elapse=50;
    msgboard.style.left=x+"px";
  }
  else
    xvelo=1;
  if (msgboard.offsetTop!=y)
  {
    elapse=50;
    msgboard.style.top=y+"px";
  }
  else
    yvelo=1;
}

function ShowMessages()
{
  if (!errboard)
    errboard=document.getElementById("errdiv");
  if (!(subwindow)||(subwindow.closed))
    errboard.innerHTML="";
  else
    errboard.innerHTML=divcount+". Element - "+errcount+" Errors:<br>\n"+errlist;
}
