//////////////////////////////////////////////////////////////////////////////////////////
// GESTIÓN DE LA AYUDA
//////////////////////////////////////////////////////////////////////////////////////////
function clickHandler(oEvent,targetId) 
{
	oElem=document.getElementById(targetId);
	if (oElem!=null)
  {
	  if (oElem.style.display == "") oElem.style.display = "none";
	  else oElem.style.display = "";
	}
	if (NavegadorIE())
	{
    oEvent.cancelBubble = true;
	  oEvent.returnValue = false;
	}
	else
	{
		oEvent.stopPropagation();
		oEvent.preventDefault();
	}
}

function clickHandlerCheck(oEvent,targetId,checkId) 
{
	oElem=document.getElementById(targetId);
	oElemCheck=document.getElementById(checkId);
	if (oElem!=null)
	{
	  if (oElemCheck.checked == false) 
	  {
		oElem.style.display = "none";
	  }
	  else
	  {
	    oElem.style.display = "";
	  }
	  TratarDatosSolicitante(oElemCheck.checked)
	}

	/*
	if (NavegadorIE())
	{
   oEvent.cancelBubble = true;
	  oEvent.returnValue = false;
	}
	else
	{
		oEvent.stopPropagation();
		oEvent.preventDefault();
	}
	*/
}

function TratarDatosSolicitante(bTratar)
{
	var oSolicitante, oRepresentante;
	var oSolicitante2, oRepresentante2;		
	
	//Nombre
	oSolicitante = ObtenerObjetoControl('WTGNOMBRE', 'WTXNOMBRE');
	oRepresentante = document.getElementById('WTXIPRNOM');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Primer apellido
	oSolicitante = ObtenerObjetoControl('WTGAPELL1','WTXAPELL1');
	oRepresentante = document.getElementById('WTXIPRAP1');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Segundo apellido
	oSolicitante = ObtenerObjetoControl('WTGAPELL2','WTXAPELL2');
	oRepresentante = document.getElementById('WTXIPRAP2');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Razon Social
	oSolicitante = ObtenerObjetoControl('WTXIPSRAS','');
	oRepresentante = document.getElementById('WTXIPRRAS');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Tipo de documento	
	oSolicitante = ObtenerObjetoControl('WTXIPSTDO','');
	oRepresentante = document.getElementById('WTXIPRTDO');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Numero de documento
	oSolicitante = ObtenerObjetoControl('WTGNUMDOC','WTXNUMDOC');
	oRepresentante = document.getElementById('WTXIPRDNI');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Tipo de via
	oSolicitante = ObtenerObjetoControl('WTXIPSDO0','');
	oRepresentante = document.getElementById('WTXIPRDO0');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Nombre de la via
	oSolicitante = ObtenerObjetoControl('WTXIPSDO1','');
	oRepresentante = document.getElementById('WTXIPRDO1');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
		
	//Numero
	oSolicitante = ObtenerObjetoControl('WTXIPSDO2','');
	oRepresentante = document.getElementById('WTXIPRDO2');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Bloque
	oSolicitante = ObtenerObjetoControl('WTXIPSDO3','');
	oRepresentante = document.getElementById('WTXIPRDO3');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Escalera
	oSolicitante = ObtenerObjetoControl('WTXIPSDO4','');
	oRepresentante = document.getElementById('WTXIPRDO4');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Planta
	oSolicitante = ObtenerObjetoControl('WTXIPSDO5','');
	oRepresentante = document.getElementById('WTXIPRDO5');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Puerta
	oSolicitante = ObtenerObjetoControl('WTXIPSDO6','');
	oRepresentante = document.getElementById('WTXIPRDO6');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Provincia//Municipio
	oSolicitante = ObtenerObjetoControl('WTXIPSMU0','');
	oRepresentante = document.getElementById('WTXIPRMU0');
	oSolicitante2 = ObtenerObjetoControl('WTXIPSMU1','');
	oRepresentante2 = document.getElementById('WTXIPRMU1');
	EstablecerComportamientoControlesMulti(oSolicitante, oRepresentante, oSolicitante2, oRepresentante2, bTratar);
	
	//Codigo Postal
	oSolicitante = ObtenerObjetoControl('WTXIPSCPO','');
	oRepresentante = document.getElementById('WTXIPRCPO');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Telefono 1
	oSolicitante = ObtenerObjetoControl('WTGTELEF1','WTXTELEF1');
	oRepresentante = document.getElementById('WTXIPRTE1');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Telefono 2
	oSolicitante = ObtenerObjetoControl('WTXIPSTE2','');
	oRepresentante = document.getElementById('WTXIPRTE2');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
	
	//Direccion electronica
	oSolicitante = ObtenerObjetoControl('WTGDIRMAI','WTXDIRMAI');
	oRepresentante = document.getElementById('WTXIPRDEM');
	EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar);
}

function ObtenerObjetoControl(sNombreCtl, sNombreAux)
{
	var oControl;
	oControl = document.getElementById(sNombreCtl);
	if ((oControl == null)&&(sNombreAux != '')){
		oControl = document.getElementById(sNombreAux);
	}
	return oControl;
}

function EstablecerComportamientoControlesMulti(oSol1,oRep1,oSol2,oRep2, bTratar)
{
	var oValor;
	if ((oRep1!=null)&&(oRep2!=null)&&(oSol1!=null)&&(oSol2!=null)){
		if (bTratar){
			// Check marcada
			oRep1.value = oSol1.value;
			oValor = (oSol2.value.length - 1) - (oSol2.value.lastIndexOf('-'));
			if ((oSol1.value.length > 0)&&(oValor > 0)){
				LlenarListaAsociada(oRep2,'_LPRO',oRep1.value,false,false)
				oRep2.value = oSol2.value;
			}
			oSol1.value = '';
			oSol2.value = '';
			
			if (oSol1.readOnly==true) oRep1.readOnly = true;	
			if (oSol2.readOnly==true) oRep2.readOnly = true;	
			oSol1.readOnly = false;
			oSol2.readOnly = false;
		}
		else{
			// Check desmarcada
			oSol1.value = oRep1.value;
			oValor = (oRep2.value.length - 1) - (oRep2.value.lastIndexOf('-'));
			if ((oRep1.value.length > 0)&&(oValor > 0)){
				LlenarListaAsociada(oSol2,'_LPRO',oSol1.value,false,false)
				oSol2.value = oRep2.value;
			}
			oRep1.value = '';
			oRep2.value = '';
			
			if (oRep1.readOnly==true) oSol1.readOnly = true;	
			else oSol1.readOnly = false;	
			if (oRep2.readOnly==true) oSol2.readOnly = true;	
			else oSol2.readOnly = false;	
			oRep1.readOnly = false;
			oRep2.readOnly = false;
		}
	}
}

function EstablecerComportamientoControles(oSolicitante, oRepresentante, bTratar)
{
	if ((oSolicitante!=null)&&(oRepresentante!=null)){
		// Existe el campo en los dos apartados "datosSolicitante" y "datosRepresentante".
		if (bTratar){ 
			// Check marcada
			oRepresentante.value = oSolicitante.value;
			oSolicitante.value = '';
			
			if (oSolicitante.readOnly==true){
				oRepresentante.readOnly = true;	
			}
			oSolicitante.readOnly = false;
		}
		else{
			// Check desmarcada
			oSolicitante.value = oRepresentante.value;
			oRepresentante.value = '';
			if (oRepresentante.readOnly==true){
				oSolicitante.readOnly = true;	
			}
			else{
				oSolicitante.readOnly = false;	
			}
			oRepresentante.readOnly = false;
		}
	}
	else{
		// Puede que exista el campo en alguno de los apartados o puede que no.
		if ((oSolicitante!=null)&&(bTratar)) oSolicitante.value='';
		if ((oRepresentante!=null)&&(!bTratar)) oRepresentante.value='';
	}
}

//////////////////////////////////////////////////////////////////////////////////////////
// VALIDACIONES DE LOS CAMPOS DE EDICIÓN
//////////////////////////////////////////////////////////////////////////////////////////
function quina_lletra (Dni){
	var lletra=new Array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
	if (isNaN(Dni)) return false;
                else  return (lletra[Dni%23]); 
}

function CalculaNIF(nif) {
	var dni;
	var lletra;
	var lletra_correcta;
	nif=nif.toUpperCase( );
	if (isNaN(nif)) {
		if ((nif.length>2)&&(nif.length<10)) {	
			dni=nif.substring(0,nif.length-1); 
			lletra=nif.substring(nif.length-1,nif.length);
			if (isNaN(dni)) {
				alert ("El NIF no tiene un formato correcto: '99999999Q'. Si se escribe solo el DNI se calculará automáticament el NIF.");
			} else {	
				lletra_correcta=quina_lletra(dni);
				if (lletra_correcta==false){
					alert ("El NIF no tiene un formato correcto: ( 99999999Q ). Si se escribe solo el DNI se calculará automáticament el NIF.");
				}
				if (lletra!=lletra_correcta) {
					alert ("Se corregirá la letra del NIF. Le corresponde la ".concat(lletra_correcta)) ;
					return dni.concat(lletra_correcta);
				}
			}
		}
        } else  {
        		if(nif.length<10){
        			//return nif.concat(quina_lletra(nif)); 
        			return quina_lletra(nif);
        		}
        }
	return "";
}

function validaDecimal(decimal){	
	
	if(decimal.indexOf(',')>=0) return false;
	separador=decimal.indexOf('.');
	
	if (separador<1) {partEntera=decimal;partDecimal=0;
	}else{
		partEntera=decimal.substring(0,separador);
		partDecimal=decimal.substring(separador+1);
	}
	
	if (!(validaNumero(partDecimal)) || (partDecimal.length>2) ) return false;
	if (!(validaNumero(partEntera)) || (partEntera.length>3) ) return false;
	return true;
}
function validaNumero(num){
	
	for(i=0;i<num.length;i++){
		if (num.charAt(i)<'0' || num.charAt(i)>'9')return false;
	}
	return true;
}

function validaLetras(num){
	
	for(i=0;i<num.length;i++){
		if (num.charAt(i)<'a' || num.charAt(i)>'Z')return false;
	}
	return true;
}

function CampoObligatorio(valor){
//  if (valor.length>0){
//  } else{
//  	alert (strInformarCampo);
//  }
}

function ValidarDatos(){
	var coll = document.all;
	if (coll!=null) {
	    for (i=0; i<coll.length; i++) 
	        alert(coll.item(i).tagName);
	}
}

function showElements(oEvent,theForm) {   
  var oCampo,value,name,sDescripcion,sTipoCampo,lLongitud,sOblig,j,bError,sMensajeError,oBtnAceptar,oBtnAtras,oSpanImg;

    //SMP 14/05/07
	if (typeof ActualizaBeforeShowError != 'undefined')
     {		
			ActualizaBeforeShowError(theForm.id);
	 }
	//SMP 14/05/07
	
	oBtnAceptar=theForm['btnAceptar'];
	oBtnAtras=theForm['btnAtras'];
	if (oBtnAceptar!=null) oBtnAceptar.disabled=true;
	if (oBtnAtras!=null) oBtnAtras.disabled=true;

	value=theForm.elements[0].value;
	for (i = 0; i < theForm.length; i++) 
	{
		if ((name!=theForm.elements[i].name) && (theForm.elements[i].name != 'btn_'+name))
		{
			oCampo=theForm.elements[i];
			name=theForm.elements[i].name;
			value=theForm.elements[i].value;
			j=0;
			bError=false;
			if ((theForm.elements[i].style.color=='Red')||(theForm.elements[i].style.color=='red'))
			{
				bError=true;
				sMensajeError=strCampoIncorrectoRojo;
			}
			//** AGA 13/09/2006: Modificación para campos obligatorios en formularios de consultas
			if(name!=undefined && value!=undefined)
			{
				switch(theForm.elements[i].type.substr(0,6))
				{
					case 'select':
						if((theForm.elements[i].onblur+' ').indexOf('CampoObligatorio')>=0 && theForm.elements[i].selectedIndex<0)
						{
							bError=true;
							sMensajeError=strCampoObligatorio;
						}
						//** AGA 02/11/2006: Si el campo está desactivado en una consulta no se envía el valor
						//if (theForm.elements[i].disabled == true && name.substr(0,4) == 'FIL_') theForm.elements[i].disabled = false;

						break;
						
					case 'hidden':

						//** AGA: 24/10/2006 
						// Campos de tipo fecha y hora, actualizamos el valor del hidden antes de comprobar si es
						// obligatorio o no y si está vacío
						if ((name.length != 0) &&
							document.getElementById(name) && 
							document.getElementById(name + '0') && 
							document.getElementById(name + '1'))
						{
							var sNew;
							sNew = ActualizarFechaHora(theForm.elements[i].name);
							if (value != sNew && sNew.length > 0)
								value = sNew;
						}
						break;
					
					default:
						if((theForm.elements[i].onblur+' ').indexOf('CampoObligatorio')>=0 && value.length==0)
						{
							bError=true;
							sMensajeError=strCampoObligatorio;
						}
						break;
					
				}
 
 				if (bError)
				{	
					if (oCampo.type != 'hidden') oCampo.focus();
					alert(sMensajeError);
					if (oBtnAceptar!=null) oBtnAceptar.disabled=false;
					if (oBtnAtras!=null) oBtnAtras.disabled=false;
					if (NavegadorIE())
					{
						oEvent.cancelBubble = true;
						oEvent.returnValue = false;
					}
					else
					{
						oEvent.stopPropagation();
						oEvent.preventDefault();
					}
					break;
				}
			}
		}
		else
		{
			var iOffset;
			
			if (j==1) 
			{
				//** AGA 20/07/2006: Cuando el campo es de tipo fecha, hay un control intermedio 
				//				(el botón que desplega el calendario de selección), cosa que hace que 
				// 				el resto de datos, aparezcan una posición más allá de lo esperado.
				if (theForm.elements[i].name == 'btn_'+name)
				{
					i++;
				}
				sTipoCampo=theForm.elements[i].value;
			}
			else
			{
				if (j==2) lLongitud=theForm.elements[i].value;
				else
				{
					if (j==3) sDescripcion=theForm.elements[i].value;
					else 
					{
						if (j==5) 
						{
								if (sTipoCampo=='date')
								{
									//** AGA: 24/10/2006 
									// Campos de tipo fecha y hora, actualizamos el valor del hidden antes de comprobar si es
									// obligatorio o no y si está vacío
									var sNew;
									sNew = ActualizarFechaHora(theForm.elements[i].name);
									if (value != sNew && sNew.length > 0)
										value = sNew;
								}
						
							sOblig=theForm.elements[i].value;
							if ((theForm.elements[i].value=="not null") && (value.length==0))
							{
								// Campo obligatorio no informado
								bError=true;
								sMensajeError=strCampoObligatorio;
							}
							else
							{
								if (sTipoCampo=='date')
								{
									// Podemos tener un campo de tipo fecha o de tipo fecha y hora, los distinguimos
									// porque en este último caso tenemos dos campos auxiliares
									if (document.getElementById(theForm.elements[i].name + '0') &&
											document.getElementById(theForm.elements[i].name + '1'))

									{
										var sData, sHora;
										sData = document.getElementById(theForm.elements[i].name + '0').value;
										sHora = document.getElementById(theForm.elements[i].name + '1').value;
								
										if ((sData.length == 0 && sHora.length != 0))
										{
											// Fecha y/o hora incorrectas
											bError=true;
											sMensajeError=strCampoIncorrecto;
											document.getElementById(theForm.elements[i].name + '0').focus();
										}
										else if ((sData.length != 0 && sHora.length == 0))
										{
											// Fecha y/o hora incorrectas
											bError=true;
											sMensajeError=strCampoIncorrecto;
											document.getElementById(theForm.elements[i].name + '1').focus();
										}
										else if (sData.length > 0 && !Validar_Data(sData))
										{
											// Fecha y/o hora incorrectas
											bError=true;
											sMensajeError=strCampoIncorrecto;
											document.getElementById(theForm.elements[i].name + '0').focus();
										}
										else if(sHora.length > 0 && !Validar_Hora(sHora))
										{
											bError=true;
											sMensajeError=strCampoIncorrecto;
											document.getElementById(theForm.elements[i].name + '1').focus();										
										}
									}
									else if (!Validar_Data(value))
									{
											// Fecha incorrecta
											bError=true;
											sMensajeError=strCampoIncorrecto;										
									}
								}
								
								if ((sTipoCampo=='decimal') && (!Validar_Numero(value,lLongitud)))
								{
									// Campo numérico incorrecto
									bError=true;
									sMensajeError=strCampoIncorrecto;
								}
							}

							
							// Si se ha producido un error, mostramos un mensaje y paramos la validación
							if (bError)
							{
								if (oCampo.type != 'hidden') oCampo.focus();
								alert(sMensajeError);
								if (oBtnAceptar!=null) oBtnAceptar.disabled=false;
								if (oBtnAtras!=null) oBtnAtras.disabled=false;
								if (NavegadorIE())
								{
									oEvent.cancelBubble = true;
									oEvent.returnValue = false;
								}
								else
								{
		  						oEvent.stopPropagation();
									oEvent.preventDefault();
								}
								break;
							}

						}
						else
						{
							if(j==9)
							{
								if (sTipoCampo == 'varchar' && theForm.elements[i].value == '|WTCESIMAG=S|')
								{
									// Validación obligatoriedad campo de tipo imagen.
									// Dado que en el valor del campo se pasan códigos de control (concretamente
									// las dimensiones de la imagen) tanto si se ha informado el campo
									// como si no, el control de obligatoriedad no funciona ya que aparentemente
									// el campo nunca está vacío.
									
									// Para ver si se ha informado el campo miramos si el campo span donde se 
									// introduce información de los adjuntos seleccionados está vacío o no.
									
									oSpanImg=document.getElementById('spanAttachText' + name);
									
									if (oSpanImg)
									{										
			
										if (sOblig == 'not null' && TrimNoTxt(oSpanImg.innerHTML)=='')
										{
											// Campo obligatorio no informado
											bError=true;
											if (sDescripcion != '')
												sMensajeError= '"' + sDescripcion + '": ' + strCampoObligatorio;
											else
												sMensajeError= strCampoObligatorio;
											
											alert(sMensajeError);
	
											document.getElementById('linkAttachImg' + name).focus();
	
											if (oBtnAceptar!=null) oBtnAceptar.disabled=false;
											if (oBtnAtras!=null) oBtnAtras.disabled=false;
											if (NavegadorIE())
											{
												oEvent.cancelBubble = true;
												oEvent.returnValue = false;
											}
											else
											{
					  						oEvent.stopPropagation();
												oEvent.preventDefault();
											}
											break;
										}
									}
								}
							}
						}
	
					}
				}
			}
		}
		j++;	
	}
	
	//SMP 14/05/07
	var HayAlgunError = false;
	if (i<(theForm.length ))
	{
	 // alert((theForm.length - 1 ) + "   " + i);
	  //SMP 10/05/07
	  HayAlgunError = true;
	  if (typeof ActualizaAfterShowError != 'undefined')
        {		 
		  ActualizaAfterShowError(theForm.id,HayAlgunError); 
		  
		  
		 }
	
	
	}
	
	//SMP 14/05/07
	if (!bError)
	{
		if (winAttachEDF)
		{
			if (!winAttachEDF.closed) winAttachEDF.close();
		}
		
		if (hayElementoFirma(theForm))
		{
			if (firmar(theForm,theForm.FIRMA_SOLICITUD,oEvent))
			{
				theForm.submit();
			}						
		}
		else
		{
			theForm.submit();
		}		
	}
}

function TrimNoTxt(s) 
{
	if((s==null)||(typeof(s)!='string')||!s.length)return'';
	
	return s.replace(/^\s+/,'').replace(/\s+$/,'') 
}

//---------------------------------------------
// Firma del formulario
//----------------------------------------------

function insertarObjetoFirma()
{
	if (NavegadorIE())
	{
		document.write( "<object codebase=\"https://tram.ajuntaments.info/ABSIS/EAD/MTM/ocx/FormSign.ocx#version=4,1,2,13\" classid=\"clsid:AC2CD8BB-8E60-45B4-B415-1EB1C04E7753\" id=crypto></object>" );
	}
}

function hayElementoFirma(theForm)
{
	return 	(theForm.elements.namedItem('FIRMA_SOLICITUD')!=null);
}

function hayElementoIdCertificado(theForm)
{
	return 	(theForm.elements.namedItem('ID_CERTIFICADO').value!="#|#");
}

function firmar(theForm, signature,oEvent) {
	
	var name,value;
	var sXmlDoc,sXmlCampo,sTextoAFirmar,sFirma;
	var bTipoLista,bTipoSubLista
	var numElems,z;
	var aCod;
	var oBtnAceptar,oBtnAtras;
	var sIdEntidad,sIdioma;
	var bOk;
	var iNumDecimales;

  bOk=true;
  sTextoAFirmar="";
  sXmlDoc="<datosFirma><campos>";
 
  //Obtenemos la entidad y el idioma
	if (theForm.elements.namedItem('WTGCODENT'))
	{
		sIdEntidad=theForm.elements.namedItem('WTGCODENT').value;
  }
  
  if (theForm.elements.namedItem('WTGIDIOMA'))
	{
		sIdioma=theForm.elements.namedItem('WTGIDIOMA').value;
  }
  
  value=theForm.elements[0].value;		
	
	for (i = 0; i < theForm.length; i++) 
	{		
		bTipoLista=false;
		bTipoSubLista=false;
    oCampo=theForm.elements[i];
      
		name=theForm.elements[i].name;
		value=theForm.elements[i].value;
						
	  if (name)
	  {
			if ((name.substr(0,4) != "RFS_")&&((name.substr(0,3) != "WTS")))
			{	  	
				numElems=document.getElementsByName(name).length;
				if (!numElems) numElems=1;
				
				/* ARL 11-01-07 >> Comprobar si se trata de un campo que se ha de guardar en BD. Si no es así, no se ha */
				/* de incluir en el cálculo de la firma */
				var bIncluirEnFirma = true;
				if (numElems>=9)
				{
					if (document.getElementsByName(name)[8].value == 'false')
					// El campo está configurado para que no se guarde en BD
						bIncluirEnFirma = false;
				}

				if (bIncluirEnFirma)
				{			

					z=-1;
	
					//ARL 10/10/06 >> Si se trata de un decimal, ponemos una marca en el campo para que al comprobar la firma se sepa
					//que se ha de utilizar la coma como separador del valor decimal
					if ( (numElems>=9) && (document.getElementsByName(name)[1].value == 'decimal') && (value!="") )
						sXmlCampo="<campo dec='1'>" + name + "</campo>"			
					else
						sXmlCampo="<campo dec='0'>" + name + "</campo>"			
					
					if (numElems==3)
					{
						//Es un fichero adjunto, obtenemos su contenido
						name=theForm.elements[i+2].value;				
						value=ObtenerContenidoFichero(sIdEntidad,sIdioma,theForm.elements[i+2].value);
						sXmlCampo="<fichero>" + name + "</fichero>"			
					}			
				
					if (numElems==8)
					{
						//Si hay 8 parametros, se trata de una check que no ha sido marcada
						z=1;
						value='N';
					}
					
					if (numElems>=9)
					{
						z=2;
						//ARL 10/10/06 >> Si se trata de un numérico decimal, formateamos el valor añadiendo los ceros decimales necesarios
						//al final en función de la longitud. Esto es necesario porque el valor almacenado en BD tendrá todos los ceros decimales
						//al final, y si al firmar no se tienen en cuenta posteriormente la validación de la firma no será correcta
						//Forzamos a que el separador decimal sea una ',', para evitar problemas de configuración regional. En la intratramites, al
						//recuperar el valor de la BD, tambien usaremos como separador decimal la coma para comprobar la firma
						if ( (document.getElementsByName(name)[1].value == 'decimal') && (value!="") )
						{
							iNumDecimales = document.getElementsByName(name)[2].value;
							value = FormatearDecimal(value,iNumDecimales);
						}
					}
					
					if (z>0)
					{
						if(numElems>=z+8)
						{
							//Se trata de un campo de tipo lista o subLista, recuperamos sólo el codificador
							if (value!="")
							{
								aCod=value.split('-');
								value=aCod[0];
							}				
						}
					}
					
					i=i+numElems-1;
					
					if (numElems!=1)
					{
						sTextoAFirmar=sTextoAFirmar + value;
						//ARL 18-01-06 >> Solo incluiremos los campos que tengan valor, es decir, aquellos que se han utilizado para firmar				
						if (value!="")				
							sXmlDoc	=sXmlDoc + sXmlCampo;
					}
				}
				else
					i=i+numElems-1;

			}
			
		}
					
	}

  //FIRMA DE LA SOLICITUD
	try
	{
		var bFiltrado=false;
		if (NavegadorIE())
		{
			if (hayElementoIdCertificado(theForm))
			{
					var idCertificado=theForm.elements.namedItem('ID_CERTIFICADO').value;
					
					aElems=idCertificado.split('#|#');
					//Filtrar por emisor

					/* Si el id tiene menos de 4 digitos (en hexadecimal) y comienza por '8','9','a','b','c','d', o 'e', se produce un error */
					/* por culpa del ocx de catcert. En estos casos, es necesario rellenar con ceros por delante */
					var k;
					if (aElems[1].length < 4)
					{
						if ((aElems[1].substring(0,1)=='8') || (aElems[1].substring(0,1)=='9') || (aElems[1].substring(0,1)=='a') || (aElems[1].substring(0,1)=='b') || (aElems[1].substring(0,1)=='c') || (aElems[1].substring(0,1)=='d') || (aElems[1].substring(0,1)=='e') || (aElems[1].substring(0,1)=='f') ||
							  (aElems[1].substring(0,1)=='A') || (aElems[1].substring(0,1)=='B') || (aElems[1].substring(0,1)=='C') || (aElems[1].substring(0,1)=='D') || (aElems[1].substring(0,1)=='E') || (aElems[1].substring(0,1)=='F'))
						{
							for (k=aElems[1].length;k<4;k++)
								aElems[1] = "0" + aElems[1];
						}
					}
					
					sFirma=crypto.signTextWithFilter(sTextoAFirmar,'',aElems[1] ,'');
					bFiltrado=true;

			}
			else
			{
					sFirma=crypto.signText(sTextoAFirmar);
			}
		}						
		else
		{
			sFirma=crypto.signText(sTextoAFirmar,"ask")
		};
	}
	catch(e)
	{
		if (e.number == -2146827850)
		{
			if (sIdioma='C')
				alert("No s'ha detectat el component de signatura o bé la versió instal·lada està desactualitzada. A continuació s'instalarà la última versió del component. Un cop instal·lada, premi el botó 'Enviar Sol·licitut' per a realitzar el tràmit");
			else
				alert("No se ha detectado el componente de firma o bien la versión instalada está desactualizada. A continuación se instalará la nueva versión. Una vez instalada, pulse el botón 'Enviar Solicitud' para realizar el trámite");
		}
		else
			alert('Error al firmar');
		bOk=false;
	}
	
	if (bOk)
	{
		if (!sFirma.length) 
		{
			bOk=false;
			alert('Error al firmar');
		}
		if(sFirma.substr(0,5)=="error")
		{
			bOk=false;
			
			if (!(bFiltrado && sFirma=='error:internalError'))
			{
				if(sFirma=='error:noMatchingCert' && strNoHayCertificados)
				{
					alert(strNoHayCertificados);
				}
				else if(sFirma!='error:userCancel')
				{
					alert(sFirma);
				}
			}
		
		}			
	}
	
	if(!bOk )
	{
		oBtnAceptar=document.getElementById('btnAceptar');
		oBtnAtras=document.getElementById('btnAtras');
		if (oBtnAceptar!=null) oBtnAceptar.disabled=false;
		if (oBtnAtras!=null) oBtnAtras.disabled=false;
		
		if (NavegadorIE())
		{
	    oEvent.cancelBubble = true;
		  oEvent.returnValue = false;
		}
		else
		{
			oEvent.stopPropagation();
			oEvent.preventDefault();
		}
	}
	else
	{
			sXmlDoc= sXmlDoc + "</campos><firma>" + sFirma + "</firma>" + "</datosFirma>"
			signature.value = sXmlDoc;		
	}	
	return (bOk);
}

function FormatearDecimal(sValue, iNumDecimales)
//ARL 10/10/06 >> Formatea sValue al número de decimales indicado, añadiendo ceros al final si hace falta
{
	var sParteEntera = "";
	var sParteDecimal = "";
	var aDecimal = new Array();
	var k;

	if (iNumDecimales > 0)
	{
		if ( (sValue.indexOf(',')==-1) && (sValue.indexOf('.')==-1) )
		{
			//Solo se ha indicado parte entera. Rellenamos la parte decimal con tantos 0's como la longitud del campo indique
			sParteEntera = sValue;
			for (k=0; k<iNumDecimales; k++)
				sParteDecimal += "0";
		}
		else
		{
			sValue = sValue.replace(".",",");
			aDecimal = sValue.split(',');
			sParteEntera = aDecimal[0];
			if (sParteEntera == "")
				sParteEntera = "0";
			if (aDecimal.length == 2)
			{
				sParteDecimal = aDecimal[1];
				for (k=0; k<iNumDecimales-sParteDecimal.length; k++)
					sParteDecimal += "0"
			}
			else
			{
				for (k=0; k<iNumDecimales; k++)
					sParteDecimal += "0"
			}
		}
		if ( (sParteEntera!="") && (sParteDecimal!="") )
		//Forzamos que el separador decimal sea una coma. En la intratramites, al comprobar la firma, tambien lo forzaremos. De
		//esta forma se evitar problemas debido a configuraciones regionales diferentes
			sValue = sParteEntera + ',' + sParteDecimal;

	}

	return sValue;

}

//--------------------------------------------------
//	Mascara per escriure dates
//	Només permet dígits i '/'.
//  Invocar desde 'onKeyPress'.
//--------------------------------------------------
function MascaraData(oEvent,oText){
	var iNumero,iKeyCode,sData;

  	// Obtenemos el código de la tecla
	if (oEvent.keyCode) iKeyCode=oEvent.keyCode;
  	else iKeyCode=oEvent.which;

  	// EDR 10-07-2006 >>> se ha adaptado el script para que contemple campos fecha y hora
  	sDataHora = oText.value.split(" "); //0:Data  1:Hora
  	//sData = oText.value.split("/"); //0:Dia  1:Mes  2:Any
	sData = sDataHora[0].split("/"); //0:Dia  1:Mes  2:Any

	//Tractament de la longitud
	//Caràcters no permesos
	//if((iKeyCode<47)||(iKeyCode>57))
	if((iKeyCode<47)||(iKeyCode>58))
  	{
		if (!TeclaFuncional(iKeyCode)) iKeyCode=-1;
  	}
	else{
		//Barra
		if(iKeyCode==47){
			if((oText.value.length!=1)&&(oText.value.length!=2)&&
			   (oText.value.length!=4)&&(oText.value.length!=5))
					iKeyCode=-1;
			else{
				//Tractament d'un sol dígit.  Ex.: '3/' -> '03/'
				if(oText.value.length==1) 
					if(sData[0]==0) iKeyCode=-1;
					else oText.value="0"+oText.value;
				else if(oText.value.length==4)
					if(sData[1]==0) iKeyCode=-1;
					else oText.value=sData[0]+"/0"+sData[1];
			}
		}
		//Número
		else{ 
			//Barra automàtica
			if((oText.value.length==2)||(oText.value.length==5))
					oText.value=oText.value + "/";
			//Tractament de números
			iNumero=iKeyCode-48;
			switch (oText.value.length){
				case 0:  //Posició: 0 (Primer dígit de dia)
					if(iNumero>3) oText.value="0"+oText.value;		  //Ex.: '5' -> '05'
					break;
				case 1:  //Posició: 1 (Segon dígit de dia)
					if((sData[0]==0)&&(iNumero==0)) 
						iKeyCode=-1;
					else if((sData[0]==3)&&(iNumero>1))
						oText.value="0"+sData[0]+"/0";    //Ex.: '35'->'03/05'
					break;
				case 3:  //Posició: 3 (Primer dígit de mes)
					if(iNumero>1){ 
						//Restricció mesos per nº de dies (*)
						if((sData[0]==31)&&((iNumero==2)||(iNumero==4)||
						   (iNumero==6)||(iNumero==9)))
								iKeyCode=-1; 
						//Restricció mesos per nº de dies (*) 
						else if((sData[0]==30)&&(iNumero==2))
								iKeyCode=-1;
						else oText.value=sData[0]+"/0";   //Ex.:'14/5'->'14/05'
					}
					break;
				case 4:  //Posició: 4 (Segon dígit de mes)
					if((sData[1]==0)&&(iNumero==0)) 
						iKeyCode=-1;
					else if((sData[1]==1)&&(iNumero>2))
						iKeyCode=-1; 
					//Restricció mesos per nº de dies (*)
					else{
						if((sData[0]==31)&&(sData[1]==0)&&((iNumero==2)||
						   (iNumero==4)||(iNumero==6)||(iNumero==9)))
								iKeyCode=-1;
						else if((sData[0]==31)&&(sData[1]==1)&&(iNumero==1))
								iKeyCode=-1;
						else if((sData[0]==30)&&(sData[1]==0)&&(iNumero==2))
								iKeyCode=-1;
					}
					break;
				case 6:  //Posició:6 (Primer dígit d'any)
					if((iNumero==0)||((iNumero>2)&&(iNumero<6)))  //20**
						oText.value=sData[0]+"/"+sData[1]+"/20";
					else if(iNumero>=6)						      //19**
						oText.value=sData[0]+"/"+sData[1]+"/19";
					break;
				case 7:  //Posició: 7 (Segon dígit d'any)
					if((sData[2]==1)&&(iNumero<9)) iKeyCode=-1;
					break;
				//Restricció d'anys de traspàs (*)
				case 9:  //Posició: 9 (Quart dígit d'any)
					if((sData[0]==29)&&(sData[1]==2)&&
				       (!Traspas(sData[2]+iNumero))) iKeyCode=-1;
					break;
				default:
		  }
	  }
  }

	if (iKeyCode==-1)
	{	
		if(oEvent.preventDefault) 
			oEvent.preventDefault();
		else 
			oEvent.returnValue = false; 
	}
}


//--------------------------------------------------
//	Mascara per escriure hores 
//	Només permet dígits i '/'.
//  Invocar desde 'onKeyPress'.
//--------------------------------------------------
function MascaraHora(oEvent,oText)
{
	var iNumero,iKeyCode,sData;

  	// Obtenemos el código de la tecla
	if (oEvent.keyCode) iKeyCode=oEvent.keyCode;
  	else iKeyCode=oEvent.which;

  	// EDR 10-07-2006 >>> se ha adaptado el script para que contemple campos fecha y hora
	sHora = oText.value.split(":"); 


	//Tractament de la longitud
	//Caràcters no permesos
	//if((iKeyCode<47)||(iKeyCode>57))
	if((iKeyCode<47)||(iKeyCode>58))
  	{
		if (!TeclaFuncional(iKeyCode)) iKeyCode=-1;
  	}

	else
	{
		//Dos punts
		if(iKeyCode==58)
		{
			if((oText.value.length!=1)&&(oText.value.length!=2))
					iKeyCode=-1;
			else{
				//Tractament d'un sol dígit.  Ex.: '3:' -> '03:'
				if(oText.value.length==1) 
				{
					if(sHora[0]==0) iKeyCode=-1;
					else oText.value="0"+oText.value;
				}
//				else if(oText.value.length==4)
//					if(sHora[1]==0) iKeyCode=-1;
//					else oText.value=sHora[0]+":0"+sHora[1];
			}
		}
		//Número
		else{ 
			//Dos punts automàtics
			if(oText.value.length==2)
					oText.value=oText.value + ":";
			//Tractament de números
			iNumero=iKeyCode-48;
			switch (oText.value.length)
			{
				case 0:  //Posició: 0 (Primer dígit de hora)
					if(iNumero>2) oText.value="0"+oText.value;		  //Ex.: '5' -> '05'
					break;
				case 1:  //Posició: 1 (Segon dígit de hora)
					if((sHora[0]>=2)&&(iNumero>=4))
						oText.value="0"+sHora[0]+":0";    //Ex.: '35'->'03:05'
					break;
				case 3:  //Posició: 3 (Primer dígit de minuts)
					if(iNumero>5)
						oText.value=sHora[0]+":0";   //Ex.:'14:6'->'14:06'
					break;
			}
		}
	}

	if (iKeyCode==-1)
	{	
		if(oEvent.preventDefault) 
			oEvent.preventDefault();
		else 
			oEvent.returnValue = false; 
	}
  
}

function TeclaFuncional(iKeyCode)
{
	if ((iKeyCode==8) || (iKeyCode==9) || (iKeyCode==46) || (iKeyCode==37) || (iKeyCode==39) || (iKeyCode==36) || (iKeyCode==35))
		return true;
  	else return false;
}


//--------------------------------------------------
//	Funció que canvia el color del texte depenent
//	de si té o no un format de data correcte.
//  Invocar desde 'onBlur'.
//--------------------------------------------------
function SortirData(oText,ColorCorrecte,ColorErroni){

//alert('sortirdata:' + oText.value.length);
	if ((oText.value.length==0) || (Validar_Data(oText.value)))
	{ 
		oText.style.color=ColorCorrecte; 
		return(true); 
	}
	else
	{ 
		oText.style.color=ColorErroni; 
		return(false); 
	}
}

function SortirHora(oText,ColorCorrecte,ColorErroni){

		sHora = oText.value.split(":"); //0:Hores  1:Minuts  

		//Si sólo hay los dígitos de la hora, añadimos los minutos a 00
		if(sHora.length==1) 
		{ 
			//Tractament de l'hora
			if (parseInt( sHora[0]) >= 24 ) iHora ='00';
		  	else if(sHora[0].length==1) iHora="0" + sHora[0];
			else iHora=sHora[0];
			
			if (iHora.length > 0)
				oText.value = iHora + ":00"
		}	


	if ((oText.value.length==0) || (Validar_Hora(oText.value)))
	{ 
		oText.style.color=ColorCorrecte; 
		return(true); 
	}
	else
	{ 
		oText.style.color=ColorErroni; 
		return(false); 
	}
}



//--------------------------------------------------
//	Mascara per comprovar que una data és correcte.
//	Només permet dígits i '/'.
//--------------------------------------------------
function Validar_Data(sData){
   var bTraspas;
   var dataTrans;

if (sData == '') return true;

  dataTrans=Transformar_Data(sData);
   
  // IHR 04-08-2006 >>> se ha adaptado el script para que contemple campos fecha y hora

  if (dataTrans != ''){
	tmpData = dataTrans.split(" "); // 0:Data 1:Hora
  	sData = tmpData[0].split("/"); //0:Dia  1:Mes  2:Any
  	if (tmpData.length!=1) sHora = tmpData[1].split(":"); //0:Hores  1:Minuts  2:Segons
  	else sHora = '';
  }
  else
  	return false;
	  
  //Si és buit o null retornem true
  if(sData)
  {
    if(sData.length!=0)
    {
    	//Comprovació del nombre de camps
    	if(sData.length!=3)
    	{
    		return(false); 
    	}
    	else
    	{ 
    		//Comprovació de la longitud dels camps
    		if((sData[0].length!=2)||(sData[1].length!=2)||(sData[2].length!=4))
    		{
    			return(false);
    		}
    		//Tractament d'any
    		if((sData[2]<1900)||(sData[2]>2100))
    		{
    			return(false); 
    		}
    		else
    		{ 
    			if ((sData[1]<1)||(sData[1]>12)){
    				return(false);
    			}
    			else
    			{
	    			//Tractament de mes(amb 31 dies)
    				if((sData[1]==1)||(sData[1]==3)||(sData[1]==5)||(sData[1]==7)||
    				   (sData[1]==8)||(sData[1]==10)||(sData[1]==12))
    				{
    					if((sData[0]<1)||(sData[0]> 31))
	    				{
    						return(false);
    					}
    				} 
	    			//Tractament de mes (amb 30 dies) 
    				else if((sData[1]==4)||(sData[1]==6)||(sData[1]==9)||(sData[1]==11))
    				{
    					if((sData[0]<1)||(sData[0]>30))
    					{
    						return(false);
	    				}
    				}
    				//Tractament de Febrer (28 o 29 dies)
    				else if(sData[1]==2)
	    			{
    					bTraspas=Traspas(sData[2]);
    					if((bTraspas)&&((sData[0]<1)||(sData[0]>29)))
    					{ 
    						return(false);
	    				}
    					else if((!bTraspas)&&((sData[0]<1)||(sData[0]>28))) 
    					{
    						return(false);
    					}
    				}
    			}
    		}
    	}
    }
  }
  return(true);
}

//--------------------------------------------------
//	Mascara per comprovar que una hora és correcta.
//	Només permet dígits i '/'.
//--------------------------------------------------
function Validar_Hora(sHora){
	var bTraspas;
	var horaTrans;
	horaTrans=Transformar_Hora(sHora);
  
	if (horaTrans != '')
  		return(true);
	else
		return false;
}

//--------------------------------------------------
//	Funció que donada una data en format incorrecte
//	la transforma correctament.
//--------------------------------------------------
function Transformar_Data(sData){
	var iDia;
	var iMes;
	var iAny;

	// IHR 08-04-2006 >>> se ha adaptado el script para que contemple campos fecha y hora
	var iHora, iMinuts, iSegons;
	if (sData!='')
	{
		tmpData = sData.split(" "); // 0:Data 1:Hora
		sData = tmpData[0].split("/"); //0:Dia  1:Mes  2:Any
		if (tmpData.length!=1) sHora = tmpData[1].split(":"); //0:Hores  1:Minuts  2:Segons
		else sHora = '';
		//Comprovació del nombre de camps de la data
		if(sData.length!=3) return '';
		else{ 
			//Tractament de dia
			if(sData[0].length==1) iDia="0" + sData[0];
			else iDia=sData[0];
		
			//Tractament de mes
			if(sData[1].length==1) iMes="0" + sData[1];
			else iMes=sData[1];
		
			//Tractament d'any
			if(sData[2].length==2){
				if(sData[2][0]>=6) iAny="19" + sData[2];
				else iAny="20" + sData[2];
			}
			else iAny=sData[2];
		}
		if(sHora.length!=3){
			return(iDia + "/" + iMes + "/" + iAny);
		}
		else{ 
			//Tractament de l'hora
			if (parseInt( sHora[0]) > 24 ) iHora ='00';
		  	else if(sHora[0].length==1) iHora="0" + sHora[0];
			else iHora=sHora[0];
		
			//Tractament dels segons
			if (parseInt( sHora[1]) > 60 ) iMinuts ='00';
	  		else if(sHora[1].length==1) iMinuts="0" + sHora[1];
			else iMinuts=sHora[1];
			
			//Tractament dels segons
			if (parseInt( sHora[2]) > 60 ) iSegons ='00';
		  	else	iSegons=sHora[2];
		}	
		return(iDia + "/" + iMes + "/" + iAny + " " + iHora + ":" + iMinuts+ ":" +iSegons);
	}
	else
	{
		return sData;	
	}
}

//--------------------------------------------------
//	Funció que donada una hora en format incorrecte
//	la transforma correctament.
//--------------------------------------------------
function Transformar_Hora(sHora){
	var iDia;
	var iMes;
	var iAny;

	// IHR 08-04-2006 >>> se ha adaptado el script para que contemple campos fecha y hora
	var iHora, iMinuts, iSegons;
	if (sHora!='')
	{
		sHora = sHora.split(":"); //0:Hores  1:Minuts  

		//Comprovació del nombre de camps de la data
		if(sHora.length!=2) return '';
		else{ 
			//Tractament de l'hora
			if (parseInt( sHora[0]) >= 24 ) iHora ='00';
		  	else if(sHora[0].length==1) iHora="0" + sHora[0];
			else iHora=sHora[0];
		
			//Tractament dels segons
			if (parseInt( sHora[1]) > 60 ) iMinuts ='00';
	  		else if(sHora[1].length==1) iMinuts="0" + sHora[1];
			else iMinuts=sHora[1];
			
		}	
		return(iHora + ":" + iMinuts);
	}
	else
	{
		return sHora;	
	}
}


//--------------------------------------------------
//	Mascara per saber si un any és de traspàs.
//	Només permet un enter de fins a 4 dígits.
//--------------------------------------------------
function Traspas(iAny){
	if((iAny % 4)==0){
			if((iAny % 100)==0){
					if((iAny % 400)==0) return(true);
					else return(false);
			}
			else return(true);
    }
	else return(false);
}


//--------------------------------------------------
//  Funció que retorna la data actual
//  Invocar desde 'onFocusIn'
//--------------------------------------------------
function FechaActual(oText)
{
  var d,s;
  if (oText.value.length==0)
  {
    d=new Date();
    s = d.getDate() +  "/" +  (d.getMonth()+1) +  "/" +  d.getFullYear();
    oText.value=Transformar_Data(s);
  }
}

//--------------------------------------------------
//  Funcion que devuelve la fecha y hora actual
//  Invocar desde 'onFocusIn'
//--------------------------------------------------
function FechaHoraActual(oText)
{
  var d,s;
   
  if (oText.value.length==0)
  {
    d=new Date();
    // EDR 10-07-2006 >>> se ha adaptado el script para que contemple campos fecha y hora
    s = d.getDate() +  "/" +  (d.getMonth()+1) +  "/" +  d.getFullYear()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();
    oText.value=Transformar_Data(s);
  }
}

//--------------------------------------------------
//  Funcion que usada internamente para actualizar el campo fechaHora
//  Invocar desde 'onchange'
//--------------------------------------------------
function ActualizarFechaHora(sNomCampo)
{
	var oFechaHora, oFecha, oHora, sNew;
  
  oFechaHora = document.getElementById(sNomCampo);
  oFecha = document.getElementById(sNomCampo + '0');
  oHora = document.getElementById(sNomCampo + '1');
  
  sNew = "";
  
  if (oFechaHora && oFecha && oHora)
  {
  	if (oFecha.value.length == 0 && oHora.value.length == 0 )
  		sNew = "";
  	else if (oFecha.value.length == 0 && oHora.value.length != 0 )
  		sNew = '01/01/1900 ' + oHora.value + ':00';
  	else if (oFecha.value.length != 0 && oHora.value.length == 0 )
  		sNew = oFecha.value + '00:00:00';
  	else
  		sNew= oFecha.value + ' ' + oHora.value + ':00';
  		
  	if (sNew != oFechaHora.value)
	 		oFechaHora.value = sNew;
  }
  
  return sNew;
}

//--------------------------------------------------
//  Funcion que usada internamente para actualizar los campos auxiliares fecha y hora
//  Invocar desde 'onchange'
//--------------------------------------------------
function ActualizarFechaAndHora(sNomCampo)
{
  var oFechaHora, oFecha, oHora;
  
  oFechaHora = document.getElementById(sNomCampo);
  oFecha = document.getElementById(sNomCampo + '0');
  oHora = document.getElementById(sNomCampo + '1');
  
  if (oFechaHora && oFecha && oHora)
  {
  	// parsear fecha, validar y partir...
  	var sFechaHora, sHora;
  	
  	sFechaHora = oFechaHora.value.split(' ');

  	if (Validar_Data(sFechaHora[0]) && (oFecha.value != sFechaHora[0]))
  		oFecha.value = sFechaHora[0];


		if (sFechaHora.length == 2)
		{
			sHora = sFechaHora[1].split(":");

			if (sHora.length >= 2)	
			{
				sHora = sHora[0] + ':' + sHora[1];
			  	if (Validar_Hora(sHora) && (oHora.value != sHora))
		  			oHora.value = sHora;
			}			
		}
  }
}

//--------------------------------------------------
//  Funcion que devuelve la hora actual
//  Invocar desde 'onFocusIn'
//--------------------------------------------------
function HoraActual(oText)
{
  var d,s;
   
  if (oText.value.length==0)
  {
    d=new Date();
    s = d.getHours()+':'+d.getMinutes();
    oText.value=Transformar_Hora(s);
  }
}

//--------------------------------------------------
//	Mascara per escriure números [decimals] [negatius].
//	Només permet dígits, -..
//  Invocar desde 'onKeyPress'.
//--------------------------------------------------
function Mascara_Numero(oEvent,oText,intMaxDecimals,blnNegatiu){
var intNumero,strNumero,intPosicionDecimal,bCancel;

	if (oEvent.keyCode) intNumero=oEvent.keyCode;
	else intNumero=oEvent.which;
	strNumero=oText.value;

	//Caràcters no permesos
  bCancel=false;
	if((intNumero<44)||(intNumero>57))
	{
		if (!TeclaFuncional(intNumero)) bCancel=true;
	}
	else{
		//Comprovem on està el separador decimal
		intPosicioDecimal=strNumero.search(/[,]|[.]/);		
		//Signe menys (-)
		if(intNumero==45){ 
				if((!(blnNegatiu))||(strNumero.search(/-/)>=0))
						bCancel=true;
		} 
		//Separador decimal (,.) 
		else if((intNumero==44)||(intNumero==46)){ 
				if(intMaxDecimals>0){
					if(intPosicioDecimal>=0) bCancel=true;
				}
				else bCancel=true;
		}
		//Número
		else{ 
				if((intPosicioDecimal>=0)&&(intMaxDecimals>0)){
						//Màxim número de decimals cobert
						if(strNumero.length-intPosicioDecimal-1-intMaxDecimals>=0)	
							bCancel=true;
				}
		}
	}

  if (bCancel) 
	{
		if (NavegadorIE()) oEvent.returnValue=0;
		else oEvent.preventDefault();
	}
}

function Validar_Numero(sNumero,lNumDecimales)
{
	var iPosNeg,iPosDec,bOk;

	iPosNeg=sNumero.indexOf("-");
	bOk=(iPosNeg<=0);

	if (bOk)
	{
		iPosDec=sNumero.indexOf(".");
		if (iPosDec==-1) iPosDec=sNumero.indexOf(",");
	
		if (iPosDec==-1) bOk=(sNumero.length<=(19-lNumDecimales));
		else bOk=(iPosDec<=(19-lNumDecimales));
	}

	return(bOk);
}


//--------------------------------------------------
//	Función para llenar el contenido de una lista
//	asociada a otra lista
//--------------------------------------------------
function LlenarListasIE(oSelect,oElemXML,sLista,sCodElem,bSoloListasPagina)
{
  var oListas,oElemento,oListaElementos,oOption,sXPath,oLista,xmlHttpReq,bListaCargada;

	bListaCargada=false;
  oListas=oElemXML.XMLDocument;
  if (oListas!=null)
  {
	  sXPath="listas/f[@i='" + sLista + "']/e[@i='" + sCodElem + "']";
	  oElemento=oListas.selectSingleNode(sXPath);
    if (oElemento!=null)
    {
			if (oElemento.getAttribute("s")!=null)
      {
				//Comprobamos si existe la lista o hay que pedirla al servidor
				sXPath="listas/f[@i='" + oElemento.getAttribute("s") + "']";
				if (oListas.selectSingleNode(sXPath)==null)
				{
					//Hay que pedir la lista al servidor
					if (!bSoloListasPagina)
					{
					  xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
					  xmlHttpReq.open("GET", "../Comun/Listas.asp?id=" + oElemento.getAttribute("s"), false);
					  xmlHttpReq.send("");
						if (xmlHttpReq.responseXML!=null)
						{
							oLista=xmlHttpReq.responseXML.documentElement;
							oListaElementos=oLista.selectNodes("e");
						}
					}
				}
				else
				{
					//Obtenemos los elementos de la pagina
					sXPath=sXPath.concat("/e");
	        oListaElementos=oListas.selectNodes(sXPath);
				}

				//Anadimos los elementos
				if (oListaElementos!=null)
				{
					bListaCargada=true;
					EliminarElementosSubLista(oSelect);
	        for (i=0;i<oListaElementos.length;i++)
	        {
	          oElemento=oListaElementos.item(i);
						oOption = document.createElement("OPTION");
						oOption.text=oElemento.nodeTypedValue;
					  oOption.value=oElemento.getAttribute("i") + "-" + oElemento.nodeTypedValue;
					  oSelect.add(oOption);
				  }
				}
      }
    }
  }
	return(bListaCargada);
}

function LlenarListasNoIE(oSelect,oElemXML,sLista,sCodElem,bSoloListasPagina)
{
  var i,j,sSubLista,oListas,oLista,oElemento,oListaElementos,oOption,sXPath,bEncontrada,bListaCargada;

	bListaCargada=false;
  oListas=oElemXML.childNodes[1];
  if (oListas!=null)
  {
    //Primero buscamos la lista
		sSubLista='';
		for (i=0;i<oListas.childNodes.length;i++)
		{
			oLista=oListas.childNodes[i];
			if(oLista.nodeType != 3)
			{ 
				if (oLista.getAttribute('i')==sLista)
				{
					//Lista encontrada, buscamos el elemento
					for (j=0;j<oLista.childNodes.length;j++)
					{
						oElemento=oLista.childNodes[j];
						if (oElemento.nodeType !=3 )
						{
							if (oElemento.getAttribute('i')==sCodElem)
							{
								//Hemos encontrado la sublista que hay que cargar
								sSubLista=oElemento.getAttribute('s');
							break;
							}
						}
					}
					break;	
				}
			}
		}

		// Buscamos la sublista y cargamos todos sus elementos
		if (sSubLista.length>0)
		{
			bEncontrada=false;
			for (i=0;i<oListas.childNodes.length;i++)
			{
				oLista=oListas.childNodes[i];
				if(oLista.nodeType != 3)
				{ 
					if (oLista.getAttribute('i')==sSubLista)
					{
						//Lista encontrada, cargamos todos sus elementos
						bEncontrada=true;
						bListaCargada=true;
						EliminarElementosSubLista(oSelect);
						for (j=0;j<oLista.childNodes.length;j++)
						{
							oElemento=oLista.childNodes[j];
							oOption = document.createElement("OPTION");
							oOption.text=oElemento.firstChild.nodeValue;
						  oOption.value=oElemento.getAttribute("i") + "-" + oElemento.firstChild.nodeValue;
						  oSelect.appendChild(oOption);
						}
						break;
					}
				}
			}

			// Si no la hemos encontrado, la buscamos en el servidor
			if ((!bEncontrada) && (!bSoloListasPagina))
			{
				xmlHttpReq=new XMLHttpRequest();
			  xmlHttpReq.open("GET", "../Comun/Listas.asp?id=" + sSubLista, false);
			  xmlHttpReq.send("");
				if (xmlHttpReq.responseXML!=null)
				{
					bListaCargada=true;
					EliminarElementosSubLista(oSelect);
					oLista=xmlHttpReq.responseXML.documentElement;
					for (j=0;j<oLista.childNodes.length;j++)
					{
						oElemento=oLista.childNodes[j];
						if (oElemento.nodeType!=3)
						{
							oOption = document.createElement("OPTION");
							oOption.text=oElemento.textContent;
						  oOption.value=oElemento.getAttribute("i") + "-" + oElemento.textContent;
						  oSelect.appendChild(oOption);
						}
					}
				}
			}
		}
  }
	return(bListaCargada);
}

function EliminarElementosSubLista(oSelect)
{
	//Eliminamos todos los elementos menos el primero que es un elemento en blanco
 	while (oSelect.options.length>1) oSelect.removeChild(oSelect.options[1]);
	if (oSelect.options.length>0)
	{
	  
	  if ((oSelect.options[0]).value!="") oSelect.removeChild(oSelect.options[0]);
	}
}

function LlenarListaAsociada(oSelect,sLista,sElemento,bSoloListasPagina,bOrigenListaAsociada)
{
	var i,oElemXML,bCargar,bListaCargada,sValor;
	
	//Si el origen es la lista asociada, comprobamos que sea la primera vez
	if (bOrigenListaAsociada) bCargar=(oSelect.getAttribute("bPrimeraVez")!="N");
	else bCargar=true;

	if (bCargar)
	{
	  //Buscamos la sublista asociada al elemento de la lista indicada
		bListaCargada=false;
		sValor=oSelect.value;
	  sCodElem="";
	  for(i=0;i<sElemento.length;i++)
	  {
	    if ('-'==sElemento.substr(i,1)) break;
	    else sCodElem=sCodElem.concat(sElemento.substr(i,1));
	  }
	  oElemXML=document.getElementById("oListasXml");
	  if (oElemXML!=null)
	  {
	    if (NavegadorIE())
	    {
	      bListaCargada=LlenarListasIE(oSelect,oElemXML,sLista,sCodElem,bSoloListasPagina);
	    }
	    else
			{
	      bListaCargada=LlenarListasNoIE(oSelect,oElemXML,sLista,sCodElem,bSoloListasPagina);
	    }
	  }
		if (bListaCargada)
		{ 
			oSelect.setAttribute("bPrimeraVez","N");
			//Al cargar la pagina mantenemos el valor que tuviera la lista
			if (bSoloListasPagina) oSelect.value=sValor;
		}
	}
}

function ActualizarListas()
{
	var i,aElementos,aElemAux,aListas,sName;

	//Actualizamos todas las combos y los options
  aElementos=document.getElementsByTagName("SELECT");
  for(i=0;i<aElementos.length;i++)
  {
		sName=aElementos.item(i).name;
		sName=sName.substr(0,sName.length-1) + '1';
		if (sName!=aElementos.item(i).name)
		{
			aListas=document.getElementsByName(sName);
			if (aListas.length>=11)
			{
				aElemAux=document.getElementsByName(aElementos.item(i).name);
				LlenarListaAsociada(aListas.item(0),aElemAux.item(aElemAux.length-1).value,aElementos.item(i).value,true,false);
			}
		}
  }
  aElementos=document.getElementsByTagName("INPUT");
  for(i=0;i<aElementos.length;i++)
  {
	  if (aElementos.item(i).type=="radio")
    {
      if (aElementos.item(i).checked)
			{
				sName=aElementos.item(i).name;
				sName=sName.substr(0,sName.length-1) + '1';
				if (sName!=aElementos.item(i).name)
				{
					aListas=document.getElementsByName(sName);
					if (aListas.length>=11)
					{
						aElemAux=document.getElementsByName(aElementos.item(i).name);
						LlenarListaAsociada(aListas.item(0),aElemAux.item(aElemAux.length-1).value,aElementos.item(i).value,true,false);
					}
				}
			}
    }
  }
}

function InicializarFormulario()
{
	var i,aElementos,aElemAux,aListas,sName;

  //Ponemos valores en los campos fijos del formulario
 /* if (sNumDoc.length>0)
  {
    aElementos=document.getElementsByName("WTGNUMDOC");
    if (aElementos.length>0) aElementos.item(0).value=sNumDoc;
  }
  if (sCarCon.length>0)
  {
	  aElementos=document.getElementsByName("WTGCARCON");
	  if (aElementos.length>0) aElementos.item(0).value=sCarCon;
  }
  if (sNombre.length>0)
  {
	  aElementos=document.getElementsByName("WTGNOMBRE");
	  if (aElementos.length>0) aElementos.item(0).value=sNombre;
  }
  if (sApell1.length>0)
  {
	  aElementos=document.getElementsByName("WTGAPELL1");
	  if (aElementos.length>0) aElementos.item(0).value=sApell1;
  }
  if (sApell2.length>0)
  {
	  aElementos=document.getElementsByName("WTGAPELL2");
	  if (aElementos.length>0) aElementos.item(0).value=sApell2;
  }
  if (sDirMai.length>0)
  {
	  aElementos=document.getElementsByName("WTGDIRMAI");
	  if (aElementos.length>0) aElementos.item(0).value=sDirMai;
  }

  if (sTelef1.length>0)
  {
	  aElementos=document.getElementsByName("WTGTELEF1");
	  if (aElementos.length>0) aElementos.item(0).value=sTelef1;
  }
  
  if (sTelMov.length>0)
  {
	  aElementos=document.getElementsByName("WTGTELMOV");
	  if (aElementos.length>0) aElementos.item(0).value=sTelMov;
  }
  if (sMailNot.length>0)
  {
	  aElementos=document.getElementsByName("WTGMAINOT");
	  if (aElementos.length>0) aElementos.item(0).value=sMailNot;
  }
  
  aElementos=document.getElementsByName("WTGENVMAI");
   if (aElementos.length>0 ) 
   {
   		if (aElementos.item(0).type=='checkbox')
		{
			if (sEnvMailNot=='S')
				aElementos.item(0).checked=true;
			else
				aElementos.item(0).checked=false;
		}
		else{
			if (sEnvMailNot=='S')
				aElementos.item(0).value='S';
			else
				aElementos.item(0).value='N';
		}
	}
   
   
   aElementos=document.getElementsByName("WTGENVSMS");
   if (aElementos.length>0)
   {	
   
   		if (aElementos.item(0).type=='checkbox')
		{
   			if (sEnvSMSNot=='S')
   				aElementos.item(0).checked=true;
			else
				aElementos.item(0).checked=false;
		}
		else{
			if (sEnvSMSNot=='S')
				aElementos.item(0).value='S';
			else
				aElementos.item(0).value='N';
		}
   } 
   */
   
   try
   {
      InicializarCampos(); 

			// Si la check de representante está marcada por defecto, propagamos los datos del solicitante hacia el representante
			var oDatosRepre = document.getElementById('datosRepresentante');
			var oCheckRepre = document.getElementById('checkRepresentante');
			if  (oDatosRepre && oCheckRepre)
			{
				if (oCheckRepre.checked)
					clickHandlerCheck(null,'datosRepresentante','checkRepresentante');
			}

   }
   catch(ex)
   {
    
   }
   
  //Actualizamos las listas
  ActualizarListas();
  
}


//--------------------------------------------------
//	Funcion para verificar los digitos de control
//	de una cuenta bancaria
//--------------------------------------------------
function ValidarDigitoControlCueBan(sEntidad,sOficina,sDC,sCuenta)
{
  if ((sEntidad.length>0) && (sOficina.length>0) && (sCuenta.length>0))
  {
    sDC=FormatearCadena(sDC,2,'0');
    if (sDC!=CalcularDigitosControlCueBan(sEntidad,sOficina,sCuenta))
    {
      alert(strDCCuentaBancaria);
    }
  }
}

function CalcularDigitosControlCueBan(sEntidad,sOficina,sCuenta)
{
  var sDC,sCode,iFirstDigit,iSecondDigit;

	//Formateamos las diferentes partes de la cuenta bancaria
	sEntidad=FormatearCadena(sEntidad,4,'0');
	sOficina=FormatearCadena(sOficina,4,'0');
	sCuenta=FormatearCadena(sCuenta,10,'0');
  sCode=FormatearCadena(sEntidad+sOficina,10,'0');

	//Calculamos el primer digito
  iFirstDigit=CalcularDigitoControlCueBan(sCode);

	//Calculamos el segundo digito
	iSecondDigit=CalcularDigitoControlCueBan(sCuenta);

	//Devolvemos los digitos de control
  sDC=iFirstDigit.toString() + iSecondDigit.toString();
  return(sDC);
}

function CalcularDigitoControlCueBan(sCadena)
{
  var k,iTemp,iDigito;
	var aCoef = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);

	//Calculamos el segundo digito
  iTemp=0;
  for(k=0;k<10;k++)
    iTemp=iTemp+(sCadena.substr(k,1)*aCoef[k]);
  iTemp=11-(iTemp%11);
  
  switch (iTemp)
  {
    case 10: 
			iDigito=1;
			break;
		case 11:
			iDigito=0;
			break;
		default:
			iDigito=iTemp;
  }

  return(iDigito);
}

function FormatearCadena(sCadena,iCaracteres,sCaracter)
{
  var i;

  sResultado=sCadena;
  if (sCadena.length<iCaracteres)
  {
    for(i=0;i<(iCaracteres-sCadena.length);i++) 
		{
			sResultado=sCaracter+sResultado;
		}
  }
  return(sResultado);
}

function ComprobarLongitudTexto(oTexto,lMaximo)
{
  if (lMaximo-oTexto.value.length < 0)
    oTexto.value = oTexto.value.substring(0,lMaximo);
}

function LimitarTexto(oEvent,oTexto,lMaximo)
{
  var iKeyCode;

  if (oEvent.keyCode) iKeyCode=oEvent.keyCode;
  else iKeyCode=oEvent.which;

  if ((oTexto.value.length >= lMaximo) && (!TeclaFuncional(iKeyCode)))
  {
	  if (NavegadorIE())
	  {
      oEvent.cancelBubble=true;
	    oEvent.returnValue=false;
	  }
	  else
	  {
		  oEvent.stopPropagation();
		  oEvent.preventDefault();
	  }
  }
}


//----------------------------------------------------------
//	Funciones para la gestión del botón de modificar
//  datos que tiene el paso de confirmación de un formulario
//----------------------------------------------------------
function ModificarDatos(oFormulario)
{
	var surl=window.document.referrer;
	var aUrl;
	aUrl=surl.split('?');
	if (aUrl.lenght>1)
		surl=aUrl[0] + '?procedencia=Confirmacion&' + aUrl[1];
	else
		surl=aUrl[0] + '?procedencia=Confirmacion';
		
	oFormulario.action=surl;
	oFormulario.submit();
}

var aCmpNoIni;

function  TieneSelected(aCampos)
{   
   var booleano = false;
   
   
   for(j=0;j<aCampos.options.length;j++)
	{
	    
	   if (aCampos.options[j].selected ) 
	   {
	      booleano= booleano || true
	   }
	
	}
   return booleano;

}

function EstablecerValorCampo(theForm,nombreCampo,valorCampo,habilitado) 
{     	
  var aCampos,oCampo;
  var sName,aElemAux,aListas,i;
  var bValorCompuesto;

  try
  {
  	
	aCampos=theForm.getElementsByName(nombreCampo);
  	
	if (aCampos.length>0) oCampo=aCampos[0];
  	  	
  	if (oCampo!=null) 
  	{
  		
  		if (oCampo.type=='checkbox')
  		{
  			if (valorCampo=='S'){
  				oCampo.checked=true;
  				if (oCampo.title==''){
					var oRep;
					oRep=document.getElementById('datosRepresentante');
					oRep.style.display='';
				}
  			}
  			else{
  				oCampo.checked=false;
  			}
  		}
  		else
  		{
  			if ((oCampo.type=='select-one') || (oCampo.type=='radio'))
  			{
  				bValorCompuesto=(valorCampo.indexOf('-')>0);
  			  if (oCampo.type=='select-one') 
  				{
  				

  						// Miramos si es una select de carga dinámica porque seguramente
  						// todavía no ha recibido los valores
  						if (typeof aDinCmp!="undefined")
  						{
  							if (aDinCmp[nombreCampo]) 	// está entre las select a llenar dinámicamente!
  							{
  								if (aDinList[aDinCmp[nombreCampo]['lst']]['cargada'] == false )
  								{
  									// La lista asociada todavía no está cargada
  									aDinCmp[nombreCampo]['val'] = valorCampo;
  									return;
  								}
  							}
  						}

  				
  				    if (bValorCompuesto)
  				    {
  				      oCampo.value=valorCampo;
  				    }
  				    else
  				    {
  				      for (i=0;i<oCampo.options.length;i++)
  				      {
      						var aPartes=oCampo.options[i].value.split('-');    						

      						if (aPartes[0]==valorCampo)
      						{
      						 	oCampo.value=oCampo.options[i].value;
      							break;
      						}
  				      }
  				    }
  				}			
  				else
  				{
    					for (i=0;i<aCampos.length-1;i++)
  					{
  					  if (bValorCompuesto)
  					  {
    						if (aCampos[i].value==valorCampo)
    						{
    							aCampos[i].checked=true;
    							break;
    						}
  					  }
  					  else
  					  {
  					  	var aPartes=aCampos[i].value.split('-');    						
      						if (aPartes[0]==valorCampo)
      						{
      					    		valorCampo=aCampos[i].value;
      							aCampos[i].checked=true;
  							break;
	      					}
  					  }
  					}
  				}
  				sName=nombreCampo;
  				sName=sName.substr(0,sName.length-1) + '1';
  				if (sName!=nombreCampo)
  				{
  					aListas=document.getElementsByName(sName);
  					if (aListas.length>=10)
  					{
  						aElemAux=document.getElementsByName(nombreCampo);
  						LlenarListaAsociada(aListas.item(0),aElemAux.item(aElemAux.length-1).value,valorCampo,false,false);
  					}
  				}
  			}
  			else
  			{
  				// En cualquier otro caso copiamos el valor excepto si el destino
  				// es un campo de imagen y el valor es nulo
  				if (! (valorCampo == '' && oCampo.value.split('|$|').length == 2))
  				{
  					oCampo.value=valorCampo;
  				}
  				
  				// Navegador NO InternetExplorer: en un campo Fecha-Hora hay que inicializar explícitamente
  				// los campos auxiliares porque no se dispara el evento onpropertychange
  				if ((!NavegadorIE()) && ( (oCampo.attributes['onpropertychange'].value +' ').indexOf('ActualizarFechaAndHora') >=0) )
  					ActualizarFechaAndHora(nombreCampo);
  			}
  		}
  		
  		//Si el campo no es editable y es de tipo lista,radio,checkbox o textarea, entonces establecemos su valor en el hidden
  		if (oCampo.disabled && ((oCampo.type=='select-one') || ((oCampo.type=='radio') || (oCampo.type=='checkbox') || (oCampo.type=='textarea'))))
  		{
  		  if (oCampo.type=='radio')
  		  {
  		    //Buscamos el primero que no es de tipo radio
	       for (i=0;i<aCampos.length-1;i++)
  			 {
  				  if (aCampos[i].type!='radio')
    					{    							
    							break;
    					}					  
  			 }
  			 aCampos[i].value=valorCampo;
  		  }
  		  else if (oCampo.type=='select-one')
  		  {
  		  	// Es un campo de tipo select deshabilitado originalmente con un campo adicional para guardar el texto
	  		 if (aCampos.length == 11)  aCampos[1].value=oCampo.value;
  		  }
  		  else
  		  {
  		  	aCampos[1].value=oCampo.value;
  		  }
  		}
  		
  		//Habilitamos/Deshabilitamos el campo en funcion del parametro que nos pasan
  		if (habilitado=='N'){
  			oCampo.readOnly = true;
  		}
  		else if(habilitado=='S') {
  		 	oCampo.readOnly = false;
  		}
  	}	
  	else
  	{
  		// No se ha inicializado porque no se ha encontrado el campo
  		// guardamos el campo y el valor en un array por si se van a 
  		// utilizar luego...
  		
  		
  		if (!aCmpNoIni)
  			aCmpNoIni = new Array();
 			
  		aCmpNoIni[nombreCampo] = valorCampo;
//  		alert('campo no encontrado ' + nombreCampo + ':' + aCmpNoIni[nombreCampo] + '--' + valorCampo);
  	}

  }
  catch(ex)
  {}
}

function EstablecerValorCampoImagen(theForm,nombreCampo,valorCampo) 
{     	
  var oHiddenImg, oTextoSpan, oFilesSpan;
  var sName,aElemAux,aListas,i;
  var bValorCompuesto;

  try
  {
  	
aListas=valorCampo.split('|$|');
  	
   	oHiddenImg=theForm.getElementById(nombreCampo);
  	if (oHiddenImg) 
  		oHiddenImg.value = valorCampo;
  		
  	oTextoSpan=theForm.getElementById('spanAttachText' + nombreCampo);
  	if (oTextoSpan)
  		oTextoSpan.innerHTML = '<b>' + aListas[5] + '</b>';
  		
  	
  }
  catch(ex)
  {}
}

//----------------------------------------------------------
//	Funciones para la gestion de los servicios
//----------------------------------------------------------
function InicializarPaginaServicio()
{
	var i,j,aElemOri,aElemDes,oCampoDes;

	for (i=0;i<aRFSCamposDestino.length;i++)
  {
		//Buscamos el campo destino
    aElemDes=document.getElementsByName(aRFSCamposDestino[i]);
    if (aElemDes.length>0)
		{ 
			oCampoDes=aElemDes.item(0);
			//Buscamos el campo origen
			aElemOri=document.getElementsByName(aRFSCamposOrigen[i]);
			if (aElemOri.length>0)
			{
				if (oCampoDes.type=='radio')
				{
					for(j=0;j<aElemDes.length;j++)
					{
						if (aElemDes[j].type!='radio') break;
						else
						{
							aElemDes[j].checked=(aElemDes[j].value==aElemOri.item(0).value);
						}
					}
					if (oCampoDes.disabled) aElemDes[j].value=aElemOri.item(0).value;
				}
				else if (oCampoDes.type=='checkbox')
				{
					if (aElemOri.length>7) oCampoDes.checked=(aElemOri.item(0).value='S');
					else oCampoDes.checked=false;
					if (oCampoDes.disabled)
					{
						if (oCampoDes.checked) aElemDes[1].value='S';
						else aElemDes[1].value='N';
					}
				}
				else if ((oCampoDes.type=='select-one') && (oCampoDes.disabled))
				{
					oCampoDes.value=aElemOri.item(0).value;
					aElemDes[1].value=aElemOri.item(0).value;
				}
				else
					oCampoDes.value=aElemOri.item(0).value;
			}
		}
  }
}

//----------------------------------------------------------
//	Funciones para la gestión de los botones que llaman al 
//  validador de certificados
//----------------------------------------------------------
function InvocarFormularioValidadorCertificados(oFormulario)
{
  var oCampoTipoLoginOrigen,oCampoTipoLogin;
  //Buscamos el tipo de login
	oCampoTipoLoginOrigen=oFormulario.elements.namedItem('TIPO_LOGIN');
	if(oCampoTipoLoginOrigen)
	{
	  oCampoTipoLogin=document.FormLoginCertificatDigital.elements.namedItem('tipoLogin');
	  if(oCampoTipoLogin)
	  {
	    oCampoTipoLogin.value=oCampoTipoLoginOrigen.value;
	  }
	}
	//Buscamos la clase del tipo de login
	oCampoTipoLoginOrigen=oFormulario.elements.namedItem('CLASE_TIPO_LOGIN');
	if(oCampoTipoLoginOrigen)
	{
	  oCampoTipoLogin=document.FormLoginCertificatDigital.elements.namedItem('claseTipoLogin');
	  if(oCampoTipoLogin)
	  {
	    oCampoTipoLogin.value=oCampoTipoLoginOrigen.value;
	  }
	}
	document.FormLoginCertificatDigital.submit();
}



//----------------------------------------------------------
//	Funciones para la gestion de los ficheros adjuntos
//----------------------------------------------------------
var winAttachEDF;

function SeleccionarFicheros()
{
	AbrirFormSeleccAdjuntos('');
}

function SeleccionarImagen(sCampoImagen)
{
	AbrirFormSeleccAdjuntos(sCampoImagen);
}


function AbrirFormSeleccAdjuntos(sCampoImagen)
{
	var oFormLink,oAttachments,i,oCampoOri,oCampoDes,iLeft,iTop,iWidth,iHeight,sFeatures,sEnlace,sEstilo,iIni,iFin,iNumCampAtt;
	
	//Buscamos el formulario que utilizaremos para simular un link y le quitamos todos los campos que tenga.
	oFormLink=document.getElementById('frmLink');
	while (oFormLink.childNodes.length>0)
		oFormLink.removeChild(oFormLink.childNodes.item(0));
	//Añadimos todos los campos que hay en los ficheros adjuntos
	oAttachments=document.getElementsByTagName('span');

	iNumCampAtt=0;
	
	for (j=0; j<oAttachments.length; j++)
	{
		if(oAttachments.item(j).id.substring(0,15) == 'spanAttachFiles')
		{
			iNumCampAtt++;	
			
			// se acumula la información de todos los ficheros adjuntos,
			// ya sean adjuntos convencionales, o campos de tipo imagen
			for(i=0;i<oAttachments.item(j).childNodes.length;i++)
			{
				//Creamos un campo oculto y lo anadimos al formulario
				oCampoOri=oAttachments.item(j).childNodes.item(i);
				oCampoDes=document.createElement('INPUT');
				oCampoDes.type='hidden';
				oCampoDes.name=oCampoOri.name;
				oCampoDes.value=oCampoOri.value;
				if (oCampoOri.name != undefined && oCampoOri.name != undefined)
					oFormLink.appendChild(oCampoDes);
			}
		}
	}

	// existe al menos un <span> para tener información de documentos / imágenes adjuntos
	if (iNumCampAtt > 0)
	{
		//Obtenemos las coordenadas de la nueva ventana
		iWidth=450;
		iHeight=350;
		iLeft=Math.round((window.screen.availWidth-iWidth)/2);
	  if (iLeft<0) iLeft=0;
		iTop=Math.round((window.screen.availHeight-iHeight)/2);
	  if (iTop<0) iTop=0;

		sFeatures="height=" + iHeight + ",width=" + iWidth + ",left=" + iLeft + ",top=" + iTop + ",directories=no,status=yes,toolbar=no,menubar=no,location=no,resizable=yes,titlebar=no"
		winAttachEDF=window.open('about:blank','winAttachFiles',sFeatures);
		sEnlace='../src/asp/selecFicheros/SelecFicheros.asp';


		// ARL 13/09/06 >> Añadir los parametros a la URL
	 	if (sCSS.length>0)	
			// Ya nos habian indicado el css (la variable sCSS esta definida en absBase.js)
			sParamEstilo = '?css=' + sCSS;
		else
		{		
			// ARL 13/09/06 >> Si no nos han indicado un CSS, se coge el ultimo definido en la pagina (el de mas bajo nivel). Se
			// corrige una incidencia que provocaba error si en la cabecera se definia un <STYLE>
			sEstilo=document.styleSheets.item(document.styleSheets.length-1).href;

			var i = 2;
			var sParamEstilo = "";
			while ((sEstilo == "") && (i <= document.styleSheets.length))
			{
				sEstilo=document.styleSheets.item(document.styleSheets.length-i).href;
				i++;
			}
			if (sEstilo != "")
			{
						iIni=sEstilo.lastIndexOf('/');
						iFin=sEstilo.lastIndexOf('.');
						if ((iIni>=0) && (iFin>=0) && (iIni<iFin))
							sParamEstilo = '?css=' + sEstilo.substr(iIni+1,iFin-iIni-1);
			}
		}
		if (sParamEstilo != "")
				sEnlace = sEnlace + sParamEstilo + '&img=' + sCampoImagen;
		else
				sEnlace = sEnlace + '?img=' + sCampoImagen;

		oFormLink.action=sEnlace;
		oFormLink.target='winAttachFiles';
		oFormLink.submit();
		if (winAttachEDF) winAttachEDF.focus();
	}
}

function AnadirFicheroAdjuntoFormulario(sKey,sNombre,sTamano,sId,sCampoImagen)
{
	var oSpanCampos,oSpanTexto,oCampo,sTexto;

	//Buscamos donde hay que anadir los campos
	oSpanCampos=document.getElementById('spanAttachFiles' + sCampoImagen);

	if (oSpanCampos)
	{
		//Anadimos los campos
		oCampo=document.createElement('INPUT');
		oCampo.type='hidden';
		oCampo.name=sKey;
		oCampo.value=sNombre;
		oSpanCampos.appendChild(oCampo);
		oCampo=document.createElement('INPUT');
		oCampo.type='hidden';
		oCampo.name=sKey;
		oCampo.value=sTamano;
		oSpanCampos.appendChild(oCampo);
		oCampo=document.createElement('INPUT');
		oCampo.type='hidden';
		oCampo.name=sKey;
		oCampo.value=sId;
		oSpanCampos.appendChild(oCampo);
		
		// Si el campo es de tipo imagen adjunta, añadimos el nombre del campo
		if (sCampoImagen != '')
		{
			oSpanCampos.appendChild(oCampo);
			oCampo=document.createElement('INPUT');
			oCampo.type='hidden';
			oCampo.name=sKey;
			oCampo.value=sCampoImagen;
			oSpanCampos.appendChild(oCampo);
		}

		//Actualizamos la descripcion
		oSpanTexto=document.getElementById('spanAttachText' + sCampoImagen);
		if (oSpanTexto)
		{
			sTexto='<b>' + sNombre + '</b>' + ' (' + sTamano + ' Mb); ';
			oSpanTexto.innerHTML=oSpanTexto.innerHTML + sTexto;
		}
	}
}

function ObtenerContenidoFichero(sIdEntidad, sIdioma, sIdFichero)
{
	var sURL;
	
	sURL="../Comun/Ficheros.asp?id=" + sIdEntidad + "&idioma=" + sIdioma  + "&fichero=" + sIdFichero

	if (NavegadorIE())
	{
	 			xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
				xmlHttpReq.open("GET",sURL , false);
				xmlHttpReq.send("");
	}
	else
	{
			xmlHttpReq=new XMLHttpRequest();
			xmlHttpReq.open("GET", sURL, false);
			xmlHttpReq.send("");	
	}

	return xmlHttpReq.responseText;
}


function VisualizarFicheroAdjunto(sIdEntidad, sNomTab, sTraGen, sOrden, sIdFichero, sOrigen)
{
		//Obtenemos las coordenadas de la nueva ventana
		iWidth=600;
		iHeight=480;
		iLeft=Math.round((window.screen.availWidth-iWidth)/2);
	  if (iLeft<0) iLeft=0;
		iTop=Math.round((window.screen.availHeight-iHeight)/2);
	  if (iTop<0) iTop=0;

		sFeatures="height=" + iHeight + ",width=" + iWidth + ",left=" + iLeft + ",top=" + iTop + ",directories=no,status=yes,toolbar=no,menubar=yes,location=no,resizable=yes,titlebar=no"
		sEnlace='../src/asp/selecFicheros/DescargaFichero.asp';
		sEnlace=sEnlace + '?sIdEntidad=' + sIdEntidad + '&sNomTab=' + sNomTab + '&sTraGen=' + sTraGen + '&sOrden=' + sOrden + '&sIdFichero=' + sIdFichero + '&sOrigen=' + sOrigen;
	 	if (sCSS.length>0) sEnlace=sEnlace + '&css=' + sCSS;
		else
		{
			sEstilo=document.styleSheets.item(document.styleSheets.length-1).href;
			iIni=sEstilo.lastIndexOf('/');
			iFin=sEstilo.lastIndexOf('.');
			if ((iIni>=0) && (iFin>=0) && (iIni<iFin))
			{
				sEnlace=sEnlace + '&css=' + sEstilo.substr(iIni+1,iFin-iIni-1);
			}
		}
		winAttachEDF=window.open(sEnlace,'_blank',sFeatures);
		winAttachEDF.focus();
}

// -------------------- Calendario -------------------------------------
/* 	DESTINATARIO -CONSULTAS-
	Muestra un calendario para seleccionar una fecha, se utiliza para rellenar 
	un campo fecha
*/
      //var idCalendario='calendario0'; 
      function updateInputDate(strDate, idField){
          var fieldDate=$(idField);
          strDate=Transformar_Data(strDate);
          fieldDate.value=strDate;
  				fieldDate.focus(); // Para forzar que se ejecuten los scripts de validación...
	        fieldDate.blur();
          fieldDate.focus();

          //alert('validar Fecha='+Validar_Data(strDate));
          Element.remove( 'cal_' + idField );
      } 
      function mostrarCalendario(id,idField){
          var dimensions = Element.getDimensions( idField );
          var html_calendario='<div id="cal_' + idField + '" class="cont_calendario" style="display:none;"></div>';
          
          if(!document.getElementById('cal_' + idField)){
            new Insertion.After(id, html_calendario);                     
            clone_position(idField, 'cal_' + idField,{offsetTop:dimensions.height});
            new Draggable('cal_' + idField,{revert:true});
            var fecha = $F(idField);
            var aFecha=fecha.split(' ');
            fecha=aFecha[0];
            var cal_0=new Calendarios( fecha , 'cal_' + idField , '' , -1 , '', idField, {} );
            //new Effect.toggle($('cal_' + idField),'appear',false);
            //new Effect.toggle($('cal_' + idField),'blind');
            //new Effect.toggle($('cal_' + idField),'appear',false);
            Element.show('cal_' + idField);
            
          }else{
            Element.remove( 'cal_' + idField );
            cal_0='';
          }
      }
      function clone_position(source, target) {
          var options = Object.extend({
            setLeft:    true,
            setTop:     true,
            setWidth:   false,
            setHeight:  false,
            offsetTop:  0,
            offsetLeft: 0
          }, arguments[2] || {})
          source = $(source);
          var p = Position.page(source);
          // coordenadas
          target = $(target);
          var delta = [0,0];
          var parent = null;
          if (Element.getStyle(target,'position') == 'absolute') {
            parent = Position.offsetParent(target);
            delta = Position.page(parent);
          }      
          // correct by body offsets (fixes Safari)
          if (parent == document.body) {
            delta[0] -= document.body.offsetLeft;
            delta[1] -= document.body.offsetTop;
          }
          if( options.setLeft)   target.style.left  = (p[0] - delta[0] + 
                                                       options.offsetLeft) + 'px';
          if(options.setTop)    target.style.top   = (p[1] - delta[1] +
                                                       options.offsetTop) + 'px';
          if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
          if(options.setHeight) target.style.height = source.offsetHeight + 'px';
        }
        
        // -------------------- Mostrar Fecha actual al cargar la página -------------------------------------
/* 	DESTINATARIO -CAMPOS FECHA-
	  Busca los campos fecha que tengan el evento onfocus="FechaActual(...)" y llama a la funcion fecha actual
	  para cargar la fecha.
*/
 
    function CargarFechaActual(){
        //oForm=document.getElementById("frmTramite");
        var elementList = Form.getElements("frmTramite");
        for (i=0;i<elementList.length;i++)
        {
            if (elementList[i].type=='hidden' &&  elementList[i].value=='date')
            {
							var idCampo=elementList[i].name

							//** AGA: 23/10/2006 >> Modificación para contemplar también campos de tipo fecha y hora
            	if (document.getElementById(idCampo + '0') && document.getElementById(idCampo + '1'))
            	{
              	FechaActual($(idCampo + '0'));
              	HoraActual($(idCampo + '1'));
            	}
							else            	
							{
              	FechaActual($(idCampo));
              }
            }
        }
    }

    function EDC_fechaAccionCalendario(idCampo,sCampo){
      //EDR 1/09/06 Consultas con calendario-reservas, Necesitamos cambiar dinamicamente el valor del campo fecha de filtro
      var oCampoFiltroCal = document.getElementById(idCampo);
      oCampoFiltroCal.value=sCampo;
     }
     
     
/////////////////////////////////////////////////////////////////////////////////////////////
// LISTAS DINÁMICAS
//------------------------------------------------------------------------------------------
// Funciones genéricas para la carga de una lista de manera dinámica mediante AJAX
/////////////////////////////////////////////////////////////////////////////////////////////     

function CargaListaDinamicaById(idElemento)
{
   var oSelect= document.getElementById(idElemento);
   var actual;
   var value;
   var padre;
   if (!oSelect) return true;
   padre= oSelect.parentNode;
   var hijos = padre.childNodes;
   
   for (var i=1; i<hijos.length; i++)
   {
      actual = hijos[i];
	  if (actual.id == idElemento)
	  {
	     value = actual.value;
		break; 
	  }
	  
   }
   CargarListaDinamicaByValue(idElemento,value);
}
/*
function CargarListaDinamicaByValue(idElemento,sLista)
{

    
	if(aDinList && iNumList && sListas)
	{
		var urlASP='../../forms_base/ListaDinamica.asp?IdLista=' + sLista;
			
			
			
			var sNomCampo = idElemento;

			var idtargetDIV='targetLst_' + sNomCampo;  
	
    	new Ajax.Listcompleter( sNomCampo, 
    							idtargetDIV, 
    							urlASP, new Array(), sLista, false).getValues();
		
	}
}
*/
function CargarListasDinamicas()
{
	if(aDinList && iNumList && sListas && window.location.search.indexOf('procedencia') > 0)
	{
		var aTmp = sListas.split('|');
		for (var i=0; i<aTmp.length; i++)
		{
			var sLista = aTmp[i];
		    var urlASP='../../forms_base/ListaDinamica.asp?IdLista=' + sLista;
			
			aCampos=aDinList[sLista]['campos'].split('|');
			
			var sNomCampo = aCampos[0];

			var idtargetDIV='targetLst_' + sNomCampo;  
	
	    	new Ajax.Listcompleter(sNomCampo, 
    							idtargetDIV, 
    							urlASP, new Array(), sLista, true, true).getValues();
		}
	}
	
}


// Explora todos los elementos SELECT contenidos en el parámetro
// y si corresponden a listas dinámicas se cargan 
function CargarCombosDinamicasDe(oElemPadre)
{
	if (oElemPadre)
	{
		var aCombos = oElemPadre.getElementsByTagName('SELECT');
		
		for (var i=0; i<aCombos.length; i++)
		{
			if (EsComboDinamicaMaestra(aCombos[i]))
			{
//			alert(aCombos[i].id);
				CargarAndLlenarComboDinamica(aCombos[i]);
			}
		}
	}
}

//Cierto si es una combo dinámica padre, es decir, la lista de valores
//disponibles no depende del valor de alguna otra lista
function EsComboDinamicaMaestra(oSelect)
{
	if (typeof aDinCmp!="undefined") // Hay listas dinámicas
	{
		// Está entre las listas dinámicas independientes
		if (aDinCmp[oSelect.id] && (oSelect.getAttribute('onfocus')+'').indexOf('LlenarComboDinamica(this);') >= 0) 
			return true;
			
		if(aDinCmp[oSelect.id])
			if(aDinCmp[oSelect.id]['val'] != '')
				return true;			
	}
	return false;
}

// Hace la petición AJAX para obtener los valores de una lista.
// El resultado se guarda en la seccion xml correspondiente a todas las combos que
// utilizan esa lista, por eso si se invoca esta operación sobre una combo para la
// cual ya se dispone de los valores ya no se hace otra petición al WS de listas
function CargarAndLlenarComboDinamica(oSelect)
{
	if(oSelect && aDinCmp)
	{			
		if (oSelect.value == '')
		{
			var sLista = aDinCmp[oSelect.id]['lst'];

//			if (!aDinList[sLista]['cargada'])
//			{
				EliminarElementosSubLista(oSelect);

				var urlASP='../../forms_base/ListaDinamica.asp?IdLista=' + sLista;
				var sNomCampo = oSelect.id;
				var aCampos = new Array(sNomCampo);
				var idtargetDIV='targetLst_' + sNomCampo;  
    			new Ajax.Listcompleter( sNomCampo, 
    									idtargetDIV, 
    									urlASP, new Array(), sLista, true, true).getValues();
//    	}
//	    else
//	    {
//	    	LlenarComboDinamica(oSelect, true);
//	    }
    }
    else
    {
    	LlenarComboDinamica(oSelect, true);
    }
	}
}

// Rellena un elemento SELECT a partir de los datos almacenados en la sección XML
// adjunta destinada a tal efecto
function LlenarComboDinamica(oSelect, bMantenerEstado)
{
	var bLlenar = false;
	var bStatus = oSelect.disabled;


	 // 1.- Miramos si ya tenemos valores o no
	if (oSelect.options.length == 0) bLlenar=true;
	else if (oSelect.options.length <= 2)
	{
		// Si sólo tenemos un elemento, seguramente es el valor nulo por defecto
		// si es así hay que recargar
		if (oSelect.options[0].value == '') bLlenar=true;
	}

	// 2.- Miramos si este campo está en la lista global de campo dinámicos
	if (bLlenar && aDinCmp)
		if (aDinCmp[oSelect.id]) bLlenar=true;

	
	// 3.- Cargamos las opciones
	if (bLlenar)
	{
		EliminarElementosSubLista(oSelect);
		
		var oTarget = document.getElementById('targetLst_' + oSelect.id);
		if (oTarget)
		{		
			if (NavegadorIE())
			{
      			var oListaElems = oTarget.XMLDocument.selectNodes("//e");	      
      			oSelect.disabled = (oListaElems.length == 0);
				for (i=0;i<oListaElems.length;i++)
				{
					oOption = document.createElement("OPTION");
					oOption.text=oListaElems(i).nodeTypedValue;
					oOption.value=oListaElems(i).getAttribute("i") + "-" + oListaElems(i).nodeTypedValue;
					oSelect.add(oOption);
				}
			}
			else
			{
    			var oLista = oTarget.childNodes[1].getElementsByTagName('E');
    			oSelect.disabled = (oLista.length == 0);
				for (i=0;i<oLista.length;i++)
				{
					oSelect.options[oSelect.options.length] = new Option(
					oLista[i].innerHTML, 
					oLista[i].getAttribute('i') + '-' + oLista[i].innerHTML);
				}
			}

			if (bMantenerEstado) 
			{
				//alert(oSelect.id + ':' + bStatus);
				oSelect.disabled = bStatus;
			}
			
			if(aDinCmp[oSelect.id]['val'] != '')
			{
				// Se le ha asignado un valor mientras se estaba cargando,
				// lo marcamos ahora como seleccionado
				EstablecerValorCampo(window.document, oSelect.id, aDinCmp[oSelect.id]['val'], '=');
				aDinCmp[oSelect.id]['val'] = '';
			}
			else
			{
				if (oSelect.options.length == 1) oSelect.selectedIndex = 0; 
				else if (oSelect.options.length == 2) {
					if (oSelect.options[0].value == '') oSelect.selectedIndex = 1; 
				}	
			}
			

		}
	}
}




function LlenarUnValorComboDinamica(oSelect, bMantenerEstado)
{
	var bLlenar = false;
	var bStatus = oSelect.disabled;

	 // 1.- Miramos si ya tenemos valores o no
	if (oSelect.options.length == 0) bLlenar=true;
	else if (oSelect.options.length == 1)
	{
		// Si sólo tenemos un elemento, seguramente es el valor nulo por defecto
		// si es así hay que recargar
		if (oSelect.options[0].value == '') bLlenar=true;
	}

	// 2.- Miramos si este campo está en la lista global de campo dinámicos
	if (bLlenar && aDinCmp)
		if (aDinCmp[oSelect.id]) bLlenar=true;

	
	// 3.- Cargamos las opciones
	if (bLlenar)
	{
		var oTarget = document.getElementById('targetLst_' + oSelect.id);
		if (oTarget)
		{		
			if (NavegadorIE())
			{
      			var oListaElems = oTarget.XMLDocument.selectNodes("//e");	      
      			oSelect.disabled = (oListaElems.length == 0);
				for (i=0;i<oListaElems.length;i++)
				{
					if(aDinCmp[oSelect.id]['val'] == oListaElems(i).getAttribute("i"))
					{
							oOption = document.createElement("OPTION");
							oOption.text=oListaElems(i).nodeTypedValue;
							oOption.value=oListaElems(i).getAttribute("i") + "-" + oListaElems(i).nodeTypedValue;
							oSelect.add(oOption);

							EstablecerValorCampo(window.document, oSelect.id, aDinCmp[oSelect.id]['val'], '=');
//							aDinCmp[oSelect.id]['val'] = '';
					}
				}
			}
			else
			{
    			var oLista = oTarget.childNodes[1].getElementsByTagName('E');
    			oSelect.disabled = (oLista.length == 0);
				for (i=0;i<oLista.length;i++)
				{
					if(aDinCmp[oSelect.id]['val'] == oListaElems(i).getAttribute("i"))
					{
							oSelect.options[oSelect.options.length] = new Option(
							oLista[i].innerHTML, 
							oLista[i].getAttribute('i') + '-' + oLista[i].innerHTML);

							EstablecerValorCampo(window.document, oSelect.id, aDinCmp[oSelect.id]['val'], '=');
//							aDinCmp[oSelect.id]['val'] = '';
					}
				}
			}

			if (bMantenerEstado) 
			{
				//alert(oSelect.id + ':' + bStatus);
				oSelect.disabled = bStatus;
			}
		}
	}
}



// Llamada para cargar una sublista dinámica, de la cuál se obtienen los valores
// en función del valor seleccionado en una lista padre
function CargarSubComboDinamica(oSelectDest, sListaPadre, sValor, sSubLista)
{
	if (oSelectDest) EliminarElementosSubLista(oSelectDest);
		

	if (window.location.search.indexOf('procedencia=Confirmacion')>=0)
    {
	  
		if (aDinList)
		{
			if (aDinList[sListaPadre])
			{
		
				if ( aDinCmp[aDinList[sListaPadre]['campos']])
				{
				ValorAux = aDinCmp[aDinList[sListaPadre]['campos']]['val'];
				}	
			}
			if (ValorAux.length>0)
			{
	       
			sValor= ValorAux;
	 
			}	     
	
		}
	
	          
	}

	
	var urlASP='../../forms_base/SubListaDinamica.asp?IdListaPadre=' + sListaPadre + '&valor='  + sValor.split('-')[0] + '&IdSubLista='  + sSubLista ;

	var sNomCampo = oSelectDest.id;

	var aCampos = new Array(sNomCampo);

	var idtargetDIV='targetLst_' + oSelectDest.id;  

	if (typeof(aDinList)=='undefined') return;
	
	aDinList[sSubLista]['cargada'] = false;

  	new Ajax.Listcompleter( sNomCampo, 
  						idtargetDIV, 
  						urlASP, aCampos, sSubLista, true, false).getValues();
}


/////////////////////////////////////////////////////////////////////////////////////////////
// TABS
//------------------------------------------------------------------------------------------
// Funciones genéricas para la inicialización y navegación por una estructura de tabs
/////////////////////////////////////////////////////////////////////////////////////////////     

// Variables globales tabs
var enabletabpersistence=1; 
var tabcontentIDs=new Object();
var pestanaActual="";

var selectedTabs=new Array();
var idsTabs=new Array();

// -------------------- INICIALIZAR TABS (PESTAÑAS) -------------------------------------
// Inicializa los tabs de la página (invocar desde onload pasando como parametros los ids de
// las secciones a inicializar)


function GetPagina()
{
  var aTmp = window.location.pathname.split('/');
  var idPagina = aTmp[aTmp.length-1].substring(0, 32);
  return idPagina;
}

function RecuperandoDatos()
{
   var resultado= false;
  var aTmp = window.location.search;
  aTmp= aTmp.toLowerCase();
  resultado= aTmp=="?procedencia=consulta";
  return resultado;
}
function InicializarPestana(pestana)
{	
	CargarCombosPestanaVisible(pestana);
	var idPagina = GetPagina();
	if (RecuperandoDatos() && GetCampoValidacion(pestana)== "S") 
	{
		RecuperacionDatosLogicaNegocioPestana(idPagina,pestana);
		return;
	}
	if (GetCampoValidacion(pestana)== "S") return;
	
	InicializacionLogicaNegocioPestana(idPagina,pestana); 
}


function CargarCombosPestanaVisible(idPestana)
{
	// Buscamos en las listas de tabs seleccionados para que en el caso de que el
	// pasado por parámetro tenga subtabs, se carguen solo las combos del
	for (var k=0; k<idsTabs.length; k++)
	{
		if (selectedTabs[idsTabs[k]])
		{
			if (selectedTabs[idsTabs[k]].substring(0, idPestana.length) == idPestana)
				idPestana = selectedTabs[idsTabs[k]];			
		}
	}
	CargarCombosDinamicasDe(document.getElementById(idPestana)); 
}

function initializetabcontent(){

	var primeroDeTodos=true;		
	
	idsTabs = arguments;
	
	for (var i=0; i<arguments.length; i++)
	{ 
		var primeroDeTab=true;		
		
		if (enabletabpersistence==0 && getCookieTab(arguments[i])!="") setCookieTab(arguments[i], "");
		var clickedontab=getCookieTab(arguments[i]);
		var ulobj=document.getElementById(arguments[i]);
		var ulist=ulobj.getElementsByTagName("li");
		for (var x=0; x<ulist.length; x++)
		{ 		
			var ulistlink=ulist[x].getElementsByTagName("a")[0];
			if (ulistlink.getAttribute("rel"))
			{
				ulistlink.onclick=function(){
								if (validaPestana(pestanaActual)) {
									expandcontent(this); 
									pestanaActual=this.getAttribute("rel"); 
						
									
									// Entre los otros selectores de tabs buscamos alguno que tenga pestañas hijas
									// (tienen el mismo id seguido del sufijo a, b, c, d...
									for (var k=0; k<idsTabs.length; k++)
									{
										if (idsTabs[k] != this.parentNode.parentNode.id)
											if (selectedTabs[idsTabs[k]].substring(0, pestanaActual.length) == pestanaActual)
												pestanaActual=selectedTabs[idsTabs[k]]; 
										else
											selectedTabs[idsTabs[k]]=pestanaActual; 
									}
								    InicializarPestana(pestanaActual);
								} 
								return false;
				}
				savetabcontentids(arguments[i], ulistlink.getAttribute("rel"));
				if (ulist[x].className=="selected" && clickedontab=="")
				{
					if (primeroDeTodos)
					{
						primeroDeTodos=false; 
						pestanaActual=ulistlink.getAttribute("rel");
					}
				
					if (primeroDeTab)
					{
						primeroDeTab=false;
						idsTabs[i]=arguments[i];
						selectedTabs[arguments[i]] = ulistlink.getAttribute("rel");
					}
		
					expandcontent(ulistlink);
				}
			}
		} 
		if (clickedontab!="")
		{ 
			var culistlink=getullistlinkbyId(arguments[i], clickedontab);
			if (typeof culistlink!="undefined") {expandcontent(culistlink);	}
			else {expandcontent(ulist[0].getElementsByTagName("a")[0]);}
			if (primeroDeTodos){
				pestanaActual=culistlink.getAttribute("rel"); 
				primeroDeTodos=false; 
			}
			
			if (primeroDeTab){
				primeroDeTab=false;
				idsTabs[i]=arguments[i];
				selectedTabs[arguments[i]] = culistlink.getAttribute("rel"); 
			}
			
			
									// Entre los otros selectores de tabs buscamos alguno que tenga pestañas hijas
									// (tienen el mismo id seguido del sufijo a, b, c, d...
									for (var k=0; k<idsTabs.length; k++)
									{
										if (idsTabs[k] != culistlink.parentNode.parentNode.id)
											if (selectedTabs[idsTabs[k]])
												if (selectedTabs[idsTabs[k]].substring(0, pestanaActual.length) == pestanaActual)
													pestanaActual=selectedTabs[idsTabs[k]]; 
									}
		}
	} 

     
}


// -------------------- VALIDACION  TABS (PESTAÑAS) -------------------------------------
// Valida la pestaña con el id pasado por parámetro mirando la validez los campos que contiene
// (obligatorio/no obligatorio, incorrecto <== color rojo)       
// Además se invoca a la función ValidacionLogicaNegocioPestana, que se puede redifinir en 
// el fichero scriptsCampos.js para hacer validaciones más específicas, propias de cada 
// formulario

function validaPestana(idPestana, bSubmit) 
{   
	var oCampo, sMensajeError;
	var bError=false;
	var pestana=document.getElementById(idPestana);
	/* VALIDAMOS INPUTS */
	var listaInputs=pestana.getElementsByTagName('input');
	for (var i=0;i<listaInputs.length;i++)
	{
		if ((listaInputs[i].getAttribute('type')!="hidden")&&(listaInputs[i].getAttribute('onblur')!=null))
		{
			if((((listaInputs[i].getAttribute('onblur')+'').indexOf('CampoObligatorio')>=0) && (listaInputs[i].value.length==0))||((listaInputs[i].style.color=='Red')||(listaInputs[i].style.color=='red')))
			{
				bError=true; oCampo=listaInputs[i]; sMensajeError=strCampoObligatorio + ' ' + listaInputs[i].getAttribute('title').toUpperCase();
			}
		}
		if (bError){break;}
	}
	/* VALIDAMOS SELECTS */
	var listaInputs=pestana.getElementsByTagName('select')
	for (i=0;i<listaInputs.length;i++)
	{
		if ((listaInputs[i].getAttribute('type')!="hidden")&&(listaInputs[i].getAttribute('onblur')!=null))
		{
			if(((listaInputs[i].getAttribute('onblur')+'').indexOf('CampoObligatorio')>=0) && (!listaInputs[i].disabled) &&(listaInputs[i].value.length==0))
			{
				bError=true;oCampo=listaInputs[i];sMensajeError=strCampoObligatorio + ' ' + listaInputs[i].getAttribute('title').toUpperCase();
			}
		}
		if (bError){break;}
	}
	/* TRATAMIENTO DE ERRORES */
	if (bError)
	{
		actualizaCampoValidacion(idPestana,"N");
		alert(sMensajeError);
		if (oCampo.type != 'hidden'){ try {oCampo.focus(); } catch(ex) {}}
		return false;
	}
	else 
	{
		// Validación de la lógica de negocio:
		// Se llama a una función generica que por defecto devuelve cierto y que se
		// debe reprogramar si hay que hacer validaciones especificas para una página
		// y/o pestaña. Los mensajes de error pertinentes se han de mostrar desde 
		// dentro de esta funcion
		
		// Si no hay errores
		var aTmp = window.location.pathname.split('/');
		var idPagina = aTmp[aTmp.length-1].substring(0, 32);
		
		if (!ValidacionLogicaNegocioPestana(idPagina, idPestana, bSubmit))
		{
			actualizaCampoValidacion(idPestana,"N");
			return false;
		}
		else
		{
			actualizaCampoValidacion(idPestana,"S");
			return true;
		}
	}
}



// Campo de validación: En cada pestaña podemos tener un campo hidden que se usa
// para saber si el conenido de la misma es válido o no.
// Las siguientes funciones auxiliares se utilizan para actualizar el valor
// segun corresponda
function GetCampoValidacion(nombrePestana)
{
	var oCampoVal = document.getElementById(nombreCampoValidacion(nombrePestana));
	return oCampoVal.value;
}

function nombreCampoValidacion(nombrePestana)
{
	var nombreCampo="WTXVAL";
	var letra="a";
	i=nombrePestana.length;
	if (isNaN(nombrePestana.substr(i-1,1))) { letra=nombrePestana.substr(i-1,1); nombrePestana=nombrePestana.substr(0,i-1);}
	i=nombrePestana.length;
	while (isNaN(nombrePestana.substr(0))) { 	nombrePestana = nombrePestana.substr(nombrePestana.length- (i--));	}
	if (nombrePestana.length==1) {nombrePestana= '0' + nombrePestana;}
	nombreCampo= nombreCampo + nombrePestana + letra;
	return nombreCampo;
}

function actualizaCampoValidacion(nombrePestana, valor)
{
	var oCampoVal = document.getElementById(nombreCampoValidacion(nombrePestana));
	if (oCampoVal) oCampoVal.value=valor;
}

//FUNCIONES AUXILIARES VISUALIZACION TABS:

function expandcontent(linkobj)
{
    var ulid=linkobj.parentNode.parentNode.id;
    
/* Las siguientes lineas es código para no depender de una estructura estática de capas */
	//linkPadre=linkobj.parentNode
	//while (linkPadre.name!=ul){linkPadre=linkPadre.parentNode}
	//	var ulid=linkPadre.id
	
    var ullist=document.getElementById(ulid).getElementsByTagName("li");

    for (var i=0; i<ullist.length; i++)
		{
		    ullist[i].className="";  
			if (typeof tabcontentIDs[ulid][i]!="undefined"){document.getElementById(tabcontentIDs[ulid][i]).style.display="none";}
		}

	if ( (pestanaActual!='') || (pestanaActual==linkobj.getAttribute("rel")))
	{
	
	    linkobj.parentNode.className="selected";  
		document.getElementById(linkobj.getAttribute("rel")).style.display="block";
	    saveselectedtabcontentid(ulid, linkobj.getAttribute("rel"));
	}
	else{if (pestanaActual==''){linkobj.parentNode.className="selected";document.getElementById(linkobj.getAttribute("rel")).style.display="block";}}
}

function expandtab(tabcontentid, tabnumber){ var thetab=document.getElementById(tabcontentid).getElementsByTagName("a")[tabnumber]; if (thetab.getAttribute("rel")){expandcontent(thetab);}}
function savetabcontentids(ulid, relattribute){if (typeof tabcontentIDs[ulid]=="undefined") {tabcontentIDs[ulid]=new Array();} tabcontentIDs[ulid][tabcontentIDs[ulid].length]=relattribute;}
function saveselectedtabcontentid(ulid, selectedtabid){ if (enabletabpersistence==1) setCookieTab(ulid, selectedtabid);}
function getCookieTab(Name){ return "";var re=new RegExp(Name+"=[^;]+", "i"); if (document.cookie.match(re)) {return document.cookie.match(re)[0].split("=")[1];}return "";}
function setCookieTab(name, value){ document.cookie = name+"="+value;}

function getullistlinkbyId(ulid, tabcontentid){
    var ullist=document.getElementById(ulid).getElementsByTagName("li");
    for (var i=0; i<ullist.length; i++)
	{if (ullist[i].getElementsByTagName("a")[0].getAttribute("rel")==tabcontentid){return ullist[i].getElementsByTagName("a")[0]; break;}}
}



// showElementsTab: Se ejecuta al hacer submit en un formulario con pestañas
function showElementsTab(oEvent, theForm, idPestana) {   
  var oBtnAceptar,idPagina,oSelTab;

	if (NavegadorIE()) oBtnAceptar=oEvent.srcElement;
	else oBtnAceptar=oEvent.target;

	if (oBtnAceptar!=null) oBtnAceptar.disabled=true;


	var aTmp = window.location.pathname.split('/');
	idPagina = aTmp[aTmp.length-1].substring(0, 32);

	// Campo oculto para guardar el identificador
	// de la pestaña seleccionada, si existe se llama WTXSELTAB
	oSelTab = document.getElementById('WTXSELTAB');
	if (oSelTab) oSelTab.value = idPestana;
	
	
	if (!validaPestana(idPestana, true))
	{
		if (oBtnAceptar!=null) oBtnAceptar.disabled=false;
		if (NavegadorIE())
		{
			oEvent.cancelBubble = true;
			oEvent.returnValue = false;
		}
		else
		{
			oEvent.stopPropagation();
			oEvent.preventDefault();
		}
	}
	else
	{
		if (winAttachEDF)
		{
			if (!winAttachEDF.closed) winAttachEDF.close();
		}
		
		if (hayElementoFirma(theForm))
		{
			if (firmar(theForm,theForm.FIRMA_SOLICITUD,oEvent))
			{
				theForm.submit();
			}						
		}
		else
		{
			theForm.submit();
		}		
	}
}




// PRUEBAS

//Sergio
/*function LlenarCombo(oSelectId, bMantenerEstado)
{
	  
	var bLlenar = false;
	var oSelect = document.getElementById(oSelectId);
	
	var bStatus = oSelect.disabled;
  
   
  //  if (oSelect.style.display =="none" || bStatus) return;

	
	// 1.- Miramos si ya tenemos valores o no
	if (oSelect.options.length == 0) bLlenar=true;
	else if (oSelect.options.length == 1)
	{
		// Si sólo tenemos un elemento, seguramente es el valor nulo por defecto
		// si es así hay que recargar
		if (oSelect.options[0].value == '') bLlenar=true;
	}


	// 2.- Miramos si este campo está en la lista global de campo dinámicos
	if (bLlenar && aDinCmp)
		if (aDinCmp[oSelect.id]) bLlenar=true;


	
	// 3.- Cargamos las opciones
	if (bLlenar)
	{
		var oTarget = document.getElementById('targetLst_' + oSelect.id);
		if (oTarget)
		{		
	    if (NavegadorIE())
	    {
      	var oListaElems = oTarget.XMLDocument.selectNodes("//e");	      
				for (i=0;i<oListaElems.length;i++)
				{
	          //oElemento=oListaElementos.item(i);
						oOption = document.createElement("OPTION");
						oOption.text=oListaElems(i).nodeTypedValue;
					  oOption.value=oListaElems(i).getAttribute("i") + "-" + oListaElems(i).nodeTypedValue;
					  oSelect.add(oOption);
					  
					 
				}
			}
	    else
			{
    		var oLista = oTarget.childNodes[1].getElementsByTagName('E');
				for (i=0;i<oLista.length;i++)
				{
						oSelect.options[oSelect.options.length] = new Option(
							oLista[i].innerHTML, 
							oLista[i].getAttribute('i') + '-' + oLista[i].innerHTML);
				}
	    }

			if (oSelect.options.length == 1) oSelect.disabled = true;
			else
			{
				oSelect.disabled = false;
				if (oSelect.options.length == 2) oSelect.selectedIndex = 1; 
			}
			
			if (bMantenerEstado) oSelect.disabled = bStatus;

			if(aDinCmp[oSelect.id]['val'] != '')
			{
				// Se le ha asignado un valor mientras se estaba cargando,
				// lo marcamos ahora como seleccionado
				EstablecerValorCampo(window.document, oSelect.id, aDinCmp[oSelect.id]['val'], '=');
				aDinCmp[oSelect.id]['val'] = '';
			}
		}
	}

	
 
}*/

/*
function CargarAndLlenarListaDinamicaById(oSelectId)
{
   var oSelect = document.getElementById(oSelectId);
	if(oSelect)
	{
			
			EliminarElementosSubLista(oSelect);
			
			var sLista = aDinCmp[oSelect.id]['lst'];
		
			var urlASP='../../forms_base/ListaDinamica.asp?IdLista=' + sLista;
			
			var sNomCampo = oSelect.id;

			var aCampos = new Array(sNomCampo);
			
			var idtargetDIV='targetLst_' + sNomCampo;  
	
    	new Ajax.Listcompleter( sNomCampo, 
    							idtargetDIV, 
    							urlASP, aCampos, sLista, true).getValues();
	}
}

*/