
/**
 * JavaScript for the GoogleMap
 * 
 */

//general vars

var googleMap;
var geocoder = null;
var ewindow;
var menuForm;
var infoWinUrl = "showkpinfo.php?gid=";
var mm;
var gmarkersA = [];      
var srs = "";
var bbox;
var bbox900913;
var imgW=1210;
var imgH=1170;
var imgT;
var imgL;

//var copyr = "Nieuwland 2007";
var mode = "";

var Astartzoom = 13;

var mercZoomLevel = 11;
var overlaysouthwest;
var overlaynortheast;

var images=new Array();
var arrLayers=new Array();
var idx;
var currlyr = "";
var ovrly;

var ovrlytransp = 25;
var waasrecttransp = 0.1;
var waasrect;
var updateImage=false; 
var refFeatureInfo;

var iconRed = new GIcon(); 
    iconRed.image = 'images/icons/vrood.png';
    //iconRed.shadow = 'images/icons/vis_shadow.png';
    iconRed.iconSize = new GSize(25, 15);
    iconRed.shadowSize = new GSize(13, 13);
    iconRed.iconAnchor = new GPoint(6, 6);
    iconRed.infoWindowAnchor = new GPoint(5, 1);
var iconGreen = new GIcon(); 
    iconGreen.image = 'images/icons/vgroen.png';
    //iconGreen.shadow = 'images/icons/vis_shadow.png';
    iconGreen.iconSize = new GSize(25, 15);
    iconGreen.shadowSize = new GSize(13, 13);
    iconGreen.iconAnchor = new GPoint(6, 6);
    iconGreen.infoWindowAnchor = new GPoint(5, 1);
var iconYellow = new GIcon(); 
    iconYellow.image = 'images/icons/vgeel.png';
   // iconYellow.shadow = 'images/icons/vis_shadow.png';
    iconYellow.iconSize = new GSize(25, 15);
    iconYellow.shadowSize = new GSize(32, 20);
    iconYellow.iconAnchor = new GPoint(6, 6);
    iconYellow.infoWindowAnchor = new GPoint(5, 1);

var customIcons = [];
customIcons["kp"] = iconRed;
customIcons["kp2"] = iconGreen;
customIcons["kp3"] = iconYellow;

//test getfeatureinfo
function toggleInfo(){
  GEvent.clearListeners(googleMap,"click");
  if(mode == "info"){
    mode = "";
    if (ovrly) ovrly.img_.style.cursor = ""; 
  //  var bar = $("bg");
  //  bar.src = codebase+"images/static.png";
    return;
    }
  mode = "info";
  if (ovrly) ovrly.img_.style.cursor = "help"; 
  GEvent.addListener(googleMap,"click", function (overlay, point){
      if(overlay){ return; }
      var pt = new GLatLng(point.y,point.x);
      addInfoTipMarker(pt);
      }
    ); 
  }
  
function addInfoTipMarker(point,xy)
{
   var arr = createInfoTipTabs(point, xy);
  if ((arr == null) || (arr.length == 0))
  {
    alert('Geen bevraagbare kaartlagen gevonden.');
  } else {
    googleMap.openInfoWindowTabsHtml(point, arr);    
  }
}
  
function createInfoTipTabs(pt,xy) {
 
  var b = googleMap.getBounds();
  var sw = b.getSouthWest();
  var ne = b.getNorthEast();
  var w = sw.lng();
  var e = ne.lng();
  var n = ne.lat();
  var s = sw.lat();

  var infoWindows = null;

  //bbox is defined globally
  if (bbox900913 != null)
  {
    var x = xy.left;
    var y = xy.top;

    //Stop ook als er geen layers zijn
    if (currlyr == "") return;
    infoWindows = [];
    
    var Requests = currlyr.split(",");
    if(Requests.length<1){ return; }
    for(var r = 0;r<Requests.length;r++){
      var htm ="";
      var lyr = Requests[r];
      
      //Bepaal of deze layer queryable is
      for (var i=0;i<arrLayers.length;i++)
      {
        var singlelayer = arrLayers[i];
        if (singlelayer.layerName == lyr)
        {
          if (singlelayer.queryable)
          {
            var lyrlab = lyr.substring(0,10);
            var gmwidth = 600;
            var gmheight = 600;
            //Feature info based on WGS84
            var featureinfourl = MapServerURL + "&REQUEST=GetFeatureInfo&VERSION=1.1.1&SERVICE=WMS&LAYERS="+lyr+"&SRS=EPSG:4326&BBOX="+w+","+s+","+e+"," + n + "&X=" + x +"&Y="+ y +"&WIDTH="+gmwidth+"&HEIGHT="+ gmheight+"&INFO_FORMAT=text/html&FEATURE_COUNT=5&ietype=.html&FORMAT=image/png&QUERY_LAYERS="+lyr;
            
            htm += "<iframe frameborder=\"0\" style=\"border:1px solid #fff;width:300px;height:150px\" src=\""; 
            htm += featureinfourl;
            htm += "\" ></iframe>";
            var m = new GInfoWindowTab(lyrlab,htm);
            infoWindows.push(m);
          
          }
          break;
        }
      }
    }
  }
  return infoWindows;
}
  
  
function updateZoomlevelInfo()
{   
  zoomlvl = googleMap.getZoom();
  infotxt = "Klik op een icoontje om informatie op te vragen";
    zminfodiv = document.getElementById("zoomInfoDiv");
    if (zminfodiv)
    {
      if (zoomlvl < Astartzoom)
      {
        infotxt = "Knelpuntinformatie niet beschikbaar op dit zoomniveau, zoom verder in voor een vollediger beeld ";
      }
      
      zminfodiv.innerHTML = infotxt;
    }
}


function updateRectangleBackground(){
  var bounds = googleMap.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var lngDelta = (northEast.lng() - southWest.lng()) *2;
  var latDelta = (northEast.lat() - southWest.lat()) *2;
  var rectBounds = new GLatLngBounds(
      new GLatLng(southWest.lat() + latDelta, southWest.lng() + lngDelta),
      new GLatLng(northEast.lat() - latDelta, northEast.lng() - lngDelta));

  if (waasrect!=null)
  {
    //Tbv IE6&7, steeds de oude waas weghalen en een nieuwe maken
    googleMap.removeOverlay(waasrect); 

    //waasrect.remove();
    //waasrect=null;
  }
  waasrect=new Rectangle(rectBounds);
  googleMap.addOverlay(waasrect);
  setwaastrans(waasrecttransp);
}

function setwaastrans(trsp)
{
  if (waasrect !=null)
  {
    waasrecttransp = trsp;
    waasrect.setOpacity(trsp);
    //Bewaar de laatste gebruikte transparantie waarde
    waasrecttransp = trsp;
  }
}

function setOvrlyTransp(t) {
  ovrlytransp = t;
  if (ovrly != null) ovrly.setTransparency(t);
}


/**
 * Is called at initialization via the body onload.
 * Opens the googleMap
 */
function init() {

  if (GBrowserIsCompatible()) {
    geocoder = new GClientGeocoder();
    googleMap = new GMap2(document.getElementById("myGoogleMap"));
    //doubleclick zoom    
    googleMap.enableDoubleClickZoom();
    //enable mouse zoom
    googleMap.enableScrollWheelZoom();
    //the large  scale control
    googleMap.addControl(new GLargeMapControl(),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(5,7)));
    //control for map/satellite/Hybrid
    
    //test jansen
    //googleMap.addControl(new GMapTypeControl());
    googleMap.addMapType(G_PHYSICAL_MAP);
    var mapControl = new GHierarchicalMapTypeControl();
    // Set up map type menu relationships
    mapControl.clearRelationships();
    mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Toon labels", false);
    //mapControl.addRelationship(G_PHYSICAL_MAP);
    // Add control after you've specified the relationships
    googleMap.addControl(mapControl);
        //end test
    
    
    //control to show the overview
    googleMap.addControl(new GOverviewMapControl(new GSize(110,110)));
    
    //dragzoom
    var otherOpts = { 
          buttonStartingStyle: {background: '#FFF', paddingTop: '4px', paddingLeft: '4px', border:'1px solid #ccc;'},
          buttonHTML: '<img title="Drag rectangle to zoom in (click to cancel)" src="images/icons/zoomin.gif">',
          buttonStyle: {width:'25px', height:'23px'},
          buttonZoomingHTML: 'Drag rectangle to zoom in (click to cancel)',
          buttonZoomingStyle: {background:'white',width:'75px', height:'100%'},
          backButtonHTML: '<img title="Zoom back to previous extent" src="images/icons/zoomout.gif">',  
          backButtonStyle: {display:'none',marginTop:'5px',width:'25px', height:'23px'},
          backButtonEnabled: true, 
          overlayRemoveTime: 1000} 

         //googleMap.addControl(new DragZoomControl({}, otherOpts, {}), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,70)));
      
    
    //info
    var otherOpts = { 
          buttonStartingStyle: {display:'none',background: '#FFF', paddingTop: '5px', paddingLeft: '5px', border:'1px solid #ccc'},
          buttonStyle: {width:'28px', height:'27px'},
          buttonZoomingHTML: '<img alt="Annuleer het tonen van informatie" src="images/icons/webdev-p.png">',
          buttonZoomingStyle: {display:'none',background:'#fff',width:'28px', height:'27px', border:'1px solid #efa016'},
          backButtonHTML: '<img alt="Annuleer het tonen van informatie" src="images/icons/webdev-p.png">',  
          backButtonStyle: {display:'none',background:'#efa016', marginTop:'5px',width:'28px', height:'27px'},
          backButtonEnabled: false, 
          overlayRemoveTime: 1000} 
    
    googleMap.addControl(new FeatureInfo({}, otherOpts, {}), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(0,0)));
    
    //center and show
    googleMap.setCenter(initLatLng, initZoom);
    
    var bounds = googleMap.getBounds();
    updateZoomlevelInfo()

    //add a listener to restrict zooming
    GEvent.addListener(googleMap, "zoomend", function() {
    
      if ( (maxZoom!=null)&&(googleMap.getZoom()>maxZoom) ) {
      
        updateImage=true;
        //ovrly.setTransparency(100);
        ovrly.remove();
        ovrly=null;
        //alert('zoomend ovrly.remove');
        googleMap.setZoom(maxZoom);
      }
      if ( (minZoom!=null)&&(googleMap.getZoom()<minZoom) ){
        
        updateImage=true;
        //ovrly.setTransparency(100);
        ovrly.remove();
        ovrly=null;
        //alert('zoomend ovrly.remove');
        googleMap.setZoom(minZoom);
        
        
      }
      //ovrly.remove();
      //ovrly=null;
      if (ovrly != null) {
        ovrly.img_.style.opacity=0;
      }   
      //images=new Array();
      updateImage=true;
      
      //achtergrond waas
      if (waasrect != null)
      {
        updateRectangleBackground();
      }
      //zoomlevel info
      updateZoomlevelInfo();
      
      changeWMSOverlaySlice();
    });


      //add a listener to panning
      GEvent.addListener(googleMap, "moveend", function() {
      
      //  checkBounds();
        newsouthWest = googleMap.getBounds().getSouthWest();
        newnorthEast = googleMap.getBounds().getNorthEast();
        if ((overlaysouthwest!=null)&&(overlaysouthwest.lng()>newsouthWest.lng())){
            
            updateImage=true;
        }
        else if ((overlaynortheast!=null)&&(overlaynortheast.lng()<newnorthEast.lng())){
          
          updateImage=true;

        }
        else if ((overlaysouthwest!=null)&&(overlaysouthwest.lat()>newsouthWest.lat())){
          
          updateImage=true;

        }
        else if ((overlaynortheast!=null)&&(overlaynortheast.lat()<newnorthEast.lat())){
          
          updateImage=true;

        }
        
        if (updateImage)
        {
          if (waasrect != null)
          {
          updateRectangleBackground();
          }
          //images=new Array();
          changeWMSOverlaySlice();

        }
        
    });



  }
  else
    alert('Your browser is not compatible');
} //end init()

/*
function showAddress(address) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          alert(address + " not found");
        } else {
          googleMap.setCenter(point, 10);
          //var marker = new GMarker(point);
          //googleMap.addOverlay(marker);
          //googleMap.openInfoWindowHtml(address);
        }
      }
    );
  }
}
*/

function openinfowin(gid)
{
  infourl = infoWinUrl + gid;
  infow =  window.open(infourl, "_blank", "toolbar=0,location=1,menubar=0,directories=0,scrollbars=1,resizable=1,height=700,width=940");
}

function toggleLM(vis)
{
  lm = document.getElementById("maploading");
  if (lm) 
    lm.style.display = (vis) ? 'block':'none';
}

function toggleError(vis)
{
  lm = document.getElementById("maperror");
  if (lm) 
    lm.style.display = (vis) ? 'block':'none';
}

function toggleLayers(vis)
{
  lm = document.getElementById("layersloading");
  if (lm) 
    lm.style.display = (vis) ? 'block':'none';
}


function createMarkerMax(point, name, periode, prioriteit, voorz, gid) 
{
  if (voorz.toUpperCase() == 'NEE') icontype = 'kp'; 
  else if (voorz.toUpperCase() == 'JA') icontype = 'kp2'; 
  else icontype = 'kp3'; 
  var marker = new GMarker(point, customIcons[icontype]);
  var html = "<div class='infopopupje'> <h5>" + name + "</h5><p>periode:" + periode + "<br/>prioriteit: " + prioriteit + "<br /> <br />Klik op het [+] knopje rechtsboven<br/>voor <a href=# onclick='googleMap.getInfoWindow().maximizeclick(this)'>uitgebreide</a> informatie</p></div>";

  GEvent.addListener(marker, 'click', function() {
    var maxContentDiv = document.createElement('div');
    maxContentDiv.innerHTML = 'Ophalen data...'
    marker.openInfoWindowHtml(html,
      {maxContent: maxContentDiv, 
       maxTitle: "Info over knelpunt "+name});

    var iw = googleMap.getInfoWindow();
    GEvent.addListener(iw, "maximizeclick", function() {
      GDownloadUrl(infoWinUrl+gid, function(data) {
        maxContentDiv.innerHTML = data;

      });
    });
  });
  return marker;
}


function createMarker(point, name, periode, prioriteit, voorz, gid) {
  if (voorz.toUpperCase() == 'NEE') icontype = 'kp'; 
  else if (voorz.toUpperCase() == 'JA') icontype = 'kp2'; 
  else icontype = 'kp3'; 
  var marker = new GMarker(point, customIcons[icontype]);
  var html = "<div class='infopopupje'> <h5>" + name + "</h5><p>periode:" + periode + "<br/>prioriteit: " + prioriteit + "</p><a href=# onclick='openinfowin("+gid+")'>meer info</a></div>";
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}
    


function addGXmlHttp(){
    toggleLM(true);
    var request = GXmlHttp.create();
    request.open("GET", "getmarkers.php", true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      var markers = xmlDoc.getElementsByTagName("marker");
      markerElementsLen = markers.length;
      for (var i = 0; i < markers.length; ++i) {
        // obtain the attributes of each marker
        var lat = parseFloat(markers[i].getAttribute("lat"));
        var lng = parseFloat(markers[i].getAttribute("lng"));
        var point = new GLatLng(lat,lng);
        var name = markers[i].getAttribute("nme");
        var zoomlevel = markers[i].getAttribute("zl");
        var periode = markers[i].getAttribute("per");
        var prioriteit = markers[i].getAttribute("pri");
        var voorz = markers[i].getAttribute("vrz");
        var gid = markers[i].getAttribute("id");

        // split the markers into four arrays, with different GIcons
        var marker = createMarkerMax(point,name,periode,prioriteit,voorz, gid);
        gmarkersA.push(marker);
      }
      //add markers when ready
      managerInit();
    }
  }
  request.send(null);
}
    
function removeWMSLayerDiv() {
  var d = document.getElementById('wmslayersdiv');
  var ds = document.getElementById('wmslayersdivSubm');
  var wmstbl = document.getElementById("wmstable");
  if (wmstbl) 
  { 
    d.removeChild(wmstbl);
    wmstbl = null;
  }
  var wmsbs = document.getElementById("subm_lyrs");
  if (wmsbs) 
  { 
    ds.removeChild(wmsbs);
    wmsbs = null;
  }
}   
    
//
// Lees de beschikbare layers uit het wms Getcapabilities request
//
function AddWMSLayerDiv(lyrsarr)
{
  var numlayers = lyrsarr.length;
  var div=document.getElementById("wmslayersdiv");          //Bevat de layer content
  var submdiv=document.getElementById("wmslayersdivSubm");  //Bevat de Refresh button
  var rows=numlayers;
  var columns=1;
  
  var output = "<table border='0' class='wmstable' cellspacing='0' cellpadding='0'>";
  arrLayers=new Array();

  for (var i=0;i<rows;i++)
  {
    var lyr = lyrsarr[i];
    var LayerName = lyr[0];
    var LayerTitle = lyr[1];
    var LayerQryable = lyr[3];
    var legendURL = lyr[4];
    var metadataURL = lyr[5];

    //Array aanleggen met de op dit moment zichtbare layers en hun bevraagbaarheid
    var singlelayer = new Object;
    singlelayer.layerName = LayerName;
    singlelayer.queryable = LayerQryable;
    singlelayer.legendURL = legendURL;
    singlelayer.metadataURL = metadataURL;

    arrLayers.push(singlelayer);

    output += '<tr>';
    for (var j=0;j<columns;j++)
    {
      output += '<td>';
      output += "<input type='checkbox' value='" + i + "@" + LayerName + "' onclick='addCheckedLayer(this.value, this.checked, false);'>";
      output += "</td><td>";
      if (legendURL != '') {
        output += "<span id='legend' title='show legend' alt='show legend' onclick=\"setCheckedLegend('" + LayerName + "', 'legimg_"+LayerName+"');\"></span>";
      } else {
        output += "<span id='nolegend' title='legend not available' alt='legend not available'></span>";
      }
      output += "</td><td>";
      try {
      if (metadataURL != '') {
        output += "<span id='metadata' title='show legend' alt='show metadata' onclick=\"showMetadata('" + LayerName + "');\"></span>";
      } else {
        output += "<span id='nometadata' title='metadata not available' alt='metadata not available'></span>";
      }
      } catch(e)
      {
        output += "<span id='nometadata' title='metadata not available' alt='metadata not available'></span>";
      }
      output += "</td><td>";


      output += LayerTitle;
      output += "</td></tr>";
      output += "<tr><td colspan='4'><span id='legenda_" + LayerName + "' class='legenda_graphic' style='display:none;'>";
      output += "<img src='' id='legimg_" + LayerName + "'></span>";
      output += "</td></tr>";
    }
  }
  output += "</table>";
  div.innerHTML = output;
 
  output = "<input value='Show checked layers' id='subm_lyrs' name='subm_lyrs' type='button' onclick='addCheckedLayer(null, null, true);'>";
  submdiv.innerHTML = output;
}  

function addWMSCapab(capabstring){
  var xmlDoc = null;
  try //Internet Explorer
  {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(capabstring);
  }
  catch(e)
  {
    try //Firefox, Mozilla, Opera, etc.
    {
      parser=new DOMParser();
      xmlDoc=parser.parseFromString(capabstring,"text/xml");
    }
    catch(e)
    {
      alert(e.message);
      return;
    }
  }

  var markers = xmlDoc.getElementsByTagName("Layer");
  markerElementsLen = markers.length;
  var lyrsarr = [];
  for (var i = 0; i < markers.length; ++i) {

    // obtain the attributes of each marker
    var name = markers[i].getElementsByTagName("Name")[0].firstChild.nodeValue;
    var title = markers[i].getElementsByTagName("Title")[0].firstChild.nodeValue;
    var legendURLtmp = markers[i].getElementsByTagName("LegendURL")[0];
    var legendURL = '';
    try {
    if (legendURLtmp != null)
      legendURL = legendURLtmp.getElementsByTagName("OnlineResource")[0].getAttribute("xlink:href");
    } catch(e)
    {}


    var metadataURLtmp = markers[i].getElementsByTagName("MetadataURL")[0];
    var metadataURL = '';
    try {
    if (metadataURLtmp != null)
      metadataURL = metadataURLtmp.getElementsByTagName("OnlineResource")[0].getAttribute("xlink:href");
    } catch(e)
    {}
     
    var srs = markers[i].getElementsByTagName("SRS")[0].firstChild.nodeValue;
    var qryable = (markers[i].getAttribute("queryable")=="1") ? true : false;
    lyr = new Array(name, title, srs, qryable, legendURL, metadataURL);

    lyrsarr.push(lyr);

  }
  //write the table
  AddWMSLayerDiv(lyrsarr);
}




function managerInit()
{
  mm = new MarkerManager(googleMap);
  //mm = new GMarkerManager(googleMap, {borderPadding:1});
  //alert ('gmarkersA.length' + gmarkersA.length + ' gmarkersB.length ' + gmarkersB.length + ' gmarkersC.length ' + gmarkersC.length + ' gmarkersD.length ' + gmarkersD.length);
  mm.addMarkers(gmarkersA,Astartzoom,17);

  mm.refresh();
  toggleLM(false);
} 
    
  

function toggleKnelpuntMarkers(vis) {
  toggleLM(true);
  if (vis) {
    mm.addMarkers(gmarkersA,Astartzoom,17);
    mm.refresh();
  }
  else {
    mm.clearMarkers(); 
  }
  toggleLM(false);
}

//---wms methods----

function setLayer(newlyr) {
  if (newlyr!=currlyr) {
    
    if (newlyr.charAt(0) == ',')
      newlyr = newlyr.substr(1);
    
    if (newlyr != "")
    {
      updateRectangleBackground();
      setwaastrans(waasrecttransp);
    }
    else
    {
      if (waasrect != null)
      {
        waasrect.remove();
        waasrect=null;
      }
    }
    //reset visibility
    for (var i=0;i<arrLayers.length;i++)
      arrLayers[i].visible = false;

    //update visibility in array
    var arrTmp = newlyr.split(",");
    for (var j=0;j<arrTmp.length;j++)
    {
      //Zoek de layer in de all layers array
      for (var i=0;i<arrLayers.length;i++)
      {
        var singleLayer = arrLayers[i];
        if (singleLayer.layerName == arrTmp[j])
        {
          //Verander visibility flag
          arrLayers[i].visible = true;
          break;
        }
      }
    }
    //Force the toggle buttons to the correct mode
    for (var i=0;i<arrLayers.length;i++)
    {
      var singleLayer = arrLayers[i];
      toggleButton(singleLayer.layerName, singleLayer.vis);
    }

    images=new Array();
    currlyr=newlyr;
    if (ovrly) 
    {
      ovrly.remove();
      ovrly=null;
    }

    updateImage = true;
    changeWMSOverlaySlice();
  }

}


function changeWMSOverlaySlice() {

  southWest = googleMap.getBounds().getSouthWest();
  northEast = googleMap.getBounds().getNorthEast();

  var overlayBounds = new GLatLngBounds(southWest, northEast);

  if (ovrly==null) {
    ovrly = new WMSOverlay(overlayBounds,0.2,'#888888');
    googleMap.addOverlay(ovrly);
  }
  else
  {
    ovrly.redraw(true);
  }

}

function WMSOverlay(bounds, opt_transparency, opt_color) {
  this.bounds_ = bounds;
  this.transparency_ = opt_transparency || 0.5;
}

/** WMSOverlay prototype */
WMSOverlay.prototype = new GOverlay();
WMSOverlay.prototype.initialize = function(map) {

  var img = document.createElement("img");
  img.style.opacity = this.transparency_;
  img.style.position = "absolute";
  map.getPane(G_MAP_MAP_PANE).appendChild(img);
  this.map_ = map;
  this.img_ = img;

  this.img_.style.zIndex = "12";
  
  
}

WMSOverlay.prototype.remove = function() {
if (this.img_!=null&&this.img_.parentNode!=null)
  this.img_.parentNode.removeChild(this.img_);
}

WMSOverlay.prototype.copy = function() {
  return new WMSOverlay(this.bounds_, this.transparency_, this.color_, this.backgroundColor_, this.opacity_);
}

WMSOverlay.prototype.redraw = function(force) {
  if (!force) return;

  if (!updateImage) return;

  if (this.map_!=null) {
    var b = googleMap.getBounds();
    //bounds_ (van het plaatje) moet gelijkgesteld worden aan de bounds van de kaart
    if (updateImage==true){
      this.bounds_=b;
      this.testbounds_=b;
    }
    
  
    var idx = 0;
    overlaysouthwest = this.bounds_.getSouthWest();
    overlaynortheast = this.bounds_.getNorthEast();
    //
    var borderdifference = (overlaynortheast.lat()-overlaysouthwest.lat())/1.5;
    

    overlaysouthwest = new GLatLng(overlaysouthwest.lat()-borderdifference,overlaysouthwest.lng()-borderdifference);
    overlaynortheast = new GLatLng(overlaynortheast.lat()+borderdifference,overlaynortheast.lng()+borderdifference);
    var c1  = this.map_.fromLatLngToDivPixel(overlaysouthwest);
    var c2  = this.map_.fromLatLngToDivPixel(overlaynortheast);

    var w = Math.abs(c2.x - c1.x);
    var h = Math.abs(c2.y - c1.y);
    var l = Math.min(c2.x, c1.x);
    var t = Math.min(c2.y, c1.y);
    
    imgW = w;
    imgH = h;
    imgT = t;
    imgL = l;

    var z = this.map_.getZoom();
    this.img_.style.visibility="hidden";
  
    var lngSpan = overlaynortheast.lng() - overlaysouthwest.lng();
    var latSpan = overlaynortheast.lat() - overlaysouthwest.lat();
    
    //if (images==null||images[idx]==null)
    //{
    if ((currlyr!="") && (ovrly != null)) {
      
        bbox900913=Math.round(this.dd2MercMetersLng900913(overlaysouthwest.lng()))+
        ","+Math.round(this.dd2MercMetersLat900913(overlaysouthwest.lat()))+
        ","+Math.round(this.dd2MercMetersLng900913(overlaynortheast.lng()))+
        ","+Math.round(this.dd2MercMetersLat900913(overlaynortheast.lat()));
        srs = "EPSG:900913";

				//random number to add to url, workaround for caching in IE
			 var randomnumber=Math.floor(Math.random()*9999999);
        //display loading img
        toggleError(false);
        toggleLM(true);
        url=MapServerURL+"&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.0&LAYERS="+ escape( currlyr ) +"&STYLES=default&FORMAT=image/gif&BGCOLOR=0xFFFFFF&TRANSPARENT=TRUE&SRS="+srs+"&BBOX="+bbox900913+"&WIDTH="+imgW+"&HEIGHT="+imgH+"&rnd="+randomnumber; 

        this.img_.src=url;
        this.img_.onerror = dikkeerror;
        
        if (images[idx] == null) 
        {
          images[idx] = new Image();
        }
        images[idx].src=ovrly.getImageSrc();
      }
    //}

    this.img_.style.width = w + "px";
    this.img_.style.height = h + "px";
    this.img_.style.left = l + "px";
    this.img_.style.top = t + "px";
    this.img_.onload=makevis;
    //Image is opgevraagd, op false tot volgende request
    updateImage = false;
    
  }
}

//
// Toon het error schermpje wanneer mapload mislukt
//
function dikkeerror() {
  toggleError(true);
  toggleLM(false);
}

function redrawurl()
{
  if (ovrly)
  {
    ovrly.img_.src = ovrly.img_.src + "&rnd=" + Math.random();
    //foutmelding weg
    toggleError(false);
  }
  
  
}

//
// Maak het plaatje zichtbaar zodra deze geladen is.
//
function makevis() {
  if (ovrly)
  {
    //ovrly.setTransparency(35);
    ovrly.img_.style.visibility = "visible";
    ovrly.setTransparency(ovrlytransp);
    //hide loading img
    toggleLM(false);
  }
  
}


WMSOverlay.prototype.getImageSrc = function(){
  return this.img_.src;
}

WMSOverlay.prototype.setTime = function(time){
  this.imagetime=time;
}

WMSOverlay.prototype.setTransparency = function(t) {
if (ovrly!=null&&ovrly.img_!=null){
    ovrly.img_.style.opacity = 1-(t/100);
    ovrly.img_.style.filter = "alpha(opacity="+(100-t)+")";
  }
}




WMSOverlay.prototype.MAGIC_NUMBER = 6356752.3142;
WMSOverlay.prototype.WGS84_SEMI_MAJOR_AXIS = 6378137.0;
WMSOverlay.prototype.WGS84_ECCENTRICITY = 0.0818191913108718138;

WMSOverlay.prototype.dd2MercMetersLat = function(latitude) {
  var rads = latitude * Math.PI / 180.0;
  return this.WGS84_SEMI_MAJOR_AXIS * Math.log(
    Math.tan((rads+Math.PI/2)/2) * 
    Math.pow(((1-this.WGS84_ECCENTRICITY*Math.sin(rads))/(1+this.WGS84_ECCENTRICITY*Math.sin(rads))), this.WGS84_ECCENTRICITY/2));
};
WMSOverlay.prototype.dd2MercMetersLng = function(longitude) { 
  return this.WGS84_SEMI_MAJOR_AXIS * (longitude * Math.PI / 180.0);
};


//Google projection with  magic numbers
//6378137.0, 
//298.257223563
WMSOverlay.prototype.MAGIC_NUMBER900913 = 20037508.34;
WMSOverlay.prototype.WGS84_SEMI_MAJOR_AXIS900913 = 20037508.34;
WMSOverlay.prototype.dd2MercMetersLat900913 = function(latitude) {
  var y = Math.log(Math.tan((90 + latitude) * Math.PI / 360)) / (Math.PI / 180);
  return y * this.MAGIC_NUMBER900913 / 180;
};
WMSOverlay.prototype.dd2MercMetersLng900913 = function(longitude) { 
  return longitude * this.WGS84_SEMI_MAJOR_AXIS900913 / 180;
};

