/**
 * Main map functions
 */
GOOGLEMAPS  = function () {
    
    //global map object
    GOOGLEMAPS.prototype.map = null;
    GOOGLEMAPS.prototype.counter = 0; 
    
    //default map settings
    GOOGLEMAPS.prototype.currentLat = 51.4768;
    GOOGLEMAPS.prototype.currentLng = 0;
    GOOGLEMAPS.prototype.currentZoom = 0;
    
    GOOGLEMAPS.prototype.settings = new Object;
  
    GOOGLEMAPS.prototype.initMap = function() {
         
        //check if map object has been loaded or created
        try{
            document.getElementById('googlemap').innerHTML;
        }catch(e){            
            if (this.counter > 60) { 
                alert('Can\'t load map! Can\'t find map object!');
            } else { 
                setTimeout("gmaps.initMap()", 1000); 
                this.counter++;                
            } 
            return false; 
        }
           
        //If gmaps main.js didn't load try to call init again after 60 tries we give up
        if (typeof google.maps != "object") { 
            if (this.counter > 60) { 
                document.getElementById('googlemap').innerHTML = 'Can\'t load map! Gmap server timeout! ';
            } else { 
                setTimeout("gmaps.initMap()", 1000); 
            } 
            this.counter++; 
            return false; 
        }
        
        //map center
        var startPos = new google.maps.LatLng(this.currentLat, this.currentLng);
        
        var tmp = null;
        for(tmp in this.settings);
        
        if(tmp == null){
            //if no settings init gmaps object with default settings
            this.map = new google.maps.Map(document.getElementById('googlemap'), {zoom: this.currentZoom, center: startPos, mapTypeId: google.maps.MapTypeId.ROADMAP});
        }else{
            
            //check if all main settings has been set
            if(this.settings.mapTypeId == null) this.settings.mapTypeId = google.maps.MapTypeId.ROADMAP;
            if(this.settings.zoom == null) this.settings.zoom = this.currentZoom;
            if(this.settings.center == null) this.settings.center = startPos;
            
            this.map = new google.maps.Map(document.getElementById('googlemap'), this.settings);
        }
       /* var marker = new google.maps.Marker({
                        position: startPos,
                        title: "Your Location",
                        zIndex:100
                    });
       
        marker.setMap(gmaps.map);
        */
        gmarkers.showMarkers();
        
    }
    
    GOOGLEMAPS.prototype.zoomIn = function() {
         gmaps.map.setZoom(gmaps.map.getZoom()+1);
    }
    
    GOOGLEMAPS.prototype.zoomOut = function() {
        gmaps.map.setZoom(gmaps.map.getZoom()-1);
    }
    
    GOOGLEMAPS.prototype.pan = function(x,y) {
        gmaps.map.panDirection(x,y);
    }
    
    GOOGLEMAPS.prototype.searchAddress = function(address) {
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            gmaps.map.setCenter(results[0].geometry.location);
            gmaps.map.setZoom(12);
            var marker = new google.maps.Marker({
                map: gmaps.map, 
                position: results[0].geometry.location
            });
          } else {
            alert("Geocode was not successful for the following reason: " + status);
          }
        });
    }
    
   
}


GOOGLEMARKERS = function(){
    GOOGLEMARKERS.prototype.markersDb = new Array;
    GOOGLEMARKERS.prototype.infowindow = new google.maps.InfoWindow();
    
    GOOGLEMARKERS.prototype.showMarkers = function(){
        if(gmarkers.markersDb.length<1) return false;
        var bounds = new google.maps.LatLngBounds();
        for(i=0;i<gmarkers.markersDb.length;i++){
            tmp = gmarkers.markersDb[i];
            pos = new google.maps.LatLng(tmp[1], tmp[2]);
            bounds.extend(pos);
            gmarkers.newMarker(tmp);            
        }
        if(gmaps.currentLng == 0) gmaps.map.fitBounds(bounds);
        if(gmaps.currentZoom != 0) setTimeout("gmaps.map.setZoom(gmaps.currentZoom)",500);
        else if(gmaps.currentLng != 0) setTimeout("gmaps.map.setZoom(10)",500);
       
    }
    
    GOOGLEMARKERS.prototype.newMarker = function(m){
        var marker = new google.maps.Marker({
                            position: new google.maps.LatLng(m[1], m[2]),
                            title: m[4].replace(/&#039;/gi,"'").replace(/&lt;/gi,"<").replace(/&amp;/gi,'&'),
                            icon: "/wp-content/plugins/soccerbars/icon0.png",
                            content: m[5].replace(/&gt;/gi,">").replace(/&lt;/gi,"<").replace(/&amp;/gi,'&').replace(/&quot;/gi,'"')
                        });

        marker.setMap(gmaps.map);
        google.maps.event.addListener(marker, 'click', function() {
            gmarkers.infowindow.content = marker.content;
            gmarkers.infowindow.open(gmaps.map,marker);
           
        });
    }
      
}

var gmaps = new GOOGLEMAPS;
var gmarkers = new GOOGLEMARKERS;

