﻿////////////////////////////////////////////////////////   
// Gestiona la programació Dinàmica de la Web UPCmaps. 
//
// Lleng.: AJAX (JavaScript - XML) + FrameWork Jquery 
// Autor: Raül Aparicio Calvo
// Co: PFC - FIB (UPC)
// 20/Abril/2009
/////////////////////////////////////////////////////////

////////////////////////////
// Inicialitzacions prèvies
// Inicializaciones previas
// PreIntialations
///////////////////////////
//$(document).ready( function(){ loadMap(''); });
//$(window).unload( function(){ GUnload(); });

//----------------------------------------------------//

///////////////////////
// Constants Globals
// Constantes Globales
// Global Constants
///////////////////////
// URL GSA: Constants
	// URL GSA 'principal': kingair<->www-webupc
	var GSA_SearchLink = "http://cercador.upc.edu/search?q='+text+'&site=maps_units&client=default_frontend&output=xml_no_dtd&getfields=id_edifici&num=100&filter=0";
	// URL GSA 'auxiliar': kingair<->duplo-webupc
/*
	var GSA_SearchLink_aux = "http://kingair.upc.edu/search?q='+text+'&site=maps_duplo_units&client=default_frontend&output=xml_no_dtd&getfields=id_edifici&num=100&filter=0";
*/

// PAGINACIÓ Número de Resultats: Constant
	var NUM_ResultatsPag = 10;
/*
	var NUM_ResultatsPag = 20;
	var NUM_ResultatsPag = 6;
*/

//----------------------------------------------------//

//////////////////////
// Variables Globals
// Variables Globales
// Global Variables
//////////////////////
	var map;
	var marker;
	var bounds;
	var htmlInfoPlus = '';
	var icon = new Array();
	var icona;
	var gmarkersEdfs = new Array();
	var gmarkersUnits = new Array();
	
	var markersSearch = new Array();
	var gmarkersSearch = new Array();
	var gmarkersSearch3 = new Array();
	var subArrayMarkers = new Array();
	var htmlsSearch = new Array();
	var textCerca = '';
//var contextCerca = 10;
	
	var htmlsEdfs = new Array();
	var htmlsUnits = new Array();
	var heightTransports = 0;	
	
	// Arrays de dades del mapa
	var arrayMarkerCompls = new Array();
	// Array de dades de Campus
	var arrayCampus_IdNom = new Array();
	
	// Paràmetres URL
	var iU_param = '';
	var iE_param = '';
	var iCodi_param = '';
	var loadingUp = 0;
	var loadedMap = false;

/****************************************
*****************************************
*********** FUNCIÓ INICIAL **************
*****************************************
*****************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Carregar la configuració i visualització inicial del MAPA
////////////////////////////////////////////////////////////
function loadMap(iU, iE, iCodi, iS, iT, iV, iC, iL)
{
	if (GBrowserIsCompatible())
	{
		var point = new GLatLng(41.496969, 1.696969);
		var globalZoom = 9;
		
			map = new GMap2(document.getElementById("gmap"));
		//Tipus de Mapa inicial: Mapa Carrers
			map.setMapType(G_HYBRID_MAP);
		//Controls del Mapa
			map.addControl(new GHierarchicalMapTypeControl());
			map.addMapType(G_SATELLITE_3D_MAP);
			// Control per teclat
			new GKeyboardHandler(map);
			
		// Activar Opcions
			map.enableScrollWheelZoom();
			map.enableContinuousZoom();
		// Activar Event quan canvia el tipus de mapa:  maptypechanged() 
			GEvent.addListener(map, 'maptypechanged', function()
				{ 
					var currentMapType = map.getCurrentMapType();
					if(currentMapType.getName() == 'Terra' 
						|| currentMapType.getName() == 'La Tierra'
						|| currentMapType.getName() == 'Earth')
					{
						amagar_mapsside();
						$('#menu').css('display','none');
						$('#utilitats').css('display','none');
					}
					else 
					{
						mostrar_mapsside();
						$('#menu').css('display','block');
						$('#utilitats').css('display','block');
					}
				});
		// Activar Event quan s'ha carregat el mapa: tilesloaded()
			GEvent.addListener(map, 'tilesloaded', function()
				{ 
				// Altres modificacions
					$('a.gmnoprint.terms-of-use-link').attr('tabindex','105');
				// Modificar estils del botó vista 'Terra'
					$('#hmtctl.gmnoprint').css('right','15px');
					$('#hmtctl.gmnoprint > div + div + div > div').css('width','6em');
					if(iL == 'cat')
						$('#hmtctl.gmnoprint > div + div + div > div').html('Terra (beta)');
					else if(langBD == 'esp')
						$('#hmtctl.gmnoprint > div + div + div > div').html('Tierra (beta)');
					else $('#hmtctl.gmnoprint > div + div + div > div').html('Earth (beta)');
					$('#hmtctl.gmnoprint > div + div + div > div').css('background','white');
				// Amagar Loading... del mapa
					endLoad();
					loadedMap = true;
				});

		// Reposicionar Controls al variar la finestra
			if(height_Global > 550)
			{
				mapLargeControl = new GLargeMapControl3D();
				map.addControl(mapLargeControl, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(235,7)));
			}
			else
			{
				mapLargeControl = new GSmallZoomControl3D();
				map.addControl(mapLargeControl, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(240,7)));
			}
			mapScaleControl = new GScaleControl(); 
			map.addControl(mapScaleControl, new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(310,5)));		
		//Visualizar Mapa
			map.setCenter(point, globalZoom);


// CARREGAR UPCmaps segons URL
///////////////////////////////
		var mode = 'clearCampus'
		if(iU == '' && iE == '' && iCodi == '' && iT == '' && iS == '') mode = 'onlyCampus';
		mapaVerCampus(idCampus_Global, mode, langBD);
		
		if(iU != '' || iE != '' || iCodi != '')
		{
			iU_param = iU;
			iE_param = iE;
			iCodi_param = iCodi;
			if(iC == '') iC = idCampus_Global;
			if(iL == '') iL = langBD;
			if(iU != '') mapaVerBusquedaGSA(iU, 'iU', iL, iC);
			else if(iE != '') mapaVerBusquedaGSA(iE, 'iE', iL, iC);
			else if(iCodi != '') mapaVerBusquedaGSA(iCodi, 'iCodi', iL, iC);
		}
		else if(iS != '')
		{
			$("#cerca_input").val(iS);
			mapaVerBusquedaGSA(iS, '', iL, iC);
		}
		else if(iT != '')
		{
			if(iT.substr(0,5)=='Equip') mapaVerUnitatTipus_Edificis(iC, iV, iT, iL);
			else mapaVerUnitatTipus(iC, iV, iT, iL);
		}
		else if(iC != '') mapaVerCampus(iC, mode, iL);
		
///////////////////////////////
	}
	else alert("Ho sentim, GoogleMaps API no és compatible amb el navegador web");
	
	// Redimensionar Mapa
	$(window).resize(function() { resizeMap('resize'); });
	
	// Amagar/Mostrar MapsResultats
	$('#slideLink').click(veure_mapsside);
}

/****************************************
*****************************************
********* FUNCIONS DE CREACIÓ ***********
*****************************************
*****************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Creación del MARKER
//////////////////////
function createMarker(point, icon, html, tipus, index) 
{
	var opts = { 
				  "icon": icon,
				  "clickable": true
				};
	var marker = new GMarker(point, opts);
	if(index < 10) index = '0'+index;
	if(tipus == 'Edfs')		marker.id = 'q'+index;
	if(tipus == 'Units')	marker.id = 'c'+index;
	if(tipus == 'Campus')	marker.id = 'idCampus';
	if(tipus == 'Compls')	
	{
		marker.id = 'idCompls';
		GEvent.addListener(marker, 'remove', function(){ map.addOverlay(marker); marker.hide();});		
	}
	GEvent.addListener(marker, 'click', function() { marker.openInfoWindowTabsHtml(html); });		
	
	return marker;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function createMarker2(point, icon, html, tipusMarker, tipus, index)
{
	if (tipusMarker == 'zIndex')
	{
		var opts = {
					"icon": icon,
					"clickable": true,
					"zIndexProcess": orderOfCreation 
					};
	}
	else
	{
		var opts = { 
					"icon": icon,
				  	"clickable": true
					};
	}
	
	var marker = new GMarker(point, opts);
	// Càlcul del reste
	index = index%NUM_ResultatsPag;
	if (index == 0) index = 10;
	{
		if(index < 10) index = '0'+index;
		if(tipus=='Edfs')
		{	
			if(tipusMarker == 'xic')	marker.id = 'qXic';
			else marker.id = 'q'+index;
		}
		if(tipus=='Units')
		{	
			if(tipusMarker == 'xic')	marker.id = 'cXic';
			else marker.id = 'c'+index;
		}
	}
	GEvent.addListener(marker, 'click', function() { marker.openInfoWindowTabsHtml(html); });				
	return marker;	
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
// Creació de l'HTML de la Bafarada del MARCADOR
// Pestanya GENERAL
/////////////////////////////////////////////////
function muntar_pestanyaBafaradaGeneral(markerInfo, tipus, idioma)
{
	// Variables	
	var htmlDivGeneral = " ";
	var nameAddress = markerInfo.getAttribute("nameAddress");
	var namePhone 	= markerInfo.getAttribute("namePhone");
	var nameGPS 	= markerInfo.getAttribute("nameGPS");
	
	// Classificació segons <tipus>
	////////////////////////////////
	switch (tipus)
	{
		// Campus
		///////////////////////////////////////////////
		case 'Campus': /* nom_'lang' / nomLocalitat */
			// Variables
			var name = markerInfo.getAttribute('name_'+langBD);
			var nameLocalitat = markerInfo.getAttribute("nameLocalitat");
			
			// Muntatge
			/*<div>*/
			htmlDivGeneral += "<div class='maps_fitxa'>"; 
				/*<h1/>*/
				htmlDivGeneral += "<h3>"+name+"</h3><br>"+nameLocalitat;
			htmlDivGeneral += "</div>";
			/*</div>*/
			heightTransports -= 1;
		  break;
		
		// Edificis
		//////////////////////////////////////////////		
		case 'Edfs': /* codi_edifici (nom_'lang') / arquitecte (any)	/ campus, direccio, codi_postal, id_localitat / LlistaUnitats: nom_'lang' (sigles) */
			// Variables
			var name = markerInfo.getAttribute("name");
			var address = markerInfo.getAttribute("address");
			var nameGPS = markerInfo.getAttribute("nameGPS");
			var coordLat = markerInfo.getAttribute("lat");
			var coordLong = markerInfo.getAttribute("lng");
			var numBUnits = markerInfo.getAttribute("numBUnits");
			var headerInfoEdf = markerInfo.getAttribute("headerInfoEdf");
			var headerLlistatUnitsEdf = markerInfo.getAttribute("headerLlistatUnitsEdf");
			
			// Muntatge
			/*<div>*/
			htmlDivGeneral += "<div class='maps_fitxa'>";
				/*<h3/>*/
				htmlDivGeneral += '<h3>'+name+'</h3>';
				/*<h4/>*//*<ul>*/
				htmlDivGeneral += '<h4 class="goout">'+headerInfoEdf+'</h4><ul class="radius10">';
					/*<li/>*/
					htmlDivGeneral += '<li><span>'+nameAddress+'</span><address><p>'+address+'</p></address></li>';
					htmlDivGeneral += '<li><span>'+nameGPS+'</span><p>'+convertirCoordenades2Graus(coordLat,coordLong)+'</p></li>';
				htmlDivGeneral += '</ul>';
				/*</ul>*/
				
				// Carregar llistat d'Unitats de l'Edifici
				if (markerInfo.getAttribute("numBUnits")>0) 
				{
					/*<h4/><div.caixa>*/
					htmlDivGeneral += '<h4 class="goout">'+headerLlistatUnitsEdf+'</h4><div class="caixa">';
					/*<div.topleft.topright.bottomright.bottomleft>*/
					htmlDivGeneral += '<div class="topleft"><div class="topright"><div class="bottomright"><div class="bottomleft">';
					/*<ol>*/
					htmlDivGeneral += '<ol class="llistaEdificis" title="Llistat d\'Edificis">';
						
						var idUnit, nameUnit;
						(numBUnits > 5)? heightTransports += 80 : heightTransports += 7;
						//if(numBUnits < 5) heightTransports += 7; 
						//if(numBUnits < 2) heightTransports += 1;
						for(var i=0; i<numBUnits; i++)
						{
							idUnit =  markerInfo.getAttribute("idUnit_"+i);
							nameUnit =  markerInfo.getAttribute("nameUnit_"+i);
							/*<li/>*/
							htmlDivGeneral += '<li><a tabindex="80" class="radius10" title="visita el web" target="_blank" href="http://www.upc.edu/unitat/fitxa_unitat.php?id_unitat='+idUnit+'&lang='+lang+'">'+nameUnit+'</a></li>';
						}
					htmlDivGeneral += '</ol></div></div></div></div></div></div>';
					/*</div.caixa.topleft.topright.bottomright.bottomleft></ol>*/
				}
				else heightTransports = -1;
			htmlDivGeneral += "</div>";
			/*</div>*/
		  break;
		  
		// Unitats
		////////////////////////////
		case 'Units': /* nom_'lang' (sigles) / nom_campus, edifici, direccio, codi_postal, nom_localitat / id_foto */
			// Variables
			var htmlDivFoto = '';
			var htmlDivClear = '';
			var htmlPhone = '';
			var htmlMail = '';
			var htmlWeb = '';
			var idU = markerInfo.getAttribute("idU");
			var name = markerInfo.getAttribute("name");
			var address = markerInfo.getAttribute("address");
			var address1 = markerInfo.getAttribute("address1");
			var address2 = markerInfo.getAttribute("address2");
			var address3 = markerInfo.getAttribute("address3");
			if(address2 != '') address = address1+'<br/>'+address2+'<br/>'+address3;
			
			var numHeightTrans = 0;
			var coordLat = markerInfo.getAttribute("lat");
			var coordLong = markerInfo.getAttribute("lng");
			var phone = markerInfo.getAttribute("phone");
			var mail = markerInfo.getAttribute("mail");
			var web = markerInfo.getAttribute("web");
			if(web)	var webLite	= web.replace('http://', '');
			var idV = markerInfo.getAttribute("idV");
			var nameVideo = markerInfo.getAttribute("nameVideo");
			var headerInfoUnit = markerInfo.getAttribute("headerInfoUnit");
			
			// Muntatge
			// Fotografía del Edificio de la Unidad
			// Foto del tipo vídeo(4) o Sin foto o foto sin vídeo(2)
			if(idV != '') 
			{
				htmlDivFoto = '<li class="imatge"><a tabindex="83" rel="external" href="'+idV+'?set_language='+lang+'" title="Play video"><img src="http://www.upc.edu/gestorwebupc/gestioEstudis/files/fotos_unitats/'+idU+'_4.jpg" alt="'+name+'" longdesc="Foto: '+name+'" /><br/><br/><br/><br/><br/><br/></li>';
				htmlDivClear = '<li><div class="clear"></div></li>';
			//	heightTransports += 53;
			}
			(name.length > 80)? heightTransports += 20 : heightTransports = 0;
			// Dades de Contacte de la Unitat
			htmlGPS = '<li><span>'+nameGPS+'</span><p>'+convertirCoordenades2Graus(coordLat,coordLong)+'</p></li>';
			if(phone!='') 
			{
				htmlPhone = '<li><span>'+namePhone+'</span><p>'+phone+'</p></li>';
				numHeightTrans += 1;
			}
			if(mail!='') 
			{
				var imgArroba = '<img src="img/infowindow/arroba.gif" alt="@" style="vertcal-align:baseline;" />';
				var mailImg = mail.replace('@', imgArroba);
				htmlMail = '<li><span>e-mail</span><p><a tabindex="81" href="mailto:'+mail+'" title="envia un mail">'+mailImg+'</a></p></li>';
				numHeightTrans += 1;
			}
			if(web!='' && webLite!='') 
			{
				htmlWeb = '<li><span>Web</span><p><a tabindex="82" rel="external" href='+web+' title="visita el web">'+webLite+'</a></p></li>';
				numHeightTrans += 1;
			}
			(numHeightTrans>1)? heightTransports += 50 : heightTransports += 1; //27
			/*<div>*/
			htmlDivGeneral += "<div class='maps_fitxa'>"; 
				/*<h3/>*/
				htmlDivGeneral += '<h3><a tabindex="80" rel="external" href="http://www.upc.edu/unitat/fitxa_unitat.php?id_unitat='+idU+'&lang='+lang+'" title="'+name+'">'+name+'</a></h3>';
				/*<h4/>*//*<ul>*/
				htmlDivGeneral += '<h4 class="goout">'+headerInfoUnit+'</h4><ul class="radius10">'+htmlDivFoto;
					/*<li/>*/
					htmlDivGeneral += '<li><address><span>'+nameAddress+'</span><p>'+address+'</p></li>';
					htmlDivGeneral += htmlGPS+''+htmlPhone+''+htmlMail+''+htmlWeb+''+htmlDivClear;
				htmlDivGeneral += '</ul>';
				/*</ul>*/
			htmlDivGeneral += "</div>";
			/*</div>*/			
		  break;
		  
		// Complements
		////////////////////////////
		case 'Compls': /* nom_'lang'_TC / subnom_'lang'_STC / info_'lang'_Compl */
			// Variables
			var nameTC = markerInfo.getAttribute("nameidTC");
			var nameSTC = markerInfo.getAttribute("nameidSTC");
			var infoC = markerInfo.getAttribute("info");
			var htmlInfoC = '';
		
			// Muntatge
			if(infoC != '') htmlInfoC = '<br>'+infoC;
			/*<div>*/
			htmlDivGeneral ="<div class='maps_compls'>"; 
				/*<h3/>*/
				htmlDivGeneral += '<h3>'+nameTC+'</h3><strong>'+nameSTC+'</strong>'+htmlInfoC;
			htmlDivGeneral += "</div>";
			/*</div>*/				
		  break;
	}
	
	// Resultat
	return htmlDivGeneral;
}

///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
// Creació de l'HTML de la Bafarada del MARCADOR
// Pestanya TRANSPORTS + ENLLAÇOS INTERES
/////////////////////////////////////////////////
function muntar_pestanyaBafaradaTransports(infoMarcador, idioma)
{
	// Variables Locals
	var htmlLinkCia;
	var numTrans = infoMarcador.getAttribute("numCTrans");
	var numLinks = infoMarcador.getAttribute("numCLinks");
	var titleLlistaTrans = infoMarcador.getAttribute("titleLlistaTrans");
	var text_altresEnllacos = infoMarcador.getAttribute("text_altresEnllacos");
	var headerInfoTrans = infoMarcador.getAttribute("headerInfoTrans");
	var htmlDivTransports = "<h4 class='goout'>"+headerInfoTrans+"</h4>";
	var busiTrans = false;
	
	// Dimensionar Height
	if(heightTransports == -1) heightTransports = 50;
	else (heightTransports > 0) ? heightTransports += 50 : heightTransports = 100;
	// Muntatge
	if (numTrans > 0)
	{
		/*<div.maps_trans>*/
		htmlDivTransports += "<div class='maps_trans' style='margin:0;'>";
			/*<ul>*/
			htmlDivTransports += "<ul id='heightTrans' title='"+titleLlistaTrans+"' style='max-height:"+heightTransports+"px;'>";
			for (var i=0; i<numTrans; i++)
			{
				nameTrans =  infoMarcador.getAttribute("nameTransport_"+i);
				imgTrans =  infoMarcador.getAttribute("imgTransport_"+i);
				nameCia =  infoMarcador.getAttribute("nameCia_"+i);
				linkCia =  infoMarcador.getAttribute("linkCia_"+i);
				infoRoute =  infoMarcador.getAttribute("infoRoute_"+i);
				htmlLinkCia = nameTrans;
				
				if(imgTrans=="busi")
				{
					if(linkCia != '') htmlLinkCia = "<a tabindex='81' class='external' rel='external' title='web "+nameCia+"' href="+linkCia+">"+nameCia+"</a>";
						/*<li/>*/
						if(!busiTrans) htmlDivTransports += "<li><span class="+imgTrans+">"+nameTrans+"</span>";
						busiTrans = true;
						htmlDivTransports += "<p>"+htmlLinkCia+" - "+infoRoute; /*</p></li>*/
				}
				else if(imgTrans=="bicing" && busiTrans) htmlDivTransports += "</p></li>";
				else 
				{
					if(linkCia != '') htmlLinkCia = "<a tabindex='80' class='external' rel='external' title='"+nameTrans+" - "+nameCia+"' href="+linkCia+">"+nameTrans+"</a>";
						/*<li/>*/
						htmlDivTransports += "<li><span class="+imgTrans+">"+htmlLinkCia+"</span><p>"+infoRoute+"</p></li>";
				}
			}
			htmlDivTransports += "</ul>";
			/*</ul>*/
			
			// Muntatge Enllaços Interès
			if (numLinks > 0)
			{
				htmlDivTransports += "<div id='altresEnllacos'><div class='center'>";
				
				for (var i=0; i<numLinks; i++)
				{
					nameLink =  infoMarcador.getAttribute("nameLink_"+i);
					textLink =  infoMarcador.getAttribute("textLink_"+i);
				
					if(i!=0) htmlDivTransports += "<span class='expandeixet'>&bull;</span>";
					htmlDivTransports +="<a tabindex='82' class='external' rel='external' href='"+textLink+"'>"+nameLink+"</a>";			
				}
				htmlDivTransports += "</div></div>";
			}			
		htmlDivTransports += "</div>";
		/*</div.maps_trans>*/
	}
	else htmlDivTransports = false;
	// Dimensionar Height
	heightTransports = 0;
	
	// Resultat
	return htmlDivTransports;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Creació de l'HTML de la Bafarada amb/sense Pestanyes del MARCADOR
/////////////////////////////////////////////////////////////////////
function createHtml(infoMarcador, lang, tipus)
{
	// Variables
	var htmlBafaradaPestanyes;
	var tabGeneral = infoMarcador.getAttribute("tabGener");
	var tabTransports = infoMarcador.getAttribute("tabTrans");
	var htmlJSTarget = "<script type='text/javascript'>var accesBlank = true; var JSTarget = {init: function(att,val,warning) {if (document.getElementById && document.createElement && document.appendChild) {var strAtt = ((typeof att == 'undefined') || (att == null)) ? 'class' : att; var strVal = ((typeof val == 'undefined') || (val == null)) ? 'non-html' : val;var strWarning = ((typeof warning == 'undefined') || (warning == null)) ? ' (opens in a new window)' : warning;var oWarning;var arrLinks = document.getElementsByTagName('a');var oLink;var oRegExp = new RegExp('(^|\\s)' + strVal + '(\\s|$)');for (var i = 0; i < arrLinks.length; i++) {oLink = arrLinks[i];if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))){if(oLink.getAttribute('class') == 'external'){oWarning = document.createElement('em');oWarning.appendChild(document.createTextNode(strWarning));oLink.appendChild(oWarning);}oLink.onclick = JSTarget.openWin;}}oWarning = null;}},openWin: function(e) {var event = (!e) ? window.event : e;if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return true;else {var oWin = window.open(this.getAttribute('href'), '_blank');if (oWin) {if (oWin.focus) oWin.focus();return false;}oWin = null;return true;}},addEvent: function(obj, type, fn) {if (obj.addEventListener)obj.addEventListener(type, fn, false);else if (obj.attachEvent) {obj['e'+type+fn] = fn;obj[type+fn] = function() {obj['e'+type+fn]( window.event );}; obj.attachEvent('on'+type, obj[type+fn]);}}}; if(accesBlank){JSTarget.init('rel','external',':'); accesBlank=false;} if(accesBlank){JSTarget.addEvent(window, 'load', function(){JSTarget.init('rel','external',':');});} </script>";

	// Muntar Pestanya 'General'
	var htmlDivGeneral = muntar_pestanyaBafaradaGeneral(infoMarcador, tipus, lang);
	// Muntar Pestanya 'Transports'
	var htmlDivTransport = muntar_pestanyaBafaradaTransports(infoMarcador, lang);

	// Muntar Bafarada/infoWindow amb/sense Pestanyes
	if (htmlDivTransport)
		htmlBafaradaPestanyes = [	new GInfoWindowTab("General", htmlDivGeneral), 
								new GInfoWindowTab(tabTransports, htmlJSTarget+htmlDivTransport)
								]; 
	else htmlBafaradaPestanyes = [	new GInfoWindowTab("General", htmlDivGeneral) ];
		
	// Resultat
		return htmlBafaradaPestanyes;	

}
////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
//CREACIÓN del ICONO del MARKER
///////////////////////////////
function createIcon(lang, tipus, extraCompl)
{
	if(tipus == 'Campus')
	{
		icona = new GIcon(); 
		icona.image = 'http://maps.upc.edu/img/icones/localitat.png';
		icona.iconSize = new GSize(48, 48);
		icona.iconAnchor = new GPoint(24, 24);
		icona.infoWindowAnchor = new GPoint(24, 12);
	
	}
	else if (tipus == 'Compls')
	{
		icona = new GIcon();
		icona.image = 'http://maps.upc.edu/img/icones/STC_'+extraCompl+'.png';
		icona.shadow = 'http://maps.upc.edu/img/icones/stc_shadow.png';
		icona.iconSize = new GSize(16, 20);
		icona.shadowSize = new GSize(18, 10);
		icona.iconAnchor = new GPoint(8, 20); 
		icona.infoWindowAnchor = new GPoint(8, 1); 		
	}
	
	return icona;
}
////////////////////////////////////////////////////////////////////////////////////////////////
function createIcon2(lang, tipus, extraCompl)
{
	var icona = new GIcon();
	var tipusIcon = '';
	if (tipus == 'Edfs') tipusIcon = 'q';
	else if (tipus == 'Units') tipusIcon = 'c';

	var j = extraCompl;
	if(j == -1) // Icona Xic 
	{
icona.image = 'http://maps.upc.edu/img/icones/'+tipusIcon+'_xic.png';
//icona.image = 'http://maps.upc.edu/img/strips/transparent.gif';
		icona.shadow = '';
		icona.shadowSize = '';
		icona.iconSize = new GSize(18, 19);
		icona.iconAnchor = new GPoint(9, 9);
		icona.infoWindowAnchor = new GPoint(9, 9);	
	}
	
	// Càlcul del reste
	j = extraCompl%NUM_ResultatsPag;
	if (j == 0) j = 10;
//alert(extraCompl+' - '+extraCompl%NUM_ResultatsPag);
	
	if(j > 0 && j < 11) // Icona amb Lletra
	{
		if(j < 10) j = '0'+j;	
 icona.image = 'http://maps.upc.edu/img/icones/'+tipusIcon+'_'+j+'.png';
//icona.image = 'http://maps.upc.edu/img/strips/transparent.gif';
		icona.shadow = 	'http://maps.upc.edu/img/icones/'+tipusIcon+'_shadow.png';
		icona.shadowSize = new GSize(32, 26);
 icona.iconSize = new GSize(20, 23);
 icona.iconAnchor = new GPoint(10, 23);
//icona.iconSize = new GSize(20, 25);
//icona.iconAnchor = new GPoint(10, 25);
		icona.infoWindowAnchor = new GPoint(10, 1);	
	}
	return icona;
}

// This function picks up the click and opens the corresponding info window
function myclick(i, tipus)
{
	var indexReverse = ((gmarkersSearch3.length-1)-i);
	
	// Apropar Marcador
	gmarkersSearch3[indexReverse][0].hide();
	gmarkersSearch3[indexReverse][0] = gmarkersSearch3[indexReverse][1];
	map.addOverlay(gmarkersSearch3[indexReverse][0]);

	// Obrir Bafarada amb Pestanyes
	if (tipus == 'Edfs') gmarkersEdfs[i].openInfoWindowTabsHtml(htmlsEdfs[i]);
	if (tipus == 'Units') gmarkersUnits[i].openInfoWindowTabsHtml(htmlsUnits[i]);
	if (tipus == 'Search') gmarkersSearch3[indexReverse][0].openInfoWindowTabsHtml(htmlsSearch[i]);
}

/****************************************
*****************************************
*** FUNCIONS DE VISUALITZACIÓ AL MAPA ***
*****************************************
*****************************************/
//////////////////////////////////////////////////////////////////////////////////////////////
//VER CAMPUS EN EL MAPA (ID de Campus, idioma)
//////////////////////////////////////////////////////
function mapaVerCampus(id, mode, lang)
{
	//Limpiar otras CAPAS del MAPA
	map.clearOverlays();
	arrayMarkerCompls = new Array();
	$('#popComplements').hide();
	$('#popComplements').html('');
	
	//Cargar DATOS de la BD: GAPI+ajax+php+xml+dom
	GDownloadUrl("http://maps.upc.edu/includes/xml/xml_Campus.php?idC="+id+"&lang="+langBD, function(data) 
	{
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("campus_mark");
		
		for (var i=0; i<markers.length; i++)
		{
			if(markers[i].getAttribute("area") != '')
			{	
				var areas = new Array();		
				areas = markers[i].getAttribute("area").split('-');
				for(var k in areas)
				{
					var area = new Array();
					var areaCampus = new Array();
					area = areas[k].split(';');
					for(var j=0; j<area.length; j++)
					{
						var coords = area[j].split(',');
						// coords[0] -> lat
						// coords[1] -> long
						areaCampus[j] = new GLatLng(coords[0], coords[1]);	
					}
					var polygon_area = new GPolygon(areaCampus, "#007dcc", 3, 0.8, "#6698D3", 0.2); 
					if(mode == 'onlyCampus') map.addOverlay(polygon_area);
				}
			}
			var pointMarker = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
										parseFloat(markers[i].getAttribute("lng")));
			if(mode == 'onlyCampus') 
			{
				var markerHtml = createHtml(markers[i], lang, 'Campus');
				var markerIcon = createIcon(lang, 'Campus');
				var marker = createMarker(pointMarker, markerIcon, markerHtml, 'Campus');
			
				map.addOverlay(marker);
			}
			
			// Crear Array Campus: IdCampus <--> NomCampus
			arrayCampus_IdNom[markers[i].getAttribute("idC")] = new Array();
			arrayCampus_IdNom[markers[i].getAttribute("idC")]['cat'] = markers[i].getAttribute("name_cat");
			arrayCampus_IdNom[markers[i].getAttribute("idC")]['esp'] = markers[i].getAttribute("name_esp");
			arrayCampus_IdNom[markers[i].getAttribute("idC")]['ing'] = markers[i].getAttribute("name_ing");
		}
		// Afegir 'A tota la UPC' a l'Array Campus: IdCampus <--> NomCampus
		arrayCampus_IdNom[10] = new Array();
		arrayCampus_IdNom[10]['cat'] = 'tota la UPC';
		arrayCampus_IdNom[10]['esp'] = 'toda la UPC';
		arrayCampus_IdNom[10]['ing'] = 'all UPC';
		
		// Centrar vista del mapa segons Resultats
		var point, zoom;
		if(markers.length > 1) { zoom = 9; point = new GLatLng(41.496969, 1.696969); }
		else { zoom = parseInt(markers[0].getAttribute("zoom")); point = pointMarker; }
		map.setCenter(point, zoom);

		//Registrar paràmetres a la variable global: urlUPCmaps
		if(urlUPCmaps.indexOf('?') > 0) 
			urlUPCmaps = urlUPCmaps.slice(0,urlUPCmaps.indexOf('?'));
		urlUPCmaps += '?iC='+id+'&iL='+langBD;
	});
}
/////////////////////////////////////////////////////////////////////////////////////////////
//VER UNITAT TIPUS EN EL MAPA (ID de Campus, IDS VINCULATS, lang)
/////////////////////////////////////////////////////////////////////////////////////////////////
function mapaVerUnitatTipus(idCampus, idsVinc, nomMenuTipus, lang)
{		
	//Mostrar Loading... després d'1,5segons
	setTimeout("if(!loadedMap) startLoad();", 1500);
	loadedMap = false;
	
	//Limipar otras CAPAS del MAPA
	map.clearOverlays();
	$('#popComplements').hide();
	$('#popComplements').html('');
	
	//Reiniciar Arrays Globales
	///////////////////////////
	htmlsSearch = new Array();
	markersSearch = new Array();
	gmarkersSearch3 = new Array();	
	
	//Cargar DATOS de la BD: GAPI+ajax+php+xml+dom
	GDownloadUrl("http://maps.upc.edu/includes/xml/xml_UnitatTipus.php?idC="+idCampus+"&idsVinc="+idsVinc+"&lang="+lang, function(data)
	{
		var xml = GXml.parse(data);
		markersSearch = xml.documentElement.getElementsByTagName("unitType_mark");
		var numSearchResults = markersSearch.length;
		var indexReverse = numSearchResults+1;

		// Ordenar Array de Resultats Alfabèticament
		markersSearch = ordenarResults(markersSearch, 'Search');
		// Invertir Array de Resultats
		markersSearch.reverse();
	  
		for (var i = 0; i < numSearchResults; i++)
		{
			indexReverse--;  

			var name = markersSearch[i].getAttribute("name");
			var address = markersSearch[i].getAttribute("address");
			var point = new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), 
									parseFloat(markersSearch[i].getAttribute("lng")));

			var markerHtml = createHtml(markersSearch[i], lang, 'Units');
			var markerIconLletra = createIcon2(lang, 'Units', indexReverse);
			var markerIconXic = createIcon2(lang, 'Units', -1);
			var markerZIndex = createMarker2(point, markerIconLletra, markerHtml, 'Units', 'zIndex', indexReverse);
			var markerLletra = createMarker2(point, markerIconLletra, markerHtml, 'Units', 'lletra', indexReverse);
			var markerXic = createMarker2(point, markerIconXic, markerHtml, 'Units', 'xic', indexReverse);
			
			//Variables para guardar los markers
			htmlsSearch.push(markerHtml);
			subArrayMarkers = new Array();
			subArrayMarkers[0] = markerLletra;
			subArrayMarkers[1] = markerZIndex;
			subArrayMarkers[2] = markerLletra;
			subArrayMarkers[3] = markerXic;
			gmarkersSearch3[indexReverse] = subArrayMarkers; //Insertats de N:Z a 0:A
		}

		// Centrar vista del mapa segons Resultats
		var bounds = new GLatLngBounds();
		if (numSearchResults)
		{
			for (var i in markersSearch) 
				bounds.extend(new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), parseFloat(markersSearch[i].getAttribute("lng"))));
			calcular_centrezoomMapa('cercaGuiada', idCampus, map.getBoundsZoomLevel(bounds), bounds, 150, 5, 0);
		}
		textCerca = nomMenuTipus;
//contextCerca = idCampus;
		//Registrar paràmetres a la variable global: urlUPCmaps
		if(urlUPCmaps.indexOf('?') > 0) 
			urlUPCmaps = urlUPCmaps.slice(0,urlUPCmaps.indexOf('?'));
		urlUPCmaps += '?iT='+textCerca+'&iV='+idsVinc+'&iC='+idCampus+'&iL='+lang;
		
		// Mostrar els resultats de la Cerca
		paginarResultats(markersSearch, nomMenuTipus, idCampus);
	});
}
/////////////////////////////////////////////////////////////////////////////////////////////
//VER UNITAT TIPUS EN EL MAPA (ID de Campus, IDS VINCULATS, lang)
/////////////////////////////////////////////////////////////////////////////////////////////////
function mapaVerUnitatTipus_Edificis(idCampus, idsVinc, nomMenuTipus, lang)
{		
	//Mostrar Loading... després d'1,5segons
	setTimeout("if(!loadedMap) startLoad();", 1500);
	loadedMap = false;
	
	//Limipar otras CAPAS del MAPA
	map.clearOverlays();
	$('#popComplements').hide();
	$('#popComplements').html('');
	
	//Reiniciar Arrays Globales
	///////////////////////////
	htmlsSearch = new Array();
	markersSearch = new Array();
	gmarkersSearch3 = new Array();	
	
	//Cargar DATOS de la BD: GAPI+ajax+php+xml+dom
	GDownloadUrl("http://maps.upc.edu/includes/xml/xml_UnitatTipus_Edfs.php?idC="+idCampus+"&idsVinc="+idsVinc+"&lang="+lang, function(data)
	{
		var xml = GXml.parse(data);
		markersSearch = xml.documentElement.getElementsByTagName("*");
		var numSearchResults = markersSearch.length;
		var indexReverse = numSearchResults+1;

		// Ordenar Array de Resultats Alfabèticament
		markersSearch = ordenarResults(markersSearch, 'Search');
		// Invertir Array de Resultats
		markersSearch.reverse();
	  
		for (var i = 0; i < numSearchResults; i++)
		{
			indexReverse--;  

			var name = markersSearch[i].getAttribute("name");
			var address = markersSearch[i].getAttribute("address");
			var point = new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), 
									parseFloat(markersSearch[i].getAttribute("lng")));
			
			//Determinar el tipus (Edfs, Units) de les dades
			if(markersSearch[i].getAttribute("idB") != null) tipus = 'Edfs';
			else tipus = 'Units';
			
			var markerHtml = createHtml(markersSearch[i], lang, tipus);
			var markerIconLletra = createIcon2(lang, tipus, indexReverse);
			var markerIconXic = createIcon2(lang, tipus, -1);
			var markerZIndex = createMarker2(point, markerIconLletra, markerHtml, tipus, 'zIndex', indexReverse);
			var markerLletra = createMarker2(point, markerIconLletra, markerHtml, tipus, 'lletra', indexReverse);
			var markerXic = createMarker2(point, markerIconXic, markerHtml, tipus, 'xic', indexReverse);
			
			//Variables para guardar los markers
			htmlsSearch.push(markerHtml);
			subArrayMarkers = new Array();
			subArrayMarkers[0] = markerLletra;
			subArrayMarkers[1] = markerZIndex;
			subArrayMarkers[2] = markerLletra;
			subArrayMarkers[3] = markerXic;
			gmarkersSearch3[indexReverse] = subArrayMarkers; //Insertats de N:Z a 0:A
		}

		// Centrar vista del mapa segons Resultats
		var bounds = new GLatLngBounds();
		if (numSearchResults)
		{
			for (var i in markersSearch) 
				bounds.extend(new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), parseFloat(markersSearch[i].getAttribute("lng"))));
			calcular_centrezoomMapa('cercaGuiada', idCampus, map.getBoundsZoomLevel(bounds), bounds, 150, 5, 0);
		}
		textCerca = nomMenuTipus;
//contextCerca = idCampus;
		//Registrar paràmetres a la variable global: urlUPCmaps
		if(urlUPCmaps.indexOf('?') > 0) 
			urlUPCmaps = urlUPCmaps.slice(0,urlUPCmaps.indexOf('?'));
		urlUPCmaps += '?iT='+textCerca+'&iV='+idsVinc+'&iC='+idCampus+'&iL='+lang;
		
		// Mostrar els resultats de la Cerca
		paginarResultats(markersSearch, nomMenuTipus, idCampus);
	});
}
/////////////////////////////////////////////////////////////////////////////////////////////
//VER COMPLEMENTS EN EL MAPA (ID de SubTipus_Complement, ID de Campus-Tipus_Complement, idioma)
/////////////////////////////////////////////////////////////////////////////////////////////////
function mapaVerComplements(idSTC, idCTC, tipus, lang)
{		
	if (arrayMarkerCompls[idSTC] == 'undefined' || arrayMarkerCompls[idSTC] == null || arrayMarkerCompls[idSTC][idCTC] == 'undefined' || arrayMarkerCompls[idSTC][idCTC] == null)
	{
		// Carregar DADES de la BD: GAPI+ajax+php+xml+dom
		GDownloadUrl("http://maps.upc.edu/includes/xml/xml_Complements.php?idSTC="+idSTC+"&idCTC="+idCTC+"&tipus="+tipus+"&lang="+lang, function(data) 
		{
			// Preparem l'Array de SubTipusCompls
			if (arrayMarkerCompls[idSTC] == 'undefined' || arrayMarkerCompls[idSTC] == null) 	
				arrayMarkerCompls[idSTC] = new Array();
			arrayMarkerCompls[idSTC][idCTC] = new Array();
		
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("compl_mark");
			for (var i = 0; i < markers.length; i++)
			{
				if(markers[i].getAttribute("lat")!='')
				{
					var idCompl = markers[i].getAttribute("idCompl");
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
											parseFloat(markers[i].getAttribute("lng")));
					var markerHtml = createHtml(markers[i], lang, 'Compls');
					var markerIcon = createIcon(lang, 'Compls', idSTC);
					var marker = createMarker(point, markerIcon, markerHtml, 'Compls');
					map.addOverlay(marker);
					// Afegim els 'marker' dels Complements a l'Array 'arrayMarkerCompls'
					arrayMarkerCompls[idSTC][idCTC].push(marker);
				}
				else if(markers[i].getAttribute("area")!='')
				{
					var area = new Array();
					var areaCompl = new Array();
					area = markers[i].getAttribute("area").split(';');
					for(var j=0; j<area.length; j++)
					{
						var coords = area[j].split(',');
						// coords[0] -> lat
						// coords[1] -> long
						areaCompl[j] = new GLatLng(coords[0], coords[1]);	
					}
					var polyline_opts = {"geodesic":true};
					var polygon_line = new GPolyline(areaCompl,"#FFFF33", 6, 0.75, polyline_opts);
					map.addOverlay(polygon_line);
				}
			}
		});
	}
	else 
	{
		for(var l in arrayMarkerCompls[idSTC][idCTC])
		{
			if(arrayMarkerCompls[idSTC][idCTC][l].isHidden())
				arrayMarkerCompls[idSTC][idCTC][l].show();
		}
	}

}

function mapaClearComplements(idSTC, idCTC, lang)
{
	if(idSTC != '')
	{
		for(var i in arrayMarkerCompls[idSTC])
		{
			for(var j in arrayMarkerCompls[idSTC][i])
			{
				map.removeOverlay(arrayMarkerCompls[idSTC][i][j]);
			}
		}
		arrayMarkerCompls[idSTC] = null;
	}
	else if (idCTC != '')
	{
		for(var i in arrayMarkerCompls)
		{
			for(var j in arrayMarkerCompls[i])
			{
				if (j == idCTC) 
				{
					for(var k in arrayMarkerCompls[i][idCTC])
						arrayMarkerCompls[i][idCTC][k].hide();
	// Optimització!!!!!!!!!!
	//map.removeOverlay(arrayMarkerCompls[i][idCTC][k]);
	//arrayMarkerCompls[i][idCTC] = null;
				}
			}
		}
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////
//VER BUSQUEDA-GSA EN EL MAPA (cadena de texto, idioma, ID de Campus)
////////////////////////////////////////////////////////////////////////////////
function mapaVerBusquedaGSA(text_id, id_tipus, lang, idCampus)
{		
	//Mostrar Loading... després d'1,5segons
	setTimeout("if(!loadedMap) startLoad();", 1500);
	loadedMap = false;
	
	//Limpiar otras CAPAS del MAPA
	map.clearOverlays();
	$('#popComplements').hide();
	$('#popComplements').html('');
	
	//Obtener IDs del MotorGSA+GAPI+ajax+php+dom
	////////////////////////////////////////////
	var request = GXmlHttp.create();
	var arrayIDsEdfs = new Array();
	var arrayIDsUnits = new Array();
	
	//Reiniciar Arrays Globales
	///////////////////////////
	htmlsSearch = new Array();
	markersSearch = new Array();
	gmarkersSearch3 = new Array();

//Diferenciar entre CERCA de text o num. id (text_id)
//////////////////////////////////////////////////////
	var text_idMode = 'cercaText';
	if(isNaN(text_id))
	{
		//Tractar cadena de cerca: text_id -> text
		textCerca = text_id;
		text = text_id;
		text = encodeURI(text);
		//Tractar direcció web a carregar: url	
		var url = 'http://maps.upc.edu/includes/xml/xml_ProxyGSA.php?url='+encodeURIComponent(eval("'"+GSA_SearchLink+"'"));
		text_idMode = 'cercaText';
	}
	else //Tractar id Unitat o id Edifici: text_id 
	{
		id = text_id;
		if(id_tipus == 'iU') { arrayIDsUnits[0] = id; arrayIDsEdfs[0] = ''; codiIDUnit = '';}
		if(id_tipus == 'iE') { arrayIDsEdfs[0] = id; arrayIDsUnits[0] = ''; codiIDUnit = '';}
		if(id_tipus == 'iCodi') { arrayIDsEdfs[0] = ''; arrayIDsUnits[0] = ''; codiIDUnit = id;}
		if(id_tipus == '') { arrayIDsEdfs[0] = id; arrayIDsUnits[0] = id; codiIDUnit = id;}
		text_idMode = 'cercaId';
	}
///////////////////////////////////////////////////////////////////////	
//Executem la cerca GSA+BD pel TEXT
	if(text_idMode == 'cercaText')
	{
	//Generar AJAX
	//////////////////////////////
		request.open("GET", url, true);
		request.onreadystatechange = function() 
		{
			if (request.readyState == 4)
			{
				var strId;
				var xml = request.responseXML;
				/********************************************************************* 
				** Si dades en MT amb V = #id_edifici -> <MT N="id_edifici" V="20"/>
				**--------------------------------------------------------------------
				** var res = xml.documentElement.getElementsByTagName("MT");
				** for (var i = 0; i < res.length; i++)
				** {	arrayIDs[i] = res[i].getAttribute("V");	}
				**********************************************************************/
				// Si dades en S -> <S>19. </S>
				var res = xml.documentElement.getElementsByTagName("S");
				var	tmp = xml.documentElement.getElementsByTagName("R");
				for (var i = 0; i < res.length; i++)
				{	
					strId = res[i].childNodes[0].nodeValue;	
					if(!tmp.item(i).getElementsByTagName('MT')[0]) arrayIDsEdfs[i] = strId.replace('. ','');
					else arrayIDsUnits[i] = strId.replace('. ','');
				}
			//Cargar DATOS de la BD: GAPI+ajax+php+xml+dom
			//////////////////////////////////////////////
				GDownloadUrl("http://maps.upc.edu/includes/xml/xml_SearchGSA.php?arrayIDsEdfs="+arrayIDsEdfs+"&arrayIDsUnits="+arrayIDsUnits+"&idC="+idCampus+"&lang="+lang, function(data)
				{
					var xml = GXml.parse(data);
					// Selecció XML de TOTS els resultats: getElementsByTagName("*")
					//markersSearch = xml.documentElement.getElementsByTagName("*");
				// Selecció XML dels resultats EDIFICI: getElementsByTagName("edifici_mark")
					markersEdfsSearch = xml.documentElement.getElementsByTagName("edifici_mark");
				//Selecció XML dels resultats UNITAT: getElementsByTagName("unitat_mark")
					markersUnitsSearch = xml.documentElement.getElementsByTagName("unitat_mark");
				//Selecció XML dels NO resultats: getElementsByTagName("noResults_mark")
					markersNoSearch = xml.documentElement.getElementsByTagName("noResults_mark");
					
					var numSearchResults = markersEdfsSearch.length+markersUnitsSearch.length;
					var indexReverse = numSearchResults+1;
				
			//Hi ha RESULTATS, llavors continuem...	
				if (numSearchResults > 0)
				{
				// Ordenar Array de Resultats Alfabèticament
					//markersSearch = ordenarResults(markersSearch, 'Search');	
				// Ordenar Array de Resultats EDIFICI Alfabèticament
					markersEdfsSearch = ordenarResults(markersEdfsSearch, 'Search');	
				// Ordenar Array de Resultats UNITAT Alfabèticament
					markersUnitsSearch = ordenarResults(markersUnitsSearch, 'Search');
				//FuuuuuuuuuuuuuuuuuuuuuuuSIÓ JA!!!!!!!!!!!!!
					markersSearch = new Array();
					for(var i=0; i<markersEdfsSearch.length; i++) 
						markersSearch.push(markersEdfsSearch[i]);
					for(var i=0; i<markersUnitsSearch.length; i++) 
						markersSearch.push(markersUnitsSearch[i]);

				// Invertir Array de Resultats
					markersSearch.reverse();
	
				//GLOBAL: Edfs + Units								
					for (var i = 0; i < numSearchResults; i++)
					{
						indexReverse--;
						var name = markersSearch[i].getAttribute("name");
						var address = markersSearch[i].getAttribute("address");
						var point = new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")),
												parseFloat(markersSearch[i].getAttribute("lng")));
												
					//Determinar el tipus (Edfs, Units) de les dades
						if(markersSearch[i].getAttribute("idB") != null) tipus = 'Edfs';
						else tipus = 'Units';
						var markerHtml = createHtml(markersSearch[i], lang, tipus);
						var markerIcon = createIcon(lang, tipus, indexReverse);
						var markerIconLletra = createIcon2(lang, tipus, indexReverse);
						var markerIconXic = createIcon2(lang, tipus, -1);
					
						var marker = createMarker(point, markerIcon, markerHtml, tipus, indexReverse);
						var markerZIndex = createMarker2(point, markerIconLletra, markerHtml, 'zIndex', tipus, indexReverse);
						var markerLletra = createMarker2(point, markerIconLletra, markerHtml, 'lletra', tipus, indexReverse);
						var markerXic = createMarker2(point, markerIconXic, markerHtml, 'xic', tipus, indexReverse);
					//Variables para guardar los markers
						subArrayMarkers = new Array();
						subArrayMarkers[0] = markerLletra;
						subArrayMarkers[1] = markerZIndex;
						subArrayMarkers[2] = markerLletra;
						subArrayMarkers[3] = markerXic;
						gmarkersSearch3[indexReverse] = subArrayMarkers; //Insertats de N:Z a 0:A
						htmlsSearch.push(markerHtml);
					}
				/////////////////////////////////////////////////////////////////////
/*					function editBounds (myZoom, bounds, extraW, extraH, extra_zoom)
					{
						var normPro = G_NORMAL_MAP.getProjection();
						var swPixel, nePixel;
						var mapSize = map.getSize();
						var mapCenter = bounds.getCenter();
						var mapZoom = map.getBoundsZoomLevel(bounds, new GSize(mapSize.width - extraW, mapSize.height - extraH));
						mapZoom += extra_zoom;
						var pl = normPro.fromLatLngToPixel(new GLatLng(0,0), mapZoom);
						var px = normPro.fromPixelToLatLng(new GPoint(pl.x + (extraW), pl.y), mapZoom);
						var lat_lng = new GLatLng(mapCenter.lat(),mapCenter.lng() - px.lng());  
						mapZoom = (mapZoom > 17) ? 17 : mapZoom
						map.setCenter(lat_lng, mapZoom);
					}
*/				////////////////////////////////////////////////////////////////////////
				// This code makes sure that all results are visible
					var bounds = new GLatLngBounds();
					if (numSearchResults)
					{
						for (var i in markersSearch) 
							bounds.extend(new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), parseFloat(markersSearch[i].getAttribute("lng"))));
						//editBounds(map.getBoundsZoomLevel(bounds), bounds, 150, 5, 0);
						calcular_centrezoomMapa('cercaGeneralURL', idCampus, map.getBoundsZoomLevel(bounds), bounds, 150, 5, 0);
					}
					var nivellZoom=map.getBoundsZoomLevel(bounds);
					if(nivellZoom > 16)
						nivellZoom=16;
					map.setZoom(nivellZoom);
				} //if (numSearchResults > 0)
			//NO hi ha RESULTATS, llavors carreguem les dades NULL...
				else markersSearch = markersNoSearch;
					//Registrar paràmetres a la variable global: urlUPCmaps
						if(urlUPCmaps.indexOf('?') > 0) 
						urlUPCmaps = urlUPCmaps.slice(0,urlUPCmaps.indexOf('?'));
						urlUPCmaps += '?iS='+textCerca+'&iC='+idCampus+'&iL='+lang;

					//Mostrar els resultats CONJUNTS de la CERCA
						paginarResultats(markersSearch, textCerca, idCampus);
				});
			} //FI (request.readyState == 4)
		};
		request.send(null);
	} //FI (text_idMode == 'cercaText')
///////////////////////////////////////////////////////////////////////////////
//Executem la cerca BD (sense GSA) per ID
	if(text_idMode == 'cercaId')
	{		
	//Cargar DATOS de la BD: GAPI+ajax+php+xml+dom
	//////////////////////////////////////////////
		GDownloadUrl("http://maps.upc.edu/includes/xml/xml_SearchGSA.php?arrayIDsEdfs="+arrayIDsEdfs+"&arrayIDsUnits="+arrayIDsUnits+"&codiIDUnit="+codiIDUnit+"&idC="+idCampus+"&lang="+langBD, function(data)
		{
			var xml = GXml.parse(data);
			//markersSearch = xml.documentElement.getElementsByTagName("*");
		// Carregar Elements XML no buits
			if(arrayIDsEdfs) 
				markersEdfsSearch = xml.documentElement.getElementsByTagName("edifici_mark");
			if(arrayIDsUnits || codiIDUnit) 
				markersUnitsSearch = xml.documentElement.getElementsByTagName("unitat_mark");
		//Selecció XML dels NO resultats: getElementsByTagName("noResults_mark")
			markersNoSearch = xml.documentElement.getElementsByTagName("noResults_mark");
			
			var numSearchResults = markersEdfsSearch.length+markersUnitsSearch.length;
			var indexReverse = numSearchResults+1;
		
	//Hi ha RESULTATS, llavors continuem...	
		if (numSearchResults > 0)
		{
		// Ordenar Array de Resultats Alfabèticament
			//markersSearch = ordenarResults(markersSearch, 'Search');	
		// FuuuuuuuuuuuuuuuuuuuuuuuSIÓ JA!!!!!!!!!!!!!
			markersSearch = new Array();
			for(var i=0; i<markersEdfsSearch.length; i++) 
				markersSearch.push(markersEdfsSearch[i]);
			for(var i=0; i<markersUnitsSearch.length; i++) 
				markersSearch.push(markersUnitsSearch[i]);
		// Invertir Array de Resultats
			markersSearch.reverse();

		//GLOBAL: Edfs + Units								
			for (var i = 0; i < numSearchResults; i++)
			{
				indexReverse--;
				var name = markersSearch[i].getAttribute("name");
				var address = markersSearch[i].getAttribute("address");
				var point = new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")),
										parseFloat(markersSearch[i].getAttribute("lng")));
										
			//Determinar el tipus (Edfs, Units) de les dades
				if(markersSearch[i].getAttribute("idB") != null) tipus = 'Edfs';
				else tipus = 'Units';
				var markerHtml = createHtml(markersSearch[i], lang, tipus);
				var markerIcon = createIcon(lang, tipus, indexReverse);
				var markerIconLletra = createIcon2(lang, tipus, indexReverse);
				var markerIconXic = createIcon2(lang, tipus, -1);
			
				var marker = createMarker(point, markerIcon, markerHtml, tipus, indexReverse);
				var markerZIndex = createMarker2(point, markerIconLletra, markerHtml, 'zIndex', tipus, indexReverse);
				var markerLletra = createMarker2(point, markerIconLletra, markerHtml, 'lletra', tipus, indexReverse);
				var markerXic = createMarker2(point, markerIconXic, markerHtml, 'xic', tipus, indexReverse);
			//Variables para guardar los markers
				subArrayMarkers = new Array();
				subArrayMarkers[0] = markerLletra;
				subArrayMarkers[1] = markerZIndex;
				subArrayMarkers[2] = markerLletra;
				subArrayMarkers[3] = markerXic;
				gmarkersSearch3[indexReverse] = subArrayMarkers; //Insertats de N:Z a 0:A
				htmlsSearch.push(markerHtml);
			}
			// This code makes sure that all results are visible
				bounds = new GLatLngBounds();
				for (var i in markersSearch) 
					bounds.extend(new GLatLng(parseFloat(markersSearch[i].getAttribute("lat")), parseFloat(markersSearch[i].getAttribute("lng"))));
		} //if (numSearchResults > 0)
	//NO hi ha RESULTATS, llavors carreguem les dades NULL...
		else markersSearch = markersNoSearch;
			//Registrar paràmetres a la variable global: urlUPCmaps
				if(urlUPCmaps.indexOf('?') > 0) 
				urlUPCmaps = urlUPCmaps.slice(0,urlUPCmaps.indexOf('?'));
				urlUPCmaps += '?iS='+textCerca+'&iC='+idCampus+'&iL='+lang;

			//Mostrar els resultats CONJUNTS de la CERCA
				(name)? textCerca = name : textCerca = '-';
				iC_temp = idCampus;
				setTimeout("if(iC_temp != ''){if(bounds){calcular_centrezoomMapa('cercaGeneralURL', iC_temp, map.getBoundsZoomLevel(bounds), bounds, 150, 5, 0);} paginarResultats(markersSearch, textCerca, iC_temp);}", 500);
		});	
	} //FI (text_idMode == 'cercaId')
}
/////////////////////////////////////////////////
// Mapejar Marcadors dels Resultats de la Cerca
/////////////////////////////////////////////////
function mapejarResultatsCerca(pag)
{
	var indexIni = ((pag-1)*NUM_ResultatsPag);
	var indexFin = (pag*NUM_ResultatsPag)+1;

	for(var j=gmarkersSearch3.length-1; j>0; j--)
	{
		///////////////////////////////////////////////////////////
		// gmarkersSearch[0][0] -> marker actual
		// gmarkersSearch[0][1] -> marker amb lletra z-index:99999
		// gmarkersSearch[0][2] -> marker amb lletra
		// gmarkersSearch[0][3] -> marker xic
		///////////////////////////////////////////////////////////
		if (j>indexIni && j<indexFin)
		{	
			if(!gmarkersSearch3[j][0].isHidden()) gmarkersSearch3[j][0].hide();
			map.addOverlay(gmarkersSearch3[j][2]);
			if(iU_param != '')
			{
				gmarkersSearch3[j][2].openInfoWindowTabsHtml(htmlsSearch[0]);
				iU_param = '';
			}
			else if(iCodi_param != '')
			{
				gmarkersSearch3[j][2].openInfoWindowTabsHtml(htmlsSearch[0]);
				iCodi_param = '';
			}
			else if(iE_param != '')
			{
				gmarkersSearch3[j][2].openInfoWindowTabsHtml(htmlsSearch[0]);
				iE_param = '';
			}
			gmarkersSearch3[j][0] = gmarkersSearch3[j][2];
		}
		else
		{
			if(!gmarkersSearch3[j][0].isHidden()) gmarkersSearch3[j][0].hide();
			map.addOverlay(gmarkersSearch3[j][3]);
			gmarkersSearch3[j][0] = gmarkersSearch3[j][3];
		}
	}
}

/***************************************
****************************************
******* FUNCIONS PER UTILITATS *********
****************************************
****************************************/
function imprimirPopup()
{
	printzoom =  map.getZoom();
	printcenter = map.getCenter();
	var newwindow = window.open('includes/php/printmap.php?lang='+lang,"printwindow");
	newwindow.focus();
}

function veureLink(urlCustom)
{
	$("#inputLink")[0].value = urlCustom;
	var urlCustomIFrame=urlCustom.replace('maps.upc.edu/','http://maps.upc.edu/embed.php');
	$("#inputIframe")[0].value = '<iframe width="540" height="400" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="'+urlCustomIFrame+'"></iframe><br /><small><a href="http://'+urlCustom+'" style="color:#0000FF;text-align:left">Veure el mapa més gran</a></small>';
	if ($("#pageLinkDisplay").css('display') == 'none')
		$("#pageLinkDisplay").show("slow");
	else $("#pageLinkDisplay").hide("slow");
}

function veureAjuda(urlCustom)
{
	$("#inputLink")[0].value = urlCustom;
	if ($("#pageLinkDisplay").css('display') == 'none')
		$("#pageLinkDisplay").show("slow");
	else $("#pageLinkDisplay").hide("slow");
}

function escriureCorreu(urlCustom)
{
	$("#inputLink")[0].value = urlCustom;
	if ($("#pageLinkDisplay").css('display') == 'none')
		$("#pageLinkDisplay").show("slow");
	else $("#pageLinkDisplay").hide("slow");
}
/***************************************
****************************************
*********** ALTRES FUNCIONS ************
****************************************
****************************************/
// Ordenar profunditat del Marcador
////////////////////////////////////
function orderOfCreation (marker,b) 
{
	return 1;
}

// Ordenar Array Alfabèticament
/////////////////////////////////////////
function ordenarResults(arrayObj, tipus) 
{
	var arrayTmp = new Array();
	for(var i=0; i<arrayObj.length; i++) arrayTmp.push(arrayObj[i]);
					
	if(tipus == 'Search') arrayTmp.sort(new Function("x","y","return (x.getAttribute('name')<y.getAttribute('name'))?-1:(x.getAttribute('name')>y.getAttribute('name'))?1:0;"));
	return arrayTmp;
}

// Calcular Centre+Zoom del Mapa
//////////////////////////////////
function calcular_centrezoomMapa (tipus_cerca, myCampus, myZoom, bounds, extraW, extraH, extra_zoom)
{
	var normPro = G_NORMAL_MAP.getProjection();
	var mapSize = map.getSize();
	var mapCenter = bounds.getCenter();
	if(tipus_cerca == 'cercaGeneralURL') var mapZoom = 14;
	else var mapZoom = map.getBoundsZoomLevel(bounds, new GSize(mapSize.width-extraW, mapSize.height));
	
	if (tipus_cerca == 'cercaGuiada')
	{
		mapZoom += extra_zoom;
		mapZoom = (mapZoom > 16) ? 16 : mapZoom;
		if(myCampus == 8) mapZoom = 14;
	}
	var pl = normPro.fromLatLngToPixel(new GLatLng(0,0), mapZoom);
	var px = normPro.fromPixelToLatLng(new GPoint(pl.x + (extraW/2), pl.y), mapZoom);
	var lat_lng = new GLatLng(mapCenter.lat(),mapCenter.lng() - px.lng());

	if(tipus_cerca == 'cercaGeneralURL') mapZoom = 14;
	map.setCenter(lat_lng, mapZoom);
}

// Conversor de Coordenades Geogràfiques a Coordenades UTM (Graus)	
//////////////////////////////////////////////////////////////////
function convertirCoordenades2Graus(lat, long)
{
	var signlat = 1;
	var signlon = 1;
	var latAbs=0;
	var lonAbs=0;

	if(lat < 0)  { signlat = -1; }
	latAbs = Math.abs( Math.round(lat * 1000000.));
	if(long < 0)  { signlon = -1; }
	lonAbs = Math.abs(Math.round(long * 1000000.));
	//Math.round is used to eliminate the small error caused by rounding in the computer:
	//e.g. 0.2 is not the same as 0.20000000000284
	//alert('LAT: '+latAbs+' LONG: '+lonAbs);
//Error checks
	if(latAbs > (90 * 1000000)) 
	{ 
		alert(' Degrees Latitude must be in the range of -90. to 90. ');
		lat = '';  latAbs=0;
	}
	if(lonAbs > (180 * 1000000)) 
	{
		alert(' Degrees Longitude must be in the range of -180 to 180. '); 
		long = '';  lonAbs=0; 
	}
//Calculate
	latRes = ((Math.floor(latAbs/1000000) * signlat) + '&deg; ' + Math.floor(  ((latAbs/1000000) - Math.floor(latAbs/1000000)) * 60)  + '\' ' +  Math.floor( Math.floor(((((latAbs/1000000) - Math.floor(latAbs/1000000)) * 60) - Math.floor(((latAbs/1000000) - Math.floor(latAbs/1000000)) * 60)) * 100000) *60/100000 ) + '&quot;'  );
	longRes = ((Math.floor(lonAbs/1000000) * signlon) + '&deg; ' + Math.floor(  ((lonAbs/1000000) - Math.floor(lonAbs/1000000)) * 60)  + '\' ' +  Math.floor( Math.floor(((((lonAbs/1000000) - Math.floor(lonAbs/1000000)) * 60) - Math.floor(((lonAbs/1000000) - Math.floor(lonAbs/1000000)) * 60)) * 100000) *60/100000 ) + '&quot;'  );
	signlat=1;
	signlon=1;

// Retornem el resultat de la conversió
	var resultatConv = latRes+" N, "+longRes+" E";
	return resultatConv;
}
/***********************************************************************************************/
/***********************************************************************************************/
/***********************************************************************************************/
