/**********************************************/
/************  VARIABLES  GLOBALES ***********/
/**********************************************/
var mapa=null; //controla la zona del mapa picada
var formulario=null; //controla lo opción de escenario marcada en el form
var tipo_tasa=null; //controla el tipo de tasa elegida en el escenario base, partidas, subtotales o prefijado
var tipo_incremento=null; //controla el tipo de incremento elegido en el escenario base, acumulado o unico
var status=0; //controla en que parte de la simulación se encuentra
//la unión de estas tres variables, me dicen el xml que debo cargar

//estas variables me sirven para hacer las peticiones de ficheros XML y luego saber dónde se queda almacenado (standar AJAX)
var XMLHttpRequestObject = false;
var xmlDocument=null; //en esta varible quedará almacenado el fichero xml sin nodos #text

/**************** quitar **************/ //esta variable me sirve para saber qué tasa tiene el foco (se pone por compatibilidad con firefox, porque IE conserva el foco)
/**************** quitar **************/ //var tieneFoco=null;

//CÓMO SIMULAR UNA TABLA DE DOS DIMENSIONES CON ARRAYS DE JAVASCRIPT.
//La idea es simular una porción de una hoja excel, indexada por columnas, que son letras, y filas que son números, y poder determinar la celda b12 por ejemplo.
//lo haremos con un array de objetos columna, así el índice del array nos determina las filas (los números), y los atributos de la columna no determina la columna (la letra)
//OBJETO FILA
	//Constructor e inicilalizador
function Fila ( a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) { //se compone de las columnas a, b, c, d, e, etc...
	this.a=a;
	this.b=b;
	this.c=c;
	this.d=d;
	this.e=e;
	this.f=f;
	this.g=g;
	this.h=h;
	this.i=i;
	this.j=j;
	this.k=k;
	this.l=l;
	this.m=m;
	this.n=n;
	this.o=o;
}
	//Ejemplo de funcion de consulta
	Fila.prototype.getA = function() {
		return this.a;
	};
	//Ejemplo de funcion de modificación
	Fila.prototype.setA= function(valor) {
		this.a=valor;
	};
//tal y como se declara el objeto, el atributo es directamente accesible tanto para consulta como para modificación, por lo que no se definen todos los métodos de
//de consulta y modificación
	
//aqui declaro las variables que van a simular las hojas excel.
//serrán arrays de x filas, del tipo objeto Fila. En la declaración no se define el número, pero durante la programación, este va directamente relacionado con la 
//fila del libro excel que se ha facilitado como fuente para la simulación, y así poder hacer los cálculos.
var escenario_base = new Array();  //simula la hoja excel etiquetada como Escenario base
var escenario_base_acumulado= new Array(); //simula la hoja excel del escenario base de tasa anual acumulada
var prevision = new Array(); //simula la hoja excel etiquetada como Previsión GPúblico

/*********************************************************************/
/**************** FUNCIONES DEL MAPA Y FORMULARIO ***************/
/********************************************************************/

/***************************click_atras(n) **************************************/
//0.-
// Pasa de un estado de la simulación a otro									
// click_atras(n) --> se pasa por parametro el valor del estado al que debe volver
/***********************************************************************************/

function click_atras(n) {
	switch (n) {
		case 0: break;//vuelve a la página del mapa reiniciando las variables.
		case 1: //vuelve a la tabla del escenario de simulacion
				document.getElementById("titular1").firstChild.data="3.- Escenario base de simulación para " + mapa;
				borrar_nodos_hijos("8");
				borrar_nodos_hijos("9");
				borrar_nodos_hijos("6");
				borrar_nodos_hijos("11");
				dibujar_tabla_escenario(formulario);
				dibujar_formulario_tasas_incrementos(); //Dibuja siempre el formulario tasas
				//se modifica el valor href del link de navegación atras
				document.getElementById("back").href="./index.html";
				switch (tipo_tasa) {
					case "partidas":
										document.getElementById("partidas").checked=true;
										dibujar_tasas_partidas();
										break;
					
					case "subtotales":
										document.getElementById("subtotales").checked=true;
										dibujar_tasas_subtotales();
										break;
										
					case "prefijado":
										document.getElementById("prefijado").checked=true;
										dibujar_escenario_prefijado();
										break;
				}
				switch (tipo_incremento) {
					case "unico":
										document.getElementById("unico").checked=true;
										break;
					
					case "acumulado":
										document.getElementById("acumulado").checked=true;
										break;
				
				}
				
			
				break;
				
	}
} //fin click_atras


		
		
/******************************* click_on ********************************************/
//Estas funciones son para controlar la zona del mapa y escenario seleccionados
// 1.-
//click_on(territorio) --> controla la zona del mapa o nombre del territorio marcado. 
//                                  --> llama a la función que carga el XML para iniciar la simulación.
//modifica: var mapa  
//**********************************************************************************/
function click_on(n) {
	mapa=n;

	var mensaje;
	switch (n) {  
		case 'España': mensaje= "España. \n\n"; break;
		case 'Andalucia': mensaje= "Andalucía.\n\n"; break;
		case 'Aragon':  mensaje= "Aragón. \n\n"; break;
		case 'Asturias': mensaje= "Asturias. \n\n"; break;
		case 'Baleares': mensaje= "Baleares. \n\n"; break;
		case 'Canarias': mensaje= "Canarias. \n\n"; break;
		case 'Cantabria': mensaje= "Cantabria. \n\n"; break;
		case 'Castilla la Mancha': mensaje= "Castilla la Mancha. \n\n"; break;
		case 'Castilla y Leon': mensaje= "Castilla y León. \n\n"; break;
		case 'Cataluña': mensaje= "Cataluña. \n\n"; break;
		case 'Ceuta': mapa='Ceuta y Melilla'; mensaje= "Ceuta y Melilla. \n\n"; break;
		case 'Comunidad Valenciana': mensaje= "Comunidad Valenciana. \n\n"; break;
		case 'Extremadura': mensaje= "Extremadura. \n\n"; break;
		case 'Galicia': mensaje= "Galicia. \n\n"; break;
		case 'La Rioja': mensaje= "La Rioja. \n\n"; break;
		case 'Madrid': mensaje= "Madrid. \n\n"; break;
		case 'Melilla': mapa='Ceuta y Melilla'; mensaje= "Ceuta y Melilla. \n\n"; break;
		case 'Murcia': mensaje= "Murcia. \n\n"; break;
		case 'Navarra': mensaje= "Navarra. \n\n"; break;
		case 'Pais Vasco': mensaje= "País Vasco. \n\n"; break;
	};
	if (formulario==null) {
		alert(mensaje + 'Selecciona un escenario de población.');
	}
	else {
		cargarXML(mapa,formulario); //Si tenemos el mapa y el escenario, cargamos el XML
	}
		
} //fin de click_on(n);


/******************************** aceptar () *******************************/
// 2.-
//aceptar() --> controla el escenario seleccionado
//                --> llama a la función que carga el XML para iniciar la simulación.
/************************************************************************/
function aceptar() {
	//averiguamos el radio picado.
		//se hace una doble comparación, no necesaria, para posibles reusos o formularios con el mismo nombre del documento.
	if (document.escenarios.esc[0].checked && document.escenarios.esc[0].value=="1") { 
		formulario=1;
	}
	if (document.escenarios.esc[1].checked && document.escenarios.esc[1].value=="2") {
		formulario=2;
	}
	/*********** comentado al cambiar el formulario de escenarios inicial de 4 a 2 opciones **************/
	//if (document.escenarios.esc[2].checked && document.escenarios.esc[2].value=="3") {
	//	formulario=3;
	//}
	//if (document.escenarios.esc[3].checked && document.escenarios.esc[3].value=="4") {
	//	formulario=4;
	//} 
	
	//switch (formulario) {  
	//	case 1: alert ("Has seleccionado el Escenario de población 1 \n con tasa de variación configurable"); break;
	//	case 2: alert ("Has seleccionado el Escenario de población 2 \n con tasa de variación configurable"); break;
	//	case 3: alert ("Has seleccionado el Escenario de población 1 \n con tasa de variación prefijada"); break;
	//	case 4: alert ("Has seleccionado el Escenario de población 2 \n con tasa de variación prefijada"); break;
	//}
	/******************************************************************************************/
	if (formulario==null) { alert("No has seleccionado ningún escenario"); }
	if (formulario!=null && mapa==null) { alert('Selecciona ahora una región sobre el mapa'); }
	if (formulario!=null && mapa!=null) {	cargarXML(mapa,formulario); }		//Ya tenemos la región del mapa y el escenario, procedemos a la carga del XML correspondiente.
} //fin de aceptar()

/**********************************************************************************************/
/************************ FUNCIONES PARA OBTENER EL ESCENARIO BASE ***********************/
/**********************************************************************************************/


/***************************** cargarXML() *****************************************************/
// 3.- Es llamada por click_on() (1)  y por aceptar()   (2)
//cargarXML (m.f) --> carga el fichero XML según los parámetros pasados, m representa la región, y f representa el escenario
//			  --> modifica el document, para mostrar una nueva página con otros contenidos y opciones
//			  --> carga la variable escenario_base con los datos del xml y completa otros calculados, simulando así la hoja excel de datos Escenario base
//			  --> representa la tabla del escenario base de simulación
/**********************************************************************************************/
function cargarXML(m,f) {

/*********** comentado al cambiar el formulario de escenarios inicial de 4 a 2 opciones **************/
	//switch (f) {  
	//	case 1: alert ("Se va a inciar la simulación con los siguientes datos: \n\nRegión: "+ m + "\nEscenario de población 1 \nTasa de variación configurable"); 
	//			caracteristicas="Características de la simulación: Escenario 1, Tasa configurable entre 0 y 100";
	//			break;
	//	case 2: alert ("Se va a inciar la simulación con los siguientes datos: \n\nRegión: "+ m + "\nEscenario de población 2 \nTasa de variación configurable");
	//			caracteristicas="Características de la simulación: Escenario 2, Tasa configurable entre 0 y 100";
	//			break;
	//	case 3: alert ("Se va a inciar la simulación con los siguientes datos: \n\nRegión: "+ m + "\nEscenario de población 1 \nTasa de variación prefijada"); 
	//			caracteristicas="Características de la simulación: Escenario 1, Tasa prefijada";
	//			break;
	//	case 4: alert ("Se va a inciar la simulación con los siguientes datos: \n\nRegión: "+ m + "\nEscenario de población 2 \nTasa de variación prefijada"); 
	//			caracteristicas="Características de la simulación: Escenario 2, Tasa prefijada";
	//			break;
	//}
/******************************************************************************************/	
	var mensaje;
	switch (f) {  
		case 1: mensaje= "SE HAN CARGADO EL ESCENARIO CON ÉXITO. \n\nRegión: "+ m + "\nEscenario de población 1."; 
				caracteristicas="Características de la simulación: Escenario 1, Tasa configurable entre -100 y 100";
				break;
		case 2: mensaje= "SE HAN CARGADO EL ESCENARIO CON ÉXITO \n\nRegión: "+ m + "\nEscenario de población 2.";
				caracteristicas="Características de la simulación: Escenario 2, Tasa configurable entre -100 y 100";
				break;
	}
	
	//y ahora a cargar el XML
	//paso1 --> Determinar el nombre del fichero según los valores de m y f
	//paso2 --> Cargar el xml
	leerXML(nombre_ficheroXML(m,f)); //modifica la variable xmlDocument, asignándole el contenido del fichero
		if (xmlDocument==null) { alert(mensaje)}; //es curioso, pero con este mensaje, da tiempo a cargar el XmlDocument
	//paso3--> Rellenar la variable escenario_base con los valores del xml.
		//lo hacemos con la función inciar_escenario
		
	//iniciar_escenario(escenario_base, xmlDocument);
	escenario_base=iniciar_escenario(xmlDocument);
	
	//paso4--> borrar el título de la celda 6 de la tabla	
	borrar_nodo("titular2");
	//paso5--> Borrar el contenido de la celda 11
	borrar_nodos_hijos("11");
	//paso6--> Sustituir el título de la celda 5 por "3.- Escenario base de simulación"
	nodo=document.getElementById("titular1");
	nodo.firstChild.data="3.- Escenario base de simulación para " + m;
	//paso7 --> Borrar el mapa
	borrar_nodo("map");
	borrar_nodo("img");
	//paso8--> borrar formulario de escenarios
	borrar_nodo("form_escenarios"); //borra el formulario de escenarios que contiene la tabla sele_escenarios
	//paso9--> Dibujar tabla del escenario base
	dibujar_tabla_escenario(f);
	//paso10--> Saco un formulario con las opciones de elección de Tasa de variación si es el caso
	//escenarios de tasa variable
	//if ((f==1) || (f==2)) {  dibujar_formulario_tasas_incrementos();}
	dibujar_formulario_tasas_incrementos(); //Dibuja siempre el formulario tasas
	
	//se modifica el valor href del link de navegación atras
	document.getElementById("back").href="./index.html";
	
} //fin cargarXML(m,f);


/***************************** nombre_ficheroXML() *********************************/
// 4.- Es llamada por cargarXML()   (3)
//nombre_ficheroXML(m.f) --> devuelve el nombre del fichero a cargar evaluando m y f
/**********************************************************************************/
function nombre_ficheroXML(m,f) {
	var nombre;
	switch (m) {  
		case 'España': nombre="españa"; break;
		case 'Andalucia': nombre="andalucia"; break;
		case 'Aragon': nombre="aragon"; break;
		case 'Asturias': nombre="asturias"; break;
		case 'Baleares': nombre="baleares"; break;
		case 'Canarias': nombre="canarias"; break;
		case 'Cantabria': nombre="cantabria"; break;
		case 'Castilla la Mancha': nombre="castillalamancha"; break;
		case 'Castilla y Leon': nombre="castillayleon"; break;
		case 'Cataluña': nombre="cataluña"; break;
		case 'Ceuta y Melilla': nombre="ceutaymelilla"; break;
		case 'Comunidad Valenciana': nombre="comunidadvalenciana"; break;
		case 'Extremadura': nombre="extremadura"; break;
		case 'Galicia': nombre="galicia"; break;
		case 'La Rioja': nombre="rioja"; break;
		case 'Madrid': nombre="madrid"; break;
		case 'Murcia': nombre="murcia"; break;
		case 'Navarra': nombre="navarra"; break;
		case 'Pais Vasco': nombre="paisvasco"; break;
	};
	nombre= "./xml/" + nombre + f + ".xml";
	return nombre;
}  //fin nombre_ficheroXML(m,f)

/******************************* leerXML() **************************************/
// 5.- Es llamada por cargarXML()  (3)
//leerXML(f) --> Lee un fichero XML del servidor según el nombre que se pasa en f, y modifica la varible global xmlDocument, devolviendo
//                          un documento XML de XMLHttpRequest.responseXML
//		   --> Se hace uso de XMLHttpRequest, quedándonos solo con el DOM de xml limpio de elementos #text
/*******************************************************************************/
function leerXML(f) {
		//var doc_xml=null;
        if (window.XMLHttpRequest) {
			XMLHttpRequestObject = new XMLHttpRequest();
			//XMLHttpRequestObject.overrideMimeType('text/xml');   //<<<<------------------------------
        } else if (window.ActiveXObject) {
          	try {
					XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
				} 
				catch (e) {
							// en caso que sea una versión antigua
							try {
									XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
								}
							catch (e) {}
						}	 
		}	

        if(XMLHttpRequestObject) {
			XMLHttpRequestObject.open('GET', f, true); 
			XMLHttpRequestObject.onreadystatechange = function() 
					{ 
						if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { 
							xmlDocument = XMLHttpRequestObject.responseXML;  //AQUÍ asigna valor a xmlDocument
							//doc_xml = XMLHttpRequestObject.responseXML;  //AQUÍ asigna valor a xmlDocument
							//si se trata de un Firefox, elimino los nodos #text
							removeWhitespace(xmlDocument); //para quitar los nodos #text
							//removeWhitespace(doc_xml); //para quitar los nodos #text
						} 
					}		 
			XMLHttpRequestObject.send(null); 
        }
		//return doc_xml;
}  //fin leerXML(f)


/*********************************** removeWhiteespace() ***********************************/
// 6.- Es llamada por leerXML()  (5)
//removeWhiteespace(xmldoc) --> Esta fúnción elimina los nodos #test que trata el Mozilla (Firefox) dejando solo los nodos xml que me interesan.
//					 --> Se pasa por parámetro un xmldoc, que modifica, lo que significa que el paso es por variable.
/****************************************************************************************/
function removeWhitespace(xmldoc) {
  	var loopIndex;
    for (loopIndex = 0; loopIndex < xmldoc.childNodes.length; loopIndex++) {
        var currentNode = xmldoc.childNodes[loopIndex];
		if (currentNode.nodeType == 1) { removeWhitespace(currentNode);} //recursiva
        if (((/^\s+$/.test(currentNode.nodeValue))) && (currentNode.nodeType == 3)) {
			xmldoc.removeChild(xmldoc.childNodes[loopIndex--]);
        }
    }
		
} //fin de removeWhitespace(xmldoc)   

/************************************* iniciar_escenario() ********************************************/
// 7.- Es llamada por cargarXML() ; (3)
//iniciar_escenario(b,d)  --> Rellena un array de filas que se pasa por parámetro,b, con los datos obtenidos de un documento XML, d
//				  --> iremos leyendo los datos del docXML y rellenando las filas de escenario_base.
//				  --> el objeto fila llega hasta la columna m, pero esta no siempre se necesita en escenario_base, cuando no se use, se llamará al constructor con
//				  --> con lo valores null donde no haya dato para esa columna.
//				  --> también iremos rellenando las celdas de escenario_base con string para los nombres de los campos y tablas
/***************************************************************************************************/
//function iniciar_escenario(b,docXML) {
function iniciar_escenario(docXML) {
	var b= new Array();
	//Obtenemos la raíz del xml, o sea, el elemento escenario de simulación (escenario_simulación)
	//Se aconseja echarle un viztazo al esquema escenario_simulación.xsd

	//ESCENARIO DE SIMULACIÓN - hoja
	var escenario_simulacion = docXML.getElementsByTagName("escenario_simulacion");
	//a partir de aquí podemos seleccionar cada uno de sus elementos hijos, que se corresponden con las tres grandes tablas que 
	//se ha determinado que son las necesarias para iniciar la simulación.

	//GASTO SANITARIO - tabla
	var gasto_sanitario=escenario_simulacion[0].getElementsByTagName("gasto_sanitario");
	//COEFICIENTES DE POBLACIÓN ESTIMADOS - tabla
	var coeficientes_estimados=escenario_simulacion[0].getElementsByTagName("coeficientes_estimados");
	//ESCENARIO DE POBLACIÓN - tabla
	var escenario_poblacion=escenario_simulacion[0].getElementsByTagName("escenario_poblacion");

	//la hoja excel original de la que se parte de modelo para la emulación, tiene 61 filas
	//vamos a rellenar las tablas

	/*********  GASTO SANITARIO **********/
	//TABLA GASTO SANITARIO del excel - de la fila 1 a 9, fila 10 vacia, fila 11 a 15
	//la fila 1 - se rellena con los nombres de las columnas
	b[1]= new Fila (" ","Escenario Base", "Tasas de variación", "Porcentaje", "Gasto inicial simulación", "Pesos", "Tasas ponderadas", null, null, null, null, null, null,null,null);
	//Ahora iteramos para rellenar el resto de filas, recorriendo el DOM XML - obtenemos los datos por filas.
	//filas 2 a 15
	//filas 2 a 9 --> 8 filas, de 0 
	for (var fila=0; fila < 8; fila ++) { //de la fila 2 a la 9 del excel - 8 filas - que para los hijos del DOM van de 0 a 7 - el 8 nunca se alcanza
		var letra= new Array(4); //son cuatro las columnas con datos, de la B a la E
		for (var columna=0; columna < 4; columna++) { //4 columnas, de la B a E
			//Se utiliza paseFloat para almacenarlo como números decimales. No se hace restricción en estos, de momento.
			letra[columna]=parseFloat(gasto_sanitario[0].childNodes[columna].childNodes[fila].firstChild.nodeValue);
		}
		b[2+fila]=new Fila(getTipoGasto(fila),letra[0],letra[1],letra[2],letra[3],null,null,null,null,null,null,null,null,null,null);
	}
	
	//fila 10 
	b[10]=new Fila(" "," "," "," "," ",null,null,null,null,null,null,null,null,null,null);
	
	//filas 11 a 15 --> 5 filas, de la 8 a 12
	for (var fila=8; fila < 13; fila ++) { //de la fila 11 a la 15 del excel - 5 filas - que para los hijos del DOM van de 8 a 12 - el 13 nunca se alcanza
		var letra= new Array(4); //son cuatro las columnas con datos, de la B a la E
		for (var columna=0; columna < 4; columna++) { //4 columnas, de la B a E
			//Se utiliza paseFloat para almacenarlo como números decimales. No se hace restricción en estos, de momento.
			letra[columna]=parseFloat(gasto_sanitario[0].childNodes[columna].childNodes[fila].firstChild.nodeValue);
		}
		//el numero de la fila se corrige, 2 de donde parte los datos, más 1, por la línea en blanco, más el valor de la fila
		b[2+1+fila]=new Fila(getTipoGasto(fila),letra[0],letra[1],letra[2],letra[3],null,null,null,null,null,null,null,null,null,null);
	}
	
	// Cálculo de los pesos de ponderación.
	//una vez que tenemos el escenario inicial cargado, calculamos los pesos de ponderación de las partidas con respecto a los subtotales, y los pesos del subtotales con respecto al total
	//de ahí que el for solo llega a 14
	//los pesos se almacenan en la columna F
	for (var fila=2; fila<15; fila++) {
		switch (fila) {
			case 2: b[fila].f= b[fila].b / b[15].b; break;
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9: b[fila].f= b[fila].b / b[2].b; break;
			case 10: break; //no hay que calcular nada
			case 11: 
			case 12:
			case 13: b[fila].f= b[fila].b / b[14].b; break;
			case 14: b[fila].f= b[fila].b / b[15].b; break;
		}
	}
	//Se calcularán las tasas ponderadas iniciales, en base a la tasa almacenada en el XML, que salvo los escenarios prefijados, el resto de XML tiene valor 0 la tasa de variación
	//Las tasas ponderadas se almacenan en la columna G
	for (var fila=3; fila<14; fila++) {
		switch (fila) {
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9: b[fila].g= b[fila].f * b[fila].d; break;
			case 10: break; //no hay que calcular nada
			case 11: 
			case 12:
			case 13: b[fila].g= b[fila].f * b[fila].d; break;
		}
	}
	
	
	//las tasas ponderadas (columna G) se calcularán cuando se carge el escenario y se determine la tasa de variación elegida. Recordemos que los xml todos tienen inicialmente esta tasa a  0
	
	/***************** COEFICIENTES ESTIMADOS ************/
	//TABLA COEFICIENTES ESTIMADOS del excel - de la fila 16 a la fila 24
	//la fila 16 se llena con los nombres de las columnas
	b[16]= new Fila (" ","Hospitalaria","Farmacia","Ambulatoria","Prótesis y traslados","Administración y salud pública","Gasto de capital","Transferencias","Productos aparatos y equipos médicos","Servicios sanitarios","Seguros privados",null,null);
	//Ahora iteramos para rellenar el resto de filas, recorriendo el DOM XML - obtenemos los datos por filas.
	
	//fila 17 a 24 --> 8 filas, de 0 a 7
	for (var fila=0; fila < 8; fila++) { //de la 17 a 24 ambas inclusive -- 8 filas, 8 grupos de edades
		var letra=new Array(10); //son 10 columnas, de la B a K.
		for (var columna=0; columna < 10; columna ++) { //10 columnas , de la B a la K
				//Se utiliza paseFloat para almacenarlo como números decimales. No se hace restricción en estos, de momento.
				letra[columna]=parseFloat(coeficientes_estimados[0].childNodes[columna].childNodes[fila].firstChild.nodeValue);
		}
		b[17+fila]=new Fila (getGrupoEdad(fila),letra[0],letra[1],letra[2],letra[3],letra[4],letra[5],letra[6],letra[7],letra[8],letra[9],null,null,null,null);
	}
	
	/*************** ESCENARIO POBLACIÓN *******************/
	//El escenario de población, en xml se ha guardado junto, para simplificar el esquema, pero en excel, se encuentran en filas separas la población del 2005 con porcentaje,
	//del resto de poblaciones de 2006 a 2017. Por ello, en un solo recorrido, vamos a coger todos los datos a la vez, pero vamos a rellenar dos grupos de filas y columnas.
	
	//hay que coger primero los datos de solo 2005 agrupados por edades.
	//TABLA POBLACIÓN 2005 del excel - de la fila 34 a 42
	//la fila 34 se llena con el nombre de las columas
	b[34]= new Fila (" ","2005","Porcentaje",null,null,null,null,null,null,null,null,null,null,null,null);
	
	//TABLA ESCENARIO DE POBLACIÓN del excel - de la fila 53 a 61
	//la fila 53 se llena con el nombre de las columnas
	b[53]= new Fila(" ","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017",null,null);
	
	//Ahora iteramos para rellenar el resto de filas, recorriendo el DOM XML - obtenos datos por filas.
	
	//Población 2005 --> fila 35 a 42 --> 8 filas, de 0 a 7
	//Población resto   --> fila 54 a 61 --> 8 filas, de 0 a 7  
	for (var fila=0; fila < 8; fila++) { //de la 35 a 42 ambas inclusive , y de la 54 a 61 -- 8 filas, 8 grupos de edades
		var letra=new Array(13); //son 13 grupo de población por años, de 2005 a 2017 --> de 0 a 12, la 0 irá a la columna B de las filas 35 a 42, de la 1 a 12 del array, irán a partir de la columna B de las filas 54 a 61
		for (var columna=0; columna < 13; columna ++) { //13 columnas de datos, serían de la B a la N, pero N no existe en el excel, por eso las columnas=0 y columnas=1 irán a columnas B de distintos grupos de filas
		//Se utiliza paseFloat para almacenarlo como números decimales. No se hace restricción en estos, de momento.
				letra[columna]=parseFloat(escenario_poblacion[0].childNodes[columna].childNodes[fila].firstChild.nodeValue);
				//se almacena las 13 columnas - de 0 a 12
		}
		//grupo de filas de población 2005. fila 35 a 42. El dato del 2005 se almacena en la columna 0 de datos, es decir, en letra[0] ..> esta es la columna B del excel de este grupo de filas
		b[35+fila]=new Fila (getGrupoEdad(fila),letra[0],0,null,null,null,null,null,null,null,null,null,null,null,null);
		
		//grupo de filas de población 2006 a 2017. fila 54 a 61. Los datos se almacenan a partir de la columna 1, es decir, letra[1] --> esta es la columna B del excel de este grupo de filas
		b[54+fila]=new Fila (getGrupoEdad(fila),letra[1],letra[2],letra[3],letra[4],letra[5],letra[6],letra[7],letra[8],letra[9],letra[10],letra[11],letra[12],null,null);
	}
	
	return b;
} //fin inciar_escenario(b,d)

/****************** getTipoGasto() *********************/
// 8.- Es llamada por inciar_escenario()  (7)
/*****************************************************/
function getTipoGasto(v1) {
	switch (v1) {
			case 0: literal="Gasto sanitario público"; break;
			case 1: literal="Hospitalaria"; break;
			case 2: literal="Farmacia"; break;
			case 3: literal="Ambulatoria"; break;
			case 4: literal="Protesis y traslados"; break;
			case 5: literal="Administración y salud pública"; break;
			case 6: literal="Gastos de capital"; break;
			case 7: literal="Transfrerencias a otros sectores"; break;
			case 8: literal="Productos aparatos y equipos médicos"; break;
			case 9: literal="Servicios sanitarios"; break;
			case 10: literal="Seguros privados"; break;
			case 11: literal="Gasto sanitario privado"; break;
			case 12: literal="Gasto sanitario total"; break;
	}
	return literal;
}// fin getTipoGasto(v1);

/********************* getGrupoEdad () **********************************/
//9.- Es llamada por iniciar_escenario ();  (7)
/*********************************************************************/
function getGrupoEdad (v1) {
	switch (v1) {
		case 0: literal="0-4"; break;
		case 1: literal="5-14"; break;
		case 2: literal="15-44"; break;
		case 3: literal="45-54"; break;
		case 4: literal="55-64"; break;
		case 5: literal="65-74"; break;
		case 6: literal="Más de 75"; break;
		case 7: literal="Total"; break;
	}
	return literal;
}// fin getGrupoEdad(v1);

/******************************** borrar_nodo () ****************************/
//11.- Es llamado por cargarXML(m,f);
// borrar_nodo(identificador) --> Borra del document el nodo con el identificador que se pasa por parámetro
/*************************************************************************/
function borrar_nodo(identificador) {
	var nodo= document.getElementById(identificador);
	nodo.parentNode.removeChild(nodo);
}//fin borrar_nodo;

/**************************** borrar_nodos_hijos () ****************************/
//12.- Es llamado por cargaXML(m,f)
//borrar_nodos_hijos(identificador) --> borra todos los nodos hijos del nodo cuyo identificador se pasa por parámetro
/***************************************************************************/
function borrar_nodos_hijos(identificador)  {
	var nodo= document.getElementById(identificador);
	if (nodo==null) { alert('es bull'); }
	else {
		var n=nodo.childNodes.length
		var texto="tengo= "+ n + " nodos";
		//para borrar nodos, como se actualiza de forma automática, es mejor borrarlos del último al primero.
		for (i=n-1; -1<i; i--) { nodo.removeChild(nodo.childNodes[i]);}
	}	
}// fin borrar_nodos_hijos();

/************************* dibujar_tabla_escenario () ********************************/
//13.- Es llamado por cargarXML(m,f);
//dibujar_tabla_escenario() --> Dibuja la tabla del escenario base
/********************************************************************************/
function dibujar_tabla_escenario(opcion) {
	var pie;
	//lo primero que tengo que hacer, es determinar si la tabla la pinto con tasa variable o prefijada, esto lo calculo en función del parámetro que se pasa
	switch (opcion) {  
		case 1: pie="Características de la simulación: Escenario 1, Tasa configurable entre -100 y 100";
				break;
		case 2: pie="Características de la simulación: Escenario 2, Tasa configurable entre -100 y 100";
				break;
		case 3: pie="Características de la simulación: Escenario 1, Tasa prefijada";
				break;
		case 4: pie="Características de la simulación: Escenario 2, Tasa prefijada";
				break;
	}
	//Construimos el HTML con el DOM de arriba abajo.
	//Se trata de un formulario, que contiene una tabla, donde una columna puede tener una caja de texto o no, y un botón fuera de la tabla
	//Creamos el nodo del formulario
	var nodo_formulario= document.createElement("form");
	//le asignamos el id 
	nodo_formulario.id="formulario_escenario";
	//nodo_formulario.className="seccion";
	nodo_formulario.name="formulario_escenario";
	
	//los datos de esta tabla están entre las filas 1 a 15, columnas A a la E
	//Creamos un nodo tabla del DOM
	var nodo_tabla= document.createElement("table");
	//Le damos un identicador tablaescenario y la clase de estilo
	nodo_tabla.id="tablaescenario";
	nodo_tabla.className="tabla";
	
	//Creamos un nodo TBODY del DOM
	var nodo_tbody= document.createElement("tbody");
	
	//Creamos un elemento fila que almacenará los nodos filas <tr>
	var elemento_fila= new Array();
	//Creamos un elemento columna, que almacenará los nodos columnas <td> de cada fila
	var elemento_columna= new Array();
	//Declaramos uno elemento celda, que servirá para almacenar el valor de la celda
	var elemento_celda= null;
	
	
	//la tabla escenario tiene 15 filas, de la 1 a 15, ( sin hacer -->>pero como se añade una columna más por diferenciar mejor el tipo de datos, se dibujarán 16 filas
	for (var f=1; f<17;f++) {
		//Creamos un nodo fila <tr> y lo almacenamos en el array de filas
		elemento_fila[f]= document.createElement("tr");
		//le ponemos el id y el name por la fila del excel
		elemento_fila[f].id="fila_"+f;
		elemento_fila[f].name="fila_"+f;
		//la tabla escenario almacena los datos de las columnas A a E, 5 columnas, pero la columna D, que es el porcentaje, no se muestra, luego 4 columnas, de 0 a 3
		for (var c=0; c<4; c++) {
			//Creamos un nodo columna <td> y lo almacenamos en el array de columnas
			elemento_columna[c] = document.createElement("td");
			//se añade a cada elemento columna, el nodo con el texto que tiene que mostrar, o sea, los datos
			//también se identifica cada celda por la fila y la columna del excel
			switch (c){
				case 0: //La primera columna siempre es texto y todas las filas están sangradas menos la 2, 14 y 15
						if ((f==1) || (f==2) || (f==10) || (f==14) || (f==15) || (f==16)) {
								elemento_celda= document.createTextNode(escenario_base[f].a);
						}
						else { elemento_celda= document.createTextNode(" - "+escenario_base[f].a); }
						elemento_columna[c].id="celda_"+f+"a";
						elemento_columna[c].name="celda_"+f+"a";
						break; 
				
				//las columnas b, c, e son literales para la primera fila, y fila 10, 
				case 1:  	switch (f) {
								case 1:		elemento_celda= document.createTextNode(escenario_base[f].b); break;
								case 10:	elemento_celda= document.createTextNode(escenario_base[f].b); break;
								case 16:	elemento_celda= document.createTextNode("   "); break;
								default:	elemento_celda= document.createTextNode(((escenario_base[f].b)*1).toFixed()); break;
							}
							elemento_columna[c].id="celda_"+f+"b";
							elemento_columna[c].name="celda_"+f+"b";
							break;
													
				case 2:  	switch (f) { //esta es la celda de la tasa
								case 1:		elemento_celda= document.createTextNode(escenario_base[f].c); break;
								case 10:	elemento_celda= document.createTextNode(escenario_base[f].c); break;
								case 16:	elemento_celda= document.createTextNode("   "); break;
								default:	elemento_celda= document.createTextNode(((escenario_base[f].c)*1).toFixed()); break;
							}
							elemento_columna[c].id="celda_"+f+"c";
							elemento_columna[c].name="celda_"+f+"c";
							break;
													
				case 3:  	switch (f) { //esta es la celda del gasto incial de simulación
								case 1:		elemento_celda= document.createTextNode(escenario_base[f].e); break;
								case 10:	elemento_celda= document.createTextNode(escenario_base[f].e); break;
								case 16:	elemento_celda= document.createTextNode("   "); break;
								default:	elemento_celda= document.createTextNode(((escenario_base[f].e)*1).toFixed()); break;
							}
							elemento_columna[c].id="celda_"+f+"e";
							elemento_columna[c].name="celda_"+f+"e";
							break;
			}
			
			//Unimos el valor de la celda, a la columna que acabamos de crear
			elemento_columna[c].appendChild(elemento_celda);
			// Se une el elemento columna al elemento fila
			elemento_fila[f].appendChild(elemento_columna[c]);
		}	
	}
	//intercambiamos algunas filas de orden para una mejor presentación
	//intercambiamos las filas 11 y 14, usamos la 17 como intermediaria
	elemento_fila[17]=elemento_fila[11];
	elemento_fila[11]=elemento_fila[14];
	elemento_fila[14]=elemento_fila[17];
	//intercambiamos las filas 15 y 16, usando la 17 como intermediaria
	elemento_fila[17]=elemento_fila[15];
	elemento_fila[15]=elemento_fila[16];
	elemento_fila[16]=elemento_fila[17];


	//le damos la clase a cada fila
	//fila 1 -> class "celdaVariable1"
	for (var c=0;c<4;c++) {elemento_fila[1].childNodes[c].className="celdaVariable1";}
	//de la fila 2 a la 16, la columna 0 siempre es de la clase "celdaVariable0"
	for (var f=2;f<17;f++) {elemento_fila[f].childNodes[0].className="celdaVariable0";}
	//fila 2 a 9 -> alternativamente van de celdaDato0 a celdaDato1, las columnas de 1 a 3
	for (var f=2;f<10;f++) {
		for (var c=1;c<4;c++) { 
			if (esPar(f)) { elemento_fila[f].childNodes[c].className="celdaDato0";}
			else { elemento_fila[f].childNodes[c].className="celdaDato1";}
		}
	}
	//la fila 10 es de la clase barra todas las columnas
	for (var c=0;c<4;c++) {elemento_fila[10].childNodes[c].className="barra";}
	//fila 11 a 14 -->  alternativamente van de celdaDato1 a celdaDato0 , las columnas de 1 a 3
	for (var f=11;f<15;f++) {
		for (var c=1;c<4;c++) { 
			if (!esPar(f)) { elemento_fila[f].childNodes[c].className="celdaDato0";}
			else { elemento_fila[f].childNodes[c].className="celdaDato1";}
		}
	}
	//fila 15 --> de la clase barra todas las columnas
	for (var c=0;c<4;c++) {elemento_fila[15].childNodes[c].className="barra";}
	//fila 16 --> de la clase celdaDato1 de la columna 1 a 3
	for (var c=1;c<4;c++) {elemento_fila[16].childNodes[c].className="celdaDato0";}
	
	//por último, creo una fila con una columna, a modo de pie, donde pongo las características del escenario
	//Creo el nodo de texto que contiene el literal a mostrar en el pie
	elemento_celda= document.createTextNode(pie);
	//creo el nodo tipo td
	elemento_columna[0] = document.createElement("td");
	//esta columna es la fusión de las cuatro que componen la tabla, le cambio el atributo colSpan
	elemento_columna[0].colSpan=4;
	//ahora le pongo el contenido de la columna
	elemento_columna[0].appendChild(elemento_celda);
	// Creo un nodo fila tr y le uno el elemento columna 
	elemento_fila[17]= document.createElement("tr");
	elemento_fila[17].className="tablaizquierda";
	elemento_fila[17].appendChild(elemento_columna[0]);
	
	//Unimos las 17 filas a tbody;
	for (var f=1;f<18;f++){  nodo_tbody.appendChild(elemento_fila[f]);}
	
	//el nodo tbody lo uno al nodo table
	nodo_tabla.appendChild(nodo_tbody);
	
	//unimos la tabla al formulario
	nodo_formulario.appendChild(nodo_tabla);

/*	
	//Creamos el botón de obtención de la simulación                                               <----------------------
	var nodo_boton_formulario=document.createElement("input");
	nodo_boton_formulario.id="boton_simulacion";
	nodo_boton_formulario.name="boton_simulacion";
	nodo_boton_formulario.type="button";
	nodo_boton_formulario.value="Obtener simulación";
	nodo_boton_formulario.className="boton";
	nodo_boton_formulario.disabled= true;  //de momento se deshabilita el botón
	nodo_boton_formulario.onclick= function () { obtener_simulacion(); };
	//uno el botón al formulario
	nodo_formulario.appendChild(nodo_boton_formulario);
*/	
	//unir el formulario a la tabla 8
	document.getElementById("8").appendChild(nodo_formulario);

	//y la tabla, la uno al nodo que le corresponda del document, en este caso, nodo de identificador 8
	//document.getElementById("8").appendChild(nodo_tabla);
	//decimos que ese nodo es de la class  seccion para la hoja de estilos
	document.getElementById("8").className="seccion";
}//fin dibujar_tabla_escenario();


/************************ esPar() *****************************************/
//14.- Es llamado por dibujar_tabla_escenario(pie)
//esPar(n) --> Devuleve true si n es par, y false si es impar
/***********************************************************************/
function esPar(n) {
	if ((n%2)==0) {return true;}
	else {return false;}
}//fin esPar()


/************************** dibujar_formulario_tasas_incrementos () *************************/
//15.- Es llamado por cargarXML()
//dibujar_formulario_tasas_incrementos() --> dibuja en las celda 9 un formulario mostrando las opciones de aplicabilidad de las tasas
/***************************************************************************/
function dibujar_formulario_tasas_incrementos(){
	//FORMULARIO TASAS ------------------------------------------------------------------------------------------------
	
	//Se trata de un formulario con 3 input de tipo radio formando un conjunto de campos (fieldset), un legend y un botón
	//de dentro-afuera
	//creo los tres input de tipo radio
	var nodo_radio= new Array();
	for (var i=0; i<3;i++) {
		nodo_radio[i]=document.createElement("input");
		nodo_radio[i].type= "radio";
		nodo_radio[i].name= "tasa";
		nodo_radio[i].checked=false;
		nodo_radio[i].onclick= function () {manejarRadioTasas(this);};
	}
	//Le doy las propiedades a cada nodo
	nodo_radio[0].id= "partidas";
	nodo_radio[0].value= "partidas";
	
	nodo_radio[1].id= "subtotales";
	nodo_radio[1].value= "subtotales";
	
	nodo_radio[2].id= "prefijado";
	nodo_radio[2].value= "prefijado";

	//creo un legend para los tres input
	var nodo_legend= document.createElement ("legend");
	//y le cuelgo el texto de la leyenda
	nodo_legend.appendChild(document.createTextNode("Configuración del escenario "));
	
	//dentro del legend, le pongo  el icono de pdf y el link a documento de la descripción de la configuración
	var nodo_link= document.createElement("a");
	nodo_link.href="./pdf/descripcion.pdf";
	nodo_link.target="_blank";
	var nodo_img= document.createElement("img");
	nodo_img.title="Documento pdf";
	nodo_img.className="iconoPdf";
	nodo_img.alt="Documento pdf";
	nodo_img.src="./img/ico_pdf.gif";
	nodo_link.appendChild(nodo_img); //el nodo img está dentro de link
	nodo_legend.appendChild(nodo_link); //el link dentro del legend, al lado de TextNode
	
	//los tres input de tipo radio y el legend, lo meto dentro de un fieldset
	//creo el nodo fieldset
	var nodo_fieldset= document.createElement("fieldset");
	//le uno el legend
	nodo_fieldset.appendChild(nodo_legend);
	//Al nodo fieldset le voy uniendo todos los elementos input radio
	nodo_fieldset.appendChild(nodo_radio[0]);
	nodo_fieldset.appendChild(document.createTextNode("Variación en las diferentes partidas de gasto"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[1]);
	nodo_fieldset.appendChild(document.createTextNode("Variación en el gasto total público y/o privado"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[2]);
	nodo_fieldset.appendChild(document.createTextNode("Escenario prefijado"));
	nodo_fieldset.appendChild(document.createElement("br"));
	
	//ahora metemos todo el fieldset en una celda, la izd
	var nodo_celda_izd= document.createElement("td");
	nodo_celda_izd.appendChild(nodo_fieldset);
	
	// FORMULARIO TASA INCREMENTO ---------------------------------------------------------------------------------
	
	//Guardado en la celda izquierda el formulario de las tasas, creamos en la derecha, el de los incrementos
	//es un fieldset con 2 radios
	for (var i=0; i<2;i++) {
		nodo_radio[i]=document.createElement("input");
		nodo_radio[i].type= "radio";
		nodo_radio[i].name= "incremento";
		nodo_radio[i].checked=false;
		nodo_radio[i].onclick= function () {manejarRadioIncrementos(this);}; 
	}
	//Le doy las propiedades a cada nodo
	nodo_radio[0].id= "acumulado";
	nodo_radio[0].value= "acumulado";
	
	nodo_radio[1].id= "unico";
	nodo_radio[1].value= "unico";
	
	//creo un legend para los dos input
	var nodo_legend= document.createElement ("legend");
	//y le cuelgo el texto de la leyenda
	nodo_legend.appendChild(document.createTextNode("Tasa de incremento "));
	
	//los dos input de tipo radio y el legend, lo meto dentro de un fieldset
	//creo el nodo fieldset
	var nodo_fieldset= document.createElement("fieldset");
	//le uno el legend
	nodo_fieldset.appendChild(nodo_legend);
	//Al nodo fieldset le voy uniendo todos los elementos input radio
	nodo_fieldset.appendChild(nodo_radio[0]);
	nodo_fieldset.appendChild(document.createTextNode("Tasa de incremento anual acumulada"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[1]);
	nodo_fieldset.appendChild(document.createTextNode("Tasa de incremento única"));
	nodo_fieldset.appendChild(document.createElement("br"));
	
	//creamos la celda derecha, y le unimos el fieldset
	var nodo_celda_dch= document.createElement("td");
	nodo_celda_dch.appendChild(nodo_fieldset);
	
	// FIN formulario
	
	//Y ahora unimos las dos celdas en una fila, que será la fila de los fiedsets
	// La fila
	var nodo_fila= document.createElement("tr");
	nodo_fila.appendChild(nodo_celda_izd);
	nodo_fila.appendChild(nodo_celda_dch);
	//a tbody se le une la fila	
	var nodo_tbody= document.createElement("tbody");
	nodo_tbody.appendChild(nodo_fila);
	
	//BOTONES
	//debajo de la fila de los fieldset, pondremos la fila de los botones, centrados
	//Creamos el botón ACEPTAR de la tasas
	var nodo_boton=document.createElement("input");
	nodo_boton.type="button";
	nodo_boton.id="boton_tasas";
	nodo_boton.name="boton_tasas";
	nodo_boton.value="Aceptar";
	nodo_boton.className="boton";
	nodo_boton.onclick= function () { mostrar_tasas(); };
	
	//creado el botón ACEPTAR , lo metemos en la celda izquierda centrado
	var nodo_celda_izd= document.createElement("td");
	nodo_celda_izd.align="center";
	nodo_celda_izd.appendChild(nodo_boton);
	
	//boton SIMULACION
	//se pone en la celda de la derecha, también centrado
	
	//CREAR BOTON
	var nodo_boton=document.createElement("input");
	nodo_boton.id="boton_simulacion";
	nodo_boton.name="boton_simulacion";
	nodo_boton.type="button";
	nodo_boton.value="Obtener simulación";
	nodo_boton.className="boton";
	nodo_boton.disabled= true;  //de momento se deshabilita el botón
	nodo_boton.onclick= function () { obtener_simulacion(); };
	
	//y se mete en la celda correspondiente
	var nodo_celda_dch= document.createElement("td");
	nodo_celda_dch.align="center";
	nodo_celda_dch.appendChild(nodo_boton);
	
	//Las dos celdas se meten en una fila, y esta en el Tbody
	// La fila
	var nodo_fila= document.createElement("tr");
	nodo_fila.appendChild(nodo_celda_izd);
	nodo_fila.appendChild(nodo_celda_dch);
	//a tbody se le une la fila	
	nodo_tbody.appendChild(nodo_fila);
	
	//y el tbody se pone dentro de una tabla 
	var nodo_tabla= document.createElement("table");
	nodo_tabla.className="tablaizquierda";
	nodo_tabla.appendChild(nodo_tbody);
	

	//la tabla las uno al formulario	
	//creo un nodo formulario
	var nodo_formulario= document.createElement("form");
	//le asignamos el id 
	nodo_formulario.id="formulario_tasas";
	//nodo_formulario.className="seccion";
	nodo_formulario.name="formulario_tasas";
	//uno la tabla y el boton
	nodo_formulario.appendChild(nodo_tabla);
	//nodo_formulario.appendChild(nodo_boton);
	
	//Y el formulario lo meto en la celda 9 de la tabla  de la página
	document.getElementById("9").appendChild(nodo_formulario);
}//Fin dibujar formulario tasas


/*********************** mostrar_tasas ****************************************************/
//16.- Es llamado desde dibujar_formulario_tasas_incrementos por el envento onclick del boton del formulario_tasas
//mostrar_tasas() --> analiza la selección realizada en el formulario_tasas y redibuja la tabla del 
//                           --> del escenario mostrando las tasas según la selección. También muestra un botón para 
//                           --> mostrar la simulación.
/****************************************************************************************/
function mostrar_tasas() {
	if ((!document.getElementById("partidas").checked) && (!document.getElementById("subtotales").checked) && (!document.getElementById("prefijado").checked)) {alert('Por favor, eliga una configuración');}
	else {
		
		//Averiguar que opción se seleccionado
		if (document.getElementById("partidas").checked) {tipo_tasa="partidas"; dibujar_tasas_partidas();}
		if (document.getElementById("subtotales").checked) {tipo_tasa="subtotales"; dibujar_tasas_subtotales();}
		if (document.getElementById("prefijado").checked) {tipo_tasa="prefijado"; dibujar_escenario_prefijado();}
	}
}//fin mostrar_tasas();

/************************************** dibujar_tasas_partidas **********************************************************/
//17.- Es llamado desde mostrar_tasas.
//dibujar_tasas_partidas() --> Dibuja, sobre la tabla del  escenario pintada, los campos input text de las tasas correspondientes a las partidas
//				     --> Les asigna la programación a los input text
//				     --> Habilita el botón de obtención del a simulación "boton_simulacion"
//				    --> Halla las tasas ponderadas y los porcentajes a aplicar al "escenario_base"
/*********************************************************************************************************************/
function dibujar_tasas_partidas() {
	/*quitar*/		//alert('ESTOY EN DIBUJAR TASAS DE LAS PARTIDAS');
	//Sobre las celdas de la tabla ya creada, tengo que introducir elementos input text
	//las celdas afectadas por las partidas son: celda_3c a la celda_9c, y de la celda_11c a la celda_13c
	var nodo_input;
	var identificador;
	var ev = (document.addEventListener) ? 'keyup' : 'keypress';  //el primero es FX el segundo IE
	for (var i=3; i<10; i++) {
		identificador="celda_"+i+"c";
		nodo_input=document.createElement("input");
		nodo_input.type="text";
		nodo_input.name="tasa_"+i+"c";
		nodo_input.id="tasa_"+i+"c";
		nodo_input.value=escenario_base[i].c;
		nodo_input.size="3";
		nodo_input.maxLength="4";
		nodo_input.alt="tasa entre -100 y 100";
		nodo_input.title="Introduzca un valor entre -100 y 100";
		//le añadimos el manejador de evento para que solo permita números, y controle el tabulador, flecha arriba, flecha abajo, y enter
		//con esta forma de hacerlo, funciona bien tanto en IE como FX
		//addEvent(nodo_input, ev, validos, true); //evento de teclado
		//addEvent(nodo_input, 'blur', actualizar, true);  //evento cuando pierde el foco
		addEvent(nodo_input, ev, validos, false); //evento de teclado
		addEvent(nodo_input, 'blur', actualizar, false);  //evento cuando pierde el foco
		borrar_nodos_hijos(identificador);
		document.getElementById(identificador).appendChild(nodo_input);
	}
	for (var i=11; i<14; i++) {
		nodo_input=document.createElement("input");
		nodo_input.type="text";
		nodo_input.name="tasa_"+i+"c";
		nodo_input.id="tasa_"+i+"c";
		nodo_input.value=escenario_base[i].c;
		nodo_input.size="3";
		nodo_input.maxLength="4";
		nodo_input.alt="tasa entre -100 y 100";
		nodo_input.title="Introduzca un valor entre -100 y 100";
		//addEvent(nodo_input, ev, validos, true);  //evento de teclado
		//addEvent(nodo_input, 'blur', actualizar, true);  //evento cuando pierde el foco
		addEvent(nodo_input, ev, validos, false);  //evento de teclado
		addEvent(nodo_input, 'blur', actualizar, false);  //evento cuando pierde el foco
		borrar_nodos_hijos("celda_"+i+"c");
		document.getElementById("celda_"+i+"c").appendChild(nodo_input);
	}
	//el resto de nodos a los que no le uno un input, borro el valor que contienen
	borrar_nodos_hijos("celda_2c"); 
	document.getElementById("celda_2c").appendChild(document.createTextNode("  "));
	borrar_nodos_hijos("celda_14c"); 
	document.getElementById("celda_14c").appendChild(document.createTextNode("  "));
	borrar_nodos_hijos("celda_15c"); 
	document.getElementById("celda_15c").appendChild(document.createTextNode("  "));
	//se habilita el boton_simulación.
	document.getElementById("boton_simulacion").disabled=false;
}



/*********************************************** dibujar_tasas_subtotales *************************************************/
//18.- Es llamado desde mostrar_tasas.
//dibujar_tasas_subtotales() --> Dibuja, sobre la tabla del  escenario pintada, los campos input text de las tasas correspondientes a los subtotales del gasto público y privado
//				     --> Les asigna la programación a los input text
//				     --> Habilita el botón de obtención del a simulación "boton_simulacion"
//				    --> Halla las tasas ponderadas y los porcentajes a aplicar al "escenario_base"
/**********************************************************************************************************************/
function dibujar_tasas_subtotales() {
	/****************quitar ******/ //alert('ESTOY EN DIBUJAR TASAS DE LOS SUBTOTALES');
	//Sobre las celdas de la tabla ya creada, tengo que introducir elementos input text
	//las celdas afectadas por las partidas son: celda_2c y la celda_14c
	var nodo_input;
	var identificador;
	var ev = (document.addEventListener) ? 'keyup' : 'keypress';  //el primero es FX el segundo IE
	for (var i=2; i<15; i=i+12) {
		identificador="celda_"+i+"c";
		nodo_input=document.createElement("input");
		nodo_input.type="text";
		nodo_input.name="tasa_"+i+"c";
		nodo_input.id="tasa_"+i+"c";
		nodo_input.value=escenario_base[i].c;
		nodo_input.size="3";
		nodo_input.maxLength="4";
		nodo_input.alt="tasa entre -100 y 100";
		nodo_input.title="Introduzca un valor entre -100 y 100";
		//le añadimos el manejador de evento para que solo permita números, y controle el tabulador, flecha arriba, flecha abajo, y enter
		//con esta forma de hacerlo, funciona bien tanto en IE como FX
		//addEvent(nodo_input, ev, validos, true);
		//addEvent(nodo_input, 'blur', actualizar, true);  //evento cuando pierde el foco
		addEvent(nodo_input, ev, validos, false);
		addEvent(nodo_input, 'blur', actualizar, false);  //evento cuando pierde el foco
		borrar_nodos_hijos(identificador);
		document.getElementById(identificador).appendChild(nodo_input);
	}
		
	//el resto de nodos a los que no le uno un input, borro el valor que contienen, van de la celda3_3c a la celda_9c y y de la celda_11c a la celda_13c y la celda_15c
	for (var i=3; i<10; i++) {
		identificador="celda_"+i+"c";
		borrar_nodos_hijos(identificador); 
		document.getElementById(identificador).appendChild(document.createTextNode("  "));
	}
	for (var i=11; i<14; i++) {
		identificador="celda_"+i+"c";
		borrar_nodos_hijos(identificador); 
		document.getElementById(identificador).appendChild(document.createTextNode("  "));
	}
	borrar_nodos_hijos("celda_15c"); 
	document.getElementById("celda_15c").appendChild(document.createTextNode("  "));
	//se habilita el boton_simulación.
	document.getElementById("boton_simulacion").disabled=false;
}



/********************************************* dibujar_escenario_prefijado **********************************************/
//19.- Es llamado desde mostrar_tasas.
//dibujar_escenario_prefijado() --> Dibuja, sobre la tabla del  escenario prefijado, eliminando la actual, para ello carga un nuevo XML
//				     --> Habilita el botón de obtención del a simulación "boton_simulacion"
/********************************************************************************************************************/
function dibujar_escenario_prefijado() {
	//1.- Cargar el fichero que se indica por las elecciones
		//1.a - Leer el XML correspondiente
	leerXML(nombre_ficheroXML(mapa,formulario+2)); //modifica la variable xmlDocument, asignándole el contenido del fichero
		var mensaje= "SE HAN CARGADO EL ESCENARIO CON ÉXITO. \nRegión: '+mapa+'\nEscenario: '+formulario+'\nTasas de variación prefijadas.";
		if (xmlDocument==null) { alert(mensaje)}; //es curioso, pero con este mensaje, da tiempo a cargar el XmlDocument
		//1.b--> Rellenamos de nuevo la variable escenario_base con los nuevos valores del xml.
	alert('Se procede a cargar el siguiente escenario:\nRegión: '+mapa+'\nEscenario: '+formulario+'\nTasas de variación prefijadas.');	
	//iniciar_escenario(escenario_base, xmlDocument);
		escenario_base=iniciar_escenario(xmlDocument);
	//2.- borrar tabla dibujada --> borrar el formulario que la contiene: id="formulario_escenario"
	borrar_nodo("formulario_escenario");
	//3.- borrar formulario de tasas  --> id: formulario_tasas
		//de momento no lo hago	
	//4.- dibujar_tabla_escenario
	dibujar_tabla_escenario(formulario+2);
	//5.- se habilita el boton_simulación.
	document.getElementById("boton_simulacion").disabled=false;

	//formulario=formulario+2;
	
	
}


/********************************************* manejarRadioTasas ***************************************************/
//20.- 
//manejarRadioTasas (obj)  --> metodo que se asocia a los input radio para manejar el checked en el IE, con Mozilla no hace falta
/************************************************************************************************************/
function manejarRadioTasas (obj) {
	obj.checked=true;
	if (obj.value!=document.getElementById("partidas").value) {document.getElementById("partidas").checked=false;}
	if (obj.value!=document.getElementById("subtotales").value) {document.getElementById("subtotales").checked=false;}
	if (obj.value!=document.getElementById("prefijado").value) {document.getElementById("prefijado").checked=false;}

} //fin manejarRadioTasas

/********************************************* manejarRadioIncrementos ***************************************************/
//20B.- 
//manejarRadioIncrmentos (obj)  --> metodo que se asocia a los input radio para manejar el checked en el IE, con Mozilla no hace falta
/************************************************************************************************************/
function manejarRadioIncrementos (obj) {
	obj.checked=true;
	if (obj.value!=document.getElementById("acumulado").value) {document.getElementById("acumulado").checked=false;}
	if (obj.value!=document.getElementById("unico").value) {document.getElementById("unico").checked=false;}

} //fin manejarRadioTasas


/********************************** validos() ******************************************************/
//Captura el evento de keypress o keyup según el navegador, por el comportamiento distintinto que cada navegador tiene con los INPUT text.
//validos (evt) -> Estable cel el nodo origen del evento
//                      -> halla el código de la tecla pulsada
//		     -> Testea si es carácter válido, entre los que se encuentra la teclas especiales
//	               -> Si se pulsa enter, determina cual es el siguiente en obtener el foco
/***********************************************************************************************/
function validos(evt)
{	//determinar el origen   
    var target = evt.target || evt.srcElement;
	var codigo = evt.keyCode || evt.which || evt.charCode; 
    //y eltipo de envento
	var targtype = target.type; 
	//var ev = (document.addEventListener) ? 'keyup' : 'keypress';  //el primero es FX el segundo IE
	var ev = (document.addEventListener) ? 'keypress' : 'keypress';  //el primero es FX el segundo IE
		
	//es la llamada al verdadeo manejador
    //resultado es una varible que me toma el valor de true o false según sea un carácter permitido o no.
	var resultado= permite(evt,target, codigo, 'num'); //Se pasa el evento, el origen del evento, y el código de la tecla pulsada
		//determino en que tipo de manejador estoy para diferenciar el comportamiento
	if ((!resultado) && (ev=='keyup')) { //le quito uno al value
			target.value=target.value.substr(0,(target.value.length-1));
	}
	if(codigo == 13){ 
		//vamos a usar el return como el tabulador, cambiaremos el foco.
		darFocoSiguienteInput(target.id);
	}
      
    return resultado;
}

/************************************darFocoSiguienteInput()*********************************************/
//Le da el foco al siguiente input del que se pasa por parámetro
//la hacemos función porque el Firefox pierde el foco cuando se invoca al método blur
//establece el orden del foco cuando se aprieta a enter
//darFocoSiguienteInput()
/********************************************************************************************************/
function darFocoSiguienteInput(iden) {
	switch (iden) {
			//tasas en las partidas
			case 'tasa_3c':		document.getElementById("tasa_4c").focus();break;
			case 'tasa_4c':		document.getElementById("tasa_5c").focus();break;
			case 'tasa_5c':		document.getElementById("tasa_6c").focus();break;
			case 'tasa_6c':		document.getElementById("tasa_7c").focus();break;
			case 'tasa_7c':		document.getElementById("tasa_8c").focus();break;
			case 'tasa_8c':		document.getElementById("tasa_9c").focus();break;
			case 'tasa_9c':		document.getElementById("tasa_12c").focus();break;
			case 'tasa_12c':	document.getElementById("tasa_13c").focus();break;
			case 'tasa_13c':	document.getElementById("tasa_11c").focus();break;
			case 'tasa_11c':	document.getElementById("tasa_3c").focus();break;
						
			//tasas en los subtotales
			case 'tasa_2c':		document.getElementById("tasa_14c").focus();break;
			case 'tasa_14c':	document.getElementById("tasa_2c").focus();break;
		}
}


/************************************** permite ****************************************************/
//25.- Invocado desde dibujar_tasas_partidas y dibujar_tasas_subtotales
//permite ( evento, caracteres permitidos) --> captura un evento de teclado y según se pase por parámetro 'num' 'car' 'num_car' devuelve true si se presionado una tecla numérica, 
//						         --> caracteres, una de las dos, y controla los caracteres de teclas especiales como enter, tabulador, flechas, etc..
//						         --> función genérica adaptable a las necesidades de los caracteres a controlar.
/***************************************************************************************************/
function permite(evt,target, codigoCaracter, permitidos) { //Se pasa el evento, el origen del evento, y el código de la tecla pulsada, y los caracteres permitidos
  // Variables que definen los caracteres permitidos
  var numeros = "-0123456789";
  var caracteres = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  var numeros_caracteres = numeros + caracteres;
  //var teclas_especiales = [8, 37, 39, 46];
  var teclas_especiales = [8, 9, 13, 37, 38, 39, 40, 46];
  // 8 = BackSpace, 9= tabulador, 13= return, 37 = flecha izquierda, 38= flecha arriba, 39 = flecha derecha, 40=flecha abajo, 46 = Supr
  
  // Seleccionar los caracteres a partir del parámetro de la función
  switch(permitidos) {
    case 'num':
      permitidos = numeros;
      break;
    case 'car':
      permitidos = caracteres;
      break;
    case 'num_car':
      permitidos = numeros_caracteres;
      break;
  }
 
  // paso a caracter el código de tecla
  var caracter = String.fromCharCode(codigoCaracter);
 
  // Comprobar si la tecla pulsada es alguna de las teclas especiales
  // (teclas de borrado y flechas horizontales)
  var tecla_especial = false;
  for(var i in teclas_especiales) {
    if(codigoCaracter == teclas_especiales[i]) {
      tecla_especial = true;
      break;
    }
  }
 
  // Comprobar si la tecla pulsada se encuentra en los caracteres permitidos
  // o si es una tecla especial
  return permitidos.indexOf(caracter) != -1 || tecla_especial;
}

/************************* actualizar() **************************************/
//Hace las comprobaciones y actulizaciones oportunas en la tabla, según los valores de los inputs recogidos cuando pierden el foco
//actualizar() --> Comprueba que el valor del input no sea mayor de 100
//		    --> Almacena el valor en la celda de la casilla escenario correspondiente
//		    --> Recalcula tasas ponderadas y gastos de simulación iniciales en función de esto
//		    --> Reescribe la tabla mostrada aquellos campos que se ven afectados
/***************************************************************************/
function actualizar(evt) {
	//determinar el origen   del evento
    var target = evt.target || evt.srcElement;
	//alert('Evento onblur. origen: '+ target.id + ' en '+ target.parentNode.id);
	
	// 1--> Comprueba que el valor del input no sea mayor de 100
		//cogemos el dato que hay en el nodo origen del event (la tasa que corresponda) la pasamos a número y comaparamos
	var tasanueva=parseFloat(target.value);
	if (tasanueva<(-100) || tasanueva>100) {
		alert('VALOR DE TASA ERRÓNEO.\n\nPor favor, introduzca una tasa de variación entre -100 y 100');
		//cogemos de nuevo el foco
		target.focus();
	}
	else { //entonces la tasa está entre los valores permitidos
			//determinar la fila que origina el evento, esto marcará cuáles serán los datos a actualizar, y si se trata del escenario de tasas variables de partidas o de subtotales
			var fila;
			switch (target.id) {
				//tasas en las partidas
				case 'tasa_3c':		fila=3;break;
				case 'tasa_4c':		fila=4;break;
				case 'tasa_5c':		fila=5;break;
				case 'tasa_6c':		fila=6;break;
				case 'tasa_7c':		fila=7;break;
				case 'tasa_8c':		fila=8;break;
				case 'tasa_9c':		fila=9;break;
				case 'tasa_12c':	fila=12;break;
				case 'tasa_13c':	fila=13;break;
				case 'tasa_11c':	fila=11;break;
				//tasas en los subtotales
				case 'tasa_2c':		fila=2;break;
				case 'tasa_14c':	fila=14;break;
			}
		
	// 2--> Almacena el valor en la celda de la casilla escenario_base correspondiente
			escenario_base[fila].c=parseFloat(target.value);
			
	// 3--> Recalcula tasas ponderadas y gastos de simulación iniciales en función de esto
			recalcula_tasas_ponderadas(fila);
			
	// 4--> Reescribe la tabla mostrada aquellos campos que se ven afectados
			reescribe_celdas(fila);
	} //fin del else

} //fin actualizar()


/************************* recalcula_tasas_poderadas(fila) ***************************************/
//Se recalculan las tasas ponderadas, porcentajes y gastos iniciales de simulación que correspondan, en base al valor de fila pasado por parámetro
//recalcula_tasas_ponderadas()  --> Es llamado por el manejador de envento actualizar
//					   --> Se recalcula el porcentaje en base a la tasa recién inroducida y ya almacenada en el escenario
// 					   --> Se recalcula la tasa ponderada
//					   --> Se recalcula el gasto incial correspondiente a esa tasa
//					   --> En base a si es una tasa de partidas o de subototales, se realizan lo recalculos en cascada precisos
/********************************************************************************************/
function recalcula_tasas_ponderadas(f) {
	//Se recalcula el porcentaje en base a la tasa recién inroducida y ya almacenada en el escenario
	escenario_base[f].d= 1 + (escenario_base[f].c / 100);
	//Se recalcula la tasa ponderada
	escenario_base[f].g= escenario_base[f].f * escenario_base[f].d;
	//Se recalcula el gasto incial
	escenario_base[f].e= escenario_base[f].b * escenario_base[f].d;
	
	//Distingo cuatro casos de modificación y reclaculo de datos
	switch (f) {
		//caso 1.- Variación en las tasas de las partes del gasto público --> fila 3 a fila 9
		case 3:
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:		//recalculo porcentaje del subtotal del gasto público
					var suma=0;
					for (var i=3; i<10; i++) { suma= suma + escenario_base[i].g;}
					escenario_base[2].d=suma;
					//Recalculo el gasto incial del subtotal del público
					escenario_base[2].e= escenario_base[2].b * escenario_base[2].d; //gasto público
					break;
		//caso 2.- Variación en las tasas de las partes del gasto privado --> fila 11 a 13
		case 11:
		case 12:
		case 13:	//Recalculo porcentaje gasto sanitario privado
					var suma=0;
					for (var i=11; i<14; i++) { suma= suma + escenario_base[i].g;}
					escenario_base[14].d=suma;
					//Recalculo el gasto incial del subtotal del privado
					escenario_base[14].e= escenario_base[14].b * escenario_base[14].d; //gasto privado
					break;
		//caso 3.- Variación en las tasas del subtotal del gasto público
		case 2:		//se recalculan las partes
					for (var i=3; i<10; i++) { //público
						escenario_base[i].d= escenario_base[2].d; //porcentaje
						escenario_base[i].g= escenario_base[i].f * escenario_base[i].d; //tasa ponderada
						escenario_base[i].e= escenario_base[i].b * escenario_base[i].d; //gasto incial
					}
					break;
		//caso 4.- Variación en las tasas del subtotal del gasto privado
		case 14:	for (var i=11; i<14; i++) { //privado
						escenario_base[i].d= escenario_base[14].d; //porcentaje
						escenario_base[i].g= escenario_base[i].f * escenario_base[i].d; //tasa ponderada
						escenario_base[i].e= escenario_base[i].b * escenario_base[i].d; //gasto incial
					}
					break;
	}//fin del switch 
		
	//siempre calculo el porcentaje y gasto incial del total del mismo modo
	//Gasto total porcentaje
	escenario_base[15].d= (escenario_base[14].d * escenario_base[14].f) +  (escenario_base[2].d * escenario_base[2].f);
	escenario_base[15].e= escenario_base[15].b * escenario_base[15].d; //gasto total
}//fin recalcula tasas ponderadas

/*********************************** reescribe_celdas () ****************************************************/
// Reescribe la tabla mostrada aquellos campos que se ven afectados
//Llamado por el manejador de evento actualizar
//reescribe_celdas(fila) --> En función del valor de fila, redibuja o reescribe la celda del gasto inicial de simulación que corresponda, en la pagina web
/*********************************************************************************************************/
function reescribe_celdas(f)	{
	//redibuja la celda del gasto inicial de simulación, de la fila donde ha variado la tasa.
	var ident="celda_"+f+"e";  //los gastos inciales de simulación están en la columna e
	borrar_nodos_hijos(ident);
	var contenido=document.createTextNode(((escenario_base[f].e)*1).toFixed());
	//pinto el valor en la tabla
	document.getElementById(ident).appendChild(contenido);
	
	//ahora, dependiendo si estoy en la tasa de variación de las partes o de los subtotales, se redibujan en cadenas otras celdas
	//Distingo cuatro casos de modificación y redibujo de datos
	switch (f) {
		//caso 1.- Variación en las tasas de las partes del gasto público --> fila 3 a fila 9
		case 3:
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:		//redibujo porcentaje del subtotal del gasto público
					borrar_nodos_hijos("celda_2e"); //Se redibuja la celda 2e
					contenido= document.createTextNode(((escenario_base[2].e)*1).toFixed());
					//pinto el valor en la tabla
					document.getElementById("celda_2e").appendChild(contenido);
					break;
		//caso 2.- Variación en las tasas de las partes del gasto privado --> fila 11 a 13
		case 11:
		case 12:
		case 13:	//redibujo porcentaje del subtotal del gastoprivado
					borrar_nodos_hijos("celda_14e"); //Se redibuja la celda 14e
					contenido= document.createTextNode(((escenario_base[14].e)*1).toFixed());
					//pinto el valor en la tabla
					document.getElementById("celda_14e").appendChild(contenido);
					break;
		//caso 3.- Variación en las tasas del subtotal del gasto público
		case 2:		//se  redibujan las partes
					for (var i=3; i<10; i++) { //público
						ident="celda_"+i+"e";
						borrar_nodos_hijos(ident); 
						contenido= document.createTextNode(((escenario_base[i].e)*1).toFixed());
						//pinto el valor en la tabla
						document.getElementById(ident).appendChild(contenido);
					}
					break;
		//caso 4.- Variación en las tasas del subtotal del gasto privado
		case 14:	for (var i=11; i<14; i++) { //privado
						ident="celda_"+i+"e";
						borrar_nodos_hijos(ident); //Se redibuja la celda 14e
						contenido= document.createTextNode(((escenario_base[i].e)*1).toFixed());
						//pinto el valor en la tabla
						document.getElementById(ident).appendChild(contenido);
					}
					break;
	}//fin del switch 
		
	//siempre calculo el porcentaje y gasto incial del total del mismo modo
	//Gasto total porcentaje
	borrar_nodos_hijos("celda_15e"); 
	contenido= document.createTextNode(((escenario_base[15].e)*1).toFixed());
	//pinto el valor en la tabla
	document.getElementById("celda_15e").appendChild(contenido);

}//fin de reescribe_celdas


/***************************************************************************************************************************************/
/********************************** CÁLCULO INTERNO DEL ESCENARIO DE SIMULACIÓN  Y OBTENCIÓN DE LA SIMULACIÓN ****************/
/***************************************************************************************************************************************/


/************************* obtener_simulacion () **********************************/
//21.- Invocada desde botón "boton_simulación"
//obtener_simulación()  --> hace los cálculos y operaciones para obtener la simulación
//				--> Calcula los parámetros del escenario incial para obtener la previsión del gasto
//				--> Calcula la previsión del gasto
//				--> muestra la tabla de la previsión del gasto
/******************************************************************************/
function obtener_simulacion () {
	if ((!document.getElementById("acumulado").checked) && (!document.getElementById("unico").checked)) {alert('Por favor, eliga una tasa de incremento');}
	else {
			//Se supone que las tasas, pesos, tasas ponderadas y gasto incial de simulación, ya está calculado, bien porque si se han configurado las tasas variables
			//se ha guardado estos cambios, bien porque se parte de un escenario prefijado, donde no se calculan estos valores al venir determinados en el excel de 
			//donde partimos para obtener el xml
			
			//se calcula el escenario incial de simulacion, es decir, todo lo demás de la hoja "Escenario base" de excel que no se llevó al XML.
			calcular_escenario_simulacion(escenario_base);  //cero que se puede sacar fuera del if al principio
			
			if (document.getElementById("unico").checked){
				tipo_incremento="unico";
				//dado el escenario de simulación, se halla la previsión del gasto
				prevision= calcular_prevision_gasto(escenario_base);
			}
			else { //ACUMULADO
				// LO NUEVO 
				tipo_incremento="acumulado";
				//dado el escenario de simulación, se halla la previsión del gasto
				//1.- adecuar escenario base a la nueva configuración de acumulado
				escenario_base_acumulado= reconfigurar_escenario_a_acumulado(escenario_base);
				
				//2.- calcular la simulación sobre la hoja del escenario base
				//y
				//3.- copiar los datos a representar a la hoja previsión
				prevision= calcular_prevision_gasto_acumulado(escenario_base_acumulado);  
			}
			//mostrar los resultados de la prevision
			mostrar_resultados(prevision);   
			//lo que aquí se ponga siempre se hace al final
			//dibuja el formulario de elección del gráfico
			dibujar_formulario_graficos();
			//se modifica el valor href del link de navegación atras
			document.getElementById("back").href="Javascript:click_atras(1);";
	}
}//fin obtener simulación

/********************** calcular_escenario_simulacion () **************************/
//22.- Incovada por obtener_simulación()
//calcular_escenario_simulacion(escenario_base) --> Modifica la variable que se pasa por parámetro según las operaciones descritas en la hoja Excel "escenario base"
/******************************************************************************/
function calcular_escenario_simulacion(celda) {
//comenzamos con la columna Porcentaje de la población del 2005
	//filas 35 a 42, inclusives, columna C 
	for (var fila=35; fila < 43; fila++) {
		celda[fila].c = celda[fila].b / celda[42].b;
	}

	//Nos aseguramos que las columnas E y F  "Protesis y traslados" y "Administración y salud pública" respectivamente, de las filas 17 a 23 estén bien calculadas con 
	//el porcentaje obtenido anteriormente - fila 35 a 41 columna C -> diferencia entre filas: 18
	for (var fila=17; fila < 24; fila++) {
		celda[fila].e=celda[fila+18].c;
		celda[fila].f=celda[fila+18].c;
	}
	
	
	//Hay que crear cada fila nueva, que no está hecho.
	celda[25]= new Fila ("GASTO EN EUROS","Hospitalaria","Farmacia","Ambulatoria","Prótesis y traslados","Administración y salud pública","Gasto de capital","Transferencias","Productos aparatos y equipos médicos","Servicios sanitarios","Seguros privados",null,null);
	celda[43]= new Fila ("GASTO PER CAPITA 2005 ","Hospitalaria","Farmacia","Ambulatoria","Prótesis y traslados","Administración y salud pública","Gasto de capital","Transferencias","Productos aparatos y equipos médicos","Servicios sanitarios","Seguros privados",null,null);
	//Ahora calculamos el gasto en euros (filas 26 a 33) donde, para cada partida, se multiplica el gasto inicial de simulacion por los coeficientes calculados
	
	for (var fila=0;fila<8;fila++) {
		celda[26+fila] = new Fila 	(getGrupoEdad(fila), 						//A
									(celda[3].e * celda[(26+fila)-9].b),		//B
									(celda[4].e * celda[(26+fila)-9].c),		//C
									(celda[5].e * celda[(26+fila)-9].d),		//D
									(celda[6].e * celda[(26+fila)-9].e),		//E
									(celda[7].e * celda[(26+fila)-9].f),		//F
									(celda[8].e * celda[(26+fila)-9].g),		//G
									(celda[9].e * celda[(26+fila)-9].h),		//H
									(celda[11].e * celda[(26+fila)-9].i),		//I
									(celda[12].e * celda[(26+fila)-9].j),		//J
									(celda[13].e * celda[(26+fila)-9].k),		//K
									null,										//L
									null,										//M	
									null,										//N
									null);										//O
	}
	//se cambian de la B a la F por ser totales de los anteriores
	celda[33].b=0; celda[33].c=0; celda[33].d=0; celda[33].e=0; celda[33].f=0;
	for (var fila=26;fila<33;fila++) {
		celda[33].b= celda[33].b + celda[fila].b;
		celda[33].c= celda[33].c + celda[fila].c;
		celda[33].d= celda[33].d + celda[fila].d;
		celda[33].e= celda[33].e + celda[fila].e;
		celda[33].f= celda[33].f + celda[fila].f;
	}
	
	//se calcula ahora el gasto per capita 2005
	for (var fila=0;fila<8;fila++) {
		celda[44+fila] = new Fila 	(getGrupoEdad(fila),									//A
									(celda[(44+fila)-18].b / celda[(44+fila)-9].b) * 1000,	//B
									(celda[(44+fila)-18].c / celda[(44+fila)-9].b) * 1000,	//C
									(celda[(44+fila)-18].d / celda[(44+fila)-9].b) * 1000,	//D
									(celda[(44+fila)-18].e / celda[(44+fila)-9].b) * 1000,	//E
									(celda[(44+fila)-18].f / celda[(44+fila)-9].b) * 1000,	//F
									(celda[(44+fila)-18].g / celda[(44+fila)-9].b) * 1000,	//G
									(celda[(44+fila)-18].h / celda[(44+fila)-9].b) * 1000,	//H
									(celda[(44+fila)-18].i / celda[(44+fila)-9].b) * 1000,	//I
									(celda[(44+fila)-18].j / celda[(44+fila)-9].b) * 1000,	//J
									(celda[(44+fila)-18].k / celda[(44+fila)-9].b) * 1000,	//K
									null,													//L
									null,													//M
									null,													//N
									null);													//O
	}

	//con esto ya estaría el escenario base de simulación calculado
} //fin calcular_escenario_simulacion;


/*************************************** calcular_prevision_gasto () ***********************/
//23 .- Llamado desde obtener_simulacion()
// calcular_prevision_gasto (escenario_base) --> dado el escenario de simulación, se halla la previsión del gasto
//                                                                                              --> modifica las variables que se le pasa por parámetro
//                                                                                              --> corresponde con los cálculos de la hoja EXCEL "Previsión del gasto"
/*****************************************************************************************/
function calcular_prevision_gasto(base) {
	var gasto= new Array();
	//la variable global prevision, está sin incializar y sin crearle filas, procedemos a la creación de estas poniendo los literales donde le corresponda
	//según la hoja excel prevision
	//1.- Incializamos las filas que contienen el nombre de las tablas
	gasto[1]= new Fila ("Hospitalaria",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[11]= new Fila ("Farmacia",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[21]= new Fila ("Ambulatoria",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[31]= new Fila ("Prótesis y traslados",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[41]= new Fila ("Administración y salud pública",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[51]= new Fila ("Gasto de capital",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[61]= new Fila ("Transferencias",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[71]= new Fila ("Gasto privado",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[72]= new Fila ("Productos, aparatos y equipos médicos",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[82]= new Fila ("Servicios sanitarios",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	gasto[92]= new Fila ("Seguros privados",null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	
	//2.- Incializamos todos los nombres de columnas y filas.--> 10 tablas de operaciones parciales
	for (var i=2; i<63;i=i+10) { //se hace por tablas empezando por la primera fila de títulos. 
		gasto[i]= new Fila ("Grupos de edades","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017",null,null);
		gasto[i+1]= new Fila ("0-4",0,0,0,0,0,0,0,0,0,0,0,0,null,null); //se crean las filas y se incializan las columnas a 0
		gasto[i+2]= new Fila ("5-14",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+3]= new Fila ("15-44",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+4]= new Fila ("45-54",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+5]= new Fila ("55-64",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+6]= new Fila ("65-74",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+7]= new Fila ("Más de 75",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+8]= new Fila ("Total",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	}
	for (var i=73;i<94;i=i+10) {
		gasto[i]= new Fila ("Grupos de edades","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017",null,null);
		gasto[i+1]= new Fila ("0-4",0,0,0,0,0,0,0,0,0,0,0,0,null,null); //se crean las filas y se incializan las columnas a 0
		gasto[i+2]= new Fila ("5-14",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+3]= new Fila ("15-44",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+4]= new Fila ("45-54",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+5]= new Fila ("55-64",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+6]= new Fila ("65-74",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+7]= new Fila ("Más de 75",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
		gasto[i+8]= new Fila ("Total",0,0,0,0,0,0,0,0,0,0,0,0,null,null);	
	}

	//tabla final de resultados
	gasto[102]= new Fila (" ","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017",null,null);
	gasto[103]= new Fila ("Hospitalaria",0,0,0,0,0,0,0,0,0,0,0,0,null,null); //se crean las filas y se incializan las columnas a 0
	gasto[104]= new Fila ("Farmacia",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[105]= new Fila ("Ambulatoria",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[106]= new Fila ("Prótesis y traslados",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[107]= new Fila ("Administración y salud pública",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[108]= new Fila ("Gasto de capital",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[109]= new Fila ("Transferencias",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[110]= new Fila ("Gasto sanitario público",0,0,0,0,0,0,0,0,0,0,0,0,null,null);	
	gasto[111]= new Fila ("Productos, aparatos y equipos médicos",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[112]= new Fila ("Servicios sanitarios",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[113]= new Fila ("Seguros privados",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[114]= new Fila ("Gasto sanitario privado",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[115]= new Fila ("Gasto sanitario total",0,0,0,0,0,0,0,0,0,0,0,0,null,null);

	//una vez inicializada todas las filas contenedoras de datos, nos centramos en las operaciones a implementar.
//Tabla Hospitalaria fila 3 a 10   X*B - fila 10 total
	for (var i=0; i<7; i++) { // filas de 3 a 9 - 10 total
		gasto[i+3].b= (base[54+i].b * base[44+i].b) / 1000;
		gasto[i+3].c= (base[54+i].c * base[44+i].b) / 1000;
		gasto[i+3].d= (base[54+i].d * base[44+i].b) / 1000;
		gasto[i+3].e= (base[54+i].e * base[44+i].b) / 1000;
		gasto[i+3].f= (base[54+i].f * base[44+i].b) / 1000;
		gasto[i+3].g= (base[54+i].g * base[44+i].b) / 1000;
		gasto[i+3].h= (base[54+i].h * base[44+i].b) / 1000;
		gasto[i+3].i= (base[54+i].i * base[44+i].b) / 1000;
		gasto[i+3].j= (base[54+i].j * base[44+i].b) / 1000;
		gasto[i+3].k= (base[54+i].k * base[44+i].b) / 1000;
		gasto[i+3].l= (base[54+i].l * base[44+i].b) / 1000;
		gasto[i+3].m= (base[54+i].m * base[44+i].b) / 1000;
		//Total de la tabla - fila 10
		gasto[10].b= gasto[10].b + gasto[i+3].b;
		gasto[10].c= gasto[10].c + gasto[i+3].c;
		gasto[10].d= gasto[10].d + gasto[i+3].d;
		gasto[10].e= gasto[10].e + gasto[i+3].e;
		gasto[10].f= gasto[10].f + gasto[i+3].f;
		gasto[10].g= gasto[10].g + gasto[i+3].g;
		gasto[10].h= gasto[10].h + gasto[i+3].h;
		gasto[10].i= gasto[10].i + gasto[i+3].i;
		gasto[10].j= gasto[10].j + gasto[i+3].j;
		gasto[10].k= gasto[10].k + gasto[i+3].k;
		gasto[10].l= gasto[10].l + gasto[i+3].l;
		gasto[10].m= gasto[10].m + gasto[i+3].m;
	}

	
//Tabla Farmacia fila 13 a 20   X*C - fila 20 total
	for (var i=0; i<7; i++) {
		gasto[i+13].b= (base[54+i].b * base[44+i].c) / 1000;
		gasto[i+13].c= (base[54+i].c * base[44+i].c) / 1000;
		gasto[i+13].d= (base[54+i].d * base[44+i].c) / 1000;
		gasto[i+13].e= (base[54+i].e * base[44+i].c) / 1000;
		gasto[i+13].f= (base[54+i].f * base[44+i].c) / 1000;
		gasto[i+13].g= (base[54+i].g * base[44+i].c) / 1000;
		gasto[i+13].h= (base[54+i].h * base[44+i].c) / 1000;
		gasto[i+13].i= (base[54+i].i * base[44+i].c) / 1000;
		gasto[i+13].j= (base[54+i].j * base[44+i].c) / 1000;
		gasto[i+13].k= (base[54+i].k * base[44+i].c) / 1000;
		gasto[i+13].l= (base[54+i].l * base[44+i].c) / 1000;
		gasto[i+13].m= (base[54+i].m * base[44+i].c) / 1000;
		//Total de la tabla - fila 20
		gasto[20].b= gasto[20].b + gasto[i+13].b;
		gasto[20].c= gasto[20].c + gasto[i+13].c;
		gasto[20].d= gasto[20].d + gasto[i+13].d;
		gasto[20].e= gasto[20].e + gasto[i+13].e;
		gasto[20].f= gasto[20].f + gasto[i+13].f;
		gasto[20].g= gasto[20].g + gasto[i+13].g;
		gasto[20].h= gasto[20].h + gasto[i+13].h;
		gasto[20].i= gasto[20].i + gasto[i+13].i;
		gasto[20].j= gasto[20].j + gasto[i+13].j;
		gasto[20].k= gasto[20].k + gasto[i+13].k;
		gasto[20].l= gasto[20].l + gasto[i+13].l;
		gasto[20].m= gasto[20].m + gasto[i+13].m;
	}
	
//Tabla Ambulatoria fila 23 a 30   X*D
	for (var i=0; i<7; i++) {
		gasto[i+23].b= (base[54+i].b * base[44+i].d) / 1000;
		gasto[i+23].c= (base[54+i].c * base[44+i].d) / 1000;
		gasto[i+23].d= (base[54+i].d * base[44+i].d) / 1000;
		gasto[i+23].e= (base[54+i].e * base[44+i].d) / 1000;
		gasto[i+23].f= (base[54+i].f * base[44+i].d) / 1000;
		gasto[i+23].g= (base[54+i].g * base[44+i].d) / 1000;
		gasto[i+23].h= (base[54+i].h * base[44+i].d) / 1000;
		gasto[i+23].i= (base[54+i].i * base[44+i].d) / 1000;
		gasto[i+23].j= (base[54+i].j * base[44+i].d) / 1000;
		gasto[i+23].k= (base[54+i].k * base[44+i].d) / 1000;
		gasto[i+23].l= (base[54+i].l * base[44+i].d) / 1000;
		gasto[i+23].m= (base[54+i].m * base[44+i].d) / 1000;
		//Total de la tabla - fila 30
		gasto[30].b= gasto[30].b + gasto[i+23].b;
		gasto[30].c= gasto[30].c + gasto[i+23].c;
		gasto[30].d= gasto[30].d + gasto[i+23].d;
		gasto[30].e= gasto[30].e + gasto[i+23].e;
		gasto[30].f= gasto[30].f + gasto[i+23].f;
		gasto[30].g= gasto[30].g + gasto[i+23].g;
		gasto[30].h= gasto[30].h + gasto[i+23].h;
		gasto[30].i= gasto[30].i + gasto[i+23].i;
		gasto[30].j= gasto[30].j + gasto[i+23].j;
		gasto[30].k= gasto[30].k + gasto[i+23].k;
		gasto[30].l= gasto[30].l + gasto[i+23].l;
		gasto[30].m= gasto[30].m + gasto[i+23].m;
	}
	
//Tabla Prótesis y traslados fila 33 a 40   X*E - fila 40 total
	for (var i=0; i<7; i++) {
		gasto[i+33].b= (base[54+i].b * base[44+i].e) / 1000;
		gasto[i+33].c= (base[54+i].c * base[44+i].e) / 1000;
		gasto[i+33].d= (base[54+i].d * base[44+i].e) / 1000;
		gasto[i+33].e= (base[54+i].e * base[44+i].e) / 1000;
		gasto[i+33].f= (base[54+i].f * base[44+i].e) / 1000;
		gasto[i+33].g= (base[54+i].g * base[44+i].e) / 1000;
		gasto[i+33].h= (base[54+i].h * base[44+i].e) / 1000;
		gasto[i+33].i= (base[54+i].i * base[44+i].e) / 1000;
		gasto[i+33].j= (base[54+i].j * base[44+i].e) / 1000;
		gasto[i+33].k= (base[54+i].k * base[44+i].e) / 1000;
		gasto[i+33].l= (base[54+i].l * base[44+i].e) / 1000;
		gasto[i+33].m= (base[54+i].m * base[44+i].e) / 1000;
		//Total de la tabla - fila 40
		gasto[40].b= gasto[40].b + gasto[i+33].b;
		gasto[40].c= gasto[40].c + gasto[i+33].c;
		gasto[40].d= gasto[40].d + gasto[i+33].d;
		gasto[40].e= gasto[40].e + gasto[i+33].e;
		gasto[40].f= gasto[40].f + gasto[i+33].f;
		gasto[40].g= gasto[40].g + gasto[i+33].g;
		gasto[40].h= gasto[40].h + gasto[i+33].h;
		gasto[40].i= gasto[40].i + gasto[i+33].i;
		gasto[40].j= gasto[40].j + gasto[i+33].j;
		gasto[40].k= gasto[40].k + gasto[i+33].k;
		gasto[40].l= gasto[40].l + gasto[i+33].l;
		gasto[40].m= gasto[40].m + gasto[i+33].m;
	}
	
//Tabla Administración y salud pública fila 43 a 50   X*F - fila 50 total
	for (var i=0; i<7; i++) {
		gasto[i+43].b= (base[54+i].b * base[44+i].f) / 1000;
		gasto[i+43].c= (base[54+i].c * base[44+i].f) / 1000;
		gasto[i+43].d= (base[54+i].d * base[44+i].f) / 1000;
		gasto[i+43].e= (base[54+i].e * base[44+i].f) / 1000;
		gasto[i+43].f= (base[54+i].f * base[44+i].f) / 1000;
		gasto[i+43].g= (base[54+i].g * base[44+i].f) / 1000;
		gasto[i+43].h= (base[54+i].h * base[44+i].f) / 1000;
		gasto[i+43].i= (base[54+i].i * base[44+i].f) / 1000;
		gasto[i+43].j= (base[54+i].j * base[44+i].f) / 1000;
		gasto[i+43].k= (base[54+i].k * base[44+i].f) / 1000;
		gasto[i+43].l= (base[54+i].l * base[44+i].f) / 1000;
		gasto[i+43].m= (base[54+i].m * base[44+i].f) / 1000;
		//Total de la tabla - fila 50
		gasto[50].b= gasto[50].b + gasto[i+43].b;
		gasto[50].c= gasto[50].c + gasto[i+43].c;
		gasto[50].d= gasto[50].d + gasto[i+43].d;
		gasto[50].e= gasto[50].e + gasto[i+43].e;
		gasto[50].f= gasto[50].f + gasto[i+43].f;
		gasto[50].g= gasto[50].g + gasto[i+43].g;
		gasto[50].h= gasto[50].h + gasto[i+43].h;
		gasto[50].i= gasto[50].i + gasto[i+43].i;
		gasto[50].j= gasto[50].j + gasto[i+43].j;
		gasto[50].k= gasto[50].k + gasto[i+43].k;
		gasto[50].l= gasto[50].l + gasto[i+43].l;
		gasto[50].m= gasto[50].m + gasto[i+43].m;
	}	
//Tabla Gasto de capital fila 53 a 60   X*G  El total no se halla como suma de las anteriores filas por ser 0
	for (var i=0; i<8; i++) {
		gasto[i+53].b= (base[54+i].b * base[44+i].g) / 1000;
		gasto[i+53].c= (base[54+i].c * base[44+i].g) / 1000;
		gasto[i+53].d= (base[54+i].d * base[44+i].g) / 1000;
		gasto[i+53].e= (base[54+i].e * base[44+i].g) / 1000;
		gasto[i+53].f= (base[54+i].f * base[44+i].g) / 1000;
		gasto[i+53].g= (base[54+i].g * base[44+i].g) / 1000;
		gasto[i+53].h= (base[54+i].h * base[44+i].g) / 1000;
		gasto[i+53].i= (base[54+i].i * base[44+i].g) / 1000;
		gasto[i+53].j= (base[54+i].j * base[44+i].g) / 1000;
		gasto[i+53].k= (base[54+i].k * base[44+i].g) / 1000;
		gasto[i+53].l= (base[54+i].l * base[44+i].g) / 1000;
		gasto[i+53].m= (base[54+i].m * base[44+i].g) / 1000;
	}
	
//Tabla Transferencias fila 63 a 70   X*H   El total no se halla como suma de las anteriores filas por ser 0
	for (var i=0; i<8; i++) {
		gasto[i+63].b= (base[54+i].b * base[44+i].h) / 1000;
		gasto[i+63].c= (base[54+i].c * base[44+i].h) / 1000;
		gasto[i+63].d= (base[54+i].d * base[44+i].h) / 1000;
		gasto[i+63].e= (base[54+i].e * base[44+i].h) / 1000;
		gasto[i+63].f= (base[54+i].f * base[44+i].h) / 1000;
		gasto[i+63].g= (base[54+i].g * base[44+i].h) / 1000;
		gasto[i+63].h= (base[54+i].h * base[44+i].h) / 1000;
		gasto[i+63].i= (base[54+i].i * base[44+i].h) / 1000;
		gasto[i+63].j= (base[54+i].j * base[44+i].h) / 1000;
		gasto[i+63].k= (base[54+i].k * base[44+i].h) / 1000;
		gasto[i+63].l= (base[54+i].l * base[44+i].h) / 1000;
		gasto[i+63].m= (base[54+i].m * base[44+i].h) / 1000;
	}
//Tabla Productos, aparatos y equipos médicos fila 74 a 81   X*I - total fila 81
	for (var i=0; i<7; i++) {
		gasto[i+74].b= (base[54+i].b * base[44+i].i) / 1000;
		gasto[i+74].c= (base[54+i].c * base[44+i].i) / 1000;
		gasto[i+74].d= (base[54+i].d * base[44+i].i) / 1000;
		gasto[i+74].e= (base[54+i].e * base[44+i].i) / 1000;
		gasto[i+74].f= (base[54+i].f * base[44+i].i) / 1000;
		gasto[i+74].g= (base[54+i].g * base[44+i].i) / 1000;
		gasto[i+74].h= (base[54+i].h * base[44+i].i) / 1000;
		gasto[i+74].i= (base[54+i].i * base[44+i].i) / 1000;
		gasto[i+74].j= (base[54+i].j * base[44+i].i) / 1000;
		gasto[i+74].k= (base[54+i].k * base[44+i].i) / 1000;
		gasto[i+74].l= (base[54+i].l * base[44+i].i) / 1000;
		gasto[i+74].m= (base[54+i].m * base[44+i].i) / 1000;
		//Total de la tabla - fila 81
		gasto[81].b= gasto[81].b + gasto[i+74].b;
		gasto[81].c= gasto[81].c + gasto[i+74].c;
		gasto[81].d= gasto[81].d + gasto[i+74].d;
		gasto[81].e= gasto[81].e + gasto[i+74].e;
		gasto[81].f= gasto[81].f + gasto[i+74].f;
		gasto[81].g= gasto[81].g + gasto[i+74].g;
		gasto[81].h= gasto[81].h + gasto[i+74].h;
		gasto[81].i= gasto[81].i + gasto[i+74].i;
		gasto[81].j= gasto[81].j + gasto[i+74].j;
		gasto[81].k= gasto[81].k + gasto[i+74].k;
		gasto[81].l= gasto[81].l + gasto[i+74].l;
		gasto[81].m= gasto[81].m + gasto[i+74].m;
	}
	
//Tabla Servicios sanitarios fila 84 a 91   X*J - total fila 91
	for (var i=0; i<7; i++) {
		gasto[i+84].b= (base[54+i].b * base[44+i].j) / 1000;
		gasto[i+84].c= (base[54+i].c * base[44+i].j) / 1000;
		gasto[i+84].d= (base[54+i].d * base[44+i].j) / 1000;
		gasto[i+84].e= (base[54+i].e * base[44+i].j) / 1000;
		gasto[i+84].f= (base[54+i].f * base[44+i].j) / 1000;
		gasto[i+84].g= (base[54+i].g * base[44+i].j) / 1000;
		gasto[i+84].h= (base[54+i].h * base[44+i].j) / 1000;
		gasto[i+84].i= (base[54+i].i * base[44+i].j) / 1000;
		gasto[i+84].j= (base[54+i].j * base[44+i].j) / 1000;
		gasto[i+84].k= (base[54+i].k * base[44+i].j) / 1000;
		gasto[i+84].l= (base[54+i].l * base[44+i].j) / 1000;
		gasto[i+84].m= (base[54+i].m * base[44+i].j) / 1000;
		//Total de la tabla - fila 91
		gasto[91].b= gasto[91].b + gasto[i+84].b;
		gasto[91].c= gasto[91].c + gasto[i+84].c;
		gasto[91].d= gasto[91].d + gasto[i+84].d;
		gasto[91].e= gasto[91].e + gasto[i+84].e;
		gasto[91].f= gasto[91].f + gasto[i+84].f;
		gasto[91].g= gasto[91].g + gasto[i+84].g;
		gasto[91].h= gasto[91].h + gasto[i+84].h;
		gasto[91].i= gasto[91].i + gasto[i+84].i;
		gasto[91].j= gasto[91].j + gasto[i+84].j;
		gasto[91].k= gasto[91].k + gasto[i+84].k;
		gasto[91].l= gasto[91].l + gasto[i+84].l;
		gasto[91].m= gasto[91].m + gasto[i+84].m;
	}
//Tabla Seguros privados fila 94 a 101   X*K - fila total 101
	for (var i=0; i<7; i++) {
		gasto[i+94].b= (base[54+i].b * base[44+i].k) / 1000;
		gasto[i+94].c= (base[54+i].c * base[44+i].k) / 1000;
		gasto[i+94].d= (base[54+i].d * base[44+i].k) / 1000;
		gasto[i+94].e= (base[54+i].e * base[44+i].k) / 1000;
		gasto[i+94].f= (base[54+i].f * base[44+i].k) / 1000;
		gasto[i+94].g= (base[54+i].g * base[44+i].k) / 1000;
		gasto[i+94].h= (base[54+i].h * base[44+i].k) / 1000;
		gasto[i+94].i= (base[54+i].i * base[44+i].k) / 1000;
		gasto[i+94].j= (base[54+i].j * base[44+i].k) / 1000;
		gasto[i+94].k= (base[54+i].k * base[44+i].k) / 1000;
		gasto[i+94].l= (base[54+i].l * base[44+i].k) / 1000;
		gasto[i+94].m= (base[54+i].m * base[44+i].k) / 1000;
		//Total de la tabla - fila 101
		gasto[101].b= gasto[101].b + gasto[i+94].b;
		gasto[101].c= gasto[101].c + gasto[i+94].c;
		gasto[101].d= gasto[101].d + gasto[i+94].d;
		gasto[101].e= gasto[101].e + gasto[i+94].e;
		gasto[101].f= gasto[101].f + gasto[i+94].f;
		gasto[101].g= gasto[101].g + gasto[i+94].g;
		gasto[101].h= gasto[101].h + gasto[i+94].h;
		gasto[101].i= gasto[101].i + gasto[i+94].i;
		gasto[101].j= gasto[101].j + gasto[i+94].j;
		gasto[101].k= gasto[101].k + gasto[i+94].k;
		gasto[101].l= gasto[101].l + gasto[i+94].l;
		gasto[101].m= gasto[101].m + gasto[i+94].m;
	}
	
	
//Tabla de gasto simulado
//fila 103 a 110
	var n=0;
	for (var i=103; i<110; i++) {
		gasto[i].b= gasto[10+n].b;
		gasto[i].c= gasto[10+n].c;
		gasto[i].d= gasto[10+n].d;
		gasto[i].e= gasto[10+n].e;
		gasto[i].f= gasto[10+n].f;
		gasto[i].g= gasto[10+n].g;
		gasto[i].h= gasto[10+n].h;
		gasto[i].i= gasto[10+n].i;
		gasto[i].j= gasto[10+n].j;
		gasto[i].k= gasto[10+n].k;
		gasto[i].l= gasto[10+n].l;
		gasto[i].m= gasto[10+n].m;
		n=n+10;
	}
	//fila 110
	for (var i=103; i<110; i++)  {
		gasto[110].b= gasto[110].b + gasto[i].b;
		gasto[110].c= gasto[110].c + gasto[i].c;
		gasto[110].d= gasto[110].d + gasto[i].d;
		gasto[110].e= gasto[110].e + gasto[i].e;
		gasto[110].f= gasto[110].f + gasto[i].f;
		gasto[110].g= gasto[110].g + gasto[i].g;
		gasto[110].h= gasto[110].h + gasto[i].h;
		gasto[110].i= gasto[110].i + gasto[i].i;
		gasto[110].j= gasto[110].j + gasto[i].j;
		gasto[110].k= gasto[110].k + gasto[i].k;
		gasto[110].l= gasto[110].l + gasto[i].l;
		gasto[110].m= gasto[110].m + gasto[i].m;
	}
	//fila 111 a 114
	n=0;
	for (var i=111; i<114; i++) {
		gasto[i].b= gasto[81+n].b;
		gasto[i].c= gasto[81+n].c;
		gasto[i].d= gasto[81+n].d;
		gasto[i].e= gasto[81+n].e;
		gasto[i].f= gasto[81+n].f;
		gasto[i].g= gasto[81+n].g;
		gasto[i].h= gasto[81+n].h;
		gasto[i].i= gasto[81+n].i;
		gasto[i].j= gasto[81+n].j;
		gasto[i].k= gasto[81+n].k;
		gasto[i].l= gasto[81+n].l;
		gasto[i].m= gasto[81+n].m;
		n=n+10;
	}
	//fila 114
	gasto[114].b= gasto[111].b + gasto[112].b + gasto[113].b;
	gasto[114].c= gasto[111].c + gasto[112].c + gasto[113].c;
	gasto[114].d= gasto[111].d + gasto[112].d + gasto[113].d;
	gasto[114].e= gasto[111].e + gasto[112].e + gasto[113].e;
	gasto[114].f= gasto[111].f + gasto[112].f + gasto[113].f;
	gasto[114].g= gasto[111].g + gasto[112].g + gasto[113].g;
	gasto[114].h= gasto[111].h + gasto[112].h + gasto[113].h;
	gasto[114].i= gasto[111].i + gasto[112].i + gasto[113].i;
	gasto[114].j= gasto[111].j + gasto[112].j + gasto[113].j;
	gasto[114].k= gasto[111].k + gasto[112].k + gasto[113].k;
	gasto[114].l= gasto[111].l + gasto[112].l + gasto[113].l;
	gasto[114].m= gasto[111].m + gasto[112].m + gasto[113].m;
	
	//fila 115
	gasto[115].b= gasto[114].b + gasto[110].b;
	gasto[115].c= gasto[114].c + gasto[110].c;
	gasto[115].d= gasto[114].d + gasto[110].d;
	gasto[115].e= gasto[114].e + gasto[110].e;
	gasto[115].f= gasto[114].f + gasto[110].f;
	gasto[115].g= gasto[114].g + gasto[110].g;
	gasto[115].h= gasto[114].h + gasto[110].h;
	gasto[115].i= gasto[114].i + gasto[110].i;
	gasto[115].j= gasto[114].j + gasto[110].j;
	gasto[115].k= gasto[114].k + gasto[110].k;
	gasto[115].l= gasto[114].l + gasto[110].l;
	gasto[115].m= gasto[114].m + gasto[110].m;
	
	return gasto;
}



/*************************************** reconfigurar_escenario_a_acumulado() ***********************/
//23A .- Llamado desde obtener_simulacion()
// reconfigurar_escenario_a_acumulado (escenario_base) --> dado el escenario de simulación, se reconfigura el escenario para hallar
//                                                                                                  --> la previsión con la tasa acumulable anual
//                                                                                                  --> se corresponde con los cálculos de la hoja EXCEL correspondientes 
/*****************************************************************************************/
function reconfigurar_escenario_a_acumulado(base) {
	var nuevo= new Array();
	//Se generan todas las filas del nuevo escenario
	for (var i=1; i<329; i++) {
		nuevo[i]= new Fila (null,null,null,null,null,null,null,null,null,null,null,null,null,null,null);
	}
	//se copia el escenario inicial en la nueva variable
	for (var i=1; i<16; i++) {
		nuevo[i]= base[i];
	}

	//inicializamos las constantes. Solo ponemos los literales finales que vamos a copiar en previsión.
	nuevo[32].c="2005";
	nuevo[32].d="2006";
	nuevo[32].e="2007";
	nuevo[32].f="2008";
	nuevo[32].g="2009";
	nuevo[32].h="2010";
	nuevo[32].i="2011";
	nuevo[32].j="2012";
	nuevo[32].k="2013";
	nuevo[32].l="2014";
	nuevo[32].m="2015";
	nuevo[32].n="2016";
	nuevo[32].o="2017";

	nuevo[33].b="Gasto sanitario público";
	nuevo[34].b="Hospitalaria";
	nuevo[35].b="Farmacia";
	nuevo[36].b="Ambulatoria";
	nuevo[37].b="Prótesis y traslados";
	nuevo[38].b="Administración y salud pública";
	nuevo[39].b="Gasto de capital";
	nuevo[40].b="Transferencias";
	nuevo[41].b="Productos, aparatos y equipos médicos";
	nuevo[42].b="Servicios sanitarios";
	nuevo[43].b="Seguros privados";
	nuevo[44].b="Gasto sanitario privado";
	nuevo[45].b="Gasto sanitario total";

	//empezamos a copiar valores ya calculados a la nueva configuración de escenario
	//hospitalaria
	for (var i=0; i<8; i++) {
		nuevo[49+i].b= base[17+i].b;
	}
	//farmacia
	for (var i=0; i<8; i++) {
		nuevo[58+i].b= base[17+i].c;
	}
	//ambulatoria
	for (var i=0; i<8; i++) {
		nuevo[67+i].b= base[17+i].d;
	}
	//protesis y traslados
	for (var i=0; i<8; i++) {
		nuevo[76+i].b= base[17+i].e;
	}
	//administracion y salud pública
	for (var i=0; i<8; i++) {
		nuevo[85+i].b= base[17+i].f;
	}
	//gasto de capital
	for (var i=0; i<8; i++) {
		nuevo[94+i].b= base[17+i].g;
	}
	//trasferencias
	for (var i=0; i<8; i++) {
		nuevo[103+i].b= base[17+i].h;
	}
	//productos, aparatos y equipos
	for (var i=0; i<8; i++) {
		nuevo[112+i].b= base[17+i].i;
	}
	//servicios sanitarios
	for (var i=0; i<8; i++) {
		nuevo[121+i].b= base[17+i].j;
	}
	//seguros privados
	for (var i=0; i<8; i++) {
		nuevo[130+i].b= base[17+i].k;
	}

	//movemos la población
	//2005
	for (var i=0; i<8; i++) {
		nuevo[139+i].c= base[35+i].b;
	}
	//2006 a 2017
	for (var i=0; i<8; i++) {
		nuevo[139+i].d= base[54+i].b;	//2006	
		nuevo[139+i].e= base[54+i].c;	//2007
		nuevo[139+i].f= base[54+i].d;	//2008
		nuevo[139+i].g= base[54+i].e;	//2009
		nuevo[139+i].h= base[54+i].f;	//2010
		nuevo[139+i].i= base[54+i].g;	//2011
		nuevo[139+i].j= base[54+i].h;	//2012
		nuevo[139+i].k= base[54+i].i;	//2013
		nuevo[139+i].l= base[54+i].j;	//2014
		nuevo[139+i].m= base[54+i].k;	//2015
		nuevo[139+i].n= base[54+i].l;	//2016
		nuevo[139+i].o= base[54+i].m;	//2017
	}
	//copiamos el valor del escenario incial para comenzar con el acumulado.
	for (var i=0; i<8; i++) {
		nuevo[17+i].c= base[2+i].b;
	}
	for (var i=0; i<5; i++) {
		nuevo[25+i].c= base[11+i].b;
	}

	return nuevo;
}

/*************************************** calcular_prevision_gasto_acumulado () ***********************/
//23B .- Llamado desde obtener_simulacion()
// calcular_prevision_gasto_acumulado (escenario_base) --> dado el escenario de simulación, se halla la previsión del gasto con tasa anual acumulable
//                                                                                              --> modifica las variables que se le pasa por parámetro
//                                                                                              --> corresponde con los cálculos de la hoja EXCEL correspondientes
/*****************************************************************************************/
function calcular_prevision_gasto_acumulado(base) {
	var gasto = new Array();

	//1.-calcular la simulación sobre la hoja del escenario base
	// son cinco pasos repetitivos aplicable a cada uno de los años
	
	//2005----------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].c= base[17+i].c * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].c= base[25+i].c * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].c= base[34].c * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].c= base[35].c * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].c= base[36].c * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].c= base[37].c * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].c= base[38].c * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].c= base[39].c * base[i].b;}
	for (var i=103; i<111; i++) {base[i].c= base[40].c * base[i].b;}
	for (var i=112; i<120; i++) {base[i].c= base[41].c * base[i].b;}
	for (var i=121; i<129; i++) {base[i].c= base[42].c * base[i].b;}
	for (var i=130; i<138; i++) {base[i].c= base[43].c * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].c= (base[j+i].c / base[139+i].c) * 1000;}
	}

/*	for (var i=0; i<8; i++) {base[149+i].c= (base[49+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[158+i].c= (base[58+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[167+i].c= (base[67+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[176+i].c= (base[76+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[185+i].c= (base[85+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[194+i].c= (base[94+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[203+i].c= (base[103+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[212+i].c= (base[112+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[221+i].c= (base[121+i].c / base[139+i].c) * 1000;}
	for (var i=0; i<8; i++) {base[230+i].c= (base[130+i].c / base[139+i].c) * 1000;}
*/	

		//paso d
	for (var i=0; i<7; i++) { base[240+i].d= (base[139+i].d * base[149+i].c) /1000;}
	base[247].d=0; for (var i=240; i<247; i++) { base[247].d= base[247].d + base[i].d; }
	for (var i=0; i<7; i++) { base[249+i].d= (base[139+i].d * base[158+i].c) /1000;}
	base[256].d=0; for (var i=249; i<256; i++) { base[256].d= base[256].d + base[i].d; }
	for (var i=0; i<7; i++) { base[258+i].d= (base[139+i].d * base[167+i].c) /1000;}
	base[265].d=0; for (var i=258; i<265; i++) { base[265].d= base[265].d + base[i].d; }
	for (var i=0; i<7; i++) { base[267+i].d= (base[139+i].d * base[176+i].c) /1000;}
	base[274].d=0; for (var i=267; i<274; i++) { base[274].d= base[274].d + base[i].d; }
	for (var i=0; i<7; i++) { base[276+i].d= (base[139+i].d * base[185+i].c) /1000;}
	base[283].d=0; for (var i=276; i<283; i++) { base[283].d= base[283].d + base[i].d; }
	//for (var i=0; i<8; i++) { base[285+i].d= (base[139+i].d * base[194+i].c) /1000;}
	base[292].d=(base[146].d * base[201].c) /1000;
	for (var i=0; i<8; i++) { base[294+i].d= (base[139+i].d * base[203+i].c) /1000;}
	for (var i=0; i<7; i++) { base[303+i].d= (base[139+i].d * base[212+i].c) /1000;}
	base[310].d=0; for (var i=303; i<310; i++) { base[310].d= base[310].d + base[i].d; }
	for (var i=0; i<7; i++) { base[312+i].d= (base[139+i].d * base[221+i].c) /1000;}
	base[319].d=0; for (var i=312; i<319; i++) { base[319].d= base[319].d + base[i].d; }
	for (var i=0; i<7; i++) { base[321+i].d= (base[139+i].d * base[230+i].c) /1000;}
	base[328].d=0; for (var i=321; i<328; i++) { base[328].d= base[328].d + base[i].d; }
	
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].d= base[j].d; j=j+9;}
	base[17].d=0;
	for (var i=18; i<25; i++) { base[17].d= base[17].d + base[i].d;}
	base[28].d= base[25].d + base[26].d + base[27].d;
	base[29].d= base[17].d + base[28].d;
	
	//2006--------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].d= base[17+i].d * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].d= base[25+i].d * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].d= base[34].d * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].d= base[35].d * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].d= base[36].d * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].d= base[37].d * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].d= base[38].d * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].d= base[39].d * base[i].b;}
	for (var i=103; i<111; i++) {base[i].d= base[40].d * base[i].b;}
	for (var i=112; i<120; i++) {base[i].d= base[41].d * base[i].b;}
	for (var i=121; i<129; i++) {base[i].d= base[42].d * base[i].b;}
	for (var i=130; i<138; i++) {base[i].d= base[43].d * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].d= (base[j+i].d / base[139+i].d) * 1000;}
	}
/*	for (var i=0; i<8; i++) {base[149+i].d= (base[49+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[158+i].d= (base[58+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[167+i].d= (base[67+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[176+i].d= (base[76+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[185+i].d= (base[85+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[194+i].d= (base[94+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[203+i].d= (base[103+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[212+i].d= (base[112+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[221+i].d= (base[121+i].d / base[139+i].d) * 1000;}
	for (var i=0; i<8; i++) {base[230+i].d= (base[130+i].d / base[139+i].d) * 1000;}
*/		//paso d
	for (var i=0; i<7; i++) { base[240+i].e= (base[139+i].e * base[149+i].d) /1000;}
	base[247].e=0;
	for (var i=240; i<247; i++) { base[247].e= base[247].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[249+i].e= (base[139+i].e * base[158+i].d) /1000;}
	base[256].e=0;
	for (var i=249; i<256; i++) { base[256].e= base[256].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[258+i].e= (base[139+i].e * base[167+i].d) /1000;}
	base[265].e=0;
	for (var i=258; i<265; i++) { base[265].e= base[265].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[267+i].e= (base[139+i].e * base[176+i].d) /1000;}
	base[274].e=0;
	for (var i=267; i<274; i++) { base[274].e= base[274].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[276+i].e= (base[139+i].e * base[185+i].d) /1000;}
	base[283].e=0;
	for (var i=276; i<283; i++) { base[283].e= base[283].e + base[i].e; }

	for (var i=0; i<8; i++) { base[285+i].e= (base[139+i].e * base[194+i].d) /1000;}
		
	for (var i=0; i<8; i++) { base[294+i].e= (base[139+i].e * base[203+i].d) /1000;}
		
	for (var i=0; i<7; i++) { base[303+i].e= (base[139+i].e * base[212+i].d) /1000;}
	base[310].e=0;
	for (var i=303; i<310; i++) { base[310].e= base[310].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[312+i].e= (base[139+i].e * base[221+i].d) /1000;}
	base[319].e=0;
	for (var i=312; i<319; i++) { base[319].e= base[319].e + base[i].e; }
	
	for (var i=0; i<7; i++) { base[321+i].e= (base[139+i].e * base[230+i].d) /1000;}
	base[328].e=0;
	for (var i=321; i<328; i++) { base[328].e= base[328].e + base[i].e; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].e= base[j].e; j=j+9;}
	base[17].e=0;
	for (var i=18; i<25; i++) { base[17].e= base[17].e + base[i].e;}
	base[28].e= base[25].e + base[26].e + base[27].e;
	base[29].e= base[17].e + base[28].e;	
	
	//2007-----------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].e= base[17+i].e * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].e= base[25+i].e * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].e= base[34].e * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].e= base[35].e * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].e= base[36].e * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].e= base[37].e * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].e= base[38].e * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].e= base[39].e * base[i].b;}
	for (var i=103; i<111; i++) {base[i].e= base[40].e * base[i].b;}
	for (var i=112; i<120; i++) {base[i].e= base[41].e * base[i].b;}
	for (var i=121; i<129; i++) {base[i].e= base[42].e * base[i].b;}
	for (var i=130; i<138; i++) {base[i].e= base[43].e * base[i].b;}//paso b
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].e= (base[j+i].e / base[139+i].e) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].f= (base[139+i].f * base[149+i].e) /1000;}
	base[247].f=0;
	for (var i=240; i<247; i++) { base[247].f= base[247].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[249+i].f= (base[139+i].f * base[158+i].e) /1000;}
	base[256].f=0;
	for (var i=249; i<256; i++) { base[256].f= base[256].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[258+i].f= (base[139+i].f * base[167+i].e) /1000;}
	base[265].f=0;
	for (var i=258; i<265; i++) { base[265].f= base[265].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[267+i].f= (base[139+i].f * base[176+i].e) /1000;}
	base[274].f=0;
	for (var i=267; i<274; i++) { base[274].f= base[274].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[276+i].f= (base[139+i].f * base[185+i].e) /1000;}
	base[283].f=0;
	for (var i=276; i<283; i++) { base[283].f= base[283].f + base[i].f; }

	for (var i=0; i<8; i++) { base[285+i].f= (base[139+i].f * base[194+i].e) /1000;}
		
	for (var i=0; i<8; i++) { base[294+i].f= (base[139+i].f * base[203+i].e) /1000;}
		
	for (var i=0; i<7; i++) { base[303+i].f= (base[139+i].f * base[212+i].e) /1000;}
	base[310].f=0;
	for (var i=303; i<310; i++) { base[310].f= base[310].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[312+i].f= (base[139+i].f * base[221+i].e) /1000;}
	base[319].f=0;
	for (var i=312; i<319; i++) { base[319].f= base[319].f + base[i].f; }
	
	for (var i=0; i<7; i++) { base[321+i].f= (base[139+i].f * base[230+i].e) /1000;}
	base[328].f=0;
	for (var i=321; i<328; i++) { base[328].f= base[328].f + base[i].f; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].f= base[j].f; j=j+9;}
	base[17].f=0;
	for (var i=18; i<25; i++) { base[17].f= base[17].f + base[i].f;}
	base[28].f= base[25].f + base[26].f + base[27].f;
	base[29].f= base[17].f + base[28].f;	
	
	//2008----------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].f= base[17+i].f * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].f= base[25+i].f * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].f= base[34].f * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].f= base[35].f * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].f= base[36].f * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].f= base[37].f * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].f= base[38].f * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].f= base[39].f * base[i].b;}
	for (var i=103; i<111; i++) {base[i].f= base[40].f * base[i].b;}
	for (var i=112; i<120; i++) {base[i].f= base[41].f * base[i].b;}
	for (var i=121; i<129; i++) {base[i].f= base[42].f * base[i].b;}
	for (var i=130; i<138; i++) {base[i].f= base[43].f * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].f= (base[j+i].f / base[139+i].f) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].g= (base[139+i].g * base[149+i].f) /1000;}
	base[247].g=0;
	for (var i=240; i<247; i++) { base[247].g= base[247].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[249+i].g= (base[139+i].g * base[158+i].f) /1000;}
	base[256].g=0;
	for (var i=249; i<256; i++) { base[256].g= base[256].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[258+i].g= (base[139+i].g * base[167+i].f) /1000;}
	base[265].g=0;
	for (var i=258; i<265; i++) { base[265].g= base[265].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[267+i].g= (base[139+i].g * base[176+i].f) /1000;}
	base[274].g=0;
	for (var i=267; i<274; i++) { base[274].g= base[274].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[276+i].g= (base[139+i].g * base[185+i].f) /1000;}
	base[283].g=0;
	for (var i=276; i<283; i++) { base[283].g= base[283].g + base[i].g; }

	for (var i=0; i<8; i++) { base[285+i].g= (base[139+i].g * base[194+i].f) /1000;}
		
	for (var i=0; i<8; i++) { base[294+i].g= (base[139+i].g * base[203+i].f) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].g= (base[139+i].g * base[212+i].f) /1000;}
	base[310].g=0;
	for (var i=303; i<310; i++) { base[310].g= base[310].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[312+i].g= (base[139+i].g * base[221+i].f) /1000;}
	base[319].g=0;
	for (var i=312; i<319; i++) { base[319].g= base[319].g + base[i].g; }
	
	for (var i=0; i<7; i++) { base[321+i].g= (base[139+i].g * base[230+i].f) /1000;}
	base[328].g=0;
	for (var i=321; i<328; i++) { base[328].g= base[328].g + base[i].g; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].g= base[j].g; j=j+9;}
	base[17].g=0;
	for (var i=18; i<25; i++) { base[17].g= base[17].g + base[i].g;}
	base[28].g= base[25].g + base[26].g + base[27].g;
	base[29].g= base[17].g + base[28].g;	
	
	//2009--------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].g= base[17+i].g * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].g= base[25+i].g * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].g= base[34].g * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].g= base[35].g * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].g= base[36].g * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].g= base[37].g * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].g= base[38].g * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].g= base[39].g * base[i].b;}
	for (var i=103; i<111; i++) {base[i].g= base[40].g * base[i].b;}
	for (var i=112; i<120; i++) {base[i].g= base[41].g * base[i].b;}
	for (var i=121; i<129; i++) {base[i].g= base[42].g * base[i].b;}
	for (var i=130; i<138; i++) {base[i].g= base[43].g * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].g= (base[j+i].g / base[139+i].g) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].h= (base[139+i].h * base[149+i].g) /1000;}
	base[247].h=0;
	for (var i=240; i<247; i++) { base[247].h= base[247].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[249+i].h= (base[139+i].h * base[158+i].g) /1000;}
	base[256].h=0;
	for (var i=249; i<256; i++) { base[256].h= base[256].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[258+i].h= (base[139+i].h * base[167+i].g) /1000;}
	base[265].h=0;
	for (var i=258; i<265; i++) { base[265].h= base[265].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[267+i].h= (base[139+i].h * base[176+i].g) /1000;}
	base[274].h=0;
	for (var i=267; i<274; i++) { base[274].h= base[274].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[276+i].h= (base[139+i].h * base[185+i].g) /1000;}
	base[283].h=0;
	for (var i=276; i<283; i++) { base[283].h= base[283].h + base[i].h; }

	for (var i=0; i<8; i++) { base[285+i].h= (base[139+i].h * base[194+i].g) /1000;}
		
	for (var i=0; i<8; i++) { base[294+i].h= (base[139+i].h * base[203+i].g) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].h= (base[139+i].h * base[212+i].g) /1000;}
	base[310].h=0;
	for (var i=303; i<310; i++) { base[310].h= base[310].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[312+i].h= (base[139+i].h * base[221+i].g) /1000;}
	base[319].h=0;
	for (var i=312; i<319; i++) { base[319].h= base[319].h + base[i].h; }
	
	for (var i=0; i<7; i++) { base[321+i].h= (base[139+i].h * base[230+i].g) /1000;}
	base[328].h=0;
	for (var i=321; i<328; i++) { base[328].h= base[328].h + base[i].h; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].h= base[j].h; j=j+9;}
	base[17].h=0;
	for (var i=18; i<25; i++) { base[17].h= base[17].h + base[i].h;}
	base[28].h= base[25].h + base[26].h + base[27].h;
	base[29].h= base[17].h + base[28].h;		
		
	//2010-------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].h= base[17+i].h * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].h= base[25+i].h * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].h= base[34].h * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].h= base[35].h * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].h= base[36].h * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].h= base[37].h * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].h= base[38].h * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].h= base[39].h * base[i].b;}
	for (var i=103; i<111; i++) {base[i].h= base[40].h * base[i].b;}
	for (var i=112; i<120; i++) {base[i].h= base[41].h * base[i].b;}
	for (var i=121; i<129; i++) {base[i].h= base[42].h * base[i].b;}
	for (var i=130; i<138; i++) {base[i].h= base[43].h * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].h= (base[j+i].h / base[139+i].h) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].i= (base[139+i].i * base[149+i].h) /1000;}
	base[247].i=0;
	for (var i=240; i<247; i++) { base[247].i= base[247].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[249+i].i= (base[139+i].i * base[158+i].h) /1000;}
	base[256].i=0;
	for (var i=249; i<256; i++) { base[256].i= base[256].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[258+i].i= (base[139+i].i * base[167+i].h) /1000;}
	base[265].i=0;
	for (var i=258; i<265; i++) { base[265].i= base[265].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[267+i].i= (base[139+i].i * base[176+i].h) /1000;}
	base[274].i=0;
	for (var i=267; i<274; i++) { base[274].i= base[274].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[276+i].i= (base[139+i].i * base[185+i].h) /1000;}
	base[283].i=0;
	for (var i=276; i<283; i++) { base[283].i= base[283].i + base[i].i; }

	for (var i=0; i<8; i++) { base[285+i].i= (base[139+i].i * base[194+i].h) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].i= (base[139+i].i * base[203+i].h) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].i= (base[139+i].i * base[212+i].h) /1000;}
	base[310].i=0;
	for (var i=303; i<310; i++) { base[310].i= base[310].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[312+i].i= (base[139+i].i * base[221+i].h) /1000;}
	base[319].i=0;
	for (var i=312; i<319; i++) { base[319].i= base[319].i + base[i].i; }
	
	for (var i=0; i<7; i++) { base[321+i].i= (base[139+i].i * base[230+i].h) /1000;}
	base[328].i=0;
	for (var i=321; i<328; i++) { base[328].i= base[328].i + base[i].i; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].i= base[j].i; j=j+9;}
	base[17].i=0;
	for (var i=18; i<25; i++) { base[17].i= base[17].i + base[i].i;}
	base[28].i= base[25].i + base[26].i + base[27].i;
	base[29].i= base[17].i + base[28].i;		
			
	//2011-------------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].i= base[17+i].i * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].i= base[25+i].i * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].i= base[34].i * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].i= base[35].i * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].i= base[36].i * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].i= base[37].i * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].i= base[38].i * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].i= base[39].i * base[i].b;}
	for (var i=103; i<111; i++) {base[i].i= base[40].i * base[i].b;}
	for (var i=112; i<120; i++) {base[i].i= base[41].i * base[i].b;}
	for (var i=121; i<129; i++) {base[i].i= base[42].i * base[i].b;}
	for (var i=130; i<138; i++) {base[i].i= base[43].i * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].i= (base[j+i].i / base[139+i].i) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].j= (base[139+i].j * base[149+i].i) /1000;}
	base[247].j=0;
	for (var i=240; i<247; i++) { base[247].j= base[247].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[249+i].j= (base[139+i].j * base[158+i].i) /1000;}
	base[256].j=0;
	for (var i=249; i<256; i++) { base[256].j= base[256].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[258+i].j= (base[139+i].j * base[167+i].i) /1000;}
	base[265].j=0;
	for (var i=258; i<265; i++) { base[265].j= base[265].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[267+i].j= (base[139+i].j * base[176+i].i) /1000;}
	base[274].j=0;
	for (var i=267; i<274; i++) { base[274].j= base[274].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[276+i].j= (base[139+i].j * base[185+i].i) /1000;}
	base[283].j=0;
	for (var i=276; i<283; i++) { base[283].j= base[283].j + base[i].j; }

	for (var i=0; i<8; i++) { base[285+i].j= (base[139+i].j * base[194+i].i) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].j= (base[139+i].j * base[203+i].i) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].j= (base[139+i].j * base[212+i].i) /1000;}
	base[310].j=0;
	for (var i=303; i<310; i++) { base[310].j= base[310].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[312+i].j= (base[139+i].j * base[221+i].i) /1000;}
	base[319].j=0;
	for (var i=312; i<319; i++) { base[319].j= base[319].j + base[i].j; }
	
	for (var i=0; i<7; i++) { base[321+i].j= (base[139+i].j * base[230+i].i) /1000;}
	base[328].j=0;
	for (var i=321; i<328; i++) { base[328].j= base[328].j + base[i].j; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].j= base[j].j; j=j+9;}
	base[17].j=0;
	for (var i=18; i<25; i++) { base[17].j= base[17].j + base[i].j;}
	base[28].j= base[25].j + base[26].j + base[27].j;
	base[29].j= base[17].j + base[28].j;		
			
	//2012----------------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].j= base[17+i].j * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].j= base[25+i].j * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].j= base[34].j * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].j= base[35].j * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].j= base[36].j * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].j= base[37].j * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].j= base[38].j * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].j= base[39].j * base[i].b;}
	for (var i=103; i<111; i++) {base[i].j= base[40].j * base[i].b;}
	for (var i=112; i<120; i++) {base[i].j= base[41].j * base[i].b;}
	for (var i=121; i<129; i++) {base[i].j= base[42].j * base[i].b;}
	for (var i=130; i<138; i++) {base[i].j= base[43].j * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].j= (base[j+i].j / base[139+i].j) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].k= (base[139+i].k * base[149+i].j) /1000;}
	base[247].k=0;
	for (var i=240; i<247; i++) { base[247].k= base[247].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[249+i].k= (base[139+i].k * base[158+i].j) /1000;}
	base[256].k=0;
	for (var i=249; i<256; i++) { base[256].k= base[256].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[258+i].k= (base[139+i].k * base[167+i].j) /1000;}
	base[265].k=0;
	for (var i=258; i<265; i++) { base[265].k= base[265].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[267+i].k= (base[139+i].k * base[176+i].j) /1000;}
	base[274].k=0;
	for (var i=267; i<274; i++) { base[274].k= base[274].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[276+i].k= (base[139+i].k * base[185+i].j) /1000;}
	base[283].k=0;
	for (var i=276; i<283; i++) { base[283].k= base[283].k + base[i].k; }

	for (var i=0; i<8; i++) { base[285+i].k= (base[139+i].k * base[194+i].j) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].k= (base[139+i].k * base[203+i].j) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].k= (base[139+i].k * base[212+i].j) /1000;}
	base[310].k=0;
	for (var i=303; i<310; i++) { base[310].k= base[310].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[312+i].k= (base[139+i].k * base[221+i].j) /1000;}
	base[319].k=0;
	for (var i=312; i<319; i++) { base[319].k= base[319].k + base[i].k; }
	
	for (var i=0; i<7; i++) { base[321+i].k= (base[139+i].k * base[230+i].j) /1000;}
	base[328].k=0;
	for (var i=321; i<328; i++) { base[328].k= base[328].k + base[i].k; }	
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].k= base[j].k; j=j+9;}
	base[17].k=0;
	for (var i=18; i<25; i++) { base[17].k= base[17].k + base[i].k;}
	base[28].k= base[25].k + base[26].k + base[27].k;
	base[29].k= base[17].k + base[28].k;		
			
	//2013--------------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].k= base[17+i].k * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].k= base[25+i].k * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].k= base[34].k * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].k= base[35].k * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].k= base[36].k * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].k= base[37].k * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].k= base[38].k * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].k= base[39].k * base[i].b;}
	for (var i=103; i<111; i++) {base[i].k= base[40].k * base[i].b;}
	for (var i=112; i<120; i++) {base[i].k= base[41].k * base[i].b;}
	for (var i=121; i<129; i++) {base[i].k= base[42].k * base[i].b;}
	for (var i=130; i<138; i++) {base[i].k= base[43].k * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].k= (base[j+i].k / base[139+i].k) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].l= (base[139+i].l * base[149+i].k) /1000;}
	base[247].l=0;
	for (var i=240; i<247; i++) { base[247].l= base[247].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[249+i].l= (base[139+i].l * base[158+i].k) /1000;}
	base[256].l=0;
	for (var i=249; i<256; i++) { base[256].l= base[256].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[258+i].l= (base[139+i].l * base[167+i].k) /1000;}
	base[265].l=0;
	for (var i=258; i<265; i++) { base[265].l= base[265].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[267+i].l= (base[139+i].l * base[176+i].k) /1000;}
	base[274].l=0;
	for (var i=267; i<274; i++) { base[274].l= base[274].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[276+i].l= (base[139+i].l * base[185+i].k) /1000;}
	base[283].l=0;
	for (var i=276; i<283; i++) { base[283].l= base[283].l + base[i].l; }

	for (var i=0; i<8; i++) { base[285+i].l= (base[139+i].l * base[194+i].k) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].l= (base[139+i].l * base[203+i].k) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].l= (base[139+i].l * base[212+i].k) /1000;}
	base[310].l=0;
	for (var i=303; i<310; i++) { base[310].l= base[310].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[312+i].l= (base[139+i].l * base[221+i].k) /1000;}
	base[319].l=0;
	for (var i=312; i<319; i++) { base[319].l= base[319].l + base[i].l; }
	
	for (var i=0; i<7; i++) { base[321+i].l= (base[139+i].l * base[230+i].k) /1000;}
	base[328].l=0;
	for (var i=321; i<328; i++) { base[328].l= base[328].l + base[i].l; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].l= base[j].l; j=j+9;}
	base[17].l=0;
	for (var i=18; i<25; i++) { base[17].l= base[17].l + base[i].l;}
	base[28].l= base[25].l + base[26].l + base[27].l;
	base[29].l= base[17].l + base[28].l;		
		
	//2014---------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].l= base[17+i].l * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].l= base[25+i].l * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].l= base[34].l * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].l= base[35].l * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].l= base[36].l * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].l= base[37].l * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].l= base[38].l * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].l= base[39].l * base[i].b;}
	for (var i=103; i<111; i++) {base[i].l= base[40].l * base[i].b;}
	for (var i=112; i<120; i++) {base[i].l= base[41].l * base[i].b;}
	for (var i=121; i<129; i++) {base[i].l= base[42].l * base[i].b;}
	for (var i=130; i<138; i++) {base[i].l= base[43].l * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].l= (base[j+i].l / base[139+i].l) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].m= (base[139+i].m * base[149+i].l) /1000;}
	base[247].m=0;
	for (var i=240; i<247; i++) { base[247].m= base[247].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[249+i].m= (base[139+i].m * base[158+i].l) /1000;}
	base[256].m=0;
	for (var i=249; i<256; i++) { base[256].m= base[256].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[258+i].m= (base[139+i].m * base[167+i].l) /1000;}
	base[265].m=0;
	for (var i=258; i<265; i++) { base[265].m= base[265].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[267+i].m= (base[139+i].m * base[176+i].l) /1000;}
	base[274].m=0;
	for (var i=267; i<274; i++) { base[274].m= base[274].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[276+i].m= (base[139+i].m * base[185+i].l) /1000;}
	base[283].m=0;
	for (var i=276; i<283; i++) { base[283].m= base[283].m + base[i].m; }

	for (var i=0; i<8; i++) { base[285+i].m= (base[139+i].m * base[194+i].l) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].m= (base[139+i].m * base[203+i].l) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].m= (base[139+i].m * base[212+i].l) /1000;}
	base[310].m=0;
	for (var i=303; i<310; i++) { base[310].m= base[310].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[312+i].m= (base[139+i].m * base[221+i].l) /1000;}
	base[319].m=0;
	for (var i=312; i<319; i++) { base[319].m= base[319].m + base[i].m; }
	
	for (var i=0; i<7; i++) { base[321+i].m= (base[139+i].m * base[230+i].l) /1000;}
	base[328].m=0;
	for (var i=321; i<328; i++) { base[328].m= base[328].m + base[i].m; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].m= base[j].m; j=j+9;}
	base[17].m=0;
	for (var i=18; i<25; i++) { base[17].m= base[17].m + base[i].m;}
	base[28].m= base[25].m + base[26].m + base[27].m;
	base[29].m= base[17].m + base[28].m;		
		
	//2015--------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].m= base[17+i].m * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].m= base[25+i].m * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].m= base[34].m * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].m= base[35].m * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].m= base[36].m * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].m= base[37].m * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].m= base[38].m * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].m= base[39].m * base[i].b;}
	for (var i=103; i<111; i++) {base[i].m= base[40].m * base[i].b;}
	for (var i=112; i<120; i++) {base[i].m= base[41].m * base[i].b;}
	for (var i=121; i<129; i++) {base[i].m= base[42].m * base[i].b;}
	for (var i=130; i<138; i++) {base[i].m= base[43].m * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].m= (base[j+i].m / base[139+i].m) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].n= (base[139+i].n * base[149+i].m) /1000;}
	base[247].n=0;
	for (var i=240; i<247; i++) { base[247].n= base[247].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[249+i].n= (base[139+i].n * base[158+i].m) /1000;}
	base[256].n=0;
	for (var i=249; i<256; i++) { base[256].n= base[256].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[258+i].n= (base[139+i].n * base[167+i].m) /1000;}
	base[265].n=0;
	for (var i=258; i<265; i++) { base[265].n= base[265].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[267+i].n= (base[139+i].n * base[176+i].m) /1000;}
	base[274].n=0;
	for (var i=267; i<274; i++) { base[274].n= base[274].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[276+i].n= (base[139+i].n * base[185+i].m) /1000;}
	base[283].n=0;
	for (var i=276; i<283; i++) { base[283].n= base[283].n + base[i].n; }

	for (var i=0; i<8; i++) { base[285+i].n= (base[139+i].n * base[194+i].m) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].n= (base[139+i].n * base[203+i].m) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].n= (base[139+i].n * base[212+i].m) /1000;}
	base[310].n=0;
	for (var i=303; i<310; i++) { base[310].n= base[310].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[312+i].n= (base[139+i].n * base[221+i].m) /1000;}
	base[319].n=0;
	for (var i=312; i<319; i++) { base[319].n= base[319].n + base[i].n; }
	
	for (var i=0; i<7; i++) { base[321+i].n= (base[139+i].n * base[230+i].m) /1000;}
	base[328].n=0;
	for (var i=321; i<328; i++) { base[328].n= base[328].n + base[i].n; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].n= base[j].n; j=j+9;}
	base[17].n=0;
	for (var i=18; i<25; i++) { base[17].n= base[17].n + base[i].n;}
	base[28].n= base[25].n + base[26].n + base[27].n;
	base[29].n= base[17].n + base[28].n;
	
	//2016--------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].n= base[17+i].n * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].n= base[25+i].n * base[11+i].d;}
		//paso b
	for (var i=49; i<57; i++)   {base[i].n= base[34].n * base[i].b;}
	for (var i=58; i<66; i++)   {base[i].n= base[35].n * base[i].b;}
	for (var i=67; i<75; i++)   {base[i].n= base[36].n * base[i].b;}
	for (var i=76; i<84; i++)   {base[i].n= base[37].n * base[i].b;}
	for (var i=85; i<93; i++)   {base[i].n= base[38].n * base[i].b;}
	for (var i=94; i<102; i++)  {base[i].n= base[39].n * base[i].b;}
	for (var i=103; i<111; i++) {base[i].n= base[40].n * base[i].b;}
	for (var i=112; i<120; i++) {base[i].n= base[41].n * base[i].b;}
	for (var i=121; i<129; i++) {base[i].n= base[42].n * base[i].b;}
	for (var i=130; i<138; i++) {base[i].n= base[43].n * base[i].b;}
		//paso c
	for (var j=49; j<138; j=j+9) {
		for (var i=0; i<8; i++) { base[100+j+i].n= (base[j+i].n / base[139+i].n) * 1000;}
	}
		//paso d
	for (var i=0; i<7; i++) { base[240+i].o= (base[139+i].o * base[149+i].n) /1000;}
	base[247].o=0;
	for (var i=240; i<247; i++) { base[247].o= base[247].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[249+i].o= (base[139+i].o * base[158+i].n) /1000;}
	base[256].o=0;
	for (var i=249; i<256; i++) { base[256].o= base[256].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[258+i].o= (base[139+i].o * base[167+i].n) /1000;}
	base[265].o=0;
	for (var i=258; i<265; i++) { base[265].o= base[265].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[267+i].o= (base[139+i].o * base[176+i].n) /1000;}
	base[274].o=0;
	for (var i=267; i<274; i++) { base[274].o= base[274].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[276+i].o= (base[139+i].o * base[185+i].n) /1000;}
	base[283].o=0;
	for (var i=276; i<283; i++) { base[283].o= base[283].o + base[i].o; }

	for (var i=0; i<8; i++) { base[285+i].o= (base[139+i].o * base[194+i].n) /1000;}
	
	for (var i=0; i<8; i++) { base[294+i].o= (base[139+i].o * base[203+i].n) /1000;}
	
	for (var i=0; i<7; i++) { base[303+i].o= (base[139+i].o * base[212+i].n) /1000;}
	base[310].o=0;
	for (var i=303; i<310; i++) { base[310].o= base[310].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[312+i].o= (base[139+i].o * base[221+i].n) /1000;}
	base[319].o=0;
	for (var i=312; i<319; i++) { base[319].o= base[319].o + base[i].o; }
	
	for (var i=0; i<7; i++) { base[321+i].o= (base[139+i].o * base[230+i].n) /1000;}
	base[328].o=0;
	for (var i=321; i<328; i++) { base[328].o= base[328].o + base[i].o; }
		//paso e
	var j=247;
	for (var i=18; i<28; i++) { base[i].o= base[j].o; j=j+9;}
	base[17].o=0;
	for (var i=18; i<25; i++) { base[17].o= base[17].o + base[i].o;}
	base[28].o= base[25].o + base[26].o + base[27].o;
	base[29].o= base[17].o + base[28].o;
	//2017-----------------------------------------------------------------------------------
		//paso a
	for (var i=0; i<8; i++) {base[33+i].o= base[17+i].o * base[2+i].d;}
	for (var i=0; i<5; i++) {base[41+i].o= base[25+i].o * base[11+i].d;}
		//paso b --> NO TIENE
		//paso c --> NO TIENE
		//paso d --> NO TIENE
		//paso e --> NO TIENE

//2.- copiar los datos a representar a la hoja previsión

    //tabla final de resultados
	gasto[102]= new Fila (" ","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017",null,null);
	gasto[103]= new Fila ("Hospitalaria",0,0,0,0,0,0,0,0,0,0,0,0,null,null); //se crean las filas y se incializan las columnas a 0
	gasto[104]= new Fila ("Farmacia",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[105]= new Fila ("Ambulatoria",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[106]= new Fila ("Prótesis y traslados",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[107]= new Fila ("Administración y salud pública",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[108]= new Fila ("Gasto de capital",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[109]= new Fila ("Transferencias",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[110]= new Fila ("Gasto sanitario público",0,0,0,0,0,0,0,0,0,0,0,0,null,null);	
	gasto[111]= new Fila ("Productos, aparatos y equipos médicos",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[112]= new Fila ("Servicios sanitarios",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[113]= new Fila ("Seguros privados",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[114]= new Fila ("Gasto sanitario privado",0,0,0,0,0,0,0,0,0,0,0,0,null,null);
	gasto[115]= new Fila ("Gasto sanitario total",0,0,0,0,0,0,0,0,0,0,0,0,null,null);

	//se copian los datos desde base a gasto para aprovechar las funciones de representación.
	
	for (i=0; i<7; i++) {
		gasto[103+i].b= base[34+i].d;
		gasto[103+i].c= base[34+i].e;
		gasto[103+i].d= base[34+i].f;
		gasto[103+i].e= base[34+i].g;
		gasto[103+i].f= base[34+i].h;
		gasto[103+i].g= base[34+i].i;
		gasto[103+i].h= base[34+i].j;
		gasto[103+i].i= base[34+i].k;
		gasto[103+i].j= base[34+i].l;
		gasto[103+i].k= base[34+i].m;
		gasto[103+i].l= base[34+i].n;
		gasto[103+i].m= base[34+i].o;
	}
	for (i=0; i<5; i++) {
		gasto[111+i].b= base[41+i].d;
		gasto[111+i].c= base[41+i].e;
		gasto[111+i].d= base[41+i].f;
		gasto[111+i].e= base[41+i].g;
		gasto[111+i].f= base[41+i].h;
		gasto[111+i].g= base[41+i].i;
		gasto[111+i].h= base[41+i].j;
		gasto[111+i].i= base[41+i].k;
		gasto[111+i].j= base[41+i].l;
		gasto[111+i].k= base[41+i].m;
		gasto[111+i].l= base[41+i].n;
		gasto[111+i].m= base[41+i].o;
	}
	//Gasto sanitario público
	gasto[110].b= base[33].d;
	gasto[110].c= base[33].e;
	gasto[110].d= base[33].f;
	gasto[110].e= base[33].g;
	gasto[110].f= base[33].h;
	gasto[110].g= base[33].i;
	gasto[110].h= base[33].j;
	gasto[110].i= base[33].k;
	gasto[110].j= base[33].l;
	gasto[110].k= base[33].m;
	gasto[110].l= base[33].n;
	gasto[110].m= base[33].o;
		
//3.- devolver la previsión
return gasto;
} 


/*************************************** mostrar_resultados () ***********************/
//24 .- Llamado desde obtener_simulacion()
// mostrar_resultados (prevision) --> dibuja la tabla de la previsión del gasto sanitario.
//                                                      --> Se debe poner los links para seleccionar que columna quiere graficar
/*****************************************************************************************/
function mostrar_resultados(previ) {
	//0.- Ampliar el espacio de visualización de la tabla y centrarlo
		//document.getElementById("tabla").className="bigpagina";
	//1.- generar todos los nodos
	//2.- borrar titulo 3
	var nodo=document.getElementById("titular1");
	nodo.firstChild.data="4.- Previsión de gasto sanitario para " + mapa;
	//3.- borrar formulario con tabla de escenario de simulacion
			//	borrar_nodo("formulario_escenario");
	borrar_nodos_hijos("8");
	//4.- borrar formulario de elección de escenario
	borrar_nodos_hijos("9");
	//5.- unir la tabla generada a la página
		//La tabla a generar está almacenada entre las filas 102 y 115, además hay que intercalar una fila separadora entre los subtotales y el total final
	//declaramos una variable que almacena todos los elementos td (columnas)	
	var columna=null; 
	//declaramos una variable de array de filas (tr)  donde se van a almacenar los objetos a enlazar a la tabla. Cada elemento de este array representa una fila
	var fila_tabla= new Array();
	//fila 102
	fila_tabla[0]= document.createElement("tr");
	//le ponemos el id y el name por la fila del excel
	fila_tabla[0].id="fila_"+"102";
	fila_tabla[0].name="fila_"+"102";
	//columnas de la fila 102, encabezados de columna
	for (var i=0;i<13;i++) {
		switch (i){     //identificador y  nombre realcionado con la fila y columna del excel
			case 0:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].a));
						columna.id="celda_102a"; columna.name="celda_102a";break;
			case 1:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].b));
						columna.id="celda_102b"; columna.name="celda_102b";break;
			case 2:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].c));
						columna.id="celda_102c"; columna.name="celda_102c";break;
			case 3:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].d));
						columna.id="celda_102d"; columna.name="celda_102d";break;
			case 4:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].e));
						columna.id="celda_102e"; columna.name="celda_102e";break;
			case 5:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].f));
						columna.id="celda_102f"; columna.name="celda_102f";break;
			case 6:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].g));
						columna.id="celda_102g"; columna.name="celda_102g";break;
			case 7:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].h));
						columna.id="celda_102h"; columna.name="celda_102h";break;
			case 8:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].i));
						columna.id="celda_102i"; columna.name="celda_102i";break;
			case 9:		columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].j));
						columna.id="celda_102j"; columna.name="celda_102j";break;
			case 10:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].k));	
						columna.id="celda_102k"; columna.name="celda_102k";break;
			case 11:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].l));
						columna.id="celda_102l"; columna.name="celda_102l";break;
			case 12:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[102].m));
						columna.id="celda_102m"; columna.name="celda_102m";break;
		
		}  //fin de swicth
		//clase
		columna.className="celdaVariable1";  //clase las celdas de la primera columna
		fila_tabla[0].appendChild(columna);
	} //fin del for
	
	//filas de 103 a 115 intercalando dos barras,  las filas 1 a 8 coinciden con la 103 a 110 del excel
	//la fila 9 es una barra, las filas 10 a 13 coinciden con las 111 a 114 del excel, la fila 14 es una barra
	//la fila 15 coincide con la 115 del excel. Todas las columnas A, o sea 0, serán de la clase "celdaVariable0" - Alternativamente las columnas de cada fila serán "celdaDato1" o "celdaDato0", excepto las barras que serán "celdaVariable1"
	var nfila_excel=103; //nfila_excel controla el número de fila de la tabla excel
	var clase="celdaDato0"; //varia su valor entre "celdaDato1" y "celdaDato0" para ponerle la clase a las columas de esa fila
	for (var f=1; f<16; f++) {  //f controla el número de fila de la tabla a dibujar
		//se crea la fila
		fila_tabla[f]= document.createElement("tr");
		//le ponemos el id y el name por la fila del excel
		fila_tabla[f].id="fila_"+f;
		fila_tabla[f].name="fila_"+f;	
		//procedemos con las columnas dentro de cada fila
		for (var i=0;i<13;i++) {  //i controla la columna
				if ((f!=9) && (f!=14)) {  //si no son filas barra..
					switch (i){     //identificador y  nombre realcionado con la fila y columna del excel
						case 0:		//Se le pone un guion a las partidas de los subtotales - filas 1,2,3,4,5,6,7,10,11,12, y no a las 8,,13,  --> 9 y 14 ya quedan exluidas
								if ((f!=8) && (f!=13) && (f!=15))  { //hago como un sangrado
									columna=document.createElement("td"); columna.appendChild(document.createTextNode("- "+previ[nfila_excel].a));
								}
								else {
									columna=document.createElement("td"); columna.appendChild(document.createTextNode(previ[nfila_excel].a));
								}
								columna.id="celda"+nfila_excel+"a"; columna.name="celda_"+nfila_excel+"a";
								//todas las columnas 0 o A son de la clase "celdaVariable0"
								columna.className="celdaVariable0";
								break;

						case 1: columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].b)*1).toFixed()));
								columna.id="celda"+nfila_excel+"b"; columna.name="celda_"+nfila_excel+"b"; columna.className=clase;break;
							
						case 2:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].c)*1).toFixed()));
								columna.id="celda"+nfila_excel+"c"; columna.name="celda_"+nfila_excel+"c"; columna.className=clase;break;
					
						case 3:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].d)*1).toFixed()));
								columna.id="celda"+nfila_excel+"d"; columna.name="celda_"+nfila_excel+"d"; columna.className=clase;break;
							
						case 4:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].e)*1).toFixed()));
								columna.id="celda"+nfila_excel+"e"; columna.name="celda_"+nfila_excel+"e"; columna.className=clase;break;
							
						case 5:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].f)*1).toFixed()));
								columna.id="celda"+nfila_excel+"f"; columna.name="celda_"+nfila_excel+"f"; columna.className=clase;break;
							
						case 6:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].g)*1).toFixed()));
								columna.id="celda"+nfila_excel+"g"; columna.name="celda_"+nfila_excel+"g"; columna.className=clase;break;
					
						case 7:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].h)*1).toFixed()));
								columna.id="celda"+nfila_excel+"h"; columna.name="celda_"+nfila_excel+"h"; columna.className=clase;break;
					
						case 8:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].i)*1).toFixed()));
								columna.id="celda"+nfila_excel+"i"; columna.name="celda_"+nfila_excel+"i"; columna.className=clase;break;
				
						case 9:	columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].j)*1).toFixed()));
								columna.id="celda"+nfila_excel+"j"; columna.name="celda_"+nfila_excel+"j"; columna.className=clase;break;
					
						case 10:columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].k)*1).toFixed()));
								columna.id="celda"+nfila_excel+"k"; columna.name="celda_"+nfila_excel+"k"; columna.className=clase;break;
							
						case 11:columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].l)*1).toFixed()));
								columna.id="celda"+nfila_excel+"l"; columna.name="celda_"+nfila_excel+"l"; columna.className=clase;break;
				
						case 12:columna=document.createElement("td"); columna.appendChild(document.createTextNode(((previ[nfila_excel].m)*1).toFixed()));
								columna.id="celda"+nfila_excel+"m"; columna.name="celda_"+nfila_excel+"m"; columna.className=clase;break;
		
					}  //fin de swicth	
				} //fin del if
				//filas 9 y 14
				else {  //creamos una fila donde todas las columnas son barras todas las columnas son iguales
					columna=document.createElement("td"); 
					columna.appendChild(document.createTextNode("  ")); 
					columna.className="barra";
				} //del else
				//unimos cada columna a la fila
			fila_tabla[f].appendChild(columna);
		} //fin del for i		
		if ((f!=9) && (f!=14)) { 
			nfila_excel++; //seleccionamos la siguiente fila de datos
			//cambiamos el valor de la clase alternativamente para cada fila
			if (clase=="celdaDato1") { clase="celdaDato0";}
			else { clase="celdaDato1";}
		}
	} //fin for f
	
	//crear Tbody
	var tbody_tabla=document.createElement("tbody");
	//unir filas a Tbody
	for (var f=0; f<16; f++) { tbody_tabla.appendChild(fila_tabla[f]);	}
	//creamos una fila más, con el pie de la tabla,  y la unimos al tbody
	//lo primero que tengo que hacer, es determinar si la tabla la pinto con tasa variable o prefijada, esto lo calculo en función del parámetro que se pasa
	var pie;	
	switch (formulario) {  
		case 1: pie="Previsión del gasto simulado: Escenario 1, Tasa configurable entre -100 y 100";
				if (tipo_tasa=="prefijado") {
					pie=   "Previsión del gasto simulado: Escenario 1, Tasa prefijada";
				}
				break;
		case 2: pie=   "Previsión del gasto simulado: Escenario 2, Tasa configurable entre -100 y 100";
				if (tipo_tasa=="prefijado") {
					pie=   "Previsión del gasto simulado: Escenario 2, Tasa prefijada";
				}
				break;
		case 3: pie=   "Previsión del gasto simulado: Escenario 1, Tasa prefijada";
				formulario=1;
				break;
		case 4: pie=   "Previsión del gasto simulado: Escenario 2, Tasa prefijada";
				formulario=2;
				break;
	}
	
	switch (tipo_incremento) {
		case "unico": pie= pie + " de incremento único"; break;
		case "acumulado": pie= pie + " de incremento anual acumulada"; break;
	}
	
	columna=document.createElement("td");
	columna.appendChild(document.createTextNode(pie));
	columna.colSpan=14;
	
	fila_tabla[16]=document.createElement("tr");
	fila_tabla[16].className="tablaizquierda";
	fila_tabla[16].appendChild(columna);
	
	tbody_tabla.appendChild(fila_tabla[16]);
	
	
	//crear Table
	var table_tabla= document.createElement("table");
	table_tabla.id="tabla_prevision";
	table_tabla.name="tabla_prevision";
	table_tabla.className="tabla";
	//unir Tbody a Table
	table_tabla.appendChild(tbody_tabla);
	//unir table a celda8
	document.getElementById("8").appendChild(table_tabla);
	document.getElementById("8").className="seccion";
	//ya está creada la tabla y unida al document.
	
	
	
	//6.- mostrar los iconos de elección del tipo de gráfico  --> en la siguiente funcion
	


}


/************************** dibujar_formulario_graficos () *************************/
//25 .- Llamado desde obtener_simulacion()
// dibujar_formulario_graficos () --> Dibuja el formulario que permite la elección de gráfico a mostrar
//                                                      --> Se dibuja en la celda 9
/***************************************************************************/
function dibujar_formulario_graficos(){
	//Son dos formularios, uno sobre las variables a representar (izquierda) y otro sobre el tipo de gráfico con el que se representa (derecha)
	//Se dibuja ahora el de la parte izquierda, las variables que se van a representar

	//Se trata de un formulario con 5 input de tipo radio formando un conjunto de campos (fieldset), un legend y un botón
	
	//de dentro-afuera
	//creo los cinco input de tipo radio
	var nodo_radio= new Array();
	for (var i=0; i<5;i++) {
		nodo_radio[i]=document.createElement("input");
		nodo_radio[i].type= "radio";
		nodo_radio[i].name= "grafico";
		nodo_radio[i].checked=false;
		nodo_radio[i].onclick= function () {manejarRadioGrafico(this);};
	}
	//Le doy las propiedades a cada nodo
	nodo_radio[0].id= "total_acumulado";     //Gasto sanitario total acumulado
	nodo_radio[0].value= "total_acumulado";
	
	nodo_radio[1].id= "publico_acumulado";
	nodo_radio[1].value= "publico_acumulado";
	
	nodo_radio[2].id= "publico_partidas";
	nodo_radio[2].value= "publico_partidas";

	nodo_radio[3].id= "privado_acumulado";
	nodo_radio[3].value= "privado_acumulado";
	
	nodo_radio[4].id= "privado_partidas";
	nodo_radio[4].value= "privado_partidas";
	
	
	//creo un legend para los cinco input
	var nodo_legend= document.createElement ("legend");
	//y le cuelgo el texto de la leyenda
	nodo_legend.appendChild(document.createTextNode("Elección del gráfico"));
	
	//los cinco input de tipo radio y el legend, lo meto dentro de un fieldset
	//creo el nodo fieldset
	var nodo_fieldset= document.createElement("fieldset");
	//le uno el legend
	nodo_fieldset.appendChild(nodo_legend);
	//Al nodo fieldset le voy uniendo todos los elementos input radio
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[0]);
	nodo_fieldset.appendChild(document.createTextNode("Gasto Sanitario Total"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[1]);
	nodo_fieldset.appendChild(document.createTextNode("Gasto Sanitario Público"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[2]);
	nodo_fieldset.appendChild(document.createTextNode("Gasto Sanitario Público POR PARTIDAS"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[3]);
	nodo_fieldset.appendChild(document.createTextNode("Gasto Sanitario Privado"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[4]);
	nodo_fieldset.appendChild(document.createTextNode("Gasto Sanitario Privado POR PARTIDAS"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(document.createElement("br"));
	
	
	//ahora metemos todo el fieldset en una celda, la izd
	var nodo_celda_izd= document.createElement("td");
	nodo_celda_izd.appendChild(nodo_fieldset);
	//Se ha creado el formulario que está a la izquierda de la pantalla
	
	//--------------------//
	
	//Se crea el formulario que está a la derecha que es el del tipo de grafico a usar
	
	//de dentro-afuera
	//creo los cinco input de tipo radio
	var nodo_radio= new Array();
	for (var i=0; i<6;i++) {
		nodo_radio[i]=document.createElement("input");
		nodo_radio[i].type= "radio";
		nodo_radio[i].name= "tipografico";
		nodo_radio[i].checked=false;
		nodo_radio[i].onclick= function () {manejarRadioTipoGrafico(this);};
	}
	//Le doy las propiedades a cada nodo
	nodo_radio[0].id= "barras2D";     
	nodo_radio[0].value= "barras2D";
	
	nodo_radio[1].id= "columnas2D";
	nodo_radio[1].value= "columnas2D";
	
	nodo_radio[2].id= "columnas3D";
	nodo_radio[2].value= "columnas3D";

	nodo_radio[3].id= "barras_apiladas2D";
	nodo_radio[3].value= "barras_apiladas2D";
	
	nodo_radio[4].id= "columnas_apiladas2D";
	nodo_radio[4].value= "columnas_apiladas2D";
	
	nodo_radio[5].id= "columnas_apiladas3D";
	nodo_radio[5].value= "columnas_apiladas3D";
	
	//creo un legend para los seis input
	var nodo_legend= document.createElement ("legend");
	//y le cuelgo el texto de la leyenda
	nodo_legend.appendChild(document.createTextNode("Tipo de gráfico"));
	
	//los 6 input de tipo radio y el legend, lo meto dentro de un fieldset
	//creo el nodo fieldset
	var nodo_fieldset= document.createElement("fieldset");
	//le uno el legend
	nodo_fieldset.appendChild(nodo_legend);
	//Al nodo fieldset le voy uniendo todos los elementos input radio
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[0]);
	nodo_fieldset.appendChild(document.createTextNode("Barras 2D"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[1]);
	nodo_fieldset.appendChild(document.createTextNode("Columnas 2D"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[2]);
	nodo_fieldset.appendChild(document.createTextNode("Columnas 3D"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[3]);
	nodo_fieldset.appendChild(document.createTextNode("Barras apiladas 2D"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[4]);
	nodo_fieldset.appendChild(document.createTextNode("Columnas apiladas 2D"));
	nodo_fieldset.appendChild(document.createElement("br"));
	nodo_fieldset.appendChild(nodo_radio[5]);
	nodo_fieldset.appendChild(document.createTextNode("Columnas apiladas 3D"));
	nodo_fieldset.appendChild(document.createElement("br"));
		
	//ahora metemos todo el fieldset en una celda, la derecha
	var nodo_celda_dch= document.createElement("td");
	nodo_celda_dch.appendChild(nodo_fieldset);
	//Se crea ahora el formulario que está a la derecha de la pantalla
	
	//Y ahora unimos las dos celdas en una fila
	// La fila
	var nodo_fila= document.createElement("tr");
	nodo_fila.appendChild(nodo_celda_izd);
	nodo_fila.appendChild(nodo_celda_dch);
	//a tbody se le une la fila	
	var nodo_tbody= document.createElement("tbody");
	nodo_tbody.appendChild(nodo_fila);
	//y a la tabla el tbody
	var nodo_tabla= document.createElement("table");
	nodo_tabla.className="tablaizquierda";
	nodo_tabla.appendChild(nodo_tbody);
	
	//debajo de la tabla, vamos a tener el botón aceptar, que controla la opción elegida
	var nodo_boton=document.createElement("input");
	nodo_boton.type="button";
	nodo_boton.id="boton_graficos";
	nodo_boton.name="boton_graficos";
	nodo_boton.value="Aceptar";
	nodo_boton.className="boton";
	nodo_boton.onclick= function () { mostrar_graficos(); };
	
	
	//tabla y botón, los uno al formulario	
	//creo un nodo formulario
	var nodo_formulario= document.createElement("form");
	//le asignamos el id 
	nodo_formulario.id="formulario_graficos";
	//nodo_formulario.className="seccion";
	nodo_formulario.name="formulario_graficos";
	//uno la tabla y el boton
	nodo_formulario.appendChild(nodo_tabla);
	nodo_formulario.appendChild(nodo_boton);
	
	//Y el formulario lo meto en la celda 9 de la tabla  de la página
	document.getElementById("9").appendChild(nodo_formulario);
}//Fin dibujar formulario graficos


/********************************************* manejarRadioGrafico***************************************************/
//26.- Es lamado desde dibujar_formulario_graficos
//manejarRadioGrafico (obj)  --> metodo que se asocia a los input radio para manejar el checked en el IE, con Mozilla no hace falta
/************************************************************************************************************/
function manejarRadioGrafico (obj) {
	obj.checked=true;
	if (obj.value!=document.getElementById("total_acumulado").value) {document.getElementById("total_acumulado").checked=false;}
	if (obj.value!=document.getElementById("publico_acumulado").value) {document.getElementById("publico_acumulado").checked=false;}
	if (obj.value!=document.getElementById("publico_partidas").value) {document.getElementById("publico_partidas").checked=false;}
	if (obj.value!=document.getElementById("privado_acumulado").value) {document.getElementById("privado_acumulado").checked=false;}
	if (obj.value!=document.getElementById("privado_partidas").value) {document.getElementById("privado_partidas").checked=false;}
	if (obj.value=="total_acumulado" || obj.value=="publico_acumulado" || obj.value=="privado_acumulado") {
			document.getElementById("barras2D").disabled=true;
			document.getElementById("columnas2D").disabled=true;
			document.getElementById("columnas3D").disabled=true;
			document.getElementById("barras2D").checked=false;
			document.getElementById("columnas2D").checked=false;
			document.getElementById("columnas3D").checked=false;
			
			document.getElementById("barras_apiladas2D").disabled=false;
			document.getElementById("columnas_apiladas2D").disabled=false;
			document.getElementById("columnas_apiladas3D").disabled=false;
	}
	if (obj.value=="publico_partidas" || obj.value=="privado_partidas") {
			document.getElementById("barras2D").disabled=false;
			document.getElementById("columnas2D").disabled=false;
			document.getElementById("columnas3D").disabled=false;
			
			document.getElementById("barras_apiladas2D").disabled=true;
			document.getElementById("columnas_apiladas2D").disabled=true;
			document.getElementById("columnas_apiladas3D").disabled=true;
			document.getElementById("barras_apiladas2D").checked=false;
			document.getElementById("columnas_apiladas2D").checked=false;
			document.getElementById("columnas_apiladas3D").checked=false;
	}
} //fin manejarRadioGrafico

/********************************************* manejarRadioTipoGrafico***************************************************/
//26.B.- Es lamado desde dibujar_formulario_graficos
//manejarRadioTipoGrafico (obj)  --> metodo que se asocia a los input radio para manejar el checked en el IE, con Mozilla no hace falta
/************************************************************************************************************/
function manejarRadioTipoGrafico (obj) {
	obj.checked=true; //por hacer
	if (obj.value!=document.getElementById("barras2D").value) {document.getElementById("barras2D").checked=false;}
	if (obj.value!=document.getElementById("columnas2D").value) {document.getElementById("columnas2D").checked=false;}
	if (obj.value!=document.getElementById("columnas3D").value) {document.getElementById("columnas3D").checked=false;}
	if (obj.value!=document.getElementById("barras_apiladas2D").value) {document.getElementById("barras_apiladas2D").checked=false;}
	if (obj.value!=document.getElementById("columnas_apiladas2D").value) {document.getElementById("columnas_apiladas2D").checked=false;}
	if (obj.value!=document.getElementById("columnas_apiladas3D").value) {document.getElementById("columnas_apiladas3D").checked=false;}
} //fin manejarRadioTipoGrafico




/*********************** mostrar_graficos ****************************************************/
//27.- Es llamado desde dibujar_formulario_graficos por el envento onclick del boton del formulario_graficos
//mostrar_graficos() --> analiza la selección realizada en el formulario_graficos y dibuja el gráfico que le corresponde 
/****************************************************************************************/
function mostrar_graficos() {
	if ((!document.getElementById("total_acumulado").checked) && (!document.getElementById("publico_acumulado").checked) && (!document.getElementById("publico_partidas").checked) && (!document.getElementById("privado_acumulado").checked) && (!document.getElementById("privado_partidas").checked)) {alert('Por favor, eliga un gráfico');}
	else 
		if ( (!document.getElementById("barras2D").checked) && (!document.getElementById("columnas2D").checked) && (!document.getElementById("columnas3D").checked) && (!document.getElementById("barras_apiladas2D").checked) && (!document.getElementById("columnas_apiladas2D").checked) && (!document.getElementById("columnas_apiladas3D").checked)) {alert('Por favor, eliga un tipo de gráfico');}
		else {
		
			//Averiguar que opción se seleccionado
			if (document.getElementById("total_acumulado").checked) {
					if (document.getElementById("barras_apiladas2D").checked) {dibujar_chart("total_acumulado","barras_apiladas2D");}
					if (document.getElementById("columnas_apiladas2D").checked) {dibujar_chart("total_acumulado","columnas_apiladas2D");}
					if (document.getElementById("columnas_apiladas3D").checked) {dibujar_chart("total_acumulado","columnas_apiladas3D");}
			}

			if (document.getElementById("publico_acumulado").checked) {
					if (document.getElementById("barras_apiladas2D").checked) {dibujar_chart("publico_acumulado","barras_apiladas2D");}
					if (document.getElementById("columnas_apiladas2D").checked) {dibujar_chart("publico_acumulado","columnas_apiladas2D");}
					if (document.getElementById("columnas_apiladas3D").checked) {dibujar_chart("publico_acumulado","columnas_apiladas3D");}
			}
						
			if (document.getElementById("publico_partidas").checked) {
					if (document.getElementById("barras2D").checked) {dibujar_chart("publico_partidas","barras2D");}
					if (document.getElementById("columnas2D").checked) {dibujar_chart("publico_partidas","columnas2D");}
					if (document.getElementById("columnas3D").checked) {dibujar_chart("publico_partidas","columnas3D");}
			}
			if (document.getElementById("privado_acumulado").checked) {
					if (document.getElementById("barras_apiladas2D").checked) {dibujar_chart("privado_acumulado","barras_apiladas2D");}
					if (document.getElementById("columnas_apiladas2D").checked) {dibujar_chart("privado_acumulado","columnas_apiladas2D");}
					if (document.getElementById("columnas_apiladas3D").checked) {dibujar_chart("privado_acumulado","columnas_apiladas3D");}
			}
						
			if (document.getElementById("privado_partidas").checked) {
					if (document.getElementById("barras2D").checked) {dibujar_chart("privado_partidas","barras2D");}
					if (document.getElementById("columnas2D").checked) {dibujar_chart("privado_partidas","columnas2D");}
					if (document.getElementById("columnas3D").checked) {dibujar_chart("privado_partidas","columnas3D");}
			}
			
			}
}//fin mostrar_graficos();



/****************************************************************************************************************************/
/*************************************** FUNCIONES DE GENERACION DE GRAFICOS *******************************************/
/************************************************** CON FUSIONCHARTS *****************************************************/
/****************************************************************************************************************************/




/******************** dibujar_chart () *************************************************************/
//28.- Es llamado desde mostrar_graficos()
// dibujar_chart()  --> Según parámetro dibuja un tipo de gráfico u otro
/************************************************************************************************/
function dibujar_chart(opcion, opcion2) {
//Se borra el contenido de las celdas 6 y 11
	borrar_nodos_hijos("6");
	borrar_nodos_hijos("11");

//0.- Formulario de filtro de años --> a dibujar en celda 6 como una fila o como tabla.
	dibujar_formulario_filtro_anual(opcion);
//1.- Crear el div y subformulario si corresponde
	var nodo_div= document.createElement("div");
	//le asignamos el id 
	nodo_div.id="div_chart";
	nodo_div.name="div_chart";
	document.getElementById("11").appendChild(nodo_div);
	dibujar_formulario_filtro_partidas(opcion); //se dibuja en la celda 11

//2.- Se crea el gráfico
	switch (opcion)
	{
		case 'total_acumulado':
		case 'publico_acumulado':
		case 'privado_acumulado': 
			{
				switch (opcion2)
				{
					case 'barras_apiladas2D':{
												var chart1=new FusionCharts("./charts/FCF_StackedBar2D.swf", "id_chart", "600", "400");
												break;
											  }
					case 'columnas_apiladas2D':{
												var chart1=new FusionCharts("./charts/FCF_StackedColumn2D.swf", "id_chart", "600", "400");
												break;
												}
					case 'columnas_apiladas3D':{
												var chart1=new FusionCharts("./charts/FCF_StackedColumn3D.swf", "id_chart", "600", "400");
												break;
												}
				}
				break;
			}
					
		case 'publico_partidas':
		case 'privado_partidas':
			{
				switch (opcion2)
				{
					case 'barras2D':{
									  var chart1=new FusionCharts("./charts/FCF_MSBar2D.swf", "id_chart", "600", "400");
									  break;
							         }
					case 'columnas2D':{
										var chart1=new FusionCharts("./charts/FCF_MSColumn2D.swf", "id_chart", "600", "400");
										break;
								       }
					case 'columnas3D':{
										var chart1=new FusionCharts("./charts/FCF_MSColumn3D.swf", "id_chart", "600", "400");
										break;
									   }
				}
				break;
			}
	}
	
	
//3.- Se genera el XML
	var strXML=generarXMLchart(opcion); 
//4.- Se le pasa el XML al gráfico
	chart1.setDataXML(strXML);
//6.- Se actualiza en el DOM según el indentificador que se ponga.
	chart1.render("div_chart");





} //fin dibujar_chart()



/************************** dibujar_formulario_filtro_anual (opcion) *************************/
//29 .- Llamado desde dibujar_chart()
// dibujar_formulario_filtro_anual () --> Dibuja el formulario que permite la elección de los años a mostrar
//                                                              --> Se dibuja en la celda 6
//						  --> La opción se usa para saber que tipo de gráfico y datasheet hay que actualizar
/***************************************************************************************/
function dibujar_formulario_filtro_anual(opcion){
	
	//Se trata de un formulario con 12 input de tipo checkbox formando un conjunto de campos (fieldset), un legend y sin botón
	
	//de dentro-afuera
	//creo los 12 input de tipo checkbox, uno por año empezando por 2006
	var nodo_checkbox= new Array();
	for (var i=0; i<12; i++) {
		nodo_checkbox[i]=document.createElement("input");
		nodo_checkbox[i].type= "checkbox";
		nodo_checkbox[i].name= 2006+i;
		nodo_checkbox[i].id= 2006+i;
		nodo_checkbox[i].value= 2006+i;
		nodo_checkbox[i].checked= true;
		nodo_checkbox[i].onclick= function () {actualizarChart('id_chart', opcion);}; //id_chart es el identificador del gráfico
	}
		
	//creo un legend para los 12 input
	var nodo_legend= document.createElement ("legend");
	//y le cuelgo el texto de la leyenda
	nodo_legend.appendChild(document.createTextNode("Filtro por años"));
	
	//los 12 input de tipo radio y el legend, lo meto dentro de un fieldset
	//creo el nodo fieldset
	var nodo_fieldset= document.createElement("fieldset");
	//le uno el legend
	nodo_fieldset.appendChild(nodo_legend);
	//Al nodo fieldset le voy uniendo todos los elementos input radio
	for (var i=0; i<11; i++) {
		nodo_fieldset.appendChild(nodo_checkbox[i]);
		nodo_fieldset.appendChild(document.createTextNode( (2006+i) + " | " ));
	}	
	nodo_fieldset.appendChild(nodo_checkbox[11]);
	nodo_fieldset.appendChild(document.createTextNode("2017"));
		
	//tabla y botón, los uno al formulario	
	//creo un nodo formulario
	var nodo_formulario= document.createElement("form");
	//le asignamos el id 
	nodo_formulario.id="formulario_filtro_anual";
	//nodo_formulario.className="seccion";
	nodo_formulario.name="formulario_filtro_anual";
	//uno la tabla y el boton
	
	nodo_formulario.appendChild(nodo_fieldset);
	
	//Y el formulario lo meto en la celda 6 de la tabla  de la página
	document.getElementById("6").appendChild(nodo_formulario);
	
	for (var i=2006; i<2018; i++) {	
		document.getElementById(i).checked= true; 
	}
	
	
}//Fin dibujar formulario filtro anual



/************************** actualizarChart() *************************/
//30 .- Llamado desde dibujar_formulario_filtro_anual() y desde .......
// actualizarChart (Id,opcion) --> Redibuja el gráfico cuyo identificador se pasa por parámetro
//				          --> El tipo de gráfico a redibujar viene dterminado por opción.
//                                		--> Va a tener en cuenta el filtro de años y partidas si es el caso.
/***************************************************************************/
function actualizarChart(Id,opcion) {
	updateChartXML(Id,generarXMLchart(opcion));
}//fin actualizarChart();


/************************** generarXMLchart(opcion) *************************/
//31 .- Llamado desde dibujar_chart() 
// generarXMLchart(opcion) --> Genera el XML que se pasa al gráfico.
//                                              --> Va a tener en cuenta el filtro de años y partidas si es el caso.
//				       --> Devuelve un string o cdena de caracteres con XML a pasar al gráfico
/***************************************************************************/
function generarXMLchart(opcion) {
	
	//donde almaceno el XML
	var strXML;
	//Según la opción, se genera una cabecera u otra de gráfico
	switch (opcion) {
		case 'total_acumulado': //tipo de gráfico Stacked Column 3D Chart  (no Stacked Bar 2D Chart )
			{
				//parámetros del gráfico
				strXML="<graph xaxisname='Años' yaxisname='Miles de euros' caption='Gasto sanitario total para "+ mapa +
						" ' subcaption='(Escenario de poblacion " + formulario + ((tipo_tasa=="prefijado")?" prefijado ":" ") +
						")' lineThickness='1' animation='1' showNames='1' alpha='100' showLimits='1' divLineDecimalPrecision='0' " + 
						" numdivlines='7' formatNumber='0' formatNumberScale='0' decimalPrecision='0' rotateNames='1' numDivLines='2' " + 
						" limitsDecimalPrecision='0' showValues='0'> <categories>";
				//Category names - en función de los años
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML=strXML + "<category name='" + i +"' showName='1'/>";
					}
				}
				strXML=strXML + "</categories>";
				//DataSet - en función de los años para este gráfico
				//Gasto sanitario publico
				//strXML=strXML + "<dataset seriesName='Gasto sanitario público' color='008040'>"
				strXML=strXML + "<dataset seriesName='Gasto sanitario público' color='8BBA00'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,110); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
      			//Gasto sanitario privado
				//strXML=strXML + "</dataset> <dataset seriesName='Gasto sanitario privado' color='FFFF00'>";
				strXML=strXML + "</dataset> <dataset seriesName='Gasto sanitario privado' color='F6BD0F'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,114); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				strXML=strXML + "</dataset>";
				strXML=strXML + "</graph>";
				break;
			}	
			
			
		case 'publico_acumulado'://tipo de gráfico Stacked Column 3D Chart  (no Stacked Bar 2D Chart )
			{
				//parámetros del gráfico
				strXML="<graph xaxisname='Años' yaxisname='Miles de euros' caption='Gasto sanitario público para "+ mapa +
						" ' subcaption='(Escenario de poblacion " + formulario + ((tipo_tasa=="prefijado")?" prefijado ":" ") +
						")' lineThickness='1' animation='1' showNames='1' alpha='100' showLimits='1' divLineDecimalPrecision='0' " + 
						" numdivlines='7' formatNumber='0' formatNumberScale='0' decimalPrecision='0' rotateNames='1' numDivLines='2' " + 
						" limitsDecimalPrecision='0' showValues='0'> <categories>";
				//Category names - en función de los años
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML=strXML + "<category name='" + i +"' showName='1'/>";
					}
				}
				strXML=strXML + "</categories>";
			
				//DataSets - en función de los años para este gráfico
			
				//Hospitalaria
				strXML=strXML + "<dataset seriesName='Hospitalaria' color='808000'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,103); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Farmacia
				strXML=strXML + "</dataset> <dataset seriesName='Farmacia' color='FDC12E'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,104); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Ambulatoria
				strXML=strXML + "</dataset> <dataset seriesName='Ambulatoria' color='FF8000'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,105); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Prótesis y traslados
				strXML=strXML + "</dataset> <dataset seriesName='Prótesis y traslados' color='AFD8F8'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,106); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Administración y salud pública
				strXML=strXML + "</dataset> <dataset seriesName='Administración y salud pública' color='800080'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,107); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Gasto de capital
				strXML=strXML + "</dataset> <dataset seriesName='Gasto de capital' color='FFFF00'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,108); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Transferencias
				strXML=strXML + "</dataset> <dataset seriesName='Transferencias' color='FB97AC'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,109); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
						
				strXML=strXML + "</dataset>";
				strXML=strXML + "</graph>";
				break;
			} //fin case
			
			
		case 'publico_partidas'://tipo de gráfico Multi-Series Column 3D 
			{
				//parámetros del gráfico
				strXML="<graph xaxisname='Años' yaxisname='Miles de euros' caption='Gasto sanitario público para "+ mapa +
						" ' subcaption='(Escenario de poblacion " + formulario + ((tipo_tasa=="prefijado")?" prefijado ":" ") +
						")' lineThickness='1' animation='1' showNames='1' alpha='100' showLimits='1' divLineDecimalPrecision='0' " + 
						" numdivlines='7' formatNumber='0' formatNumberScale='0' decimalPrecision='0' rotateNames='1' numDivLines='2' " + 
						" limitsDecimalPrecision='0' showValues='0'> <categories>";
				//Category names - en función de los años
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML=strXML + "<category name='" + i +"' showName='1'/>";
					}
				}
				strXML=strXML + "</categories>";
			
				//DataSets - en función de los años para este gráfico y en función del filtro de partidas
			
				//Hospitalaria
				if (document.getElementById("Hospitalaria").checked==true) {
					strXML=strXML + "<dataset seriesName='Hospitalaria' color='808000'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,103); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Farmacia
				if (document.getElementById("Farmacia").checked==true) {
					strXML=strXML + "<dataset seriesName='Farmacia' color='FDC12E'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,104); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Ambulatoria
				if (document.getElementById("Ambulatoria").checked==true) {
					strXML=strXML + "<dataset seriesName='Ambulatoria' color='FF8000'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,105); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Prótesis y traslados
				if (document.getElementById("Prótesis y traslados").checked==true) {
					strXML=strXML + "<dataset seriesName='Prótesis y traslados' color='AFD8F8'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,106); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}	
				//Administración y salud pública
				if (document.getElementById("Administración y salud pública").checked==true) {
					strXML=strXML + "<dataset seriesName='Administración y salud pública' color='800080'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,107); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Gasto de capital
				if (document.getElementById("Gasto de capital").checked==true) {
					strXML=strXML + "<dataset seriesName='Gasto de capital' color='FFFF00'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,108); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Transferencias
				if (document.getElementById("Transferencias").checked==true) {
					strXML=strXML + "<dataset seriesName='Transferencias' color='FB97AC'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,109); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}		
				strXML=strXML + "</graph>";
				break;
			}//fin case
			
		case 'privado_acumulado': //tipo de gráfico Stacked Column 3D Chart  (no Stacked Bar 2D Chart )
			{
				//parámetros del gráfico
				strXML="<graph xaxisname='Años' yaxisname='Miles de euros' caption='Gasto sanitario privado para "+ mapa +
						" ' subcaption='(Escenario de poblacion " + formulario + ((tipo_tasa=="prefijado")?" prefijado ":" ") +
						")' lineThickness='1' animation='1' showNames='1' alpha='100' showLimits='1' divLineDecimalPrecision='0' " + 
						" numdivlines='7' formatNumber='0' formatNumberScale='0' decimalPrecision='0' rotateNames='1' numDivLines='2' " + 
						" limitsDecimalPrecision='0' showValues='0'> <categories>";
				//Category names - en función de los años
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML=strXML + "<category name='" + i +"' showName='1'/>";
					}
				}
				strXML=strXML + "</categories>";
			
				//DataSets - en función de los años para este gráfico
			
				//Productos, aparatos y equipos médicos
				strXML=strXML + "<dataset seriesName='Productos, aparatos y equipos médicos' color='8094F8'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,111); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Servicios sanitarios
				strXML=strXML + "</dataset> <dataset seriesName='Servicios sanitarios' color='FBD471'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,112); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
				//Seguros privados
				strXML=strXML + "</dataset> <dataset seriesName='Seguros privados' color='8BBA00'>";
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML= strXML + obtener_dato_paraXMLchart(i,113); //se pasa el año y la fila donde se encuetra el dato en la previsión
					}
				}
						
				strXML=strXML + "</dataset>";
				strXML=strXML + "</graph>";
				break;
			}//fin case
			
		case 'privado_partidas'://tipo de gráfico Multi-Series Column 3D 
			{
				//parámetros del gráfico
				strXML="<graph xaxisname='Años' yaxisname='Miles de euros' caption='Gasto sanitario privado para "+ mapa +
						" ' subcaption='(Escenario de poblacion " + formulario + ((tipo_tasa=="prefijado")?" prefijado ":" ") +
						")' lineThickness='1' animation='1' showNames='1' alpha='100' showLimits='1' divLineDecimalPrecision='0' " + 
						" numdivlines='7' formatNumber='0' formatNumberScale='0' decimalPrecision='0' rotateNames='1' numDivLines='2' " + 
						" limitsDecimalPrecision='0' showValues='0'> <categories>";
				//Category names - en función de los años
				for (var i=2006; i<2018; i++) {	
					if (document.getElementById(i).checked==true) {
						strXML=strXML + "<category name='" + i +"' showName='1'/>";
					}
				}
				strXML=strXML + "</categories>";
			
				//DataSets - en función de los años para este gráfico y del filtro de partidas
			
				//Productos, aparatos y equipos médicos
				if (document.getElementById("Productos, aparatos y equipos médicos").checked==true) {
					strXML=strXML + "<dataset seriesName='Productos, aparatos y equipos médicos' color='8094F8'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,111); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Servicios sanitarios
				if (document.getElementById("Servicios sanitarios").checked==true) {
					strXML=strXML + "<dataset seriesName='Servicios sanitarios' color='FBD471'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,112); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
				//Seguros privados
				if (document.getElementById("Seguros privados").checked==true) {
					strXML=strXML + "<dataset seriesName='Seguros privados' color='8BBA00'>";
					for (var i=2006; i<2018; i++) {	
						if (document.getElementById(i).checked==true) {
							strXML= strXML + obtener_dato_paraXMLchart(i,113); //se pasa el año y la fila donde se encuetra el dato en la previsión
						}
					}
					strXML=strXML + "</dataset>";
				}
						
				strXML=strXML + "</graph>";
				break;
			}//fin case
					
	}


	return strXML;
} //fin generarXMLchart

/************************** obtener_dato_paraXMLchart(a,fila) *************************/
//32 .- Llamado desde generarXMLchart(opcion)
// obtener_dato_paraXMLchart(a,fila)--> devulve para XML del gráfico, el set value para el año a en fila 
//				       --> Devuelve un string o cdena de caracteres a unir al  XML a pasar al gráfico
/***************************************************************************/
function obtener_dato_paraXMLchart(a,f) {
	var str; //string donde se guarda el set value y el dato a devolver
	switch (a) {
		case 2006: str= "<set value='" + (prevision[f].b*1).toFixed() + "' alpha='100' />"; break;
		case 2007: str= "<set value='" + (prevision[f].c*1).toFixed() + "' alpha='100' />"; break;
		case 2008: str= "<set value='" + (prevision[f].d*1).toFixed() + "' alpha='100' />"; break; 
		case 2009: str= "<set value='" + (prevision[f].e*1).toFixed() + "' alpha='100' />"; break;
		case 2010: str= "<set value='" + (prevision[f].f*1).toFixed() + "' alpha='100' />"; break;
		case 2011: str= "<set value='" + (prevision[f].g*1).toFixed() + "' alpha='100' />"; break;
		case 2012: str= "<set value='" + (prevision[f].h*1).toFixed() + "' alpha='100' />"; break;
		case 2013: str= "<set value='" + (prevision[f].i*1).toFixed() + "' alpha='100' />"; break;
		case 2014: str= "<set value='" + (prevision[f].j*1).toFixed() + "' alpha='100' />"; break;
		case 2015: str= "<set value='" + (prevision[f].k*1).toFixed() + "' alpha='100' />"; break;
		case 2016: str= "<set value='" + (prevision[f].l*1).toFixed() + "' alpha='100' />"; break;
		case 2017: str= "<set value='" + (prevision[f].m*1).toFixed() + "' alpha='100' />"; break;
	}
	return str;
}//fin obtener_dato_paraXMLchart();






/************************** dibujar_formulario_filtro_partidas(opcion) *************************/
//33 .- Llamado desde dibujar_chart()
// dibujar_formulario_filtro_partidas(opcion) --> Dibuja el formulario que permite la elección de las partidas
//                                                      --> Se dibuja en la celda 11
/*****************************************************************************************/
function dibujar_formulario_filtro_partidas(opcion) {
	switch (opcion)
		{
		case 'publico_partidas': 
			{
				//Se trata de un formulario con 7 input de tipo checkbox formando un conjunto de campos (fieldset), un legend y sin botón
	
				//de dentro-afuera
				//creo los 7 input de tipo checkbox, uno por año empezando por 2006
				var nodo_checkbox= new Array();
				for (var i=0; i<8; i++) {
					nodo_checkbox[i]=document.createElement("input");
					nodo_checkbox[i].type= "checkbox";
					nodo_checkbox[i].checked= true;
					nodo_checkbox[i].onclick= function () {actualizarChart('id_chart', opcion);}; //id_chart es el identificador del gráfico
				}
				nodo_checkbox[0].name= "Hospitalaria";
				nodo_checkbox[0].id= "Hospitalaria";
				nodo_checkbox[0].value= "Hospitalaria";
				
				nodo_checkbox[1].name= "Farmacia";
				nodo_checkbox[1].id= "Farmacia";
				nodo_checkbox[1].value= "Farmacia";
				
				nodo_checkbox[2].name= "Ambulatoria";
				nodo_checkbox[2].id= "Ambulatoria";
				nodo_checkbox[2].value= "Ambulatoria";
				
				nodo_checkbox[3].name= "Prótesis y traslados";
				nodo_checkbox[3].id= "Prótesis y traslados";
				nodo_checkbox[3].value= "Prótesis y traslados";
				
				nodo_checkbox[4].name= "Administración y salud pública";
				nodo_checkbox[4].id= "Administración y salud pública";
				nodo_checkbox[4].value= "Administración y salud pública";
				
				nodo_checkbox[5].name= "Gasto de capital";
				nodo_checkbox[5].id= "Gasto de capital";
				nodo_checkbox[5].value= "Gasto de capital";
				
				nodo_checkbox[6].name= "Transferencias";
				nodo_checkbox[6].id= "Transferencias";
				nodo_checkbox[6].value= "Transferencias";
				
				//creo un legend para los 7 input
				var nodo_legend= document.createElement ("legend");
				//y le cuelgo el texto de la leyenda
				nodo_legend.appendChild(document.createTextNode("Filtro por partidas"));
	
				//los 7 input de tipo radio y el legend, lo meto dentro de un fieldset
				//creo el nodo fieldset
				var nodo_fieldset= document.createElement("fieldset");
				//le uno el legend
				nodo_fieldset.appendChild(nodo_legend);
				//Al nodo fieldset le voy uniendo todos los elementos input radio
				nodo_fieldset.appendChild(nodo_checkbox[0]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[0].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[1]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[1].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[2]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[2].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[3]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[3].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[4]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[4].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[5]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[5].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[6]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[6].name));
		
				//tabla y botón, los uno al formulario	
				//creo un nodo formulario
				var nodo_formulario= document.createElement("form");
				//le asignamos el id 
				nodo_formulario.id="formulario_filtro_partidas_gpublico";
				//nodo_formulario.className="seccion";
				nodo_formulario.name="formulario_filtro_partidas_gpublico";
				//uno la tabla y el boton
				nodo_formulario.appendChild(nodo_fieldset);
				//Y el formulario lo meto en la celda  11 de la tabla  de la página
				document.getElementById("11").appendChild(nodo_formulario);
	
				for (var i=0; i<7; i++) {	
					document.getElementById(nodo_checkbox[i].name).checked= true; 
				}
				break;
			}
		case 'privado_partidas': 
			{
				//Se trata de un formulario con 3 input de tipo checkbox formando un conjunto de campos (fieldset), un legend y sin botón
	
				//de dentro-afuera
				//creo los 7 input de tipo checkbox, uno por año empezando por 2006
				var nodo_checkbox= new Array();
				for (var i=0; i<3; i++) {
					nodo_checkbox[i]=document.createElement("input");
					nodo_checkbox[i].type= "checkbox";
					nodo_checkbox[i].checked= true;
					nodo_checkbox[i].onclick= function () {actualizarChart('id_chart', opcion);}; //id_chart es el identificador del gráfico
				}
				nodo_checkbox[0].name= "Productos, aparatos y equipos médicos";
				nodo_checkbox[0].id= "Productos, aparatos y equipos médicos";
				nodo_checkbox[0].value= "Productos, aparatos y equipos médicos";
				
				nodo_checkbox[1].name= "Servicios sanitarios";
				nodo_checkbox[1].id= "Servicios sanitarios";
				nodo_checkbox[1].value= "Servicios sanitarios";
				
				nodo_checkbox[2].name= "Seguros privados";
				nodo_checkbox[2].id= "Seguros privados";
				nodo_checkbox[2].value= "Seguros privados";
				
				//creo un legend para los 3 input
				var nodo_legend= document.createElement ("legend");
				//y le cuelgo el texto de la leyenda
				nodo_legend.appendChild(document.createTextNode("Filtro por partidas"));
	
				//los 7 input de tipo radio y el legend, lo meto dentro de un fieldset
				//creo el nodo fieldset
				var nodo_fieldset= document.createElement("fieldset");
				//le uno el legend
				nodo_fieldset.appendChild(nodo_legend);
				//Al nodo fieldset le voy uniendo todos los elementos input radio
				nodo_fieldset.appendChild(nodo_checkbox[0]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[0].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[1]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[1].name + " | " ));
				
				nodo_fieldset.appendChild(nodo_checkbox[2]);
				nodo_fieldset.appendChild(document.createTextNode( nodo_checkbox[2].name));
		
				//tabla y botón, los uno al formulario	
				//creo un nodo formulario
				var nodo_formulario= document.createElement("form");
				//le asignamos el id 
				nodo_formulario.id="formulario_filtro_partidas_gprivado";
				//nodo_formulario.className="seccion";
				nodo_formulario.name="formulario_filtro_partidas_gprivado";
				//uno la tabla y el boton
				nodo_formulario.appendChild(nodo_fieldset);
				//Y el formulario lo meto en la celda  11 de la tabla  de la página
				document.getElementById("11").appendChild(nodo_formulario);
	
				for (var i=0; i<3; i++) {	
					document.getElementById(nodo_checkbox[i].name).checked= true; 
				}
				break;
			}
			
	}
//pendiente implementacion
}









//7.- poner enlaces de atrás e inicio
/********************************************************************************************/
/*******************************FUNCIONES GENERALES Y REUSABLES ************************/
/********************************************************************************************/


/********************addEvent() **************************************************************/
//Asocia un evento a un elemento del DOM
//las llamadas son       addEvent(document, ev, killReturn, false);
//donde:  document-> es donde se producen los eventos, objeto del DOM al que asociarle el manejador de eventos
//	      ev -> es el tipo de evento,  keypress, keydown, keyup, etc..
//            killReturn -> es el manejador
/********************************************************************************************/
function addEvent(obj, evType, fn, useCapture)
{
    // ie and fx function to add an event listener
    // this is getting executed everytime if a key is hit and its is not in a from field
    if (obj.addEventListener)  //firefox
    {
        //alert("addEventListener a real browser");
        obj.addEventListener(evType, fn, useCapture);
        return true;
    }
    else if (obj.attachEvent)   //IE
    {
        //alert("attachEvent IE");
        var r = obj.attachEvent("on" + evType, fn);
        return r;
    }
    else
    {
        alert("handler could not be attached");
    }
}






///////////////////////////////////////////////////////////////////////////
//Estas funciones la dejamos de prueba para saber el código de tecla que estoy pulsando
//Para la aplicación de SIMULACIÓN no se usa
function killReturn(evt)
{	//determinar el origen
    var target = evt.target || evt.srcElement, keyCode = evt.keyCode || evt.which; 
    //y eltipo de envento
	var targtype = target.type; 
	
	//es la llamada al verdadeo manejador
    dumpSomeEventPropertiesHTML(evt, "killReturn", target,targtype );
	f1(evt, target,targtype);
	
    if(keyCode == 13)
    { 
        alert("got a return");

       //just for grins lets see if this works
        switch (targtype)
        {
            case 'textarea':
            {
              alert('TextArea');
              break;
            }
           case 'file':
            {
              alert('file');
              break;
            }  
           case 'password':
            {
              alert('password');
              break;
            }  
            case 'text': 
            {
              alert('text');
              break; 
            }
            default:
            {
              alert('not in form');
            }
        }
        alert('Enter does nothing here'); 
        if(evt.preventDefault)     
        { 
           alert('evt.preventDefault')
           evt.preventDefault(); 
           evt.stopPropagation(); 
        }
        return false;
    }
    return true;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
function dumpSomeEventPropertiesHTML(evt, name, target,targtype )
{
        var msg = name + getTimeStamp() + "\n";
        msg += 'evt.which '      + evt.which + "\n";
        msg += 'evt.keyCode '    + evt.keyCode + "\n";
        msg += 'evt.charCode '   + evt.charCode + "\n";   //fx     
        msg += 'evt.pageX  '     + evt.pageX  + "\n";     //fx
        msg += 'evt.pageY '      + evt.pageY + "\n";      //fx
        msg += 'evt.isChar '     + evt.isChar + "\n";  
        msg += 'evt.screenX '    + evt.screenX + "\n";    //ie
        msg += 'evt.screenY '    + evt.screenY + "\n";    //ie
        msg += 'evt.clientX '    + evt.clientX + "\n";    //ie
        msg += 'evt.clientY '    + evt.clientY + "\n";    //ie
        msg += 'evt.isTrusted '  + evt.isTrusted + "\n";  //fx
        msg += 'evt.eventPhase ' + evt.eventPhase + "\n"; //fx 

     
		var phase;
		switch (evt.eventPhase)
		{
		   case 1: phase=" CAPTURING_PHASE ";break;
		   case 2: phase=" AT_TARGET ";break;
		   case 3: phase=" BUBBLING_PHASE ";break;
		   default: phase=" not 123 ";break;
		}   
		// to cancel input must be at CAPTURING_PHASE phase not AT_TARGET ?
          
        msg += 'evt.eventPhase ' + evt.eventPhase + phase + "\n";  //fx
        msg += 'evt.bubbles '    + evt.bubbles + "\n";             //fx
        msg += 'evt.cancelable ' + evt.cancelable + "\n";          //fx
        msg += 'evt.type '       + evt.type + "\n";                //ie keydown  fx keypress

		    //IE no likey 
        //msg += 'evt.target.id '        + evt.target.id + "\n";
		    //IE no likey 
        //msg += 'evt.currentTarget.id ' + evt.currentTarget.id + "\n";

		    msg += 'target               ' + target + "\n"; 
		    msg += 'targtype             ' + targtype + "\n";


alert(msg);          
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getTimeStamp()
{
	var now		= new Date();

	var hour	= now.getHours();
	var min		= now.getMinutes();
	var sec		= now.getSeconds();

	if (min <= 9) 
	{
		min = "0" + min;
	}

	if (sec <= 9) 
	{
		sec = "0" + sec;
	}

	if (hour > 12) 
	{
		hour = hour - 12;
		ampm = "PM";
	}
	else 
	{
		hour = hour;
		ampm = "AM";
	}
	
	if (hour == 12) 
	{
		ampm = "PM";
	}

	if (hour == 00) 
	{
		hour = "12";
	}
	
	if(hour <= 9)
	{
		hour =  "0" + hour 
	}

	var msg1 = hour;
	msg1 += ':' + min;
	msg1 += ':' + sec + "." + now.getMilliseconds();
	msg1 += ' ' + ampm + ' ';

	msg1 = " " + msg1 + " ";
	    
return msg1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
function f1(evt, target,targtype )
{
        var msg = "Has picado una tecla: \n"; //name + getTimeStamp() + "\n";
        msg += 'evt.which '      + evt.which + "\n";
        msg += 'evt.keyCode '    + evt.keyCode + "\n";
        msg += 'evt.charCode '   + evt.charCode + "\n";   //fx     
        msg += 'evt.pageX  '     + evt.pageX  + "\n";     //fx
        msg += 'evt.pageY '      + evt.pageY + "\n";      //fx
        msg += 'evt.isChar '     + evt.isChar + "\n";  
        msg += 'evt.screenX '    + evt.screenX + "\n";    //ie
        msg += 'evt.screenY '    + evt.screenY + "\n";    //ie
        msg += 'evt.clientX '    + evt.clientX + "\n";    //ie
        msg += 'evt.clientY '    + evt.clientY + "\n";    //ie
        msg += 'evt.isTrusted '  + evt.isTrusted + "\n";  //fx
        msg += 'evt.eventPhase ' + evt.eventPhase + "\n"; //fx 
	alert(msg);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//es como la addEvent, pero con un parámetro menos
function addEvent2(obj, evType, fn) {
if (obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
//addEvent(window, ‘load’, foo);
//addEvent(window, ‘load’, bar);





