var map;
var geocoder = null;
var baseIcon;
var addressMgr;
var numGeocoded = 0;
var markerNumber = 0;
var addressCentered = false;
var arPoints = {};
var panPoint;
var pinIsClickable = false;

function loadMap(bSetPinClick) {
  if (GBrowserIsCompatible()) {
    
    if (bSetPinClick)
        pinIsClickable = true;
    
    if(!document.getElementById("googlemap"))
    {
        return;
    }
    
    map = new GMap2(document.getElementById("googlemap"));
    //map.addControl(new GSmallMapControl());
    map.addControl(new GSmallZoomControl());
   // map.addControl(new GMapTypeControl());
        
    // Create a base icon for all of our markers that specifies the
    // shadow, icon dimensions, etc.
    if (baseIcon == null) {
        baseIcon = new GIcon();
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
    }

    if (mapLocations.length > 0) {
        map.setCenter(new GLatLng(34.05, -118.25), 9);// previously the zoom level is 13
        addressMgr = new MarkerManager(map);
        geocoder = new GClientGeocoder();
        window.setTimeout(geocodeAll, 50);
    }
  }
}

function geocodeAll() {
  if (numGeocoded < mapLocations.length) {
    sendAddress = mapLocations[numGeocoded][1] + ", " + mapLocations[numGeocoded][2] + ", " + mapLocations[numGeocoded][3] + ", " + mapLocations[numGeocoded][4];
    markerNumber = mapLocations[numGeocoded][5];
    geocoder.getLocations(sendAddress, addressResolved);
  }
  else {
    addressCentered = false;
    numGeocoded = 0;
    addressMgr.refresh();
  }
}

function addressResolved(response) {
 var delay = 50;
 if (response.Status.code == 620) {
   // Too fast, try again, with a small pause
   delay = 500;
 } else {
   if (response.Status.code == 200) {
     // Success; do something with the address.
     place = response.Placemark[0];
     point = new GLatLng(place.Point.coordinates[1],
                         place.Point.coordinates[0]);
                         
     //Clear the manager if this is a new request
     if (numGeocoded == 0) {
        addressMgr.clearMarkers();
     }
     addressMgr.addMarker(createMarker(point, numGeocoded + 1), 1);
     
     arPoints[numGeocoded] = point;
     
     if (!addressCentered)
     {
        map.setCenter(point,13);
        addressCentered = true;
     }
   }
   // Move onto the next address; this skips bad addresses, too.
   numGeocoded += 1;
 }
 window.setTimeout(geocodeAll, delay);
}

function createMarker(point, index) {
  // Create a lettered icon for this point using our icon class
  var letteredIcon = new GIcon(baseIcon);
  letteredIcon.image = "/images/markers/marker" + markerNumber + ".png";

  // Set up our GMarkerOptions object
  markerOptions = { icon:letteredIcon };
  var marker = new GMarker(point, markerOptions);

    if (pinIsClickable)
    {
        GEvent.addListener(marker, "click", function() {
            showAddress(index - 1, true);
        });
    }
  
  return marker;
}

function showAddress(pointId, popInfoWindow) {
    panPoint = pointId;
    if (popInfoWindow)
        window.setTimeout(delayPan, 50);
    else
        window.setTimeout(delayPanNoPop, 50)
}

function delayPanNoPop() {
    var point;
    
    point = arPoints[panPoint];
    
    if (point != null)
    {
        map.setCenter(point);
    }
}

function delayPan() {
    var point;
    
    point = arPoints[panPoint];
    
    if (point != null)
    {
        map.panTo(point);
        infoWindowHtml = "<table cellpadding=\"0\" cellspacing=\"3\" border=\"0\">" +
            "<tr valign=\"top\">" +
            "<td colspan=\"2\" width=\"276px\">"+          
            "<div style=\"width:276px;float:left; display:block;\">"+
                "<div class=\"GradeNumber\" style=\"float:left;\">" + mapLocations[panPoint][9] + "</div>"+
                "<div style=\"float:right;font-size:14px;font-weight:bold;width:220px;color:#1093FF;\">"+mapLocations[panPoint][6] +"</div>"+
	         "</div>"+
	         "</td></tr><tr valign=\"top\"><td>"+		
            "<a href=\"/RestaurantDetail.aspx?id=" + mapLocations[panPoint][0] + "&name=" + urlencode(mapLocations[panPoint][6]) + "&loc=" + urlencode(mapLocations[panPoint][2]) + "&cuisine=\"><img src=\"" + mapLocations[panPoint][10] + "\" style=\"padding:3px;width:90px; height:65px;border:solid 1px #DCDCDC;float:left;overflow:hidden;\" onError=\"this.src='/images/imageNotAvailable.gif';\"></a><br />" +           
            "</td><td>" + 
            "<div style=\"width:206px; color:black; line-height:16px;float:left;padding-left:11px\">" +              
                "<div>" +
                    "<div style=\"font-style:italic;\">" +
                        mapLocations[panPoint][12]+" | "+mapLocations[panPoint][2] + "</div>" +
                    "<span>" +
                        mapLocations[panPoint][1] + "</span><br />" +
                    "<span>" +
                        mapLocations[panPoint][2] +", "+ mapLocations[panPoint][3] + " </span>" +
                    "<span>" +
                         mapLocations[panPoint][13]+"</span>" +                   
                "</div>" +
                "<div>" +
                    mapLocations[panPoint][7] + "</div>" +
            "" +
                "<a href=\"/RestaurantDetail.aspx?id=" + mapLocations[panPoint][0] + "&name=" + urlencode(mapLocations[panPoint][6]) + "&loc=" + urlencode(mapLocations[panPoint][2]) + "&cuisine=&writereview=yes\" class=\"bluelink\">Write Review</a><br />"+
               "<a href=\"/RestaurantDetail.aspx?id=" + mapLocations[panPoint][0] + "&name=" + urlencode(mapLocations[panPoint][6]) + "&loc=" + urlencode(mapLocations[panPoint][2]) + "&cuisine=\" class=\"bluelink\">Read Review ("+urlencode(mapLocations[panPoint][11]) +")</a>";
                    
                if(mapLocations[panPoint][14]>0)
                    infoWindowHtml = infoWindowHtml+" <img src=\"images/profile/MyReview.gif\" />";
                
               infoWindowHtml = infoWindowHtml + "</div></td>" +
            "</tr>" +
            "</table>";            
        map.openInfoWindowHtml(point, infoWindowHtml);
    }
    addressMgr.refresh();
}

function doCheckSize()
{
    map.checkResize();
}
