/*******************************************************************************
*
* © 2008 Copyright A-Vision
*
* File description :       User interface functions
* 
* Created by       :       Arnold Velzel
* Created on       :       15/12/2008
*
* Last changed by  :       Arnold Velzel
* Last changed on  :       <LastChanged>
* 
*******************************************************************************/

function positiondirectentry( div)
{
 var t = 0;
 var l = 0;
 var obj = div.obj;
 var position = div.getAttribute('position');
 var appSize = applicationSize();
 var maxHeight = appSize[1];
 var maxWidth = appSize[0];
 switch ( position) {
  case "auto":
   t = eval( positionTop( obj) + obj.offsetHeight + 5);
   div.style.top = t+"px";
   if (div.offsetTop+div.offsetHeight>maxHeight) {
    div.style.top = eval(maxHeight-div.offsetHeight-20)+"px";
   }

   l = eval( positionLeft( obj) + 5);
   div.style.left = l+"px";
   if (div.offsetLeft+div.offsetWidth>maxWidth) {
    div.style.left = eval(maxWidth-div.offsetWidth-20)+"px";
   }
   break;
  case "center":
   t = eval( (maxHeight-div.offsetHeight)/2);
   div.style.top = t+"px";
   l = eval( (maxWidth-div.offsetWidth)/2);
   div.style.left = l+"px";
   break;
  case "relative":
   pdata = position.split(":");
   if ( pdata[0]=="relative") {
    t = eval( positionTop( obj)) + eval( pdata[2]);
    div.style.top = t+"px";
    if (div.offsetTop+div.offsetHeight>maxHeight) {
     div.style.top = eval(maxHeight-div.offsetHeight-20)+"px";
    }
 
    l = eval( positionLeft( obj)) + eval( pdata[1]);
    div.style.left = l+"px";
    if (div.offsetLeft+div.offsetWidth>maxWidth) {
     div.style.left = eval(maxWidth-div.offsetWidth-40)+"px";
    }
   }
   break;
 }
}

function setFocus( div)
{
 var focussed = false;
 var inputs = div.getElementsByTagName("INPUT");
 if ( inputs.length) {
  for (var i=0;i<inputs.length && !focussed;i++) {
   if (( inputs[i].type != "hidden") && !inputs[i].readOnly) {
    try {
     inputs[i].focus();
     focussed = true;
    }
    catch (e) {
    }
   }
  }
 }
 if ( !focussed) {
  var links = div.getElementsByTagName("A");
  if ( links.length) {
   links[0].focus();
   focussed = true;
  } else {
   div.childNodes[0].focus();
   focussed = true;
  }
 }
 if ( !focussed) {
  div.firstChild.focus();
 }
}

function popdirectentry( obj)
{
 if ( !obj.getAttribute('popurl')) {
  if ( !obj.getAttribute('directentry')) return;
 }
 if ( obj.getAttribute('directentryid')) {
  this.id = "directentrybox_"+obj.getAttribute('directentryid');
 } else {
  this.id = "directentrybox";
 }

 var div = document.getElementById(this.id);
 if ( div) {
//  positiondirectentry( div);
 }

 if (( obj.entryObject != div) && (this.id == "directentrybox")) {
  removedirectentries();
 } else {
  if ( obj.entryObject) {
   return( false);
  }
 }

 div = document.createElement( 'DIV');
 div.id = this.id;
 div.className = "directentrybox";
 div.setAttribute("linkedID", obj.id);
// div.style.position = "absolute";
 div.style.position = "fixed";
 div.obj = obj;

 deBorder = obj.getAttribute('directentryborder');
 if ( !deBorder) deBorder = "";
 div.style.border = deBorder;

 deBGcolor = obj.getAttribute('directentrybackground');
 if ( !deBGcolor) deBGcolor = "transparent";
 div.style.background = deBGcolor;

 div.style.zIndex = 9999;
 div.onclick = function(e) {
  if ( !e) e = window.event;
  if ( e.stopPropagation) e.stopPropagation();
  e.cancelBubble = true;
 };
 var directentryURL = obj.getAttribute('directentry');
 if ( !directentryURL) directentryURL = obj.getAttribute('popurl');
 div.setAttribute( "url", directentryURL);
 div.setAttribute('directentrybox',true);

 var position = "auto";
 if ( obj.getAttribute('directentryposition')) {
  position = obj.getAttribute('directentryposition');
 }
 div.setAttribute('position',position);

 var btop = document.createElement( 'DIV');
 btop.className = "entrybox-border-top";
 btop.innerHTML = "<DIV class='entrybox-border-top1'></DIV><DIV class='entrybox-border-top2'></DIV><DIV class='entrybox-border-top3'></DIV><DIV class='entrybox-border-top4'></DIV><DIV class='entrybox-border-top5'></DIV>";
 div.appendChild( btop);

 var defaultText = obj.getAttribute('directentrytext');
 if ( !defaultText) defaultText = "<SMALL><DIV style='font-size:9px;padding:2px;background-color:#222;color:#F6EE26;border:1px solid #000;opacity:0.8;'>Even geduld AUB,<br>bezig met laden ...</DIV></SMALL>";
 var bcenter = document.createElement( 'DIV');
 bcenter.className = "entrybox-border-center";
 bcenter.innerHTML = "<DIV class='entrybox-border-center1' id='entrybox-center-content'>"+defaultText+"</DIV>";
 div.appendChild( bcenter);

 var bbottom = document.createElement( 'DIV');
 bbottom.className = "entrybox-border-bottom";
 bbottom.innerHTML = "<DIV class='entrybox-border-bottom5'></DIV><DIV class='entrybox-border-bottom4'></DIV><DIV class='entrybox-border-bottom3'></DIV><DIV class='entrybox-border-bottom2'></DIV><DIV class='entrybox-border-bottom1'></DIV>";
 div.appendChild( bbottom);

 bcenter.setAttribute("HTMLloading",bcenter.innerHTML);

 if ( obj.getAttribute("hiddenentry") && ( obj.getAttribute("hiddenentry")=="1")) {
  div.style.visibility = "hidden";
 }
 document.body.appendChild( div);
 obj.entryObject = div;

 url = div.getAttribute( "url");
 if ( url.indexOf('?')>=0) {
  url += "&random="+Math.random();
 } else {
  url += "?random="+Math.random();
 }
 if (( obj.getAttribute("directentrymode") == "onchange") || ( obj.getAttribute("directentrymode") == "onblur")) {
  // Makes sense to submit the value as well if someting is supposed to be done onchange
  url += "&change="+encodeURIComponent(obj.value);
  url += "&changename="+encodeURIComponent(obj.name);
  url += "&"+encodeURIComponent(obj.name)+"="+encodeURIComponent(obj.value);
 }

 positiondirectentry( div);
 if ( div.obj.getAttribute( "HTMLcontent")) {
  div.innerHTML = div.obj.getAttribute( "HTMLcontent");
  if ( typeof(positiondirectentry)=='function') positiondirectentry( div);
  if ( typeof(initDragging)=='function') initDragging( div);
  if ( typeof(setnotifications)=='function') setnotifications( div);
  if ( typeof(setdirectentries)=='function') setdirectentries( true, div);
  setFocus( div);

  if ( document.body.onclick) {
   document.body._onclick = document.body.onclick;
  } else {
   document.body._onclick = null;
  }
  document.body.onclick = function() {
   removedirectentries();
   if ( document.body._onclick) {
    document.body.onclick = document.body._onclick;
    document.body._onclick = null;
    document.body.onclick();
   } else {
    document.body.onclick = null;
   }
   return( false);
  }
 
 } else {
  getServerHtml( url, bcenter, function( bcenter) {
   if ( bcenter) {
    div = bcenter.parentNode;
    if (( bcenter.innerHTML == "") || ( bcenter.innerHTML == bcenter.getAttribute("HTMLloading"))) {
     document.body.removeChild( div);
    } else {
     div.style.visibility = "";
     if ( div.getAttribute( "STATICcontent")) div.obj.setAttribute( "HTMLcontent", div.innerHTML);
     if ( typeof(positiondirectentry)=='function') positiondirectentry( div);
     if ( typeof(initDragging)=='function') initDragging( div);
     if ( typeof(setnotifications)=='function') setnotifications( div);
     if ( typeof(setdirectentries)=='function') setdirectentries( true, div);
     setFocus( div);

     if ( document.body.onclick) {
      document.body._onclick = document.body.onclick;
     } else {
      document.body._onclick = null;
     }
     document.body.onclick = function() {
      removedirectentries();
      if ( document.body._onclick) {
       document.body.onclick = document.body._onclick;
       document.body._onclick = null;
       document.body.onclick();
      } else {
       document.body.onclick = null;
      }
      return( false);
     }

    }
   }
  }, function() {
   removedirectentries();
  });
 }
 
}
function removedirectentries()
{
 removenotifies();
 var divs = document.getElementsByTagName('DIV');
 for (var i=0;i<divs.length;i++) {
  if ( divs[i] && divs[i].getAttribute('directentrybox')) {
   document.body.removeChild( divs[i]);
   if ( document.body._onclick) {
    document.body._onclick();
    document.body.onclick = document.body._onclick;
    document.body._onclick = null;
   }
  }
 }
}

function setdirectentries( skipclose, blk)
{

 if ((typeof(skipclose)!="boolean") || ( (typeof(skipclose)=="boolean") && !skipclose)) {
  removedirectentries();
 }
 var entrymode = null;
 var divs = null;

 if (skipclose && (typeof(skipclose)=="object")) {
  divs = skipclose.getElementsByTagName('*');
 } else {
  if (blk && (typeof(blk)=="object")) {
   divs = blk.getElementsByTagName('*');
  } else {
   divs = document.getElementsByTagName('*');
  }
 }

 for (var i=0;i<divs.length;i++) {
  if ( divs[i].getAttribute('directentry')) {
   if ( divs[i].getAttribute('innerHtmlText')) divs[i].innerHTML = divs[i].getAttribute('innerHtmlText');
   entrymode = "onclick";
   if ( divs[i].getAttribute('directentrymode')) {
    entrymode = divs[i].getAttribute('directentrymode');
   }
   switch (entrymode) {
    case "onmouseover" :
     if ( divs[i].title) divs[i].title = "";
   	 divs[i].onmouseover = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
   	 divs[i].onmouseout = function(e) {
      removedirectentries();
     }
     break;
    case "onclick" :
   	 divs[i].onclick = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
     break;
    case "onchange" :
   	 divs[i].onchange = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      // The onChange event must be handled as normal.
//      if ( e.stopPropagation) e.stopPropagation();
//      e.cancelBubble = true;
//      return(false);
   	 }
     break;
    case "onmousedown" :
   	 divs[i].onmousedown = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
    case "onmouseup" :
   	 divs[i].onmouseup = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
    case "onfocus" :
   	 divs[i].onfocus = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
    case "onblur" :
   	 divs[i].onblur = function(e) {
   	  popdirectentry( this);
      if ( !e) e = window.event;
      if ( e.stopPropagation) e.stopPropagation();
      e.cancelBubble = true;
      return(false);
   	 }
     break;
   }
  }
 }
}
