# Source: google-maps/google-geocoder.js

    /**
     * @namespace WPGMZA
     * @module GoogleGeocoder
     * @requires WPGMZA.Geocoder
     */
    (function($) {

    	WPGMZA.GoogleGeocoder = function()
    	{

    	}

    	WPGMZA.GoogleGeocoder.prototype = Object.create(WPGMZA.Geocoder.prototype);
    	WPGMZA.GoogleGeocoder.prototype.constructor = WPGMZA.GoogleGeocoder;

    	WPGMZA.GoogleGeocoder.prototype.getLatLngFromAddress = function(options, callback)
    	{
    		if(!options || !options.address)
    			throw new Error("No address specified");

    		if(WPGMZA.isLatLngString(options.address))
    			return WPGMZA.Geocoder.prototype.getLatLngFromAddress.call(this, options, callback);

    		if(options.country)
    			options.componentRestrictions = {
    				country: options.country
    			};

    		var geocoder = new google.maps.Geocoder();
    		geocoder.geocode(options, function(results, status) {
    			if(status == google.maps.GeocoderStatus.OK)
    			{
    				var location = results[0].geometry.location;
    				latLng = {
    					lat: location.lat(),
    					lng: location.lng()
    				};

    				var results = [
    					{
    						geometry: {
    							location: latLng
    						},
    						latLng: latLng
    					}
    				];

    				callback(results, WPGMZA.Geocoder.SUCCESS);
    			}
    			else
    			{
    				var nativeStatus = WPGMZA.Geocoder.FAIL;

    				if(status == google.maps.GeocoderStatus.ZERO_RESULTS)
    					nativeStatus = WPGMZA.Geocoder.ZERO_RESULTS;

    				callback(null, nativeStatus);
    			}
    		});
    	}

    })(jQuery);