	var map;
    var geocoder;

    function load() {
      if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(-33.867139, 151.207114), 3);
      }
    }

   function searchLocations(baseUrl) {
     var address = document.getElementById('address').value;

     geocoder.getLatLng(address, function(latlng) {
       if (!latlng) {
         alert(address + ' not found');
       } else {
         searchLocationsNear(latlng,baseUrl);
       }
     });
   }


   function IsNumeric(sText)

   {
      var ValidChars = "0123456789.";
      var IsNumber=true;
      var Char;

      var sText = sText.split(' ').join('');

	      if(sText.length > 0) {
		      for (i = 0; i < sText.length && IsNumber == true; i++) 
		         { 
		         Char = sText.charAt(i); 
		         if (ValidChars.indexOf(Char) == -1) 
		            {
		            IsNumber = false;
		            }
		         }
	      }
	      else{
	    	  IsNumber = false;
	      }
	      return IsNumber;
      }


   	
   
   function searchLocationsNear(center,baseUrl) {
	   
     var radius = document.getElementById('radiusSelect').value;
     
     var searchUrl = baseUrl+'/index.php/store-locator/create-search-xml?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
     
     GDownloadUrl(searchUrl, function(data) {
         var xml = GXml.parse(data);
         var markers = xml.documentElement.getElementsByTagName('marker');
         map.clearOverlays();

       var sidebar = document.getElementById('store-list');
       sidebar.innerHTML = '';

       var map_note = document.getElementById('map_note');
       map_note.innerHTML = '';
       
       if (markers.length == 0) {
    	   map_note.innerHTML = '<span style="color:red;">No results found.</span>';
    	   map.setCenter(center, 3);
         //hideMap('map');
         return;
       }
       else{
    	  // showMap('map');
       }
       
       var bounds = new GLatLngBounds();
       
       for (var i = 0; i < markers.length; i++) {
           
         var name = markers[i].getAttribute('name');
         // Damir: added more_info to markers array
         var address = markers[i].getAttribute('address2')+"<br/>"+markers[i].getAttribute('suburb')+" "+markers[i].getAttribute('city')+" "+markers[i].getAttribute('state')+" "+markers[i].getAttribute('postcode')+"<br/>"+markers[i].getAttribute('country')+"<br/>"+markers[i].getAttribute('more_info');
		 // Damir: added View More Info link
		 var formatAddress = "<div class='address'>"+markers[i].getAttribute('address1')+"</div><div class='address'>"+markers[i].getAttribute('address2')+",</div><div class='address'>"+markers[i].getAttribute('suburb')+" "+markers[i].getAttribute('city')+" "+markers[i].getAttribute('state')+" "+markers[i].getAttribute('postcode')+"</div><div class='address'>"+markers[i].getAttribute('country')+"</div><div class='address'>"+markers[i].getAttribute('more_info')+"</div>";

		 formatAddress = formatAddress.replace("null", '');

	     address = address.replace("null", '');

	     var adjstVal=0;

	     // adjusting the zoom level to overide default one
	     if(markers.length < 2){
	    	 adjstVal=6;
	     }

    
  	 	
         var distance = parseFloat(markers[i].getAttribute('distance'));
      
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
         
         var marker = createMarker(point, name, address,baseUrl);
         map.addOverlay(marker);
         
         var sidebarEntry = createSidebarEntry(marker, name, formatAddress);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
         
       }
       if(markers.length>0){
	       var firstloc = parseFloat(markers[0].getAttribute('distance')).toFixed(1);
	       if(firstloc=='0.0'){
	    	  // adjust marking if points coincide
	    	   var avgpointLat = eval(center.lat()+0.01);
	    	   var avgpointLng = eval(center.lng()+0.01);
	    	   center =   new GLatLng(avgpointLat,avgpointLng);
	    	  
	       }
       }
       var markerc = createCurMarker(center,'You are here',baseUrl);
 	   map.addOverlay(markerc);
       map.setCenter(bounds.getCenter(), eval(map.getBoundsZoomLevel(bounds)-adjstVal));
       
     });
   }

    function createMarker(point, name, address,baseUrl) {
    	var iconRed = new GIcon(); 
        iconRed.image = baseUrl+'/public/images/bbs-marker.png';
        iconRed.shadow = baseUrl+'/public/images/marker-shadow.png';
        	iconRed.iconSize = new GSize(35, 29);
		    iconRed.shadowSize = new GSize(48, 29);
		    iconRed.iconAnchor = new GPoint(0, 0);
        iconRed.infoWindowAnchor = new GPoint(5, 1);

        var customIcons = [];
        customIcons["bbcafe"] = iconRed;
        
      var marker = new GMarker(point,customIcons["bbcafe"]);
      var html = '<span style="font-weight:bold;color:red;margin-top:0px;">' + name + '</span><br/><span style="font-weight:normal;color:#000;">' + address +'</span><br/>';
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

    function createCurMarker(point,title,baseUrl) {
    	var iconBlue = new GIcon(); 
        iconBlue.image = baseUrl+'/public/images/you-are-here-marker.png';
        iconBlue.shadow = baseUrl+'/public/images/marker-shadow.png';
       		iconBlue.iconSize = new GSize(35, 29);
		    iconBlue.shadowSize = new GSize(48, 29);
		    iconBlue.iconAnchor = new GPoint(0, 0);

        iconBlue.infoWindowAnchor = new GPoint(5, 1);

        var customIcons = [];
        customIcons["current"] = iconBlue;   
        var markerc = new GMarker(point,customIcons["current"]);
        GEvent.addListener(markerc, 'click', function() {
            markerc.openInfoWindowTabs(title);
        });
        return markerc;
      }

    function createSidebarEntry(marker, name, address) {
      var div = document.createElement('div');
      var html = '<p class="store-name">' + name + address;
      div.innerHTML = html;
      div.style.cursor = 'pointer';
      div.style.marginBottom = '5px'; 
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      });
      GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#eee';
      });
      GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#fff';
      });
      return div;
    }

    function showMap(d) {
    	if(document.getElementById){ // firefox and others
			if(document.getElementById(d).style.visibility == "hidden"){
				document.getElementById(d).style.visibility = "visible";
			}
		}
		else if( document.all ){ // ie
			if(document.all[d].style.visibility == "hidden"){
				document.all[d].style.visibility = "visible";
			}
		}
		else if(document.layers){ // Netscape browswer
			if(document.layers[d].style.visibility  == "hidden"){
				document.layers[d].style.visibility  = "visible";
			}
		}
    }
    function hideMap(d) {
    	if(document.getElementById){ // firefox and others
			if(document.getElementById(d).style.visibility  == "visible"){
				document.getElementById(d).style.visibility  = "hidden";
			}
		}
		else if( document.all ){ // ie
			if(document.all[d].style.visibility  == "visible"){
				document.all[d].style.visibility  = "hidden";
			}
		}
		else if(document.layers){ // Netscape browswer
			if(document.layers[d].style.visibility  == "visible"){
				document.layers[d].style.visibility  = "hidden";
			}
		}
    }