
/**
 * JavaScript for the GoogleMap
 * 
 */

//general vars

var googleMap;
var geocoder = null;
var ewindow;
var menuForm;
var infoWinUrl = "showkpinfo.php?gid=";
var mm;
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 = 35;
var waasrecttransp = 0.5;
var waasrect;
var updateImage=false; 

 
function addInfoTipMarkerSimple(point,xy)
{
//alert('addInfoTipMarkerSimple');
   var html = createInfoTipTabs(point, xy, true);
  if ((html == null) || (html.length == 0))
  {
    alert('Geen bevraagbare kaartlagen zichtbaar.');
  } else {
  //alert ('addInfoTipMarkerSimple');
    googleMap.openInfoWindowHtml(point, html);    
  }
}
  
 
function addInfoTipMarker(point,xy)
{
   var arr = createInfoTipTabs(point, xy, false);
  if ((arr == null) || (arr.length == 0))
  {
    alert('Geen bevraagbare kaartlagen zichtbaar.');
  } else {
    googleMap.openInfoWindowTabsHtml(point, arr);    
  }
}
  
  
function createInfoTipTabs(pt,xy,simplewin) {

//alert ('simplewin = '+simplewin);
 
  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;
    
    
    gmbbox900913=Math.round(ovrly.dd2MercMetersLng900913(b.getSouthWest().lng()))+
      ","+Math.round(ovrly.dd2MercMetersLat900913(b.getSouthWest().lat()))+
      ","+Math.round(ovrly.dd2MercMetersLng900913(b.getNorthEast().lng()))+
      ","+Math.round(ovrly.dd2MercMetersLat900913(b.getNorthEast().lat()));


    //Stop ook als er geen layers zijn

    if (currlyr == "") return;
    infoWindows = [];
    

    var layerlist = '';
   if(arrLayers.length<1){ return; }
   
   for(var r = 0;r<arrLayers.length;r++){



  var singlelayer = arrLayers[r];
  if ((!singlelayer.isgroup) && (singlelayer.canquery) && (singlelayer.checked)) {
  var htm ="";
  
  var lyr = singlelayer.name;
  var lyrtitle = singlelayer.title;
  layerlist += ","+lyr;
  

  
  var lyrlab = lyrtitle.substring(0,7) + "...";
  var width = 600;
  var height = 450;
  //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="+width+"&HEIGHT="+ height+"&INFO_FORMAT=text/html&FEATURE_COUNT=1&ietype=.html&FORMAT=image/png&QUERY_LAYERS="+lyr;
  
  //Featureinfo based on Google projection 900913
  //var featureinfourl = MapServerURL + "&REQUEST=GetFeatureInfo&VERSION=1.1.1&LAYERS="+lyr+"&SRS=EPSG:900913&BBOX="+ bbox900913 + "&X=" + x +"&Y="+ y +"&WIDTH="+imgW+"&HEIGHT="+ imgH+"&INFO_FORMAT=text/html&FEATURE_COUNT=5&ietype=.gml&FORMAT=image/png&QUERY_LAYERS="+lyr;
  
  //var featureinfourl = MapServerURL + "&REQUEST=GetFeatureInfo&VERSION=1.1.1&LAYERS="+lyr+"&SRS=EPSG:900913&BBOX="+ gmbbox900913 + "&X=" + x +"&Y="+ y +"&WIDTH="+width+"&HEIGHT="+ height+"&INFO_FORMAT=text/html&FEATURE_COUNT=5&ietype=.gml&FORMAT=image/png&QUERY_LAYERS="+lyr;
  htm += "<h3>"+lyrtitle+":</h3><iframe style=\"border:0px solid #fff;width:450px;height:200px\" src=\""; 
  htm += featureinfourl;
  htm += "\" ></iframe>";
  
  var m = new GInfoWindowTab(lyrlab,htm);
  infoWindows.push(m);
          
       
      }
    }
  }
  if (layerlist != '' && simplewin)
  {
    //alert('simplewin');
    layerlist = layerlist.substring(1);
      var multifeatureinfourl = MapServerURL + "&REQUEST=GetFeatureInfo&VERSION=1.1.1&SERVICE=WMS&LAYERS="+layerlist+"&SRS=EPSG:4326&BBOX="+w+","+s+","+e+"," + n + "&X=" + x +"&Y="+ y +"&WIDTH="+width+"&HEIGHT="+ height+"&INFO_FORMAT=text/html&FEATURE_COUNT=1&ietype=.html&FORMAT=image/png&QUERY_LAYERS="+layerlist;
  htm = "<h3>Gevonden informatie op dit punt:<br/></h3><iframe frameborder=\"0\" style=\"border:0px solid #fff;width:450px;height:200px\" src=\""; 
    htm += multifeatureinfourl;
  htm += "\" ></iframe>";
  return htm;
  
  }
  else
  {
  //alert('geen simplewin');
    return infoWindows;
  }
}
  

function updateRectangleBackground(){
  //alert('update rect');
  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=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);
    hdnOpc = document.getElementById('hdn_img_opc');
    if (hdnOpc != null)  hdnOpc.value = 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"));
    googleMap.enableDoubleClickZoom();
    googleMap.enableScrollWheelZoom();
   
   //the large  scale control
    googleMap.addControl(new GLargeMapControl(),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(5,8)));
    //control for map/satellite/Hybrid
    
    
    //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);

    
    
    //control to show the overview
    googleMap.addControl(new GOverviewMapControl(new GSize(110,110)));
    
    //control to show the scalebar
     var scalec = new GScaleControl();
     googleMap.addControl(scalec); 
     
     //set default maptype
     if (initMapType != ''){
        switch (initMapType){
          case 'm':
            //do nothing
            break;
          case 'k':
            googleMap.setMapType(G_SATELLITE_MAP);
            break;
          case 'h':
            googleMap.setMapType(G_HYBRID_MAP);
            break;
          case 'p':
            googleMap.setMapType(G_PHYSICAL_MAP);
            break;
                
        } 
      }
     
    
   /*
    //dragzoom
    var otherOpts = { 
          buttonStartingStyle: {background: '#FFF', paddingTop: '4px', paddingLeft: '4px', border:'1px solid black'},
          buttonHTML: '<img id="zoombtn" 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:'#fff6bf',width:'75px', height:'100%', border:'1px solid #ffd324'},
          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: {background: '#FFF', paddingTop: '4px', paddingLeft: '4px', border:'1px solid #ccc'},
          buttonHTML: '<img id="infobtn" title="Toon informatie  bij het klikken op de kaart" src="images/icons/webdev-p.png">',
          buttonStyle: {width:'26px', height:'26px'},
          buttonZoomingHTML: '<img title="Annuleer toon informatie bij het klikken op de kaart" src="images/icons/webdev-p.png">',
          buttonZoomingStyle: {background:'#fff',width:'26px', height:'26px', border:'1px solid #efa016'},
          backButtonHTML: '<img title="Annuleer toon informatie bij het klikken op de kaart" src="images/icons/webdev-p.png">',  
          backButtonStyle: {display:'none',background:'#efa016', marginTop:'5px',width:'26px', height:'26px'},
          backButtonEnabled: false, 
          overlayRemoveTime: 1000} 
    
          googleMap.addControl(new FeatureInfo({}, otherOpts, {}), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(-1,-35)));
    
    //center and show
    googleMap.setCenter(initLatLng, initZoom);
    
    var bounds = googleMap.getBounds();

    //add a listener to restrict zooming
    GEvent.addListener(googleMap, "zoomend", function() {
    
 /*  if ( (maxZoom!=null)&&(googleMap.getZoom()>=maxZoom) ){
      document.getElementById("gzoom-control").style.display = 'none';
    }
    else
    {
    document.getElementById("gzoom-control").style.display = 'block';
    }
    */
   
      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;
      }   
      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) {
	addressnl = address.replace(',the netherlands',' ');
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          alert(addressnl + " niet gevonden");
        } else {
          googleMap.setCenter(point, 13);
          //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 removeWMSLayerTree() {
  var tree = document.getElementById('red');
  //alert (tree);
  tree.innerHTML = '';
 
}   



//---wms methods----

function setLayer(newlyr) {

  if (newlyr!=currlyr) {
    
    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++)
      {
        if (arrLayers.layerName == arrTmp[j])
        {
          //Verander visibility flag
          arrLayers[i].visible = true;
          break;
        }
      }
    }


    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 (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);

    if ((!updateImage) || (!force)) {
      //Als het image nog niet opnieuw hoeft te worden opgevraagd, alleen positie bijwerken.    
      this.img_.style.width = w + "px";
      this.img_.style.height = h + "px";
      this.img_.style.left = l + "px";
      this.img_.style.top = t + "px";
      return;
    }
    
    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 ((currlyr!="") && (ovrly != null)) {
      var lsrs = 900913;
      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";

      //display loading img
      //alert ('show LM redraw');
      toggleLM(true);
      //random getal toevoegen om een refresh te forceren (cache omzeilen)
      url=MapServerURL+"&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.0&LAYERS="+currlyr+"&STYLES=default&FORMAT=image/gif&BGCOLOR=0xFFFFFF&TRANSPARENT=TRUE&SRS="+srs+"&BBOX="+bbox900913+"&WIDTH="+imgW+"&HEIGHT="+imgH+"&rnd="+Math.random();
      this.img_.src=url;

      //test
      this.img_.onerror = dikkeerror;
      //end test 
/*
      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;
    
  }
}




/*WMSOverlay.prototype.redraw = function(force) {
  if (!force) return;

  if (!updateImage) return;

  if (this.map_!=null) {
    var b = googleMap.getBounds();
    
    //alert(b);
    
    //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=="") {

        //leeg

      }
        else
      {
      
        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";

        //display loading img
        //alert ('show LM redraw');
        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; 
  
  //debug
  //alert (document.getElementById('hdn_img_url').value);
  //document.getElementById('hdn_img_url').value = url;
  
        this.img_.src=url;
        this.img_.onerror = dikkeerror;

        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);
  }
  
}

 //
 // Zoom naar de best fit voor de opgegeven bounds
 //
 function bestFit(map, bounds) {
   map.setZoom(map.getBoundsZoomLevel(bounds));
   map.setCenter(bounds.getCenter());
 }



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;
};

