
;(function($) {

$.fn.extend({
	geo_autocomplete: function(_geocoder, _options) {
		options = $.extend({}, $.Autocompleter.defaults, {
			geocoder: _geocoder,
			mapwidth: 150,
			mapheight: 100,
			maptype: 'map',
			mapkey: 'ABQIAAAAkkoz-kLsDBG0-G6kDgPqERR_DCaaHZscaZPYsPCFWsSv__XJghQt5skd1oQGVCfzPIsSohk91UfiCg', // localhost
			mapsensor: false,
			parse: function(_results, _status, _query) {
				var _parsed = [];
				if (_results && _status && _status == 'OK') {
					$.each(_results, function(_key, _result) {
						if (_result.geometry && _result.geometry.viewport) {
							// place is first matching segment, or first segment
							var _place_parts = _result.formatted_address.split(',');
							var _place = _place_parts[0];
							$.each(_place_parts, function(_key, _part) {
								if (_part.toLowerCase().indexOf(_query.toLowerCase()) != -1) {
									_place = $.trim(_part);
									return false; // break
								}
							});
							_parsed.push({
								data: _result,
								value: _place,
								result: _place
							});
						}
					});
				}
				return _parsed;
			},
			formatItem: function(_data, _i, _n, _value) {
				var tipoDir=_data.types;
				if(jQuery.inArray('street_address', tipoDir)>=0){var tipo='Direccion';}
				else if(jQuery.inArray('airport', tipoDir)>=0){var tipo='Aeropuerto';}
				else if(jQuery.inArray('transit_station', tipoDir)>=0){var tipo='Estacion';}
				else {var tipo='';}

				if(tipo!=''){
					var _src = 'http://maps.google.com/maps/api/staticmap?zoom=15&markers=' + _data.geometry.viewport.getCenter().toUrlValue() + '&visible=' + _data.geometry.viewport.getSouthWest().toUrlValue() + '|' + _data.geometry.viewport.getNorthEast().toUrlValue() + '&size=' + options.mapwidth + 'x' + options.mapheight + '&maptype=' + options.maptype + '&key=' + options.mapkey + '&sensor=' + (options.mapsensor ? 'true' : 'false');

					var _place = _data.formatted_address.replace(/,/gi, ', ');
					//return '<img src="' + _src + '" width="' + options.mapwidth + '" height="' + options.mapheight + '" /> ' + _place + '<br clear="both"/>';
					return '<img src="' + _src + '" width="' + options.mapwidth + '" height="' + options.mapheight + '" /> ' + tipo + ': ' + _place + '<br clear="both"/>'; 
				}
				else{return '';};
			}
		}, _options);
		
		// if highlight is set to false, replace it with a do-nothing function
		options.highlight = options.highlight || function(value) { return value; };
		
		// if the formatMatch option is not specified, then use formatItem for backwards compatibility
		options.formatMatch = options.formatMatch || options.formatItem;

		return this.each(function() {
			new $.Autocompleter(this, options);
		});
	}
});

})(jQuery);
