    // global vars   
    var baseIcon;    
    
    var markerIcons = {};
    var itemAddresses = new Array();
    var overlayMarkers = new Array();

    var markersState = {};
    markersState["Completed"] = false;
    markersState["Under Construction"] = false;
    markersState["Proposed"] = false;
    markersState["Cancelled"] = false;
    var all_on = false;

   function createMarker(point, iconCategory, name, description, address, city, state, zip, country, phone, website, itemId) {
     var icon = markerIcons[iconCategory]; 
     var marker = new GMarker(point, icon);       
     var cityStateZip = city + ", " + state + " " + zip + " " + country;
     itemAddresses[itemId] = address+", "+cityStateZip;          
    
     GEvent.addListener(marker, "click", function() {           
        marker.openInfoWindowHtml("<table><tr><td class='TextMap' style='text-align:left;padding-top:0px'><b>"+name+"</b></td></tr><tr><td class='TextMap' style='text-align:left;padding-top:0px'>"+address+"<br/>"+cityStateZip+"<br/>"+phone+"<br/><br/><a class='Link' href='javascript:viewItem("+itemId+")'>view details</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a class='Link' href='javascript:mapDirections("+itemId+")'>get directions</a></td></tr></table>");
     });
      
     return marker;
   }

   function loadBuildingMarkers() {
     // init marker icons
     baseIcon = new GIcon();
     baseIcon.shadow = "images/eola/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);   

     var clubIcon = new GIcon(baseIcon);
     clubIcon.image = "images/eola/redpin.png";
     markerIcons["Chapter"] = clubIcon;
       
    GDownloadUrl("ViewXML-chapterMap.do", function(data, responseCode) {       
        var xml = GXml.parse(data);       
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
           var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                   parseFloat(markers[i].getAttribute("lon")));
           var itemId = markers[i].getAttribute("itemId");
           var name = markers[i].getAttribute("name");
           var address = markers[i].getAttribute("street");
           var city = markers[i].getAttribute("city");
           var state = markers[i].getAttribute("state");
           var zipcode = markers[i].getAttribute("zipcode");
           var country = markers[i].getAttribute("country");
           var description = markers[i].getAttribute("description"); 
           var phone = markers[i].getAttribute("phone");
           var website = markers[i].getAttribute("website");
 
           overlayMarkers[i] = createMarker(point, "Chapter", name, description, address, city, state, zipcode, country, phone, website, itemId);         
           map.addOverlay(overlayMarkers[i]);         
        }
     });  
     //var mgrOptions = { borderPadding: 50, trackMarkers: false };
     //var mgr = new GMarkerManager(map, mgrOptions);     
     //mgr.addMarkers(overlayMarkers, 1);   
     //mgr.refresh();   
   }
  
   function toggleMarkers(map, status, button) {     
     if (markersState[status]) {
        // currently on, turn off    
        for (var i = 0; i < overlayMarkers.length; i++) {
           var marker = overlayMarkers[i];
           var icon = marker.getIcon();
           if (icon == markerIcons[status]) {
              map.removeOverlay(marker);              
           }        
        }
        markersState[status] = false;
     } else {
        // currently off, turn on
        for (var i = 0; i < overlayMarkers.length; i++) {
           var marker = overlayMarkers[i];
           var icon = marker.getIcon();
           if (icon == markerIcons[status]) {
              map.addOverlay(marker);            
           }
        }
        markersState[status] = true;
     }  
     refreshMarkerButtons();    
     if (button != undefined) button.style.cursor = 'pointer';
   } 

   function refreshMarkerButtons() {
     refreshMarkerButton('Completed', '#4B904B');
     refreshMarkerButton('Under Construction', '#BF9656');
     refreshMarkerButton('Proposed', '#4E75A8');
     refreshMarkerButton('Cancelled', '#B74545');
     document.getElementById('All On Button').style.backgroundColor = ""; 
     document.getElementById('All Off Button').style.backgroundColor = ""; 

     if (markersState['Completed'] &&
            markersState['Under Construction'] &&
            markersState['Proposed'] &&
            markersState['Cancelled']) {
        all_on = true;
        document.getElementById('All On Button').style.backgroundColor = '#CCCCCC';         
     } else {
        all_on = false;
     }

     if (!markersState['Completed'] &&
            !markersState['Under Construction'] &&
            !markersState['Proposed'] &&
            !markersState['Cancelled']) {
       //all_on = false;
       document.getElementById('All Off Button').style.backgroundColor = '#CCCCCC';        
     }     
   }

  function refreshMarkerButton(status, color) {
    var toggleButton = document.getElementById(status+' Button');
    if (markersState[status]) {
      toggleButton.style.backgroundColor = color;
      toggleButton.style.color = '#eeeeee';
    } else {
      toggleButton.style.backgroundColor = "";
      toggleButton.style.color = "";
    }            
  }

   function markersOn(map, button) {       
     if (!all_on) {                  
         testpause(4000);
         map.clearOverlays();     
         for (var i = 0; i < overlayMarkers.length; i++) {                         
           map.addOverlay(overlayMarkers[i]);         
         } 
         markersState["Club"] = true;        
         refreshMarkerButtons();               
     }
     if (button != undefined) button.style.cursor = 'pointer';
   } 

   function markersOff(map, button) {
     map.clearOverlays();
     all_on = false;
     markersState["Club"] = false;    
     refreshMarkerButtons();     
     if (button != undefined) button.style.cursor = 'pointer';
   } 

   function displayMessage(msg) {
     document.getElementById("message").innerHTML = msg;
   }


function lookupCoordinates(obj) {
  var street = obj.form['address.street'].value;
  var city = obj.form['address.city'].value;
  var state = obj.form['address.state'].value;
  var zip = obj.form['address.zipcode'].value;
  var country = obj.form['address.country'].value; 

  if (city.length > 0 && (state.length > 0 || country.length > 0)) {
    var address = street + ", " + city + ", " + state + " " + zip + " " + country;
    document.getElementById('addressLookupButton').value = 'Searching...';
    document.getElementById('addressLookupButton').disabled = true;

    var geocoder = new GClientGeocoder();   
    geocoder.getLatLng(address, 
      function(point) {
        if (!point) {
            alert(address + " not found!");
        } else {
            obj.form['geoCoordinate.latInDecDeg'].value = point.lat();
            obj.form['geoCoordinate.lonInDecDeg'].value = point.lng();
            change();
        }
    } );  
    document.getElementById('addressLookupButton').value = 'Auto-Locate';
    document.getElementById('addressLookupButton').disabled = false; 
  } else {
    alert('Address is Incomplete!\nCity and State or Country required.');
  }
}


function viewMapSimple(obj) {
   var lat = obj.form['geoCoordinate.latInDecDeg'].value;
   var lon = obj.form['geoCoordinate.lonInDecDeg'].value;
   var zoom = 17;
   if (lat == 0 && lon == 0) {
     zoom = 3;
   }

   var url = 'Display-MapSimple.do?lat='+lat+'&lon='+lon+'&zoom='+zoom;   
   newWindow = window.open(url,'mapViewPopup','top=0,left=0,width=675,height=630,resizable=no,status=0');     
   change();
   newWindow.focus();   
}

function closeMapWindow() {
  window.opener.focus();
  window.close(); 
}

function goTo(map, lat, lon, zoom) {
  map.setCenter(new GLatLng(lat, lon), zoom);
  map.savePosition();
}

function viewItemPopup(itemId) { 
 window.opener.location.href = "ViewItem-"+itemId+".do";
 window.opener.focus();
}

function viewItem(itemId) { 
 document.location.href = "ViewItem-"+itemId+".do"; 
}

function testpause(millisecondi)
{
    var now = new Date();
    var exitTime = now.getTime() + millisecondi;

    while(true)
    {
        now = new Date();
        if(now.getTime() > exitTime) return;
    }
}

function mapDirections(itemId) {
   mapDirectionsAddress(itemAddresses[itemId]);  
}

function mapDirectionsAddress(address) {  
    var url = 'http://www.google.com/maps?hl=en&daddr='+escape(address);  
    var w = 900;
    var h = 650;
    var winl = (screen.width - w) / 2;
    var wint = (screen.height - h) / 2;
    winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars=yes,resizable=yes' 
    newWindow = window.open(url,'direcions',winprops);        
    newWindow.focus();   
}
