var map;
var localSearch = new GlocalSearch();
var mapzoom;
var region;
var town;
var directoryName       = 'clinics/';
var moreInfo            = 'More info';


function addEvent(oTarget, sType, fpDest) {
  sType = 'on'+sType;
  var oOldEvent = oTarget[sType];
  if (typeof oOldEvent != "function") {
    oTarget[sType] = fpDest;
  } else {
    oTarget[sType] = function(e) {
      oOldEvent(e);
      fpDest(e);
    }
  }
}

function placeMarkers()
{
    // based on the current map bounds send off a request to get what stores are in this.
    if(region != ''  && region != undefined) {
        var url = "/inc/storeLocator-xml.inc.php?region=" + region;
    }
    if(town != '' && town != undefined) {
        var url = "/inc/storeLocator-xml.inc.php?town=" + town;
    }
        
    GDownloadUrl(url, function(data, responseCode) 
    {  
      // if the script doesnt die on us process the results
      if(responseCode == 200) 
      {
        
        // we get returned an xml document 
         var xml = GXml.parse(data);
         // lets get the markers out of that into an array
         if(xml)
         {
            var markers = xml.documentElement.getElementsByTagName("marker"); 
            var markertotal = markers.length;
             
            // lets loop through the xml list
            
            var Icon = new GIcon();
                Icon.image = "/img/markerSign.png";
                Icon.iconSize = new GSize(45, 45);
                Icon.shadow = "/img/markerSignShadow.png";
                Icon.shadowSize = new GSize(78, 47);
                Icon.iconAnchor = new GPoint(10, 45);
                Icon.infoWindowAnchor = new GPoint(21, 0);
            
            
            for (var i = 0; i < markers.length; i++) { 
	            var title = '';
            
                // lets plot the location
	            point = new GLatLng(markers[i].getAttribute("lat"), markers[i].getAttribute("lng"));
	                
	            // make individual markers
	            title = markers[i].getAttribute("town") + ', ' + markers[i].getAttribute("name");     
	                
	            var marker = new GMarker(point, {title: title, icon: Icon}); 
	            lowerCaseTownForUrl = markers[i].getAttribute("town").toLowerCase();
	            name = markers[i].getAttribute("name");
	            marker.name = title; // add some info that we can access later for linking
	            marker.myhtml = "<img src=\"/img/storeLocator-logo.gif\" alt=\"Optical Express\"><br /><strong> " + markers[i].getAttribute("town") + "</strong><br />" + name + "<br /><br /><a onClick=\"saveCurrentPosition();\" href=\"/" + directoryName +  markers[i].getAttribute("fname") + '-'  +  markers[i].getAttribute("id") +  ".html \">" + moreInfo + "</a>";   
	                 
	            marker.id =  markers[i].getAttribute("id");
	            map.addOverlay(marker);
            }
        }
    }   
}
    );
      
}


function createMap()
{
    // basic  function just to create the google map
    map = new GMap2(document.getElementById("storeMap"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addMapType(G_PHYSICAL_MAP);
    //map.addMapType(G_NORMAL_MAP); 

}


function addMapListeners()
{
    // lets add some listeners for click and zoom events
    // lets add some listeners for clikc and zoom events
    GEvent.addListener(map, "click", function(overlay, point) {
        if (overlay) { 
            if (overlay.openInfoWindowHtml) {
                overlay.openInfoWindowHtml(overlay.myhtml);
            } 
        } 
    } );

}

function checkZoom()
{
    placeMarker(); 
}


function mapLoad( ) 
{
  // unless we are setting the zoom to be something else default it to 4 veiw of europe
  if (GBrowserIsCompatible()) 
  {
      if(document.getElementById('region')) {              
        region = document.getElementById('region').value;
      }
      if(document.getElementById('town')) {
        town = document.getElementById('town').value;
      }
      longitudevalue = document.getElementById('longitude').value;
      latitudevalue = document.getElementById('latitude').value;
      zoomvalue = document.getElementById('zoom').value;
      createMap();  
    
        // set min/max map scale
	    var minmapscale = zoomvalue - 2;
	    var maxmapscale = 15;
	    // get array of map types
	    var mapTypes = map.getMapTypes();
	    // overwrite the getMinimumResolution() and getMaximumResolution() methods for each map type
	    for (var i=0; i<mapTypes.length; i++) {
	        mapTypes[i].getMinimumResolution = function() {return minmapscale;}
	        mapTypes[i].getMaximumResolution = function() {return maxmapscale;}
	    }
    
      map.setCenter(new GLatLng(latitudevalue, longitudevalue), parseInt(zoomvalue), G_PHYSICAL_MAP);
      placeMarkers()
      addMapListeners();    
            
  }
}




addLoadEvent(mapLoad);


addUnLoadEvent(GUnload);