	
	//Ctes del formulario para javascript
	var _columnas = 'c';
	var _filas = 'r';
	var _filtros = 'w';
	var _subtotal = 's';
	var _metrica = 'm';
	
	
	function refrescar() {
		// Evitar usar pagina ded cache
		if (document.formulario.cache.value == 'true')
			window.location.reload(true);
		else
			document.formulario.cache.value = 'true';
	}

	function rotar() 
	{
		for (i=0; i<document.formulario.elements.length; i++)
		{
			if (document.formulario.elements[i].name == _columnas)
				document.formulario.elements[i].name = _filas;
			else
				if (document.formulario.elements[i].name == _filas)
					document.formulario.elements[i].name = _columnas;	
		}
		goTo ("consulta.jsp");
	}

	function verGrafico ()
	{
		window.open ('','grafico');
		document.formulario.target = 'grafico';
		document.formulario.action='grafico.jsp';
		document.formulario.method = 'POST';
		document.formulario.submit();
	}

	function verMapa ()
	{
		window.open ('','mapa');
		document.formulario.target = 'mapa';
		document.formulario.action='grafico_mapa.jsp';
		document.formulario.method = 'POST';
		document.formulario.submit();
	}

	function verSubTotal ()
	{
		if (document.formulario.s.value == "0")
			document.formulario.s.value = "1";
		else
			document.formulario.s.value = "0";
		goTo ('consulta.jsp');
	}

	function atras()
	{
		history.back();
	}

	function cambiarMetrica(met)
	{
		document.formulario.m.value = met;
		goTo ('consulta.jsp');
	}

	function ordenar (variable, orden)
	{
		for (i=0; i<document.formulario.elements.length; i++)
		{
			if (document.formulario.elements[i].name == (variable + '_ORDEN'))
			{
				document.formulario.elements[i].value = orden;
				goTo ("consulta.jsp");
			}
		}
	}

	function goTo (page)
	{
		document.formulario.target = "_self";
		document.formulario.action=page;
		document.formulario.method = 'POST';
		document.formulario.submit();
	}

	function anyadeCol(col)
	{
		var i = 0;
		var insertado = false;

		while ((i < document.formulario.elements.length) && (!insertado))
		{
		 if (document.formulario.elements[i].name == 'vacant')
		 {
		  document.formulario.elements[i].name = _columnas;
		  document.formulario.elements[i].value = col;
		  insertado = true;
		 }
		 i++;
		}
		goTo ('consulta.jsp');
	}

	function anyadeFil(fil)
	{
		var i = 0;
		var insertado = false;

		while ((i < document.formulario.elements.length) && (!insertado))
		{
		 if (document.formulario.elements[i].name == 'vacant')
		 {
		  document.formulario.elements[i].name = _filas;
		  document.formulario.elements[i].value = fil;
		  insertado = true;
		 }
		 i++;
		}
		goTo ('consulta.jsp');
	}

	function profJer(variable, var_ac, val_va)
	{
		indAddCol = false;
		indAddFil = false;
		PerformAction(variable,var_ac, val_va);
	}
	
	function chequearSiExpandirEsPosible(var_ch, pFilas)
	{
		var indEx = true;

		if (pFilas == true)
		{
		 	var count = 0;
			for (var i=0; i<document.formulario.elements.length; i++)
			{
				if (document.formulario.elements[i].name == _filas)
				{
					count = count + 1;
				}
			}
			if (count > 2) 
			{
				alert('No puede tener m\xE1s de tres filas o columnas.');
				indEx = false;
			}
		}
		else
		{
		 	var count = 0;
			for (var i=0; i<document.formulario.elements.length; i++)
			{
				if (document.formulario.elements[i].name == _columnas)
				{
					count = count + 1;
				}
			}
			if (count > 2) 
			{
				alert('No puede tener m\xE1s de tres filas o columnas.');
				indEx = false;
			}
		}

	 	return indEx;
	}

	function expandir(var_ch, pFilas)
	{
		if (chequearSiExpandirEsPosible(var_ch, pFilas) == true)
		{
			if (pFilas == false)
			{
				indAddCol = true;
				indAddFil = false;
	 			PerformAction(var_ch, '', '');
			}

			if (pFilas == true)
			{
				indAddCol = false;
	 			indAddFil = true;
	 			PerformAction (var_ch, '', ''); 
			}
		}
	}

	function expandirEnPosicion(var_ch, pFilas, pos)
	{
		if (chequearSiExpandirEsPosible(var_ch, pFilas) == true)
		{
			if (pFilas == false)
			{
				indAddCol = true;
				indAddFil = false;
				//Se añade una columna en la posición 'pos'
				anyadeColEnPos(var_ch, pos);
			}

			if (pFilas == true)
			{
				indAddCol = false;
	 			indAddFil = true;
				//Se añade una fila en la posición 'pos'
				anyadeFilEnPos(var_ch, pos);
			}
		}
	}

	function PerformAction (var_ch, var_ac, val_va) 
	{
		if (indAddFil == true)
			anyadeFil(var_ch);
		else
		{
			if (indAddCol == true)
				anyadeCol(var_ch);
			else
			{
				var insertado=false;
				for (var z=0; z<document.formulario.elements.length; z++)
				{
					if (document.formulario.elements[z].value == var_ac)
						document.formulario.elements[z].value = var_ch;

					// Evitar volver a introducir un filtro 
					if (document.formulario.elements[z].name == _filtros && (document.formulario.elements[z].value == (var_ac +"="+ val_va)))
						insertado=true;
	
					if ((insertado==false) && (document.formulario.elements[z].name == "vacant"))
					{
						document.formulario.elements[z].name = _filtros;
						document.formulario.elements[z].value = (var_ac +"="+ val_va);
						insertado = true;
					}
				}
				goTo ('consulta.jsp');
			}
		}
	}
	
	// Ejecutar PerformAction teniendo en cuenta las variables anidadas
	function PerformActionAnidada(id, pVar, pValue){
	var anidada=false;
	if (variablesAnidadas != null){
		for (var i=0;i<variablesAnidadas.length;i++)
			if (id == variablesAnidadas[i][0][0]){	// Se trata de una variable anidada
				anidada=true;
				PerformAction(variablesAnidadas[i][variablesAnidadas[i].length-1][0], pVar, pValue);
				for (var j=variablesAnidadas[i].length-2;j>=0; j--)
					expandir(variablesAnidadas[i][j][0], pFilas);
				}
	}
	if (anidada == false) 
		PerformAction(id, pVar, pValue); // No se trata de una variable anidada		
	}

	function ValidarEmailBatch (emailStr) {

		var emailPat=/^(.+)@(.+)$/; 	 	/* Verificar si el email tiene el formato user@dominio. */
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";  	/* Verificar la existencia de caracteres. ( ) < > @ , ; : \ " . [ ] */
		var validChars="\[^\\s" + specialChars + "\]"; 	 	/* Verifica los caracteres que son válidos en una dirección de email */
		var quotedUser="(\"[^\"]*\")"; 
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;	 /* Verifica si la dirección de email está representada con una dirección IP Válida */ 
		var atom=validChars + '+';		 /* Verificar caracteres inválidos */ 
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	
		var matchArray=emailStr.match(emailPat);
		if (matchArray==null)
			return false;

		var user=matchArray[1];
		var domain=matchArray[2];

		if (user.match(userPat)==null)   	/* Si el user "user" es valido  */
			return false;
	
		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) {				/* Si la dirección IP es válida */
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255)
					return false;
			}
			return true;
		}

		var domainArray=domain.match(domainPat);
		if (domainArray==null)
			return false;

		var atomPat=new RegExp(atom,"g");
		var domArr=domain.match(atomPat);
		var len=domArr.length;
		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)
			return false;

		if (len<2)
			return false;
	
		return true;	  /* La dirección de email ingresada es Válida */
	}

	function ValidarBatch()
	{
		if (formBatch.nombreyapellidos.value == "") {
			alert ("Es obligatorio introducir su Nombre y apellidos.");
			return false;
		}
   		if (formBatch.telefono.value == "") {
			alert ("Es obligatorio introducir su Tel\xE9fono.");
			return false;
		}
		if (ValidarEmailBatch(formBatch.email.value) == false) { 
			alert ("La direcci\xF3n de correo electr\xF3nico es err\xF3nea.");
			return false;
		}
		if (formBatch.descconsbatch.value == "") { 
			alert ("Por favor, introduzca una breve descripci\xF3n de la consulta de manera que luego le resulte m\xE1s sencillo su identificaci\xF3n.");
			return false;
		}
		if (formBatch.organizacion.value == "") {
			alert ("Es obligatorio introducir su Organizaci\xF3n.");
			return false;
		}
		if (hasInvalidChars(document.formBatch) == true){
			alert ("No se pueden introducir caracteres inv\xE1lidos (>, <).");
			return false;
		}
			descconsbatch
	}

	function eliminaElem(nombreElem, valorElem)
	{

		for (i=0; i<document.formulario.elements.length; i++)
		{
			if (document.formulario.elements[i].name == nombreElem)
			{
				if (document.formulario.elements[i].value == valorElem)
				{
					document.formulario.elements[i].name = 'vacant';
					break;	
				}
			}
		}
		
		goTo ('consulta.jsp');	
	}

	function anyadirFilaPpo(nombreFila)
	{
		for (i=0; i<document.formulario.elements.length; i++)
		{
			if (document.formulario.elements[i].name == _filas)
			{
				var aux = document.formulario.elements[i].value;
				document.formulario.elements[i].value = nombreFila;
				for (j=i+1; j<document.formulario.elements.length; j++)
				{

					if (document.formulario.elements[j].name == _filas)
					{
						var auxDos = document.formulario.elements[j].value;
						document.formulario.elements[j].value = aux;
						aux = auxDos;
					}
					else if (document.formulario.elements[j].name == 'vacant')
	 					 {
						 	 document.formulario.elements[j].name = _filas;
						 	 document.formulario.elements[j].value = aux;
							 break;
						 }
				}
				break;
			}
			else
			{ 
				if (document.formulario.elements[i].name == 'vacant')
				{
				 	 document.formulario.elements[i].name = _filas;
				 	 document.formulario.elements[i].value = nombreFila;
				 	 break;
				} 
			 }
		}
		goTo ('consulta.jsp');
	}

	function anyadeColEnPos(col, pos)
	{
		var i=0;
		var j=0;
		var insertado=false;
		var cont=-1;
		
		while ((i < document.formulario.elements.length) && (!insertado))
		{
		 	if (document.formulario.elements[i].name == _columnas)
		 	{
		 		if (cont==pos)
		 		{
		 			var valueAnt = document.formulario.elements[i].value;
		 		
		 			document.formulario.elements[i].value = col;
		 			insertado = true;
		 		
		 			for (j=i+1; j<document.formulario.elements.length; j++)
		 			{
		 				if (document.formulario.elements[j].name == _columnas)
		 				{	
		 					var aux = document.formulario.elements[j].value;
		 					document.formulario.elements[j].value = valueAnt;
		 					valueAnt = aux;
		 				}
		 				else if (document.formulario.elements[j].name == 'vacant')
		 					 {
		 				 		document.formulario.elements[j].name = _columnas;
		 				 		document.formulario.elements[j].value = valueAnt;
		 				 		break;
		 				 	 }
		 			}
		 			break;
		 		}
				cont = cont + 1;		 	
		 	}
		 	else
		 	{
				if (document.formulario.elements[i].name == 'vacant')
				{
				 	 document.formulario.elements[i].name = _columnas;
				 	 document.formulario.elements[i].value = col;
				 	 break;
				} 
		 	}
		 	i++;
		}
		goTo('consulta.jsp');
	}
	
	function anyadeFilEnPos(fil, pos)
	{
		var i=0;
		var j=0;
		var insertado=false;
		var cont=-1;

		while ((i < document.formulario.elements.length) && (!insertado))
		{
		 	if (document.formulario.elements[i].name == _filas)
		 	{
		 		if (cont==pos)
		 		{
		 			var valueAnt = document.formulario.elements[i].value;
		 		
		 			document.formulario.elements[i].value = fil;
		 			insertado = true;
		 		
		 			for (j=i+1; j<document.formulario.elements.length; j++)
		 			{
		 				if (document.formulario.elements[j].name == _filas)
		 				{	
		 					var aux = document.formulario.elements[j].value;
		 					document.formulario.elements[j].value = valueAnt;
		 					valueAnt = aux;
		 				}
		 				else if (document.formulario.elements[j].name == 'vacant')
		 					 {
		 				 		document.formulario.elements[j].name = _filas;
		 				 		document.formulario.elements[j].value = valueAnt;
		 				 		break;
		 				 	 }
		 			}
		 			break;
		 		}
				cont = cont + 1;		 	
		 	}
		 	else
		 	{
				if (document.formulario.elements[i].name == 'vacant')
				{
				 	 document.formulario.elements[i].name = _filas;
				 	 document.formulario.elements[i].value = fil;
				 	 break;
				} 
		 	}
		 	i++;
		}
		goTo('consulta.jsp');
	}


	function drillUp(varAntJer, varAct)
	{
		for (var i=0; i<document.formulario.elements.length; i++)
		{
			if (document.formulario.elements[i].value == varAct)
			{
				document.formulario.elements[i].value = varAntJer;
				break;
			}
		}
		goTo('consulta.jsp');
	}


	// Funcionalidades avanzadas
	function guardarConsulta ()
	{
		window.open ('','guardar', 'left=0,top=0,width=800,height=600,scrollbars=yes');
		document.formulario.target = 'guardar';
		document.formulario.action='sec_guardarcons_form.jsp';
		document.formulario.method = 'GET';
		document.formulario.submit();
	}

	function aplicarFiltro()
	{
		window.name = 'consulta';
		window.open ('','aplicar_filtro', 'left=0,top=0,width=800,height=600,scrollbars=yes');
		document.formulario.target = 'aplicar_filtro';
		document.formulario.action='sec_aplicar_filtro.jsp';
		document.formulario.method = 'GET';
		document.formulario.submit();
	}

	function crearFormato()
	{
		window.open ('','crear_fmt', 'left=0,top=0,width=800,height=600,scrollbars=yes');
		document.formulario.target = 'crear_fmt';
		document.formulario.action='sec_crearfmt_selecvar.jsp';
		document.formulario.method = 'GET';
		document.formulario.submit();
	}

	function aplicarFormato()
	{
		window.name = 'consulta';
		window.open ('','aplicar_fmt', 'left=0,top=0,width=800,height=600,scrollbars=yes');
		document.formulario.target = 'aplicar_fmt';
		document.formulario.action='sec_aplicar_fmt.jsp';
		document.formulario.method = 'GET';
		document.formulario.submit();
	}
	
	
	// Funcionalidades inframunicipal
	function getVerMapaInf(pVar)
	{
		window.open ('mapa_infra.jsp?' + pVar + '=' + pValue, 'descripcion', 'left=30,top=20,width=710,height=400,scrollbars=yes');	
	}

	function getDescriptionInf(pVar)
	{
		window.open ('descripcion_infra.jsp?' + pVar + '=' + pValue, 'descripcion', 'left=30,top=20,width=710,height=400,scrollbars=yes');
	}

