php_adresses_url = '';
adresse_commune = 'Rennes';

function getStreetLike()
{
	var nom_rue = $('rue').value;
	var code_ville = $('ville').value;
	reqRues(nom_rue, code_ville);
}

function updateStreetName(aName)
{
	$('rue').value = aName;
}

function newAdresseMarker(aMarker, aSelectIndex)
{
	aMarker.mouseover = function(evt) {this.showLabel();}
	aMarker.mouseout = function(evt) {this.hideLabel();}
	aMarker.selectIndex = aSelectIndex;
	aMarker.click = function(evt) {this.hideLabel();$('numero').selectedIndex=this.selectIndex;}
	markerHandler.addMarker(aMarker);
	//adressesMarker.push(aMarker);
}

function clearAdresses()
{
	//while (adressesMarker.length)
	//{
	//	var marker = adressesMarker.pop();
	//	markerHandler.removeMarker(marker);
	//}
	markerHandler.removeAllMarkers();
	hideDiv('panneau_reponse');
	$('numero').innerHTML = '<option value="0" disabled="disabled">rue?</option>'
}

function clearRues()
{
	// remove all address markers from map
	clearAdresses();
	// erase and hide response list
	$('liste_reponse').innerHTML = '';
}

function reqRues(rue, code_ville)
{
	clearRues();
	$('rappel_recherche').innerHTML = 'Recherche des rues contenant<br/><cite>' + rue + '</cite>';
	if (code_ville == '35238') php_adresses_url = 'adresses/rennes/';
	else php_adresses_url = 'adresses/limitrophes/';
	adresse_commune = $('ville').options[$('ville').selectedIndex].label;
	new Ajax.JSONRequest(php_adresses_url+'getrues.php', {
	  callbackParamName: "jsoncallback",
	  parameters: {
		ville: code_ville, name: rue, format: 'json'
	  },
	  timeout: 5,
	  method: 'get',
	  onCreate: function(response) {
		//console.log("1: create", response, response.responseJSON);
	  },
	  onSuccess: function(response) {
		//console.log("1: success", response, response.responseJSON);
		var rues = response.responseJSON;
		// if (rues.length)
		// {
		// 	var rue = rues[0];
		// 	reqAdresse(rue.rivoli, rue.name);
		// }
		var lrDiv = $('liste_reponse');
		var lrDivHtml = "";
		switch (rues.length) {
			case 1 :
				var rue = rues[0];
				reqAdresse(rue.rivoli, rue.name);
				break;
			case 0 :
				lrDivHtml += '<p>Aucune rue trouvée</p>';
			default :
				var escSingleQuote = /'/g;
				for (var iRue = 0; iRue < rues.length; iRue++)
				{
					var rue = rues[iRue];
					lrDivHtml += "<p><a href=\"#\" onclick=\"reqAdresse('"+rue.rivoli.replace(escSingleQuote, "\\'")+"', '"+rue.name.replace(escSingleQuote, "\\'")+"'); return false;\">"+rue.name+"</a></p>";
				}
				lrDiv.innerHTML = lrDivHtml;
				showDiv('panneau_reponse');
				break;
		}
	  },
	  onFailure: function(response) {
		//console.log("1: fail", response, response.responseJSON);
	  },
	  onComplete: function(response) {
		//console.log("1: complete", response, response.responseJSON);
	  }
	});
}

function reqAdresse(rivoli, streetName)
{
	clearAdresses();
	updateStreetName(streetName);
	
	new Ajax.JSONRequest(php_adresses_url+'getadresses.php', {
	  callbackParamName: "jsoncallback",
	  parameters: {
		id_rue: rivoli, format: 'json'
	  },
	  timeout: 5,
	  method: 'get',
	  onCreate: function(response) {
		//console.log("1: create", response, response.responseJSON);
	  },
	  onSuccess: function(response) {
		//console.log("1: success", response, response.responseJSON);
		var adresses = response.responseJSON;
    	var styleOpts = {"url":"images/poi_adresse.png","width":14,"height":17,"iconAnchor":{'x':7,'y':15},"labelAnchor":{'x':-60,'y':-36}};
    	var adrSelectHtml = '';
		for (var iAdresse = 0; iAdresse < adresses.length; iAdresse++) {
			var adresse = adresses[iAdresse];
			var marker = new arMarker(adresse.name + ' ' + streetName + '<br/>à '+adresse_commune, new arPoint(adresse.x,adresse.y,"3948"),styleOpts);
			newAdresseMarker(marker, iAdresse+1);
			adrSelectHtml += '<option value="'+adresse.x+','+adresse.y+'">'+adresse.name+'</option>';
		}
		var centreXY = centerMapOn(adresses, "3948");
		adrSelectHtml = '<option value="'+centreXY+'" selected="selected">Centre</option>'+adrSelectHtml;
		if (BrowserDetect.browser == "Explorer") $('numero').outerHTML = '<select id="numero" name="numero" onchange="panMapToXY(this.value); return(false);">'+adrSelectHtml+'</select>';
		else $('numero').innerHTML = adrSelectHtml;
	  },
	  onFailure: function(response) {
		//console.log("1: fail", response, response.responseJSON);
	  },
	  onComplete: function(response) {
		//console.log("1: complete", response, response.responseJSON);
	  }
	});
}

function centerMapOn(aArray, aEpsg)
{
	// Fonction permettant de cadrer la vue sur une liste de Marker
	// aArray est une liste d'objet ou associative array ayant chacun une propriété x et y
	if (aArray.length)
	{
		// construction de listes contenant toutes les valeurs x et y respectives des markers
		xArray = [];
		yArray = [];
		for (var i = 0; i < aArray.length; i++) {
			var arrayElement = aArray[i];
			xArray.push(arrayElement.x);
			yArray.push(arrayElement.y);
		}
		// détermination des valeurs min et max en x et y
		xMin = Math.min.apply({},xArray);
		xMax = Math.max.apply({},xArray);
		yMin = Math.min.apply({},yArray);
		yMax = Math.max.apply({},yArray);
		// valeurs centrales de l'intervalle (bounding box)
		x = (xMin + xMax) /2;
		y = (yMin + yMax) /2;
		var centerXY = x.toString()+','+y.toString();
		// dimensions de l'intervalle (bounding box)
		xDim = (xMax - xMin);
		yDim = (yMax - yMin);
		// dimensions de la div en pixels
		posterDiv = $('poster');
		xDimDiv = posterDiv.clientWidth;
		yDimDiv = posterDiv.clientHeight;
		// calcul de la résolution mini (en m/px) pour voir tout
		minRes = Math.max(xDim/xDimDiv, yDim/yDimDiv);
		// positionnement du poster sur ce point et cette résolution
		posterNav.goTo(new arPoint(x,y,aEpsg),{"resolution":minRes});
		return(centerXY);
	}
}

function panMapToXY(aXY)
{
	var xyArray = aXY.split(',');
	if (xyArray.length >= 2) {
		var x = parseFloat(xyArray[0]);
		var y = parseFloat(xyArray[1]);
		var epsg = '3948';
		posterNav.panTo(new arPoint(x,y,epsg));
	}
}
