
/*
idee:
http://de.selfhtml.org/javascript/beispiele/fensterueberwachen.htm
http://binnyva.blogspot.com/2005/11/ahahasynchronous-html-over-http-ajax.html

angepasst: KasCada
*/


function Fensterweite () 
{
  if (window.innerWidth) {
    return window.innerWidth;
  } else if (document.body && document.body.offsetWidth) {
    return document.body.offsetWidth;
  } else {
    return 0;
  }
}

function Fensterhoehe () 
{
  if (window.innerHeight) {
    return window.innerHeight;
  } else if (document.body && document.body.offsetHeight) {
    return document.body.offsetHeight;
  } else {
    return 0;
  }
}

function getPosition(elem)
{
  var x = y = 0;
  if (elem.offsetParent) 
  {
    do
    {
      x += elem.offsetLeft;
      y += elem.offsetTop;
    }
    while (elem = elem.offsetParent);
  }
  return [x,y];
  /*
  position=new Object();
  position.x=x;
  position.y=y;
  return position;
  */
}



var WithLoading = true;

var uraltAusg = true;

function jah(url,target,postData) 
{
  if (WithLoading)
  {
    e = document.getElementById('JLoading');
    if (e)
    {
      e.innerHTML = 'loading...';
      e.style.display = 'block';
    }
  }

  var method = postData ? "POST" : "GET";

  if (window.XMLHttpRequest) 
  {
    req = new XMLHttpRequest();
  } 
  else if (window.ActiveXObject) // IE/Windows ActiveX version
  {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if (uraltAusg)
  {
    uraltAusg = false;
    alert("Sie verwenden leider einen total veralteten Browser!");
    return;
  }

  if (!req) 
  {
    alert("Ihr Browser ist wohl veraltet");
    return;
  }

  //if (postData)
  // req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  req.onreadystatechange = function() {jahDone(url,target);};
  req.open(method, url, true);
  
  if (req.readyState == 4) return;
  req.send(postData);

}    

function jahDone(url,target) // only if req is "loaded"
{
  if (req.readyState != 4) // ok
    return;

  if (WithLoading)
  {
    e = document.getElementById('JLoading');
    if (e) 
    {
      // e.innerHTML = 'aus';
      e.style.display = 'none';
    }
  }

  var e = document.getElementById(target);

  // only if "OK"
  if (req.status != 200) 
  {
    if (!e)  e = document.body;
    e.innerHTML="jah error:\n" + req.status;
    //if (req.statusText)  e.innerHTML+=req.statusText;
    return;
  }

  var result = req.responseText;

  if (result == "reload")  
  {
    top.location=self.location;
    return;
  }
  else if (result.substr(0,4) == "step")
  {
    // step[n][SPACE][restliche Seite]
    var start = result.indexOf("-ASTART-");
    if (start>=0)
    {
      var lastMonStep = monStep;
      monStep = 1000 * parseInt(result.substr(4));
      if (monStep)
      {
	var jetzt = new Date();
	monNext = jetzt.getTime() + monStep;
      }
      result = result.substr(start+8);
    }
  }
  else if (result.substr(0,3) == "sub")
  {
    // sub [sec] [url]
    // sub sec /_akte/ap/monitor/sub/admin/fehlt/123/
    var w = result.split(" ");
    monStep =  w[1] * 1000;
    LastMonUrl = w[2];
    result = "reload...";
    monNext = 0;  // gleich in 1 sek
  }
  else if (result.substr(0,5) == "ALERT")
  {
    AEditFormClose();
    alert(result.substr(6));
    return;
  }
  else if (result.substr(0,7) == "AEditOK")
  {
    result = result.substr(8);
    AEditFormClose();
    // und weiter um wert zu schreiben, wenn target angegeben wurde

    // result = result.replace(/</,"&lt;").replace(/>/,"&gt;");
    if (!e) return;
    // dumm nur, wenn der Button im Element ist, dann muss dieser erhalten bleiben:

    if (e.innerHTML.substr(0,2) == "<a")
    {
      var t = e.innerHTML; 
      var pos = t.search(/&nbsp;/);
      if (pos>6)
	result = t.substr(0,pos+6) + result;
    }
  }
 
  if (e) e.innerHTML = result;
  if (TArray[url])
    TArray[url].T = result;
  else
    TArray[url] = new TElem(result); 
}



/* T... */

function TElem (t)
{
  this.T = t;
}

var TArray = new Array();


function TSet (target,t) 
{
  document.getElementById(target).innerHTML = t;
}



function TLoad (url,target,force) 
{
  if (!force && TArray[url])   document.getElementById(target).innerHTML = TArray[url].T;
  else                         jah(url,target);
}


/* Auswahl */

function AElem (t)
{
  this.T = t;
  this.An = false;
}


var AnAusA = new Array();

var AuswAn = false;

function AnAusF (url,target,force)
/* force: immer neu laden */
{
  if (!AnAusA[target])
  {
    AnAusA[target] = new AElem(document.getElementById(target).innerHTML);
  }

  AnAusA[target].An = !AnAusA[target].An;
  if (AnAusA[target].An)
  {
    TLoad(url,target,force);
    document.getElementById(target).style.display = 'block';
  }
  else
  {
    TSet(target,AnAusA[target].T);
  }
  return false;
}
  
function AnAus (url,target)
{
  return AnAusF(url,target,false); 
}
  
  
function AnAus_Aus (target, node)
{
  if (!AnAusA[target])
    return;

  AnAusA[target].An = false;
  TSet(target,AnAusA[target].T);

  e = document.getElementById(target);
  if (e) e.style.display = 'none';
  if (node)  node.style.color = '';
}


function AkteButton (url,target)
{
  e = document.getElementById('IMain');
  if (e)
  {
    if (AnAusA['Auswahl'] && AnAusA['Auswahl'].An)  e.style.display = 'block';
    else                       e.style.display = 'none';
  }

  return AnAus(url,'Auswahl'); 
}

function AkteButton_Aus ()
{
  e = document.getElementById('IMain');
  if (e)  e.style.display = 'block';

  AnAus_Aus('Auswahl');
}



/* AUp */



function FindSiblingbyClass (node,className)
{
  while (1)
  {
    node = node.nextSibling;
    if (!node)  return null;
    if (node.className == className)  return node;
  }
}


function AUpOver (node)
{
  if (node.parentNode.Up)  return;
  var over = FindSiblingbyClass(node,'over');
  if (over)  over.style.display = 'block';
}

function AUpOut (node)
{
  if (node.parentNode.Up)  return;
  var over = FindSiblingbyClass(node,'over');
  if (over)  over.style.display = 'none';
}

function AUpOn (node)
{
  AUpOut(node);

  var up = FindSiblingbyClass(node,'up');
  if (!up)  return;

  node = node.parentNode;

  if (node.Up)
  {
    up.style.display = 'none';
    node.Up = false;
  }
  else
  {
    up.style.display = 'block';
    node.Up = true;
  }

}


function AUpOff (node)
{
  node = node.parentNode.parentNode.parentNode;
  if (!node)  return;

  node.style.display = 'none';
  node.parentNode.Up = false;
}


/* Monitor */

var monOverVerz = null;
var monOverSec = 0;

function monOver (node,url)
// !node, verändert den Knopf nicht
{
  monOverVerz = url;
  monOverSec = 2;
  if (node)  
  {
    node.style.color = '#000060';
    node.style.backgroundColor = '#FFFFFF';
    node.style.border = '3px inset #000080';
  }
  // return AnAusF(url,'HelpWindow',false);
}

function monAus (node)
{
  if (node)  
  {
    node.style.color = '';
    node.style.backgroundColor = '';
    node.style.border = '3px outset #000080'; 
  }
  monOverVerz = null;
  return AnAus_Aus('HelpWindow',node);
}

var LastMonUrl = '';

function monClick (node,url,sec) 
{
  monStep = sec * 1000;
  if (sec)  LastMonUrl = url;
  else      
  {
    LastMonUrl = '';
    document.getElementById("zeit").innerHTML = '';
  }
  if (node) monAus(node);
  TSet('fenster','einen Moment bitte...') 
  TLoad(url,'fenster',true);   // ruft jah auf
  setTimeout('monTime()',300);
}



var monRunning = true;
var monStep = 0;
var monNext = 0;
var monReload = 0;

function monTime ()
{
  var zeit = document.getElementById("zeit");
  if (!zeit)  return;

  var t;
  var jetzt = new Date();
  var min = jetzt.getMinutes();
  var sec = jetzt.getSeconds();
  var akt = jetzt.getTime();

  t = jetzt.getHours()+':';
  if (min < 10)  t += '0';
  t += min + ':';
  if (sec < 10)  t += '0';
  t += sec;
  zeit.innerHTML = t;

  if (monOverVerz)
  {
    if (monOverSec == 0)
    {
      AnAusF(monOverVerz,'HelpWindow',false);
      monOverVerz = null;
    }
    else
    {
      monOverSec--;
      setTimeout('monTime()',500);
      return;
    }
  }

  if (monRunning && monStep)
  {
    if (!monReload)  
    {
      monReload = akt + (3*3600000);
    }
    else if (akt > monReload)
    {
      monReload = 0;
      top.location.href = "/_akte/apage/monitor/";
      return;
    }


    zeit.innerHTML += "<br><small>stop<small>";
    
    if (LastMonUrl)
    {
      var left = (monNext - akt) / 1000;
      if (left <= 0)
      {
	monNext = akt + monStep;
	TLoad(LastMonUrl,'fenster',true); 
      }
      else zeit.innerHTML += " " + Math.ceil(left);
    }
  }
  else if (monStep)
  {
    zeit.innerHTML += "<br><small>weiter<small>";
  }

  setTimeout('monTime()',1000);
}

function monStop ()
{
  monRunning = !monRunning;
  if (monRunning)  setTimeout('monTime()',100); // 100msec
}


/*
if(top==self) alert("top "+self.location.href);
 else alert("!top"+self.location.href);
*/



function TestCall ()
{
  e = document.getElementById('TestElem');
  if (e)  e.innerHTML = "???";

  jah("http://green.akte.de/_akte/dat/ok.txt","TestElem") 
}


/* User */

function UserOver ()
{
  AnAusF('/_akte/apage/start/atexte/user/userbutton/inc/','HelpWindow',false);

  return false;
}

function UserAus ()
{
  AnAus_Aus('HelpWindow');
  return false;
}




function PMitElem (top,border,backgroundColor)
{
  this.Loaded = false;
  this.top = top;
  this.border = border;
  this.backgroundColor=backgroundColor;
}


var AktMitNr = 0;

/*
function PMit_alle (offen)
{
  for (var i = 1; i <= MitAnz; i++)
  {
    var elem = document.getElementById("PMit"+i);
    if (elem)
    {
      var table = elem.firstChild;
      var on = table.nextSibling;
      var div = table.firstChild.firstChild.firstChild.firstChild.firstChild;

      if (!PMitA[i])
      {
	PMitA[i] = new PMitElem(elem.style.top,elem.style.border,elem.style.backgroundColor);
      }


      if (div.hasChildNodes())
      {
	var bild = div.firstChild;

	if (i == offen)
	{
	  bild.style.display="block";
	  div.style.width = bild.width;
	  div.style.height = bild.height;
	}
	else
	{
	  bild.style.display="none";
	  div.style.width = lBild;
	  div.style.height = lBild;
	}
      }

      if (i == offen)
      {
	on.style.display="block";
	elem.style.zIndex=300;
	elem.style.left=-50;
	elem.style.width=800;
	elem.style.height='';
	elem.style.border=borderOver;
	elem.style.backgroundColor = MitBackgroundColor;


	var top = parseInt(elem.style.top) - 100;
	elem.style.top=top+"px";
      }
      else
      {
	on.style.display="none";
	elem.style.zIndex=210;
	elem.style.left=0;
	elem.style.width=MitW;
	elem.style.height=MitH;
	elem.style.border=PMitA[i].border;
	elem.style.top=PMitA[i].top;
	elem.style.backgroundColor=PMitA[i].backgroundColor;
      }

      table.style.width=elem.style.width;

    }
  }
}
*/


function PInfoOver (refElem,was,klick,topDiff)
// topDiff: zusätzliche Verschiebung
{
  elem = document.getElementById("PInfo");
  if (elem)
  {
    if      (was=="vor")    was = "weitere&nbsp;Infos";
    else if (was=="mit")    was = "zum&nbsp;Mitarbeiter";
    else if (was=="close")  was = "Vorschau schlie&szlig;en";
    else if (was=="frei")       was = "frei und wartend";
    else if (was=="sprechend")  was = "Ihr Berater ist in einem Gespräch";
    else if (was=="offline")    was = "Der Berater ist zur Zeit nicht angemeldet";
    else if (was=="Wertung")  was = "Die Mitarbeiterbewertung fehlt noch!";

    var t = "";
    if (klick) t = "<i>Klick:</i>";
    t += was;
    elem.innerHTML = t;

    var top = 0;
    /*
    if (AktMitElem)
    {
      top = parseInt(AktMitElem.style.top);
      // elem.style.left = (MitW+500)+"px";  // !!!
    }
    else
      */
if (refElem)
    {
      var pos = getPosition(refElem);
      top = pos[1];
    }

    top += parseInt(topDiff);
    if (top<0) top=10;
    elem.style.top = top + "px";
    elem.style.display="inline";
  }
}

function PInfoOut ()
{
  elem = document.getElementById("PInfo");
  if (elem)
  {
    elem.style.display = "none";
  }
}


function PMitOff ()
{
  AktMitNr = 0;
  PInfoOut();

  MitOver = document.getElementById("PMitOver");
  if  (MitOver)  MitOver.style.display = "none";
}

function PMitOn (posY,mitNr)
{
  if (AktMitNr)
  {
    PMitOff();
    return;
  }

  PInfoOut();

  MitOver = document.getElementById("PMitOver");
  if  (!MitOver)
  {
    alert("sie verwenden einen veralteten Browser");
    return;
  }

  AktMitNr = mitNr;

  posY -= 200;
  if (posY<-50) posY=-50;

  MitOver.style.display = "block";
  MitOver.style.top = posY + "px";

  var url = urlText+mitNr;
  if (TArray[url])
  {
    MitOver.innerHTML = TArray[url].T;
    return;
  }

  MitOver.innerHTML = "einen kleinen moment bitte, ich lade ...";

  jah(url,"PMitOver");
}




/* AEditButton */

var AEditKennung = "";
var AEditElemID = "";

function AEditFormClose ()
{
  elem = document.getElementById("AEditForm");
  if (!elem)  return;

  elem.style.display="none";
  elem.innerHTML = "";

  AEditKennung = 0;
}

function AEditButton (kennung,elemid)
{ 
  if (AEditKennung)
  {
    AEditFormClose();
    return;
  }

  vAEditForm = document.getElementById("AEditForm");
  if (!vAEditForm)  return;

  AEditKennung = kennung;
  AEditElemID = elemid;

  vAEditForm.innerHTML="einen Moment...";
  vAEditForm.style.display="inline";

  var url = "/_akte/ap/system/aedit/entry/show/"+AEditKennung;
  jah(url,"AEditForm");
}


function AEditFormSubmit (typ) 
{
  var input = "";
  var form = document.forms.AEditFormular;
  if (typ == "liste")
  {
    for (var i in form.elements)
    {
      var e = form.elements[i];
      if (e.type == "checkbox" && e.checked)
	input += e.name+' ';
    }
  }
  else
  {
    input = form.AEditInput.value;
  }
  var url = "/_akte/ap/system/aedit/entry/input/"+AEditKennung;

  var postdata = "input=" + escape(input);
  // alert("postdata: "+postdata);
  jah(url,AEditElemID,postdata);
  return false;
}
