try {
	google.load("earth", "1");
	google.load("maps", "2.128"); // 2 perque funcionen les lineas, 2.99 For
	// JS geocoder
} catch (e) {}

// GMaps / GEarth
// 11 = 22400
// 12 = 11200
// 13 = 5600
// 14 = 2800
// 15 = 1400
// 16 = 700
// 17 = 350
// 18 = 175

// Constants
var ZOOM_BASE_CONVERSIO = 16;
var METRES_BASE_CONVERSIO = 1200;

var map = null; // 2D
var ge = null; // 3D

// 2D
var mrkOrigen = null;
var mrkDesti = null;

// 3D
var mrkOrigen3D = null;
var mrkDesti3D = null;

var styleMap = null;

var pntOrigen = null;
var xyOrigen = new Array(2);
var pntDesti = null;
var xyDesti = new Array(2);
var mrk = null;
var mrk3D = null;
var desX = 93.74636705;
var desY = 204.2073194;

var resultat = null;
var polylineRecorregut = null;
var lineStringPlacemarkRecorregut = null;
var polyline = null;
var lineStringPlacemark = null;
var lineStringPlacemarks=[];
var polylines = [];

// Guarda les posicions X,Y de la ruta
var arRutaX = new Array();
var arRutaY = new Array();

var SUFIX_LOCALITZACIO_GMAPS = ", Catalunya, Espanya";
var ZONA_UTM = 31;

// Array descripcio resultats
var arrRes;
var arrResDes;
var arrResTer;

/*
 * David Pérez Herranz 24-11-2009 Modificacions per calcular la ruta a peu i en
 * bicicleta de forma m�s correcta
 */

var directions = [];
var noms1 = [];
var noms2 = [];
var punts2 = [];
var punts1 = [];

var boundsGeneral;
var direction;

/*
 * David Pérez Herranz 24-11-2009 FIN Modificacions per calcular la ruta a peu i
 * en bicicleta de forma m�s correcta
 */

/*
 * David Pérez Herranz 25-11-2009 INICI Modificacions per imprimir ruta
 */
	
var markers=null;
var path="";
var idSelectRuta=1;
var arrResTerImp= new Array();
var strAlternativaSel=new Array();
var strOrigen="";
var strDesti="";
var strModTrans= "";
	
/*
 * David Pérez Herranz 25-11-2009 FIN  Modificacions per imprimir ruta
 */

/*
 * David Pérez Herranz 22-12-2009 INICI Modificacions per Street View
 */

var myPano;   
var panoClient;
var houseMarker;
var guyIcon;
var svOverlay;

/*
 * David Pérez Herranz 22-12-2009 FIN Modificacions per Street View
 */

var trMap;
var tdstreet;
var bStreet = false;

function orderOfCreation2(marker,b) {
    return 1;
  } 

function orderOfCreation(marker,b) {
    return 10000;
  } 

function fPutMarker(x, y, nomPunt) {
	var baseIcon = new GIcon(G_DEFAULT_ICON);
	var OrigenIcon = new GIcon(baseIcon);
	var DestinoIcon = new GIcon(baseIcon);
	// 2D
	var latlon = new Array(2);

	var letteredIcon = new GIcon(baseIcon);
	letteredIcon.image = "../img/blue_Marker.png";

	UTMXYToLatLon(x - desX, y - desY, ZONA_UTM, false, latlon);
	var punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
	mrk = new GMarker(punt, {
		icon : DestinoIcon,
		clickable : false,
		draggable : false,
		title : nomPunt,
		zIndexProcess:orderOfCreation2
	});
	
	map.addOverlay(mrk);
	if(markers==null){
		markers=""+punt.lat().toFixed(3)+","+punt.lng().toFixed(3);
	}else{
		markers+="|"+punt.lat().toFixed(3)+","+punt.lng().toFixed(3);
	}

	// 3D

	if (ge != null) {
		mrk3D = ge.createPlacemark('');
		mrk3D.setName(nomPunt);
		ge.getFeatures().appendChild(mrk3D);
		mrk3D.setStyleSelector(styleMap);
		var point = ge.createPoint('');
		point.setLatitude(RadToDeg(latlon[0]));
		point.setLongitude(RadToDeg(latlon[1]));
		mrk3D.setGeometry(point);
	}
}

function fPutLine(UTMsX, UTMsY) {

	var punt;

	// 2D
	var latlon = new Array(2);
	if (polyline != null) {
		map.removeOverlay(polyline);
	}
	var bounds = new GLatLngBounds();
	if (UTMsX.length >= 1) {
		UTMXYToLatLon(UTMsX[0] - desX, UTMsY[0] - desY, ZONA_UTM, false, latlon);
		polyline = new GPolyline( [ new GLatLng(RadToDeg(latlon[0]),
				RadToDeg(latlon[1]), true) ], "#FFFF00", 8, 0.7);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		map.addOverlay(polyline);
		bounds.extend(punt);
	}

	for (i = 1; i < UTMsX.length; i++) {
		UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false, latlon);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		polyline.insertVertex(i, punt);
		bounds.extend(punt);
	}
	polyline.deleteVertex(UTMsX.length);
	
	if(bStreet) {
		houseMarker.setLatLng(polyline.getVertex(0));
		panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
	}

	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());

	// 3D
	if (ge != null) {
		if (lineStringPlacemark != null) {
			ge.getFeatures().removeChild(lineStringPlacemark);
		}
		lineStringPlacemark = ge.createPlacemark('');
		var lineString = ge.createLineString('');
		lineStringPlacemark.setGeometry(lineString);
		lineString.setTessellate(true);
		for (i = 0; i < UTMsX.length; i++) {
			UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false,
					latlon);
			punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
			lineString.getCoordinates()
					.pushLatLngAlt(punt.lat(), punt.lng(), 0);
		}
		ge.getFeatures().appendChild(lineStringPlacemark);
		lineStringPlacemark.setStyleSelector(ge.createStyle(''));
		var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
		lineStyle.setWidth(8);
		lineStyle.getColor().set("FF00FFFF"); // aabbggrr format

		var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
		var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
		var la = ge.createLookAt('');
		la.set(bounds.getCenter().y, bounds.getCenter().x, 100,
				ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
		ge.getView().setAbstractView(la);
	}

}

function fPutLineBlue(iter2, UTMsX, UTMsY) {
	
	var punt;

	// 2D
	var latlon = new Array(2);
	if (polylines[iter2] != null) {
		map.removeOverlay(polylines[iter2]);
	}
	if(boundsGeneral==null){
		boundsGeneral = new GLatLngBounds();
	}
	if (UTMsX.length >= 1) {
		UTMXYToLatLon(UTMsX[0] - desX, UTMsY[0] - desY, ZONA_UTM, false, latlon);
		polylines[iter2] = new GPolyline( [ new GLatLng(RadToDeg(latlon[0]),
				RadToDeg(latlon[1]), true) ], "#0031a2", 8, 0.7);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		map.addOverlay(polylines[iter2]);
		boundsGeneral.extend(punt);
	}

	for (i = 1; i < UTMsX.length; i++) {
		UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false, latlon);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		polylines[iter2].insertVertex(i, punt);
		boundsGeneral.extend(punt);
	}
	polylines[iter2].deleteVertex(UTMsX.length);

	map.setZoom(map.getBoundsZoomLevel(boundsGeneral));
	map.setCenter(boundsGeneral.getCenter());

	// 3D
	if (ge != null) {
		if (lineStringPlacemarks[iter2] != null) {
			ge.getFeatures().removeChild(lineStringPlacemarks[iter2]);
		}
		lineStringPlacemarks[iter2] = ge.createPlacemark('');
		var lineString = ge.createLineString('');
		lineStringPlacemarks[iter2].setGeometry(lineString);
		lineString.setTessellate(true);
		for (i = 0; i < UTMsX.length; i++) {
			UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false,
					latlon);
			punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
			lineString.getCoordinates()
					.pushLatLngAlt(punt.lat(), punt.lng(), 0);
		}
		ge.getFeatures().appendChild(lineStringPlacemarks[iter2]);
		lineStringPlacemarks[iter2].setStyleSelector(ge.createStyle(''));
		var lineStyle = lineStringPlacemarks[iter2].getStyleSelector().getLineStyle();
		lineStyle.setWidth(8);
		lineStyle.getColor().set("B2A23100"); // aabbggrr format

		var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
		var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
		var la = ge.createLookAt('');
		la.set(boundsGeneral.getCenter().y, boundsGeneral.getCenter().x, 100,
				ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
		ge.getView().setAbstractView(la);
	}
	endAll();

}

function fPutLineGreen(iter2, UTMsX, UTMsY) {
	
	var punt;

	// 2D
	var latlon = new Array(2);
	if (polylines[iter2] != null) {
		map.removeOverlay(polylines[iter2]);
	}
	if(boundsGeneral==null){
		boundsGeneral = new GLatLngBounds();
	}
	if (UTMsX.length >= 1) {
		UTMXYToLatLon(UTMsX[0] - desX, UTMsY[0] - desY, ZONA_UTM, false, latlon);
		polylines[iter2] = new GPolyline( [ new GLatLng(RadToDeg(latlon[0]),
				RadToDeg(latlon[1]), true) ], "#019587", 8, 0.7);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		map.addOverlay(polylines[iter2]);
		boundsGeneral.extend(punt);
	}

	for (i = 1; i < UTMsX.length; i++) {
		UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false, latlon);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		polylines[iter2].insertVertex(i, punt);
		boundsGeneral.extend(punt);
	}
	polylines[iter2].deleteVertex(UTMsX.length);

	map.setZoom(map.getBoundsZoomLevel(boundsGeneral));
	map.setCenter(boundsGeneral.getCenter());

	// 3D
	if (ge != null) {
		if (lineStringPlacemarks[iter2] != null) {
			ge.getFeatures().removeChild(lineStringPlacemarks[iter2]);
		}
		lineStringPlacemarks[iter2] = ge.createPlacemark('');
		var lineString = ge.createLineString('');
		lineStringPlacemarks[iter2].setGeometry(lineString);
		lineString.setTessellate(true);
		for (i = 0; i < UTMsX.length; i++) {
			UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false,
					latlon);
			punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
			lineString.getCoordinates()
					.pushLatLngAlt(punt.lat(), punt.lng(), 0);
		}
		ge.getFeatures().appendChild(lineStringPlacemarks[iter2]);
		lineStringPlacemarks[iter2].setStyleSelector(ge.createStyle(''));
		var lineStyle = lineStringPlacemarks[iter2].getStyleSelector().getLineStyle();
		lineStyle.setWidth(8);
		lineStyle.getColor().set("B2879501"); // aabbggrr format

		var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
		var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
		var la = ge.createLookAt('');
		la.set(boundsGeneral.getCenter().y, boundsGeneral.getCenter().x, 100,
				ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
		ge.getView().setAbstractView(la);
	}
	endAll();

}

function fPutLineSencera(UTMsX, UTMsY) {

	var punt;

	arRutaX = UTMsX;
	arRutaY = UTMsY;

	// Interficie
	document.getElementById("botoNavegar").style.visibility = "visible";

	// 2D
	var latlon = new Array(2);
	if (polylineRecorregut != null) {
		map.removeOverlay(polylineRecorregut);
	}
	var bounds = new GLatLngBounds();
	if (UTMsX.length >= 1) {
		UTMXYToLatLon(UTMsX[0] - desX, UTMsY[0] - desY, ZONA_UTM, false, latlon);
		polylineRecorregut = new GPolyline( [ new GLatLng(RadToDeg(latlon[0]),
				RadToDeg(latlon[1]), true) ], "#0031a2", 8, 0.7);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		map.addOverlay(polylineRecorregut);
		bounds.extend(punt);
	}

	for (i = 1; i < UTMsX.length; i++) {
		UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false, latlon);
		punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
		polylineRecorregut.insertVertex(i, punt);
		bounds.extend(punt);
	}
	polylineRecorregut.deleteVertex(UTMsX.length);

	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());

	// 3D
	if (ge != null) {
		if (lineStringPlacemarkRecorregut != null) {
			ge.getFeatures().removeChild(lineStringPlacemarkRecorregut);
		}
		lineStringPlacemarkRecorregut = ge.createPlacemark('');
		var lineString = ge.createLineString('');
		lineStringPlacemarkRecorregut.setGeometry(lineString);
		lineString.setTessellate(true);
		for (i = 0; i < UTMsX.length; i++) {
			UTMXYToLatLon(UTMsX[i] - desX, UTMsY[i] - desY, ZONA_UTM, false,
					latlon);
			punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);
			lineString.getCoordinates()
					.pushLatLngAlt(punt.lat(), punt.lng(), 0);
		}
		ge.getFeatures().appendChild(lineStringPlacemarkRecorregut);
		lineStringPlacemarkRecorregut.setStyleSelector(ge.createStyle(''));
		var lineStyle = lineStringPlacemarkRecorregut.getStyleSelector()
				.getLineStyle();
		lineStyle.setWidth(8);
		lineStyle.getColor().set("B2A23100"); // aabbggrr format

		var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
		var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
		var la = ge.createLookAt('');
		la.set(bounds.getCenter().y, bounds.getCenter().x, 100,
				ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
		ge.getView().setAbstractView(la);
	}
}

function load() {
	if (GBrowserIsCompatible()) {

		// 2D
		map = new GMap2(document.getElementById("map"));

		map.setCenter(new GLatLng(41.4, 2.2), 11);
		map.enableScrollWheelZoom();
		//map.enableContinuousZoom();
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		panoClient = new GStreetviewClient();      
		myPano = new GStreetviewPanorama(document.getElementById("streeView"));
		guyIcon = new GIcon(G_DEFAULT_ICON);
		guyIcon.image = "http://maps.gstatic.com/mapfiles/cb/man_arrow-0.png";
		guyIcon.transparent = "http://maps.gstatic.com/mapfiles/cb/man-pick.png";
		guyIcon.imageMap = [
		        26,13, 30,14, 32,28, 27,28, 28,36, 18,35, 18,27, 16,26,
		        16,20, 16,14, 19,13, 22,8
		     ];
		guyIcon.iconSize = new GSize(49, 52);
		guyIcon.iconAnchor = new GPoint(25, 35);  // near base of guy's feet
		guyIcon.infoWindowAnchor = new GPoint(25, 5);  // top of guy's head

		svOverlay = new GStreetviewOverlay();

		// 3D
		google.earth.createInstance("map3d", initCB, failureCB);
	}
	
	trMap = document.getElementById("trMap");
	tdstreet = document.getElementById("tdstreet");
	
	try{
		trMap.removeChild(tdstreet);
	}catch (e) {}
}

// 3D
function initCB(object) {
	ge = object;
	ge.getWindow().setVisibility(true);

	// Inicialitzar bbox
	var la = ge.createLookAt('');
	la.set(41.4, 2.2, 100, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 22400);
	ge.getView().setAbstractView(la);

	// Inicialització estils
	var normal = ge.createIcon('');
	normal.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
	var iconNormal = ge.createStyle('');
	iconNormal.getIconStyle().setIcon(normal);
	var highlight = ge.createIcon('');
	highlight.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
	var iconHighlight = ge.createStyle('');
	iconHighlight.getIconStyle().setIcon(highlight);
	styleMap = ge.createStyleMap('');
	styleMap.setNormalStyle(iconNormal);
	styleMap.setHighlightStyle(iconHighlight);

	try {
		putAll(1);
	} catch (e) { }

}

// 3D
function failureCB(object) {
	ge = null;
	try {
		putAll(1);
	} catch (e) { }
}

function anarA(x, y) {

	var latlon = new Array(2);
	var desvLon = 0.002538;
	var desvLat = 0.002217;
	UTMXYToLatLon(x - desX, y - desY, ZONA_UTM, false, latlon);
	var punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]), true);

	// 2D
	map.setCenter(punt, 16);

	// 3D
	if (ge != null) {
		var la = ge.createLookAt('');
		la.set(punt.y, punt.x, 100, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 700);
		ge.getView().setAbstractView(la);
	}
	if(bStreet) {
		houseMarker.setLatLng(punt);
		if (!bNavegant) {
			panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
		}		
	}
}

function changeImage(identi) {
	if (identi == '2D' && (document.getElementById("map3d").style.width != "0px")) {
		document.getElementById('2D').style.backgroundImage = "url(../img/btn2D.png)";
	} else if (identi == '3D'
			&& document.getElementById("map3d").style.width == "0px") {
		document.getElementById("3D").style.backgroundImage = "url(../img/btn3D.png)";
	}else if (identi == 'street'
			&& !bStreet) {
		document.getElementById('streetView').style.backgroundImage = 'url(../img/btnstreetView.png)';
	}
}

function getWidth(){
	var myWidth = 0;
	if (typeof (window.innerWidth) == 'number') {
		// Non-IE
		myWidth = window.innerWidth;
	} else if (document.documentElement
			&& (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		// IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
	} else if (document.body
			&& (document.body.clientWidth || document.body.clientHeight)) {
		// IE 4 compatible
		myWidth = document.body.clientWidth;
	}
	myWidth = (((myWidth * 75) / 100) - 10);
	myWidth = String(myWidth);
	myWidth = myWidth.split(".")[0];
	return myWidth;
}

function getSemiWidth(){
	var myWidth = 0;
	if (typeof (window.innerWidth) == 'number') {
		// Non-IE
		myWidth = window.innerWidth - 10;
	} else if (document.documentElement
			&& (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		// IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myWidth = myWidth - 10; 
	} else if (document.body
			&& (document.body.clientWidth || document.body.clientHeight)) {
		// IE 4 compatible
		myWidth = document.body.clientWidth;
		myWidth = myWidth - 10; 
	}
	myWidth = (((myWidth * 75) / 100) - 10)/2;
	myWidth = String(myWidth);
	myWidth = myWidth.split(".")[0];
	return myWidth;
}

function OnSwapViewers(identi) {

	if (identi == '2D'){		
				
		try{
			bStreet=false;
			trMap.removeChild(tdstreet);
		}catch (e) {}
		
		var bounds = map.getBounds(); 
		var myWidth = getWidth();
		document.getElementById("map").style.width = myWidth + "px";
		document.getElementById("map").style.visibility = "visible";
		map.checkResize(); 
		map.setZoom(map.getBoundsZoomLevel(bounds));
		map.setCenter(bounds.getCenter());
		map.removeOverlay(houseMarker);
		map.removeOverlay(svOverlay);
		document.getElementById("2D").style.backgroundImage = "url(../img/btn2DHover.png)";
		
		if(document.getElementById("map3d").style.width != "0px") {
			document.getElementById("map").style.visibility = "visible";
			
			// 3D no visible
			document.getElementById("map3d").style.width = "0px";
			document.getElementById("map3d").style.height = "0px";

			// Passar bbox de 2D a 3D
			if (ge != null) {

				var iZoom;
				var la;
				var coeficient;

				la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
				coeficient = (la.getRange() / METRES_BASE_CONVERSIO);
				iZoom = Math.round(ZOOM_BASE_CONVERSIO - Math.log(coeficient) / Math.LN2); // Logaritme base 2 de coeficient
				
				if (iZoom > 18) {
					iZoom = 17;
				}
				map.setCenter(new GLatLng(la.getLatitude(), la.getLongitude()),iZoom);
			}

			document.getElementById("3D").style.backgroundImage = "url(../img/btn3D.png)";			

			// Ajuda3D
			document.getElementById("divHelp3D").style.visibility = "hidden";			
		}
	}
	else if (identi == '3D' && document.getElementById("map3d").style.width == "0px") {
		
		var myWidth = getWidth();
				
		try{
			bStreet=false;
			trMap.removeChild(tdstreet);
			var bounds = map.getBounds(); 
			document.getElementById("map").style.width = myWidth + "px";
			document.getElementById("map").style.visibility = "visible";
			map.checkResize(); 
			map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());
			map.removeOverlay(houseMarker);
			map.removeOverlay(svOverlay);
		}catch (e) {}

		// 3D visible
		document.getElementById("map3d").style.top = "" + document.getElementById("map").offsetTop + "px";
		document.getElementById("map3d").style.left = "" + document.getElementById("map").offsetLeft + "px";
		document.getElementById("map3d").style.width = myWidth + "px";
		document.getElementById("map3d").style.height = "" + document.getElementById("map").style.height;
		
		// Passar bbox de 2D a 3D

		if (ge != null) {
			var iDiferenciaZoom;
			var iAmpleMetres;
			var punt;

			iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
			iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
			punt = map.getCenter();

			var la = ge.createLookAt('');
			la.set(punt.y, punt.x, 100, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
			ge.getView().setAbstractView(la);
		}

		// Ajuda3D
		document.getElementById("divHelp3D").style.visibility = "visible";

		document.getElementById("map").style.visibility = "hidden";
		document.getElementById("3D").style.backgroundImage = "url(../img/btn3DHover.png)";
		document.getElementById("2D").style.backgroundImage = "url(../img/btn2D.png)";
		document.getElementById('streetView').style.backgroundImage = 'url(../img/btnstreetView.png)';
		map.removeOverlay(houseMarker);
		map.removeOverlay(svOverlay);		
	} else if(identi == 'street'
		&& !bStreet) {
		
		bStreet=true;
		
		try{
			trMap.removeChild(tdstreet);
		}catch (e) {}
		
		trMap.appendChild(tdstreet);		
		
		if(document.getElementById("map3d").style.width != "0px"){
			// Hem de canviar a 2D pero amb la meitat de la mida
			
			var myWidth = getSemiWidth();
			document.getElementById("map").style.width = myWidth + "px";
			document.getElementById("map").style.visibility = "visible";			
			document.getElementById("tdmap").style.width = myWidth + "px";			
			document.getElementById("tdstreet").style.width = myWidth + "px";
			document.getElementById("streeView").style.width = myWidth + "px";
			document.getElementById("streeView").style.height = ""	+ document.getElementById("map").style.height;
			document.getElementById("streeView").style.left = "" + (document.getElementById("map").offsetLeft + myWidth +1) + "px";
			
			document.getElementById("streeView").style.visibility = "visible";
			
			// // 2D // //

			// 3D no visible
			document.getElementById("map3d").style.width = "0px";
			document.getElementById("map3d").style.height = "0px";
			map.checkResize();

			// Passar bbox de 2D a 3D
			if (ge != null) {
				var iZoom;
				var la;
				var coeficient;
				la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
				coeficient = (la.getRange() / METRES_BASE_CONVERSIO);
				iZoom = Math.round(ZOOM_BASE_CONVERSIO - Math.log(coeficient) / Math.LN2); // Logaritme base 2 de coeficient
				if (iZoom > 18) {
					iZoom = 17;
				}
				map.setCenter(new GLatLng(la.getLatitude(), la.getLongitude()), iZoom);
			}
			
			if(panoClient==null){
			  	panoClient=new GStreetviewClient();
			}
			if(myPano==null){
				myPano = new GStreetviewPanorama(document.getElementById("streeView"));
			}
			if(svOverlay==null){
				svOverlay = new GStreetviewOverlay();
			}
			
			setPanoMarker();
		    map.addOverlay(svOverlay);	

			document.getElementById("3D").style.backgroundImage = "url(../img/btn3D.png)";
			document.getElementById("2D").style.backgroundImage = "url(../img/btn2D.png)";
			document.getElementById('streetView').style.backgroundImage = 'url(../img/btnstreetViewHover.png)';

			// Ajuda3D
			document.getElementById("divHelp3D").style.visibility = "hidden";
			
		}
		else{
			var bounds = map.getBounds(); 
			var myWidth = getSemiWidth();
			document.getElementById("map").style.width = myWidth + "px";
			document.getElementById("map").style.visibility = "visible";
			document.getElementById("tdmap").style.width = myWidth + "px";			
			document.getElementById("tdstreet").style.width = myWidth + "px";
			document.getElementById("streeView").style.width = myWidth + "px";
			document.getElementById("streeView").style.height = ""	+ document.getElementById("map").style.height;
			document.getElementById("streeView").style.left = "" + (document.getElementById("map").offsetLeft + myWidth +1) + "px";
			map.checkResize(); 
			//map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());
			
			document.getElementById("streeView").style.visibility = "visible";
			
			if(panoClient==null){
			  	panoClient=new GStreetviewClient();
			}
			if(myPano==null){
				myPano = new GStreetviewPanorama(document.getElementById("streeView"));
			}
			if(svOverlay==null){
				svOverlay = new GStreetviewOverlay();
			}
			setPanoMarker();
		    map.addOverlay(svOverlay);

			document.getElementById("3D").style.backgroundImage = "url(../img/btn3D.png)";
			document.getElementById("2D").style.backgroundImage = "url(../img/btn2D.png)";
			document.getElementById('streetView').style.backgroundImage = 'url(../img/btnstreetViewHover.png)';

			// Ajuda3D
			document.getElementById("divHelp3D").style.visibility = "hidden";
		}
	} else if(identi == 'street') {
		setPanoMarker();   
	}
}

function setPanoMarker(){
	var sizeActual = map.getSize();
	var MiddleHeight = sizeActual.height/2;
	var entero2 = Math.round(MiddleHeight)+90; 
	
	var pxsw1 = new GPoint(36,entero2);
	var sw1 = map.fromContainerPixelToLatLng(pxsw1);
	if(houseMarker!=null){
		map.removeOverlay(houseMarker);
	}
	houseMarker=null;
	houseMarker = new GMarker(sw1, {icon: guyIcon, draggable: true,	zIndexProcess:orderOfCreation});
    map.addOverlay(houseMarker); 
    GEvent.addListener(houseMarker, "dragend", function() {
        panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
    });
}

function showPanoData(panoData) {
	if (panoData.code != 200) {
		//alert('showPanoData: Server rejected with code: ' + panoData.code);
		return;
	}
	//alert(panoData.location.latlng);

	var angle = computeAngle(houseMarker.getLatLng(), panoData.location.latlng);
	myPano.setLocationAndPOV(panoData.location.latlng, {yaw: angle});
}

function computeAngle(endLatLng, startLatLng) {
    var DEGREE_PER_RADIAN = 57.2957795;
    var RADIAN_PER_DEGREE = 0.017453;

    var dlat = endLatLng.lat() - startLatLng.lat();
    var dlng = endLatLng.lng() - startLatLng.lng();
    // We multiply dlng with cos(endLat), since the two points are very closeby,
    // so we assume their cos values are approximately equal.
    var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
           * DEGREE_PER_RADIAN;
    return wrapAngle(yaw);
 }

 function wrapAngle(angle) {
  if (angle >= 360) {
    angle -= 360;
  } else if (angle < 0) {
   angle += 360;
  }
  return angle;
};

var NUM_STEP;
var iNavegarStep;
var iNavegarPunt;
var idIntervalNavegacio;
var idIntervalNavegacio3D;
var bNavegant = false;

function fNavegarRuta() {

	if (bNavegant) {
		if (idIntervalNavegacio > 0) {
			clearInterval(idIntervalNavegacio);
		}
		if (idIntervalNavegacio3D > 0) {
			clearInterval(idIntervalNavegacio3D);
		}
		bNavegant = false;

		// Interficie
		document.getElementById("botoNavegarText").innerHTML = strSimulPlay;
		
		if(bStreet) {
			houseMarker.setLatLng(map.getCenter());
			panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
		}

	} else {
		if (document.getElementById("map3d").style.width != "0px") {
			// 3D
			if (ge != null) {
				iNavegarPunt = 0;
				idIntervalNavegacio3D = setInterval("fNavegarStep3D()", 2500);
			}
		} else {
			// 2D
			iNavegarStep = 0;
			iNavegarPunt = 0;
			NUM_STEP = 20;
			idIntervalNavegacio = setInterval("fNavegarStep()", 50);
		}
		bNavegant = true;
		// Interficie
		document.getElementById("botoNavegarText").innerHTML = strSimulStop;
	}
}

function fNavegarStep3D() {
	var punt;
	var puntDesti;

	if (ge != null) {
		if (arRutaX == null) {
			clearInterval(idIntervalNavegacio3D);
			bNavegant = false;
			// Interficie
			document.getElementById("botoNavegarText").innerHTML = strSimulPlay;
		} else if (iNavegarPunt == arRutaX.length) {
			clearInterval(idIntervalNavegacio3D);
			bNavegant = false;
			// Interficie
			document.getElementById("botoNavegarText").innerHTML = strSimulPlay;
		} else {
			//anarA(arRutaX[iNavegarPunt],arRutaY[iNavegarPunt]);

			var latlon = new Array(2);
			var desvLon = 0.002538;
			var desvLat = 0.002217;
			var angle;

			if (iNavegarPunt == arRutaX.length - 1) {
				// Calcul d'angle del segment anterior
				UTMXYToLatLon(arRutaX[iNavegarPunt - 1] - desX,
						arRutaY[iNavegarPunt - 1] - desY, ZONA_UTM, false,
						latlon);
				punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]),
						true);

				UTMXYToLatLon(arRutaX[iNavegarPunt] - desX,
						arRutaY[iNavegarPunt] - desY, ZONA_UTM, false, latlon);
				puntDesti = new GLatLng(RadToDeg(latlon[0]),
						RadToDeg(latlon[1]), true);

				angle = obtenirAngle(punt, puntDesti);

				UTMXYToLatLon(arRutaX[iNavegarPunt] - desX,
						arRutaY[iNavegarPunt] - desY, ZONA_UTM, false, latlon);
				punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]),
						true);

			} else {
				// Calcul d'angle normal
				UTMXYToLatLon(arRutaX[iNavegarPunt] - desX,
						arRutaY[iNavegarPunt] - desY, ZONA_UTM, false, latlon);
				punt = new GLatLng(RadToDeg(latlon[0]), RadToDeg(latlon[1]),
						true);

				UTMXYToLatLon(arRutaX[iNavegarPunt + 1] - desX,
						arRutaY[iNavegarPunt + 1] - desY, ZONA_UTM, false,
						latlon);
				puntDesti = new GLatLng(RadToDeg(latlon[0]),
						RadToDeg(latlon[1]), true);

				angle = obtenirAngle(punt, puntDesti);

			}

			var la = ge.createLookAt('');
			la.set(punt.y, punt.x, 25, ge.ALTITUDE_RELATIVE_TO_GROUND, angle,
					60, 700);
			ge.getView().setAbstractView(la);

			iNavegarPunt++;
		}
	}
}

function obtenirAngle(inici, fi) {

	var degreesPerRadian = 180.0 / Math.PI;
	var radiansPerDegree = Math.PI / 180.0;

	// Returns the bearing in degrees between two points.
	// North = 0, East = 90, South = 180, West = 270.
	var lat1 = inici.latRadians();
	var lon1 = inici.lngRadians();
	var lat2 = fi.latRadians();
	var lon2 = fi.lngRadians();

	// Compute the angle.
	var angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math
			.cos(lat1)
			* Math.sin(lat2)
			- Math.sin(lat1)
			* Math.cos(lat2)
			* Math.cos(lon1 - lon2));
	if (angle < 0.0) {
		angle += Math.PI * 2.0;
	}

	// And convert result to degrees.
	angle = angle * degreesPerRadian;
	// angle = angle.toFixed(1);

	return angle;
}

function fNavegarStep() {
	var x;
	var y;

	if (arRutaX == null) {
		//alert("1");
		clearInterval(idIntervalNavegacio);
		bNavegant = false;
		// Interficie
		document.getElementById("botoNavegarText").innerHTML = strSimulPlay;
	} else if ((iNavegarStep == NUM_STEP)
			&& (iNavegarPunt == arRutaX.length - 2)) {
		clearInterval(idIntervalNavegacio);
		bNavegant = false;
		// Interficie
		document.getElementById("botoNavegarText").innerHTML = strSimulPlay;
	} else if (iNavegarStep < NUM_STEP) {
		x = (arRutaX[iNavegarPunt] * (1 - (iNavegarStep / NUM_STEP))) + (arRutaX[iNavegarPunt + 1] * (iNavegarStep / NUM_STEP));
		y = (arRutaY[iNavegarPunt] * (1 - (iNavegarStep / NUM_STEP))) + (arRutaY[iNavegarPunt + 1] * (iNavegarStep / NUM_STEP));
		
		anarA(x, y);
		iNavegarStep++;
	} else {
		x = arRutaX[iNavegarPunt + 1];
		y = arRutaY[iNavegarPunt + 1];
		anarA(x, y);
		iNavegarPunt++;
		iNavegarStep = 0;
	}
}

/* Funciones de control de respostes */
function changeresposta(id) {
	document.getElementById("Tab1").innerHTML = arrResDes[id];
	putAll(id);
	idSelectRuta=id;
}

/*
 * David Pérez Herranz 24-11-2009 Modificacions per calcular la ruta a peu i en
 * bicicleta de forma m�s correcta
 */

/* Funcions per calcular la ruta a peu */
function getRutaPeatonal(iter2, x1, y1, nom1, x2, y2, nom2) {

	var latlon1 = new Array(2);
	var latlon2 = new Array(2);
	var directionsPanel = document.getElementById("route");

	noms1[iter2] = nom1;
	noms2[iter2] = nom2;

	fPutMarker(x1, y1, nom1);
	fPutMarker(x2, y2, nom2);

	UTMXYToLatLon(x1 - desX, y1 - desY, ZONA_UTM, false, latlon1);
	UTMXYToLatLon(x2 - desX, y2 - desY, ZONA_UTM, false, latlon2);
	var punt1 = new GLatLng(RadToDeg(latlon1[0]), RadToDeg(latlon1[1]), true);
	var punt2 = new GLatLng(RadToDeg(latlon2[0]), RadToDeg(latlon2[1]), true);
	punts1[iter2] = punt1;
	punts2[iter2] = punt2;
	// map.setCenter(new GLatLng(42.351505,-71.094455), 15);

	directions[iter2] = new GDirections(null, directionsPanel);
	GEvent.addListener(directions[iter2], "load", function() {	
			
			polylines[iter2] = directions[iter2].getPolyline();		
			
			
			if(boundsGeneral==null){
				boundsGeneral = new GLatLngBounds();
			}
			
			for (iterVertex = 0; iterVertex < polylines[iter2].getVertexCount(); iterVertex++) {
				boundsGeneral.extend(polylines[iter2].getVertex(iterVertex));
				
			}		
			
			map.setZoom(map.getBoundsZoomLevel(boundsGeneral));
			map.setCenter(boundsGeneral.getCenter());
			
			polylines[iter2].setStrokeStyle( {
				color : '#0031a2',
				weight : 8,
				opacity : 0.7
			});

			map.addOverlay(polylines[iter2]);
			polylines[iter2].insertVertex(0, punts1[iter2]);
			polylines[iter2].insertVertex(polylines[iter2].getVertexCount(), punts2[iter2]);
			
			// 3D
			if (ge != null) {
				if (lineStringPlacemarks[iter2] != null) {
					ge.getFeatures().removeChild(lineStringPlacemarks[iter2]);
				}
				lineStringPlacemarks[iter2] = ge.createPlacemark('');
				var lineString = ge.createLineString('');
				lineStringPlacemarks[iter2].setGeometry(lineString);
				lineString.setTessellate(true);
				for (iterVertex = 0; iterVertex < polylines[iter2].getVertexCount(); iterVertex++) {
					lineString.getCoordinates().pushLatLngAlt(polylines[iter2].getVertex(iterVertex).lat(),polylines[iter2].getVertex(iterVertex).lng(), 0);
				}
				ge.getFeatures().appendChild(lineStringPlacemarks[iter2]);
				lineStringPlacemarks[iter2].setStyleSelector(ge.createStyle(''));
				var lineStyle = lineStringPlacemarks[iter2].getStyleSelector().getLineStyle();
				lineStyle.setWidth(8);
				lineStyle.getColor().set("B2A23100"); // aabbggrr format

				var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
				var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
				var la = ge.createLookAt('');
				la.set(boundsGeneral.getCenter().y, boundsGeneral.getCenter().x, 100,
						ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
				ge.getView().setAbstractView(la);
			}
			endAll();
			
		});

	GEvent.addListener(directions[iter2], "error", function() {
		var code = directions[iter2].getStatus().code;
		var reason = "Code " + code;
		alert("Failed to obtain directions, " + reason);
	});

	directions[iter2].load("from: " + punt1 + " to: " + punt2, {
		getSteps : true,
		getPolyline : true,
		avoidHighways : true,
		travelMode : G_TRAVEL_MODE_WALKING
	});

}
  
function getRutaPeatonalYellow(x1, y1, x2, y2) {

		var latlon1 = new Array(2);
		var latlon2 = new Array(2);
		var directionsPanel = document.getElementById("route");

		UTMXYToLatLon(x1 - desX, y1 - desY, ZONA_UTM, false, latlon1);
		UTMXYToLatLon(x2 - desX, y2 - desY, ZONA_UTM, false, latlon2);
		var punt1 = new GLatLng(RadToDeg(latlon1[0]), RadToDeg(latlon1[1]), true);
		var punt2 = new GLatLng(RadToDeg(latlon2[0]), RadToDeg(latlon2[1]), true);
		// map.setCenter(new GLatLng(42.351505,-71.094455), 15);

		direction = new GDirections(null, directionsPanel);
		GEvent.addListener(direction, "load", function() {
			if (polyline != null) {
				map.removeOverlay(polyline);
			}
			 	
			polyline = direction.getPolyline();		
				
			

			var bounds = new GLatLngBounds();
				
			for (iterVertex = 0; iterVertex < polyline.getVertexCount(); iterVertex++) {
				bounds.extend(polyline.getVertex(iterVertex));
			}

			map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());
			if(bStreet) {
				houseMarker.setLatLng(polyline.getVertex(0));
				panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
			}
				
			polyline.setStrokeStyle( {
				color : '#FFFF00',
				weight : 8,
				opacity : 0.7
			});

			map.addOverlay(polyline);
			polyline.insertVertex(0, punt1);
			polyline.insertVertex(polyline.getVertexCount(), punt2);
				
			// 3D
			if (ge != null) {
				if (lineStringPlacemark != null) {
					ge.getFeatures().removeChild(lineStringPlacemark);
				}
				lineStringPlacemark = ge.createPlacemark('');
				var lineString = ge.createLineString('');
				lineStringPlacemark.setGeometry(lineString);
				lineString.setTessellate(true);
				for (iterVertex = 0; iterVertex < polyline.getVertexCount(); iterVertex++) {
					lineString.getCoordinates().pushLatLngAlt(polyline.getVertex(iterVertex).lat(),
							polyline.getVertex(iterVertex).lng(), 0);
				}
				ge.getFeatures().appendChild(lineStringPlacemark);
				lineStringPlacemark.setStyleSelector(ge.createStyle(''));
				var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
				lineStyle.setWidth(8);
				lineStyle.getColor().set("FF00FFFF"); // aabbggrr format

				var iDiferenciaZoom = ZOOM_BASE_CONVERSIO - map.getZoom();
				var iAmpleMetres = METRES_BASE_CONVERSIO * Math.pow(2, iDiferenciaZoom);
				var la = ge.createLookAt('');
				la.set(bounds.getCenter().y, bounds.getCenter().x, 100,
						ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, iAmpleMetres);
				ge.getView().setAbstractView(la);
			}
				
			});

		GEvent.addListener(direction, "error", function() {
			var code = direction.getStatus().code;
			var reason = "Code " + code;
			alert("Failed to obtain directions, " + reason);
		});

		direction.load("from: " + punt1 + " to: " + punt2, {
			getSteps : true,
			getPolyline : true,
			avoidHighways : true,
			travelMode : G_TRAVEL_MODE_WALKING
		});

	}

function endAll(){
	arRutaX = new Array();
	arRutaY = new Array();
	
	for (iter2=0;iter2<polylines.length;iter2++){
		if(punts1[iter2]!=null && punts2[iter2]!=null){			
			var xyOrigen = new Array(2);
			var xyDesti = new Array(2);
			LatLonToUTMXY(punts1[iter2].latRadians() , punts1[iter2].lngRadians() , ZONA_UTM, xyOrigen);
			xyOrigen[0] = xyOrigen[0] + desX;
			xyOrigen[1] = xyOrigen[1] + desY;
			arRutaX=arRutaX.concat(xyOrigen[0]);
			arRutaY=arRutaY.concat(xyOrigen[1]);
			LatLonToUTMXY(punts2[iter2].latRadians() , punts2[iter2].lngRadians() , ZONA_UTM, xyDesti);
			xyDesti[0] = xyOrigen[0] + desX;
			xyDesti[1] = xyOrigen[1] + desY;
			arRutaX=arRutaX.concat(xyDesti[0]);
			arRutaY=arRutaY.concat(xyDesti[1]);			
		}else if(polylines[iter2]!=null){
			for (iterVertex = 0; iterVertex < polylines[iter2].getVertexCount(); iterVertex++) {
				var xyOrigen = new Array(2);
				LatLonToUTMXY(polylines[iter2].getVertex(iterVertex).latRadians() , 
						polylines[iter2].getVertex(iterVertex).lngRadians() , ZONA_UTM, xyOrigen);
				xyOrigen[0] = xyOrigen[0] + desX;
				xyOrigen[1] = xyOrigen[1] + desY;
				arRutaX=arRutaX.concat(xyOrigen[0]);
				arRutaY=arRutaY.concat(xyOrigen[1]);
			}
		}
	}
}

/*
 * David Pérez Herranz 24-11-2009 FIN Modificacions per calcular la ruta a peu i en
 * bicicleta de forma més correcta
 */
 
/*
 * David Pérez Herranz 25-11-2009 INICI Modificacions per imprimir ruta
 */
	
function onPrint(){
		
	var boundActuals = map.getBounds();
	var sizeActual = map.getSize();
	var doubleHeight = sizeActual.height*2;
	var doubleWidth = sizeActual.width*2;
	var sizeGeneracio = new GSize(544,544);	
		
	var sw1,ne1,sw2,ne2,sw3,ne3,sw4,ne4;
	
	var resultado = (sizeGeneracio.height /2)-1;
	var entero = Math.round(resultado);
	
	var resultado2 = (sizeGeneracio.width /2)-1;
	var entero2 = Math.round(resultado2); 
	
	var pxsw1 = new GPoint(0,entero+30);
	sw1 = map.fromContainerPixelToLatLng(pxsw1);
	
	var pxne1 = new GPoint(entero2+1,0);
	ne1 = map.fromContainerPixelToLatLng(pxne1);
	
	var pxsw2 = new GPoint(0,(entero*2)+1+30);
	sw2 = map.fromContainerPixelToLatLng(pxsw2);
	
	var pxne2 = new GPoint(entero2+1,entero);
	ne2 = map.fromContainerPixelToLatLng(pxne2);
	
	var pxsw3 = new GPoint(entero2,entero+30);
	sw3 =map.fromContainerPixelToLatLng(pxsw3);
	
	var pxne3 = new GPoint((entero2*2)+1,0);
	ne3 = map.fromContainerPixelToLatLng(pxne3);
	
	var pxsw4 = new GPoint(entero2,(entero*2)+1);
	sw4 = map.fromContainerPixelToLatLng(pxsw4);
	
	var pxne4 = new GPoint((entero2*2)+1,entero);
	ne4 = map.fromContainerPixelToLatLng(pxne4);	
	
	/*Primera casilla*/
	var boundsFirstTile = new GLatLngBounds(sw1, ne1);
	var centerFirstTile = boundsFirstTile.getCenter();		
	
	var urlMap1 = "http://maps.google.com/staticmap?key=ABQIAAAAlx1twX_s06BxntcaMXNsZRSOwIY0AXzBRotGT3Xbq8enpzbH_xTFnpthzoEu1u0STdawLlZ18AYOLQ&sensor=false";
	urlMap1 += "&center="+centerFirstTile.lat()+","+centerFirstTile.lng();
	urlMap1 += "&zoom="+map.getZoom();
	urlMap1 += "&size="+(entero2+1)+"x"+(entero+30);
	urlMap1 += "&format=PNG";
	urlMap1 += "&maptype="+map.getCurrentMapType().getUrlArg();
	urlMap1 += "&markers="+markers;
	urlMap1 += "&path="+getPaths(boundsFirstTile,(map.getZoom()>=13));
	
	/*Segunda casilla*/
	var boundsSecondTile = new GLatLngBounds(sw2, ne2);
	var centerSecondTile = boundsSecondTile.getCenter();		
	
	var urlMap2 = "http://maps.google.com/staticmap?key=ABQIAAAAlx1twX_s06BxntcaMXNsZRSOwIY0AXzBRotGT3Xbq8enpzbH_xTFnpthzoEu1u0STdawLlZ18AYOLQ&sensor=false";
	urlMap2 += "&center="+centerSecondTile.lat()+","+centerSecondTile.lng();
	urlMap2 += "&zoom="+map.getZoom();
	urlMap2 += "&size="+(entero2+1)+"x"+(entero+30);
	urlMap2 += "&format=PNG";
	urlMap2 += "&maptype="+map.getCurrentMapType().getUrlArg();
	urlMap2 += "&markers="+markers;	 	
	urlMap2 += "&path="+getPaths(boundsSecondTile,(map.getZoom()>=13));
	
	var bounds3Tile = new GLatLngBounds(sw3, ne3);
	var center3Tile = bounds3Tile.getCenter();
	
	var urlMap3 = "http://maps.google.com/staticmap?key=ABQIAAAAlx1twX_s06BxntcaMXNsZRSOwIY0AXzBRotGT3Xbq8enpzbH_xTFnpthzoEu1u0STdawLlZ18AYOLQ&sensor=false";
	urlMap3 += "&center="+center3Tile.lat()+","+center3Tile.lng();
	urlMap3 += "&zoom="+map.getZoom();
	urlMap3 += "&size="+(entero2)+"x"+(entero+30);
	urlMap3 += "&format=PNG";
	urlMap3 += "&maptype="+map.getCurrentMapType().getUrlArg();
	urlMap3 += "&markers="+markers;
	urlMap3 += "&path="+getPaths(bounds3Tile,(map.getZoom()>=13));
		
	var bounds4Tile = new GLatLngBounds(sw4, ne4);
	var center4Tile = bounds4Tile.getCenter();
		
	var urlMap4 = "http://maps.google.com/staticmap?key=ABQIAAAAlx1twX_s06BxntcaMXNsZRSOwIY0AXzBRotGT3Xbq8enpzbH_xTFnpthzoEu1u0STdawLlZ18AYOLQ&sensor=false";
	urlMap4 += "&center="+center4Tile.lat()+","+center4Tile.lng();
	urlMap4 += "&zoom="+map.getZoom();
	urlMap4 += "&size="+(entero2)+"x"+(entero);
	urlMap4 += "&format=PNG";
	urlMap4 += "&maptype="+map.getCurrentMapType().getUrlArg();
	urlMap4 += "&markers="+markers;
	urlMap4 += "&path="+getPaths(bounds4Tile,(map.getZoom()>=13));
	
	var keys=[];
	var value=[];
	keys[1]="Origen";
	value[1]=Base64.encode(strOrigen);
	keys[2]="Destino";
	value[2]=Base64.encode(strDesti);
	keys[3]="MTransport";
	value[3]=strModTrans;
	keys[4]="alternativa";
	value[4]=Base64.encode(strAlternativaSel[idSelectRuta]);
	keys[5]="Termometre";
	value[5]=Base64.encode(arrResTerImp[idSelectRuta]);
	keys[6]="Imagen0";
	value[6]=urlMap1;
	keys[7]="Imagen1";
	value[7]=urlMap3;
	keys[8]="Imagen2";
	value[8]=urlMap2;
	keys[9]="Imagen3";
	value[9]=urlMap4;
	
	openWindowWithPost("../PrintService.do", "name", keys, value);
}
	
function openWindowWithPost(url,name,keys,values)
{
	var newWindow = window.open(url, name);
	if (!newWindow) return false;
	var html = "";
	html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>";
	if (keys && values && (keys.length == values.length))
	for (var i=1; i < keys.length; i++)
	html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";
	html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</script></body></html>";
	newWindow.document.write(html);
	return newWindow;
}	

function getPaths(boundsTile,bSizeBig){
	
	/* Si el zoom es menor que 14 no s'han d'imprimir les rutes peatonal */
	/* Sino imprimim totes el punts que facin falta */
	
	var paths = "rgba:0x0031a2B2,weight:8";
	var iCount=0;
	var bAnterior = false;
	
	for (iter2=0;iter2<polylines.length;iter2++){
		if(!bSizeBig && punts1[iter2]!=null && punts2[iter2]!=null){
			var polyAux = new GPolyline("", "#000000", 0, 0);
			map.addOverlay(polyAux);
			polyAux.insertVertex(1, punts1[iter2]);
			polyAux.insertVertex(2, punts2[iter2]);
			if(polyAux.getBounds().intersects(boundsTile)){				
				paths +="|" + punts1[iter2].lat().toFixed(3) +"," + punts1[iter2].lng().toFixed(3);
				paths +="|" + punts2[iter2].lat().toFixed(3) +"," + punts2[iter2].lng().toFixed(3);
				iCount++;
				iCount++;
				bAnterior = true;
			}else if(bAnterior){
				paths +="|" + punts1[iter2].lat().toFixed(3) +"," + punts1[iter2].lng().toFixed(3);
				iCount++;
				bAnterior = false;
			}
			map.removeOverlay(polyAux);
		}else{
			for (iterVertex = 0; iterVertex < polylines[iter2].getVertexCount(); iterVertex++) {
				var polyAux = new GPolyline("", "#000000", 0, 0);
				map.addOverlay(polyAux);
				if(iterVertex==0&&iter2==0){}
				else{
					if(iterVertex==0){
						polyAux.insertVertex(1, polylines[iter2-1].getVertex(polylines[iter2-1].getVertexCount()-1));
					}else{
						polyAux.insertVertex(1, polylines[iter2].getVertex(iterVertex-1));
					}
					polyAux.insertVertex(2, polylines[iter2].getVertex(iterVertex));
							
					if(polyAux.getBounds().intersects(boundsTile)){				
						if(!bAnterior){
							if(iterVertex==0){
								paths +="|" + polylines[iter2-1].getVertex(polylines[iter2-1].getVertexCount()-1).lat().toFixed(3) +"," + polylines[iter2-1].getVertex(polylines[iter2-1].getVertexCount()-1).lng().toFixed(3);
							}
							else{
								paths +="|" + polylines[iter2].getVertex(iterVertex-1).lat().toFixed(3) +"," + polylines[iter2].getVertex(iterVertex-1).lng().toFixed(3);
							}
	
							iCount++;
						}
						paths +="|" + polylines[iter2].getVertex(iterVertex).lat().toFixed(3) +"," + polylines[iter2].getVertex(iterVertex).lng().toFixed(3);
						iCount++;
						bAnterior = true;
					}else if(bAnterior){
						paths +="|" + polylines[iter2].getVertex(iterVertex).lat().toFixed(3) +"," + polylines[iter2].getVertex(iterVertex).lng().toFixed(3);
						iCount++;
						bAnterior = false;
					}
				}
			}
			map.removeOverlay(polyAux);
		}		
	}
	
	return paths;
	
}
	
/*
 * David Pérez Herranz 25-11-2009 FIN  Modificacions per imprimir ruta
 */
	