google.load("maps", "2");

var Coder = function(element){
	var coder = new GClientGeocoder();
	
	this.locate = function(address){
		coder.getLatLng(address,function(point){
			//create gmap object
			var map = new GMap2(element);
			map.setCenter(point, 15);
			//create marker object
            var marker = new GMarker(point);
            map.addOverlay(marker);
            //creating infowindow object
            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(marker.getLatLng().toUrlValue(6));
            });
	     	GEvent.trigger(marker, "click");
            //writing into form
            document.getElementById("coords").value = marker.getLatLng().toUrlValue(6);
		});
	};
	
	this.getLocations = function(address){
		coder.getLocations(address, getLocationData);
		function getLocationData(response){
			//create gmap object
			var map = new GMap2(document.getElementById("map_canvas"));
			
			//geocode
			place = response.Placemark[0];
    		point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
    		marker = new GMarker(point);
    		map.setCenter(point, 15);
    		map.addOverlay(marker);
    		marker.openInfoWindowHtml(
        	'<b>orig latlng:</b>' + response.name + '<br/>' + 
        	'<b>latlng:</b>' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '<br>' +
        	'<b>Status Code:</b>' + response.Status.code + '<br>' +
        	'<b>Status Request:</b>' + response.Status.request + '<br>' +
        	'<b>Address:</b>' + place.address + '<br>' +
        	'<b>Accuracy:</b>' + place.AddressDetails.Accuracy + '<br>' +
        	'<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
		}
	};
	
};
