 // Création de la couche Open Streetmap
var coucheOSM = new google.maps.ImageMapType({
	getTileUrl: function(ll, z) {
		var X = ll.x % (1 << z);
		return "http://tile.openstreetmap.org/" + z + "/" + X + "/" + ll.y + ".png";
	},
	tileSize: new google.maps.Size(256, 256),
	isPng: true,
	maxZoom: 18,
	name: "OSmap",
	alt: "Carte OpenStreetMap"
});

// Création d'un bouton pour zoomer sur une ville
function VilleControl(controlDiv, carte, ville) {

	// Style CSS pour le div contenant le bouton
	controlDiv.style.padding = '5px';

	// CSS du bord du bouton couleur jaune ccda : #FFCA4C
	var controlUI = document.createElement('DIV');
	controlUI.style.backgroundColor = 'white';
	controlUI.style.borderStyle = 'solid';
	controlUI.style.borderWidth = '2px';
	controlUI.style.cursor = 'pointer';
	controlUI.style.textAlign = 'center';
	controlUI.title = 'Cliquez pour zoomer sur la ville de ' + ville;
	controlDiv.appendChild(controlUI);

	// CSS de l'intérieur du bouton
	var controlText = document.createElement('DIV');
	controlText.style.fontFamily = 'Arial,sans-serif';
	controlText.style.fontSize = '12px';
	controlText.style.paddingLeft = '4px';
	controlText.style.paddingRight = '4px';
	controlText.innerHTML = ville;
	controlUI.appendChild(controlText);

	// Définition des parametre de cadrage et de zoom en fonction de la ville
	if (ville == 'Decazeville') {
		centreCarte1 = new google.maps.LatLng(44.558170, 2.256403);
		zoomCarte1 = 16;
		// Centrage de la carte à la valeur de la variable centreCarte sur l'évènement click sur le bouton
		google.maps.event.addDomListener(controlUI, 'click', function() {
			carte.setCenter(centreCarte1),
			carte.setZoom(zoomCarte1)
		});
	} else if (ville == 'Aubin') {
		centreCarte2 = new google.maps.LatLng(44.527315, 2.247091);
		zoomCarte2 = 16;
		// Centrage de la carte à la valeur de la variable centreCarte sur l'évènement click sur le bouton
		google.maps.event.addDomListener(controlUI, 'click', function() {
			carte.setCenter(centreCarte2),
			carte.setZoom(zoomCarte2)
		});
	} else if (ville == 'Cransac') {
		centreCarte3 = new google.maps.LatLng(44.525334, 2.281809);
		zoomCarte3 = 17;
		// Centrage de la carte à la valeur de la variable centreCarte sur l'évènement click sur le bouton
		google.maps.event.addDomListener(controlUI, 'click', function() {
			carte.setCenter(centreCarte3),
			carte.setZoom(zoomCarte3)
		});
	} else if (ville == 'Firmi') {
		centreCarte4 = new google.maps.LatLng(44.541272, 2.307580);
		zoomCarte4 = 16;
		// Centrage de la carte à la valeur de la variable centreCarte sur l'évènement click sur le bouton
		google.maps.event.addDomListener(controlUI, 'click', function() {
			carte.setCenter(centreCarte4),
			carte.setZoom(zoomCarte4)
		});
	} else if (ville == 'Viviez') {
		centreCarte5 = new google.maps.LatLng(44.555425, 2.216471);
		zoomCarte5 = 17;
		// Centrage de la carte à la valeur de la variable centreCarte sur l'évènement click sur le bouton
		google.maps.event.addDomListener(controlUI, 'click', function() {
			carte.setCenter(centreCarte5),
			carte.setZoom(zoomCarte5)
		});
	}
}

function createXmlHttpRequest() {
 try {
   if (typeof ActiveXObject != 'undefined') {
     return new ActiveXObject('Microsoft.XMLHTTP');
   } else if (window["XMLHttpRequest"]) {
     return new XMLHttpRequest();
   }
 } catch (e) {
   changeStatus(e);
 }
 return null;
};

function downloadUrl(url, callback) {
 var status = -1;
 var request = createXmlHttpRequest();
 if (!request) {
   return false;
 }

 request.onreadystatechange = function() {
   if (request.readyState == 4) {
     try {
       status = request.status;
     } catch (e) {
       // Usually indicates request timed out in FF.
     }
     if (status == 200) {
       callback(request.responseXML, request.status);
       request.onreadystatechange = function() {};
     }
   }
 }
 request.open('GET', url, true);
 try {
   request.send(null);
 } catch (e) {
   changeStatus(e);
 }
};

function xmlParse(str) {
  if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  }

  if (typeof DOMParser != 'undefined') {
    return (new DOMParser()).parseFromString(str, 'text/xml');
  }

  return createElement('div', null);
}

function downloadScript(url) {
  var script = document.createElement('script');
  script.src = url;
  document.body.appendChild(script);
}

function codeAdresse() {
	// Fermeture de toutes les info-bulles situées sur la carte 
	if (infoBulle!=null) { infoBulle.close(); }
	var adresse = document.getElementById("adresse").value;
	var ville = document.getElementById("ville").value;
	var requete = adresse + ", " + ville + ", Aveyron";
	if (geoCodage) {
		geoCodage.geocode( {'address': requete}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				carteGmap.setCenter(results[0].geometry.location);
				carteGmap.setZoom(16);
				var marqueurResultat = new google.maps.Marker({
				map: carteGmap, 
				position: results[0].geometry.location,
				title: results[0].address_components[0].long_name
				});
				// Insertion du marqueur dans le tableau des marqueurs de résultat de recherche
				tableauMarqueurResult.push(marqueurResultat);
			} else {
				alert("Aucun resultat pour la recherche " + adresse + " a " + ville + " : " + status);
			}
		});
	}
}

function effaceRecherche() {
	if (tableauMarqueurResult) {
		for (i in tableauMarqueurResult) { tableauMarqueurResult[i].setMap(null); }
		tableauMarqueurResult.length = 0;
	}
}

