$(document).ready(function(){
    runnermap.init();
});

var runnermap = {
   
   map: null,
   api_key: 'ABQIAAAAMwdxgAqXzpdAWJT_nAd5dBQFwuY5_g50tzxAbH7zYGXQkWjcrRQOzsHOlb8xOUCy9X6__cy-DxqUvA',
   url:'/ajax/markers.json.php',
   plotted_area: null,
   loaded:false,
   regions:false,
   
   init:function(){
      
      this.flag = new GIcon();
      this.flag.image = "/_/images/icons/marker_large.png";
      this.flag.iconSize = new GSize(27,27);
      this.flag.iconAnchor = new GPoint(14,14);
      this.flag.infoWindowAnchor = new GPoint(14,14);
        
      this.flag_sm = new GIcon();
      this.flag_sm.image = "/_/images/icons/marker.png";
      this.flag_sm.iconSize = new GSize(17,17);
      this.flag_sm.iconAnchor = new GPoint(9,9);
      this.flag_sm.infoWindowAnchor = new GPoint(9,9);
      
      this.map = new GMap2(document.getElementById("map"));
      this.map.setCenter(new GLatLng(43.103983,-75.245415),2);
      this.map.addControl(new GSmallMapControl());

      this.mgr = new MarkerManager(this.map);
      
      this.addCountryMarkers();
      this.addRegionMarkers();
      this.addCityMarkers();
            
      
   },
    
   addCityMarkers:function(){
   
      var self = this;
      
      $.get(self.url+'?data=cities',function(data){
      
         var markers = [];         
         var json = eval("("+data+")");
         
         for (e in json) {
            var place = json[e];
            var point = new GLatLng(place.latitude,place.longitude);
            var info = '<p><strong><big>'+place.address+'</big></strong></p>'
               + '<strong>Runners:</strong> '+place.runners+' (<a onclick="runnermap.showSearch('+place.id+');return false;" href="/?id='+place.id+'">view list</a>)</p>';
            var marker = self.createMarker(self.map,point,info,true);
            markers.push(marker);
         }
         
         self.mgr.addMarkers(markers,7,14);
         self.mgr.refresh();
         
      });
   
   },
    
   addRegionMarkers:function(){
   
      var self = this;
      
      $.get(self.url+'?data=regions',function(data){
      
         var markers = [];
         var json = eval("("+data+")");
         
         for (e in json) {
            var place = json[e];
            var point = new GLatLng(place.latitude,place.longitude);
            var info = '<p><strong><big>'+place.name+'</big></strong></p>'
                     + '<p><a onclick="runnermap.zoom('+place.latitude+','+place.longitude+',7);return false;" href="#">Zoom in to view cities</a></p>';
            var marker = self.createMarker(self.map,point,info);
            markers.push(marker);
         }
         
         self.mgr.addMarkers(markers,3,6);
         self.mgr.refresh();
         
      });
         
   },
    
   addCountryMarkers:function(){
   
      var self = this;
      
      $.get(self.url+'?data=countries',function(data){
      
         var markers = [];
         var json = eval("("+data+")");
         
         for (e in json) {
            var place = json[e];
            var point = new GLatLng(place.latitude,place.longitude);
            var info = '<p><strong><big>'+place.address+'</big></strong></p>'
                + '<strong>Elite Runners:</strong> '+place.runners+' (<a onclick="runnermap.showSearch('+place.id+');return false;" href="#">view list</a>)</p>'
                + '<p><a onclick="runnermap.zoom('+place.latitude+','+place.longitude+',4);return false;" href="#">Zoom in to find non-elite runners</a></p>';
		
            var marker = self.createMarker(self.map,point,info);
            markers.push(marker);
         }
         
         self.mgr.addMarkers(markers,1,3);
         self.mgr.refresh();
         
      });
   
   },
       
   createMarker:function(map,point,info,sm) {
   
      var self = this;
      var flag = (sm==true)
         ? self.flag_sm
         : self.flag
      
      var marker = new GMarker(point,flag);
      GEvent.addListener(marker,"click",function(){
         if (info) {
            marker.openInfoWindowHtml(info);
         } else {
            self.map.zoomIn(point);
         }
      });
      
      return marker;

   },
   
   zoomRegion:function(state,country,latitude,longitude) {
    
        var self = this;
        //this.map.clearOverlays();
        self.regions = false;
        
        this.map.setCenter(new GLatLng(latitude,longitude),7);
        
        var url = self.url + '?state='+state+'&country='+country;
            
        $.get(url,function(data){
            var json = eval("("+data+")");
            //alert(data);
            for (e in json) {
                var place = json[e];
                var point = new GLatLng(place.latitude,place.longitude);
                var info = '<p><strong><big>'+place.address+'</big></strong></p>'
                         + '<strong>Runners:</strong> '+place.runners+' (<a onclick="runnermap.showSearch('+place.id+');return false;" href="/?id='+place.id+'">view runners</a>)</p>';
                self.createMarker(self.map,point,info);
            }
        });
    
    },
   
   zoom:function(latitude,longitude,level) {
        
        this.map.setCenter(new GLatLng(latitude,longitude),level);
        return true;
    
    },
    
    showSearch:function(location_id) {
        
        var url = "/ajax/search.php?id="+location_id;    
        $("#searchresults").html("<p>Loading data&#8230;</p>");
        $("#searchresults").load(url,function(){
            //enableLinks();
            var res = $("#searchresults").get(0);
            var dist = res.offsetTop;

            window.scrollTo(0,dist);
        });
        
    }
    
};
