/*CON JCHART
						
						var myChart = new JSChart('graph', 'line');
						myChart.setDataArray(myData);
						//myChart.setSize(700, 400);
						myChart.setAxisNameFontSize(10);
						myChart.setAxisNameX('Pendientes por Km(%)');
						myChart.setAxisValuesFontSize(8);
						myChart.setAxisNameY('Altura');
						myChart.setAxisNameColor('#787878');
						//myChart.setAxisValuesNumberX(6);
						//myChart.setAxisValuesNumberY(5);
						myChart.setAxisValuesDecimals(0);
						//myChart.setIntervalEndY(500);
						myChart.setAxisValuesColor('#38a4d9');
						myChart.setAxisColor('#38a4d9');
						myChart.setLineColor('#ffffff');
						myChart.setTitle('Perfil de la Ruta');
						myChart.setTitleColor('#383838');
						myChart.setGraphExtend(false);
						myChart.setGridColor('#38a4d9');
						myChart.setSize(580, 450);
						
						
						//myChart.setAxisValuesNumberX(2);
						myChart.setShowXValues(false);//esto hace que no se muestre ningun valor en el eje x
						myChart.setFlagRadius(3);//tamaño del tooltip
						myChart.setTooltipFontSize(16);
						myChart.setTooltipFontColor('#999999'); //color de la letra del tooltip
						myChart.setFlagColor('#000000');//color del tooltip

						var h=0;
						myChart.setTooltip([0,'km '+h]);		
						for(z=1000;z<metros;z=z+1000){
						//myChart.setLabelX([z, z/1000]);

						var t=new Number(arraypor[h]);
						myChart.setTooltip([(h+1)*1000,'km '+(h+1)]);					
						
						myChart.setLabelX([500+h*1000,t.toFixed(1)]);
						h++;
						}

						var num = new Number(metros/1000);
						myChart.setTooltip([metros,'km '+num.toFixed(1)]);		
						
						
						//ahora pintamos el último %. lo pintamos en la mitad de ese resto que queda metros%1000
						var j=(((metros%1000)/2)+h*1000);
						//si j me da p.e 123 pues me quedo con el 100, xq en el 123 no hay punto en grafica
						j=j-j%cadadist;//aqui seria j%cadadist
						myChart.setLabelX([j,b.toFixed(1)]);
						
						
						
						 
						//myChart.setAxisPaddingLeft(140);
						//myChart.setAxisPaddingRight(140);
						//myChart.setAxisPaddingTop(60);
						//myChart.setAxisPaddingBottom(45);
						
						myChart.setTextPaddingLeft(0);
						myChart.setTextPaddingBottom(0);
						myChart.setBackgroundImage('chart_bg.jpg');
						myChart.draw();*/






var usuruta;
var estaterminada=0;
var medalagana=0;
var medalaganater=0;
var medalaganacont=0;
var medalaganades=0;
var medalaganacamb=0;
var ingles= navigator.language!="es" && navigator.browserLanguage!="es" &&
					navigator.language!="es_AR" && navigator.browserLanguage!="es_AR" &&
					navigator.language!="es_BO" && navigator.browserLanguage!="es_BO" &&
					navigator.language!="es_CL" && navigator.browserLanguage!="es_CL" &&
					navigator.language!="es_CO" && navigator.browserLanguage!="es_CO" &&
					navigator.language!="es_CR" && navigator.browserLanguage!="es_CR" &&
					navigator.language!="es_DO" && navigator.browserLanguage!="es_DO" &&
					navigator.language!="es_EC" && navigator.browserLanguage!="es_EC" &&
						navigator.language!="es_ES" && navigator.browserLanguage!="es_ES" &&
					navigator.language!="es_GT" && navigator.browserLanguage!="es_GT"&&
					navigator.language!="es_HN" && navigator.browserLanguage!="es_HN"&&
					navigator.language!="es_MX" && navigator.browserLanguage!="es_MX"&&
					navigator.language!="es_NI" && navigator.browserLanguage!="es_NI"&&
					navigator.language!="es_PA" && navigator.browserLanguage!="es_PA"&&
					navigator.language!="es_PE" && navigator.browserLanguage!="es_PE"&&
					navigator.language!="es_PR" && navigator.browserLanguage!="es_PR"&&
					navigator.language!="es_PY" && navigator.browserLanguage!="es_PY"&&
					navigator.language!="es_SV" && navigator.browserLanguage!="es_SV"&&
					navigator.language!="es_UY" && navigator.browserLanguage!="es_UY"&&
					navigator.language!="es_VE" && navigator.browserLanguage!="es_VE";
//para rutas libresssss ///////////////////////////////////////
	var el=0; //variable para que salga bien los puntos en carretera cuando se elimina uno
 var distruta=0;
 
 var varcontinuar=0;
 var ptocontinuar=[];
 var separador=0;
 var dragInfo = null;
 
 ultimabusquedaprovincia=null;
 ultimabusquedapais=null;

 var nvecesrutacont=0;
 var ptosnuevos=0;
 var ptosruta=0;
 var controlcont=0;
 //creamos un array con los puntos de la ruta. ponemos el máximo en 20
				puntoslib = new Array(10000);
				 for (i = 0; i < puntoslib.length; ++ i)
				 puntoslib [i] = new Array(3);
				
				var arrayrampa=[];
				var arrayrampamapa=[];
				
	
				var puntoscargados=[];
//////////////////////////////////////////////////////////////
var control=0;

var H_directions = null;

//La lista de pasos de la ruta de google.maps.Directions
 
var H_steps = [];

//array para guardar los puntos donde el usuario clickea para crear ruta
var puntos= [];
var puntosant;

var n=0;

var nvecesruta=0;//para poder cerrar la función crearruta 

//El array de la ruta. Con sus puntos o vertices. todos los puntos de la ruta.
var H_path = []; 
//para saber si cargamos una ruta googlebike
var gb=-1;
var gb50=-1;
var ext='';
var laa='';


/**
 * The car marker that appears on the reference map to the right of the main
 * simulation screen
 * @type {google.maps.Marker}
 */
var H_mapMarker = null; // car marker on the Map

/**
 * Instead of using the plugin's built-in ID system, which doesn't like when
 * IDs are reused, we will use a separate dictionary mapping ID to placemark
 * object
 * @type {Object}
 */
var H_placemarks = {};


//VARIABLES PARA PERFILES
	var puntosperfil = new Array(10000);
		
	var dtotal=0;//la distancia total de una ruta. se calcula tras trazarla
	var dtotalant=0;
	var cadadist=100; 
	
	var acum=0; //lo necesito global para que se quede guardado el ultimo acum.
	
	var perfil = [];
	var perfilant=[];
				 
	perfil10 = [];
	
////////////////////////////


/*

  Al pulsar el boton de calcular ruta automática se ejecuta esta funcion.
  La funcion utiliza la api de google maps para calcular la ruta mas corta por carretera
 La clase directions obtiene la ruta (route) y saca los pasos individuales de la ruta
 Una ruta es representada como una polilinea.
 */
function H_goDirections() {

H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 

  var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);
arrayicos=[];

	H_path = []; 
				 H_steps =[];
	puntos=[];
	//borramos la ruta anterior DESPUES DE HABER HECHO TODO
	
puntoscargados=[];
perfil=[];
	
	
document.getElementById('cargar').style.visibility='hidden';

document.getElementById('opciones').style.visibility='visible';


document.getElementById('gr').style.visibility='visible';
document.getElementById('cr').style.visibility='visible';




document.getElementById('gr').disabled=false;
document.getElementById('gr').style.cursor='pointer';
document.getElementById('car').disabled = false;
document.getElementById('lib').disabled = false;

document.getElementById('tabperfil').disabled = false;
document.getElementById('tabinforuta').disabled = false;
document.getElementById('tablista').disabled = false;
	

  $('#route-details').empty();
  $('#route-details').html(
      '<span class="loading">Cargando Ruta ...</span>');
  n=0;
  if (H_directions)
    H_directions.clear();
		


  H_directions = new google.maps.Directions(H_map, null);
  //cuando se produce el evento load, explicado mas abajo, se ejecuta la funcion H_directionsLoaded
  google.maps.Event.addListener(H_directions, 'load', H_directionsLoaded);
  
  google.maps.Event.addListener(H_directions, 'error', function() {
    $('#route-details').empty();
    $('#route-details').html(
        '<span class="error">No Existe la Direccion. </span>');
	
	document.getElementById('earth-container').style.visibility='hidden';
				 document.getElementById('menu').style.visibility='hidden';
				 
				 ocultargraph();
				 document.getElementById('infograph').style.visibility='hidden';
				 document.getElementById('route-details').style.visibility='visible';
 				
				 
					document.getElementById('gr').style.visibility='hidden';
  });
  //aqui llamamos a google.maps.Directions.load(a,b). Que nos deveulve la ruta entre los 2 puntos
	//La ruta la carga en H_map como pone arriba.
if( document.getElementById('auto').checked)
		{
	
	H_directions.load('from: ' + $('#from').val() + ' to: ' + $('#to').val(),
      {getSteps: true, getPolyline: true, avoidHighways:true});
		}

else
{
H_directions.load('from: ' + $('#from').val() + ' to: ' + $('#to').val(),
      {getSteps: true, getPolyline: true});
	
}	
		
	document.getElementById('earth-container').style.visibility='visible';
	ocultargraph()
	document.getElementById('infograph').style.visibility='hidden';
  //document.getElementById('map-container').style.visibility='visible';
  }


//Una vez que se ha llamado a la funcion load entre 2 puntos toda la informacion se guarda, en 
//el objeto llamador,  en este caso H_directions. Eso es lo que utilizamos aquí. Vamos a guardar toda 
//la informacion en las variables que crearemos. 
function H_directionsLoaded() {
  // Cuando route details deja de estar ocupado. es decir, cuando se cargan las direcciones seguimos.
  $('#route-details').empty();
	
  var route = H_directions.getRoute(0);
	var start = route.getStartGeocode();
  var end = route.getEndGeocode();
  
  // Construye el la ruta y el array de pasos con la ruta devuelta por google.maps.Directions
  H_construyearrayPathStep();
	
	dtotal=H_directions.getDistance().meters;
	
	if(dtotal>180000)
			alert("Lo siento, no se permiten rutas superiores a 180 KM");
		else
		{
		var lat=H_path[0].loc.lat();
	var lon=H_path[0].loc.lng();
	/*H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
	var lookAt = H_ge.createLookAt('');
	lookAt.set(lat,lon, 0, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 1000);
	H_ge.getView().setAbstractView(lookAt);*/
	 
	 
	 
	 
	H_placemarks = {};
  
  // Creamos la marca del inicio de ruta
  H_placemarks['start'] = createPlacemark2(
      new google.maps.LatLng(start.Point.coordinates[1],
                             start.Point.coordinates[0]),
      {description: start.address, standardIcon: 'grn-diamond'});
  
  //Para cada paso(step) de la ruta creamos una marca de posicion
  for (var i = 0; i < H_steps.length; i++) {
    var step = H_steps[i];
    
    var placemark = createPlacemark2(
        step.loc, {description: step.desc, standardIcon: 'red-circle'});
    
    H_placemarks['step-' + i] = placemark; 
    
    google.earth.addEventListener(placemark, 'click', function(event) {
      //si hacemos click en la marca averiguamos que paso es y volamos a ese paso
      var id = '';
      for (k in H_placemarks)
        if (H_placemarks[k].equals(event.getTarget()))
          id = k;
      
      var stepNum = parseInt(id.match(/step-(\d+)/)[1]);
      
      H_volarAStep(stepNum);
    });
	
  }
	
	  
  // cramos la marca de posicion del ultimo punto de la ruta
  H_placemarks['end'] = createPlacemark2(
      new google.maps.LatLng(end.Point.coordinates[1],
                             end.Point.coordinates[0]),
      {description: end.address, standardIcon: 'grn-diamond'});
  
  // vamos creando las lineas sobre el mapa pa que se vea la ruta
	//en vez de usar el metodo corriente usamos kml blob, que segun estadísticas
	//da menos problemas
	
  var lineStringKml = '<LineString><coordinates>\n';
  
  for (var i = 0; i < H_path.length; i++)
    lineStringKml +=
        H_path[i].loc.lng().toString() + ',' +
        H_path[i].loc.lat().toString() +
        ',10\n';
  
  lineStringKml += '</coordinates></LineString>';
  
  // creamos la marca de posicion de la ruta de la LineString KML blob
  var routeLineString = H_ge.parseKml(lineStringKml);
  routeLineString.setTessellate(true);
  
  var routePlacemark = H_ge.createPlacemark('');
  routePlacemark.setGeometry(routeLineString);
  H_placemarks['route'] = routePlacemark;
  
  routePlacemark.setStyleSelector(
      createLineaStyle({width: 10, color: '88ff0000'}));
  
  H_ge.getFeatures().appendChild(routePlacemark);

  // Construimos la lista de direcciones correspondiente a la ruta
  H_buildDirectionsList();
  
  //volamos al punto inicial de la ruta. se le pasan la lat y lon
  H_volarALatLng(new google.maps.LatLng(
                start.Point.coordinates[1], start.Point.coordinates[0]));
	
		
		buttoncontinuar(0, 34, 85, 19);
buttoncambios(0, 160, 85, 19);
medalaganacont=1;
medalaganacamb=1;
buttoncomenzar(0, 10, 85, 19); // x, y, width, height
	medalagana=1;
		
		preparaperfilcar();	
	
	
	}//fin else 180 km
}

/**
 * Rellenamos los arrays H_path y H_step con la iformacion devuelta por 
 gmaps en el objeto H_directions
 usamos solo la primera ruta q es la que hemos llamado*/
function H_construyearrayPathStep() {
  
  H_steps = [];
  H_path = [];
  
  var polyline = H_directions.getPolyline();
  var route = H_directions.getRoute(0);
  var numPolylineVertices = polyline.getVertexCount();
  var numSteps = route.getNumSteps();
  
  for (var i = 0; i < numSteps; i++) {
    var step = route.getStep(i);
    
    var firstPolylineIndex = step.getPolylineIndex();
    
    var lastPolylineIndex = -1;
    if (i == numSteps - 1)
      lastPolylineIndex = numPolylineVertices - 1;
    else {
      // restamos 2 porque el último vértice de un paso se duplica 
      lastPolylineIndex = route.getStep(i + 1).getPolylineIndex() - 2;
    }
    
    H_steps.push({
      loc: step.getLatLng(),
      desc: step.getDescriptionHtml(),
      distanceHtml: step.getDistance().html,
      pathIndex: H_path.length
    });
    
    var stepDistance = step.getDistance().meters;
    for (var j = firstPolylineIndex; j <= lastPolylineIndex; j++) {
      var loc = polyline.getVertex(j);
      var distance = (j == numPolylineVertices - 1) ?
                     0 : distancia3dEarth(loc, polyline.getVertex(j + 1));
      
      H_path.push({
        loc: loc,
        step: i,
        distance: distance,
        
        // proporcional a la distancia gmaps te devuelve una duracion
        duration: step.getDuration().seconds * distance / stepDistance
      });
    }
  }
}

//aqui vamos a generar toda la listas de direcciiones que colocamos en el html con la
//informacion de como seguir la ruta
//vamos recorriendo los pasos con sus descripciones html y las añadimos al div del html
function H_buildDirectionsList() {
  var start = H_directions.getRoute(0).getStartGeocode();
	var numRoutes=H_directions.getNumRoutes();
  var end = H_directions.getRoute(numRoutes-1).getEndGeocode();
  	
	$('#route-details').append($(
      '<div >' + "Ayuda: Haz clic sobre un paso para volar hasta el\n" + '</div>'));
	
		
	$('#route-details').append($(
      '<div >' + "&nbsp;" + '</div>'));
		
	$('#route-details').append($(
      '<div id="dir-start">' + start.address + '</div>'));
  
	$('#route-details').append('<ol>');
	for (var i = 0; i < H_steps.length; i++) {
    $('#route-details ol').append($(
        '<li class="dir-step" id="dir-step-' + i + '">' +
        H_steps[i].desc +
        '<div class="note">' + H_steps[i].distanceHtml + '</div>' + 
        '</li>'));
  }
  $('#route-details').append($(
      '<div id="dir-end">' + end.address + '</div>'));
  
  // Si le dan a un elemento de la lista de direcciones volamos a el
  $('#dir-start').click(function() {
    document.getElementById('earth-container').style.visibility='visible';
		document.getElementById('menu').style.visibility='visible';
		document.getElementById('opciones').style.visibility='visible';
		document.getElementById('gr').style.visibility='visible';
		document.getElementById('cr').style.visibility='visible';
		ocultargraph()
		document.getElementById('infograph').style.visibility='hidden';
 		document.getElementById('route-details').style.visibility='hidden';
		
		H_volarALatLng(new google.maps.LatLng(
                   start.Point.coordinates[1], start.Point.coordinates[0]));
  });
  
  $('#dir-end').click(function() {
       document.getElementById('earth-container').style.visibility='visible';
		document.getElementById('menu').style.visibility='visible';
		
		ocultargraph()
		document.getElementById('infograph').style.visibility='hidden';
 		document.getElementById('route-details').style.visibility='hidden';
		H_volarALatLng(new google.maps.LatLng(
                   end.Point.coordinates[1], end.Point.coordinates[0]));
  });
  
  $('#route-details li').click(function() {
       document.getElementById('earth-container').style.visibility='visible';
		document.getElementById('menu').style.visibility='visible';
		
		ocultargraph()
		document.getElementById('infograph').style.visibility='hidden';
 		document.getElementById('route-details').style.visibility='hidden';
		
		var id = $(this).attr('id');
    if (id == 'dir-start' || id == 'dir-end')
      return;
    
    var stepNum = parseInt(id.match(/dir-step-(\d+)/)[1]);
    var step=H_steps[stepNum];
		
		H_volarALatLng(step.loc);
		H_highlightStep(stepNum);
  });
}

//Se le pasa como parámetro el indice de un paso y la camara vuela a ese paso
 function H_volarALatLng(stepNum) {
  var step = H_steps[stepNum];
  
  var la = H_ge.createLookAt('');
  la.set(step.loc.lat(), step.loc.lng(),
      0, // altitud
      H_ge.ALTITUDE_RELATIVE_TO_GROUND,
      0,
      0, 
      50 
      );
  H_ge.getView().setAbstractView(la);

  // Muestra la descripcion
  var balloon = H_ge.createFeatureBalloon('');
  balloon.setFeature(H_placemarks['step-' + stepNum]);
  H_ge.setBalloon(balloon); 

  H_highlightStep(stepNum);
}
 /* Para que cuando el usuario ponga el cursor sobre un paso de la lista de direcciones 
 del div se le ponga en otro color, es decir, resaltado.
 */
function H_highlightStep(stepNum) {
  $('#route-details li').removeClass('sel');
  $('#route-details #dir-step-' + stepNum).addClass('sel');
}

//Movemos la camara a la posicion latlon dada y deseleccionamos los pasos que estuviera seleccionados
function H_volarALatLng(loc) {
  var la = H_ge.createLookAt('');
  la.set(loc.lat(), loc.lng(), 10, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 5000);
  H_ge.getView().setAbstractView(la);
  
  $('#route-details li').removeClass('sel');
}

/////////////////////////////////rutas////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

function H_RutaLoad() {
  // Cuando route details deja de estar ocupado. es decir, cuando se cargan las direcciones seguimos.
  $('#route-details').empty();
	var route = H_directions.getRoute(0);
	var start = route.getStartGeocode();
	var numRoutes=H_directions.getNumRoutes();
	//el final será el final de la última ruta
	var end =H_directions.getRoute(numRoutes-1).getEndGeocode();
  
  // Construye el la ruta y el array de pasos con la ruta devuelta por google.maps.Directions
  H_construyeRutaPathStep();
  
	H_placemarks = {};
  
  // Creamos la marca del inicio de ruta
  /*H_placemarks['start'] = createPlacemark2(
      new google.maps.LatLng(start.Point.coordinates[1],
                             start.Point.coordinates[0]),
      {description: start.address, standardIcon: 'grn-diamond'});*/
  
  //Para cada paso(step) de la ruta creamos una marca de posicion
  for (var i = 0; i < H_steps.length; i++) {
    var step = H_steps[i];
    
   var placemark = createPlacemark2(
       step.loc, {description: step.desc, standardIcon: 'red-circle'});
   
    H_placemarks['step-' + i] = placemark; 
    
    google.earth.addEventListener(placemark, 'click', function(event) {
      //si hacemos click en la marca averiguamos que paso es y volamos a ese paso
      var id = '';
      for (k in H_placemarks)
        if (H_placemarks[k].equals(event.getTarget()))
          id = k;
      
      var stepNum = parseInt(id.match(/step-(\d+)/)[1]);
      
      H_volarAStep(stepNum);
    });
	}
  // cramos la marca de posicion del ultimo punto de la ruta
  /*H_placemarks['end'] = createPlacemark2(
      new google.maps.LatLng(end.Point.coordinates[1],
                             end.Point.coordinates[0]),
      {description: end.address, standardIcon: 'grn-diamond'});*/
  
  // vamos creando las lineas sobre el mapa pa que se vea la ruta
	//en vez de usar el metodo corriente usamos kml blob, que segun estadísticas
	//da menos problemas
	
  var lineStringKml = '<LineString><coordinates>\n';
  
  for (var i = 0; i < H_path.length; i++)
    lineStringKml +=
        H_path[i].loc.lng().toString() + ',' +
        H_path[i].loc.lat().toString() +
        ',10\n';
  
  lineStringKml += '</coordinates></LineString>';
  
  // creamos la marca de posicion de la ruta de la LineString KML blob
  var routeLineString = H_ge.parseKml(lineStringKml);
  routeLineString.setTessellate(true);
  
  var routePlacemark = H_ge.createPlacemark('');
  routePlacemark.setGeometry(routeLineString);
  H_placemarks['route'] = routePlacemark;
  
  routePlacemark.setStyleSelector(
      createLineaStyle({width: 10, color: '88ff0000'}));
  
  
  H_ge.getFeatures().appendChild(routePlacemark);

  // Construimos la lista de direcciones correspondiente a la ruta
  H_buildDirectionsList();
  
  // volamos al punto inicial de la ruta. se le pasan la lat y lon
  H_volarALatLng(new google.maps.LatLng(
                start.Point.coordinates[1], start.Point.coordinates[0]));
  }

/**
 * Rellenamos los arrays H_path y DS_step con la iformacion devuelta por 
 gmaps en el objeto H_directions
 Tendremos varias rutas.
 La polylinea representa a todas las rutas.
 Nos creamos una polilynea para H_ge
  */
	
function   H_construyeRutaPathStep() {
  H_steps = [];
  H_path = [];
  
	var numRoutes=H_directions.getNumRoutes();
	var polyline = H_directions.getPolyline();
	var numPolylineVertices = polyline.getVertexCount();
	var numSteps=0;
	var n=0;
	for(r=0;r<numRoutes;r++)
	{
  var route = H_directions.getRoute(r);
  
	//i comenzará donde terminara la ruta anterior. Si la ruta anterior tuvo 50 Steps. ahora i empieza en 50
	
	//si la ruta tiene 70 step. Pues terminara en 50 de antes +70 de ahora =130.	
	numSteps = route.getNumSteps();
	
  	//para cada ruta.
		//para cada paso.
  for (i=0;i<numSteps;i++) {
    var step = route.getStep(i);
    
    var firstPolylineIndex = step.getPolylineIndex();
    
    var lastPolylineIndex = -1;
    if (i == numSteps - 1)//si es el ultimo step
      {
			if(r==numRoutes-1)//si es la última ruta el indice es el del final
					lastPolylineIndex = numPolylineVertices - 1;
			else//sino,pues el primer paso de la siguiente ruta
					lastPolylineIndex = H_directions.getRoute(r+1).getStep(0).getPolylineIndex()-2;
			}
    else {
      // restamos 2 porque el último vértice de un paso se duplica 
      lastPolylineIndex = route.getStep(i + 1).getPolylineIndex() - 2;
    }
    
    H_steps.push({
      loc: step.getLatLng(),
      desc: step.getDescriptionHtml(),
      distanceHtml: step.getDistance().html,
      pathIndex: H_path.length
    });
    
    var stepDistance = step.getDistance().meters;
   //ya hemos añadido el step. cada step tiene muchos path, los añadimos ahora.
	 //asi cada path tiene asociado su step.
	  for (var j = firstPolylineIndex; j <= lastPolylineIndex; j++) {
      var loc = polyline.getVertex(j);
      var distance = (j == numPolylineVertices - 1) ?
                     0 : distancia3dEarth(loc, polyline.getVertex(j + 1));
      	H_path.push({
        loc: loc,
        step: n,
        distance: distance,
        
        // proporcional a la distancia gmaps te devuelve una duracion
        duration: step.getDuration().seconds * distance / stepDistance
      });
		}//fin for
		//Hemos acabado con los step, ahora va ser otro
		n++;
  }//fin for
}//fin for

//alert("pasos"+n+"  path: "+H_path.length);
}


function dobleclickcar(event){
				event.preventDefault();
				var lat = event.getLatitude();
				var lon = event.getLongitude();
				var i=puntos.length;
				var p=new GLatLng(lat, lon);
				puntos[i]=p;
				
				createPlacemarkmove(lat,lon,"point: "+i);
	
				if(i==0) //si es el primer punto de la ruta
				{					
					
					document.getElementById("indicaciones").innerHTML="Sigue colocando puntos y si quieres borrar el último pulsa el botón <a href='#2' onclick='eliminarpaso()'>X ultimo</a> que está sobre el mapa.";
					 buttondeshacer(0, 69, 85, 19);
					 medalaganades=1;
				}
				else
				{
				if(i==24)
					{
					alert("El limite es 25 puntos. Espere mientras carga la ruta");
					terminaruta();
					}
				}
				}
function dobleclicklib(event){
				event.preventDefault();
				var lat = event.getLatitude();
				var lon = event.getLongitude();
				var alt=H_ge.getGlobe().getGroundAltitude(lat, lon);
				      			puntos.push([lat,lon]);
				var i=puntos.length-1;
				if(i==0) //si es el primer punto de la ruta
				{					
									createPlacemark(lat,lon,"salida");
									buttondeshacer(0, 69, 85, 19);
									 medalaganades=1;
									document.getElementById("indicaciones").innerHTML="Sigue colocando puntos y si quieres borrar el último pulsa el botón <a href='#2' onclick='eliminarpaso()'>X ultimo</a> que está sobre el mapa.";
					
				}
				else //si es otro punto
				{
				//calculamos el punto anterior
				latant=puntos[i-1][0];
				lonant=puntos[i-1][1];
				//creamos una linea desde el punto anterior al nuevo añadido
				createLinearuta(lat,lon,latant,lonant);
				
				//vamos sumando la distancia
				punto1 = new Array(3);
				punto1=	[lat,lon,alt];
				punto2 = new Array(3);
				punto2=	[latant,lonant,altant];
				var d=distancia3dEarth(punto1,punto2);
				distruta=distruta+d;
				}
				}

function crearruta(){
	buttoncomenzar(0, 10, 85, 19); // x, y, width, height
	buttonterminar(0, 102, 85, 19);
	medalagana=1;
	medalaganater=1;
	estaterminada=0;
	
document.getElementById('car').disabled = true;
document.getElementById('lib').disabled = true;
document.getElementById('tabperfil').disabled = true;
document.getElementById('tabinforuta').disabled = true;
document.getElementById('tablista').disabled = true;
document.getElementById('indicaciones').innerHTML = "Coloca puntos de la ruta haciendo <b>doble click</b> con el ratón sobre el mapa. Cuando quieras finalizar la ruta pulsa el botón <b>Terminar</b> sobre el mapa.";
document.getElementById('gr').style.cursor='default';
document.getElementById('gr').disabled=true;

var i=0;//para que se pueda continuar una ruta si antes se ha cargado alguna.

puntoscargados=[];

puntos=[];
	perfil=[];
			arrayicos=[];
			el=0;

	if(varcontinuar==1)
		puntos.push([ptocontinuar[0],ptocontinuar[1]]);
	
if(document.getElementById('crphp'))
document.getElementById('crphp').style.visibility='hidden';

google.earth.addEventListener(H_ge.getWindow(), "mouseup", setPageFocus);
function setPageFocus(){
  window.focus();
  }
  
if(document.getElementById('car').checked)
	{
	google.earth.addEventListener(H_ge.getGlobe(), 'dblclick', dobleclickcar);
	}
	
else if(document.getElementById('lib').checked)
{
	 google.earth.addEventListener(H_ge.getGlobe(), 'dblclick', dobleclicklib);
}
}//fin crearruta()



function terminaruta(x){

if(puntos[0]==null)
				{
							
					alert("La ruta no contiene puntos. Hacer doble click en el mapa");
				}
			else if(puntos.length==1)
				{
					
						alert("Por Favor, haz clic en al menos otro punto mas y pulsa de nuevo terminar");
				}
			else
			{
estaterminada=1;
buttoncomenzar(0, 10, 85, 19); // x, y, width, height
buttoncontinuar(0, 34, 85, 19);
buttoncambios(0, 160, 85, 19);
medalaganacont=1;
medalagana=1;
medalaganacamb=1;
document.getElementById('gr').style.cursor='pointer';
document.getElementById('gr').disabled=false;
//nvecesrutacont=1;
perfil=[];

if(document.getElementById('car').checked)
		terminaruta_car();
else if(document.getElementById('lib').checked)
		terminaruta_lib(x);
		
document.getElementById('car').disabled = false;
document.getElementById('lib').disabled = false;

document.getElementById('tabperfil').disabled = false;
document.getElementById('tabinforuta').disabled = false;
document.getElementById('tablista').disabled = false;

document.getElementById('indicaciones').innerHTML = "Has creado una ruta:<br> <a href='#2' onclick='indidatos()'>ver</a> los datos de la ruta.<br><a href='#2' onclick='indicontinuar()'>Continuar</a> la ruta.<br><a href='#2' onclick='subir()'>Subir</a> la ruta a GoogleBike.<br><a href='#2' onclick='descargar()'>Guardar</a> la ruta en mi PC.";
}
}



function eliminarpaso()
	{
	if(puntos.length>1)
	{
		if(estaterminada==0)
		{
		document.getElementById('indicaciones').innerHTML = "Acabas de borrar el último punto que colocaste. Haz <b>doble clic</b> para seguir colocando puntos o <a href='#2' onclick='eliminarpaso()'>X ultimo</a> para seguir borrando uno por uno cada punto.";
		puntos.pop();
		//lo borramos del mapa
		var features = H_ge.getFeatures();
		var c;
		c = features.getLastChild();
		features.removeChild(c);
		}
		else
			alert("No puedes borrar.La ruta ya está finalizada. Si has seleccionado el Modo Rutas por carretera puedes arrastrar los puntos azules para modificarla");
	
	}
	else if(puntos.length==1)
	             {
				 if(varcontinuar==1)
					alert("No hay puntos que borrar. Haz doble click para poner puntos");
				else
				{
				document.getElementById('indicaciones').innerHTML = "Acabas de borrar Todos los puntos de la ruta. Haz <b>doble clic</b> para colocar el primer punto.";
				puntos.pop();
				//lo borramos del mapa
				var features = H_ge.getFeatures();
				var c;
				c = features.getLastChild();
				features.removeChild(c);
				c = features.getLastChild();
				features.removeChild(c);
				 c = features.getLastChild();
				features.removeChild(c);
				c = features.getLastChild();
				features.removeChild(c);
				}
				
				 }
	else
		alert("No hay puntos que borrar");
	}
	
function terminaruta_car()
{
google.earth.removeEventListener(H_ge.getGlobe(), 'dblclick', dobleclickcar); //borro el evento del doble click



 			if(puntos[0]==null)
				{
								
					alert("La ruta no contiene puntos. Hacer click en el mapa");
				}
			else if(puntos.length==1)
				{
					
						alert("Por Favor, haz clic en al menos otro punto mas y pulsa de nuevo terminar");
				}
			else
			{
			
			$('#route-details').empty();
  		$('#route-details').html(
      '<span class="loading">Cargando Ruta ...</span>');
  
			if (H_directions)
    	H_directions.clear();
			
			H_directions = new google.maps.Directions(H_map, null);
			
			google.maps.Event.addListener(H_directions, 'error', function() {
						
			
			alert("Imposible trazar la ruta. Por Favor comience otra ruta");
			puntos=[];
					
		$('#route-details').empty();
		
		$('#route-details').html(
        '<span class="error">No Existe la Direccion. </span>');
  		
		
		});
			
			//cuando se produce el evento load, se ejecuta la funcion H_load
			google.maps.Event.addListener(H_directions, 'load', function H_load(){
			
			dtotal=H_directions.getDistance().meters;
			
			
		//calculamos el perfil
		
		
		if(dtotal>180000)
			alert("Lo siento, no se permiten rutas superiores a 180 KM");
		else
		{
		//me construye los arrays de pasos y path y pinta las lineas y la lista de direcciones
		H_RutaLoad();
		preparaperfilcar();
		}
			
	
			});
			
		
		
		if( document.getElementById('auto').checked)
		{
		
		H_directions.loadFromWaypoints(puntos,{getSteps: true, getPolyline: true,avoidHighways:true});
		
	
		}

		else
		{
		H_directions.loadFromWaypoints(puntos,{getSteps: true, getPolyline: true});
	
		}	
		//cuando ya sa calculado la ruta hacemos todo lo necesario con ella
		}
}

function terminaruta_lib(x)
{
google.earth.removeEventListener(H_ge.getGlobe(), 'dblclick', dobleclicklib); //borro el evento del doble click
		var l=puntos.length;
		
		if(l==0)
				alert("La ruta no contiene puntos. Hacer click en el mapa");
				
		else
		{
		if(x==1)
		{
		var g=1;	
		var latant=puntos[0][0];
		var lonant=puntos[0][1];
		var lati=0;
		var loni=0;
		
		while(puntos[g]!=null)
		{
		lati=puntos[g][0];
		loni=puntos[g][1];
		createLinearuta(latant,lonant,lati,loni);
		latant=lati;
		lonant=loni;
		g++;
		}
		}		
		//añadimos la marca de llegada
		
		puntosant=puntos;
		
		lat2=puntos[l-1][0];
		lon2=puntos[l-1][1];
			
		createPlacemark(lat2,lon2,"llegada");
		//hacemos todo lo que queramos hacer con la ruta seleccionada. ver perfil ...
		var b=1;
		dtotal=0;
		while(b<l)
		{
		var loc1=new GLatLng(puntos[b][0], puntos[b][1]);
		var loc2=new GLatLng(puntos[b-1][0], puntos[b-1][1]);
		dtotal+=distancia3dEarth(loc1,loc2);
		b++;
		}
		
		$('#route-details').empty();
						
		$('#route-details').html(
		'<span class="loading">Lo siento, para rutas de libre trazado o rutas cargadas, no podemos ofrecerles la lista de direcciones.</span>');
		
		
		obtptosintermedios_lib(cadadist);	
		}
}


function ultima()
{


if(dtotal>180000)
		{
		alert("Lo siento, no se permiten rutas mayores a 180 km");
		}
		else
		{

		limpiargraph();
		
		//calculamos el perfil
		
	if(dtotal<=45000)
		perfilconporlib(1);
	else
		{
		perfilconporlib(0);
		var ngraf=0;
		var paso=0;
		if(dtotal<=90000)
		ngraf=2;
		else if(dtotal<=135000)
		ngraf=3;
		else if(dtotal<=180000)
		ngraf=4;
		
		var lonp=0;//tamaño perfi
		
		lonp=perfil.length;
				
		paso=parseInt((dtotal/ngraf)/100);
				
		for(var i=0;i<ngraf-1;i++)
		{
		var final=i*paso+paso;
		if(lonp<final)
		final=lonp;
		var tmp = perfil.slice(i*paso,final);
		perfilconporlibi(tmp,i,paso);
		}
		
		var tmp = perfil.slice(i*paso,lonp);
		perfilconporlibi(tmp,i,paso);
			
		}
		
		
		}

}



function obtptosintermedios_lib(cadadist)
			{
 				 var i=0;
				 var indice=0;
				 var d=0;
				 var dist=0;
				 acum=0;
				 var queda=0;
				 var x=0;
				 var resto=0;
				 
				 while(puntos[i]!=null)
				 {
								
				 if(i==0)
				 			{
							H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
								var lookAt = H_ge.createLookAt('');
							lookAt.set(puntos[0][0],puntos[0][1], 0, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 1000);
							H_ge.getView().setAbstractView(lookAt);
							var alt=H_ge.getGlobe().getGroundAltitude(puntos[0][0],puntos[0][1]);
							perfil[0]=[parseFloat(puntos[0][0].toFixed(5)),parseFloat(puntos[0][1].toFixed(5)),alt];
							indice=1;
							}
				
				 else
				 		 {
  					 //pontemos los puntos en formato [a,b,c]
						 lat2=puntos[i][0];
						 lon2=puntos[i][1];
						 punto2=	[lat2,lon2];//puntos[i]
						 
						 //distancia(puntos[i],puntos[i-1])+acum
								lat1=puntos[i-1][0];
								lon1=puntos[i-1][1];
								var punto1=	[lat1,lon1];//puntos[i-1]
								var loc1=new GLatLng(punto1[0], punto1[1]);
								var loc2=new GLatLng(punto2[0], punto2[1]);
								d=distancia3dEarth(loc1,loc2);
						 				 
				 		 if(acum==0)
						 {
						 		//distancia(puntos[i],perfil[indice]);
								lat3=perfil[indice-1][0];
						 		lon3=perfil[indice-1][1];
						 										
								var punto3=	[lat3,lon3];
								
								var loc1=new GLatLng(punto2[0], punto2[1]);
								var loc2=new GLatLng(punto3[0], punto3[1]);
								
								dist=distancia3dEarth(loc1,loc2);
						 		
						 }
						 else
						 {
						 		dist=d+acum;
						 }
						 
						 if(dist<=cadadist)
						 {
						    acum=dist;	
						 }
						 else
						 {
						 		//división entera dist/1000
								 
								var m=dist%cadadist;
 								var a=dist-m;
 								var N=a/cadadist;
								//extra es lo que hay que coger desde el puntos[i] palante para q con el acum sume 1000
								var extra=cadadist-acum;
								
								//nuevoP=puntos[i-1]+extra
								//nuevoP = new Array(3);
								
								var lat=puntos[i-1][0]+(puntos[i][0]-puntos[i-1][0])*(extra/d);
								var lon=puntos[i-1][1]+(puntos[i][1]-puntos[i-1][1])*(extra/d);
								
								var alt=H_ge.getGlobe().getGroundAltitude(lat, lon);
									
								//nuevoP=	[lat,lon,alt];
								perfil[indice]=[parseFloat(lat.toFixed(5)),parseFloat(lon.toFixed(5)),alt];
   							indice++;
								
								
								queda=d-extra;
								//x=queda/1000 x son los puntos que se pueden coger dentro del segmento
								var h=queda%cadadist;
 								var b=queda-h;
 								var x=b/cadadist; //los puntos a poner
								//resto, es lo que quedaría suelto al final <1000 si la dis total 2700 resto=700
								//resto=d-x*1000;
								
								
								if(N>1)
								{
								  var j=1;
								 	for(j=1;j<=x;j++)
									   {
										 //nuevoP=extra+1000*j
										 var extra1=extra+(cadadist*j);
										 lat=puntos[i-1][0]+(puntos[i][0]-puntos[i-1][0])*(extra1/d);
										 lon=puntos[i-1][1]+(puntos[i][1]-puntos[i-1][1])*(extra1/d);
										 alt=H_ge.getGlobe().getGroundAltitude(lat, lon);
										 
										 //perfil[indice]=nuevoP
										 perfil[indice]=[parseFloat(lat.toFixed(5)),parseFloat(lon.toFixed(5)),alt];
										 indice++;
										 }
								}
								else
								{
								 	
								}
								acum=(d-extra)%cadadist;
								
							}
						}
				 i++;
				 }
				 
				 i--;
				 //añadimos tb el último punto de la ruta
				 var alt=H_ge.getGlobe().getGroundAltitude(puntos[i][0],puntos[i][1]);
				 perfil[indice]=[parseFloat(puntos[i][0].toFixed(5)), parseFloat(puntos[i][1].toFixed(5)),alt];
				 
				 if(varcontinuar==1)
					{
					for(var i=perfilant.length-1;i>=0;i--)
						perfil.unshift(perfilant[i]);
					dtotal=dtotalant+dtotal;
					}
					
					perfilant=[];
					var i=0;
					for(i=0;i<perfil.length;i++)
						perfilant.push(perfil[i]);
						
				//en alturas intermedios con el frameend calculamos los datos y depues llamamos a ultimacarga
				address(perfil[0][0],perfil[0][1]);
				
				google.earth.addEventListener(H_ge, 'frameend', alturasintermedios);
				alturasintermedios();
	}	


		
		function perfilconporlib(porcentajes){
						
					 
						if(perfil[0]==null)
							{
							
							alert("Traza la ruta o Pulsa Terminar si la has comenzado");
							}
						else
						{
						
						
						//calculamos cuantos puntos tiene la grafica
						var rampa=0;
						arrayrampa.length=0;
						arrayrampamapa.length=0;
						var rampaant=0;
						var indicerampa=0;
						var np=0;
						var i=0;
						var alturamax=perfil[i][2];
						var alturamin=perfil[i][2];
						var asc=0;
						var des=0;
						var dasc=0;
						var ddes=0;
						var TE=0;
						var altura=0;
						var alturaant=0;
						np=perfil.length;
						//creamos el array con los puntos que vamos añadir a la grafica					
						var myData = new Array(np);
						//añadimos todos los puntos menos el ultimo
						for(i=0;i<np-1;i++)
								  {
									alturaant=altura;
									altura=perfil[i][2];
									//////////////////////////////////////////rampas
									if (i>0)
									{
										
										
										//calculamos rampas cada 2 cadadist
										if(i%3==0)
										{
										rampa=(altura-rampaant)/(cadadist*3/100);
										
																		
										
										if(rampa>10 && rampa<25)
										{
										//lat,lon,pendiente,indice dentro de perfil
											
											arrayrampamapa[indicerampa]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa)];
											if(arrayrampa.length<10)
											{											
											arrayrampa[indicerampa]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa),i];
											indicerampa++;
											}
											else
											{
											//buscamos el menor elemento para sustituirlo
											var indmin=-1;
											var min=Math.round(rampa);
											for(var s=0;s<arrayrampa.length;s++)
												{
												if(arrayrampa[s][2]<min)
													{
													min=arrayrampa[s][2];
													indmin=s;
													}
												}
											//sustituimos el nuevo por el mínimo, si es que el nuevo era más grande que alguno
											if(indmin>=0)
												{
												arrayrampa[indmin]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa),i];
												indicerampa++;
												}
											}
											
										}
										}
										else if((i-1)%3==0)
										{
										rampaant=alturaant;
										
										
										}
										
										
									}
									
									////////////////////////////////////////////////////////////////////// para los datosruta
									if(altura>alturamax)
											alturamax=altura;
											
									if(altura<alturamin)
											alturamin=altura;
									
									if(i>0)
											{
											if(altura>alturaant)
												{
												asc=asc+cadadist;//seria cada dist
												
												dasc=dasc+(altura-alturaant);
												}
											else if (altura<alturaant)
												{												
												des=des+cadadist;
												
												ddes=ddes+(alturaant-altura);
												}
											
											var pm=((perfil[i][2]-perfil[i-1][2])/(cadadist/100)).toFixed(1);
						
												var y=0;
												if (pm>20)
													 pm=20;
												if (pm<-20)
													 pm=-20;
						
												//para el tiempo estimado y las calorías. ecuaciones sacadas por estadísticas.ver excel
												if(document.getElementById('_17').checked)
												{
												if(pm>=0)
												 {
							 					  y = 0.063*(pm*pm) - 1.924*pm + 17.35;
											 
											  }
												else
											 			{
											 			y = -0.129*(pm*pm) - 6.296*pm + 12.48;
											 
											 			}
							
														}									
														if(document.getElementById('_22').checked)
																					{
																					if(pm>=0)
											 										{
																					y = 0.053*(pm*pm) - 2.023*pm + 22.11;
											 										
											 										}
																						 else
																						  {
																							 y = -0.130*(pm*pm) - 5.972*pm + 18.51;
											 										
											 												  }
											 										}												
						
													if(document.getElementById('_27').checked)
													{
														if(pm>=0)
															 {
							 								 			 y = 0.054*(pm*pm) - 2.205*pm + 27.29;
											 
											 	 }
												 		else
																	 {
																	 			 y = -0.107*(pm*pm) - 4.832*pm + 31.32;
											 
											 			 }
														 	}
						
											
											//ponemos la velocidad en minutos y metros y calculamos el tiempo que se tarda en ese tramo					
										 	TE=TE+cadadist/(y*1000/60);
													
											}
									/////////////////////////////////////////////////////////////////////////////
									
									var metros=cadadist*i;//aqui es cadadist *i
									myData[i]=[altura];
									}
						//añadimos el último punto
						alturaant=altura;
						metros=metros+acum;
						altura=perfil[i][2];
						myData[i]=[altura];	
						
						///////////////datosruta
						if(altura>alturaant)
										asc=asc+acum;
						else if (altura<alturaant)
										des=des+acum;
						
						if(altura>alturamax)
								alturamax=altura;
											
						if(altura<alturamin)
								alturamin=altura;
								
						pm=((perfil[i][2]-perfil[i-1][2])/(acum/100)).toFixed(1);
						
												var y=0;
												//ya con una pendiente superior no vamos a ir mas rapido, hay una velocidad que nunca se sobrepasa, por prudencia supongo.
												if (pm>20)
													 pm=20;
												if (pm<-20)
													 pm=-20;
						
												//para el tiempo estimado y las calorías. ecuaciones sacadas por estadísticas.ver excel
												if(document.getElementById('_17').checked)
												{
												if(pm>=0)
												 {
							 					  y = 0.063*(pm*pm) - 1.924*pm + 17.35;
											 
											  }
												 		else
											 			{
											 			y = -0.129*(pm*pm) - 6.296*pm + 12.48;
											 
											 			}
							
													}									
														if(document.getElementById('_22').checked)
																					{
																					if(pm>=0)
											 										{
																					y = 0.053*(pm*pm) - 2.023*pm + 22.11;
											 
											 										}
																					 else
																					  {
											 											y = -0.130*(pm*pm) - 5.972*pm + 18.51;
											 
											 											 }
											 	}												
						
													if(document.getElementById('_27').checked)
													{
														if(pm>=0)
															 {
							 								 			 y = 0.054*(pm*pm) - 2.205*pm + 27.29;
											 
											 	 }
												 		else
																	 {
																	 			 y = -0.107*(pm*pm) - 4.832*pm + 31.32;
											 
											 			 }
														 	}
						
											
											//ponemos la velocidad en minutos y metros						
										 	TE=TE+acum/(y*1000/60);
										 	
						
						TE=TE.toFixed(0);	
						//para calcular la velocidad media hemos sumado el tiempo que tarda sumando los tramos
						var vel=metros/TE;
						vel=(vel/1000)*60;
						vel=vel.toFixed(1);
											
						/////////////////////////////////////////////////////////
						
											
					
										
											
						
						///////////////////////////////////////////////////////
						
						//en este momento metros guarda la distancia total de la ruta.
						
						
						//np es el numero de puntos que obtiene puntos intermedios. puntos del perfil
						//pero para arraypor solo queremos 1 punto cada mil metros.
						//ARRAYPOR tendrá la parte baja metros/1000 elementos.
						var h=metros%1000;
 								var b=metros-h;
 								var d=b/1000;
						
						
						
						///var arraypor=new Array(d);
						var m=0;
						var alt=0;
						
						var x=1000/cadadist; //1000/cadadist
						
						//ncd son los puntos que hay en 1 km
						var ncd=1000/cadadist;
						var n=ncd/2;
						alt=((myData[x]- myData[0])/10).toFixed(1);
						
						if(metros<=1000)
						{
						var coef=new Array(1);

						var a=myData[np-1]-myData[0];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						coef[0]=b;						
								
						var porc=['&chm=t'+b+',009900,0,'+(n)+',10'];
						}
						
						else
						{
						var coef=new Array(d+1);
						coef[0]=alt;
						
						//para que los porcentajes salgan centrado dentro del km, hacemos lo siguiente:
						if(metros<20500)
													n=n-1;
						if(20500<=metros && metros<32500)
													n=n-2;
								
						if(metros>=32500 && metros<50000)
												n=n-3;			
						
						

					
						if(n<0)
							n=0;
					
						
						var porc=['&chm=B,ff0000,0,0,0'];
						
						
						
						if(porcentajes)
						porc.push('|t'+alt+',009900,0,'+(n)+',10');//primer kilómetro
						
						
						if(varcontinuar==0)
						{
						if(document.getElementById('km').checked)
						createplacemarkimagen(perfil[0][0],perfil[0][1],'km 0 | '+alt+'%','http://googlebike.com/images/KM.png');
						}
						
						for(i=1;i<d;i++)
								{
									alt=(myData[x*(i+1)]- myData[x*i])/10;
									alt=alt.toFixed(1);
									coef[i]=alt; //alt/1000 * 100
									if(porcentajes)
									porc.push('|t'+alt+',009900,0,'+((n)+i*ncd)+',10');
									
									if(varcontinuar==1)
									{
															
									if((x*i)>separador)
									{
									
									if(document.getElementById('km').checked)
									createplacemarkimagen(perfil[x*i][0],perfil[x*i][1],'km '+i+' | '+alt+'%:','http://googlebike.com/images/KM.png');
									}
									}
									else
									{
									if(document.getElementById('km').checked)
									createplacemarkimagen(perfil[x*i][0],perfil[x*i][1],'km '+i+' | '+alt+'%:','http://googlebike.com/images/KM.png');
									}
								
								}
						
						varcontinuar=0;
						//calculamos el porcentaje del ultimo km no completo <1000 metros
						//restamos las alturas del ultimo tramo
						
						var a=myData[np-1]-myData[x*i];
						
						
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						
						if(metros%1000!=0)
						{
						if(porcentajes)
						porc.push('|t'+Math.round(b)+',009900,0,'+(2+i*ncd)+',10');
						
						if(document.getElementById('km').checked)
									createplacemarkimagen(perfil[x*i][0],perfil[x*i][1],'km '+i+' | '+b+'%:','http://googlebike.com/images/KM.png');
						
						coef[d]=b;
						}
						}
						
						var c=coeficiente(coef,d+1,metros%1000);//le pasamos el array, el tam del array, y la distancia del último km			
						
  						function simpleEncode(valueArray,maxValue) {
						var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
						var chartData = [];
						for (var i = 0; i < valueArray.length; i++) {
						var currentValue = valueArray[i];
						if (!isNaN(currentValue) && currentValue >= 0) {
						chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
    				}
      			else {
						chartData.push('_');
      			}
  					}
						return chartData.join('');
						}
						
					
						
						
						
						
						
						
						var t=(screen.width*1000/1024).toFixed(0);
						if(t>1000) t=1000;
						var chart_url = "http://chart.apis.google.com/chart?";
						var chart_size = "&chs="+t+"x300";
						
						if(porcentajes)
						var chart_type = "cht=lc&chls=3,3,0&chtt=googlebike.com";
						else
						var chart_type = "cht=lc&chls=3,3,0&chtt=PERFIL - googlebike.com";
						
						var chart_data = "&chco=ff0000&chd=s:"+ simpleEncode(myData,(alturamax+200));
						
						//definimos el intervalo de representacion. en el eje x hasta la distancia total
						//y en e le eje y hasta la maxima altura. Eje x:0, eje y:1
						
						var x=(1000/metros).toFixed(3);
						var metros1=metros.toFixed(0);
						
						var ejes="&chxt=x,y&chxr=0,0,"+metros1/1000+"|1,0,"+(alturamax+200);
						
						
						
						
						//ncd indica cuantos puntos componen un km
						//pondremos los porcentajes en la mitad del km
						var ncd=1000/cadadist;
						var n=ncd/2;
						
							
							//las barras que marcan los kms	
						var detalles="&chf=c,ls,0,ffffff,"+x+",e2e7e6,"+x;
						
						if(porcentajes)
						var url = chart_url + chart_type+detalles+ chart_size + ejes+chart_data+porc;
						else
						var url = chart_url + chart_type+chart_size + ejes+chart_data+porc;
						
						var i = $("<img>").attr("src", url);
						
						$("#graph").empty().append(i);
						
						document.getElementById('url').value=url;
						
						if(document.getElementById('rampas').checked)
						{
						for(var u=0;u<arrayrampamapa.length;u++)
							createplacemarkimagen(arrayrampamapa[u][0],arrayrampamapa[u][1],'','http://googlebike.com/images/rampa.png');
						}
						
						dtotal=metros;
						
						obtdatosruta(metros,np,alturamin,alturamax,asc,des,dasc,ddes,c,TE,vel);
						
						}
	}
		
		
				
		
				function perfilconporlibi(perfillocal,graf,paso)
				{
				cadadist=100;
						//calculamos cuantos puntos tiene la grafica
						var rampa=0;
						arrayrampa.length=0;
						arrayrampamapa.length=0;
						var rampaant=0;
						var indicerampa=0;
						var np=0;
						var i=0;
						var alturamax=perfillocal[0][2];
						var alturamin=alturamax;
						var asc=0;
						var des=0;
						var dasc=0;
						var ddes=0;
						var TE=0;
						var altura=0;
						var alturaant=0;
						
						np=perfillocal.length;
						
									
						//creamos el array con los puntos que vamos añadir a la grafica					
						var myData = new Array(np);
						//añadimos todos los puntos menos el ultimo
						for(i=0;i<np-1;i++)
								  {
									alturaant=altura;
									altura=perfillocal[i][2];
									//////////////////////////////////////////rampas
									if (i>0)
									{
										
										
										//calculamos rampas cada 2 cadadist
										if(i%3==0)
										{
										rampa=(altura-rampaant)/(cadadist*3/100);
										
										
										if(rampa>10 && rampa<25)
										{
										
										//lat,lon,pendiente,indice dentro de perfillocal
											
											arrayrampamapa[indicerampa]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa)];
											if(arrayrampa.length<10)
											{											
											arrayrampa[indicerampa]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa),i];
											indicerampa++;
											}
											else
											{
											//buscamos el menor elemento para sustituirlo
											var indmin=-1;
											var min=Math.round(rampa);
											for(var s=0;s<arrayrampa.length;s++)
												{
												if(arrayrampa[s][2]<min)
													{
													min=arrayrampa[s][2];
													indmin=s;
													}
												}
											//sustituimos el nuevo por el mínimo, si es que el nuevo era más grande que alguno
											if(indmin>=0)
												{
												arrayrampa[indmin]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa),i];
												indicerampa++;
												}
											}
											
										}
										}
										else if((i-1)%3==0)
										{
										rampaant=alturaant;
										
										
										}
										
										
									}
									
									////////////////////////////////////////////////////////////////////// para los datosruta
									if(altura>alturamax)
											alturamax=altura;
											
									if(altura<alturamin)
											alturamin=altura;
									
									
									/////////////////////////////////////////////////////////////////////////////
									
									var metros=cadadist*i;//aqui es cadadist *i
									myData[i]=[altura];
									}
						//añadimos el último punto
						alturaant=altura;
						metros=metros+acum;
						altura=perfillocal[i][2];
						myData[i]=[altura];

					
						
						///////////////datosruta
						
						if(altura>alturamax)
								alturamax=altura;
											
						if(altura<alturamin)
								alturamin=altura;
								
						var h=metros%1000;
 								var b=metros-h;
 								var d=b/1000;
						
						
						var m=0;
						var alt=0;
						
						var x=1000/cadadist; //1000/cadadist
						
						//ncd son los puntos que hay en 1 km
						var ncd=1000/cadadist;
						var n=ncd/2;
						alt=((myData[x]- myData[0])/10).toFixed(1);
						
						if(metros<=1000)
						{
						

						var a=myData[np-1]-myData[0];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						coef[0]=b;						
						
						
						var porc=['&chm=t'+b+',009900,0,'+(n)+',10'];
						}
						
						else
						{
											
						//para que los porcentajes salgan centrado dentro del km, hacemos lo siguiente:
						if(metros<20500)
													n=n-1;
						if(20500<=metros && metros<32500)
													n=n-2;
								
						if(metros>=32500 && metros<50000)
												n=n-3;			
						
						

					
						if(n<0)
							n=0;					
						
						var porc=['&chm=B,ff0000,0,0,0'];
						
						
						
						
						porc.push('|t'+alt+',009900,0,'+(n)+',10');//primer kilómetro
						
						
						
						for(i=1;i<d;i++)
								  {
									alt=(myData[x*(i+1)]- myData[x*i])/10;
									alt=alt.toFixed(1);
									
									porc.push('|t'+alt+',009900,0,'+((n)+i*ncd)+',10');
									
									
									}
						
						
						}
						
						
						
						
					
						//calculamos el porcentaje del ultimo km no completo <1000 metros
						//restamos las alturas del ultimo tramo
						
						var a=myData[np-1]-myData[x*i];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						
						if(metros%1000!=0)//porque sino sale infinito.
						{
						porc.push('|t'+Math.round(b)+',009900,0,'+(2+i*ncd)+',10');
						}
						
 
 						function simpleEncode(valueArray,maxValue) {
						var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
						var chartData = [];
						for (var i = 0; i < valueArray.length; i++) {
						var currentValue = valueArray[i];
						if (!isNaN(currentValue) && currentValue >= 0) {
						chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
						}
						else {
						chartData.push('_');
							}
						}
						return chartData.join('');
						}
						
						var t=(screen.width*1000/1024).toFixed(0);
						if(t>1000) t=1000;
						var chart_url = "http://chart.apis.google.com/chart?";
						var chart_size = "&chs="+t+"x300";
						var chart_type = "cht=lc&chls=3,3,0&chtt=TRAMO "+(graf+1)+" - googlebike.com";
						
						
						var chart_data = "&chco=ff0000&chd=s:"+ simpleEncode(myData,(alturamax+200));
						
						//definimos el intervalo de representacion. en el eje x hasta la distancia total
						//y en e le eje y hasta la maxima altura. Eje x:0, eje y:1
						
						var x=(1000/metros).toFixed(3);
						var metros1=metros.toFixed(0);
						
						var ejes="&chxt=x,y&chxr=0,"+(paso*graf)/10+","+((paso*graf+paso)/10)+"|1,0,"+(alturamax+200);
						
						
						
						
						//ncd indica cuantos puntos componen un km
						//pondremos los porcentajes en la mitad del km
						var ncd=1000/cadadist;
						var n=ncd/2;
						
							
							//las barras que marcan los kms	
						var detalles="&chf=c,ls,0,ffffff,"+x+",e2e7e6,"+x;
						
						var url = chart_url + chart_type+detalles+ chart_size + ejes+chart_data+porc;
					
						var i = $("<img style='z-index:1000'>").attr("src", url);
						
						
						if(graf==0)
						{
						$("#graph1").empty().append(i);
						
						document.getElementById('url1').value=url;
						
						
						}
						
						else if(graf==1)
						{
						$("#graph2").empty().append(i);
						
						document.getElementById('url2').value=url;
						
						
						}
						
						else if(graf==2)
						{
						$("#graph3").empty().append(i);
						
						document.getElementById('url3').value=url;
						
						
						}
						
						else if(graf==3)
						{
						$("#graph4").empty().append(i);
						
						document.getElementById('url4').value=url;
						
						
						}
					
	}
		
		






///////////////////////////////perfilesssssssss///////////////////////////////////////////

						
		function preparaperfilcar(){
		 
						if(H_path.length<2)
						{
							
							alert("Traza la ruta o Pulsa Terminar si la has comenzado");
						}
						
						else
						{
							
						puntosant=puntos;
						puntos=[];
							
						for (i = 0; i < H_path.length; i++)
						 {
				 		 var lat=H_path[i].loc.lat();
				 		 var lon=H_path[i].loc.lng();
											
						puntos[i] = [lat,lon];
				 		}
			
				 		//llamamos a la funcion con cadadist=100, por ejemplo.
						
						obtptosintermedios_lib(cadadist);
						}
						}
	
	
	
	
	//CALCULA COEFICIENTE DE UN PUERTO. VER TABLA ALTIMETRIAS.COM
	
function	coeficiente(coef,tam,DistUltimo)
{
var suma=new Number(0);
var i=0;
var entero=0;
var p=0;
var res=new Number(0);
var decimal=0;
for(i=0;i<tam;i++)
    {
		p=coef[i];
		
		
		if(p>0 && p<=4)
		res=new Number(p) + 1;
		
		if(p>4 && p<5)
		{
		entero=parseInt(p);		
		res=entero+1;
		decimal=p-entero;
		res=res+(decimal*2);
		res=res.toFixed(1);
		}
		if(p>=5 && p<6)
		{
		entero=parseInt(p);	
		res=entero+2;
		decimal=p-entero;
		res=res+(decimal*3);
		res=res.toFixed(1);
		}
		if(p>=6 && p<7)
		{
		entero=parseInt(p);	
		res=entero+4;
		decimal=p-entero;
		res=res+(decimal*4);
		res=res.toFixed(1);
		}
		if(p>=7 && p<8)
		{
		entero=parseInt(p);	
		res=entero+7;
		decimal=p-entero;
		res=res+(decimal*5);
		res=res.toFixed(1);
		}
		if(p>=8 && p<9)
		{
		entero=parseInt(p);	
		res=entero+11;
		decimal=p-entero;
		res=res+(decimal*6);
		res=res.toFixed(1);
		}
		if(p>=9 && p<10)
		{
		entero=parseInt(p);	
		res=entero+16;
		decimal=p-entero;
		res=res+(decimal*7);
		res=res.toFixed(1);
		}
		if(p>=10 && p<11)
		{
		entero=parseInt(p);	
		res=entero+22;
		decimal=p-entero;
		res=res+(decimal*8);
		res=res.toFixed(1);
		}
		if(p>=11 && p<12)
		{
		entero=parseInt(p);	
		res=entero+29;
		decimal=p-entero;
		res=res+(decimal*9);
		res=res.toFixed(1);
		}
		if(p>=12 && p<13)
		{
		entero=parseInt(p);	
		res=entero+37;
		decimal=p-entero;
		res=res+(decimal*10);
		res=res.toFixed(1);
		}
		if(p>=13 && p<14)
		{
		entero=parseInt(p);	
		res=entero+46;
		decimal=p-entero;
		res=res+(decimal*11);
		res=res.toFixed(1);
		}
		if(p>=14 && p<15)
		{
		entero=parseInt(p);	
		res=entero+56;
		decimal=p-entero;
		res=res+(decimal*12);
		res=res.toFixed(1);
		}
		if(p>=15 && p<16)
		{
		entero=parseInt(p);	
		res=entero+67;
		decimal=p-entero;
		res=res+(decimal*13);
		res=res.toFixed(1);
		}
		if(p>=16 && p<17)
		{
		entero=parseInt(p);	
		res=entero+79;
		decimal=p-entero;
		res=res+(decimal*14);
		res=res.toFixed(1);
		}
		if(p>=17 && p<18)
		{
		entero=parseInt(p);	
		res=entero+92;
		decimal=p-entero;
		res=res+(decimal*15);
		res=res.toFixed(1);
		}
		if(p>=18 && p<19)
		{
		entero=parseInt(p);	
		res=entero+106;
		decimal=p-entero;
		res=res+(decimal*16);
		res=res.toFixed(1);
		}
		if(p>=19 && p<20)
		{
		entero=parseInt(p);	
		res=entero+121;
		decimal=p-entero;
		res=res+(decimal*17);
		res=res.toFixed(1);
		}
		if(p>=20 && p<21)
		{
		entero=parseInt(p);	
		res=entero+137;
		decimal=p-entero;
		res=res+(decimal*18);
		res=res.toFixed(1);
		}
		if(p>=21 && p<22)
		{
		entero=parseInt(p);	
		res=entero+154;
		decimal=p-entero;
		res=res+(decimal*19);
		res=res.toFixed(1);
		}
		if(p>=22 && p<23)
		{
		entero=parseInt(p);	
		res=entero+172;
		decimal=p-entero;
		res=res+(decimal*20);
		res=res.toFixed(1);
		}
		if(p>=23 && p<24)
		{
		entero=parseInt(p);	
		res=entero+191;
		decimal=p-entero;
		res=res+(decimal*21);
		res=res.toFixed(1);
		}
		if(p>=24 && p<25)
		{
		entero=parseInt(p);	
		res=entero+211;
		decimal=p-entero;
		res=res+(decimal*22);
		res=res.toFixed(1);
		}
		if(p>=25 && p<26)
		{
		entero=parseInt(p);	
		res=entero+232;
		decimal=p-entero;
		res=res+(decimal*23);
		res=res.toFixed(1);
		}
		if(p>=26 && p<27)
		{
		entero=parseInt(p);	
		res=entero+254;
		decimal=p-entero;
		res=res+(decimal*24);
		res=res.toFixed(1);
		}
		if(p>=27 && p<28)
		{
		entero=parseInt(p);	
		res=entero+277;
		decimal=p-entero;
		res=res+(decimal*25);
		res=res.toFixed(1);
		}
		if(p>=28 && p<29)
		{
		entero=parseInt(p);	
		res=entero+301;
		decimal=p-entero;
		res=res+(decimal*26);
		res=res.toFixed(1);
		}
		if(p>=30)
		res=382;
		
		if(p<=0)
		res=1;
		
		if(i<tam-1)
			suma=new Number(suma)+new Number(res);//solo una de las opciones anteriores rellenara el parámetro res
			
		else
		  {
			res=(res*(DistUltimo/1000)).toFixed(1);
			suma=new Number(suma)+new Number(res);
			}
			
		}
		
		return suma;
}
	
	
	
	
 /////////////obtdatosruta//////////////////

function obtdatosruta(metros,np,alturamin,alturamax,asc,des,dasc,ddes,c,TE,vel)
{


document.getElementById('p.dist').value=' '+(metros/1000).toFixed(1);
document.getElementById('p.ai').value=' '+perfil[0][2].toFixed(0);
document.getElementById('p.af').value=' '+perfil[np-1][2].toFixed(0);
document.getElementById('p.des').value=' '+(perfil[np-1][2]-perfil[0][2]).toFixed(0);
document.getElementById('p.t').value=' '+TE;
document.getElementById('p.v').value=' '+vel;
document.getElementById('p.a').value=' '+ (asc/1000).toFixed(1);
document.getElementById('p.d').value=' '+ (des/1000).toFixed(1);
document.getElementById('p.desa').value=' '+ dasc.toFixed(0);
document.getElementById('p.desd').value=' '+ ddes.toFixed(0);
document.getElementById('p.maa').value=' '+alturamax.toFixed(0);
document.getElementById('p.mea').value=' '+alturamin.toFixed(0);
document.getElementById('p.p').value=' '+((perfil[np-1][2]-perfil[0][2])/(metros/100)).toFixed(1);
if(c>0)
			  {
 			 	document.getElementById('p.c').value=' '+c.toFixed(0);
				if(c<75)
				document.getElementById('p.cat').value=' --';
				if(c>=75 && c<125)
				document.getElementById('p.cat').value=' 3a';
				if(c>=125 && c<=200)
				document.getElementById('p.cat').value=' 2a';
				if(c>200 && c<=300)
				document.getElementById('p.cat').value=' 1a';
				if(c>300)
				document.getElementById('p.cat').value=' ES';
				}
if(c==0)
				{
				document.getElementById('p.c').value=' ';
				document.getElementById('p.cat').value=' ';
				}
}

function obtdatosrutaH_path(metros,l,alturamin,alturamax,asc,des,dasc,ddes,TE,vel)
{

document.getElementById('p.dist').value=' '+(metros/1000).toFixed(1);
document.getElementById('p.ai').value=' '+H_ge.getGlobe().getGroundAltitude(H_path[0].loc.lat(),H_path[0].loc.lng()).toFixed(0);
document.getElementById('p.af').value=' '+H_ge.getGlobe().getGroundAltitude(H_path[l-1].loc.lat(),H_path[l-1].loc.lng()).toFixed(0);
document.getElementById('p.t').value=' '+TE;
document.getElementById('p.v').value=' '+vel;
document.getElementById('p.a').value= (asc/1000).toFixed(1);
document.getElementById('p.d').value= (des/1000).toFixed(1);
document.getElementById('p.maa').value=' '+alturamax.toFixed(0);
document.getElementById('p.mea').value=' '+alturamin.toFixed(0);
document.getElementById('p.p').value=' '+((H_ge.getGlobe().getGroundAltitude(H_path[l-1].loc.lat(),H_path[l-1].loc.lng())-H_ge.getGlobe().getGroundAltitude(H_path[0].loc.lat(),H_path[0].loc.lng()))/(metros/100)).toFixed(1);
document.getElementById('p.c').value=' ';
document.getElementById('p.cat').value=' ';
}

//////////////////////////////////////////					
												
		function createPlacemark(lat,lon,texto,url) 
		{
    var placemark = H_ge.createPlacemark('');
    placemark.setName(texto);
    H_ge.getFeatures().appendChild(placemark);
  
    // Create style map for placemark
    var icon = H_ge.createIcon('');
    icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
    if(url)
    icon.setHref(url);
    var style = H_ge.createStyle('');
    style.getIconStyle().setIcon(icon);
    placemark.setStyleSelector(style);
	
    
    // Create point
    var la =H_ge.getView().copyAsLookAt(H_ge.ALTITUDE_RELATIVE_TO_GROUND);
    var point = H_ge.createPoint('');
    point.setLatitude(lat);
    point.setLongitude(lon);
		placemark.setGeometry(point);
    
	 

  
	
	}	
		
		
		
		
	function createPlacemark2 (loc, opt_opts) {
  var placemark = this.H_ge.createPlacemark(opt_opts.id ? opt_opts.id : '');
  
  if (opt_opts.name)
    placemark.setName(opt_opts.name);
  
  if (opt_opts.description)
    placemark.setDescription(opt_opts.description);
  
  // Create style map for placemark
  if (opt_opts.standardIcon && !opt_opts.icon)
    opt_opts.icon = 'http://maps.google.com/mapfiles/kml/paddle/' +
                    opt_opts.standardIcon + '.png';
  
  if (opt_opts.icon) {
    var icon = this.H_ge.createIcon('');
    icon.setHref(opt_opts.icon);
    
    var iconStyle = this.H_ge.createStyle('');
    iconStyle.getIconStyle().setIcon(icon);
    
    var styleMap = this.H_ge.createStyleMap('');
    styleMap.setNormalStyle(iconStyle);
    styleMap.setHighlightStyle(iconStyle);
    placemark.setStyleSelector(styleMap);
  }
  
  var point = this.H_ge.createPoint('');
  point.setLatitude(loc.lat());
  point.setLongitude(loc.lng());
  placemark.setGeometry(point);
  
  this.H_ge.getFeatures().appendChild(placemark);
  
 
  
  return placemark;
  
  
}


		
function createplacemarkimagen(lat,lon,texto,urlimagen,zoom,url,ico)
{


// Create the placemark. 
var placemark = H_ge.createPlacemark(''); 

if(ico)
placemark.setDescription(texto); 

if(!url && !ico)
placemark.setName(texto); 

 
// Set the placemark's location.   
var point = H_ge.createPoint(''); 
point.setLatitude(lat); 
point.setLongitude(lon); 
placemark.setGeometry(point); 

 
// Create a style map. 
var styleMap = H_ge.createStyleMap(''); 
 
// Create normal style for style map. 
var normalStyle = H_ge.createStyle(''); 
var normalIcon = H_ge.createIcon(''); 
normalIcon.setHref(urlimagen); 
normalStyle.getIconStyle().setIcon(normalIcon); 
 
// Create highlight style for style map. 
// Create highlight style for style map. 
var highlightStyle = H_ge.createStyle(''); 
var highlightIcon = H_ge.createIcon(''); 
highlightIcon.setHref(urlimagen); 
highlightStyle.getIconStyle().setIcon(highlightIcon); 
if(zoom=='zoom')
highlightStyle.getIconStyle().setScale(2.0); 
else
highlightStyle.getIconStyle().setScale(1.0); 
 
styleMap.setNormalStyle(normalStyle); 
styleMap.setHighlightStyle(highlightStyle);
 
// Apply stylemap to a placemark. 
placemark.setStyleSelector(styleMap); 
 
//Add the placemark to Earth. 
H_ge.getFeatures().appendChild(placemark);

if(url)
{

placemark.setDescription( 
         '<img src="images/logo2.jpg" height="25px" ' + 
         '<p><em>Feature balloons</em> accept most HTML.</p>' + 
         '<table border="1px"><tr><th>Allowed</th><th>Not allowed</th></tr>' + 
         '<tr><td>Tables</td><td>IFRAMEs</td></tr>' + 
         '<tr><td>Font styles</td><td>&#60;embed&#62; and &#60;object&#62; tags</td></tr>' + 
         '<tr><td>etc...</td><td>&nbsp;</td></tr></table>' + 
         '<p>CSS and JavaScript are not supported.</p>'); 


google.earth.addEventListener(placemark, 'mouseover', function(event) {
var b = H_ge.createFeatureBalloon(''); 
b.setFeature(placemark); 
H_ge.setBalloon(b);
   });
   
google.earth.addEventListener(placemark, 'click', function(event) {
location.href=url;
   });
   
   
}



}





		
		
	function createLineaStyle (opt_opts) {
  var style = this.H_ge.createStyle('');
  var lineStyle = style.getLineStyle();
  if (opt_opts.width)
    lineStyle.setWidth(opt_opts.width);
  if (opt_opts.color)
    lineStyle.getColor().set(opt_opts.color);
  return style;
}
////////////////////////////////OBTIENE PUNTOS INTERMEDIOS //////////////////////
		
		
		//MATEMAÁTICASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
var EARTH_RADIUS = 6378100;

//recibe 2 puntos representados por el objeto GLatLng
			

			function distancia3dEarth(loc1, loc2) 
			
			{	
			
			//Pasamos la lat,lon a coordenadas cartesianas
			p1 = PasarACartesianas([loc1.lat(), loc1.lng(),
   		this.H_ge.getGlobe().getGroundAltitude(loc1.lat(), loc1.lng())]);
  		p2 = PasarACartesianas([loc2.lat(), loc2.lng(),
   		this.H_ge.getGlobe().getGroundAltitude(loc2.lat(), loc2.lng())]);
 			
			
			//CALCULAMOS EN ANGULO DE LOS 2 PUNTOS RESPECTO AL RADIO DE LA TIERRA. PARA ELLO:
			//1º. normalizamos los 2 puntos
			var n1=normalizar(p1);
			var n2=normalizar(p2);
			//2º. hacemos el producto escalar de los 2 puntos normalizados
			
			
			
			var dot= n1[0] * n2[0] + n1[1] * n2[1] + n1[2] * n2[2];
			
			
			if(dot>1)
			{
				dot=1;
			}
			if(dot<-1)
			{
				dot=-1;
			}
			
			//3º. le aplicamos el arcoseno para obtener el angulo
			var angle = Math.acos(dot);
    	
			
		
			//multiplicamos el angulo por el radio de la tierra para hallar la distancia
			var dist = EARTH_RADIUS * angle;
			
    	return dist;
			
			
			
				
		
			/*var alfa=a[0];
			var beta=a[1];
			var h=a[2];
			//pasamos a coord cartesianas
			var x1=(EARTH_RADIUS+h)*Math.cos(alfa)*Math.cos(beta);
			var y1=(EARTH_RADIUS+h)*Math.sin(alfa);
			var z1=-(EARTH_RADIUS+h)*Math.cos(alfa)*Math.sin(beta);
			
			alfa=b[0];
			beta=b[1];
			h=b[2];
			
			var x2=(EARTH_RADIUS+h)*Math.cos(alfa)*Math.cos(beta);
			var y2=(EARTH_RADIUS+h)*Math.sin(alfa);
			var z2=-(EARTH_RADIUS+h)*Math.cos(alfa)*Math.sin(beta);
			
			
			
			var norma1=Math.sqrt(x1*x1+y1*y1+z1*z1);
			
			var norma2=Math.sqrt(x2*x2+y2*y2+z2*z2);
			
			var proesc=x1*x2+y1*y2+z1*z2;
			
			var tita=Math.acos(proesc/norma1/norma2);
			
			var dist= tita*EARTH_RADIUS;
			
			return dist;*/
			
			
			}
			
			
			
			function PasarACartesianas(vert) {
			var sinalfa = Math.sin(vert[1] * Math.PI / 180);
			var cosalfa = Math.cos(vert[1] * Math.PI / 180);
			var sinbeta = Math.sin(vert[0] * Math.PI / 180);
			var cosbeta = Math.cos(vert[0] * Math.PI / 180);

			var r = EARTH_RADIUS + vert[2];
			var result = [
			r * cosalfa * cosbeta,
			r * sinbeta,
			r * -sinalfa * cosbeta ];
			return result;
			}
			
			function escala(a, scale) {
   		return [a[0] * scale, a[1] * scale, a[2] * scale];
  		}

  		function longitud(a) {
    	return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);
  		}

  		function normalizar(a) {
    	var lon = longitud(a);
    	if (lon <= 0) {
      return [NaN, NaN, NaN];
    	}
    	return escala(a, 1.0 / lon);
  		}
			
		
//ssssssssssssssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS




////////////////////////////obt porcentaje a y b///////////////////////




function obtporcentaje() 
			{
			//si la ruta estaba a medio hacer la anulamos, ponemos de nuevo para comenzar una ruta
			document.getElementById('cargar').style.visibility='hidden';

document.getElementById('opciones').style.visibility='visible';


document.getElementById('gr').style.visibility='visible';
document.getElementById('cr').style.visibility='visible';




document.getElementById('gr').disabled=false;
document.getElementById('gr').style.cursor='pointer';
document.getElementById('car').disabled = false;
document.getElementById('lib').disabled = false;

document.getElementById('tabperfil').disabled = false;
document.getElementById('tabinforuta').disabled = false;
document.getElementById('tablista').disabled = false;
			//borramos la ruta anterior DESPUES DE HABER HECHO TODO
			/*var i=0;
			while(puntos[i][0]!=null)
			{
							  puntos[i][0]=null;
								puntos[i][1]=null;
								puntos[i][2]=null;
								i++;
			}*/
			//borramos tb los datos del perfil
			var j=0;
			while(perfil[j][0]!=null)
			{
							  perfil[j][0]=null;
								perfil[j][1]=null;
								perfil[j][2]=null;
								j++;
			}
			
		//como hemos terminado la ruta lo indicamos
		if(control>0)
		nvecesruta=1;
		nvecesrutalib=1;
				 //document.getElementById('mapcontainer').style.visibility='visible';
				 ocultargraph()
				 document.getElementById('infograph').style.visibility='hidden';			
			pendiente();
			}
			
function pendiente(){

			document.getElementById('car').disabled = false;
document.getElementById('lib').disabled = false;
document.getElementById('tabperfil').disabled = false;
document.getElementById('tabinforuta').disabled = false;
document.getElementById('tablista').disabled = false;


			var porcentaje=0;
			var dist=0;
			puntoa = new Array(3);
	 		puntob = new Array(3);
			var nveces=0;
			
			
			google.earth.addEventListener(H_ge.getWindow(), 'click', function(event) {

				var lat = event.getLatitude();
        var lon = event.getLongitude();
        var alt = H_ge.getGlobe().getGroundAltitude(lat, lon);
				
				
       			
				if(nveces==0) //si es el primer punto de la ruta
				{											 
									var features = H_ge.getFeatures();
 									var c;
 									while (c = features.getLastChild())
    							{features.removeChild(c);}
									createPlacemark(lat,lon,"A");
									puntoa=	[lat,lon,alt];
									nveces=1;
									
				}
				else if(nveces==1) //si es el segundo punto
				{
				
				createPlacemark(lat,lon,"B");
				puntob=	[lat,lon,alt];
				
				createLinearuta(lat,lon,puntoa[0],puntoa[1],1);
				
				var loc1=new GLatLng(puntoa[0], puntoa[1]);
				var loc2=new GLatLng(puntob[0], puntob[1]);
				dist=distancia3dEarth(loc1,loc2);
				altitud=puntob[2]-puntoa[2];
				
				porcentaje=(altitud/dist)*100;
				porcentaje=porcentaje.toFixed(1);
				
				
				document.getElementById('pendiente').value=porcentaje+"%";
				
				
				//borramos datos de la ruta anterior
				$('#route-details').empty();
  			$('#route-details').html(
      '<span class="loading">Seleccione una ruta.</span>');
			
			vaciatabla();
			
			$('#graph').empty();
			$('#graph').html(
      '<span class="loading">Seleccione una ruta.</span>');
				////////
				
				nveces=2;
				}
     		
				else
				{
				return;
				}
				  
				
        });

			
} 





////////////////////////////////////////////////////////////////////////
 function addToLineString(lineString, lat, lon, latOffset, lngOffset) {
      var altitude = 1.0; 
      lineString.getCoordinates().pushLatLngAlt(lat + latOffset, lon + lngOffset, altitude);
    }


 function createLinearuta(lat,lon,latant,lonant,x) {
 

  
    var lookAt = H_ge.getView().copyAsLookAt(H_ge.ALTITUDE_RELATIVE_TO_GROUND);
    
  
    // creamos un placemark vacío donde empieza la ruta.
    var lineStringPlacemark = H_ge.createPlacemark('');
    
    // creamos la línea
    var lineString = H_ge.createLineString('');
    lineStringPlacemark.setGeometry(lineString);
    
    
    lineString.setTessellate(true);
		
		// Si no tiene un estilo asociado, lo asociamos.
    if (!lineStringPlacemark.getStyleSelector()) {
      lineStringPlacemark.setStyleSelector(H_ge.createStyle(''));
    }
  
    // podemos cambiarla de color, y de anchura, por ejemplo.
    var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
    lineStyle.setWidth(lineStyle.getWidth() + 2);
    
		lineStyle.getColor().set('ffff3333'); 
		if(x==1)
		{
				lineStyle.getColor().set('CF33F000');
				lineStyle.setWidth(lineStyle.getWidth() + 4);
		}
		if(x==2)
		{
		lineStyle.getColor().set('CF33F000');
		lineStyle.setWidth(lineStyle.getWidth() + 2);
		}
	
  
    // añadimos los puntos por donde pasará la línea.
    addToLineString(lineString, lat, lon,   0,   0, 0);
    addToLineString(lineString, latant, lonant, 0,  0, 0);
 
  	//guardamos esta línea
    H_ge.getFeatures().appendChild(lineStringPlacemark);
  }
	
	
	
	function vaciatabla()
	{
document.getElementById('p.dist').value=' ';
document.getElementById('p.ai').value=' ';
document.getElementById('p.af').value=' ';
document.getElementById('p.des').value=' ';
document.getElementById('p.t').value=' ';
document.getElementById('p.v').value=' ';
document.getElementById('p.a').value=' ';
document.getElementById('p.d').value=' ';
document.getElementById('p.maa').value=' ';
document.getElementById('p.mea').value=' ';
document.getElementById('p.p').value=' ';

				document.getElementById('p.c').value=' ';
				document.getElementById('p.cat').value=' ';
					
			
			}
////////////////////////////////////////////////// pesttannias ////////////////////////////////////////////////////////
			function btmapa()
				 {
				 document.getElementById('earth-container').style.visibility='visible';
				 document.getElementById('menu').style.visibility='visible';
				 
				 ocultargraph();
				 document.getElementById('infograph').style.visibility='hidden';
				 document.getElementById('route-details').style.visibility='hidden';
				document.getElementById('opciones').style.visibility='visible';
				 document.getElementById('cr').style.visibility='visible';
				  
				document.getElementById('gr').style.visibility='visible';
				document.getElementById('subir').style.visibility='hidden';
				document.getElementById('iconos').style.visibility='hidden';


				if(perfil[0]!=null)
				 											 {
											 				 
											 				 
															 }

				 }
				 
function btperfil()
				 {
				 document.getElementById('iconos').style.visibility='hidden';
				 document.getElementById('earth-container').style.visibility='hidden';
				 document.getElementById('menu').style.visibility='hidden';
				 
				 mostrargraph();
				 document.getElementById('infograph').style.visibility='hidden';
				 document.getElementById('route-details').style.visibility='hidden';
				 document.getElementById('opciones').style.visibility='hidden';
				 document.getElementById('cr').style.visibility='hidden';
				 
				 
				 
				document.getElementById('gr').style.visibility='hidden';
				document.getElementById('subir').style.visibility='hidden';

				 }

function btlista()
				 {
				 document.getElementById('iconos').style.visibility='hidden';
				 document.getElementById('earth-container').style.visibility='hidden';
				 document.getElementById('menu').style.visibility='hidden';
				 
				 ocultargraph()
				
				 document.getElementById('infograph').style.visibility='hidden';
				 document.getElementById('route-details').style.visibility='visible';
 				 document.getElementById('opciones').style.visibility='hidden';
				 document.getElementById('cr').style.visibility='hidden';
				 
				 
				 
				document.getElementById('gr').style.visibility='hidden';
				document.getElementById('subir').style.visibility='hidden';

				 }
				 
function btinforuta()
				 {
				 document.getElementById('iconos').style.visibility='hidden';
				 document.getElementById('earth-container').style.visibility='hidden';
				 document.getElementById('menu').style.visibility='hidden';
				 
				 
				 
				 ocultargraph()
				 
				 document.getElementById('infograph').style.visibility='visible';
				 document.getElementById('route-details').style.visibility='hidden';
				document.getElementById('opciones').style.visibility='hidden';
				 document.getElementById('cr').style.visibility='hidden';
				
				document.getElementById('gr').style.visibility='hidden';
				document.getElementById('subir').style.visibility='hidden';
				
				 }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			
////////////////////////////////////////////////// limpiar todo y continuar ruta////////////////////////////////////////////
function limpiar(x)
{
el=0; //variable para que salga bien los puntos en carretera cuando se elimina uno
distruta=0;
ptosruta=0;
controlcont=0;


arrayicos=[];
		/*		
					if(x==1 || x==0)
					{}
					else
					{
					var i=0;
					while(puntoscargados[i][0]!=null)
					{
					puntoscargados[i][0]=null;
					puntoscargados[i][1]=null;
					puntoscargados[i][2]=null;
					i++;
					}
					}*/
					//borramos tb los datos del perfil
					perfil=[];
					


	
document.getElementById('car').disabled = false;
document.getElementById('lib').disabled = false;
document.getElementById('tabperfil').disabled = false;
document.getElementById('tabinforuta').disabled = false;
document.getElementById('tablista').disabled = false;

document.getElementById('gr').style.cursor='default';
document.getElementById('gr').disabled=true;





H_directions = null;

//La lista de pasos de la ruta de google.maps.Directions
 
H_steps = [];

//array para guardar los puntos donde el usuario clickea para crear ruta
puntos= [];

n=0;




//El array de la ruta. Con sus puntos o vertices. todos los puntos de la ruta.
H_path = []; 


//clear Features -- borrar puntos, lineas
	
	
	
	var features = this.H_ge.getFeatures();
	var c;
	while (c = features.getLastChild())
    features.removeChild(c);
	
	

borrarperfil_lista_info();
}

function borrarperfil_lista_info()
{
$('#route-details').empty();
  			$('#route-details').html(
      '<span class="loading">Seleccione una ruta.</span>');
			
			vaciatabla();
			
			$('#graph').empty();
			$('#graph').html(
      '<span class="loading">Seleccione una ruta.</span>');


}



function continuar()
{
varcontinuar=1;
controlcont++;
dtotalant=dtotal;
ptocontinuar=perfilant.pop();
separador=perfilant.length-1;
buttondeshacer(0, 69, 85, 19);
medalaganades=1;
crearruta();
}
	
			
////////////////////////////////////////////////////////// PHP /////////////////////////////////////////////////////////////

function enviaphp()
	{
		atras();
		var cadena=" ";
				
		if(document.getElementById('_100').checked)
		{
			cadena = perfil.join(' ');
		}
		
		else if(document.getElementById('_50').checked)
		{
			perfil10=[];
			obtptosintermedios_lib10();	
			cadena = perfil10.join(' ');
		}
		
		if(arrayicos[0]!=null)
		{
		var ico=arrayicos.join('*');
		document.getElementById('ico').value=ico;
		}
		else
		document.getElementById('ico').value='nada';
		
		
		cadena=cadena+"ff";
		document.getElementById('a').value=cadena;
	}	

	
	
	
	
function descargaphp()
	{
		cancelar();
		var cadena=" ";
				
		if(document.getElementById('_100').checked)
		{
			cadena = perfil.join(' ');
		}
		
		else if(document.getElementById('_50').checked)
		{
			perfil10=[];
			obtptosintermedios_lib10();	
			cadena = perfil10.join(' ');
		}
		
		if(arrayicos[0]!=null)
		{
		var ico=arrayicos.join('*');
		document.getElementById('ico').value=ico;
		}
		else
		document.getElementById('ico').value='nada';
		
		cadena=cadena+"ff";
		document.getElementById('a').value=cadena;
	}	         	

function guardarruta()
{
		
		
		
		
		document.getElementById('guardar').style.visibility='visible';
		document.getElementById('opciones').style.visibility='hidden';	
		document.getElementById('gr').style.visibility='hidden';
		document.getElementById('cr').style.visibility='hidden';
		
}

function cargarruta()
{
		document.getElementById('guardar').style.visibility='hidden';
		document.getElementById('opciones').style.visibility='hidden';	
		document.getElementById('gr').style.visibility='hidden';
		document.getElementById('cr').style.visibility='hidden';
		document.getElementById('menu').style.visibility='hidden';			
		document.getElementById('cargar').style.visibility='visible';
		document.getElementById('subir').style.visibility='hidden';
		
		
}

function atras()
{
		document.getElementById('cargar').style.visibility='hidden';
		document.getElementById('guardar').style.visibility='hidden';
		document.getElementById('gr').style.visibility='visible';
		document.getElementById('cr').style.visibility='visible';
		document.getElementById('opciones').style.visibility='visible';	
		document.getElementById('menu').style.visibility='visible';	
		document.getElementById('subir').style.visibility='hidden';	
}


/*
function recorrerArray(arrayName)
{
    var len=arrayName.length;
    for(var i=0;i<len;i++)
    {
        alert(arrayName[i]);
    }
}
*/	










//////////////////////////////////php///////////////////////// contacto

function valida(){ 
    //valido el nombre 
    if (document.formC.nombre.value.length==0){ 
       alert("Por favor especifique su nombre") 
       document.formC.nombre.focus() 
       return 0; 
    } 
	
    //valido el mail
    if (document.formC.email.value.length==0){ 
       alert("Por favor indíquenos su email") 
       document.formC.email.focus() 
       return 0; 
    } 
	else
	{
		var valor = document.formC.email.value;
		if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)))
		{
		alert("El email que ha especificado no es valido");
		return 0;
		}
	
	}

    //valido el mensaje
    if (document.formC.mensaje.value.length==0){ 
       alert("Por favor escriba su mensaje") 
       document.formC.nombre.focus() 
       return 0; 
    }
	
	//el formulario se envia 
    window.open("","VENTANA","resizable=no,scrollbars= no,width=200,height=80,left=425,top=180")
    document.formC.submit(); 
} 

function validafotos(){ 
    //valido el nombre 
    if (document.formC.archivo.value.length==0){ 
       alert("Por favor,elija una foto de su ordenador. Si no deseas subir fotos pulsa terminar.") 
	   document.formC.archivo.focus();
       return 0; 
    } 
	
	//el formulario se envia 
	
    document.formC.submit(); 
	

} 



///////////////////////////////////////////////CARGAR RUTAS CARGAR RUTAS               CARGAR RUTAS   ///////////////////////////////////////////////////////
function obtptosintermedios_cargados(cadadist)
{
				var i=0;
				 var indice=0;
				 var d=0;
				 var dist=0;
				 acum=0;
				 var queda=0;
				 var x=0;
				 var resto=0;
				 var j=0;
				 				 
				 
				perfil=[];
				
				 while(i<puntoscargados.length)
				 {
								
				 if(i==0)
				 			{
							var l=H_ge.getGlobe().getGroundAltitude(puntoscargados[0][0],puntoscargados[0][1]);
							
							perfil[0]=[parseFloat(puntoscargados[0][0].toFixed(5)),parseFloat(puntoscargados[0][1].toFixed(5)),l];
							indice=1;
							}
				
				 else
				 		 {
  					 //pontemos los puntos en formato [a,b,c]
						 
				 		lat2=puntoscargados[i][0];
						lon2=puntoscargados[i][1];
						var punto2=[lat2,lon2];//puntos[i]
						 
						 //distancia(puntos[i],puntos[i-1])+acum
								lat1=puntoscargados[i-1][0];
	    					lon1=puntoscargados[i-1][1];
																
								var	punto1=	[lat1,lon1];//puntos[i-1]
								
								var loc1=new GLatLng(punto1[0], punto1[1]);
								var loc2=new GLatLng(punto2[0], punto2[1]);
								
						if(punto1[0]!=punto2[0] || punto1[1]!=punto2[1])
						{							
						d=distancia3dEarth(loc1,loc2);
						
													
				 		 if(acum==0)
						 {
						 		//distancia(puntos[i],perfil[indice]);
								lat3=perfil[indice-1][0];
						 		lon3=perfil[indice-1][1];
						 		
								var punto3=	[lat3,lon3];
								
								var loc1=new GLatLng(punto2[0], punto2[1]);
								var loc2=new GLatLng(punto3[0], punto3[1]);
								
								dist=distancia3dEarth(loc1,loc2);
						 }
						 else
						 {
						 		dist=d+acum;
						 }
						 
						 if(dist<=cadadist)
						 {
						    acum=dist;	
						 }
						 else
						 {
						 		//división entera dist/1000
								 
								var m=dist%cadadist;
 								var a=dist-m;
 								var N=a/cadadist;
								//extra es lo que hay que coger desde el puntos[i] palante para q con el acum sume 1000
								var extra=cadadist-acum;
								
								var lat=puntoscargados[i-1][0]+(puntoscargados[i][0]-puntoscargados[i-1][0])*(extra/d);
								var lon=puntoscargados[i-1][1]+(puntoscargados[i][1]-puntoscargados[i-1][1])*(extra/d);
															
								
								var alt=H_ge.getGlobe().getGroundAltitude(lat, lon);
								
								
																		
								//nuevoP=	[lat,lon,alt];
								perfil[indice]=[parseFloat(lat.toFixed(5)),parseFloat(lon.toFixed(5)),alt];
								indice++;
								
								
								queda=d-extra;
								//x=queda/1000 x son los puntos que se pueden coger dentro del segmento
								var h=queda%cadadist;
 								var b=queda-h;
 								var x=b/cadadist; //los puntos a poner
								//resto, es lo que quedaría suelto al final <1000 si la dis total 2700 resto=700
								//resto=d-x*1000;
								
								
								if(N>1)
								{
								  var j=1;
								 	for(j=1;j<=x;j++)
									   {
										 //nuevoP=extra+1000*j
										 var extra1=extra+(cadadist*j);
										 lat=puntoscargados[i-1][0]+(puntoscargados[i][0]-puntoscargados[i-1][0])*(extra1/d);
										 lon=puntoscargados[i-1][1]+(puntoscargados[i][1]-puntoscargados[i-1][1])*(extra1/d);
										
										
										
										alt=H_ge.getGlobe().getGroundAltitude(lat, lon);
										 
										 
										 //perfil[indice]=nuevoP
										 perfil[indice]=[parseFloat(lat.toFixed(5)),parseFloat(lon.toFixed(5)),alt];
										 indice++;
										 }
								}
								else
								{
								 	
								}
								acum=(d-extra)%cadadist;
								
							}
						}
						
						}
				 i++;
				 }
				 
				 i--;
				 //añadimos tb el último punto de la ruta
				 var alt=H_ge.getGlobe().getGroundAltitude(puntoscargados[i][0],puntoscargados[i][1]);
				 
				 perfil[indice]=[parseFloat(puntoscargados[i][0].toFixed(5)),parseFloat(puntoscargados[i][1].toFixed(5)),alt];
				 
				  	address(perfil[0][0],perfil[0][1]); 
				 
				//en alturas intermedios con el frameend calculamos los datos y depues llamamos a ultimacarga
				google.earth.addEventListener(H_ge, 'frameend', alturasintermedios);
				alturasintermedios();
		}	

var iframeend=0;
		
function alturasintermedios()
{

	if(iframeend+2>perfil.length)
	{
	
	
	google.earth.removeEventListener(H_ge, 'frameend', alturasintermedios); //borro el evento del doble click
	
	if(puntoscargados[0]!=null)
	ultimacarga();
	else if(puntos[0]!=null)
	ultima();
	
	iframeend=0;
	
	}
	else
	{
	H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
	var lookAt = H_ge.createLookAt('');
	lookAt.set(perfil[iframeend][0],perfil[iframeend][1], 0, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 4000);
	H_ge.getView().setAbstractView(lookAt);
		
	var alt=H_ge.getGlobe().getGroundAltitude(perfil[iframeend][0],perfil[iframeend][1]);
	perfil[iframeend][2]=alt;

	var alt=H_ge.getGlobe().getGroundAltitude(perfil[iframeend+1][0],perfil[iframeend+1][1]);
	perfil[iframeend+1][2]=alt;
	
	iframeend=iframeend+2;
	}

}





		
function ocultargraph()
{
	document.getElementById('graph').style.visibility='hidden';
	document.getElementById('urldiv').style.visibility='hidden';
	document.getElementById('graph1').style.visibility='hidden';
	document.getElementById('urldiv1').style.visibility='hidden';
	document.getElementById('graph2').style.visibility='hidden';
	document.getElementById('urldiv2').style.visibility='hidden';
	document.getElementById('graph3').style.visibility='hidden';
	document.getElementById('urldiv3').style.visibility='hidden';
	document.getElementById('graph4').style.visibility='hidden';
	document.getElementById('urldiv4').style.visibility='hidden';
}
function mostrargraph()
{
	document.getElementById('graph').style.visibility='visible';
	document.getElementById('urldiv').style.visibility='visible';
	document.getElementById('graph1').style.visibility='visible';
	document.getElementById('urldiv1').style.visibility='visible';
	document.getElementById('graph2').style.visibility='visible';
	document.getElementById('urldiv2').style.visibility='visible';
	document.getElementById('graph3').style.visibility='visible';
	document.getElementById('urldiv3').style.visibility='visible';
	document.getElementById('graph4').style.visibility='visible';
	document.getElementById('urldiv4').style.visibility='visible';
}
function limpiargraph()
{
	$('#graph').empty();
	$('#graph1').empty();
	$('#graph2').empty();
	$('#graph3').empty();
	$('#graph4').empty();
	document.getElementById('url').value=' ';
	document.getElementById('url1').value=' ';
	document.getElementById('url2').value=' ';
	document.getElementById('url3').value=' ';
	document.getElementById('url4').value=' ';
}


function cambios(x)
{
if(x==1)
{	
	var features = H_ge.getFeatures();
	var c;
	while (c = features.getLastChild())
	features.removeChild(c);
	
	var b=1;
	var lineStringKml = '<LineString><coordinates>\n';
		while(b<puntoscargados.length)
		{
		lineStringKml +=  puntoscargados[b-1][1].toString() + ',' + puntoscargados[b-1][0].toString() +',5\n';
		b++;
		}
		linestringspeed(lineStringKml);

sleep();
}
else
{
if(controlcont>0)
	alert("Lo siento, no se pueden recalcular rutas continuadas");
else
{
if(estaterminada==1)//rutas trazadas
{
	document.getElementById('indicaciones').innerHTML = "Recalcular una ruta puede corregir defectos de la toma de altitud. <b>Si recalculas la ruta con otro modo al que la calculaste</b>, puede que no obtengas la ruta.";
	puntos=puntosant;
	var features = H_ge.getFeatures();
	var c;
	while (c = features.getLastChild())
	features.removeChild(c);
	terminaruta(1);
}

	
else if(H_path[0]!=null)
{	
	//clearfeatures -- limpiar puntos, líneas .. presentes en el mapa
	var features = H_ge.getFeatures();
	var c;
	while (c = features.getLastChild())
	features.removeChild(c);
	H_goDirections();
}
else if(puntoscargados[0]!=null)
{			
var features = H_ge.getFeatures();
	var c;
	while (c = features.getLastChild())
	features.removeChild(c);
	buttoncomenzar(0, 10, 85, 19); // x, y, width, height
	medalagana=1;
	
	
	H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
		var lookAt = H_ge.createLookAt('');
		lookAt.set(puntoscargados[0][0], puntoscargados[0][1], 8, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 7000);
		H_ge.getView().setAbstractView(lookAt);
		setTimeout("sleep()",1000);	

		
}

else
	alert("No hay ruta trazada a la que aplicar cambios");
}

if(document.getElementById('car').checked)
{
for(var i=0;i<puntos.length;i++)
		createPlacemarkmove(puntos[i].lat(),puntos[i].lng(),"point: "+i);
}
}
}



function masnovedades()
{
	document.getElementById('novedades').style.visibility='visible';
	document.getElementById('-').style.visibility='visible';
	document.getElementById('+').style.visibility='hidden';

var obj = document.getElementById('novedades');
obj.style.height = "340px";	
}

function menosnovedades()
{
	document.getElementById('novedades').style.visibility='hidden';
	var obj = document.getElementById('novedades');
obj.style.height = "0px";
	document.getElementById('+').style.visibility='visible';
	document.getElementById('-').style.visibility='hidden';
}

function masd()
{
	document.getElementById('datosg').style.visibility='visible';
	document.getElementById('-d').style.visibility='visible';
	document.getElementById('+d').style.visibility='hidden';

var obj = document.getElementById('datosg');
obj.style.height = "180px";	
}

function menosd()
{
	document.getElementById('datosg').style.visibility='hidden';
	var obj = document.getElementById('datosg');
obj.style.height = "0px";
	document.getElementById('+d').style.visibility='visible';
	document.getElementById('-d').style.visibility='hidden';
}

function consejos()
{
	document.getElementById('consejos').style.visibility='visible';
	var obj = document.getElementById('consejos');
obj.style.height = "70px";
	
}

function beta()
{
	document.getElementById('beta').style.visibility='visible';
	var obj = document.getElementById('beta');
obj.style.height = "300px";
	
}




function obtptosintermedios_lib10()
	{
				 var i=1;
				
				 while(i<perfil.length-1)
				 {
						perfil10.push(perfil[i-1]);
						var lat=perfil[i-1][0]+(perfil[i][0]-perfil[i-1][0])*(0.5);
						var lon=perfil[i-1][1]+(perfil[i][1]-perfil[i-1][1])*(0.5);
						var alt=(perfil[i][2]+perfil[i-1][2])/2;
						perfil10.push([lat,lon,alt]);
						i++;
				 }
				 //añadimos tb el último punto de la ruta
				 perfil10.push([perfil[i][0], perfil[i][1],perfil[i][2]]);
			
			
		}
	
		///////////////////////////////////////////////CARGAR RUTAS CARGAR RUTAS               CARGAR RUTAS   ///////////////////////////////////////////////////////
	
		
		
function cancelarsubir()
{		
		
		document.getElementById('subir').style.visibility='hidden';
		document.getElementById('opciones').style.visibility='visible';	
		document.getElementById('gr').style.visibility='visible';
		document.getElementById('cr').style.visibility='visible';
		document.getElementById('menu').style.visibility='visible';
			


}

function cerrar()
{
		document.getElementById('subir').style.visibility='hidden';
		document.getElementById('iconos').style.visibility='hidden';
		document.getElementById('opciones').style.visibility='visible';	
		document.getElementById('gr').style.visibility='visible';
		document.getElementById('cr').style.visibility='visible';
		document.getElementById('menu').style.visibility='visible';
}
		
		
function subir()
{	

	if(perfil[0]==null)
	{
	alert("No has trazado ninguna ruta o no has pulsado el botón terminar");
	}
	else
	{	
	
		document.getElementById('earth-container').style.visibility='visible';
			
		ocultargraph();
		document.getElementById('infograph').style.visibility='hidden';
		document.getElementById('route-details').style.visibility='hidden';
		document.getElementById('guardar').style.visibility='hidden';
		document.getElementById('subir').style.visibility='visible';
		document.getElementById('opciones').style.visibility='hidden';	
		document.getElementById('gr').style.visibility='hidden';
		document.getElementById('cr').style.visibility='hidden';
		document.getElementById('menu').style.visibility='hidden';
	}
		
}

function iconos()
{
	if(perfil[0][0]==null)
	{
	alert("Cuando traces una ruta o pulses terminar podrás añadir información a esa ruta mediante iconos.");
	}
	else
	{
		document.getElementById('earth-container').style.visibility='visible';
			
				 ocultargraph();
				 document.getElementById('infograph').style.visibility='hidden';
				 document.getElementById('route-details').style.visibility='hidden';
		
		document.getElementById('guardar').style.visibility='hidden';
		document.getElementById('subir').style.visibility='hidden';
		document.getElementById('opciones').style.visibility='hidden';	
		document.getElementById('gr').style.visibility='hidden';
		document.getElementById('cr').style.visibility='hidden';
		document.getElementById('menu').style.visibility='hidden';
		document.getElementById('iconos').style.visibility='visible';
	}
		
}	             	             

function enviasubirphp()
{		
		var cadena=" ";
		
		cadena = perfil.join(',');
		
		document.getElementById('b').value=cadena;
		document.getElementById('dist').value=dtotal;
		document.getElementById('coef').value=document.getElementById('p.c').value;
			document.getElementById('dis_asc').value=document.getElementById('p.a').value*1000;
		document.getElementById('dis_des').value=document.getElementById('p.d').value*1000;
		document.getElementById('des_asc').value=document.getElementById('p.desa').value;
		document.getElementById('des_des').value=document.getElementById('p.desd').value;
		
		var c=document.getElementById('p.c').value;
		
				if(c<75)
				d=0;
				if(c>=75 && c<125)
				d=3;
				if(c>=125 && c<=200)
				d=2;
				if(c>200 && c<=300)
				d=1;
				if(c>300)
				d=4;
		
		document.getElementById('cat').value=d;
		document.getElementById('tiempo').value=document.getElementById('p.t').value;
		
		if(arrayicos[0]!=null)
		{
		var ico=arrayicos.join('*');
		document.getElementById('icosubir').value=ico;
		}
				
		}








////////////////////////////////SELECT PAISESS////////////////////////////////////
function XMLHttp(){
var Object;
if (typeof XMLHttpRequest == "undefined" )
{
if(navigator.userAgent.indexOf("MSIE 5") >= 0)
{ Object= new ActiveXObject("Microsoft.XMLHTTP");}
else
{ Object=new ActiveXObject("Msxml2.XMLHTTP");}
}
else
{ Object=new XMLHttpRequest();}
return Object;
}


var ajax=XMLHttp();

function _AjaxPais()
{

var nombre=document.getElementById('paises').value;
ajax.open("GET","obtener_ciudades.php?pais="+nombre,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var selectDestino=document.getElementById('estados');
var respuesta=ajax.responseText;
selectDestino.parentNode.innerHTML=respuesta;
}
}
ajax.send(null);
}


function _continente()
{

var nombre=document.getElementById('continentes').value;
//diferenciar si es la antartida
ajax.open("GET","obtener_paises.php?continente="+nombre,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var selectDestino=document.getElementById('paises');
var respuesta=ajax.responseText;
selectDestino.parentNode.innerHTML=respuesta;
}
}
ajax.send(null);
}

function _region()
{

var nombre=document.getElementById('paises').value;


//diferenciar si es la antartida
ajax.open("GET","obtener_regiones.php?pais="+nombre,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var selectDestino=document.getElementById('region');
var respuesta=ajax.responseText;

selectDestino.parentNode.innerHTML=respuesta;
}
}
ajax.send(null);
}




function _tipo()
{


if(ultimabusquedaprovincia!=null)//lo ultimo fue un cargar todas
	adprovincia();
else if(ultimabusquedapais!=null)
	adpais();


}




var zonas_seleccionadas= [];



function _ciudades()
{

var nombre=document.getElementById('region').value;
var pais=document.getElementById('paises').value;

if(document.getElementById('cat'))
{
ajax.open("GET","obtener_zonasselect.php?region="+nombre+"&pais="+pais,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{

var selectDestino=document.getElementById('provincias');
var respuesta=ajax.responseText;
selectDestino.parentNode.innerHTML=respuesta;


}
}
ajax.send(null);
}

else{
//diferenciar si es la antartida
ajax.open("GET","obtener_zonas.php?region="+nombre+"&pais="+pais,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var selectDestino=document.getElementById('zonas');
var respuesta=ajax.responseText;

document.getElementById('zonasp').innerHTML=respuesta;


for (i=0;i<document.f1.elements.length;i++) 
        zonas_seleccionadas[i]=0;
		
var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);

}
}
ajax.send(null);
}
}




//carga de rutas
function cargar_rutas(todas)
{

  //clearfeatures -- limpiar puntos, líneas .. presentes en el mapa
  var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);

if(todas)
{
ultimabusquedaprovincia=null;
ultimabusquedapais=null;

ajax.open("GET","cargar_rutas_todas.php",true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var cad='<table id="rutasenc"><tr style="font-weight:bold"><td style="width:100px">Nombre<td>Dist (km)<td>Coef</tr>';
var respuesta=ajax.responseText;
var ar=respuesta.split("<->");



var i=0;
var l=ar.length;
while(i<l-1)
{

var url='';
var u=ar[i+3];
if(u=="lineal")
	url="http://himae.com/lineal.png";

else if(u=="circular")
	url="http://himae.com/cir.png";
	

else if(u=="puerto de montana")
{

	var p=ar[i+6];
	if(p==1)
	url="http://himae.com/1cat.gif";
	
	else if(p==2)
	url="http://himae.com/2cat.gif";
	
	else if(p==3)
	url="http://himae.com/3cat.gif";
	
	else if(p==4)
	url="http://himae.com/ecat.gif";
	
	else if(p==0)
	url="http://himae.com/sncat.gif";
}

else
	url="http://himae.com/se.png";

var distancia=(ar[i+4]/1000).toFixed(0);

createplacemarkcarga(parseFloat(ar[i]),parseFloat(ar[i+1]),ar[i+7],url,'ruta.php?id='+ar[i+2],distancia,ar[i+5],ar[i+6],ar[i+8],ar[i+9],ar[i+10]);
cad+='<tr><td style="width:100px;overflow-x:hidden;"><div style="width:100px;overflow-x:hidden"><a href="ruta.php?id='+ar[i+2]+'">'+ar[i+7]+'</a></div><td>'+distancia+'<td>'+ar[i+5]+'</tr>';

i=i+11;
}

cad+='</table>';
document.getElementById('rutasenc').innerHTML=cad;


}
}
ajax.send(null);
  document.body.style.cursor = "default"; 
}

}





function createplacemarkcarga(lat,lon,nombre,urlimagen,url,dist,coef,cat,usu,tiempo,val)
{
// Create the placemark. 
var placemark = H_ge.createPlacemark(''); 

 
// Set the placemark's location.   
var point = H_ge.createPoint(''); 
point.setLatitude(lat); 
point.setLongitude(lon); 
placemark.setGeometry(point); 

 
// Create a style map. 
var styleMap = H_ge.createStyleMap(''); 
 
// Create normal style for style map. 
var normalStyle = H_ge.createStyle(''); 
var normalIcon = H_ge.createIcon(''); 
normalIcon.setHref(urlimagen); 
normalStyle.getIconStyle().setIcon(normalIcon); 
 
// Create highlight style for style map. 
// Create highlight style for style map. 
var highlightStyle = H_ge.createStyle(''); 
var highlightIcon = H_ge.createIcon(''); 
highlightIcon.setHref(urlimagen); 
highlightStyle.getIconStyle().setIcon(highlightIcon); 

highlightStyle.getIconStyle().setScale(1.0); 
 
styleMap.setNormalStyle(normalStyle); 
styleMap.setHighlightStyle(highlightStyle);
 
// Apply stylemap to a placemark. 
placemark.setStyleSelector(styleMap); 
 
//Add the placemark to Earth. 
H_ge.getFeatures().appendChild(placemark);

var cad='';
if(cat==0)
cad='--';
else if(cat==1)
cad='1a';
else if(cat==2)
cad='2a';
else if(cat==3)
cad='3a';
else if(cat==4)
cad='E';



placemark.setDescription( 
         '<img src="images/logo2.jpg" height="25px" ' + 
         '<br><p><b>'+nombre+'</b></p>' + 
         '<table border="1px"><tr><td>Distancia(km)</td><td>'+dist+'</td></tr>' + 
         '<tr><td>Coeficiente</td><td>'+coef+'</td></tr>' + 
         '<tr><td>Categoría</td><td>'+cad+'</td></tr>' + 
		 '<tr><td>Tiempo Aprox(min)</td><td>'+tiempo+'</td></tr>' +
		 '<tr><td>Puntuación</td><td>'+val+'</td></tr>' +
         '<tr><td>Usuario</td><td>'+usu+'</td></tr></table>' + 
         '<a href='+url+'>Ir a la ruta</a>'); 


google.earth.addEventListener(placemark, 'mouseover', function(event) {
var b = H_ge.createFeatureBalloon(''); 
b.setFeature(placemark); 
H_ge.setBalloon(b);
   });
   
google.earth.addEventListener(placemark, 'dblclick', function(event) {
event.preventDefault();
location.href=url;
   });
  
}


function insertdescargada(id)
{
ajax.open("GET","insertdescargadas.php?id="+id,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var respuesta=ajax.responseText;
}
}
ajax.send(null);
}




function votarruta(id,nota){
//var nombre=document.getElementById('region').value;
var usuconectado=document.getElementById('usu').value;



if(usuruta==usuconectado)
   alert("No puedes evaluar tus rutas");
   
else
{
//diferenciar si es la antartida
ajax.open("GET","poner_nota.php?id="+id+"&nota="+nota,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var respuesta=ajax.responseText;
var ar=respuesta.split(",");
document.getElementById('nota').innerHTML="<b>Nota:</b> "+ar[0]+"  ("+ar[1]+" votos)<label style='margin-left:80px;'>Gracias.</label>";
}
}
ajax.send(null);

}
}

function cargar_rutas_login(login)
{
ajax.open("GET","cargar_rutas_login.php?login="+login,true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{

var respuesta=ajax.responseText;
var ar=respuesta.split("<->");

if(respuesta=='')
var cad='Sin rutas';
else
var cad='<table id="tabla2"><tr style="font-weight:bold"><td>Nombre<td>Dist (km)<td>Coef<td>tipo<td>Provincia</tr>';

var i=0;
var l=ar.length;
while(i<l-1)
{
/*
var url='';
var u=ar[i+3];
if(u=="lineal")
	url="http://himae.com/lineal.png";

if(u=="circular")
	url="http://himae.com/cir.png";
	

if(u=="puerto de montana")
{

	var p=ar[i+6];
	if(p==1)
	url="http://himae.com/1cat.gif";
	
	else if(p==2)
	url="http://himae.com/2cat.gif";
	
	else if(p==3)
	url="http://himae.com/3cat.gif";
	
	else if(p==4)
	url="http://himae.com/ecat.gif";
	
	else if(p==0)
	url="http://himae.com/sncat.gif";
}
*/
var distancia=(ar[i+4]/1000).toFixed(0);

var tip="";
if(ar[i+3]=="puerto de montana")
	tip="puerto";
else
	tip=ar[i+3];

//createplacemarkcarga(parseFloat(ar[i]),parseFloat(ar[i+1]),ar[i+7],url,'ruta.php?id='+ar[i+2],distancia,ar[i+5],ar[i+6],ar[i+8],ar[i+9],ar[i+10]);
cad+='<tr><td style="overflow:hidden;width:140px"><a href="ruta.php?id='+ar[i+2]+'">'+ar[i+7]+'</a><td>'+distancia+'<td>'+ar[i+5]+'<td>'+tip+'<td>'+ar[i+11]+'</tr>';

i=i+12;
}

cad+='</table>';
document.getElementById('rutas').innerHTML+=cad;


}
}
ajax.send(null);
}





function cargar_rutas_login_usu(login)
{
ajax.open("GET","cargar_rutas_login.php?login="+login,true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{

var respuesta=ajax.responseText;
var ar=respuesta.split("<->");

if(respuesta=='')
var cad='Sin rutas';
else
var cad='<table id="tabla2"><tr style="font-weight:bold;"><td>Nombre<td>Dist (km)<td>Coef<td>tipo<td>Provincia<td>Editar<td>Borrar</tr>';

var i=0;
var l=ar.length;
while(i<l-1)
{
/*
var url='';
var u=ar[i+3];
if(u=="lineal")
	url="http://himae.com/lineal.png";

if(u=="circular")
	url="http://himae.com/cir.png";
	

if(u=="puerto de montana")
{

	var p=ar[i+6];
	if(p==1)
	url="http://himae.com/1cat.gif";
	
	else if(p==2)
	url="http://himae.com/2cat.gif";
	
	else if(p==3)
	url="http://himae.com/3cat.gif";
	
	else if(p==4)
	url="http://himae.com/ecat.gif";
	
	else if(p==0)
	url="http://himae.com/sncat.gif";
}
*/
var distancia=(ar[i+4]/1000).toFixed(0);

var tip="";
if(ar[i+3]=="puerto de montana")
	tip="puerto";
else
	tip=ar[i+3];

	
//createplacemarkcarga(parseFloat(ar[i]),parseFloat(ar[i+1]),ar[i+7],url,'ruta.php?id='+ar[i+2],distancia,ar[i+5],ar[i+6],ar[i+8],ar[i+9],ar[i+10]);
cad+='<tr><td style="overflow:hidden;width:140px"><a href="ruta.php?id='+ar[i+2]+'">'+ar[i+7]+'</a><td>'+distancia+'<td>'+ar[i+5]+'<td>'+tip+'<td>'+ar[i+11]+'<td><a href="modificar_ruta.php?id='+ar[i+2]+'">Editar</a><td><a href="borrar_ruta.php?id='+ar[i+2]+'&nombre='+ar[i+7]+'">Borrar</a></tr>';

i=i+12;
}

cad+='</table>';
document.getElementById('rutas').innerHTML+=cad;


}
}
ajax.send(null);
}





function anadir_ico2(event)
{
			
				event.preventDefault();
				var lat = event.getLatitude();
				var lon = event.getLongitude();
				
				var i;
				
				for (i=0;i<document.ficos.icono.length;i++){ 
				if (document.ficos.icono[i].checked) 
				break; 
				} 

				var img=document.ficos.icono[i].value;	
        		
				createplacemarkimagen(lat,lon,document.getElementById('desc_ico').value,img,0,0,1);
				
				arrayicos.push([lat,lon,img,document.getElementById('desc_ico').value]);
	
				google.earth.removeEventListener(H_ge.getGlobe(), 'dblclick', anadir_ico2); //borro el evento del doble click

}

var arrayicos=[];

function anadir_ico(){
	google.earth.addEventListener(H_ge.getGlobe(), 'dblclick', anadir_ico2); 
}


function borrar_ruta(id){
ajax.open("GET","borrar_rutabd.php?id="+id,true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var respuesta=ajax.responseText;
document.getElementById('textobo').innerHTML=respuesta+"<br><br><a href='#2' onclick='window.history.back()'>Volver a mi perfil</a><br><br><a href='index.php'>Ir a inicio</a>";
}
}
ajax.send(null);


}


function ranking(){

ajax.open("GET","ranking.php",true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var respuesta=ajax.responseText;
var ar=respuesta.split("<->");

var cad='<p style="font-size:10px">Ranking de ciclistas:</p>';
cad+='<table id="tabla2" style="font-size:10px;color:#111189;"><tr style="font-weight:bold;"><td>Usuario<td>Nº Rutas</tr>';
var i=0;
while(i<ar.length-2)
{
cad+='<tr><td><a href="perfil.php?login='+ar[i]+'">'+ar[i]+'</a><td>'+ar[i+1]+'</tr>';
i=i+2;
}
cad+="</table>";
document.getElementById('ranking').innerHTML=cad;

}
}
ajax.send(null);


}

function texto()
{

if(document.getElementById('p.dist').value=='')
alert("Espere que la ruta se cargue completamente");
else
{
var cad="<u><b>Datos de la ruta</u></b><br><table id='tabla2'><tr><td><b>Distancia:</b> </td><td>"
+document.getElementById('p.dist').value+"</td><td>km</td></tr><tr><td><b>Altura incial:</b> </td><td>"
+document.getElementById('p.ai').value+"</td><td>m</td></tr><tr><td><b>Altura final:</b> </td><td>"
+document.getElementById('p.af').value+"</td><td>m</td></tr><tr><td><b>Desnivel:</b> </td><td>"
+document.getElementById('p.des').value+"</td><td>m</td></tr><tr><td><b>Tiempo estimado:</b> </td><td>"
+document.getElementById('p.t').value+"</td><td>min</td></tr><tr><td><b>Velocidad media:</b> </td><td>"
+document.getElementById('p.v').value+"</td><td>km/h</td></tr><tr><td><b>Ascendidos:</b> </td><td>"
+document.getElementById('p.a').value+"</td><td>m</td></tr><tr><td><b>Descendidos:</b> </td><td>"
+document.getElementById('p.d').value+"</td><td>m</td></tr><tr><td><b>Des.acum.ascendido:</b> </td><td>"
+document.getElementById('p.desa').value+"</td><td>m</td></tr><tr><td><b>Des.acum.descendido:</b> </td><td>"
+document.getElementById('p.desd').value+"</td><td>m</td></tr><tr><td><b>Altura máxima:</b> </td><td>"
+document.getElementById('p.maa').value+"</td><td>m</td></tr><tr><td><b>Altura Mínima:</b> </td><td>"
+document.getElementById('p.mea').value+"</td><td>m</td></tr><tr><td><b>Pendiente media:</b> </td><td>"
+document.getElementById('p.p').value+"</td><td>%</td></tr><tr><td><b>Coeficiente:</b> </td><td>"
+document.getElementById('p.c').value+"</td><td></td></tr><tr><td><b>Categoría:</b> </td><td>"
+document.getElementById('p.cat').value+"</td><td></td></tr></table>";

////perfilllllllllllllllll
cad+="<br><br>Perfil: <input  type='text'  size='40' value='"+document.getElementById('url').value+"' />";

if(document.getElementById('url1').value!=='')
cad+="<br><br>Perfil(1): <input  type='text'  size='40' value='"+document.getElementById('url1').value+"' />";

if(document.getElementById('url2').value!=='')
cad+="<br><br>Perfil(2): <input  type='text'  size='40' value='"+document.getElementById('url2').value+"' />";

if(document.getElementById('url3').value!=='')
cad+="<br><br>Perfil(3): <input  type='text'  size='40' value='"+document.getElementById('url3').value+"' />";

if(document.getElementById('url4').value!=='')
cad+="<br><br>Perfil(4): <input  type='text'  size='40' value='"+document.getElementById('url4').value+"' />";


/////Mapa
var i=0;
var pt='';
while(puntoscargados[i][0]!=null)
{
pt+="|"+puntoscargados[i][0]+","+puntoscargados[i][1];
i=i+10;
}

var imagen='http://maps.google.com/maps/api/staticmap?';

imagen+="center="+puntoscargados[0][0]+","+puntoscargados[0][1];
imagen+="&zoom=14&size=512x312&maptype=roadmap";
imagen+="&markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.012318&markers=color:red|color:red|label:C|40.718217,-73.998284";
imagen+="&path=color:0x0000ff|weight:5"+pt;
imagen+="&sensor=false";

cad+="<br><br><input  type='text'  size='40' value='"+imagen+"' />";





document.getElementById('bbcode').innerHTML=cad;




}

}



function bbcode()
{

if(document.getElementById('p.dist').value=='')
alert("Espere que la ruta se cargue completamente");
else
{
var cad="[u][b]Datos de la ruta[/u][/b][br][table id='tabla2'][tr][td][b]Distancia:[/b] [/td][td]"
+document.getElementById('p.dist').value+"[/td][td]km[/td][/tr][tr][td][b]Altura incial:[/b] [/td][td]"
+document.getElementById('p.ai').value+"[/td][td]m[/td][/tr][tr][td][b]Altura final:[/b] [/td][td]"
+document.getElementById('p.af').value+"[/td][td]m[/td][/tr][tr][td][b]Desnivel:[/b] [/td][td]"
+document.getElementById('p.des').value+"[/td][td]m[/td][/tr][tr][td][b]Tiempo estimado:[/b] [/td][td]"
+document.getElementById('p.t').value+"[/td][td]min[/td][/tr][tr][td][b]Velocidad media:[/b] [/td][td]"
+document.getElementById('p.v').value+"[/td][td]km/h[/td][/tr][tr][td][b]Ascendidos:[/b] [/td][td]"
+document.getElementById('p.a').value+"[/td][td]m[/td][/tr][tr][td][b]Descendidos:[/b] [/td][td]"
+document.getElementById('p.d').value+"[/td][td]m[/td][/tr][tr][td][b]Des.acum.ascendido:[/b] [/td][td]"
+document.getElementById('p.desa').value+"[/td][td]m[/td][/tr][tr][td][b]Des.acum.descendido:[/b] [/td][td]"
+document.getElementById('p.desd').value+"[/td][td]m[/td][/tr][tr][td][b]Altura máxima:[/b] [/td][td]"
+document.getElementById('p.maa').value+"[/td][td]m[/td][/tr][tr][td][b]Altura Mínima:[/b] [/td][td]"
+document.getElementById('p.mea').value+"[/td][td]m[/td][/tr][tr][td][b]Pendiente media:[/b] [/td][td]"
+document.getElementById('p.p').value+"[/td][td]%[/td][/tr][tr][td][b]Coeficiente:[/b] [/td][td]"
+document.getElementById('p.c').value+"[/td][td][/td][/tr][tr][td][b]Categoría:[/b] [/td][td]"
+document.getElementById('p.cat').value+"[/td][td][/td][/tr][/table]";


cad+="<br><br>Perfil:[url]"+document.getElementById('url').value+"[/url]";

if(document.getElementById('url1').value!=='')
cad+="<br><br>Perfil(1):[url]"+document.getElementById('url1').value+"[/url]";

if(document.getElementById('url2').value!=='')
cad+="<br><br>Perfil(2):[url]"+document.getElementById('url2').value+"[/url]";

if(document.getElementById('url3').value!=='')
cad+="<br><br>Perfil(3):[url]"+document.getElementById('url3').value+"[/url]";

if(document.getElementById('url4').value!=='')
cad+="<br><br>Perfil(4):[url]"+document.getElementById('url4').value+"[/url]";



document.getElementById('bbcode').innerHTML=cad;
}

}



function perfilconporlibiframe(porcentajes){
						
					 
						if(perfil[0]==null)
							{
							
							alert("Traza la ruta o Pulsa Terminar si la has comenzado");
							}
						else
						{
									
																
						
						
						//calculamos cuantos puntos tiene la grafica
						var rampa=0;
						arrayrampa.length=0;
						arrayrampamapa.length=0;
						var rampaant=0;
						var indicerampa=0;
						var np=0;
						var i=0;
						var alturamax=perfil[i][2];
						var alturamin=perfil[i][2];
						var asc=0;
						var des=0;
						var dasc=0;
						var ddes=0;
						var TE=0;
						var altura=0;
						var alturaant=0;
						np=perfil.length;
						//creamos el array con los puntos que vamos añadir a la grafica					
						var myData = new Array(np);
						//añadimos todos los puntos menos el ultimo
						for(i=0;i<np-1;i++)
								  {
									alturaant=altura;
									altura=perfil[i][2];
									//////////////////////////////////////////rampas
									if (i>0)
									{
										
										
										//calculamos rampas cada 2 cadadist
										if(i%3==0)
										{
										rampa=(altura-rampaant)/(cadadist*3/100);
										
																		
										
										if(rampa>10 && rampa<25)
										{
										//lat,lon,pendiente,indice dentro de perfil
											
											arrayrampamapa[indicerampa]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa)];
											if(arrayrampa.length<10)
											{											
											arrayrampa[indicerampa]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa),i];
											indicerampa++;
											}
											else
											{
											//buscamos el menor elemento para sustituirlo
											var indmin=-1;
											var min=Math.round(rampa);
											for(var s=0;s<arrayrampa.length;s++)
												{
												if(arrayrampa[s][2]<min)
													{
													min=arrayrampa[s][2];
													indmin=s;
													}
												}
											//sustituimos el nuevo por el mínimo, si es que el nuevo era más grande que alguno
											if(indmin>=0)
												{
												arrayrampa[indmin]=[perfil[i-3][0],perfil[i-3][1],Math.round(rampa),i];
												indicerampa++;
												}
											}
											
										}
										}
										else if((i-1)%3==0)
										{
										rampaant=alturaant;
										
										
										}
										
										
									}
									
									////////////////////////////////////////////////////////////////////// para los datosruta
									if(altura>alturamax)
											alturamax=altura;
											
									if(altura<alturamin)
											alturamin=altura;
									
									if(i>0)
											{
											if(altura>alturaant)
												{
												asc=asc+cadadist;//seria cada dist
												
												dasc=dasc+(altura-alturaant);
												}
											else if (altura<alturaant)
												{												
												des=des+cadadist;
												
												ddes=ddes+(alturaant-altura);
												}
											
											var pm=((perfil[i][2]-perfil[i-1][2])/(cadadist/100)).toFixed(1);
						
												var y=0;
												if (pm>20)
													 pm=20;
												if (pm<-20)
													 pm=-20;
						
												//para el tiempo estimado y las calorías. ecuaciones sacadas por estadísticas.ver excel
												
												if(pm>=0)
												 {
							 					  y = 0.063*(pm*pm) - 1.924*pm + 17.35;
											 
											  }
												else
											 			{
											 			y = -0.129*(pm*pm) - 6.296*pm + 12.48;
											 
											 			}
							
														
						
											
											//ponemos la velocidad en minutos y metros y calculamos el tiempo que se tarda en ese tramo					
										 	TE=TE+cadadist/(y*1000/60);
													
											}
									/////////////////////////////////////////////////////////////////////////////
									
									var metros=cadadist*i;//aqui es cadadist *i
									myData[i]=[altura];
									}
						//añadimos el último punto
						alturaant=altura;
						metros=metros+acum;
						altura=perfil[i][2];
						myData[i]=[altura];	
						
						///////////////datosruta
						if(altura>alturaant)
										asc=asc+acum;
						else if (altura<alturaant)
										des=des+acum;
						
						if(altura>alturamax)
								alturamax=altura;
											
						if(altura<alturamin)
								alturamin=altura;
								
						pm=((perfil[i][2]-perfil[i-1][2])/(acum/100)).toFixed(1);
						
												var y=0;
												//ya con una pendiente superior no vamos a ir mas rapido, hay una velocidad que nunca se sobrepasa, por prudencia supongo.
												if (pm>20)
													 pm=20;
												if (pm<-20)
													 pm=-20;
						
												//para el tiempo estimado y las calorías. ecuaciones sacadas por estadísticas.ver excel
												
												if(pm>=0)
												 {
							 					  y = 0.063*(pm*pm) - 1.924*pm + 17.35;
											 
											  }
												 		else
											 			{
											 			y = -0.129*(pm*pm) - 6.296*pm + 12.48;
											 
											 			}
							
																						
																						
						
											//ponemos la velocidad en minutos y metros						
										 	TE=TE+acum/(y*1000/60);
										 	
						
						TE=TE.toFixed(0);	
						//para calcular la velocidad media hemos sumado el tiempo que tarda sumando los tramos
						var vel=metros/TE;
						vel=(vel/1000)*60;
						vel=vel.toFixed(1);
											
						/////////////////////////////////////////////////////////
						
											
					
										
											
						
						///////////////////////////////////////////////////////
						
						//en este momento metros guarda la distancia total de la ruta.
						
						
						//np es el numero de puntos que obtiene puntos intermedios. puntos del perfil
						//pero para arraypor solo queremos 1 punto cada mil metros.
						//ARRAYPOR tendrá la parte baja metros/1000 elementos.
						var h=metros%1000;
 								var b=metros-h;
 								var d=b/1000;
						
						///var arraypor=new Array(d);
						var m=0;
						var alt=0;
						
						var x=1000/cadadist; //1000/cadadist
						
						//ncd son los puntos que hay en 1 km
						var ncd=1000/cadadist;
						var n=ncd/2;
						alt=((myData[x]- myData[0])/10).toFixed(1);
						
						if(metros<=1000)
						{
						var coef=new Array(1);

						var a=myData[np-1]-myData[0];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						coef[0]=b;						
						
						
						var porc=['&chm=t'+b+',009900,0,'+(n)+',10'];
						
						
						
						
						}
						
						else
						{
						var coef=new Array(d+1);
						coef[0]=alt;
						
						//para que los porcentajes salgan centrado dentro del km, hacemos lo siguiente:
						if(metros<20500)
													n=n-2;
						if(20500<=metros && metros<32500)
													n=n-3;
								
						if(metros>=32500 && metros<50000)
												n=n-4;			
						
						

					
						if(n<0)
							n=0;
					
						
						var porc=['&chm=B,ff0000,0,0,0'];
						
						
						
						if(porcentajes)
						porc.push('|t'+Math.round(alt)+',009900,0,'+(n)+',10');//primer kilómetro
						
						
						if(document.getElementById('km').checked)
						createplacemarkimagen(perfil[0][0],perfil[0][1],'km 0 | '+alt+'%','http://googlebike.com/images/KM.png');
						
						
						for(i=1;i<d;i++)
								{
									alt=(myData[x*(i+1)]- myData[x*i])/10;
									alt=Math.round(alt);
									coef[i]=alt; //alt/1000 * 100
									if(porcentajes)
									porc.push('|t'+alt+',009900,0,'+((n)+i*ncd)+',10');
									
									if(document.getElementById('km').checked)
									createplacemarkimagen(perfil[x*i][0],perfil[x*i][1],'km '+i+' | '+alt+'%:','http://googlebike.com/images/KM.png');
								}
						
						
						
						
						
						
						
					
						//calculamos el porcentaje del ultimo km no completo <1000 metros
						//restamos las alturas del ultimo tramo
						
						var a=myData[np-1]-myData[x*i];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						
						if(metros%1000!=0)
						{
						if(porcentajes)
						porc.push('|t'+Math.round(b)+',009900,0,'+(2+i*ncd)+',10');
						
						
						if(document.getElementById('km').checked)
									createplacemarkimagen(perfil[x*i][0],perfil[x*i][1],'km '+i+' | '+b+'%:','http://googlebike.com/images/KM.png');
						
						
						coef[d]=b;
						}
						}
						
						var c=coeficiente(coef,d+1,metros%1000);//le pasamos el array, el tam del array, y la distancia del último km			
						
 
 						function simpleEncode(valueArray,maxValue) {
						var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
						var chartData = [];
						for (var i = 0; i < valueArray.length; i++) {
						var currentValue = valueArray[i];
						if (!isNaN(currentValue) && currentValue >= 0) {
						chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
    				}
      			else {
						chartData.push('_');
      			}
  					}
						return chartData.join('');
						}
						
					
						
						
						
						
						
						
						var t=(screen.width*1000/1024).toFixed(0);
						if(t>1000) t=1000;
						var chart_url = "http://chart.apis.google.com/chart?";
						var chart_size = "&chs=575x300";
						
						if(porcentajes)
						var chart_type = "cht=lc&chls=3,3,0&chtt=googlebike.com";
						else
						var chart_type = "cht=lc&chls=3,3,0&chtt=PERFIL - googlebike.com";
						
						var chart_data = "&chco=ff0000&chd=s:"+ simpleEncode(myData,(alturamax+200));
						
						//definimos el intervalo de representacion. en el eje x hasta la distancia total
						//y en e le eje y hasta la maxima altura. Eje x:0, eje y:1
						
						var x=(1000/metros).toFixed(3);
						var metros1=metros.toFixed(0);
						
						var ejes="&chxt=x,y&chxr=0,0,"+metros1/1000+"|1,0,"+(alturamax+200);
						
						
						
						
						//ncd indica cuantos puntos componen un km
						//pondremos los porcentajes en la mitad del km
						var ncd=1000/cadadist;
						var n=ncd/2;
						
							
							//las barras que marcan los kms	
						var detalles="&chf=c,ls,0,ffffff,"+x+",e2e7e6,"+x;
						
						if(porcentajes)
						var url = chart_url + chart_type+detalles+ chart_size + ejes+chart_data+porc;
						else
						var url = chart_url + chart_type+chart_size + ejes+chart_data+porc;
						
						var i = $("<img>").attr("src", url);
						
						$("#graph").empty().append(i);
						
												
						if(document.getElementById('rampas').checked)
						{
						for(var u=0;u<arrayrampamapa.length;u++)
							createplacemarkimagen(arrayrampamapa[u][0],arrayrampamapa[u][1],'','http://googlebike.com/images/rampa.png');
						}
						
						obtdatosruta(metros,np,alturamin,alturamax,asc,des,dasc,ddes,c,TE,vel);
						
						
						}
	}
	
	
	
	
	
function perfilconporlibif(perfillocal,graf,paso)
				{
				cadadist=100;
						if(perfillocal[0][0]==null)
							{
							
							alert("Traza la ruta o Pulsa Terminar si la has comenzado");
							}
						else
						{
						//calculamos cuantos puntos tiene la grafica
						var rampa=0;
						arrayrampa.length=0;
						arrayrampamapa.length=0;
						var rampaant=0;
						var indicerampa=0;
						var np=0;
						var i=0;
						var alturamax=perfillocal[i][2];
						var alturamin=perfillocal[i][2];
						var asc=0;
						var des=0;
						var dasc=0;
						var ddes=0;
						var TE=0;
						var altura=0;
						var alturaant=0;
						
						np=perfillocal.length;
						
									
						//creamos el array con los puntos que vamos añadir a la grafica					
						var myData = new Array(np);
						//añadimos todos los puntos menos el ultimo
						for(i=0;i<np-1;i++)
								  {
									alturaant=altura;
									altura=perfillocal[i][2];
									//////////////////////////////////////////rampas
									if (i>0)
									{
										
										
										//calculamos rampas cada 2 cadadist
										if(i%3==0)
										{
										rampa=(altura-rampaant)/(cadadist*3/100);
										
										
										if(rampa>10 && rampa<25)
										{
										
										//lat,lon,pendiente,indice dentro de perfillocal
											
											arrayrampamapa[indicerampa]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa)];
											if(arrayrampa.length<10)
											{											
											arrayrampa[indicerampa]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa),i];
											indicerampa++;
											}
											else
											{
											//buscamos el menor elemento para sustituirlo
											var indmin=-1;
											var min=Math.round(rampa);
											for(var s=0;s<arrayrampa.length;s++)
												{
												if(arrayrampa[s][2]<min)
													{
													min=arrayrampa[s][2];
													indmin=s;
													}
												}
											//sustituimos el nuevo por el mínimo, si es que el nuevo era más grande que alguno
											if(indmin>=0)
												{
												arrayrampa[indmin]=[perfillocal[i-3][0],perfillocal[i-3][1],Math.round(rampa),i];
												indicerampa++;
												}
											}
											
										}
										}
										else if((i-1)%3==0)
										{
										rampaant=alturaant;
										
										
										}
										
										
									}
									
									////////////////////////////////////////////////////////////////////// para los datosruta
									if(altura>alturamax)
											alturamax=altura;
											
									if(altura<alturamin)
											alturamin=altura;
									
									
									/////////////////////////////////////////////////////////////////////////////
									
									var metros=cadadist*i;//aqui es cadadist *i
									myData[i]=[altura];
									}
						//añadimos el último punto
						alturaant=altura;
						metros=metros+acum;
						altura=perfillocal[i][2];
						myData[i]=[altura];

					
						
						///////////////datosruta
						
						if(altura>alturamax)
								alturamax=altura;
											
						if(altura<alturamin)
								alturamin=altura;
								
						var h=metros%1000;
 								var b=metros-h;
 								var d=b/1000;
						
						
						var m=0;
						var alt=0;
						
						var x=1000/cadadist; //1000/cadadist
						
						//ncd son los puntos que hay en 1 km
						var ncd=1000/cadadist;
						var n=ncd/2;
						alt=((myData[x]- myData[0])/10).toFixed(1);
						
						if(metros<=1000)
						{
						

						var a=myData[np-1]-myData[0];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						coef[0]=b;						
						
						
						var porc=['&chm=t'+b+',009900,0,'+(n)+',10'];
						}
						
						else
						{
											
						//para que los porcentajes salgan centrado dentro del km, hacemos lo siguiente:
						if(metros<20500)
													n=n-2;
						if(20500<=metros && metros<32500)
													n=n-3;
								
						if(metros>=32500 && metros<50000)
												n=n-4;			
						
						

					
						if(n<0)
							n=0;					
						
						var porc=['&chm=B,ff0000,0,0,0'];
						
						
					
						
						porc.push('|t'+Math.round(alt)+',009900,0,'+(n)+',10');//primer kilómetro
						
						
						
						for(i=1;i<d;i++)
								  {
									alt=(myData[x*(i+1)]- myData[x*i])/10;
									alt=Math.round(alt);
									
									porc.push('|t'+alt+',009900,0,'+((n)+i*ncd)+',10');
									
									
									}
						
						
						}
						
						
						
						
					
						//calculamos el porcentaje del ultimo km no completo <1000 metros
						//restamos las alturas del ultimo tramo
						
						var a=myData[np-1]-myData[x*i];
						
						var b=new Number(a/(metros%1000));
						b=b*100;
						b=b.toFixed(1);
						
						if(metros%1000!=0)
							porc.push('|t'+Math.round(b)+',009900,0,'+(2+i*ncd)+',10');
						
						
 
 						function simpleEncode(valueArray,maxValue) {
						var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
						var chartData = [];
						for (var i = 0; i < valueArray.length; i++) {
						var currentValue = valueArray[i];
						if (!isNaN(currentValue) && currentValue >= 0) {
						chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
						}
						else {
						chartData.push('_');
							}
						}
						return chartData.join('');
						}
						
						var t=(screen.width*1000/1024).toFixed(0);
						if(t>1000) t=1000;
						var chart_url = "http://chart.apis.google.com/chart?";
						var chart_size = "&chs=580x300";
						var chart_type = "cht=lc&chls=3,3,0&chtt=TRAMO "+(graf+1)+" - googlebike.com";
						
						
						var chart_data = "&chco=ff0000&chd=s:"+ simpleEncode(myData,(alturamax+200));
						
						//definimos el intervalo de representacion. en el eje x hasta la distancia total
						//y en e le eje y hasta la maxima altura. Eje x:0, eje y:1
						
						var x=(1000/metros).toFixed(3);
						var metros1=metros.toFixed(0);
						
						var ejes="&chxt=x,y&chxr=0,"+(paso*graf)/10+","+((paso*graf+paso)/10)+"|1,0,"+(alturamax+200);
						
						
						
						
						//ncd indica cuantos puntos componen un km
						//pondremos los porcentajes en la mitad del km
						var ncd=1000/cadadist;
						var n=ncd/2;
						
							
							//las barras que marcan los kms	
						var detalles="&chf=c,ls,0,ffffff,"+x+",e2e7e6,"+x;
						
						var url = chart_url + chart_type+detalles+ chart_size + ejes+chart_data+porc;
					
						var i = $("<img>").attr("src", url);
						
						
						
						$("#graph").append(i);
						
						
						
						
											
						
						
						
						
						}
	}
	
	function iframechange()
	{
	  //clearfeatures -- limpiar puntos, líneas .. presentes en el mapa
  var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);
	
	//añadimos la marca de llegada
		var i=puntoscargados.length-1;
		
		i=i-1;//i apunta al último punto
		
		lati=puntoscargados[0][0];
		loni=puntoscargados[0][1];
				
		latf=puntoscargados[i][0];
		lonf=puntoscargados[i][1];
		
		latx=puntoscargados[parseInt(i/2)][0];
		lonx=puntoscargados[parseInt(i/2)][1];
		
				H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
				var lookAt = H_ge.createLookAt('');
				lookAt.set(lati, loni, 14, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 5000);
				H_ge.getView().setAbstractView(lookAt);
				
				
		
		createPlacemark(lati,loni,"salida");
		createPlacemark(latf,lonf,"llegada");
		
		//hacemos todo lo que queramos hacer con la ruta seleccionada. ver perfil ...
		var b=1;
		dtotal=0;
		var lineStringKml = '<LineString><coordinates>\n';
		while(b<puntoscargados.length)
		{
		lineStringKml +=  puntoscargados[b-1][1].toString() + ',' + puntoscargados[b-1][0].toString() +',5\n';
		b++;
		}
		linestringspeed(lineStringKml);
		dtotal=(b-2)*100;
		
		cadadist=100;
		
		sleep();	
		//se le pasa la distancia a la que queremos cada parte.
	}
	
	
function mostrarmap()
{
var screenOverlay = H_ge.createScreenOverlay('');
screenOverlay.setIcon(H_ge.createIcon(''));
screenOverlay.getIcon().setHref("http://www.google.com/intl/en_ALL/images/logo.gif");

// Set the point inside the overlay that is used as the positioning
// anchor point.
screenOverlay.getOverlayXY().setXUnits(H_ge.UNITS_FRACTION);
screenOverlay.getOverlayXY().setYUnits(H_ge.UNITS_FRACTION);
screenOverlay.getOverlayXY().setX(.5);
screenOverlay.getOverlayXY().setY(.5);

// ---------------------------------------------------------------------------
// WARNING: screenXY and overlayXY in the Earth API are swapped, relative
// to the KML specification. In the Earth API, screenXY is a point on the
// overlay image, and overlayXY is a point inside the plugin window.
// ---------------------------------------------------------------------------

// Set screen position in fractions.
screenOverlay.getScreenXY().setXUnits(H_ge.UNITS_FRACTION);
screenOverlay.getScreenXY().setYUnits(H_ge.UNITS_FRACTION);
screenOverlay.getScreenXY().setX(Math.random());  // Random x.
screenOverlay.getScreenXY().setY(Math.random());  // Random y.

// Rotate around object's center point.
screenOverlay.getRotationXY().setXUnits(H_ge.UNITS_FRACTION);
screenOverlay.getRotationXY().setYUnits(H_ge.UNITS_FRACTION);
screenOverlay.getRotationXY().setX(0.5);
screenOverlay.getRotationXY().setY(0.5);

// Set object's size in pixels.
screenOverlay.getSize().setXUnits(H_ge.UNITS_PIXELS);
screenOverlay.getSize().setYUnits(H_ge.UNITS_PIXELS);
screenOverlay.getSize().setX(300);
screenOverlay.getSize().setY(90);

// Rotate by a random number of degrees.
screenOverlay.setRotation(Math.random() * 360);

H_ge.getFeatures().appendChild(screenOverlay);
}





/////////////////////////////////////MOVER PLACEMARKS//////////////////////////////////////////////////////////////////////////////
function mueveplacemark(name,latnuevo,lonnuevo)
{
if(controlcont==0)
{	
	if(estaterminada==1)
	{
	var n=name.substring(7);
	var n=parseInt(n);
	var features = H_ge.getFeatures();
 	var c;
 	while (c = features.getLastChild())
    {features.removeChild(c);}
	puntos=[];
	var i=0;
	while(i<puntosant.length)
	{
	puntos[i]=puntosant[i];
	i++;
	}
	puntos[n]=new GLatLng(latnuevo,lonnuevo);
	for(var i=0;i<puntos.length;i++)
		createPlacemarkmove(puntos[i].lat(),puntos[i].lng(),"point: "+i);

	terminaruta();
	}
	else//mueve un punto antes de acabar la ruta
	{
	var n=name.substring(7);
	var n=parseInt(n);
	puntos[n]=new GLatLng(latnuevo,lonnuevo);
	}
}
else
	alert("No se pueden mover puntos en rutas continuadas");
}



	function createPlacemarkmove(lat,lon,texto,url) 
		{
    var placemark = H_ge.createPlacemark('');
    placemark.setName(texto);
    H_ge.getFeatures().appendChild(placemark);
  
    // Create style map for placemark
    var icon = H_ge.createIcon('');
    icon.setHref('http://himae.com/mover.png');
    if(url)
    icon.setHref(url);
    var style = H_ge.createStyle('');
    style.getIconStyle().setIcon(icon);
    placemark.setStyleSelector(style);
	
    
    // Create point
    var la =H_ge.getView().copyAsLookAt(H_ge.ALTITUDE_RELATIVE_TO_GROUND);
    var point = H_ge.createPoint('');
    point.setLatitude(lat);
    point.setLongitude(lon);
		placemark.setGeometry(point);

//mientras lo movemos
google.earth.addEventListener(placemark, 'mousemove', function(event) {
    if (dragInfo) {	
      event.preventDefault();
      var point = dragInfo.placemark.getGeometry();
      point.setLatitude(event.getLatitude());
      point.setLongitude(event.getLongitude());
	  dragInfo.dragged = true;
    }
  });

  // cuando soltamos el placemark
  google.earth.addEventListener(placemark, 'mouseup', function(event) {
     if (dragInfo) {
      if (dragInfo.dragged) {
        // If the placemark was dragged, prevent balloons from popping up.
        event.preventDefault();
      }
		dragInfo = null;
		
		var name=event.getTarget().getName();
		mueveplacemark(name,event.getLatitude(),event.getLongitude());
    }
  });
  
    // cuando cogemos el placemark
  google.earth.addEventListener(placemark, 'mousedown', function(event) {
   	  if (event.getTarget().getType() == 'KmlPlacemark' &&
        event.getTarget().getGeometry().getType() == 'KmlPoint') {
		var placemark = event.getTarget();
       dragInfo = {
        placemark: event.getTarget(),
        dragged: false
      };
    
 }

 });
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////BOTONES EN PANTALLA//////////////////////////////////////
var appPath = document.location.href.replace(/\/[^\/]*$/, '/');

/**
 * Create a custom button using screen overlays
 * at the given x, y offset from the top left of the plugin container.
 */
function buttoncomenzar(x, y, width, height) {
 


  var _addOverlayForState = function(suffix, drawOrder, visible) {
    // Create the loading overlay.
    var icon = H_ge.createIcon('');
    icon.setHref(appPath + 'btn_so' + suffix + '.png');

    var overlay = H_ge.createScreenOverlay('');
    overlay.setDrawOrder(drawOrder || 0);
    overlay.setVisibility(visible || false);
    overlay.setIcon(icon);
    overlay.getOverlayXY().set(x, H_ge.UNITS_PIXELS, y, H_ge.UNITS_INSET_PIXELS);
    overlay.getScreenXY().set(0, H_ge.UNITS_FRACTION, 1, H_ge.UNITS_FRACTION);
    overlay.getSize().set(width, H_ge.UNITS_PIXELS, height, H_ge.UNITS_PIXELS);
    H_ge.getFeatures().appendChild(overlay);
    
    return overlay;
  };
  
  var overlayReg = _addOverlayForState('', 1, true);
  var overlayHover = _addOverlayForState('_hover', 2, false);
  var overlayDown = _addOverlayForState('_hover', 3, false);
  
  var _setState = function(state) {
    overlayHover.setVisibility(state == 'hover');
    overlayDown.setVisibility(state == 'hover');
  };
  
  // NOTE: if you have many screen overlay controls, you should collapse
  // this code down to one listener per event to handle all controls.
  
  var _isMouseOnButton = function(mx, my) {
    return x <= mx && mx <= x + width &&
           y <= my && my <= y + height;
  };
  
  var buttonDown = false;
  
  if(medalagana==0)
  {
  google.earth.addEventListener(H_ge.getWindow(), 'mousedown', function(evt) {
    if (evt.getButton() != 0) // left click
      return;
    
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = true;
      _setState('down');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mousemove', function(evt) {
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      _setState(buttonDown ? 'down' : 'hover');
    } else {
      _setState(buttonDown ? 'hover' : '');
    }
    
    if (buttonDown) {
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mouseup', function(evt) {
    if (buttonDown) {
      buttonDown = false;
      _setState(_isMouseOnButton(evt.getClientX(), evt.getClientY()) ?
          'hover' : '');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'click', function(evt) {
    if (evt.getButton() === 0 &&
        _isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = false;
	  limpiar();
	  crearruta();
    }
  });
}}

function buttonterminar(x, y, width, height) {

	
  var _addOverlayForState = function(suffix, drawOrder, visible) {
    // Create the loading overlay.
    var icon = H_ge.createIcon('');
    icon.setHref(appPath + 'terminar_so' + suffix + '.png');

    var overlay = H_ge.createScreenOverlay('');
    overlay.setDrawOrder(drawOrder || 0);
    overlay.setVisibility(visible || false);
    overlay.setIcon(icon);
    overlay.getOverlayXY().set(x, H_ge.UNITS_PIXELS, y, H_ge.UNITS_INSET_PIXELS);
    overlay.getScreenXY().set(0, H_ge.UNITS_FRACTION, 1, H_ge.UNITS_FRACTION);
    overlay.getSize().set(width, H_ge.UNITS_PIXELS, height, H_ge.UNITS_PIXELS);
    H_ge.getFeatures().appendChild(overlay);
    
    return overlay;
  };
  
  var overlayReg = _addOverlayForState('', 1, true);
  var overlayHover = _addOverlayForState('_hover', 2, false);
  var overlayDown = _addOverlayForState('_hover', 3, false);
  
  var _setState = function(state) {
    overlayHover.setVisibility(state == 'hover');
    overlayDown.setVisibility(state == 'hover');
  };
  
  // NOTE: if you have many screen overlay controls, you should collapse
  // this code down to one listener per event to handle all controls.
  
  var _isMouseOnButton = function(mx, my) {
    return x <= mx && mx <= x + width &&
           y <= my && my <= y + height;
  };
  
  var buttonDown = false;
  if(medalaganater==0)
  {
  google.earth.addEventListener(H_ge.getWindow(), 'mousedown', function(evt) {
    if (evt.getButton() != 0) // left click
      return;
    
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = true;
      _setState('down');
      event.preventDefault();
      return false;
    }
  });
  
  
  google.earth.addEventListener(H_ge.getWindow(), 'mousemove', function(evt) {
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      _setState(buttonDown ? 'down' : 'hover');
    } else {
      _setState(buttonDown ? 'hover' : '');
    }
    
    if (buttonDown) {
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mouseup', function(evt) {
    if (buttonDown) {
      buttonDown = false;
      _setState(_isMouseOnButton(evt.getClientX(), evt.getClientY()) ?
          'hover' : '');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'click', function(evt) {
    if (evt.getButton() === 0 &&
        _isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = false;
	
	
	
	var lat;
	var lon;
	if(document.getElementById('car').checked)
	{
	if(varcontinuar==1)
	{
	lat=perfilant[0][0];
	lon=perfilant[0][1];
	}
	else
	{
	lat=puntos[0].lat();
	lon=puntos[0].lng();
	}
	}
	else
	{
		if(varcontinuar==1)
			{
			lat=perfilant[0][0];
			lon=perfilant[0][1];
			}
		else
		{
		lat=puntos[0][0];
		lon=puntos[0][1];
		}
	}
	
	
	H_ge.getOptions().setFlyToSpeed(H_ge.SPEED_TELEPORT); 
	var lookAt = H_ge.createLookAt('');
	lookAt.set(lat,lon, 0, H_ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 1000);
	H_ge.getView().setAbstractView(lookAt);
	 
	 
	setTimeout("terminaruta()",1000);	
    }
  });
}}

function buttoncontinuar(x, y, width, height) {
  var _addOverlayForState = function(suffix, drawOrder, visible) {
    // Create the loading overlay.
    var icon = H_ge.createIcon('');
    icon.setHref(appPath + 'continuar' + suffix + '.png');

    var overlay = H_ge.createScreenOverlay('');
    overlay.setDrawOrder(drawOrder || 0);
    overlay.setVisibility(visible || false);
    overlay.setIcon(icon);
    overlay.getOverlayXY().set(x, H_ge.UNITS_PIXELS, y, H_ge.UNITS_INSET_PIXELS);
    overlay.getScreenXY().set(0, H_ge.UNITS_FRACTION, 1, H_ge.UNITS_FRACTION);
    overlay.getSize().set(width, H_ge.UNITS_PIXELS, height, H_ge.UNITS_PIXELS);
    H_ge.getFeatures().appendChild(overlay);
    
    return overlay;
  };
  
  var overlayReg = _addOverlayForState('', 1, true);
  var overlayHover = _addOverlayForState('_hover', 2, false);
  var overlayDown = _addOverlayForState('_hover', 3, false);
  
  var _setState = function(state) {
    overlayHover.setVisibility(state == 'hover');
    overlayDown.setVisibility(state == 'hover');
  };
  
  // NOTE: if you have many screen overlay controls, you should collapse
  // this code down to one listener per event to handle all controls.
  
  var _isMouseOnButton = function(mx, my) {
    return x <= mx && mx <= x + width &&
           y <= my && my <= y + height;
  };
  
  var buttonDown = false;
  
  if(medalaganacont==0)
  {
  google.earth.addEventListener(H_ge.getWindow(), 'mousedown', function(evt) {
    if (evt.getButton() != 0) // left click
      return;
    
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = true;
      _setState('down');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mousemove', function(evt) {
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      _setState(buttonDown ? 'down' : 'hover');
    } else {
      _setState(buttonDown ? 'hover' : '');
    }
    
    if (buttonDown) {
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mouseup', function(evt) {
    if (buttonDown) {
      buttonDown = false;
      _setState(_isMouseOnButton(evt.getClientX(), evt.getClientY()) ?
          'hover' : '');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'click', function(evt) {
    if (evt.getButton() === 0 &&
        _isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = false;
	  continuar();
    }
  });
}}

function buttondeshacer(x, y, width, height) {
  var _addOverlayForState = function(suffix, drawOrder, visible) {
    // Create the loading overlay.
    var icon = H_ge.createIcon('');
    icon.setHref(appPath + 'deshacer' + suffix + '.png');

    var overlay = H_ge.createScreenOverlay('');
    overlay.setDrawOrder(drawOrder || 0);
    overlay.setVisibility(visible || false);
    overlay.setIcon(icon);
    overlay.getOverlayXY().set(x, H_ge.UNITS_PIXELS, y, H_ge.UNITS_INSET_PIXELS);
    overlay.getScreenXY().set(0, H_ge.UNITS_FRACTION, 1, H_ge.UNITS_FRACTION);
    overlay.getSize().set(width, H_ge.UNITS_PIXELS, height, H_ge.UNITS_PIXELS);
    H_ge.getFeatures().appendChild(overlay);
    
    return overlay;
  };
  
  var overlayReg = _addOverlayForState('', 1, true);
  var overlayHover = _addOverlayForState('_hover', 2, false);
  var overlayDown = _addOverlayForState('_hover', 3, false);
  
  var _setState = function(state) {
    overlayHover.setVisibility(state == 'hover');
    overlayDown.setVisibility(state == 'hover');
  };
  
  // NOTE: if you have many screen overlay controls, you should collapse
  // this code down to one listener per event to handle all controls.
  
  var _isMouseOnButton = function(mx, my) {
    return x <= mx && mx <= x + width &&
           y <= my && my <= y + height;
  };
  
  var buttonDown = false;
  
  if(medalaganades==0)
  {
  google.earth.addEventListener(H_ge.getWindow(), 'mousedown', function(evt) {
    if (evt.getButton() != 0) // left click
      return;
    
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = true;
      _setState('down');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mousemove', function(evt) {
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      _setState(buttonDown ? 'down' : 'hover');
    } else {
      _setState(buttonDown ? 'hover' : '');
    }
    
    if (buttonDown) {
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mouseup', function(evt) {
    if (buttonDown) {
      buttonDown = false;
      _setState(_isMouseOnButton(evt.getClientX(), evt.getClientY()) ?
          'hover' : '');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'click', function(evt) {
    if (evt.getButton() === 0 &&
        _isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = false;
	  eliminarpaso();
    }
  });
}}


function buttoncambios(x, y, width, height) {
  var _addOverlayForState = function(suffix, drawOrder, visible) {
    // Create the loading overlay.
    var icon = H_ge.createIcon('');
    icon.setHref(appPath + 'cambios' + suffix + '.png');

    var overlay = H_ge.createScreenOverlay('');
    overlay.setDrawOrder(drawOrder || 0);
    overlay.setVisibility(visible || false);
    overlay.setIcon(icon);
    overlay.getOverlayXY().set(x, H_ge.UNITS_PIXELS, y, H_ge.UNITS_INSET_PIXELS);
    overlay.getScreenXY().set(0, H_ge.UNITS_FRACTION, 1, H_ge.UNITS_FRACTION);
    overlay.getSize().set(width, H_ge.UNITS_PIXELS, height, H_ge.UNITS_PIXELS);
    H_ge.getFeatures().appendChild(overlay);
    
    return overlay;
  };
  
  var overlayReg = _addOverlayForState('', 1, true);
  var overlayHover = _addOverlayForState('_hover', 2, false);
  var overlayDown = _addOverlayForState('_hover', 3, false);
  
  var _setState = function(state) {
    overlayHover.setVisibility(state == 'hover');
    overlayDown.setVisibility(state == 'hover');
  };
  
  // NOTE: if you have many screen overlay controls, you should collapse
  // this code down to one listener per event to handle all controls.
  
  var _isMouseOnButton = function(mx, my) {
    return x <= mx && mx <= x + width &&
           y <= my && my <= y + height;
  };
  
  var buttonDown = false;
  
  if(medalaganacamb==0)
  {
  google.earth.addEventListener(H_ge.getWindow(), 'mousedown', function(evt) {
    if (evt.getButton() != 0) // left click
      return;
    
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = true;
      _setState('down');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mousemove', function(evt) {
    if (_isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      _setState(buttonDown ? 'down' : 'hover');
    } else {
      _setState(buttonDown ? 'hover' : '');
    }
    
    if (buttonDown) {
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'mouseup', function(evt) {
    if (buttonDown) {
      buttonDown = false;
      _setState(_isMouseOnButton(evt.getClientX(), evt.getClientY()) ?
          'hover' : '');
      event.preventDefault();
      return false;
    }
  });
  
  google.earth.addEventListener(H_ge.getWindow(), 'click', function(evt) {
    if (evt.getButton() === 0 &&
        _isMouseOnButton(evt.getClientX(), evt.getClientY())) {
      buttonDown = false;
	  cambios();
    }
  });
}}
//////////////////////////////////////////////////////////////////////////////////////////////////


function indidatos()
{
document.getElementById('indicaciones').innerHTML = "Utiliza las pestañas que están ariba del mapa. <a href='#2' onclick='btperfil();'>Perfil</a>, <a href='#2' onclick='btinforuta();'>Info Ruta</a>.<br>¿perfil mal calculado?. Pulsa <a href='#2' onclick='cambios()'>recalcular</a>. <br><a href='#2' onclick='indiatras();'>Atrás</a>";
}
function indicontinuar()
{
document.getElementById('indicaciones').innerHTML = "Elige el Modo de Ruta, y pulsa <a href='#2' onclick='continuar()'>continuar</a> en el botón sobre el mapa.<br><br><a href='#2' onclick='indiatras();'>Atrás</a>";
}


function indiatras()
{
document.getElementById('indicaciones').innerHTML = "Has creado una ruta:<br> <a href='#2' onclick='indidatos()'>ver</a> los datos de la ruta.<br><a href='#2' onclick='indicontinuar()'>Continuar</a> la ruta.<br><a href='#2' onclick='subir()'>Subir</a> la ruta a GoogleBike.<br><a href='#2' onclick='descargar()'>Guardar</a> la ruta en mi PC.";
}



function linestringspeed(lineStringKml)
{
	lineStringKml += '</coordinates></LineString>';
 // creamos la marca de posicion de la ruta de la LineString KML blob
  var routeLineString = H_ge.parseKml(lineStringKml);
  routeLineString.setTessellate(true);
  
  var routePlacemark = H_ge.createPlacemark('');
  routePlacemark.setGeometry(routeLineString);
  H_placemarks['route'] = routePlacemark;
  
  routePlacemark.setStyleSelector(
      createLineaStyle({width: 5, color: '88ff0000'}));
  
  H_ge.getFeatures().appendChild(routePlacemark);


}

function geocode(lat,lon)
{
$.getJSON("http://ws.geonames.org/countrySubdivisionJSON?lat="+lat+"&lng="+lon+"&callback=?",
	function(f){
	document.getElementById('pais').value=f.countryCode;
	document.getElementById('region').value=f.adminName1;
	});
	
}


function adpais()
{
var tipo=document.getElementById('tipo').value;

var terreno=document.getElementById('terreno').value;
var usuarios=document.getElementById('usuarios').value;
var orden=document.getElementById('orden').value;



if(paiscode!=null)
{
ultimabusquedapais=paiscode;
ultimabusquedaprovincia=null;

var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);

ajax.open("GET","cargar_rutas_pais.php?paiscode="+paiscode+"&tipo="+tipo+"&terreno="+terreno+"&usuarios="+usuarios+"&orden="+orden,true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var cad='<table id="rutasenc"><tr style="font-weight:bold"><td style="overflow:hidden;width:100px">Nombre<td>KM<td>Coef<td>T(min)<td>Nota<td>Visitas</tr>';
var respuesta=ajax.responseText;
var ar=respuesta.split("<->");

var i=0;
var l=ar.length;

var num=0;

while(i<l-1)
{


var url='';
var u=ar[i+3];
if(u=="lineal")
	url="http://himae.com/lineal.png";

else if(u=="circular")
	url="http://himae.com/cir.png";
	

else if(u=="puerto de montana")
{

	var p=ar[i+6];
	if(p==1)
	url="http://himae.com/1cat.gif";
	
	else if(p==2)
	url="http://himae.com/2cat.gif";
	
	else if(p==3)
	url="http://himae.com/3cat.gif";
	
	else if(p==4)
	url="http://himae.com/ecat.gif";
	
	else if(p==0)
	url="http://himae.com/sncat.gif";
}
else
	url="http://himae.com/se.png";



var distancia=(ar[i+4]/1000).toFixed(0);

createplacemarkcarga(parseFloat(ar[i]),parseFloat(ar[i+1]),ar[i+7],url,'ruta.php?id='+ar[i+2],distancia,ar[i+5],ar[i+6],ar[i+8],ar[i+9],ar[i+10]);
cad+='<tr><td style="width:100px;overflow-x:hidden;"><div style="width:100px;overflow-x:hidden"><a href="ruta.php?id='+ar[i+2]+'">'+ar[i+7]+'</a></div><td>'+distancia+'<td>'+ar[i+5]+'<td>'+ar[i+9]+'<td>'+ar[i+10]+'<td>'+ar[i+11]+'</tr>';

num++;

i=i+13;
}
document.getElementById('titlerutas').innerHTML="Rutas Encontradas: "+num;
cad+='</table>';
document.getElementById('rutasenc').innerHTML=cad;


        var lookAt = H_ge.createLookAt('');
        lookAt.set(parseFloat(ar[0]),parseFloat(ar[1]), 2, H_ge.ALTITUDE_RELATIVE_TO_GROUND,0, 0, 700000);
        H_ge.getView().setAbstractView(lookAt);
    
}
}
ajax.send(null);
}
}



function adprovincia()
{

var features = H_ge.getFeatures();
  var c;
  while (c = features.getLastChild())
    features.removeChild(c);

var tipo=document.getElementById('tipo').value;

var terreno=document.getElementById('terreno').value;


var orden=document.getElementById('orden').value;
var usuarios=document.getElementById('usuarios').value;




if(provincia!=null)
{
ultimabusquedaprovincia=provincia;
ultimabusquedapais=null;

ajax.open("GET","cargar_rutas.php?region="+provincia+"&tipo="+tipo+"&terreno="+terreno+"&usuarios="+usuarios+"&orden="+orden,true);


ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{
var cad='<table id="rutasenc"><tr style="font-weight:bold"><td style="overflow:hidden;width:100px">Nombre<td>KM<td>Coef<td>T(min)<td>Nota<td>Visitas</tr>';
var respuesta=ajax.responseText;
var ar=respuesta.split("<->");




var num=0;
var i=0;
var l=ar.length;
while(i<l-1)
{


var url='';
var u=ar[i+3];
if(u=="lineal")
	url="http://himae.com/lineal.png";

else if(u=="circular")
	url="http://himae.com/cir.png";
	

else if(u=="puerto de montana")
{

	var p=ar[i+6];
	if(p==1)
	url="http://himae.com/1cat.gif";
	
	else if(p==2)
	url="http://himae.com/2cat.gif";
	
	else if(p==3)
	url="http://himae.com/3cat.gif";
	
	else if(p==4)
	url="http://himae.com/ecat.gif";
	
	else if(p==0)
	url="http://himae.com/sncat.gif";
}
else
	url="http://himae.com/se.png";



var distancia=(ar[i+4]/1000).toFixed(0);

createplacemarkcarga(parseFloat(ar[i]),parseFloat(ar[i+1]),ar[i+7],url,'ruta.php?id='+ar[i+2],distancia,ar[i+5],ar[i+6],ar[i+8],ar[i+9],ar[i+10]);
cad+='<tr><td style="width:100px;overflow-x:hidden;"><div style="width:100px;overflow-x:hidden"><a href="ruta.php?id='+ar[i+2]+'">'+ar[i+7]+'</a></div><td>'+distancia+'<td>'+ar[i+5]+'<td>'+ar[i+9]+'<td>'+ar[i+10]+'<td>'+ar[i+11]+'</tr>';
num++;

i=i+13;
}
document.getElementById('titlerutas').innerHTML="Rutas Encontradas: "+num;
cad+='</table>';
document.getElementById('rutasenc').innerHTML=cad;



/*
var lookAt = H_ge.createLookAt('');
lookAt.set(parseFloat(ar[0]), parseFloat(ar[1]), 0, H_ge.ALTITUDE_RELATIVE_TO_GROUND,0, 0, 200000);
H_ge.getView().setAbstractView(lookAt);*/
	
}
}
ajax.send(null);
}
}

function enviarcomentario(idruta)
{
var usuario=document.getElementById('usu').value;
var com=document.getElementById('mensaje').value;

ajax.open("GET","enviar_comentario.php?idruta="+idruta+"&mensaje="+com+"&usuario="+usuario,true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4)
{

var respuesta=ajax.responseText;

if(respuesta==1)
	location.href="ruta.php?id="+idruta;
else if(respuesta==0)
	document.getElementById('insertado').innerHTML="Lo siento. Ha ocurrido un error inesperado. No se ha enviado. Intentalo más tarde";

}
}
ajax.send(null);
}



function pintawptgpx()
{

var l=arrayicos.length;
var i=0;
while(i<l)
{
createplacemarkimagen(arrayicos[i][0],arrayicos[i][1],arrayicos[i][3],'http://www.himae.com/googlebike/iconos/bandera.png',0,0,1);
i++;
}
}

