/**
 * VisitorsMap - A real-time ajax joomla visitors google map
 * @version 2.0.0
 * @package VisitorsGoogleMap
 * @license http://www.gnu.org/licenses/gpl-3.0.txt   GNU General Public License v3
 * @copyright (C) 2010 by Serdar Gokkus - All rights reserved!
 * @website http://www.comlantis.com
 **/
      var mapObject;
      var all_markers = [];
      var boundsObject;      
      var lastMarkerID = 0;
      var infoWindow;
      var initialMarkersClustered = false;
      var markerCluster;
      
          function buildXmlHttp()
          {
            var xmlHttp;
            try
            {
              xmlHttp=new XMLHttpRequest();
            }
            catch (e)
            {
              try
              {
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
              }
              catch (e)
              {
                try
                {
                  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e)
                {
                  alert("Your browser does not support AJAX!");
                  return false;
                }
              }
            }
            return xmlHttp;
          }
            
            
         function addMarkers()
         {
          xml=buildXmlHttp();
          xml.onreadystatechange=function()
          {
            if(xml.readyState==4)
            {
              var doc=xml.responseXML;
              xmlMarkers = doc.getElementsByTagName('marker');
              xmlReferres = doc.getElementsByTagName('referrer');
              for (var i = 0; i < xmlMarkers.length; i++) 
              {
                xmlMarker = xmlMarkers[i];
                var location = new Object();
                location.city = xmlMarker.getAttribute('city');
                location.lat = xmlMarker.getAttribute('lat');
                location.lng = xmlMarker.getAttribute('lng');
                location.time = xmlMarker.getAttribute('time');
                location.country = xmlMarker.getAttribute('country');
                location.countryCode = xmlMarker.getAttribute('countryCode');
                location.countryCode =location.countryCode.toLowerCase();
                location.id = xmlMarker.getAttribute('id');
                if(vgm_cluster_markers && initialMarkersClustered == false)
                {
                  if(i == (xmlMarkers.length-1))
                    addLocationToList(location, true);
                  else
                    addLocationToList(location, false);
                }
                else
                {
                  if(i == (xmlMarkers.length-1))
                    addLocationToMap(location, true);
                  else
                    addLocationToMap(location, false);
                }
                if(lastMarkerID < parseInt(location.id))  
                {
                  lastMarkerID = parseInt(location.id);
                }
              }
              if(vgm_cluster_markers && initialMarkersClustered == false)
              {
                var mcOptions = {gridSize: 50, maxZoom: 15};
                markerCluster = new MarkerClusterer(mapObject, all_markers, mcOptions);
              }
              initialMarkersClustered = true;
              
              if(vgm_zoom_Strategy == 1)
              {
                 if(xmlMarkers.length > 0) 
                 {  
                   mapObject.setCenter(new google.maps.LatLng(location.lat,location.lng));
                   mapObject.setZoom(vgm_zoom_Value);
                 }
              }
              else
              {
                if(xmlMarkers.length > 0) zoomToBounds();     
              }
              window.setTimeout("addMarkers()",vgm_update_interval);
            }
          }
          xml.open('GET',vgm_module_path+'modules/mod_visitorsgooglemap/map_data.php?action=listpoints&lastMarkerID='+lastMarkerID+'&random='+Math.random(), true);
          xml.send(null);           
         }
        
         function addLocationToMap(location, isLastMarker) 
         {     
           var marker = new google.maps.Marker({
             position: new google.maps.LatLng(location.lat, location.lng),
            title:location.city,
             map:mapObject
           });     
          if(vgm_zoom_Strategy == 0)
          {
            boundsObject.extend(new google.maps.LatLng(location.lat, location.lng));
          }
          
         var htmlCode=""; 
         htmlCode +=location.time;
         htmlCode +=' - '+location.city;
         htmlCode +=' - <img border="0" src="'+vgm_module_path+'modules/mod_visitorsgooglemap/flags/'+location.countryCode+'.gif" width="20" height="12"> '+location.country;
         
        // Add a click event to a marker
        google.maps.event.addListener(marker, 'click', function() 
        {
          if (infoWindow) infoWindow.close();
          infoWindow = new google.maps.InfoWindow({content: htmlCode});
          infoWindow.open(mapObject, marker);
        });
        if(isLastMarker)
        {
          if (infoWindow) infoWindow.close();
          infoWindow = new google.maps.InfoWindow({content: htmlCode});
          infoWindow.open(mapObject, marker);
        }
         }
         
         function addLocationToList(location, isLastMarker) 
         {     
           var marker = new google.maps.Marker({
             position: new google.maps.LatLng(location.lat, location.lng),
            title:location.city
           });     

          if(vgm_zoom_Strategy == 0)
          {
            boundsObject.extend(new google.maps.LatLng(location.lat, location.lng));
          }

             var htmlCode=""; 
             htmlCode +=location.time;
             htmlCode +=' - '+location.city;
             htmlCode +=' - <img border="0" src="'+vgm_module_path+'modules/mod_visitorsgooglemap/flags/'+location.countryCode+'.gif" width="20" height="12"> '+location.country;
             
            // Add a click event to a marker
            google.maps.event.addListener(marker, 'click', function() 
            {
              if (infoWindow) infoWindow.close();
              infoWindow = new google.maps.InfoWindow({content: htmlCode});
              infoWindow.open(mapObject, marker);
            });
            if(isLastMarker)
            {
              if (infoWindow) infoWindow.close();
              infoWindow = new google.maps.InfoWindow({content: htmlCode});
              infoWindow.open(mapObject, marker);
            }
         
           all_markers.push(marker);
         }

         function zoomToBounds() 
         {     
          mapObject.fitBounds(boundsObject);
          mapObject.setCenter(boundsObject.getCenter());
         }    
      
         function initVGMapp() 
         { 
            var vgm_MapOptions = 
            {
              zoom: 1,
              center: new google.maps.LatLng(0, 0),
              disableDefaultUI: true,
              mapTypeControl: vgm_show_GMapTypeControl,
              mapTypeControlOptions: 
              {
                style: vgm_maptype_control_style_code,
                position: vgm_maptype_control_position_code
              },
              navigationControl: vgm_show_GSmallMapControl,
              navigationControlOptions: 
              {
                style:vgm_zoom_toolbar_control_style_code,
                position: vgm_zoom_toolbar_control_position_code
              },
              scaleControl: vgm_display_scale,
              mapTypeId:vgm_map_type_id_code
            }
            mapObject =new google.maps.Map(document.getElementById('vgm_map'), vgm_MapOptions);
            boundsObject = new google.maps.LatLngBounds();

            addMarkers();
         } 
        window.onload = initVGMapp;

