/* Globale variabelen benodigd voor panel slepen */
var _panelDragPoint = null; // Start van drag-actie
var _panelOriPos = null; // Initiele positie van drag-object
var _LegendTimer = 0;
var _ZoekPanelTimer = 0;
var _InfoPanelTimer = 0;

/*
 * mouseClick events toekennen aan panel headers
 */
function SetPanelEventHandlers()
{  
  // alert('panels.js 13 ahhlo');
  var lst = document.getElementsByTagName("A");
  for (var i=0; i<lst.length; i++)
  {
    if (lst.item(i).className.toLowerCase().indexOf("togglebutton") == 0)
    {
      lst.item(i).onclick = PanelHeaderClick;
      var panel = GetTogglePanel(lst.item(i));
      SetBgImage(lst.item(i), !ControlIsVisible(panel));
    }
  } 
  
  // Maak "tool" panel verplaatsbaar door de titelbalk te verslepen
  var panel = getControl("divPanel");
  if (panel)
  {
    //lst = panel.childNodes;
    lst = panel.getElementsByTagName("DIV");
    for (i=0; i<lst.length; i++)
    {
      
      var s = lst.item(i).className;
      if (!s) continue;
      if (s.toLowerCase() == "toolpanelcaption")
      {
        lst.item(i).onmousedown = panelStartDrag;
        lst.item(i).style.cursor = "move";
        break;
      }
    }
  }
  
  // Auto-complete dropdowns aanmaken
  /*
  var textbox = document.getElementById("ucPerceelAdres_txtStraat");
  var combo = document.getElementById("ucPerceelAdres_ddStraat");
  if (combo && textbox) 
    var oTextbox = new AutoSuggestControl(textbox, new ComboSuggest(combo, 25)); 
    
  var textbox = document.getElementById("ucPerceelAdres_txtHuisnummer");
  var combo = document.getElementById("ucPerceelAdres_ddHuisnummer");
  if (combo && textbox) 
    var oTextbox = new AutoSuggestControl(textbox, new ComboSuggest(combo, 25)); 
  */
}

/*
 * Retourneer panel behorend bij de "inklap-button"
 */
function GetTogglePanel(node)
{
  var elem = node.parentNode.parentNode;
  var lst = elem.getElementsByTagName("DIV");
  for (var i=0; i<lst.length; i++)
    if (lst.item(i).className.toLowerCase() == "panel")
      return lst.item(i)
      
  // Uitzondering voor toolpanel
  return getControl("divToolPanel");
}

/*
 * Achtergrondplaatje instellen voor "inklap-button"
 */
function SetBgImage(btn, hidden)
{
  btn.className = hidden ? "toggleButtonHidden" : "toggleButton";
  btn.title = hidden ? "Toon dit panel" : "Verberg dit panel";
}

/*
 * panel aan- of uitzetten (hoofdgroepen, kaartlagen, etc)
 */
function PanelHeaderClick(e)
{
  this.blur();
  
  // Paneel in- of uitklappen
  var panel = GetTogglePanel(this);
  if (panel)
  {
    SetControlVisible(panel, !ControlIsVisible(panel));
    SetBgImage(this, !ControlIsVisible(panel));
    AdjustPanelHeight(GetPanelSpace());
        
    if(panel.id=='divToolPanel')
    {
        var titleBar = getControl('panelTitlebar');
        if(!ControlIsVisible(panel))
        {
            //alert('panels.js 103 panel.id: '+panel.id +'\n this.id: '+titleBar.id);
            
            titleBar.style.width='160px';
            titleBar.style.minwidth='160px';
        }
        else
        {
           titleBar.style.width=panel.style.width;
        }
    }
  }
  
  return false;
}

/*
 * max-height van kaartlaag panel aanpassen
 */
function AdjustPanelHeight(availableHeight)
{  
  // Hoogte van overige panels gaat eraf 
//  availableHeight -= getControl("HoofdgroepenContainer").offsetHeight;
  availableHeight -= getControl("OverzichtskaartContainer").offsetHeight;
//  availableHeight -= getControl("BookmarksContainer").offsetHeight;
  
  var divKL = getControl("divKaartlagen");
  var vis = ControlIsVisible(divKL);
  SetControlVisible(divKL, false);
  
  // bereken hoogte van header, footer en margins van Hoofdgroepen en Kaartlagen panels
  availableHeight -= getControl("KaartlagenContainer").offsetHeight;

  if (availableHeight <= 20) 
    availableHeight = 150;
  divKL.style.height = availableHeight + "px";  
    
  SetControlVisible(divKL, vis);
}

/*
 * Start drag operatie
 */
function panelStartDrag(e)
{
  if (!e) e = window.event;
  
  // Niet slepen als op Close is gedrukt
  if (getSrcElement(e).className.toLowerCase() == "panelcaptionclose")
    return;  

  var panel = getControl("divPanel");
  if (panel)
  {
    _panelOriPos = getPagePos(panel);
    _panelDragPoint = new point(e.clientX, e.clientY);
 
    addEventListener(document, "mousemove", panelDrag);
    addEventListener(document, "mouseup", panelDragDrop);
  }
}

/*
 * Versleep panel
 */
function panelDrag(e)
{
  if (!e) e = window.event;
  var panel = getControl("divPanel");
  var x = _panelOriPos.x - _panelDragPoint.x + e.clientX;
  var y = _panelOriPos.y - _panelDragPoint.y + e.clientY;
  panel.style.left = x + "px";
  panel.style.top = y + "px";
  
  e.cancelBubble = true;
  return false;
}

/*
 * Stop met verslepen vh panel
 */
function panelDragDrop()
{
  removeEventListener(document, "mousemove", panelDrag);
  removeEventListener(document, "mouseup", panelDragDrop);
}


/*
 * Open een "tool" panel (zoeken, redlining, etc)
 */
function ShowPanel() 
{
  //alert('panels.js 179 ShowPanel();');
  var panel = getControl("divPanel");
  if (panel) 
  {
    
    var toolPanel = getControl("divToolPanel");
    var panelTitleBar = getControl("panelTitlebar");
    
   
    //alert("panels.js 203 panelTitleBar.id="+panelTitleBar);
    var lst = toolPanel.childNodes;    
    var cnt = 0;
    for (var i=0; i<lst.length; i++)
      if (lst.item(i).nodeType == 1) // Node.ELEMENT_NODE = 1
        cnt++;

    if (cnt > 0) // Er is een panel zichtbaar
    {      
        var strCoords = document.forms[0].hidPanelPosition.value;
        //alert("panels.js 199\nstrCoords:"+strCoords);
        var coords = strCoords.split(";");
        var map = getControl("tdMapContainer");
        if (coords.length == 2 && strCoords != "0;0")
        {
            var x = coords[0];
            var y = coords[1];        
        }
        else
        {
            var x = getPageX(map);
            var y = getPageY(map);
        }
      
        SetControlVisible(panel, true);
        panel.style.width='';
        toolPanel.style.width='';
       
        panelTitleBar.style.width='0px';
/*      
      if (toolPanel.clientHeight > map.clientHeight)
        toolPanel.style.height = map.clientHeight + "px";
      if (toolPanel.clientWidth > map.clientWidth)
        toolPanel.style.width = map.clientWidth + "px";
      toolPanel.style.overflow = "auto";
  */    
      var mapWidth = map.offsetWidth; //document.body.clientWidth;//
      var w = 0;
      //alert("panels.js 226 mapWidth: "+ mapWidth);
      //alert("panels.js 242 x: "+ x);
      //alert("panels.js 228 \npanel.clientWidth: "+ panel.clientWidth + "\n panel.style.width: "+panel.style.width+ "\n panel.scrollWidth: "+panel.scrollWidth);
      
      if (mapWidth < panel.clientWidth) // is te breed
      {
        //alert('panels.js 238\n te breed!!');
        panel.style.width = mapWidth;
        panel.style.overflow = "hidden";
        w=mapWidth;
      }
      else
      {
        w=panel.clientWidth;
        
      }
      if (x > document.body.clientWidth- panel.clientWidth)// staat te ver naar rechts
      {
        x = document.body.clientWidth - panel.clientWidth - 20;
      }
      if (x < 0) // staat te ver naar links
      {
        x = 0;
      }
       
        
      if (y > document.body.clientHeight - panel.clientHeight)
        y = document.body.clientHeight - panel.clientHeight - 20;
      if (y < 0)
        y = 0;    
      if (y > document.body.clientHeight - panel.clientHeight)
        panel.style.height = document.body.clientHeight

        //alert("Panels.js 259\nx="+x+"\ny="+y);
      panel.style.left = x + "px";
      panel.style.top = y + "px";
      
      
      toolPanel.style.height = panel.clientHeight ;//- panelTitleBar.clientHeight -20;
      toolPanel.style.overflow = "auto";
      
      toolPanel.style.width=w+"px";
      panelTitleBar.style.width=w+"px";
     
      
    }
  }
  //alert('panels.js 270 End of ShowPanel();');
}

/*
 * Onthoud welke panels zijn ingeklapt
 */
function StorePanelState()
{
  var s = "";
  var lst = document.getElementsByTagName("A");
  for (var i=0; i<lst.length; i++)
  {
    if (lst.item(i).className.toLowerCase().indexOf("togglebutton") == 0)
    {  
      var panel = GetTogglePanel(lst.item(i));
      if (!ControlIsVisible(panel))
        s += panel.id + "|";
    }
  } 
   
  document.forms[0].hidCollapsedPanels.value = s;
  var panel = getControl("divPanel");
  if (panel)
  {
    var pos = getPagePos(panel);
    
    document.forms[0].hidPanelPosition.value = pos.x + ";" + pos.y;
    //alert('panels.js 314 stored panelstate to:'+document.forms[0].hidPanelPosition.value);
  }
}

/*
 * Toon panel, indien eerder geopend door de gebruiker
 */
function RestorePanelState()
{ 
  var h = parseInt(getControl("hidMapH").value);
  if (h > 0)
  {
    ShowPanel();
    AdjustPanelHeight(GetPanelSpace());
    SetPanelEventHandlers();	
  }
}

function showLegend(show)
{
  if (_LegendTimer)
    clearTimeout(_LegendTimer);
  var btn = getControl("btnLegenda");    
  var div = getControl("divLegenda");
  if (btn && div)
  {
    SetControlVisible(div, show);
    var max = getControl("MapPanel").offsetHeight - btn.offsetHeight;
    if (div.offsetHeight > max)
    {
      div.style.height = max + "px";
      div.style.width = (div.offsetWidth + 25) + "px"; // extra ruimte voor verticale scrollbar
    }
    div.style.top = getPageY(btn) + btn.offsetHeight;
    div.style.left = getPageX(btn) - (div.clientWidth -  btn.clientWidth);
  }
}

function ShowPopupPanel(button, panel, visible)
{
  var lst = panel.getElementsByTagName("A");
  //alert("panels.js 336: "+lst.length);
  //MHU 20070122 commented out: no eval of href if only one in list
  //always show the panel (panel is shown on mouseover, so no sudden panels apearing when hovering over a button)
  /*if (lst.length == 1)
  {
    // Als er maar 1 zoekfunctie is geactiveerd kan die direct worden getoond
    eval(lst.item(0).href);
  }
  else
  {*/
    // Toon alle zoekfuncties in een popup
    SetControlVisible(panel, visible);
    panel.style.top = (getPageY(button) + button.offsetHeight) + "px";
    panel.style.left = getPageX(button) + "px";
    
    var map = getControl("MapContainer");
    var dx = (getPageX(panel) + panel.offsetWidth) - (getPageX(map) + map.offsetWidth);
    if (dx > 0)
      panel.style.left = (getPageX(panel) - dx) + "px";
  //}
}

function ShowZoekPanel(vis)
{
  if (_ZoekPanelTimer)
    clearTimeout(_ZoekPanelTimer);
  var btn = getControl("btnZoeken");
  var div = getControl("divZoekPanel");
  if (btn && div)
    ShowPopupPanel (btn, div, vis);
}

function ShowInfoPanel(vis)
{
  if (_InfoPanelTimer)
    clearTimeout(_InfoPanelTimer);
  var btn = getControl("btnHelpMenu");
  var div = getControl("divInfoPanel");
  if (btn && div)
    ShowPopupPanel (btn, div, vis);
}

function ShowInfoHoofdgroep(sender)
{
  if (sender)
  {
    sender.blur();   
    var s = "Geen informatie beschikbaar over deze hoofdgroep.";
    if (sender.alt && sender.alt.length > 0)
      s = sender.alt;
    else if (sender.title && sender.title.length > 0)
      s = sender.title;
    window.alert (s);
  }
  return false;
}

/*CloseToolPanel()
*MHU: 20070111 
*sets the display of the divpanel to none
*and set value of txtpanelstate to CloseToolPanel so the textchanged event will fire
*and then the panels will be closed server side also
*/
function closeToolPanel()
{
    
    
    var txtPanelState = getControl(txtPanelStateId);
    //alert('panels.js 377 txtPanelState.value: '+txtPanelState.value);
    txtPanelState.value='CloseToolPanel';
    
    var panel = getControl("divPanel");   
    panel.style.display='none';
    
}
