var map = null;
var overlay = null;

var geo = {
    initialize: function(lat, lng) {
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(lat, lng), 10);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
    },

    getCircleOverlay: function(lat, lon, err) {
        // math lifted from maps.forum.nu.  you want map examples, go there.
        with (Math) {
            var points = Array();
            var d = err/6378800;// accuracy / meters of Earth radius = radians  
            var lat1 = (PI/180)* lat; // radians                                                                                                                                                                                    
            var lng1 = (PI/180)* lon; // radians 

            for (var a = 0 ; a < 361 ; a+=10 ) {
                var tc = (PI/180)*a;
                var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
                var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
                var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
                var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
                points.push(point);
            }
        }
        return new GPolygon(points,'#0000ff',1,1,'#0000ff',0.2)
    },

    zoomLevel: function(a, step) {
        step++;
        map.setCenter(new GLatLng(a.coords.latitude, a.coords.longitude), step);
        if (step > 14) return;
        window.setTimeout(function() { geo.zoomLevel(a, step) }, 250);
    },

    setMap: function(a) {
        $('button').siblings('img').hide();
        var zoomLevel = 14;

        if (a.coords.accuracy > 500)
            zoomLevel = 10;

        map.setCenter(new GLatLng(a.coords.latitude, a.coords.longitude), zoomLevel);

        if (overlay) map.removerOverlay(overlay);

        overlay = geo.getCircleOverlay(a.coords.latitude, a.coords.longitude, a.coords.accuracy);
        map.addOverlay(overlay);
        $('#js-return').html('<p>Javascript and your browser thinks you\'re around:<p><h2 class="success">'+map.getCenter()+'</h2>');
        $('button').hide();
        $('#geo').hide();
    },

    handleError: function(a) {
        $('button > img').hide();
        $('#geo-error').show();
    },

    locateMeOnMap: function() {
        $('#geo-error').hide();
        $('button > img').show();
        navigator.geolocation.getCurrentPosition(this.setMap, this.handleError);
    }
}