var debugOn=(window.location.href.indexOf("debug=1")>-1);
var moveEventHandler, zoomEventHandler;
var mapsVisible = true;

var map;
var _geocoder;
var exml;

var marker, markersArray=[];
var cluster, eventListeners=[], icon;
var listEventListeners=[];
copiaInformacion=new Array();

var arrayInfo=[];
var aSenseNull=[];
var winPrototype;

var mapCenter;
var mapZoom=6;
var numChecks=0; //indica nº de checks Estat del trànsit, per poder mostrar l'informació que s'ha guardat a l'array informacio
var numVueltasInfo=0; //numero de vegades que s'ha agafat un json amb la informació del trànsit.
var colorLlistat=true // per canviar de color les línies de Llistat d'incidències de circulació

/*Per no tornar a carregar els checks que ja ho estàn d'abans.*/
var obresCheck = false;
var accidentsCheck = false;
var congestionsCheck = false;
var climaCheck = false;
var portsCheck = false;
var radarsCheck = false;
var puntsnegresCheck = false;
var camaresCheck = false;
var eurorapCheck = false;
var eurotapCheck = false;

var finalCarga = true; //informa que ha finalitzat la petició dels json checked

/*array per no tornar a carregar la informació estàtica, només la primera vegada que es fa la petició. Cada posició guarda json de l'element (camara, eurorap, eurotap, punt_negre o radar)*/
arrayEstatica=new Array();
arrayEstatica["radar"]=null;
arrayEstatica["punt_negre"]=null;
arrayEstatica["eurorap"]=null;
arrayEstatica["eurotap"]=null;
//arrayEstatica["camara"]=null;

/*variables amb idioma*/
var lang="";
var textImposibleDireccio="";
var textLimitEspanya="";
var textSenseAdress="";
var porCiudad="";
var porZona="";
var tempsActual="";
var tempsDema="";
var tempsDemaPast="";
var obrirModul="";
var tancarModul="";
var llistatIncidenciesCirculacio="";
var senseInfo="";
var senseIncidencies="";
var localitzacions="";
var aquestaLocalitzacio="";
var text_Llegenda="";
var text_Obres="";
var text_Accidents="";
var text_Congestio="";
var text_Ports="";
var text_Radars="";
var text_Punts_negres="";
var text_Cameres="";
var text_EURORAP="";
var text_EUROTAP="";
var text_Trafic_Retingut="";
var text_Trafic_Interrumpido="";
var text_Trafic_Dens="";
var text_Trafic_Condicionat="";
var text_Risc_Alt="";
var text_Risc_Mitja_Alt="";
var text_Risc_Mitja="";
var text_Risc_Mitja_Baix="";
var text_Risc_Baix="";

/*Prototype window*/
function finestraIncidencies (){
	winPrototype= new Window({className: "cit", width:570, height:160, zIndex: 700, resizable: false,minimizable:false, closable:false, title: llistatIncidenciesCirculacio, draggable:false, showEffect:Element.show, hideEffect:Element.hide, recenterAuto:true, wiredDrag: false});
/*		var win = new Window({className: "cit", width:580, height:120, zIndex: 100, resizable: true, title: llistatIncidenciesCirculacio, draggable:true, showEffect:Element.show, hideEffect: Element.hide, recenterAuto:true, wiredDrag: true}) 
	win.getContent().innerHTML= "<div style='padding:10px'> Lorem ipsum dolor sit amet, consectetur .</div>";
//win.setStatusBar("Status bar info"); 
win.showCenter();*/

//	winPrototype.setConstraint(true, {left:5, right:15, top:5, bottom:10})
	//	winPrototype.setDestroyOnClose(); 
	//	winPrototype.showCenter();
//	winPrototype.toFront();
}

function visibilite(thingId,imgsrc) {
	var targetElement;
	targetElement = document.getElementById(thingId);
	targetImg = document.getElementById(imgsrc);

	if (targetElement.style.display == "none") {
		targetElement.style.display = "";
		targetImg.src="img/collapse.gif";
		targetImg.title=tancarModul;
	} else {
		targetElement.style.display = "none";
		targetImg.src="img/expand.gif";
		targetImg.title=obrirModul;
	}
	save_collapsed();
}

function save_order() {
	var order = Sortable.serialize('sort1');
	new Ajax.Updater(
		'ajax_status', 'savepref.aspx',
		{evalScripts: true, method:'post', postBody: order}
	);
	return false;
}


function save_collapsed() {
	// listado de elemntos que se pueden cerrar
	var contents = [
		'estatTraficInfo', 'infoAdicionalInfo', 'accessosDirectesInfo'];
	var collapsed = new Array();
	contents.each(function(content) {
		if ($(content).style.display == 'none')
			collapsed.push(content);
	});
	collapsed = 'collapsed='+collapsed.flatten();
	new Ajax.Updater(
		'ajax_status', 'savepref.aspx',
		{evalScripts: true, method:'post', postBody: collapsed}
	);
	return false;
}

function savePreviousView() {
	previousLatLng = map.getCenter();
	previousZoom = map.getZoom();
}

// calls setCenter safely, without breaking the previousView functionnality
function jumpTo(centerXY, zl){
	savePreviousView();
	map.setCenter(centerXY, zl);

	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
}


function miniMap(zone){
	jumpTo(minimapsLatLng[zone], minimapsZoom[zone]);
}

function switchDirectAccess(){
	new Effect.Fade((mapsVisible) ? 'miniMaps' : 'ciutats', {duration: 0.5, queue: {scope: 'controls'} });
	new Effect.Appear((mapsVisible) ? 'ciutats' : 'miniMaps', {duration: 0.5, queue: {position:'end', scope: 'controls'} });

	$('directAccessSwitch').innerHTML = (mapsVisible) ? porZona : porCiudad;
	$('directAccessSwitch1').innerHTML = (!mapsVisible) ? porCiudad : porZona;
	mapsVisible = !mapsVisible;
}

/**
*	Substitueix els caracters que tenim un equivalent sense accent
*	@return {String}
*/
function quitarAcentos(ret) {
	ret=ret.toUpperCase();
/*	ret=ret.replace(/À|Á|Ä|Â|Ã|Æ|Å/g,"A");
	ret=ret.replace(/È|É|Ë|Ê/g,"E");
	ret=ret.replace(/Ì|Í|Ï|Î/g,"I");
	ret=ret.replace(/Ò|Ó|Ö|Ô|Õ/g,"O");
	ret=ret.replace(/Ù|Ú|Ü|Û/g,"U");
	ret=ret.replace(/Ý|Y|¥|Y/g,"Y");
	ret=ret.replace(/ß|B/g,"B");
	ret=ret.replace(/Ø/g,"O");
	ret=ret.replace(/µ/g,"U");
	ret=ret.replace(/Ð/g,"D");
	ret=ret.replace(/Ñ/g,"N");
	ret=ret.replace(/Ç/g,"C");

*/	
	/*ret=ret.replace("Á","A");
	ret=ret.replace("À","A");
	ret=ret.replace("É","E");
	ret=ret.replace("È","E");
	ret=ret.replace("Í","I");
	ret=ret.replace("Ì","I");
	ret=ret.replace("Ó","O");
	ret=ret.replace("Ò","O");
	ret=ret.replace("Ú","U");
	ret=ret.replace("Ù","U");
	ret=ret.replace("Ñ","N");
	ret=ret.replace("Ç","C");
*/
	ret=ret.replace(",","");
	
	ret=ret.toLowerCase();

	return ret;
}

function alert1(x) { alert(acentos(x)) }


function acentos(x) {
	// version 040623
	// Spanish - Español
	// Portuguese - Portugués - Português
	// Italian - Italiano
	// French - Francés - Français
	// Also accepts and converts single and double quotation marks, square and angle brackets
	// and miscelaneous symbols.
	// Also accepts and converts html entities for all the above.
//	if (navigator.appVersion.toLowerCase().indexOf("windows") != -1) {return x}
	x = x.replace(/¡/g,"\xA1");	x = x.replace(/&iexcl;/g,"\xA1")
	x = x.replace(/¿/g,"\xBF");	x = x.replace(/&iquest;/g,"\xBF")
	x = x.replace(/À/g,"\xC0");	x = x.replace(/&Agrave;/g,"\xC0")
	x = x.replace(/à/g,"\xE0");	x = x.replace(/&agrave;/g,"\xE0")
	x = x.replace(/Á/g,"\xC1");	x = x.replace(/&Aacute;/g,"\xC1")
	x = x.replace(/á/g,"\xE1");	x = x.replace(/&aacute;/g,"\xE1")
	x = x.replace(/Â/g,"\xC2");	x = x.replace(/&Acirc;/g,"\xC2")
	x = x.replace(/â/g,"\xE2");	x = x.replace(/&acirc;/g,"\xE2")
	x = x.replace(/Ã/g,"\xC3");	x = x.replace(/&Atilde;/g,"\xC3")
	x = x.replace(/ã/g,"\xE3");	x = x.replace(/&atilde;/g,"\xE3")
	x = x.replace(/Ä/g,"\xC4");	x = x.replace(/&Auml;/g,"\xC4")
	x = x.replace(/ä/g,"\xE4");	x = x.replace(/&auml;/g,"\xE4")
	x = x.replace(/Å/g,"\xC5");	x = x.replace(/&Aring;/g,"\xC5")
	x = x.replace(/å/g,"\xE5");	x = x.replace(/&aring;/g,"\xE5")
	x = x.replace(/Æ/g,"\xC6");	x = x.replace(/&AElig;/g,"\xC6")
	x = x.replace(/æ/g,"\xE6");	x = x.replace(/&aelig;/g,"\xE6")
	x = x.replace(/Ç/g,"\xC7");	x = x.replace(/&Ccedil;/g,"\xC7")
	x = x.replace(/ç/g,"\xE7");	x = x.replace(/&ccedil;/g,"\xE7")
	x = x.replace(/È/g,"\xC8");	x = x.replace(/&Egrave;/g,"\xC8")
	x = x.replace(/è/g,"\xE8");	x = x.replace(/&egrave;/g,"\xE8")
	x = x.replace(/É/g,"\xC9");	x = x.replace(/&Eacute;/g,"\xC9")
	x = x.replace(/é/g,"\xE9");	x = x.replace(/&eacute;/g,"\xE9")
	x = x.replace(/Ê/g,"\xCA");	x = x.replace(/&Ecirc;/g,"\xCA")
	x = x.replace(/ê/g,"\xEA");	x = x.replace(/&ecirc;/g,"\xEA")
	x = x.replace(/Ë/g,"\xCB");	x = x.replace(/&Euml;/g,"\xCB")
	x = x.replace(/ë/g,"\xEB");	x = x.replace(/&euml;/g,"\xEB")
	x = x.replace(/Ì/g,"\xCC");	x = x.replace(/&Igrave;/g,"\xCC")
	x = x.replace(/ì/g,"\xEC");	x = x.replace(/&igrave;/g,"\xEC")
	x = x.replace(/Í/g,"\xCD");	x = x.replace(/&Iacute;/g,"\xCD")
	x = x.replace(/í/g,"\xED");	x = x.replace(/&iacute;/g,"\xED")
	x = x.replace(/Î/g,"\xCE");	x = x.replace(/&Icirc;/g,"\xCE")
	x = x.replace(/î/g,"\xEE");	x = x.replace(/&icirc;/g,"\xEE")
	x = x.replace(/Ï/g,"\xCF");	x = x.replace(/&Iuml;/g,"\xCF")
	x = x.replace(/ï/g,"\xEF");	x = x.replace(/&iuml;/g,"\xEF")
	x = x.replace(/Ñ/g,"\xD1");	x = x.replace(/&Ntilde;/g,"\xD1")
	x = x.replace(/ñ/g,"\xF1");	x = x.replace(/&ntilde;/g,"\xF1")
	x = x.replace(/Ò/g,"\xD2");	x = x.replace(/&Ograve;/g,"\xD2")
	x = x.replace(/ò/g,"\xF2");	x = x.replace(/&ograve;/g,"\xF2")
	x = x.replace(/Ó/g,"\xD3");	x = x.replace(/&Oacute;/g,"\xD3")
	x = x.replace(/ó/g,"\xF3");	x = x.replace(/&oacute;/g,"\xF3")
	x = x.replace(/Ô/g,"\xD4");	x = x.replace(/&Ocirc;/g,"\xD4")
	x = x.replace(/ô/g,"\xF4");	x = x.replace(/&ocirc;/g,"\xF4")
	x = x.replace(/Õ/g,"\xD5");	x = x.replace(/&Otilde;/g,"\xD5")
	x = x.replace(/õ/g,"\xF5");	x = x.replace(/&otilde;/g,"\xF5")
	x = x.replace(/Ö/g,"\xD6");	x = x.replace(/&Ouml;/g,"\xD6")
	x = x.replace(/ö/g,"\xF6");	x = x.replace(/&ouml;/g,"\xF6")
	x = x.replace(/Ø/g,"\xD8");	x = x.replace(/&Oslash;/g,"\xD8")
	x = x.replace(/ø/g,"\xF8");	x = x.replace(/&oslash;/g,"\xF8")
	x = x.replace(/Ù/g,"\xD9");	x = x.replace(/&Ugrave;/g,"\xD9")
	x = x.replace(/ù/g,"\xF9");	x = x.replace(/&ugrave;/g,"\xF9")
	x = x.replace(/Ú/g,"\xDA");	x = x.replace(/&Uacute;/g,"\xDA")
	x = x.replace(/ú/g,"\xFA");	x = x.replace(/&uacute;/g,"\xFA")
	x = x.replace(/Û/g,"\xDB");	x = x.replace(/&Ucirc;/g,"\xDB")
	x = x.replace(/û/g,"\xFB");	x = x.replace(/&ucirc;/g,"\xFB")
	x = x.replace(/Ü/g,"\xDC");	x = x.replace(/&Uuml;/g,"\xDC")
	x = x.replace(/ü/g,"\xFC");	x = x.replace(/&uuml;/g,"\xFC")
	
	x = x.replace(/\"/g,"\x22")
	x = x.replace(/\'/g,"\x27")
	x = x.replace(/\</g,"\x3C")
	x = x.replace(/\>/g,"\x3E")
	x = x.replace(/\[/g,"\x5B")
	x = x.replace(/\]/g,"\x5D")

	x = x.replace(/¢/g,"\xA2");	x = x.replace(/&cent;/g,"\xA2") 
	x = x.replace(/£/g,"\xA3");	x = x.replace(/&pound;/g,"\xA3")
	x = x.replace(/€/g,"\u20AC");	x = x.replace(/&euro;/g,"\u20AC") 
	x = x.replace(/©/g,"\xA9");	x = x.replace(/&copy;/g,"\xA9") 
	x = x.replace(/®/g,"\xAE");	x = x.replace(/&reg;/g,"\xAE") 
	x = x.replace(/ª/g,"\xAA");	x = x.replace(/&ordf;/g,"\xAA") 
	x = x.replace(/º/g,"\xBA");	x = x.replace(/&ordm;/g,"\xBA") 
	x = x.replace(/°/g,"\xB0");	x = x.replace(/&deg;/g,"\xB0") 
	x = x.replace(/±/g,"\xB1");	x = x.replace(/&plusmn;/g,"\xB1")
	x = x.replace(/×/g,"\xD7");	x = x.replace(/&times;/g,"\xD7") 
	
		
	return x
}


function showAddress() {
	var address = document.getElementById("buscador_text").value;
	if (address.length == 0)alert1(textSenseAdress);
	else _geocoder.getLocations(address, onresponse);
}

function onresponse(response) {
	if (!response || response.Status.code != G_GEO_SUCCESS)	alert1(textImposibleDireccio +" "+ response.name);
	else {
		place = response.Placemark[0];
		point = new GLatLng(place.Point.coordinates[1],
		place.Point.coordinates[0]);
		cc = place.AddressDetails.Country.CountryNameCode;
		if (cc != "ES")	alert1(textLimitEspanya);
		else {
			var accuracy = place.AddressDetails.Accuracy;
			var zoom;
			if (accuracy == 1)
			zoom = 6;
			else if (accuracy == 2)
			zoom = 7;
			else if (accuracy == 3)
			zoom = 8;
			else if (accuracy == 4 || accuracy == 5)
			zoom = 12;
			else if (accuracy == 6 || accuracy == 7)
			zoom = 16;
			else
			zoom = 17;
			map.setCenter(point, zoom);
		}
	}
}

function horaRefrescado () {
	var now = new Date();

	var TheDate = now.getDate() + "/" +(now.getMonth()+ 1) +"/"+  now.getFullYear();
	var hours = now.getHours();
	var minutes = now.getMinutes();
	var seconds = now.getSeconds()
	var timeValue = "" + ((hours >12) ? hours -12 :hours)
	timeValue += ((minutes < 10) ? ":0" : ":") + minutes
	timeValue += ((seconds < 10) ? ":0" : ":") + seconds
	timeValue += (hours >= 12) ? " PM" : " AM"
	document.getElementById("actualizado").innerHTML= TheDate+ "(" +timeValue+")";
}

/*Refresca los archivos json*/
function refrescar(){

	//GLog.write("numVueltasInfo inici "+numVueltasInfo);

	/*if(document.getElementById("obres").checked)numVueltasInfo--;
	if(document.getElementById("accidents").checked)numVueltasInfo--;
	if(document.getElementById("congestio").checked)numVueltasInfo--;
	
	if(numVueltasInfo<0)*/

	numVueltasInfo=0;

	obresCheck = false;
	accidentsCheck = false;
	congestionsCheck = false;
	climaCheck = false;
	portsCheck = false;
	camaresCheck = false;

//GLog.write("numVueltasInfo "+numVueltasInfo);
	
	copiaInformacion=new Array();
	horaRefrescado();
	checkboxClickHandler();
}

var slider1=new accordion.slider("slider1");
/*Abre prototype window con descargas para GPS*/
function descargaGPS(){
	winPrototypeDesc= new Window({className: "cit", width:634, height:470, zIndex: 750,closable:true, maximizable:false,minimizable:false, resizable: false, title: descarregaInformacio, draggable:false, showEffect:Element.show, hideEffect:Element.hide, recenterAuto:true, wiredDrag: false});
	winPrototypeDesc.setHTMLContent('<div id="accordion">'
									+'<dl class="accordion" id="slider">'
										+'<dt><div class="dt_text">'+text_Radars+'</div></dt>'
										+'<dd class="dd_modificat">'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/radar_asc.zip" target="_blank">'+text_Descarregar+'</a> (.ASC) </div>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/navigon.gif"/>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/destinator.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-top: 15px;padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/radar_csv.zip" target="_blank" >'+text_Descarregar+'</a> (.CSV) </div>'
												+'<img style="float: left;padding-left: 15px;" src="img/garmin.gif"/>'
												+'<img style="padding-top: 8px;padding-left: 15px;" src="img/mio.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/radar_gpx.zip" target="_blank" >'+text_Descarregar+'</a> (.GPX) </div>'
												+'<img style="padding-left: 15px;" src="img/garmin.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/radar_kml.zip" target="_blank" >'+text_Descarregar+'</a> (.KML) </div>'
												+'<img style="float:left; padding-top: 10px;padding-left: 15px;" src="img/mio.gif"/>'
												+'<img style="float:left;padding-left: 15px;padding-top: 5px;" src="img/google_earth.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-left: 15px;" src="img/igo8.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 5px;"><a href="POIS/radar_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.OV2) </div>'
												+'<img style="padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
										+'</dd>'
										+'<dt><div class="dt_text">'+text_Punts_negres+'</div></dt>'
										+'<dd class="dd_modificat">'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/pn_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.ASC) </div>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/navigon.gif"/>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/destinator.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-top: 15px;padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/pn_csv.zip" target="_blank" >'+text_Descarregar+'</a> (.CSV) </div>'
												+'<img style="float: left;padding-left: 15px;" src="img/garmin.gif"/>'
												+'<img style="padding-top: 8px;padding-left: 15px;" src="img/mio.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/pn_gpx.zip" target="_blank" >'+text_Descarregar+'</a> (.GPX) </div>'
												+'<img style="padding-left: 15px;" src="img/garmin.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/pn_kml.zip" target="_blank" >'+text_Descarregar+'</a> (.KML) </div>'
												+'<img style="float:left; padding-top: 10px;padding-left: 15px;" src="img/mio.gif"/>'
												+'<img style="float:left;padding-left: 15px;padding-top: 5px;" src="img/google_earth.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-left: 15px;" src="img/igo8.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 5px;"><a href="POIS/pn_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.OV2) </div>'
												+'<img style="padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
										+'</dd>'
										+'<dt><div class="dt_text">'+text_EURORAP+'</div></dt>'
										+'<dd class="dd_modificat">'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/eurorap_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.ASC) </div>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/navigon.gif"/>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/destinator.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-top: 15px;padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/eurorap_csv.zip" target="_blank" >'+text_Descarregar+'</a> (.CSV) </div>'
												+'<img style="float: left;padding-left: 15px;" src="img/garmin.gif"/>'
												+'<img style="padding-top: 8px;padding-left: 15px;" src="img/mio.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/eurorap_gpx.zip" target="_blank" >'+text_Descarregar+'</a> (.GPX) </div>'
												+'<img style="padding-left: 15px;" src="img/garmin.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/eurorap_kml.zip" target="_blank" >'+text_Descarregar+'</a> (.KML) </div>'
												+'<img style="float:left; padding-top: 10px;padding-left: 15px;" src="img/mio.gif"/>'
												+'<img style="float:left;padding-left: 15px;padding-top: 5px;" src="img/google_earth.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-left: 15px;" src="img/igo8.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 5px;"><a href="POIS/eurorap_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.OV2) </div>'
												+'<img style="padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
										+'</dd>'
										+'<dt><div class="dt_text">'+text_EUROTAP+'</div></dt>'
										+'<dd class="dd_modificat">'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/eurotap_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.ASC) </div>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/navigon.gif"/>'
												+'<img style="float:left; padding-top: 15px;padding-left: 15px;" src="img/destinator.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-top: 15px;padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/eurotap_csv.zip" target="_blank" >'+text_Descarregar+'</a> (.CSV) </div>'
												+'<img style="float: left;padding-left: 15px;" src="img/garmin.gif"/>'
												+'<img style="padding-top: 8px;padding-left: 15px;" src="img/mio.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 10px;"><a href="POIS/eurotap_gpx.zip" target="_blank" >'+text_Descarregar+'</a> (.GPX) </div>'
												+'<img style="padding-left: 15px;" src="img/garmin.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 15px;"><a href="POIS/eurotap_kml.zip" target="_blank" >'+text_Descarregar+'</a> (.KML) </div>'
												+'<img style="float:left; padding-top: 10px;padding-left: 15px;" src="img/mio.gif"/>'
												+'<img style="float:left;padding-left: 15px;padding-top: 5px;" src="img/google_earth.gif"/>'
												+'<img style="float:left;padding-left: 15px;" src="img/igo.gif"/>'
												+'<img style="padding-left: 15px;" src="img/igo8.gif"/>'
											+'</span>'
											+'<span><div style="float: left; padding-top: 5px;"><a href="POIS/eurotap_asc.zip" target="_blank" >'+text_Descarregar+'</a> (.OV2) </div>'
												+'<img style="padding-left: 15px;" src="img/tomtom.gif"/>'
											+'</span>'
										+'</dd>'
									+'</dl>'
								+'</div>');

	winPrototypeDesc.showCenter();
	winPrototypeDesc.toFront();
	
	slider1.init("slider",0,"open");
}


function obrirFormulari(){
	winPrototypeForm= new Window({className: "cit", width:404, height:244, zIndex: 750,closable:true, maximizable:false,minimizable:false, resizable: false, title: titleFormulari, draggable:false, showEffect:Element.show, hideEffect:Element.hide, recenterAuto:true, wiredDrag: false});
	winPrototypeForm.setHTMLContent('<form name="enviarForm" action="enviarFormulari.php" target="iframeEnviarFormulario" method="post">'
										+'<div style="padding-top:10px;padding-left:10px;">'
											+'<div style="float:left;width:70px;font: Verdana 11px #666;">'+nomFormulari+' </div><div><input id="formNom" name="formNom" value="" type="text" size="30"/></div>'
											+'<br/>'
											+'<div style="float:left;width:70px">'+emailFormulari+' </div><div><input id="formEmail" name="formEmail" size="30" type="text" value=""/></div>'
											+'<br/>'
											+'<div style="float:left;width:70px;">'+sugFormulari+' </div><div><textarea rows="4" cols="40" id="formSug" name="formSug"></textarea></div>'
											+'<br/>'
											+'<div style="Arial bold 11px #666;height:40px;position:relative;">'
												+'<div onclick="javascript:enviarFormulari(\'suggeriment\');" class="handle tituloButton divRefrescar" style="position:absolute; top:0px; left:10px;width:94px;text-align:center;cursor:pointer;"><span>'+enviar+'</span></div>'
												+'<div onclick="javascript:tancarFormulari();" class="handle tituloButton divRefrescar" style="position:absolute; top:0px; left:104px;width:94px;text-align:center;cursor:pointer;"><span>'+textCerrar+'</span></div>'
											+'</div>'
											+'<div style="width:310px;padding:6px 5px 0 5px;"><div id="textInformatiu" style="background-color:#DFDFDF;padding:3px;" >'+infoFormulari+'</div></div>'
										+'</div>'
									+'</form>');
	winPrototypeForm.showCenter();
	winPrototypeForm.toFront();
}

function obrirFormulariEnvioAmigo(){
	winPrototypeForm= new Window({className: "cit", width:404, height:254, zIndex: 750,closable:true, maximizable:false,minimizable:false, resizable: false, title: titleFormulariAmic, draggable:false, showEffect:Element.show, hideEffect:Element.hide, recenterAuto:true, wiredDrag: false});
	winPrototypeForm.setHTMLContent('<form name="enviarFormAmigo" action="enviarFormulari.php" target="iframeEnviarFormulario" method="post">'
										+'<div style="padding-top:10px;padding-left:10px;">'
											+'<div style="float:left;width:70px;font: Verdana 11px #666;">'+deFormulari+' </div><div><input id="formDe" name="formDe" value="" type="text" size="30"/></div>'
											+'<br/>'
											+'<div style="float:left;width:70px;font: Verdana 11px #666;">'+aFormulari+' </div><div><input id="formA" name="formA" value="" type="text" size="30"/></div>'
											+'<br/>'
											+'<div style="float:left;width:70px">'+emailFormulari+' </div><div><input id="formEmail" name="formEmail" size="30" type="text" value=""/></div>'
											+'<br/>'
											+'<div style="float:left;width:70px;">'+comentFormulari+' </div><div><textarea rows="3" cols="40" id="formComent" name="formComent"></textarea></div>'
											+'<br/>'
											+'<div style="Arial bold 11px #666;height:40px;position:relative;">'
												+'<div onclick="javascript:enviarFormulari(\'amic\');" class="handle tituloButton divRefrescar" style="position:absolute; top:0px; left:10px;width:94px;text-align:center;cursor:pointer;"><span>'+enviar+'</span></div>'
												+'<div onclick="javascript:tancarFormulari();" class="handle tituloButton divRefrescar" style="position:absolute; top:0px; left:104px;width:94px;text-align:center;cursor:pointer;"><span>'+textCerrar+'</span></div>'
											+'</div>'
											+'<div style="width:310px;padding:6px 5px 0 5px;"><div id="textInformatiu" style="background-color:#DFDFDF;padding:3px;" >'+infoFormulariAmic+'</div></div>'
										+'</div>'
									+'</form>');
	winPrototypeForm.showCenter();
	winPrototypeForm.toFront();
}

function tancarFormulari(){
	winPrototypeForm.setHTMLContent('')
	winPrototypeForm.close();
}

function enviarFormulari(opcio){

	if(opcio=="suggeriment"){
		var formNom=document.getElementById("formNom").value;
		var formSug=document.getElementById("formSug").value;
		if(formNom==""){
			alert(informar_nom);
			return false;
		}
		if(formSug==""){
			alert(informar_suggeriment);
			return false;
		}
	}else{
		var formDe=document.getElementById("formDe").value;
		var formA=document.getElementById("formA").value;
		if(formDe==""){
			alert(informar_de);
			return false;
		}
		if(formA==""){
			alert(informar_a);
			return false;
		}
	}

	var formEmail=document.getElementById("formEmail").value;
	if(formEmail==""){
		alert(informar_email);
		return false;
	}
	if(!validarMail(document.getElementById("formEmail").value)){
		alert(email_incorrecte);
		return false;
	}

	if(opcio=="suggeriment"){
		document.enviarForm.action = urlEnviarFormulari+"?opcio="+opcio+"&lang="+lang;
		document.enviarForm.submit();
	}else{
		parent.document.enviarFormAmigo.action = urlEnviarFormulari+"?opcio="+opcio+"&lang="+lang;
		parent.document.enviarFormAmigo.submit();
	}
//	winPrototypeForm.close();

}

/*Validar email*/
function validarMail(emailStr){
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailStr))return true;
	else   return false;
}

// abans: activarEstat
function checkboxClickHandler(){

	var canvi=false;

	if(finalCarga){

		if(!canvi && (obresCheck && !document.getElementById("obres").checked))canvi=true;
		if(!canvi && (accidentsCheck && !document.getElementById("accidents").checked))canvi=true;
		if(!canvi && (congestionsCheck && !document.getElementById("congestio").checked))canvi=true;
		if(!canvi && (climaCheck && !document.getElementById("climatologia").checked))canvi=true;
		if(!canvi && (portsCheck && !document.getElementById("ports").checked))canvi=true;
		if(!canvi && (camaresCheck && !document.getElementById("camaras").checked))canvi=true;
		if(!canvi && (eurorapCheck && !document.getElementById("eurorap").checked))canvi=true;
		if(!canvi && (eurotapCheck && !document.getElementById("eurotap").checked))canvi=true;
		if(!canvi && (puntsnegresCheck && !document.getElementById("punts_negres").checked))canvi=true;
		if(!canvi && (radarsCheck && !document.getElementById("radars").checked))canvi=true;

		if(canvi){
			cluster.removeMarkers();

			numVueltasInfo=0;

			obresCheck = false;
			accidentsCheck = false;
			congestionsCheck = false;
			climaCheck = false;
			portsCheck = false;
			camaresCheck = false;
			eurorapCheck = false;
			eurotapCheck = false;
			puntsnegresCheck = false;
			radarsCheck = false;
			copiaInformacion=new Array();
		}

		finalCarga = false;
		window.setTimeout("refrescar()",segundos) 
		document.getElementById("inicioInfo").style.display="block";
//		document.getElementById("cargaMapa").style.visibility="visible";
//		document.getElementById("cargaTexto").style.visibility="visible";

		var top=findPosY(document.getElementById("inicioInfo"));
		var left=findPosX(document.getElementById("inicioInfo"));
	//	document.getElementById("cargaMapa").style.top=top+"px";
	//	document.getElementById("cargaMapa").style.left=left+"px";

	//	document.getElementById("cargaTexto").className="cargandoMapaText";
	//	document.getElementById("cargaTexto").style.top=top+"px";
	//	document.getElementById("cargaTexto").style.left=left+"px";

		check =document.formulariCit.estatT;
		var x=0;

		map.clearOverlays();
		markersArray=[];
		for(i=eventListeners.length-1; i>=0; i--){
			GEvent.removeListener(eventListeners[i]);
		}
		eventListeners=[];
		
		//document.getElementById("markerList").innerHTML = "<h1>"+senseIncidencies+"<\/h1>";
		winPrototype.setHTMLContent(" <div id='markerList'><h1 id='sense' style='padding-left: 20px;'>"+senseIncidencies+"<\/h1><\/div>");//sense informació al prototype
		x=0;
		numChecks=numeroChecked(check);

		while (x <check.length) {
			if(check[x].checked){
				if(check[x].id=="obres"){
					cadenaIncidencies="";
					if(!obresCheck || numVueltasInfo==0){
						obresCheck = true;
						//peticio = new Objecte();
						sendRequest(urlProxy+"?lang="+lang+"&json=Obres.json");//+"&cache="+new Date());//sendRequest(urlProxy+"?json=Obres.json");
						//peticio.sendRequest(urlProxy+"?kml=obras.kml");
					}
				}
				if(check[x].id=="accidents"){
					if(!accidentsCheck || numVueltasInfo==0){
						accidentsCheck = true;
						sendRequest(urlProxy+"?lang="+lang+"&json=Accidents.json");
					}
				}
				if(check[x].id=="congestio"){
					if(!congestionsCheck || numVueltasInfo==0){
						congestionsCheck = true;
						sendRequest(urlProxy+"?lang="+lang+"&json=Congestio.json");
					}
				}

				if(check[x].id=="climatologia"){
					if(!climaCheck || numVueltasInfo==0){
						climaCheck = true;
						sendRequest(urlProxy+"?lang="+lang+"&json=Clima.json");
					}
				}

				if(check[x].id=="ports"){
					if(!portsCheck || numVueltasInfo==0){
						portsCheck = true;
						sendRequest(urlProxy+"?lang="+lang+"&json=Ports.json");
					}
				}

				//info estàtica
				if(check[x].id=="radars"){
					if(!radarsCheck || numVueltasInfo==0){
						radarsCheck = true;
						if(arrayEstatica["radar"]==null){
							sendRequest(urlProxy+"?lang="+lang+"&json=radar/Radar.json");
						}else tractarDades(arrayEstatica["radar"]);
					}
					/*if(!radarsCheck)radarsCheck = true;
					if(arrayEstatica["radar"]==null){
						sendRequest(urlProxy+"?json=radar/Radar.json");
					}else tractarDades(arrayEstatica["radar"]);*/
				}
				if(check[x].id=="punts_negres"){
					if(!puntsnegresCheck || numVueltasInfo==0){
						puntsnegresCheck = true;
						if(arrayEstatica["punt_negre"]==null){
							sendRequest(urlProxy+"?lang="+lang+"&json=blackspot/PuntNegre.json");
						}else tractarDades(arrayEstatica["punt_negre"]);
					}
				}
				if(check[x].id=="eurorap"){
					if(!eurorapCheck || numVueltasInfo==0){
						eurorapCheck = true;
						if(arrayEstatica["eurorap"]==null){
							sendRequest(urlProxy+"?lang="+lang+"&json=eurorap/Eurorap.json");
						}else tractarDades(arrayEstatica["eurorap"]);
					}
				}
				if(check[x].id=="eurotap"){
					if(!eurotapCheck || numVueltasInfo==0){
						eurotapCheck = true;
						if(arrayEstatica["eurotap"]==null){
							sendRequest(urlProxy+"?lang="+lang+"&json=eurotap/Eurotap.json");
						}else tractarDades(arrayEstatica["eurotap"]);
					}
				}
				if(check[x].id=="camaras"){
					if(!camaresCheck || numVueltasInfo==0){
						camaresCheck = true;
					//	if(arrayEstatica["camara"]==null){
						sendRequest(urlProxy+"?lang="+lang+"&json=camara/Camara.json");
						//}else tractarDades(arrayEstatica["camara"]);
					}
				}
			}
			x++;
		}

		if(numChecks==0){
			finalCarga = true;//no s'ha d'esperar a les peticions json.
			document.getElementById("inicioInfo").style.display="none";
//			document.getElementById("cargaMapa").style.visibility="hidden";
//			document.getElementById("cargaTexto").style.visibility="hidden";
		}

		//mostra la informació al prototype
		if(window.ActiveXObject) var top=findPosY(document.getElementById("formularioMapa"))+540;
		else var top=findPosY(document.getElementById("formularioMapa"))+530;

		//var left=findPosX(document.getElementById("contenido"));
		var left=findPosX(document.getElementById("doc"))+5;

		winPrototype.setLocation(top,left);//setLocation(top, left)
		winPrototype.show();

	}
}

//retorna el nº de checkbox marcats
function numeroChecked(objectCheck){
	var numMarcats=0;
	for (var x=0; x <objectCheck.length; x++) {
		if(objectCheck[x].checked) numMarcats=numMarcats+1;
	}
	return numMarcats;
}

// associem funcio per quan facin resize ajustar mapa
window.onresize=windowResize;
function windowResize() {
	if(winPrototype!=null){
		var top=findPosY(document.getElementById("ft"))-190;
		var left=findPosX(document.getElementById("doc"));

		winPrototype.setLocation(top,left);//setLocation(top, left)
		winPrototype.show();

		top=findPosY(document.getElementById("map_canvas"));
		left=findPosX(document.getElementById("map_canvas"));

	/*	document.getElementById("cargaMapa").style.top=top;
		document.getElementById("cargaMapa").style.left=left;

		document.getElementById("cargaTexto").style.top=top;
		document.getElementById("cargaTexto").style.left=left;*/
	}
}


// Calcula la posicion X absoluta del objecto
//http://www.quirksmode.org/js/findpos.html
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}


// Calcula la posicion Y absoluta del objecto
function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

// afegeix un nou element a la llista d'incidencies.
// abans: mostrarIncidenciesPrototype
//function addIncidenciaToList(posElement, marker, list, posMarker){
function addIncidenciaToList(marker, list, posMarker){
	//Caldria verificar si el marker està dins el viewport, per 
	//afegir-lo al llistat d'incidències o no.
	
	//si estan molt al borde no surten (incrementem una mica el bound del map?)
	var bounds = map.getBounds();
	var bounds1 =  new GLatLng(marker.getPoint().y, marker.getPoint().x);

//	if (posElement<copiaInformacion.length) {
	if (posMarker<copiaInformacion.length) {
		//verificació de que l'element a dibuixar es troba dins del bound del mapa.
		if(bounds.contains(bounds1)){
			//var myInfo = copiaInformacion[posElement];
			var myInfo = copiaInformacion[posMarker];

			if (typeof(myInfo)!= "undefined"){
				var textIncidencies=myInfo.llistaIncidencies;
				var infoPunt=myInfo.infoPunt;

				//L'informació estàtica no te llistaIncidencies i no es mostre al llistat d'incidencies de circulació.
				if (textIncidencies!= "undefined"){
					var elementDivIncidencia = document.createElement("DIV");
					elementDivIncidencia.style.cursor="pointer";
					elementDivIncidencia.innerHTML = textIncidencies;

					//per pintar les files de diferents colors
					(colorLlistat)? elementDivIncidencia.style.background='#FBF5C9': elementDivIncidencia.style.background='white';
					colorLlistat=!colorLlistat;

					var ttmover = GEvent.callbackArgs(null,tooltipMouseover,elementDivIncidencia);
					var ttmout = GEvent.callbackArgs(null,tooltipMouseout,elementDivIncidencia);
					var mclick = GEvent.callback(marker,llistatIncidenciesClick,infoPunt,posMarker);
					eventListeners.push(GEvent.addDomListener(elementDivIncidencia,'mouseover',ttmover));
					eventListeners.push(GEvent.addDomListener(elementDivIncidencia,'mouseout',ttmout));
					eventListeners.push(GEvent.addDomListener(elementDivIncidencia,'click',mclick));

					list.appendChild(elementDivIncidencia);
				}
			}
		}
	}
}

/*function cargaIncidenciasMarker(posElement){
	arrayResposta = new Array();
	arrayResposta[0]="";
	arrayResposta[1]="";

	var bounds = map.getBounds();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	
	var cadenaIncidencies="";
	if (posElement<copiaInformacion.length) {
		var myInfo = copiaInformacion[posElement];
		var nelng = parseFloat(ne.lng()) > parseFloat(myInfo.longitude);
		var swlng = parseFloat(sw.lng()) < parseFloat(myInfo.longitude);
		var nelat = parseFloat(ne.lat()) > parseFloat(myInfo.latitude);
		var swlat = parseFloat(sw.lat()) < parseFloat(myInfo.latitude);

		if ((nelng) && (swlng) && (nelat) && (swlat)){
			//var aux= parseInt(posElement)%(parseInt(2))==0;//per pintar les files de diferents colors
			title=myInfo.llistaIncidencies;

			cadenaIncidencies=cadenaIncidencies+title;
		}
	}

	if(cadenaIncidencies==""){
		cadenaIncidencies=" <h1 style='padding-left:20px;'>"+senseIncidencies+"<\/h1> ";
		arrayResposta[0]="";
	}else arrayResposta[0]="si";
	
	arrayResposta[1]=cadenaIncidencies;

	return arrayResposta;
}*/

//agafa la informació en format JSON i l'afegeix a l'array "copiaInformacion" on hi quedaran les dades de tots els tipus.
// abans: funcInfo
function tractarDades(data){
	try{
		//alert("tractarDades inici ");
		var d=new Date();
		if(data!=null){
			elements=data.elements;
			
			//per si tenim més endavant tenim més d'un element
			for (var iE=0; iE<elements.length; iE++) {
				if(elements[iE].informacio.length>0){
					var d2=new Date();
					/*alert(elements[iE].informacio.toString());
					alert(elements[iE].informacio.toString().substring(0,1));
					alert(elements[iE].informacio.toString().length);
					alert(elements[iE].informacio.toString().substring(1,elements[iE].informacio.toString().length));*/

					if(typeof(elements[iE].informacio[0])== "undefined"){
						elements[iE].informacio=elements[iE].informacio.reverse();
						elements[iE].informacio.pop();
					}

					copiaInformacion=copiaInformacion.concat(elements[iE].informacio);
					var d3=new Date();
					// busquem el tipus de dades dels elements. Els que no són estatics caldria revisar els XSL perque no afegeixin elements buits(per afegir una ',' de més) però com que només ho necessitem pels estàtics no ens afecta.
					var trobat=false; 
					var i=0;
					var elemActual="";
					while (!trobat && i<elements[iE].informacio.length) {
						if (typeof(elements[iE].informacio[elements[iE].informacio.length-1])!="undefined") {
							elemActual=elements[iE].informacio[i].tipusElement;// ho mirem de l'ultim perque el primer venia malament: ja corregit a l'xsl
							trobat=true;
						} else i++;
					}
//					GLog.write("elemActual. :"+elemActual);
					// guardem la informació estàtica de radars, punts negres, eurorap, eurotap i càmeres.
					if (typeof(elemActual)!=='undefined' && arrayEstatica[elemActual]==null){
//						if (elemActual==='radar' || elemActual=== "punt_negre" || elemActual=== "eurorap" || elemActual=== "eurotap" || elemActual=== "camara"){
						if (elemActual==='radar' || elemActual=== "punt_negre" || elemActual=== "eurorap" || elemActual=== "eurotap"){
							arrayEstatica[elemActual]=data;
						}
					}
				}
			}			
		}else{
			// sense dades
			document.getElementById("inicioInfo").style.display="none";
//			document.getElementById("cargaMapa").style.visibility="hidden";
//			document.getElementById("cargaTexto").style.visibility="hidden";
		}
		numVueltasInfo=numVueltasInfo+1;

		var d4=new Date();
		if (debugOn) GLog.write("tractarDades. ("+elemActual+") "+numVueltasInfo+" / "+numChecks );
		if(numChecks==numVueltasInfo) addMarkersToMap();//ja tenim tots els fitxer carregats

		//if (debugOn) GLog.write("tractarDades : "+ (new Date()-d)+"\n concat: "+(d3-d2)+"\n addMarkersToMap: "+(new Date()-d4)+"\ncopiaInformacion.length: "+copiaInformacion.length);
	}
	catch (e){
		if (debugOn) GLog.write("Error a tractarDades()\n"+e.message);
		numVueltasInfo=numVueltasInfo+1;	

		if(numChecks==numVueltasInfo) addMarkersToMap();//ja tenim tots els fitxer carregats

	}
	
}

// Ja tenim un sol array amb tota la informació. Ara aquest mètode defineix els markers i el cluster.
// abans: unioInformacio
function addMarkersToMap(){
	var d=new Date();
	
	// eliminem els events associats al moveend del mapa que emplenem la llista d'incidencies).
	for(i=listEventListeners.length-1; i>=0; i--){
		GEvent.removeListener(listEventListeners[i]);
	}
	listEventListeners=[];

	if(copiaInformacion.length>0){
		winPrototype.getContent().innerHTML ="<div id='markerList'></div>";
		var list = document.getElementById('markerList');

		// definim els markers
		//var j=1;
		var senseNull=0;//evita les posicions a null de copiaInformacio (per markersArray)

		
		for (var i=0; i<copiaInformacion.length; i++) {
			var myInfo = copiaInformacion[i];
			if(myInfo!=null && typeof(myInfo)!= "undefined"){
				aSenseNull[senseNull]=myInfo;//guardem un array sense cap null (per si el json retorna algun element a null)
			//if(copiaInformacion[i]!=null ){			
				var newIcon=new GIcon(icon, myInfo.icon);

				var title=myInfo.infoPunt;
				var infoTooltip=myInfo.infoAgrupada;

				arrayInfo[senseNull]=myInfo.infoAgrupada;// guardem array amb la info per poder mostrar-la a la fitxa del cluster. TODO: fa falta duplicar-la?
				//var marker=newMarker(new GLatLng(myInfo.latitude,myInfo.longitude), title, infoTooltip, newIcon, j, myInfo.tipusElement);
				var marker=newMarker(new GLatLng(myInfo.latitude,myInfo.longitude), title, newIcon);
				markersArray.push(marker);

				// llista incidencies
				if(myInfo.tipusElement=="congestio" || myInfo.tipusElement=="clima" || myInfo.tipusElement=="obra" || myInfo.tipusElement=="accident"  || myInfo.tipusElement=="port"){
					//addIncidenciaToList(j, marker, list, senseNull);
					addIncidenciaToList(marker, list, senseNull);
				}
				senseNull++;//j++;
				
			}
		}
		listEventListeners.push(GEvent.addListener(map, "moveend", function() {
			addCurrentIncidenciesToList();
		}));
	}
	// eliminem i recreeem el cluster
	var d2=new Date();

//	debugger;
	if(markersArray.length>0){
		cluster.removeMarkers();
		cluster.addMarkers(markersArray);
		var d3=new Date();
		cluster.refresh();
		var d4=new Date();
	}
	document.getElementById("inicioInfo").style.display="none";
//	document.getElementById("cargaMapa").style.visibility="hidden";
//	document.getElementById("cargaTexto").style.visibility="hidden";

	finalCarga=true;
	if (debugOn) GLog.write("addMarkersToMap numChecks:"+numChecks+" numeroChecked:"+numeroChecked(document.formulariCit.estatT));
	// quan veiem que el número de checks activats no coincideix, cal tornar a llançar l'event de demanar la informació.
	if(numChecks != numeroChecked(document.formulariCit.estatT)) checkboxClickHandler();

	if (debugOn) GLog.write("addMarkersToMap total: "+ (new Date()-d)+"ms\n crear markers: "+(d2-d)+"\nms remove i add: "+(d3-d2)+"ms\n refresh: "+(d4-d3) +"ms\n\ntotal markers:"+markersArray.length);
}

// afegeix les incidencies actives i que quedin dins la vista actual a la llista.
function addCurrentIncidenciesToList() {
	try{
		var d=new Date();
		var list = document.getElementById('markerList');
		//var j=1;

		for (var i=0; i<aSenseNull.length; i++) {
			var myInfo=aSenseNull[i];
			if(myInfo!=null && typeof(myInfo)!= "undefined" && typeof(markersArray[i])!= "undefined"){
				var marker=markersArray[i];//la posició del markersArray comença a 0, en canvi l'array copiaInformacion comença a 1.
				if(myInfo.tipusElement=="congestio" || myInfo.tipusElement=="clima" || myInfo.tipusElement=="obra" || myInfo.tipusElement=="accident" || myInfo.tipusElement=="port") {
					//GLog.write("j "+j+" marker "+marker +" list "+list+" i "+i);
					//addIncidenciaToList(j,marker, list, i);
					addIncidenciaToList(marker, list, i);
				}
				//j++;
			}
		}
		if (debugOn) GLog.write("addCurrentIncidenciesToList() time: "+(new Date()-d)+"ms");
	}
	catch (e){
		if (debugOn) GLog.write("Error a addCurrentIncidenciesToList()\n"+e.message+" "+myInfo);
	}
}

/*function toggleClustering() {
	cluster.clusteringEnabled=!cluster.clusteringEnabled;
	cluster.refresh(true);
}*/

var colorDivAnterior='#FBF5C9'

//makrer,sidebar mouseover handler
function tooltipMouseover(elementDivIncidencia){
	colorDivAnterior=elementDivIncidencia.style.background;
	elementDivIncidencia.style.background='#FEC220';
	/*if(!(this.isInfoWindowOpen) && !(this.isHidden())){
		this.tooltip.show();
	}*/
}

//marker,sidebar mouseout handler
function tooltipMouseout(elementDivIncidencia){
	elementDivIncidencia.style.background=colorDivAnterior;
	//this.tooltip.hide();
}

// click a un element de la llista d'incidencies. Ha d'obrir la fitxa del marker associat.
function llistatIncidenciesClick(info,posMarker){
	try{
		//this.tooltip.hide();
		this.openInfoWindowHtml(info, {maxWidth:250});
		cluster.triggerClick(posMarker);
	}catch(e){
		//hi ha agrupació de punts (es fa un zoom).
		cluster.triggerClick(posMarker);
	}
}

// click a un cluster
function myClusterClick(args) {
	cluster.defaultClickAction=function(){
		map.setCenter(args.clusterMarker.getLatLng(), map.getBoundsZoomLevel(args.clusterMarker.clusterGroupBounds))
		delete cluster.defaultClickAction;
	}
	var html="<h4>"+args.clusteredMarkers.length+" "+localitzacions +":</h4>";
	var j=0;
	for (i=0; i<args.clusteredMarkers.length && i<10; i++) {
		//var valMarker=args.clusteredMarkers[i].hp.split("marker");//exemple: marker5 (necessitem el 5)
		//GLog.write("clusteredMarkers : "+(args.clusteredMarkers[i].index)+" i "+ i+" arrayInfo "+arrayInfo[args.clusteredMarkers[i].index] + " valMarker " + valMarker[1]);

		j=i+1;
		html+='<a href="javascript:cluster.triggerClick('+args.clusteredMarkers[i].index+')">'+j+' - '+arrayInfo[args.clusteredMarkers[i].index]+'</a><br />';
		
	}

	html+='<br /><a href="javascript:void(0)" onclick="cluster.defaultClickAction()">Zoom</a> '+aquestaLocalitzacio;

	//args.clusterMarker.openInfoWindowHtml(html, {maxWidth:250});	
	map.openInfoWindowHtml(args.clusterMarker.getLatLng(), html, {maxWidth:250});// obrim la fitxa al mapa perque quan es recalculin els clusters no desapareixi. Al obrir una fitxa provoca un pan i es recalculen els clusters.
}

// Defineix un nou marker i li associa l'acció a fer en clickar.
//function newMarker(markerLocation, title, infoTooltip, markerIcon,posElement, tipusElement) {
function newMarker(markerLocation, title, markerIcon) {
	var marker=new GMarker(markerLocation, {icon:markerIcon});
	// Show this marker's index in the info window when it is clicked
	//marker.myhtml = '<div class="div_fitxa">1posElement'+posElement+" - "+title+'<\/div>';

	// click al marker(no cluster) : obrir fitxa individual
	eventListeners.push(GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml('<div class="div_fitxa">'+title+'<\/div>', {maxWidth:250});
	}));

	return marker;
}

/*PETICIONS*/

/*****
*    Objecte sendRequest
*****/
//Objecte.prototype.sendRequest = function(servletPath) {
function sendRequest(servletPath){
	//prompt("servletPath: ",servletPath);
	var req = newXMLHttpRequest();

	// Set the handler function to receive callback notifications from the request object
	var handlerFunction =null;
	handlerFunction = getReadyStateHandler(req, new Date(), this.processResponse);

	req.onreadystatechange = handlerFunction;
	// Open an HTTP POST connection. Third parameter specifies request is asynchronous.
	req.open("POST", servletPath, true);

	// Specify that the body of the request contains form data
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	req.send("");
};

/*****
*    Objecte processResponse (estat del transit)
*****/
//Objecte.prototype.processResponse = function(ncontent, responseXML) {
function processResponse(initDate, responseXML){
	if(responseXML.search("Error")=="-1"){
		//var myobj =escape(responseXML);

		var d=new Date();
		var json = eval('(' + responseXML + ')');
	//	myobj = eval("(" + responseXML +")");
		
	//	myobj=jsonParse(responseXML);
	//	alert(myobj);
		if (debugOn) GLog.write("JSON total: "+(new Date()-initDate)+"ms  query: "+(d-initDate)+"ms  evaluant: "+(new Date()-d)+"ms");
	}else{
		var iniciPosTractat=responseXML.lastIndexOf("/")+1;		
		var finalPosTractat=responseXML.indexOf(".json");
		var elemTractar=responseXML.substr(iniciPosTractat,finalPosTractat);
		alert("Error obteniendo información de "+ elemTractar +".");
	}
	tractarDades(json);
};


/*function sendMail(servletPath){
	var req = newXMLHttpRequest();

	// Set the handler function to receive callback notifications from the request object
	var handlerFunction =null;
	handlerFunction = getReadyStateHandler(req, this, this.processResponseMail);

	req.onreadystatechange = handlerFunction;
	// Open an HTTP POST connection. Third parameter specifies request is asynchronous.
	req.open("POST", servletPath, true);

	// Specify that the body of the request contains form data
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	req.send("");
};


function processResponseMail(ncontent, responseXML){

	if(responseXML==""){//!error/!Warning
		alert(email_enviat_correctament);
	}else{
		alert(email_no_enviat_correctament);
	}
	winPrototypeForm.close();
};*/
