function toddEncodeJSON(data)
{
  switch(typeof data)
  {
    case 'boolean':
      return data ? 'true' : 'false';
    case 'object':
      if(data==null)
        return'null';

      if(data instanceof Array)
      {
        var retval='[';
        for (var i=0;i<data.length;++i)
          retval+=(i>0?',':'')+toddEncodeJSON(data[i]);
        return retval+']';
      }

      var retval='{';
      for (cellname in data) //ADDME safari 1.3 fallback for hasownproperty?!
        if(!data.hasOwnProperty || data.hasOwnProperty(cellname))
          retval += (retval.length>1?',':'') + '"' + cellname + '":' + toddEncodeJSON(data[cellname]);
      return retval+'}';
    case 'number':
      return data.toString();
    case 'string':
      if (/["\\\x00-\x1f]/.test(data))
      {
          return '"' + data.replace(/[\x00-\x1f\\"]/g, function (a)
          {
              var c = a.charCodeAt();
              return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
          }) + '"';
      }
      return '"' + data + '"';
    default:
      return alert("toddEncodeJSON: How to encode " + typeof data + "?");
  }
}


// Our todd map controller object
var mymap;

// Last bounds (prevent requesting overlays twice)
var lastbounds;

// Move handler timeout
var movetimeout = null;

var ActiveInfoWindow=null;

//lijst met resultaten ids
var ResultPtrs = new Array();

function LoadMap(StartCoord)
{

  if(StartCoord=='') StartCoord="52.574889,6.628361";

  mymap = toddGM_Initialize("map_canvas", { maptype: "map"
                                        , center: StartCoord
                                        , zoom: 10
                                        , moveable: true
                                        , iconsize: 33
                                        , icons: [ { name: ""
                                                   , icon: webroot+"design/images/gmap_icon.png"
                                                   //, shadow: webroot+"design/images/pin_shadow.48x48.png"
                                                   , anchor_x: 15
                                                   , anchor_y: 43
                                                   , label_x: 24
                                                   , label_y: 9
                                                   , popup_x: 40
                                                   , popup_y: 0
                                                   }
                                                 ]
                                        , OnInitialized: MapInitialized
                                        , OnOverlayClick: OverlayClicked
                                        , OnMoveEnd: XHR_UpdateOverlays
                                        , OnZoomEnd: XHR_UpdateOverlays
                                        , OpenInfoWindow: OpenInfoWindow
                                        , CloseInfoWindow: CloseInfoWindow
                                        });

}

function UnloadMap()
{
  toddGM_DeInit(mymap);
}

function MapInitialized()
{
  //mymap.map.addControl(new GSmallMapControl());
  mymap.map.addControl(new GLargeMapControl3D());
  mymap.map.addControl(new GMapTypeControl());
  mymap.map.addMapType(G_PHYSICAL_MAP);//terrain map aan navigatie toevoegen

  XHR_UpdateOverlays();
}


function XHR_UpdateOverlays(force)
{
  if (movetimeout)
  {
    window.clearTimeout(movetimeout)
    movetimeout = null;
  }

  var bounds = toddGM_BoundsToString(mymap.GetMapIconBounds());
  if (bounds == lastbounds && !force)
  {
    return;
  }
  lastbounds = bounds;

  var request = { type: "updateoverlays"
                , bounds: bounds
                , zoom: mymap.map.getZoom()
                };

  //geselecteerde categorien opvragen
  var catFormLst=new Array();
  $('#catForm input:checked').each(function(i)
  {
    catFormLst[i]=$(this).val();
  });
  if(catFormLst.length) request.categorien=catFormLst;

  $.post(webroot+"design/maps.shtml",toddEncodeJSON(request),function(response,textStatus){

    if(textStatus=="success")
    {
      mymap.UpdateAllOverlays(response.overlays);

      //alle ids verzamelen, 1 marker kan meerdere ids bevatten
      ResultPtrs=new Array();
      var Counter=0;
      for(dc=0;dc<response.overlays.length;dc++){
        for(rk=0;rk<response.overlays[dc].rowkeys.length;rk++)
        {
          ResultPtrs[Counter]=parseInt(response.overlays[dc].rowkeys[rk]);
          Counter++;
        }
      }

      UpdateResultsList(0);
    }
  },"json");

}


function UpdateResultsList(paginanr)
{

  var request = { type   : "getresults"
                , ids    : ResultPtrs
                , pagenr : paginanr
                };

  $.post(webroot+"design/maps.shtml",toddEncodeJSON(request),function(resulthtml)
  {
    if(resulthtml=='')
    {
      $('#gevondenlocaties span.kop1').hide();
    } else {
      $('#gevondenlocaties span.kop1').show();
    }

    $('#gevondenlocaties_results').html(resulthtml);

  },"html");

}



function OverlayClicked(overlay)
{
  OpenInfoWindow(overlay);
}


function OpenInfoWindow(overlay)
{

  var infohtml='Laden...';

  ActiveInfoWindow=overlay.marker;
  overlay.marker.openExtInfoWindow(
        mymap.map,
        "gjdr_mapwindow",
        infohtml,
        {beakOffset: 3}
  );

  var request = { type: "updateinfowindow"
                , ids: overlay.rowkeys
                };

  // via ajax verdere info ophalen
  $.post(webroot+'design/maps.shtml',toddEncodeJSON(request),function(data){
    var infohtml='';

    if(data.overlays.length>1)
    {
      infohtml+='<ul>';
      for(dc=0;dc<data.overlays.length;dc++)
      {
//      	infohtml+='<li><a ';
//      	if(data.overlays[dc].extern) infohtml+='target="_blank" '; 
//      	infohtml+='href="'+data.overlays[dc].url+'">'+data.overlays[dc].title+'</a></li>';

        infohtml+='<li><a href="javascript://" onclick="UpdateInfoWindow('+data.overlays[dc].id+');">'+data.overlays[dc].title+'</a></li>';


      }	
      infohtml+='</ul>';
    }
    else if(data.overlays.length==1)
    {
      infohtml+='<strong>'+data.overlays[0].title+'</strong><br />';
      if(data.overlays[0].description!='') infohtml+=data.overlays[0].description+'<br />';
      infohtml+='<a ';
      if(data.overlays[0].extern) infohtml+='target="_blank" ';
      infohtml+='href="'+data.overlays[0].url+'">Meer informatie <img src="'+webroot+'design/images/leesmeer.gif" /></a>';
    }

    overlay.marker.openExtInfoWindow(
        mymap.map,
        "gjdr_mapwindow",
        infohtml,
        {beakOffset: 3}
    );


  },"json");

}


function UpdateInfoWindow(myid)
{
  var request = { type: "updateinfowindow"
                , ids: [myid]
                };

  // via ajax verdere info ophalen
  $.post(webroot+'design/maps.shtml',toddEncodeJSON(request),function(data){
    var infohtml='';

    infohtml+='<strong>'+data.overlays[0].title+'</strong><br />';
    if(data.overlays[0].description!='') infohtml+=data.overlays[0].description+'<br />';
    infohtml+='<a ';
    if(data.overlays[0].extern) infohtml+='target="_blank" ';
    infohtml+='href="'+data.overlays[0].url+'">Meer informatie <img src="'+webroot+'design/images/leesmeer.gif" /></a>';

    ActiveInfoWindow.openExtInfoWindow(
        mymap.map,
        "gjdr_mapwindow",
        infohtml,
        {beakOffset: 3}
    );

  },"json");

}


function CloseInfoWindow()
{

  var CurOpenObj=mymap.map.getExtInfoWindow();
  if(CurOpenObj!=null)
    mymap.map.closeExtInfoWindow();

}

function CloseInfoWindow()
{
  mymap.map.closeInfoWindow();
}


