var marker=[];
var miniMarker=[];
var html=[];
var precis=[];
var iwn=0;
var address=[];
var latitude=[];
var longitude=[];
var countrydetails=[];
var placemarks = undefined;
var result = undefined;

if(!window.console) {
	window.console = new function() {
		this.log = function(str) {};
		this.dir = function(str) {};
	};
}


function createInfoWin(name,pin,lati,longi,addr,iso)
{
	GEvent.addListener(pin, "click", function() 
		{
			address[iwn]=addr;
			latitude[iwn]=lati;
			longitude[iwn]=longi;
			pin.openInfoWindowHtml(addr);
		});

	iwn++;
//	document.getElementById("markerNum").innerHTML = iwn;
};

var map = new GMap2(document.getElementById("map"));
map.addMapType(G_PHYSICAL_MAP);
var start = new GLatLng(41.92, 12.45);
map.setCenter(start, 6);
//map.addControl(new GMapTypeControl(1));
map.addControl(new GLargeMapControl());
map.addControl(new GScaleControl(200));

function goToLatLng(lat,lng,zoom,num,pm)
{
	$('#map').css('display','block');
	$('#message').css('display','none');

	map.setZoom(zoom);
	map.panTo(new GLatLng(lat,lng));

//	GEvent.trigger(marker[num],"click");

	if (document.getElementById("luogo"))
		document.getElementById("luogo").value = pm;
	if (document.getElementById("lat"))
		document.getElementById("lat").value = lat;
	if (document.getElementById("lng"))
		document.getElementById("lng").value = lng;
}

var icon = new GIcon();
icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
icon.iconSize = new GSize(12, 20);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 20);

var geo = new GClientGeocoder();
var geocache = new GGeocodeCache();
var lat = [];
var lng = [];
var bounds = new GLatLngBounds();

var status=[];

status[G_GEO_SUCCESS]            = "OK";
status[G_GEO_MISSING_ADDRESS]    = "Manca l'indirizzo";
status[G_GEO_UNKNOWN_ADDRESS]    = "Indirizzo sconosciuto";
status[G_GEO_UNAVAILABLE_ADDRESS]= "Indirizzo non disponibile";
status[G_GEO_BAD_KEY]            = "Bad Key";
status[G_GEO_TOO_MANY_QUERIES]   = "Troppe query";
status[G_GEO_SERVER_ERROR]       = "Server Error"

function createMarker(point,i)
{
	var marker = new GMarker(point, {title:i+1,draggable:true, autoPan:true});

	GEvent.addListener(marker, 'dragend', function(markerPoint)
			{
				var lat = this.getLatLng().lat();
				var lng = this.getLatLng().lng();

				clearMaps();
			
				var m = createMarker(markerPoint,0);
				map.addOverlay(m);
			
				if (document.getElementById("lat"))
					document.getElementById("lat").value = lat;
				if (document.getElementById("lng"))
					document.getElementById("lng").value = lng;
			

//				console.log(markerPoint);
//
//				clearMaps();
//				showAddress(this.getLatLng());
			});
	return marker
}

function createMarkerRO(point)
{
	var marker = new GMarker(point, {draggable:false, autoPan:true});
	return marker
}

function showAddress(search) 
{
	var now=new Date();

	if (lat)
		lat.length=0;
	
	clearMaps();

//	search = search + ', italy';
//	console.log('SEARCH: ' + search);

	geo.getLocations(search, function (result)
	{
		if (result.Status.code == G_GEO_SUCCESS) 
		{
			if (document.getElementById("message"))	
				document.getElementById("message").innerHTML = "";

//			console.log(resultPlacemark);

			if (result.Placemark.length == 1)
			{
				$('#map').css('display','block');
				$('#message').css('display','none');

				var i = 0;

				if (result.Placemark[i].AddressDetails.Accuracy >= 4)
				{
					countrydetails[i] = result.Placemark[i];

					var pm = result.Placemark[i].address.split(',');
					var pmaddress = '';
					for (var j=0;j<parseInt(pm.length - 1); j++)
						pmaddress += pm[j];



					lat[i]=result.Placemark[i].Point.coordinates[1];
					lng[i]=result.Placemark[i].Point.coordinates[0];

					if ($('#lat').length > 0)
						$('#lat').val(result.Placemark[0].Point.coordinates[1]);
					if ($('#lng').length > 0)
						$('#lng').val(result.Placemark[0].Point.coordinates[0]);


//					html[i]="<small>"+(i+1)+": </small> "+ result.Placemark[i].address;
					html[i]="<small>"+(i+1)+": </small> "+ pmaddress;

					precis[i]=4*result.Placemark[i].address.split(",").length;

					var point=new GLatLng(lat[i],lng[i]);
					var coords="<small> ("+lat[i]+", "+lng[i]+")</small>";
					
					marker[i] = createMarker(point,i);
					map.addOverlay(marker[i]);
					miniMarker[i]=new GMarker(point,icon);

					bounds.extend(marker[i].getPoint());
					var addr=result.Placemark[i].address;

					if (document.getElementById("message"))	
					{
						document.getElementById("message").innerHTML +="<a href='javascript:goToLatLng("+lat[i]+","+lng[i]+","+precis[i]+","+i+",\""+pmaddress+"\");'>"+html[i]+"</a><br>";
					}
				}

				var zoomlevel = precis[0];

				var pm = result.Placemark[0].address.split(',');

				goToLatLng(lat[0],lng[0],zoomlevel,0,pm[0]);

			}
			else
			{

				//console.log("QUA");

				$('#map').css('display','none');
				$('#message').css('display','block');

				for (var i=0; i<result.Placemark.length; i++) 
				{
					if (result.Placemark[i].AddressDetails.Accuracy >= 4)
					{
//						//console.log(result.Placemark[i]);
						var pm = result.Placemark[i].address.split(',');

						var pmaddress = '';
						for (var j=0;j<parseInt(pm.length - 1); j++)
							pmaddress += pm[j];

						lat[i]=result.Placemark[i].Point.coordinates[1];
						lng[i]=result.Placemark[i].Point.coordinates[0];
//						html[i]="<small>"+(i+1)+": </small> "+ result.Placemark[i].address;
						html[i]="<small>"+(i+1)+": </small> "+ pmaddress;

						precis[i]=4*result.Placemark[i].address.split(",").length;

						var point=new GLatLng(lat[i],lng[i]);
						var coords="<small> ("+lat[i]+", "+lng[i]+")</small>";
						
						marker[i] = createMarker(point,i);

						map.addOverlay(marker[i]);
						miniMarker[i]=new GMarker(point,icon);

						bounds.extend(marker[i].getPoint());
						var addr=result.Placemark[i].address;

						if (document.getElementById("message"))	
						{
							document.getElementById("message").innerHTML +="<a href='javascript:goToLatLng("+lat[i]+","+lng[i]+","+precis[i]+","+i+",\""+pmaddress+"\");'>"+html[i]+"</a><br>";
						}

					}
				}
			}

			placemarks = result.Placemark;
		}

	});
};

function showLocation(search) 
{
	var now=new Date();
	lat.length=0;
	
	clearMaps();

	search = search + ', italy';

	//console.log('SEARCH: ' + search);

	bounds = new GLatLngBounds();

	geo.getLocations(search, function (result)
	{
		if (result.Status.code == G_GEO_SUCCESS) 
		{

			if (document.getElementById("message"))	
				document.getElementById("message").innerHTML = "";

			var i = 0;

//			//console.log(result.Placemark[i]);

			if (result.Placemark[i].AddressDetails.Accuracy >= 4)
			{
				countrydetails[i] = result.Placemark[i];

				lat[i]=result.Placemark[i].Point.coordinates[1];
				lng[i]=result.Placemark[i].Point.coordinates[0];

				var point = new GLatLng(lat[i],lng[i]);
				
				marker[i] = createMarkerRO(point,i);

				map.addOverlay(marker[i]);
				miniMarker[i]=new GMarker(point,icon);

				bounds.extend(marker[i].getPoint());
//				bounds.extend(point);

				var addr = result.Placemark[i].address;
			}

			map.setZoom(map.getBoundsZoomLevel(bounds) - 2);
			map.panTo(new GLatLng(lat,lng));
//			createInfoWin(i+1,marker[i],lat[i],lng[i],addr);
//			GEvent.trigger(marker[i],"click");
		}

	});
};

function getCoords(search) 
{
	var geo = new GClientGeocoder();
	var geocache = new GGeocodeCache();
	var lat = [];
	var lng = [];

	search = search + ', italy';
//	console.log('SEARCH: ' + search);

	geo.getLocations(search, function (result)
	{
/* 		console.log(result); */

		if (result.Status.code == G_GEO_SUCCESS) 
		{
			if ($('#slat').length > 0)
				$('#slat').val(result.Placemark[0].Point.coordinates[1]);
			if ($('#slng').length > 0)
				$('#slng').val(result.Placemark[0].Point.coordinates[0]);
			if ($('#lat').length > 0)
				$('#lat').val(result.Placemark[0].Point.coordinates[1]);
			if ($('#lng').length > 0)
				$('#lng').val(result.Placemark[0].Point.coordinates[0]);
		}

	});
};

function showRW(lat,lng)
{
	if (lat == undefined || lat == '' )
		return;

	var point=new GLatLng(lat,lng);
	var m = createMarker(point,0);
	map.addOverlay(m);

	bounds.extend(m.getPoint());
	map.panTo(new GLatLng(lat,lng));

//	GEvent.addListener(m, "click", function() 
//		{
//			m.openInfoWindowHtml('DESC');
//		});
//
//	GEvent.trigger(m,"click");

}

function show(lat,lng)
{
	if (lat == undefined || lat == '' )
		return;

	var point=new GLatLng(lat,lng);
	var m = createMarkerRO(point,0);
	map.addOverlay(m);

	bounds.extend(m.getPoint());
	map.panTo(new GLatLng(lat,lng));

//	GEvent.addListener(m, "click", function() 
//		{
//			m.openInfoWindowHtml('DESC');
//		});
//
//	GEvent.trigger(m,"click");

}

function mostraTutti()
{
/* 	bounds = new GLatLngBounds(); */
/* 	var newzoom = map.getBoundsZoomLevel(bounds); */
/* 	var newcenter = bounds.getCenter(); */
/* 	map.setCenter (newcenter,newzoom); */
/* 	map.panDirection(0,0.1); */

	var center = bounds.getCenter();

	if (center.lat() == 0 && center.lng() == 180)
	{
		var p = new GLatLng(41.39,12.49);
		map.panTo(p);
		map.panDirection(0,0.1);
	
		bounds.extend(p);

		var newzoom = 5;
		var newcenter = bounds.getCenter();
		map.setCenter (newcenter,newzoom);
		map.panDirection(0,0.1);

	}
	else
	{
		map.closeInfoWindow();
		map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
		map.setCenter(center);
		map.panDirection(0,0.1);
	}

};

function clearMaps()
{
//	map.clearOverlays();

	marker.length=0;
	miniMarker.length=0;

	bounds = new GLatLngBounds();
	iwn=0;
	//document.getElementById("markerNum").innerHTML=" ";
}

GEvent.addListener(map, "singlerightclick", function(pixel)
{
	clearMaps();

	var clickPoint = map.fromContainerPixelToLatLng(pixel);

	var m = createMarker(clickPoint,0);
	map.addOverlay(m);

	if (document.getElementById("lat"))
		document.getElementById("lat").value = clickPoint.lat();
	if (document.getElementById("lng"))
		document.getElementById("lng").value = clickPoint.lng();


	return;

//	var search = document.getElementById("search").value = clickPoint.toUrlValue();
	var search = clickPoint.toUrlValue();
	showAddress(search);
});



