function trim(palabro)
{
	palabro = palabro.replace(/^\s*|\s*$/g,"");
	return palabro;
}

function mostrar_agencies(num)
{
	pintar_agencies_pag(num);
	for(p=1;p<=pag;p++)
	{
		document.getElementById("agencies_"+p).className='ocult';
		document.getElementById("pag_"+p).className='';
	}
	document.getElementById("agencies_"+num).className='visible';
	document.getElementById("pag_"+num).className='selected';
}


function desde_agencia(i)
{
	document.getElementById('hasta_'+i).className='not';
	document.getElementById('desde_'+i).className='link';
	desde = false;
}

function hasta_agencia(i)
{
	document.getElementById('desde_'+i).className='not';
	document.getElementById('hasta_'+i).className='link';
	desde=true;
}


function setDirections(fromAddress, toAddress, locale,agencia) 
{
	try
	{
		map.closeInfoWindow();
	}
	catch(e)
	{
	}
	try
	{
		gdir.clear();
	}
	catch(e)
	{
	}
	
	document.getElementById("directions").innerHTML='<div class="imprimir"><a href="javascript:window.print();">'+traduccio("Imprimir")+'</a></div>';
	if(desde)
		document.getElementById("directions").innerHTML+="<h4>"+agencia+" - "+toAddress+"</h4>";
	else
		document.getElementById("directions").innerHTML+="<h4>"+fromAddress+" - "+agencia+"</h4>";
	gdir.load("from: " + fromAddress + " to: " + toAddress,{ "locale": locale });
}

function setDirs(num,locale)
{
	var agen = agencias[num].latitude+','+agencias[num].longitude;
	var otra = document.getElementById('direccion_'+num).value;
	document.getElementById("searchLayer").style.display="none";
	document.getElementById("llista_agencies").style.display="none";
	document.getElementById('directions').style.display="block";
	if(desde)
		setDirections(agen, otra, locale, agencias[num].title);
	else
		setDirections(otra, agen, locale, agencias[num].title);
	document.getElementById('tornar').style.display="block";
}

function handleErrors()
{
	if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
		alert(traduccio("Adreca desconeguda"));
	else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	  alert(traduccio("Error servidor"));
	   
	else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	  alert(traduccio("Query perduda"));

	else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	  alert(traduccio("Clave erronea"));

	else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	  alert(traduccio("Peticion incorrecta"));
	else 
		alert(traduccio("Error desconocido"));
}

function handleErrors2()
{
	if (gdistances.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
		alert(traduccio("Adreca desconeguda"));
	else if (gdistances.getStatus().code == G_GEO_SERVER_ERROR)
	  alert(traduccio("Error servidor"));
	   
	else if (gdistances.getStatus().code == G_GEO_MISSING_QUERY)
	  alert(traduccio("Query perduda"));

	else if (gdistances.getStatus().code == G_GEO_BAD_KEY)
	  alert(traduccio("Clave erronea"));

	else if (gdistances.getStatus().code == G_GEO_BAD_REQUEST)
	  alert(traduccio("Peticion incorrecta"));
	else 
		alert(traduccio("Error desconocido"));
}

/////////////////////////////////////////////////////
   

function createMarker(point,name,html,serveis,provincia,especialitats)
{
 	var marker = new GMarker(point,{title:name, icon:gicon});
 	marker.name = name;
 	marker.serveis = serveis;
 	marker.especialitats = especialitats;
 	marker.provincia = provincia;
 	
 	GEvent.addListener(marker, "click", function() 
 	{
   		marker.openInfoWindowHtml(html);
   		desde = false;
 	});
 	GEvent.addListener(marker, "dblclick", function() 
 	{
   		map.setCenter(point);
   		map.zoomIn();
 	});
 	htmls[i] = html;
 	i++;
 	return marker;
}

function createMarker2(point,name,html,num_agencies) 
{
 	var marker = new MyCluster(name,point,num_agencies);
 	return marker;
}

function mostrar(num)
{
	var formulari_cerca = document.form_cerca_agencies;
	if(document.getElementById("como_llegar_"+num).className=="link")
		document.getElementById("como_llegar_"+num).className="hidden";
	else
	{
		document.getElementById("como_llegar_"+num).className="link";
		if(current_location!=null)
		{
			var localitat = formulari_cerca.localitat.value;
			var provincia = formulari_cerca.provincia.value;
			var cp = formulari_cerca.cp.value;
			document.getElementById("direccion_"+num).value=current_search;
		}
	}
}

function compare_distance(a,b)
{
	return (a.distance-b.distance);
}   

function compare_rdistance(a,b)
{
	return (a.rdistance-b.rdistance);
}   
   
   
// ====== Geocoding ======
function showAddress() 
{
	var cerca_provincia = false;
	try
	{
		map.closeInfoWindow();
	}
	catch(e)
	{
	}
	try
	{
		gdir.clear();
	}
	catch(e)
	{
	}
	localitat = trim(document.getElementById("localitat").value);
	provincia = document.getElementById("provincia");
	cp = trim(document.getElementById("cp").value);
	
	altres_direccions=false;
	
	search="";
	
	if(cp.length>0)
	{
		search += cp;
	}
	if(localitat.length>0)
	{
		if(search!="")
			search += ",";
		search += localitat;
	}
	
	var provincia_index=provincia.selectedIndex;
	if(provincia_index>0)
	{
		if(search!="")
		{
			provincia=provincia[provincia_index].value;
			search += ","+provincia;
		}
		else
		{
			cerca_provincia=true;
		}
	}
	
	document.getElementById("search_query").value=search;
	
	//search_query
	current_search = search;

	if(search.length>0)
	{
		/*if(localitat=="" && provincia_index==0)
			search += ", Spain";
		if(isPostalCode(trim(search)))
			search += ", Spain";*/
		// ====== Perform the Geocoding ======   
		tornar_a_cercar = true; 
		geo.getLocations(search, cercar_localitzacions);
	}
	else if(cerca_provincia)
	{
		pintar_info_agencies_provincia(provincia[provincia_index].value);
		
	}
	else
	{
		document.getElementById("searchLayer").style.display="block";
		alert(traduccio("Tots els camps estan buits"));
	}
	return false;
}     

function cercar_localitzacions(result)
{
	if(result.Status.code == G_GEO_SUCCESS) 
	{
		// ===== If there was more than one result, "ask did you mean" on them all =====
		if (result.Placemark.length > 1) 
		{ 
			// Loop through the results
			var agencia_num=1;
			var pp=null;
			var ppaddress=null;
			for (var i=0; i<result.Placemark.length; i++) 
			{
				var countryCode;
				if(result.Placemark[i].AddressDetails.Country!=null)
				{
					countryCode = result.Placemark[i].AddressDetails.Country.CountryNameCode;
				}
				else
				{
					countryCode="NO";
				}
				if(countryCode=="ES")
				{
					if(pp==null)
					{
						pp=result.Placemark[i].Point.coordinates;
						ppaddress=result.Placemark[i].address;
					}
					var p = result.Placemark[i].Point.coordinates;
					if(agencia_num==1)
					{
						document.getElementById("message").innerHTML = "<h4>"+traduccio("Altres posibles direcciones")+":</h4>";
					}
					var paddress=result.Placemark[i].address;
					document.getElementById("message").innerHTML += "<div class='result_direccions'>"+agencia_num+": <a href='javascript:place(" +p[1]+","+p[0]+",\""+paddress.replace("\'","*coma*")+"\")'>"+paddress+"<\/a></div>";
					agencia_num++;
				}
			}		
			if(agencia_num>2)
				altres_direccions=true;	
			if(agencia_num>1)
				document.getElementById("message").innerHTML += "<div class='separator'></div>";
			else
			{
				if(tornar_a_cercar)
				{
					tornar_a_cercar = false;
					geo.getLocations(search+", Espa&ntilde;a", cercar_localitzacions);
				}
				else
				{
					document.getElementById("searchLayer").style.display="block";
					alert(traduccio('No encontrado')+' "'+search+'."');
				}
			}
			if(pp!=null)
				place(pp[1],pp[0],ppaddress);
		}
		// ===== If there was a single marker =====
		else
		{
			document.getElementById("message").innerHTML = "";
			var countryCode;
			if(result.Placemark[0].AddressDetails.Country!=null)
			{
				countryCode = result.Placemark[0].AddressDetails.Country.CountryNameCode;
			}
			else
			{
				countryCode="ES";
			}
			if(countryCode=="ES")
			{
				var p = result.Placemark[0].Point.coordinates;
				var paddress=result.Placemark[0].address;
				document.getElementById("message").innerHTML += "<div class='result_direccions'>"+agencia_num+": <a href='javascript:place(" +p[1]+","+p[0]+",\""+paddress.replace("\'","*coma*")+"\")'>"+paddress+"<\/a></div>";
				place(p[1],p[0],paddress);
				agencia_num++;
			}
			else
			{
				if(tornar_a_cercar)
				{
					tornar_a_cercar = false;
					geo.getLocations(search+", Espa&ntilde;a", cercar_localitzacions);
				}
				else
				{
					document.getElementById("searchLayer").style.display="block";
					alert(traduccio('No encontrado')+' "'+search+'."');
				}
			}
			
		}
	}
	// ====== Decode the error status ======
	else 
	{
		if(tornar_a_cercar)
		{
			tornar_a_cercar = false;
			geo.getLocations(search+", Espa&ntilde;a", cercar_localitzacions);
		}
		else
		{
			document.getElementById("searchLayer").style.display="block";
			alert(traduccio('No encontrado')+' "'+search+'."');
		}
	}
} 

function place(lat,lng,curr_loc) 
{
	try
	{
		map.removeOverlay(address_marker);
	}
	catch(e)
	{
		
	}
	
	if(curr_loc!=null)
	{
		curr_loc = curr_loc.replace('*coma*','\'');
		current_search=curr_loc;
	}
	
	document.getElementById("llista_agencies").innerHTML="";

	var point = new GLatLng(lat,lng);
	current_location = point;
	map.setCenter(point,9);
	
	address_marker = new GMarker(point)
	
  	map.addOverlay(address_marker);
  	
  	pintar_info_agencies();
	
  	document.getElementById("message").style.display = "none";
}

function centrar(lat,lng) 
{
	var point = new GLatLng(lat,lng);
	map.setCenter(point,13); 
}

function calculateDistance(location)
{
	try
	{
		var miledistance = current_location.distanceFrom(location, 3959).toFixed(1);
		var kmdistance = (miledistance * 1.609344).toFixed(1);
		return kmdistance;
	}
	catch (error)
	{
		alert(error);
		return 0;
	}
}

function mostrar_info_agencia(agencia, distancia)
{
	info_agencia = '<div class="agencia">';
	
	if(agencia.state!=null)
	{
		info_agencia+=agencia.link;
		info_agencia+=' - '+distancia+' km</h3></p></form>';
	}
	//if(distancia!=-1)
		//info_agencia+='<h3><a href="'+agencia.href+'">'+agencia.title+' - '+distancia+' km</a></h3>';
	else
		info_agencia+='<h3><a href="'+agencia.href+'">'+agencia.title+'</a> - '+distancia+' km</h3>';
	
	
	info_agencia+='<p>'+agencia.address+'<br />';
	if(agencia.state!=null)
	{
		info_agencia+=agencia.pc+' - '+nom_provincies[agencia.state]+'</p>';
		info_agencia+='<div class="options">';
		info_agencia+='<p><a href="javascript:centrar('+agencia.latitude+','+agencia.longitude+')">'+traduccio("Centrar mapa")+'</a></p>';
		info_agencia += '</div><!-- tanco options -->';
	}
	else if(agencia.state_name!=null)
	{
		info_agencia+=agencia.pc+' - '+agencia.state_name+'</p>';
		info_agencia+='<div class="options">';
		info_agencia+=agencia.link;
		info_agencia += '</div><!-- tanco options -->';
	}
		
	info_agencia += '</div><!-- tanco agencia -->';
	return info_agencia;
}

function tornar()
{
	try
	{
		map.closeInfoWindow();
	}
	catch(e)
	{
	}
	try
	{
		gdir.clear();
	}
	catch(e)
	{
	}
	try
	{
		map.removeOverlay(address_marker);
	}
	catch (e)
	{	
	}
	
	// ===== determine the zoom level from the bounds =====
	map.setZoom(map.getBoundsZoomLevel(bounds));
	// ===== determine the centre from the bounds ======
	map.setCenter(bounds.getCenter());
	
	current_location = null;
	
	document.getElementById("searchLayer").style.display="block";
	document.getElementById("llista_agencies").style.display="none";
	document.getElementById("llista_agencies").innerHTML="";
	document.getElementById("message").style.display="none";
	document.getElementById("message").innerHTML="";
	document.getElementById("directions").style.display="none";
	document.getElementById("directions").innerHTML="";
	document.getElementById('tornar').style.display="none";
	
	actualitzar_marcadors();
}

function compleix_condicions_cerca(serveis,especialitats)
{
	var compleix_condicions = true;
	if(categories_num.length>0 && serveis!=null)
	{
		for(var x=0;x<categories_num.length&&compleix_condicions;x++)
		{	
			if(document.getElementById(categories_num[x]).checked)
			{
				if(serveis[categories_num[x]]==null)
					compleix_condicions = false;
			}
		}
	}
	else if(serveis==null)
	{
		for(var x=0;x<categories_num.length&&compleix_condicions;x++)
		{	
			if(document.getElementById(categories_num[x]).checked)
			{
				compleix_condicions=false;
			}
		}
	}
	
	
	var compleix_condicions2 = true;
	if(especialitats_num.length>0 && especialitats!=null)
	{
		for(var x=0;x<especialitats_num.length&&compleix_condicions2;x++)
		{	
			if(document.getElementById(especialitats_num[x]).checked)
			{
				if(especialitats[especialitats_num[x]]==null)
					compleix_condicions2 = false;
			}
		}
	}
	else if(especialitats==null)
	{
		for(var x=0;x<especialitats_num.length&&compleix_condicions2;x++)
		{	
			if(document.getElementById(especialitats_num[x]).checked)
			{
				compleix_condicions2=false;
			}
		}
	}
	return (compleix_condicions&&compleix_condicions2);
}

function actualitzar_cerca(id_agencia)
{
	var formulari =document.getElementById("form_agencia_"+id_agencia);
	if(document.getElementById("llista_agencies").style.display=='block')
	{
		var formulari_cerca = document.form_cerca_agencies;
		var inputs_cerca = formulari_cerca.getElementsByTagName("input");
		var inputs = formulari.getElementsByTagName("input");
		var checkbox_cerca = new Array();
		
		for(var x=0;x<inputs_cerca.length;x++)
		{
			if(inputs_cerca[x].type=="checkbox")
			{
				if(inputs_cerca[x].checked)
					checkbox_cerca[inputs_cerca[x].name]=true;
				else
					checkbox_cerca[inputs_cerca[x].name]=false;
			}
		}
		
		for(var x=0;x<inputs.length;x++)
		{
			if(checkbox_cerca[inputs[x].name]!=null)
			{
				inputs[x].value=checkbox_cerca[inputs[x].name];
			}
		}
		
		formulari.localitat.value = localitat;
		formulari.provincia.value = provincia;
		formulari.cp.value = cp;
		
	}	
	
	formulari.submit();
}



function createIcon(url,url_shadow)
{
	gicon = new GIcon();
	gicon.image = url;
	gicon.shadow = url_shadow;
	gicon.iconSize = new GSize(24, 24);
	gicon.shadowSize = new GSize(37, 24);
	gicon.iconAnchor = new GPoint(12, 12);
	gicon.infoWindowAnchor = new GPoint(12, 1); 
}

function actualitzar_marcadors() 
{
	for(var nag=0;nag<provincia_num_agencias.length;nag++)
		provincia_num_agencias[nag]=0;
	if(gmarkers_agencias!=null)
	{
		//actualitzem la llista d'agencies
		for(var gm=0;gm<gmarkers_agencias.length;gm++)
		{
			if(compleix_condicions_cerca(gmarkers_agencias[gm].serveis,gmarkers_agencias[gm].especialitats))
			{
				provincia_num_agencias[gmarkers_agencias[gm].provincia]=provincia_num_agencias[gmarkers_agencias[gm].provincia]+1;
				if(map.getZoom()>=8)
					gmarkers_agencias[gm].show();
			}
			else
				gmarkers_agencias[gm].hide();
	    }
	    
	    //actualitzem la llista de provincies
	    for(var gp=0;gp<gmarkers_provincias.length;gp++)
		{
			//gmarkers_provincias[gp].$.title=gmarkers_provincias[gp].name+'('+provincia_num_agencias[gp]+')';
			gmarkers_provincias[gp].setCount(provincia_num_agencias[gp]);
			map.removeOverlay(gmarkers_provincias[gp]);
			if(provincia_num_agencias[gp]>0)
				map.addOverlay(gmarkers_provincias[gp]);
		}
	}
}
function pintar_info_agencies()
{
	num_agencies_properes=0;
	
	var dades_agencies = new Array();
	var distancies = new Array();
		
	for (var j = 0; j < agencias.length; j++) 
    {
    	// obtain the attribues of each marker
     	var lat = parseFloat(agencias[j].latitude);
     	var lng = parseFloat(agencias[j].longitude);
     	var point = new GLatLng(lat,lng);
     	var label = agencias[j].title;
     	var html = agencias[j].label;
         
       	var distancia = calculateDistance(point);
       	if(distancia<=50)
       	{
       		if(compleix_condicions_cerca(agencias[j].serveis,agencias[j].especialitats))
       		{
       			if(num_agencies_properes==0)
       			{
       				localitat = document.getElementById("localitat").value;
					provincia = document.getElementById("provincia").value;
					cp = document.getElementById("cp").value;
					
					var valor_cerca=localitat+" "+cp+" "+provincia;
       				document.getElementById("llista_agencies").innerHTML="<h4>"+traduccio("Les agencies mes properes son")+" <strong>"+valor_cerca+"</strong> "+traduccio("son")+":</h4>";
       				if(altres_direccions)
					{
						document.getElementById("llista_agencies").innerHTML+="<div class='suggeriment'><a href='javascript:show_message()'>"+traduccio("No es la zona que cerques")+"</a></div>";
					}
					else
					{
					
					}
       			}
       			
       			agencias[j].distance=distancia;
       			
         		//per ordenar i mostrar les agencies paginades
         		dades_agencies[num_agencies_properes]=new Object();
         		dades_agencies[num_agencies_properes].agencia = agencias[j];
         		//dades_agencies[num_agencies_properes].text=mostrar_info_agencia(agencias[j],distancia);
         		dades_agencies[num_agencies_properes].distance=distancia;
         		
         		document.getElementById("searchLayer").style.display="none";
         		num_agencies_properes++;
         	}
      	}
    }
	
 	if(num_agencies_properes==0)
	{
		document.getElementById("llista_agencies").innerHTML="<h4>"+traduccio("No hi ha cap agencia a menys de 50 km")+"</h4>";
		if(altres_direccions)
		{
			document.getElementById("llista_agencies").innerHTML+="<div class='suggeriment'><a href='javascript:show_message()'>"+traduccio("No es la zona que cerques")+"</a></div>";
		}
	}
	else
	{
		///ordenar agencies per distancia
		dades_agencies.sort(compare_distance);	
		
		
		//PAGINACIO
		pag=parseInt(num_agencies_properes/agencies_per_pag);
		if (num_agencies_properes%agencies_per_pag != 0)
			pag ++;
			
			
			
		refresh_agencies=new Array(pag);
		for(ra=0;ra<refresh_agencies.length;ra++)
			refresh_agencies[ra]=false;
			
			
		var llista_agencies = document.getElementById("llista_agencies");
		
		
		var informacio_agencies = '';
		var pag_actual = 0;
		
		gdir_array=new Array();
		for(a=0;a<dades_agencies.length;a++)
		{
			var mod = a%agencies_per_pag;
			if(mod==0)
			{
				pag_actual++;
				if(a!=0)
				{
					informacio_agencies+="</div>";
					informacio_agencies+="</div>";
					informacio_agencies+="<div id='agencies_"+pag_actual+"' class='ocult'>";
				}
				else
					informacio_agencies+="<div id='agencies_"+pag_actual+"' class='visible'>";
					
			}
			if(mod!=0)
			{
				informacio_agencies+="</div>";
				informacio_agencies+="<div id='agencia_"+pag_actual+"_"+mod+"'>";
			}
			else
				informacio_agencies+="<div id='agencia_"+pag_actual+"_"+mod+"'>";
					
			
			gdir_array[gdir_array.length]=dades_agencies[a].agencia;
			//informacio_agencies +=dades_agencies[a].text;
		}
		llista_agencies.innerHTML +=informacio_agencies;
		if(pag>1)
		{
			var paginacio = "<div class='paginacio'>";
			for(p=1;p<=pag;p++)
			{
				if(p!=1)
				{
					paginacio+="-";
					paginacio+="<a id='pag_"+p+"' href='javascript:mostrar_agencies("+p+")'>"+p+"</a>";
				}
				else
				{
					paginacio+="<a id='pag_"+p+"' class='selected' href='javascript:mostrar_agencies("+p+")'>"+p+"</a>";
				}
			}
			paginacio+="</div>";
			
			llista_agencies.innerHTML += paginacio;
		}
		
		pintar_agencies_pag(1);
		
	}
	document.getElementById('llista_agencies').style.display="block";
	document.getElementById('searchLayer').style.display="none";
 	document.getElementById('tornar').style.display="block";
}

function pintar_agencies_pag(pagina)
{	
	if(!refresh_agencies[pagina])
	{
		posicio_inicial = (pagina-1)*gdir_per_pag;	
		if(posicio_inicial<gdir_array.length)
		{
			gdir_actual = 0;
			gdir_pag = pagina;
			gdir_actual_array = new Array();
			for(var e=posicio_inicial;e<posicio_inicial+gdir_per_pag && e<gdir_array.length; e++)
			{
				gdir_actual_array[gdir_actual_array.length] = gdir_array[e];
			}
			gdir_point = new GPoint(gdir_actual_array[0].latitude,gdir_actual_array[0].longitude);
			gdistances.load("from:"+current_location+" to:"+gdir_point);
		}
		refresh_agencies[pagina]=true;
	}
	
}

function pintar_agencia(agencia,div_name)
{
	document.getElementById(div_name).innerHTML = mostrar_info_agencia(agencia,agencia.rdistance);
}

function onGDirectionsLoad()
{ 
	//if(gdir_count<gdir_array.length)
	var element_actual = gdir_actual+(gdir_pag*gdir_per_pag);
	if(gdir_actual<gdir_actual_array.length)
	{
		var dist = ((gdistances.getDistance().meters)/1000).toFixed(1);
		gdir_actual_array[gdir_actual].rdistance = dist;
		//document.getElementById('agencia_'+gdir_array[gdir_count].id).innerHTML = dist + " km";
		gdir_actual++;
		if(gdir_actual<gdir_actual_array.length)
		{
			gdir_point = new GPoint(gdir_actual_array[gdir_actual].latitude,gdir_actual_array[gdir_actual].longitude);
			gdistances.load("from: "+current_location+" to: "+gdir_point);
		}
		else
		{
			gdir_actual_array.sort(compare_rdistance);
			for(var e=0;e<gdir_actual_array.length;e++)
			{
				pintar_agencia(gdir_actual_array[e],"agencia_"+gdir_pag+"_"+e);
			}
		}
	}
}

function pintar_info_agencies_provincia(provincia)
{
	num_agencies=0;
	distancia=-1;
	
	var dades_agencies = new Array();
	var distancies = new Array();
	
	var provincia_actual=-1;
	
	for(var pro=0;pro<nom_provincies.length&&provincia_actual==-1;pro++)
	{
		if(nom_provincies[pro]==provincia)
			provincia_actual = pro;
	}
		
    var provincia_actual_point = provincia_bounds[provincia_actual].getCenter();
    map.setCenter(provincia_actual_point,9);
	
	//document.getElementById('llista_agencies').style.display="block";
	//document.getElementById('searchLayer').style.display="none";
 	//document.getElementById('tornar').style.display="block";
}



function actualitzar_mapa(zoom1,zoom2)
{	
	if(gmarkers_agencias!=null)
	{
		if((zoom1>zoom2 && zoom2>=8)||(zoom1<zoom2 && zoom1>=8))
		{
		}
		else
		{
			if(zoom2<8)
			{
				for(var gm=0;gm<gmarkers_agencias.length;gm++)
				{
					gmarkers_agencias[gm].hide();
				}
				for(var gp=0;gp<gmarkers_provincias.length;gp++)
				{
					gmarkers_provincias[gp].show();
				}
			}
			else
			{
				for(var gp=0;gp<gmarkers_provincias.length;gp++)
				{
					gmarkers_provincias[gp].hide();
				}
				for(var gm=0;gm<gmarkers_agencias.length;gm++)
				{
					if(compleix_condicions_cerca(gmarkers_agencias[gm].serveis,gmarkers_agencias[gm].especialitats))
						gmarkers_agencias[gm].show();
					else
						gmarkers_agencias[gm].hide();
					
				}
			}
		}
	}
}

function inicialitzar_mapa()
{	
	gmarkers_agencias = new Array();
	gmarkers_provincias = new Array();
	a_id=-1;
	
	for (var j = 0; j < agencias.length; j++) 
    {
    	var lat = parseFloat(agencias[j].latitude);
	   	var lng = parseFloat(agencias[j].longitude);
	   	var point = new GLatLng(lat,lng);
	   	var label = agencias[j].title;
	   	var html = agencias[j].label;
	   	
	   	
    	if(agencias[j].serveis!=null)
		{
			var marker = createMarker(point,label,html,agencias[j].serveis,agencias[j].state,agencias[j].especialitats);
			gmarkers_agencias.push(marker);
			provincia_bounds[agencias[j].state].extend(point);
			if(compleix_condicions_cerca(agencias[j].serveis,agencias[j].especialitats))
				provincia_num_agencias[agencias[j].state]=provincia_num_agencias[agencias[j].state]+1;
			map.addOverlay(marker);
		}
		
		if(agencia_id==agencias[j].id)
		{
			a_id = j;
		}
	}
	
	var current_num_provincias = 0;
    var num_provincias = provincia_bounds.length;
    for (var j in provincia_bounds)
    {
    	if(current_num_provincias<num_provincias)
     	{
     		try
     		{
	     		var point = provincia_bounds[j].getCenter();
		     	if(point.lat()!=0 && point.lng!=null)
				{
			 		var marker = createMarker2(point,nom_provincies[j],"",provincia_num_agencias[j]);
		  			gmarkers_provincias.push(marker);
		  			if(provincia_num_agencias[j]>0)
		  				map.addOverlay(marker);
		  			bounds.extend(point);
				}
				current_num_provincias++;
			}
			catch(err)
			{
			}
		}
   	}
   	
   	// ===== determine the zoom level from the bounds =====
	map.setZoom(map.getBoundsZoomLevel(bounds));
	// ===== determine the centre from the bounds ======
	map.setCenter(bounds.getCenter());
	
	//guardamos la posicion para el return to last position
	map.savePosition();
	
	if(agencias[a_id]!=null)
		centrar(agencias[a_id].latitude,agencias[a_id].longitude);
	
}


function show_message()
{
	try
	{
		map.closeInfoWindow();
	}
	catch(e)
	{
	}
	try
	{
		gdir.clear();
	}
	catch(e)
	{
	}
	document.getElementById("message").style.display='block';
	document.getElementById("llista_agencies").style.display='none';
}






////CLUSTER///////////
function MyCluster(name,point,count) 
{
	this.name_ = name;
	this.point_ = point;
	this.count_ = count;
	
	// Create the DIV representing our rectangle
	var div = document.createElement("div");
	var text = document.createTextNode(this.count_);
	div.style.padding="3px 0px 0px 0px";
	div.style.fontWeight="bold";
	div.style.textAlign="center";
	div.appendChild(text);
	div.style.position = "absolute";
	this.div_ = div;
}
MyCluster.prototype = new GOverlay();

// Creates the DIV representing this rectangle.
MyCluster.prototype.initialize = function(map) 
{
  // Create the DIV representing our rectangle
  var div = document.createElement("div");
  var text = document.createTextNode(this.count_);
  div.style.padding="13px 0px 0px 0px";
  div.style.fontWeight="bold";
  div.style.fontSize="11px";
  div.style.color="#ffffff";
  div.style.textAlign="center";
  div.appendChild(text);
  div.style.position = "absolute";
  div.style.cursor="pointer";

  // Our rectangle is flat against the map, so we add our selves to the
  // MAP_PANE pane, which is at the same z-index as the map itself (i.e.,
  // below the marker shadows)
  map.getPane(G_MAP_MAP_PANE).appendChild(div);

  this.map_ = map;
  this.div_ = div;
  
}

// Remove the main DIV from the map pane
MyCluster.prototype.remove = function() 
{
  this.div_.parentNode.removeChild(this.div_);
}

// Copy our data to a new Rectangle
MyCluster.prototype.copy = function() 
{
  return new Rectangle(this.name_,this.point_,this.count_);
}

// Redraw the rectangle based on the current projection and zoom level
MyCluster.prototype.redraw = function(force) 
{
  // We only need to redraw if the coordinate system has changed
  if (!force) 
  	return;

  // Calculate the DIV coordinates of two opposite corners of our bounds to
  // get the size and position of our rectangle
  var position = this.map_.fromLatLngToDivPixel(this.point_);

  // Now position our DIV based on the DIV coordinates of our bounds
  this.div_.style.width = "40px";
  this.div_.style.height = "26px";
  this.div_.style.left = (position.x-20) + "px";
  this.div_.style.top = (position.y-20) + "px";
  this.div_.style.backgroundImage="url("+url2+")";
  this.div_.style.backgroundColor="transparent";
  
  var aux_point = this.point_;
  
  GEvent.addDomListener(this.div_, "click", function () 
  {
	map.setCenter(aux_point,9);
  });
  
  if(this.map_.getZoom()>=8)
	this.hide();
}

MyCluster.prototype.show = function()
{
	this.div_.style.display="";
}

MyCluster.prototype.hide = function()
{
	this.div_.style.display="none";
}

MyCluster.prototype.setCount = function(count)
{
	this.count_=count;
}


function isPostalCode(x) 
{
	var pattern = /^([0-9][0-9][0-9][0-9])[0-9]$/;
	return x.match(pattern);
}
