// funciones.js
/////////////////////////////////////////////////
// CAMBIO BOTON VOLVER ACCESIBILIDAD           //
/////////////////////////////////////////////////
function cambiaBotonVolver()
{
var labelVolver = '<html:button property="button" styleClass="botones" title="Vuelve a la p&aacute;gina de resultados de la b&uacute;squeda" value="volver a resultados" onclick="javascript:history.back()" />';

var botonVolver = document.getElementById("capaBotonVolver_NO");

while (botonVolver)
{
	alert("antesVolver: "+botonVolver.innerHTML);
	botonVolver.innerHTML = labelVolver;
	botonVolver.setAttribute("id", "capaBotonVolver_SI");
	alert("despuesVolver: "+botonVolver.innerHTML);

	botonVolver = document.getElementById("capaBotonVolver_NO");
}

}

/////////////////////////////////////////////////
// CAMBIO BOTON CALENDARIO ACCESIBILIDAD       //
/////////////////////////////////////////////////

function cambiaBotonCalendario()
{
var labelINI = '<div style="padding-left: 10px;float: left;height: 2em;"><input style="width:6em ; border-style: solid;" value="Calendario" type="button" name="BuscarFechaINI" id="BuscarFechaINI" onclick="popUpCalendar(this, forms[0].diaINI,forms[0].mesINI,forms[0].anioINI)"/></div>';
var labelFIN = '<div style="padding-left: 10px;float: left;height: 2em;"><input style="width:6em" value="Calendario" type="button" name="BuscarFechaFIN" id="BuscarFechaFIN" onclick="popUpCalendar(this, forms[0].diaFIN,forms[0].mesFIN,forms[0].anioFIN)"/></div>';
var labelTemp = '<div style="padding-left: 10px;float: left;height: 2em;"><input value="Calendario" type="button" name="BuscarFechaTemp" id="BuscarFechaTemp" onclick="'
		+"popUpCalendar(this, document.forms[0].elements[posicion(form,'usuarioReg.diaTemp_c')],document.forms[0].elements[posicion(form,'usuarioReg.mesTemp_c')],document.forms[0].elements[posicion(form,'usuarioReg.anioTemp_c')])"
		+'"/></div>';
		
var botonCalendarioINI = document.getElementById("capaCalendarioINI_NO");
var botonCalendarioFIN = document.getElementById("capaCalendarioFIN_NO");
while (botonCalendarioFIN)
{
	//alert("antesFIN: "+botonCalendarioFIN.innerHTML);
	botonCalendarioFIN.innerHTML = botonCalendarioFIN.innerHTML+labelFIN;
	botonCalendarioFIN.setAttribute("id", "capaCalendarioFIN_SI");
	//alert("despuesFIN: "+botonCalendarioFIN.innerHTML);

	botonCalendarioFIN = document.getElementById("capaCalendarioFIN_NO");
}
while (botonCalendarioINI)
{
	//alert("antesINI: "+botonCalendarioINI.innerHTML);
	botonCalendarioINI.innerHTML = botonCalendarioINI.innerHTML+labelINI;
	botonCalendarioINI.setAttribute("id", "capaCalendarioINI_SI");
	//alert("despuesINI: "+botonCalendarioINI.innerHTML);

	botonCalendarioINI = document.getElementById("capaCalendarioINI_NO");
}

}




function validaciones (form) {
    var retorno = false;
    var fecha;
    var hora;
    
	fecha = leerFecha(form,"datosControl.fechaInicioContDiaDC","datosControl.fechaInicioContMesDC","datosControl.fechaInicioContAnnoDC");

	retorno = esFechaCorrecta(fecha);
   	if (retorno == false)
   	{
   	  return mensaje(form,"La fecha de inicio de control es incorrecta","datosControl.fechaInicioContDiaDC");
   	}
   	
    /////////////////////////////////////////////////////
   	// Si esta marcado el check de la primera citacion //
    /////////////////////////////////////////////////////   	
   	if (form.elements[posicion(form,"citacion1.citacion")].checked) {
   	   
   	   var fechaCit = leerFecha(form,"citacion1.fechaDiaCitacion","citacion1.fechaMesCitacion","citacion1.fechaAnnoCitacion");
	   if (fechaCit!="//") {
	   	   retorno = esFechaCorrecta(fechaCit);
   		   if (retorno == false) {
	   		  return mensaje(form,"La fecha de la primera citacion es incorrecta","citacion1.fechaDiaCitacion");
   	   		}
   	   }

   	   var horaCit = horaCitacion(form);
   	   if (horaCit!=":") {
	   	   retorno = esHoraCorrecta(horaCit,2);
   		   if (retorno == false) {
   		      return mensaje(form,"La hora de la primera citacion es incorrecta (hh:mm)","citacion1.horaMeridianoCitacion");
   	   		}
   	   	}
   	   	
   	   // El asunto de la situacion es obligatorio
   	   var asunto = leerCampo(form,"citacion1.asuntoCitacion");
   	   if (asunto=="") {
   	   		return mensaje(form,"Debe indicarse el asunto de la primera citacion","citacion1.asuntoCitacion");
   	   }
   	   
   	   /*
   	   	Si esta relleno el la fecha y hora de la citacion o el plazo, entonces son obligatorios:
   	   		- Lugar
   	   		- Dirigirse
   	   */
   	   var plazo = leerCampo(form,"citacion1.plazoCitacion");
   	   if ((fechaCit!="//" && horaCit!=":") || plazo!="") {
   	   		texto = leerCampo(form,"citacion1.lugarCitacion");
   	   		if (texto == "") {
   	   			return mensaje (form, "El lugar de la citacion es obligatorio", "citacion1.lugarCitacion");
   	   		}
   	   		texto = leerCampo(form,"citacion1.gestorCitacion");
   	   		if (texto == "") {
   	   			return mensaje (form, "Dirigirse a es obligatorio", "citacion1.gestorCitacion");
   	   		}
   	   }
   	   
   	} // fin check citacion
   	
   	//////////////////////////////////////////////
   	// Si esta marcado el check de comunicacion //
   	//////////////////////////////////////////////
   	if (form.elements[posicion(form,"comunicacion1.indicadorComRes")].checked) {
   	   fecha = leerFecha(form,"comunicacion1.fechaEmisionDiaCom","comunicacion1.fechaEmisionMesCom","comunicacion1.fechaEmisionAnnoCom");
	   if (fecha!="//") {
	   		retorno = esFechaCorrecta(fecha);
		    if (retorno == false) {
		  		return mensaje(form,"La fecha de emision de la comunicacion es incorrecta","comunicacion1.fechaEmisionDiaCom");
   			}
   		}
   	   
   		fecha = leerFecha(form,"comunicacion1.fechaEnvioDiaCom","comunicacion1.fechaEnvioMesCom","comunicacion1.fechaEnvioAnnoCom");
		if (fecha!="//") {
	  		retorno = esFechaCorrecta(fecha);
   			if (retorno == false) {
		  		return mensaje(form,"La fecha de publicacion BOP de la comunicacion es incorrecta","comunicacion1.fechaEnvioDiaCom");
   			}
   		}
   	} // Fin comunicacion
   	
   	//////////////////////
   	// Datos de la baja //
   	//////////////////////
   	if (form.elements[posicion(form,"baja1.baja")].checked) {
   		fecha = leerFecha(form,"resultadoControl.fechaDiaBajaRC","resultadoControl.fechaMesBajaRC","resultadoControl.fechaAnnoBajaRC");
   		if (fecha!="//") {
   	   		retorno = esFechaCorrecta(fecha);
   	   		if (retorno == false) {
   	   		  return mensaje(form,"La fecha de baja es incorrecta","resultadoControl.fechaDiaBajaRC");
   	   		}
   		}
   		
   		// El campo de causa de baja completo <--> El campo fecha de baja completo
		var causa = leerCampo(form,"baja1.causaBaja");
		if ( fecha != "//" || causa!="") {
			if (fecha !="//" && causa=="") {
		    	return mensaje(form,"Debe seleccionar una causa de baja","baja1.causaBaja");
			}
			if (causa !="" && fecha=="//") {
				return mensaje(form,"Debe introducir la fecha de baja","resultadoControl.fechaDiaBajaRC");
			}
		}
   	} // Fin baja
   	
   	//////////////////////////
   	// Remision al I.T.S.S. //
   	//////////////////////////
   	if (form.elements[posicion(form,"inspeccion.remisionITSS")].checked) {
   		
   		fechaEnvio = leerFecha(form,"inspeccion.fechaDiaEnvioITSS","inspeccion.fechaMesEnvioITSS","inspeccion.fechaAnnoEnvioITSS");
   		if (fechaEnvio!="//") {
	   	   retorno = esFechaCorrecta(fechaEnvio);
   		   if (retorno == false) {
   		      return mensaje(form,"La fecha de envio inspeccion es incorrecta","inspeccion.fechaDiaEnvioITSS");
   	   		}
   		}
   		
   		fechaRecepcion = leerFecha(form,"inspeccion.fechaDiaRecepcionITSS","inspeccion.fechaMesRecepcionITSS","inspeccion.fechaAnnoRecepcionITSS");
   		if (fechaRecepcion!="//") {
	   	   retorno = esFechaCorrecta(fechaRecepcion);
   		   if (retorno == false) {
   		      return mensaje(form,"La fecha de recepcion es incorrecta","inspeccion.fechaDiaRecepcionITSS");
   	   		}
   		}
   		
   		fechaResolucion = leerFecha(form,"inspeccion.fechaDiaResolucionITSS","inspeccion.fechaMesResolucionITSS","inspeccion.fechaAnnoResolucionITSS");
   		if (fechaResolucion!="//") {
	   	   retorno = esFechaCorrecta(fechaResolucion);
   		   if (retorno == false) {
   		      return mensaje(form,"La fecha de resolucion es incorrecta","inspeccion.fechaDiaResolucionITSS");
   	   		}
   		}
		
		// La fecha de envio de la inspeccion debe ser igual o mayor que la fecha de citacion
   		fecha = leerFecha(form,"datosControl.fechaInicioContDiaDC","datosControl.fechaInicioContMesDC","datosControl.fechaInicioContAnnoDC");
   		if (fechaEnvio!="//" && fecha!="//") {
   			if (!comparaFechas(fechaEnvio, fecha))
   				return mensaje(form, "La fecha de envio de la inspeccion debe ser igual o mayor que la fecha de citacion", "inspeccion.fechaDiaEnvioITSS");
   		}
   		
   		// La fecha de recepcion debe ser mayor o igual que la fecha de de envio de la inspeccion
   		if (fechaEnvio!="//" && fechaRecepcion!="//") {
   			if (!comparaFechas(fechaRecepcion, fechaEnvio))
   				return mensaje(form, "La fecha de recepcion debe ser mayor o igual que la fecha de de envio de la inspeccion", "inspeccion.fechaDiaRecepcionITSS");
   		}
   		
   		// La fecha de resolucion debe ser mayor o igual que la fecha recepcion
   		if (fechaResolucion!="//" && fechaRecepcion!="//") {
   			if (!comparaFechas(fechaResolucion, fechaRecepcion))
   				return mensaje(form, "La fecha de recepcion debe ser mayor o igual que la fecha de de envio de la inspeccion", "inspeccion.fechaDiaResolucionITSS");
   		}
   	
   	} // Fin remision ITSS
   	
   	/////////////////////////////////
   	// Datos del cierre de control //
   	////////////////////////////////
   	fechaCierre = leerFecha(form,"resultadoControl.fechaDiaCierreContRC","resultadoControl.fechaMesCierreContRC","resultadoControl.fechaAnnoCierreContRC");
   	if (fechaCierre!="//") {
   	   retorno = esFechaCorrecta(fechaCierre);
   	   if (retorno == false) {
   	      return mensaje(form,"La fecha de cierre control es incorrecta","resultadoControl.fechaDiaCierreContRC");
   	   }
   	}
   	
   	fecha = leerFecha(form,"resultadoControl.fechaDiaContPostRC","resultadoControl.fechaMesContPostRC","resultadoControl.fechaAnnoContPostRC");
   	if (fecha!="//") {
   	   retorno = esFechaCorrecta(fecha);
   	   if (retorno == false) {
   	   	  return mensaje(form,"La fecha de control posterior es incorrecta","resultadoControl.fechaDiaContPostRC");
   	   }
   	}
   	
   	// Fecha de cierre de control <--> Causa de cierre control
	var causa = leerCampo(form,"resultadoControl.causaCierreRC");
	if (fechaCierre !="//" || causa !="") {
		if (fechaCierre !="//" && causa=="") {
		    return mensaje (form, "Debe seleccionar una causa de baja", "resultadoControl.causaCierreRC");
		}
		if (causa !="" && fechaCierre=="//") {
		    return mensaje (form, "Debe indicar la fecha de cierre de control", "resultadoControl.fechaDiaCierreContRC");
		}
	}
   	
   	////////////////////////////////////
   	// Datos de la primera resolucion //
   	////////////////////////////////////
   	if (form.elements[posicion(form,"resolucion1.indicadorComRes")].checked) {
   		fecha = leerFecha(form,"resolucion1.fechaEmisionDiaCom","resolucion1.fechaEmisionMesCom","resolucion1.fechaEmisionAnnoCom");
   		if (fecha!="//") {
   	   		retorno = esFechaCorrecta(fecha);
   	   		if (retorno == false) {
   	   		  return mensaje(form,"La fecha de la emision de la resolucion es incorrecta","resolucion1.fechaEmisionDiaCom");
   	   		}
   		}
   		
   		fecha = leerFecha(form,"resolucion1.fechaRecepcDiaCom","resolucion1.fechaRecepcMesCom","resolucion1.fechaRecepcAnnoCom");
   		if (fecha!="//") {
   	   		retorno = esFechaCorrecta(fecha);
   	   		if (retorno == false) {
   	   		  return mensaje(form,"La fecha de acuse de la resolucion es incorrecta","resolucion1.fechaRecepcDiaCom");
   	   		}
   		}
   		
   		fecha = leerFecha(form,"resolucion1.fechaEnvioDiaCom","resolucion1.fechaEnvioMesCom","resolucion1.fechaEnvioAnnoCom");
   		if (fecha!="//") {
   	   		retorno = esFechaCorrecta(fecha);
   	   		if (retorno == false) {
   	   		  return mensaje(form,"La fecha de publicacion BOP para la resolucion es incorrecta","resolucion1.fechaEnvioDiaCom");
   	   		}
   		}
   	} // Fin primera resolucion

	
	
   	return true;
}

/*
	Devuelve la posicion de un campo dentro del formulario
	
	Parametros
		- Formulario
		- Nombre del campo
*/
function posicion(form, campo) {
  var posicion = -1;
  for (i = 0; i < form.length; i++) {
     if (form.elements[i].name == campo) {
        posicion = i;
        break;
     }
  }
  return posicion;
}

/*
	Muestra un mensaje de aviso, coloca el foco en un campo indicado y devuelve error
	
	Parametros
		- Formulario
		- Mensaje a mostrar
		- Campo
*/
function mensaje (form, mensaje, campo) {
  alert(mensaje);
  form.elements[posicion(form,campo)].focus();
  return false;
}

////////////////////////////////////////////////////////////////////////////////////////
//	 									FUNCIONES QUE RECUPERAN LOS DATOS DEL FORMULARIO

// Recupera la hora de la citacion
function horaCitacion(form) {
 var hora = form.elements[posicion(form,"citacion1.horaMeridianoCitacion")].value;
 var minuto = form.elements[posicion(form,"citacion1.horaMinutosCitacion")].value;
 return formatoHora(hora,minuto);
}

/*
 Lee una fecha del formulario
 Parametros
 	- Formulario
 	- Nombre del campo dia
 	- Nombre del campo mes
 	- Nombre del campo año
 
*/
function leerFecha(form, sDia, sMes, sAnno) {
 var dia = form.elements[posicion(form,sDia)].value;
 //if (dia.value < 10)
 //	dia = "0"+dia;
 var mes = form.elements[posicion(form,sMes)].value;
 //if (mes.value < 10)
 //	mes = "0"+mes;
 var anno = form.elements[posicion(form,sAnno)].value;
 return formatoFecha(dia, mes, anno);
}

/*
 Lee el valor de un campo del formulario
 
 Parametros
 	- Formulario
 	- Nombre del campo a leer
*/
function leerCampo(form, campo) {
  return form.elements[posicion(form,campo)].value;
}

////////////////////////////////////////////////////////////////////////////////////////
//																FORMATEO DE INFORMACION

// Devuelve la fecha en formato dd/mm/aaaa
function formatoFecha(dia, mes, anno) {
	var fecha = dia+"/"+mes+"/"+anno;
	return fecha;
}

// Devuelve la hora en formato hh:mm
function formatoHora(hora,minuto) {
	return hora+":"+minuto;
}

////////////////////////////////////////////////////////////////////////////////////////
//																			VALIDACIONES

/*
  Muestra todos los elementos de un formulario
*/
function showElements(theForm) {
   str = "Form Elements of form " + theForm.name + ": \n "
   for (i = 0; i < theForm.length; i++) 
      str += theForm.elements[i].name + " " + i + " -- "
   alert(str)
}

/*
  Recibe una fecha con formato 01/01/2004 o 01/jan/2004  y devuelve si es una fecha correcta o no. 
  
  Parametros
  	- Fecha
*/
function esFechaCorrecta (fecha) {
  
  //Obtenemos los valores dia, mes y año:
  //-------------------------------------
  var arrayFecha = fecha.split("/");
	
  //Comprobamos que se tengan 3 datos (dia, mes y año) no vacios
  if (arrayFecha.length!=3 || arrayFecha[0]=="" || arrayFecha[1]=="" || arrayFecha[2]=="")
    return false;
	
  var anyo = parseInt(quitaCeros(arrayFecha[2]));
  //Devuelve el mes numérico o null
  var mes = devuelveMes(quitaCeros(arrayFecha[1]));
  var dia = parseInt(quitaCeros(arrayFecha[0]));
  //-------------------------------------
	
  //Comprobamos que los valores son numéricos
  if (isNaN(anyo) || isNaN(mes) || isNaN(dia)) 
    return false;

  //Comprobamos valores correctos de dia mes y anyo
  if (dia<1 || dia>31 || mes<1 || mes>12 || anyo<0)
    return false;
    		
  //Comprobamos meses de 30 dias
  if ((mes==4 || mes==6 || mes==9 || mes==11) && dia>30)
    return false;
    		
  //Comprobamos mes febrero & bisiestos
  if (mes==2 && (dia > 29 || (dia==29 && ((anyo%400!=0) && ((anyo%4!=0) || (anyo%100==0)))) ))
    return false;
    		
  return true;
}


/* Quita los ceros del principio de una cadena si tiene (01)->(1) */
function quitaCeros(cad){
  var enc = false;
  var i=0;
  while (i<cad.length && !enc) {
    if (cad.charAt(i)=='0'){
      i++;
    } else{
      enc = true;
    }
  }
  return (cad.substring(i,cad.length));
}

/* 
  Recibe una cadena con un mes (número o cadena) y devuelve el número de mes.
*/
function devuelveMes (mes) {
  var numMes = null;
  var meses = new Array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
	
  if (!isNaN(parseInt(mes))) //Es un número
    numMes = parseInt(mes);
  else {
    var encontrado=false;
    var i=0;
    while (i<meses.length && !encontrado) {
      //Comparamos el mes en minúsculas
      if (mes.toLowerCase()==meses[i]) {
        encontrado=true;
        numMes=i+1;
      }
      i++;
    }
  }
  return numMes;
}

/*
 http://www.mhavila.com.br/topicos/web/valform.html
 Valida si la hora es correcta o no
 Parametros:
 	- Hora a comprobar
	- Formato de la fecha
		1 - HH:MM simple —  Acepta dos pares de dos digitos separados por :. Acepta valores entre 00 y 99
	    2 - HH:MM 24h —  Acepta 00-23 para las horas y 00-59 para los minutos separados por :
	    3 - HH:MM 12h — Acepta 01-12 para las horas y 00-59 para los minutos separados por :
   		4 - horas:MM:SS — Acepta cualquier hora (0 ó mas, uno o mas digitos), minutos 00-59 y segundos 00-59, separados por :
	    5 - horas:MM:SS.mili — Similiar al tipo anterior, ademas admite milisegundos 000-999, separados de los segundos por un .
*/
function esHoraCorrecta(pStr, pFmt)
{
 	// Expresiones regulares para cada tipo de hora
	var reTime1 = /^\d{2}:\d{2}$/;
	var reTime2 = /^([0-1]\d|2[0-3]):[0-5]\d$/;
	var reTime3 = /^(0[1-9]|1[0-2]):[0-5]\d$/;
	var reTime4 = /^\d+:[0-5]\d:[0-5]\d$/;
	var reTime5 = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;
	
	eval("reTime = reTime" + pFmt);
	if (reTime.test(pStr)) {
		return true;
	} else if (pStr != null && pStr != "") {
		return false;
	}
}

/*
 Devuelve la fecha del sistema en formato dd/mm/aaa
*/
function fechaSistema() {
	var hoy=new Date();
	//var dia=hoy.getDay()+1; // Dia de la semana, hay que sumarle 1, empieza en domingo(1), lunes(2), ....
	var num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
	var mes=hoy.getMonth()+1;
	var ano=hoy.getYear();
	var fecha = num+"/"+mes+"/"+ano;
	return fecha;
}

/*
 Compara dos fechas con formato dd/mm/aaaa. Indica si la fecha1 es mayor o igual que la fecha2
*/ 

function comparaFechas(fech1,fech2)
{

	f1=fech1.split("/");
	f2=fech2.split("/");
	d1=parseInt(f1[0],10);
	m1=parseInt(f1[1],10);
	a1=parseInt(f1[2],10);
	d2=parseInt(f2[0],10);
	m2=parseInt(f2[1],10);
	a2=parseInt(f2[2],10);
	if(a1>a2)return true;//año2 es menor que año 1
	if(a1==a2) {
		if(m1>m2)return true;//mismo año m1 mayor que m2
		if ((m1==m2)&&(d1>=d2))return true;//mismo año, mismo mes , d1 mayor o igual que d2
		
		return false;//mismo año , m1 menor que m2
	}
	return false;//año menor
}
/*
 Muestra ventana de ayuda con el mensaje pasado en el primer parametro (mensaje sin traducir)
*/ 
function mensajes(mensaje, contexto){
	if (mensaje!=null && mensaje!=''){
		var url=contexto+'/ayuda/Ayuda.jsp?texto='+mensaje;				
		window.open(url,'Mensaje','toolbar=no,resizable=yes,scrollbars=no,status=no,top=5,left=5,width=400,height=200');
	}
}