////////////////////////////////////
///   SCRIPTS POUR GOOGLE  MAPS ///
//////////////////////////////////

//VAR
var map = null;
var geocoder = null;

/////// LANG ////////
if(langGlobal == "fr"){
  //msg fr
	var msgChronVille="chronique(s) dans cette ville";
	var msgLieuxVille="lieu(x) dans cette ville";
	var msgZoom="zoom sur la ville";
	var msgAddIndispo="Adresse indisponible";
	var motPar="par";
	var msgClose="Fermer";
}else{
  //msg en
	var msgChronVille="chronicle(s) for this city";
	var msgLieuxVille="review(s) for this city";
	var msgZoom="zoom in the city";
	var msgAddIndispo="Exact location not available";
	var motPar="by";
	var msgClose="Close";
}
////// END LANG ///////

/// INCLUDES ///
document.write('<script type="text/javascript" src="scripts/ebubble.js"></script>');
/// END INCLUDES ///

//////////////////////// FUNCTIONS /////////////////////////

//////////////
// GENERAL //
////////////

function addslashes(str) {
	if(str=="")
		return "";
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function stripslashes(str) {
	if(str=="")
		return "";
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}

////////////////////
// CREATE MARKER //
//////////////////

// Creates a marker at the given point with the given label
function createMarkerDest(point, ville, pays, nchron, nlieu) {

  var icon = new GIcon();

	//choix punaise
	if( (parseInt(nchron)+parseInt(nlieu)) > 15){
	  icon.image = "images/map/punaise_dest_gd.png";
	  icon.shadow = "images/map/ombre_gd.png";
	  icon.iconSize = new GSize(35, 51);
	  icon.shadowSize = new GSize(35, 51);
  	icon.iconAnchor = new GPoint(18, 47);
	  icon.infoWindowAnchor = new GPoint(10, 10);
	}else{
	  icon.image = "images/map/punaise_dest_pt.png";
	  icon.shadow = "images/map/ombre_pt.png";
	  icon.iconSize = new GSize(20, 29);
	  icon.shadowSize = new GSize(20, 29);
  	icon.iconAnchor = new GPoint(10, 27);
	  icon.infoWindowAnchor = new GPoint(10, 10);
	}

	var html="<b>" + ville + ", "+ pays +"</b><hr class=\"hrbullemap\">";
	if(nchron > 0)
		html=html+"<br /><a href='search.php?ville=" + encodeURI(ville) + "&submitliste=liste&disp=chron'>" + nchron + " " + msgChronVille + "</a>";

	if(nlieu > 0)
		html=html+"<br /><a href='search.php?ville=" + encodeURI(ville) +  "&submitliste=liste&disp=lieu'>" + nlieu + " " + msgLieuxVille + "</a>";

	html=html+"<br /><a href='search.php?ville=" + encodeURI(ville) +"&pays=" + encodeURI(pays) +"&submitliste=liste&disp=lieu'>"+msgZoom+"</a><br /><br />"

	html+="<hr class=\"hrbullemap\"><em style=\"cursor: pointer;\" onclick=\"bubble.hide();\">"+msgClose+"</em>";
	html="<div style=\"text-align: left;\">"+html+"</div>";
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		//creation du marker
		bubble.openOnMarker(marker,html);
	});
	return marker;
}

// Creates a marker and take the info from the place id
function createMarkerLieu(point, id_lieu) {
  var icon = new GIcon();
  icon.image = "images/map/punaise_lieu_pt.png";
  icon.shadow = "images/map/ombre_pt.png";
  icon.iconSize = new GSize(20, 29);
  icon.shadowSize = new GSize(20, 29);
  icon.iconAnchor = new GPoint(10, 27);
  icon.infoWindowAnchor = new GPoint(0, 0);
	
	//init
	var html="";

	GDownloadUrl("includes/gen_xml.php?ids="+id_lieu+"&mode=details&type=lieu", function(data) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		var label = GXml.value(markers.item(0).childNodes[0]);
		var user = GXml.value(markers.item(0).childNodes[1]);

		var adresse = GXml.value(markers.item(0).childNodes[2]);
		if(adresse == "N/A"){
			adresse = "";
		}

		//generation du code HTML
		var url=stripslashes(label);
		url=url.replace(" ","-");
		url="lieu-"+encodeURI(url)+"-"+id_lieu+".html";
		html="<a class=\"search_lieu\" href=\"" + url + "\">" + stripslashes(label) + "</a><hr class=\"hrbullemap\">"
		+motPar+" <a class=\"userpseudo\" href='view_user.php?user="+ encodeURI(user) +"'>"+ user +"</a><br />"+
		adresse+"<hr class=\"hrbullemap\"><em style=\"cursor: pointer;\" onclick=\"bubble.hide();\">"+msgClose+"</em>";
		html="<div style=\"text-align: left;\">"+html+"</div>";
	});

	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		//creation du marker
		bubble.openOnMarker(marker,html);
	});
	return marker;
}


///////////////////
// MAP_ALL_DEST //
/////////////////

//cette fonction charge la map (onload)
function load_all_dest() {
	if (GBrowserIsCompatible()) {
		//init
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
		map.setCenter(new GLatLng(5,3), 1);
		bubble = new EBubble(map, "images/view_resultats/map_info_fond.png",new GSize(200,200), new GSize(180,180), new GPoint(10,20), new GPoint(35,190), true);

		//chargement des données
		GDownloadUrl("includes/gen_xml_dest.php", function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
																parseFloat(markers[i].getAttribute("lng")));

				map.addOverlay(createMarkerDest(point, markers[i].getAttribute("ville"), markers[i].getAttribute("pays"), markers[i].getAttribute("nchron"), markers[i].getAttribute("nlieu")));
			}
		});
	}
}

///////////////
// MAP LIEU //
/////////////

function createMarkerLieuRech(point, nom, adresse) {

  var icon = new GIcon();
  icon.image = "images/map/punaise_lieu_gd.png";
  icon.shadow = "images/map/ombre_gd.png";
  icon.iconSize = new GSize(35, 50);
  icon.shadowSize = new GSize(35, 50);
  icon.iconAnchor = new GPoint(18, 50);
  icon.infoWindowAnchor = new GPoint(10, 10);

  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<b>"+nom+"</b><br />"+adresse);
  });
  return marker;
}


//fonction pour le chargement de la carte et le centrage sur la dest
function load_lieu(lat, lng, latlieu, lnglieu) {
	if (GBrowserIsCompatible()) {

		//declaration de la carte
		map = new GMap2(document.getElementById("map"));
		//ajout de controle (juste bouton de zoom)
		map.addControl(new GSmallMapControl());

    //centrage sur le lieu
    city=new GLatLng(lat, lng);
    map.setCenter(city, 12);
		
		//ajout du marker du lieu di dispo
    lieu=new GLatLng(latlieu, lnglieu);
		if(latlieu && lnglieu){
			map.addOverlay(createMarkerLieuRech(lieu, "", ""));
    	map.setCenter(lieu, 12);
		}
	}
}


//fonction permettant la localisation auto
function showAddress(name, address) {

	//instanciation du geocoder
	geocoder = new GClientGeocoder();
	
	//on nettoie la map
	map.clearOverlays();

  var icon = new GIcon();
  icon.image = "images/map/punaise_lieu_gd.png";
  icon.shadow = "images/map/ombre_gd.png";
  icon.iconSize = new GSize(35, 50);
  icon.shadowSize = new GSize(35, 50);
  icon.iconAnchor = new GPoint(18, 50);
  icon.infoWindowAnchor = new GPoint(10, 10);

	if (geocoder) {
		geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				//si adresse pas trouvée
				alert(address + " not found");
				document.getElementById('gps').value = "";
			} else {
				//on nettoie
				map.clearOverlays();
				//on ajoute le marqueur
				map.setCenter(point, 13);
				var marker = new GMarker(point, icon);
				map.addOverlay(marker);
				if(address=="N/A") 
					address=msgAddIndispo;
				marker.openInfoWindowHtml('<b>'+name+'</b><br>'+address);
				//gps	
				document.getElementById('gps').value = marker.getPoint().lat() + "," +  marker.getPoint().lng();
			}
		}
		);
	}
}


//fonction permettant la localisation manuelle
function showCity(name, city) {

	//on nettoie la map
	map.clearOverlays();

	//icon
  var icon = new GIcon();
  icon.image = "images/map/punaise_lieu_manu.png";
  icon.shadow = "images/map/ombre_pt.png";
  icon.iconSize = new GSize(35, 50);
  icon.shadowSize = new GSize(35, 50);
  icon.iconAnchor = new GPoint(16, 50);
  icon.infoWindowAnchor = new GPoint(10, 10);

	//le marker apparait au centre de la carte actuelle
	var marker = new GMarker(map.getCenter(), {icon: icon, draggable: true});

	///// HANDLERS /////
	//drag start
	GEvent.addListener(marker, "dragstart", function() {
		map.closeInfoWindow();
  	document.getElementById('gps').value = "";
	});

	//drag stop
	GEvent.addListener(marker, "dragend", function() {
		document.getElementById('gps').value = marker.getPoint().lat() + "," +  marker.getPoint().lng();
		//disabling champs adresse
    //document.getElementById('adresse').value = "N/A";
    //document.getElementById('adresse').readOnly = true;
		//document.getElementById('autoloc').disabled = true;
	});
	//// FIN HANDLERS ////

	map.addOverlay(marker);
}

//annule les operations effectuées sur la carte
function cancelLoc(){

	//on nettoie la map
	map.clearOverlays();

	//enabling champs adresse
  document.getElementById('adresse').value = "";
  document.getElementById('gps').value = "";
  document.getElementById('adresse').readOnly = false;
	document.getElementById('autoloc').disabled = false;

}

/////////////////
// MAP SEARCH //
///////////////

//instanciation globale de la map
var mapsearch;
var mappoi;
var tabMarkers=new Array();
var poi_marker;

function load_search_res(urlarg, centerlat, centerlng, zoom, type) {
	if (GBrowserIsCompatible()) {
		//init de la map
		mapsearch = new GMap2(document.getElementById("map"));
		mapsearch.addControl(new GSmallMapControl());
		mapsearch.setCenter(new GLatLng(centerlat, centerlng), zoom);
		if(! urlarg)
			return 0;

		//init des curseurs
		bubble = new EBubble(mapsearch, "images/view_resultats/map_info_fond.png",new GSize(200,200), new GSize(180,180), new GPoint(10,20), new GPoint(35,190), true);
		//chargement des données
		if(type=="dest"){
			//chargement des dest
			GDownloadUrl("includes/gen_xml.php?ids="+urlarg+"&type=dest", function(data) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");

				for (var i = 0; i < markers.length; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
																	parseFloat(markers[i].getAttribute("lng")));
		
					mapsearch.addOverlay(createMarkerDest(point, markers[i].getAttribute("ville"), markers[i].getAttribute("pays"), markers[i].getAttribute("nchron"), markers[i].getAttribute("nlieu")));
				}
			});
		}else{
			//chargement des lieux
			GDownloadUrl("includes/gen_xml.php?ids="+urlarg+"&type=lieu", function(data) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");

				for (var i = 0; i < markers.length; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
																	parseFloat(markers[i].getAttribute("lng")));
		
					var m=createMarkerLieu(point, markers[i].getAttribute("id"));
					tabMarkers[markers[i].getAttribute("id")]=m;
					mapsearch.addOverlay(m);
				}
			});
		}
	}
}//fin fonction

function reCenter(lat,lng,id){
	mapsearch.panTo(new GLatLng(lat, lng));
	//mapsearch.setCenter(new GLatLng(lat, lng),13);
	setTimeout('GEvent.trigger(tabMarkers['+id+'], "click")',700);
}

////////////////
// VIEW LIEU //
//////////////

function load_view_lieu(lat, lng, id) {
  if (GBrowserIsCompatible()) {
    //init
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());

		lieu=new GLatLng(lat, lng);
		map.setCenter(lieu, 13);

		//chargement du lieu
		bubble = new EBubble(map, "images/view_resultats/map_info_fond.png",new GSize(200,200), new GSize(180,180), new GPoint(10,20), new GPoint(35,190), true);
		map.addOverlay(createMarkerLieu(lieu, id));
  }
}


//////////////////
// POI CREATOR //
////////////////

//cette fonction charge la map (onload)
function load_clean_map() {
	if (GBrowserIsCompatible()) {
		//init
		mappoi = new GMap2(document.getElementById("map"));
		mappoi.addControl(new GSmallMapControl());
		mappoi.setCenter(new GLatLng(5,3), 1);

		//Marker
	  var icon = new GIcon();
	  icon.image = "images/map/punaise_lieu_manu.png";
	  icon.shadow = "images/map/ombre_pt.png";
	  icon.iconSize = new GSize(35, 50);
	 	icon.shadowSize = new GSize(35, 50);
  	icon.iconAnchor = new GPoint(16, 50);
	  icon.infoWindowAnchor = new GPoint(10, 10);

		//le marker apparait au centre de la carte actuelle
		poi_marker = new GMarker(mappoi.getCenter(), {icon: icon, draggable: true});

		///// HANDLERS /////
		//drag start
		GEvent.addListener(poi_marker, "dragstart", function() {
			mappoi.closeInfoWindow();
	  	document.getElementById('man_lon').value = "";
	  	document.getElementById('man_lat').value = "";
		});

		//drag stop
		GEvent.addListener(poi_marker, "dragend", function() {
	  	document.getElementById('man_lon').value = poi_marker.getPoint().lng();
	  	document.getElementById('man_lat').value = poi_marker.getPoint().lat();
	  	document.getElementById('id_address').value = "";
		});
	//// FIN HANDLERS ////

	mappoi.addOverlay(poi_marker);
	}
}

function update_marker_pos(){
	var check = /^\d+\.\d+$/;
	var lng = document.getElementById('man_lon').value;
	var lat = document.getElementById('man_lat').value;

	if(check.test(lat) && check.test(lng)){
		var loc=new GLatLng(lat,lng);
		poi_marker.setLatLng(loc);
		mappoi.panTo(loc);
		document.getElementById('id_address').value = "";
	}
}

//fonction permettant la localisation auto
function update_marker_from_address(address) {

	if(address=="")
		return false;

	//instanciation du geocoder
	geocoder = new GClientGeocoder();
	
	if (geocoder) {
		geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				//si adresse pas trouvée
				alert(address + " not found");
			} else {
				//on ajoute le marqueur
				poi_marker.setLatLng(point);
				mappoi.panTo(point);
				var marker = new GMarker(point);
				//gps	
	  		//document.getElementById('span_adr_lon').innerHTML = marker.getPoint().lng();
	  		document.getElementById('val_adr_lat').value = marker.getPoint().lng();
	  		//document.getElementById('span_adr_lat').innerHTML = marker.getPoint().lat();
	  		document.getElementById('val_adr_lon').value = marker.getPoint().lat();
			}
		}
		);
	}
}

