JQuery autocomplete while reading from mySQL

JQuery autocomplete while reading from mySQL

Hey guys,
I've attempting to display a bunch of markers on google maps (read from mySQL database) while allowing the user to search their address. The idea is that the map will zero in on their search, with markers displaying nearby.

I can get the markers displaying. I can get the search happening. I just can't get them working together. I've done a lot of research and experimenting to no avail. Below is the code for my closest attempt. Would appreciate any advice or hints. Thanks in advance!

  1. <!DOCTYPE html >
  2.   <head>
  3.     <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  4.     <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  5.     <title>PHP/MySQL & Google Maps Example</title>
  6.     <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
  7.     <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
  8.     <script type="text/javascript" src="js/gmap3.min.js"></script>
  9.     <script type="text/javascript" src="js/jquery-autocomplete.min.js"></script>
  10.     <link rel="stylesheet" type="text/css" href="css/jquery-autocomplete.css"/>
  11.     <script type="text/javascript">
  12.     //<![CDATA[

  13.     function load() {
  14.       var map = new google.maps.Map(document.getElementById("map"), {
  15.         center: new google.maps.LatLng(-33.866584707354, 151.2188931196655),
  16.         zoom: 8,
  17.         mapTypeId: 'roadmap'
  18.       });
  19.       var infoWindow = new google.maps.InfoWindow;

  20.       // read from database
  21.       downloadUrl("genxml.php", function(data) {
  22.         var xml = data.responseXML;
  23.         var markers = xml.documentElement.getElementsByTagName("marker");
  24.         for (var i = 0; i < markers.length; i++) {
  25.           var name = markers[i].getAttribute("name");
  26.           var address = markers[i].getAttribute("address");
  27.           var type = markers[i].getAttribute("type");
  28.           var point = new google.maps.LatLng(
  29.               parseFloat(markers[i].getAttribute("lat")),
  30.               parseFloat(markers[i].getAttribute("lng")));
  31.           var html = "<b>" + name + "</b> <br/>" + address;
  32.           var icon = customIcons[type] || {};
  33.           var marker = new google.maps.Marker({
  34.             map: map,
  35.             position: point,
  36.             icon: icon.icon,
  37.             shadow: icon.shadow
  38.           });
  39.           bindInfoWindow(marker, map, infoWindow, html);
  40.         }
  41.       });
  42.     }

  43.     function bindInfoWindow(marker, map, infoWindow, html) {
  44.       google.maps.event.addListener(marker, 'click', function() {
  45.         infoWindow.setContent(html);
  46.         infoWindow.open(map, marker);
  47.       });
  48.     }

  49.     function downloadUrl(url, callback) {
  50.       var request = window.ActiveXObject ?
  51.           new ActiveXObject('Microsoft.XMLHTTP') :
  52.           new XMLHttpRequest;

  53.       request.onreadystatechange = function() {
  54.         if (request.readyState == 4) {
  55.           request.onreadystatechange = doNothing;
  56.           callback(request, request.status);
  57.         }
  58.       };
  59.       request.open('GET', url, true);
  60.       request.send(null);
  61.     }

  62.     function doNothing() {}
  63.   </script>
  64.   </head>

  65.   <body>
  66.    <input type="text" id="address" size="60"><br/><br/>
  67. <div id="map" style="width: 800px; height: 600px;"></div>

  68. <script type="text/javascript">
  69. $(document).ready(function() {
  70.   $('#map').gmap3();
  71.           $('#address').autocomplete({
  72.             source: function() {
  73.               $("#map").gmap3({
  74.                 action:'getAddress',
  75.                 address: $(this).val(),
  76.                 callback:function(results){
  77.                   if (!results) return;
  78.                   $('#address').autocomplete(
  79.                     'display', 
  80.                     results,
  81.                     false
  82.                   );
  83.                 }
  84.               });
  85.             },
  86.             cb:{
  87.               cast: function(item){
  88.                 return item.formatted_address;
  89.               },
  90.               select: function(item) {
  91.                 $("#map").gmap3(
  92.                   {action:'', name:'marker'},
  93.                   {action:'addMarker',
  94.                   latLng:item.geometry.location,
  95.                     map:{center:true, zoom:8}
  96.                   }
  97.                 );
  98.               }
  99.             }
  100.           })
  101.           .focus();
  102. });
  103. </script>
  104. <script type="text/javascript"> window.onload=function(){ load(); }</script>
  105.   </body>

  106. </html>