var map = null;
var geocoder = null;
var marker = null;
var search_address=false;

function convert_degrees(number) {
	var snumber=String(number);
	var pos=snumber.indexOf(".",0);
	if (pos<=0) {
		pos=snumber.length;
	}	
	var sdegrees=snumber.substr(0,pos);
	var number2=(number-parseInt(sdegrees))*60;
	if (number2<0) {
		number2=number2*(-1);
	}
	var snumber2=String(number2);
	pos=snumber2.indexOf(".",0);
	if (pos<=0) {
		pos=snumber2.length;
	}
	var sminutes=snumber2.substr(0,pos);
	var number3=(number2-parseInt(sminutes))*60;
	var snumber3=String(number3);
	var sseconds=snumber3.substr(0,snumber3.indexOf(".",0)+4);
	
	var sfull="";
	if (snumber>0) {
		sfull+="+";
	}
	sfull+=sdegrees+String.fromCharCode(176)+" "+sminutes+String.fromCharCode(39)+" "+sseconds+String.fromCharCode(34);
	return(sfull);
}

function update_lat_lng_fields(lat,lng) {
	if (lat != null) {
		document.getElementById("lat").value=lat;
		document.getElementById("lat_info").innerHTML=convert_degrees(lat);
	} else {
		document.getElementById("lat").value="";
		document.getElementById("lat_info").innerHTML="NA";
	}
	if (lng != null) {
		document.getElementById("lng").value=lng;
		document.getElementById("lng_info").innerHTML=convert_degrees(lng);
	} else {
		document.getElementById("lng").value="";
		document.getElementById("lng_info").innerHTML="NA";
	}

}

function remove_marker() {
	if (marker!=null) {
		map.removeOverlay(marker);
		marker=null;
	}
	update_lat_lng_fields(null,null);
	document.getElementById("lng").focus();  
}

function create_marker(point) {
var icon = new GIcon();
icon.image = "./images/markers/marker"+my_marker_id+".png";
icon.iconSize = new GSize(30, 35);
icon.shadowSize = new GSize(30, 35);
icon.iconAnchor = new GPoint(14, 35);
icon.infoWindowAnchor = new GPoint(14, 10);

	marker=new GMarker(point, {draggable: true, icon: icon});
	GEvent.addListener(marker, "dblclick", function() {
		remove_marker();        		
	});
	GEvent.addListener(marker, "click", function() {
		map.panTo(marker.getPoint());         		
	});            	
	GEvent.addListener(marker, "dragend", function() {
		update_lat_lng_fields(marker.getPoint().lat(),marker.getPoint().lng());
	});
	map.addOverlay(marker);
}

function load_gmap_single() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		geocoder = new GClientGeocoder();
		var centerLat=47;
		var centerLng=3;
		var zommLevel=5;
		if (document.getElementById("lat").value != '' && document.getElementById("lng").value != '') {
			centerLat=document.getElementById("lat").value;
			centerLng=document.getElementById("lng").value;
			zommLevel=13;
		}
		map.setCenter(new GLatLng(centerLat,centerLng), zommLevel, G_SATELLITE_MAP);
		if (document.getElementById("lat").value != '' && document.getElementById("lng").value != '') {
			create_marker(new GPoint(document.getElementById("lng").value,document.getElementById("lat").value));	
			update_lat_lng_fields(document.getElementById("lat").value, document.getElementById("lng").value);
		} else {
			update_lat_lng_fields(null,null);
		}

		GEvent.addListener(map, "click", function(overlay, point) {
			if (point) {
				update_lat_lng_fields(point.lat(),point.lng());
				if (marker != null) {
					marker.setPoint(point);
				} else {
					create_marker(point);
				}
			}
		});
	}
}

function showAddress(address) {
	if (address != "") {
		if (geocoder) {
			geocoder.getLatLng(address,function(point) {
				if (!point) {
					alert("Impossible de localiser '" + address + "'.");
				} else {
					map.setCenter(point, 13);
				}
			});
		}
	} else {
		alert("Veuillez saisir une adresse ou une position GPS. Exemples :\nMontpellier France \n+48"+String.fromCharCode(176)+" 51' 7.42\", +2"+String.fromCharCode(176)+" 20' 56.36\"\n+40.72, -73.99");
	}
	
}

function map_submit() {
	if (search_address==true) {
		search_address = false;
		showAddress(document.getElementById('address').value);
		return false;
	} else {
		return true;
	}
}

function createMarker(point, infos, marker_id) {
var icon = new GIcon();
icon.image = "./images/markers/marker"+marker_id+".png";
icon.iconSize = new GSize(30, 35);
icon.shadowSize = new GSize(30, 35);
icon.iconAnchor = new GPoint(14, 35);
icon.infoWindowAnchor = new GPoint(14, 10);

  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(infos, { maxWidth : 100 });
  });
  return marker;
}

function centreMap (centerLat, centerLng){
   map.setCenter(new GLatLng(centerLat,centerLng), 10, G_SATELLITE_MAP);
}

function load_gmap_multi() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		geocoder = new GClientGeocoder();
		var centerLat=47;
		var centerLng=3;
		map.setCenter(new GLatLng(centerLat,centerLng), 5, G_SATELLITE_MAP);

		for (var i = 0; i < points.length; i++) {
			var point=points[i][0];
			var infos=points[i][1];
			var marker_id=points[i][2];
			var marker=createMarker(point, infos, marker_id);
			map.addOverlay(marker);
			if (showfirstpict==true && i==0) {
				marker.openInfoWindowHtml(infos, { maxWidth : 100 });
				map.setCenter(point, 13);
			}
		}
	}
}
