﻿function initializeMap(container, officeInfoXml, city, imgBase, officeHoursLabelHtml, phonesLabelHtml) {
    function createMarker(point, html) {
	  var tinyIcon = new GIcon();
	  tinyIcon.image = imgBase + "/office.png";
	  tinyIcon.shadow = imgBase + "/officeShadow.png";
	  tinyIcon.iconSize = new GSize(12, 20);
	  tinyIcon.shadowSize = new GSize(22, 20);
	  tinyIcon.iconAnchor = new GPoint(6, 20);
	  tinyIcon.infoWindowAnchor = new GPoint(5, 1);
	  markerOptions = { icon:tinyIcon };
        var marker = new GMarker(point, markerOptions);
        GEvent.addListener(marker, "mouseover", function() {
          marker.openInfoWindowHtml(html);
        });
/*        GEvent.addListener(marker, "mouseout", function() {
          marker.closeInfoWindow();
        });
*/
        return marker;
    }

    function findCityInfo(xmlDoc, city) {
        var cityInfo = xmlDoc.documentElement.getElementsByTagName("cityInfo");
        for (var i = 0; i < cityInfo.length; i++)
            if (city == cityInfo[i].getElementsByTagName("name")[0].firstChild.nodeValue)
                return cityInfo[i];
              
        return null;
    }

    if (GBrowserIsCompatible()) { 
      var map = new GMap2(document.getElementById(container));
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());

      var request = GXmlHttp.create();
      request.open("GET", officeInfoXml, true);
      request.onreadystatechange = function() {
          if (request.readyState == 4) {
              var xmlDoc = GXml.parse(request.responseText);
              var cityInfo = findCityInfo(xmlDoc, city);
              if (cityInfo != null) {
                var mapAttribute = cityInfo.getElementsByTagName("mapAttribute")[0];
                var lat = parseFloat(mapAttribute.getAttribute("lat"));
                var lon = parseFloat(mapAttribute.getAttribute("lon"));
                var zoom = parseFloat(mapAttribute.getAttribute("zoom"));
                map.setCenter(new GLatLng(lat, lon), zoom);
                

              var coordinates = cityInfo.getElementsByTagName("coordinates");
              for (var i = 0; i < coordinates.length; i++) {
                var lat = parseFloat(coordinates[i].getAttribute("lat"));
                var lon = parseFloat(coordinates[i].getAttribute("lon"));
                var point = new GLatLng(lat,lon);

                var officeInfo = coordinates[i].parentNode.parentNode;
                var officeTitleNodes = officeInfo.getElementsByTagName("title");
                var officeTitle = officeTitleNodes.length > 0 ? officeTitleNodes[0].firstChild.nodeValue: null;
                
                var contactInfo = coordinates[i].parentNode;
                var address = contactInfo.getElementsByTagName("address")[0].firstChild.nodeValue;
                var officeHours = null;
                if (contactInfo.getElementsByTagName("officeHours")[0]) {
					officeHours = contactInfo.getElementsByTagName("officeHours")[0].firstChild.nodeValue;
                }
                var phoneNodes = contactInfo.getElementsByTagName("phone");
                var phones = '';
                for (var p = 0; p < phoneNodes.length; p++)
                    phones += phoneNodes[p].firstChild.nodeValue + ',';
                phones = phones.substr(0, phones.length - ','.length);
                var marker = createMarker(point, '<div style="width: 300px;">' +
                     (officeTitle != null ? '<h3>'+officeTitle+'</h3>' + '<br/>':'')
                     + address +
                     (officeHours != null ?'<br/>' + officeHoursLabelHtml + ' '+ officeHours:'')
                     + '<br/>' + phonesLabelHtml + ' '+phones   + '</div>'
                     );
                
                map.addOverlay(marker);
                }
              } else 
                alert("City " + city + " not found");
          }
      }
      request.send(null);
    } else {
      alert("Google Maps API is not supports this browser");
    }
}
