var geocoder;
  var map;
  var bounds;
  var infoWindow;
  
  var customIcons = {
    company: {
      icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
    },
    current: {
      icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
    }
  };

  function initialize(url) {
    var latlng = new google.maps.LatLng(49.8, 15.7);    
    var myOptions = {
      zoom: 6,
      center: latlng,
      mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
      streetViewControl: true,  
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    geocoder = new google.maps.Geocoder();
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    bounds = new google.maps.LatLngBounds();
    infoWindow = new google.maps.InfoWindow();
    
    
    downloadUrl(url, function(data) {
      var xml = parseXml(data);
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var type = markers[i].getAttribute("type");
        var url = markers[i].getAttribute("url");
        var point = new google.maps.LatLng(
            parseFloat(markers[i].getAttribute("lat")),
            parseFloat(markers[i].getAttribute("lng")));
        var html = "<b>" + name + "</b> <br/>" + address + "<br/>" + "<a href=\"" + url + "\">Více zde</a>";
        var icon = customIcons[type] || {};
        var marker = new google.maps.Marker({
          map: map,
          icon: icon.icon,
          shadow: icon.shadow,
          position: point
        });        
        bindInfoWindow(marker, map, infoWindow, html);
        if(type=='current'){
            bounds.extend(marker.getPosition());                   
            map.fitBounds(bounds);
            map.setZoom(16);
        } 
      }
    });

  /*
  downloadUrl("/markers.php?mesto=4", function(data) {
    var xml = parseXml(data);
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
      var name = markers[i].getAttribute("name");
      var address = markers[i].getAttribute("address");    
      var html = "<b>" + name + "</b> <br/>" + address;
      var marker = codeAddress(address, false); 
      if(marker){
        bindInfoWindow(marker, map, infoWindow, html);
      }
    }
  });
  */      
    

  }
  
  function codeAddress(address, fit) {  
    var marker;  
    if (geocoder) {
      geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          map.setCenter(results[0].geometry.location);
          marker = new google.maps.Marker({
              map: map, 
              position: results[0].geometry.location
          });
          if(fit){
            bounds.extend(results[0].geometry.location);                   
            map.fitBounds(bounds);
          }          
        } else {
          alert("Geocode was not successful for the following reason: " + status);
        }
      });
    }
    return marker;
  }
  
  function downloadUrl(url,callback) {
    var request = window.ActiveXObject ?
     new ActiveXObject('Microsoft.XMLHTTP') :
     new XMLHttpRequest;

     request.onreadystatechange = function() {
       if (request.readyState == 4) {
         request.onreadystatechange = doNothing;
         callback(request.responseText, request.status);
       }
     };
    
     request.open('GET', url, true);
     request.send(null);
  }
  
  function bindInfoWindow(marker, map, infoWindow, html) {
    google.maps.event.addListener(marker, 'click', function() {
      infoWindow.setContent(html);
      infoWindow.open(map, marker);
    });
  }


    function parseXml(str) {
      if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
      } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
      }
    }
    
    function doNothing() {}
