//'hide' the address bar  
window.scrollTo(0, 1);

var coords;
var watchId;
var geo = new WeegohGeocoder();
var geoworker;

function WeegohLocationBar() {

    function handleError(status) {}
    
    function handleFinished(results) {
        var response = new GoogleGeoResponse();        
        objects = response.parseDict(results);
        object  = objects[0];

        $.ajax({
            type:'POST', 
            url: '/a/places/name', 
            data: {
                'q': response.parse(results),
                'c': object.geometry.location.lat.toFixed(6) + ',' + 
                     object.geometry.location.lng.toFixed(6)
            },
            success: function(data) {
                d = JSON.parse(data);

                if(d['error_msg'])
                    return handleError(d['error_msg']);

                loc = $('#myloc');
                loc.attr('href', '/places/' + d['object']['lat'] + ',' + d['object']['lon']);
                loc.html('@' + d['object']['display_name']);
            },
            error: function(xhr, txtStatus, errorThrown) {
                handleError(txtStatus);        
            },            
            complete: function(xhr, txtStatus) {}
        });
    }

    this.handleResponse = function(results, status) {
        return (status == google.maps.GeocoderStatus.OK) ? handleFinished(results) : handleError(status);
    }
}
    
/*** Location ***/

function locateStart() {
    watchId = navigator.geolocation.watchPosition(locateSuccess, locateError, {
        enableHighAccuracy:true,
        maximumAge:10000 
    });
    loading(true);    
}

function locateStop() {
    navigator.geolocation.clearWatch(watchId);
    locateComplete();
}

function locateSuccess(loc) {
    if(geoworker != null) return;

    geoworker = new WeegohLocationBar();
    geo.geocode(
        geoworker,
        loc.coords.latitude.toFixed(6),
        loc.coords.longitude.toFixed(6)
    );    
    locateComplete();
}
function locateError(err) { locateComplete(); }
function locateComplete() { 
    loading(false);   
    geoworker = null;
}

/*** Utils ***/

function hasCoords() { return (coords != undefined); } 

function postCoord(url, defaultUrl) {
    window.location = (hasCoords()) ? url.replace("latlng", coords) : defaultUrl;
}

function loading(val) {
    var ld = $('.ld');
    (val == true) ? ld.show() : ld.hide();
}

function gotoUrl(url) {
    window.location.href = url;
}
