1 (function(){
  2 
  3 /**
  4  * Initialise our provider. This function should only be called 
  5  * from within mapstraction code, not exposed as part of the API.
  6  * @private
  7  */
  8 var init = function() {
  9 	this.invoker.go('init');
 10 };
 11 
 12 /**
 13  * Geocoder instantiates a geocoder with some API choice
 14  * @name mxn.Geocoder
 15  * @constructor
 16  * @param {String} api The API to use, currently only 'mapquest' is supported
 17  * @param {Function} callback The function to call when a geocode request returns (function(waypoint))
 18  * @param {Function} error_callback The optional function to call when a geocode request fails
 19  * @exports Geocoder as mxn.Geocoder
 20  */
 21 var Geocoder = mxn.Geocoder = function (api, callback, error_callback) {
 22 	this.api = api;
 23 	this.geocoders = {};
 24 	this.callback = callback;
 25 	this.error_callback = error_callback || function(){};
 26 	  
 27 	// set up our invoker for calling API methods
 28 	this.invoker = new mxn.Invoker(this, 'Geocoder', function(){ return this.api; });
 29 	init.apply(this);
 30 };
 31 
 32 mxn.addProxyMethods(Geocoder, [
 33 	
 34 	/**
 35 	 * Geocodes the provided address.
 36 	 * @name mxn.Geocoder#geocode
 37 	 * @function
 38 	 * @param {Object} address Address hash, keys are: street, locality, region, country.
 39 	 */
 40 	'geocode',
 41 	
 42 	'geocode_callback'
 43 
 44 ]);
 45 
 46 /**
 47  * Change the geocoding API in use
 48  * @name mxn.Geocoder#swap
 49  * @param {String} api The API to swap to
 50  */
 51 Geocoder.prototype.swap = function(api) {
 52 	if (this.api == api) { return; }
 53 
 54 	this.api = api;
 55 	if (!this.geocoders.hasOwnProperty(this.api)) {
 56 		init.apply(this);
 57 	}
 58 };
 59 
 60 })();