/* Funcion que comprueba que el formato de fecha es correcto*/
function compruebaFechaValida( cadena ) {
  var caracter;
  var dia;
  var mes;
  var anio;
  var caracteresValidos="/0123456789";
  if (cadena.length == 0) return true;
  if( cadena.length != 10 || cadena.charAt(2) != "/" || cadena.charAt(5) != "/" ) {
    return false;
  }
  for( var i=0; i <cadena.length; i++ ) {
    caracter=cadena.charAt(i);
    if( caracteresValidos.indexOf( caracter ) < 0 )
      return false;
  }

  dia = parseInt(cadena.substr(0,2), 10);
  mes = parseInt(cadena.substr(3,2), 10);
  anio = parseInt(cadena.substr(6,4), 10);
  if( anio <= 0 )
    return false;

  switch(mes) {
    case 1:case 3:case 5:case 7:case 8:case 10:case 12: {
      if( dia <= 0 || dia > 31 ) return false;
      break;
    }
    case 4:case 6:case 9:case 11: {
      if( dia <= 0 || dia > 30 ) return false;
      break;
    }
    case 2: {
      var bisiesto;
      (anio % 4 == 0) ? ((anio %100 ==0)?((anio % 400 ==0)? bisiesto = true : bisiesto = false) : bisiesto = true) : bisiesto = false;
      if (bisiesto) {
        if( dia <= 0 || dia > 28 ) return false;
      } else if( dia <= 0 || dia > 29 ) return false;
      break;
    }
    default: {
      return false;
    }
  }
  return true;
}

function validaInputFecha(diaFech,mesFech,anyoFech) {
	var bisiesto;
	var days = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
	var fecha = diaFech.value.toString();
	var dia = parseInt(diaFech.value,10);
	if (isNaN(dia)) {
		alert("El día debe ser un número");
		diaFech.focus();
		return false;
	}
	var mes = parseInt(mesFech.value,10);
	if (isNaN(mes)){
		alert("El mes debe ser un número");
		mesFech.focus();
		return false;
	}
	var ano = parseInt(anyoFech.value,10);
	if (isNaN(ano)) {
		alert("El año debe ser un número");
		anyoFech.focus();
		return false;
	}
	var limite=0;
	var indice;
	var fecha1 = new Date();
	var actual = Date.parse(fecha1);
	if (mes>12 || mes<1) {
		alert("El mes debe estar comprendido entre 1 y 12");
		mesFech.focus();
		return false;
	}
	indice = mes--;
	(ano % 4 == 0) ? ((ano %100 ==0)?((ano % 400 ==0)? bisiesto = true : bisiesto = false) : bisiesto = true) : bisiesto = false;
	if ((bisiesto== true) && indice ==2)
		limite = 29
	else
		limite = days[mes];
	if (dia<=0 || dia>limite) {
		alert("El día debe estar comprendido entre 1 y "+limite);
		diaFech.focus();
		return false;
	}
	return true;
}

function autocompleta(campo){
	campoValue=campo.value;
	if(isNaN(campoValue)){
		return false;
	}else if(campoValue.length==1){
		campo.value="0"+campoValue;
	}
}

function autocompletaYear(year){
	var yearValue=year.value;
	if(isNaN(yearValue))
		return false;
	if(yearValue.length==2){
		if(yearValue <=10){
			year.value="20"+yearValue;
		}else{
			year.value="19"+yearValue;
		}
	}else if(yearValue.length==1){
		year.value="200"+yearValue;
	}else if(yearValue.length==3){
		if(yearValue <=10){
			year.value="2"+yearValue;
		}else{
			year.value="1"+yearValue;
		}
	}
}

function esMenorFecha(diaFech,mesFech,anyoFech){
	var fechaActual=new Date();
	var annioActual=fechaActual.getFullYear();
	var diaActual=fechaActual.getDate();
	var mesActual=fechaActual.getMonth()+1;
	if(anyoFech.value > annioActual){
		anyoFech.focus();
		return false;
	}else if(anyoFech.value < annioActual){
		return true;
	}else if(anyoFech.value==annioActual){
		if(mesFech.value > mesActual){
			mesFech.focus();
			return false;
		}else if(mesFech.value < mesActual){
			return true;
		}else if(mesFech.value==mesActual){
			if(diaFech.value > diaActual){
				diaFech.focus();
				return false;
			}else if(diaFech.value <=diaActual){
				return true;
			}
		}
	}
}

function esMenorFechaFecha(diaFech1,mesFech1,anyoFech1,diaFech2,mesFech2,anyoFech2){
	if(anyoFech1.value > anyoFech2.value){
		anyoFech1.focus();
		return false;
	}else if(anyoFech1.value < anyoFech2.value){
		return true;
	}else if(anyoFech1.value==anyoFech2.value){
		if(mesFech1.value > mesFech2.value){
			mesFech1.focus();
			return false;
		}else if(mesFech1.value < mesFech2.value){
			return true;
		}else if(mesFech1.value==mesFech2.value){
			if(diaFech1.value > diaFech1.value){
				diaFech1.focus();
				return false;
			}else if(diaFech1.value <=diaFech2.value){
				return true;
			}
		}
	}
}

function esMenorAnnio(anyoFech){
	var fechaActual=new Date();
	var annioActual=fechaActual.getFullYear();
	if(anyoFech.value > annioActual){
		anyoFech.focus();
		return false;
	}else if(anyoFech.value < annioActual){
		return true;
	}
}

// Comprueba que la fecha no ha pasado aun
function fechaNoPasada(fecha) {
  var resultado = false;
  if( compruebaFechaValida(fecha) ) {
    if (fecha.length==0) return true;
    fechaActual = new Date();
    var mes = fechaActual.getMonth() + 1;
    var ano = fechaActual.getYear();
    var dia = fechaActual.getDate();
    if( dia < 10 ) dia = "0" + dia;
    if( mes < 10 ) mes= "0" + mes; 
    if( ano < 1000 ) ano += 1900;
    fechaActual = new Date( mes + "/" + dia + "/" + ano );
    fechaValidar = new Date( fecha.substr(3,3) + fecha.substr(0,3) + fecha.substr(6,4) );
    if( fechaValidar >= fechaActual )
      resultado = true;
    if (!resultado)
      alert(MSJ_FECHA_PASADA);
  } else {
    alert(MSJ_FECHA_FORMATO);
  }
  return( resultado );
}

/*Funcion que controla que las fechas introducidas no son posteriores a la fecha actual
y que la fecha inicial no es mayor que la fecha final */
/* fecha1 es la Fecha desde y fecha2 es la Fecha hasta*/	

function controlFechaDiaMinimo(fecha1, limite)
{
  var FechaAct = new Date();
  var FechaActTemp = new Date();
  var limiteNatural = 0;
  var offset = 0;
  for (var x=0; x < limite; x++)
  {
    var time = FechaAct.getTime();    
    var diaMilisec = 24 * 60 * 60 * 1000 * (x + 1);    
    FechaActTemp = new Date();
    FechaActTemp.setTime(time + diaMilisec);
    if (FechaActTemp.getDay() == 6 || 
        FechaActTemp.getDay() == 0 ) {
        offset += 1;
    }
  }
  if (FechaActTemp.getDay() == 6 ) {
    offset += 1;
  }
  
  limiteNatural = limite + offset;  
  if( compruebaFechaValida( fecha1 ) != true ) {
    alert(MSJ_FECHA_FORMATO);
    return false;
  }
  

  
  fechacadena1=fecha1.substr(3,3)
  fechacadena2=fecha1.substr(0,3)
  fechacadena3=fecha1.substr(6,4)

  FechaCHas= fechacadena1 + fechacadena2 + fechacadena3

  
  FechaHas = new Date(FechaCHas);
  Diferencia= FechaHas-FechaAct;

  // Diferencia expresada en minutos
  Diferencia=Diferencia/60000;

  // Diferencia expresada en dias
  Diferencia=Diferencia/1440;		

  // Si limite es igual a cero
  // su valor tiene que ser tal,
  // que no se cumpla la validacion Diferencia > limite
  if( limiteNatural != 0 )
  {			
    if( Diferencia < limiteNatural )
    {
      alert(MSJ_FECHA_MINIMOS1 + limite + MSJ_FECHA_MINIMOS2);
      //objFecha1.focus();
      return false;
    }	    			    
  }
  return true;
}



/*Funcion que controla que las fechas introducidas no son posteriores a la fecha actual
y que la fecha inicial no es mayor que la fecha final */
/* fecha1 es la Fecha desde y fecha2 es la Fecha hasta*/	


function controlFechas( objFecha1, objFecha2, limite )
{
  fecha1 = objFecha1.value;
  fecha2 = objFecha2.value;

  if (compruebaFechaValida(fecha1)!=true) {
    alert(MSJ_FECHA_FORMATODESDE);
    objFecha1.focus();
    return false;
  }
  if (compruebaFechaValida(fecha2)!=true) {
    alert(MSJ_FECHA_FORMATOHASTA);
    objFecha2.focus();
    return false;
  }
  FechaAct = new Date();
  fechacadena1=fecha1.substr(3,3)
  fechacadena2=fecha1.substr(0,3)
  fechacadena3=fecha1.substr(6,4)
  FechaCDes= fechacadena1 + fechacadena2 + fechacadena3

  fechacadena1=fecha2.substr(3,3)
  fechacadena2=fecha2.substr(0,3)
  fechacadena3=fecha2.substr(6,4)
  FechaCHas= fechacadena1 + fechacadena2 + fechacadena3

  FechaDes = new Date(FechaCDes);
  FechaHas = new Date(FechaCHas);
  Diferencia= FechaHas-FechaDes;

  // Diferencia expresada en minutos
  Diferencia=Diferencia/60000;

  // Diferencia expresada en dias
  Diferencia=Diferencia/1440;		

  // Si limite es igual a cero
  // su valor tiene que ser tal,
  // que no se cumpla la validacion Diferencia > limite
  if (limite!=0) {			
    if (Diferencia > limite) {
      alert(MSJ_FECHA_SEPARACION);
      objFecha1.focus();
      return false;
    }	    			    
  }

  if (FechaHas >FechaAct) {
    alert(MSJ_FECHA_HASTA);
    objFecha2.focus();
    return false;
  }

  if (FechaDes > FechaAct) {
    alert(MSJ_FECHA_DESDE);
    objFecha1.focus();
    return false;
  }

  if (FechaDes > FechaHas) {
    alert(MSJ_FECHA_DESDEHASTA);
    objFecha1.focus();
    return false;			    			    
  }
  return true;
}

/* Funcion que comprueba que el formato de hora es correcto (Formato 24 horas)*/
function compruebaHoraValida(cadena) {
  var caracter;
  var hora;
  var minuto;  
  var caracteresValidos=":0123456789";
  if (cadena.length != 5 || cadena.charAt(2) != ":") {
    return false;
  }
  for (var i=0; i <cadena.length; i++) {
    caracter=cadena.charAt(i);
    if( caracteresValidos.indexOf( caracter ) < 0 )
      return false;
  }

  hora = parseInt(cadena.substr(0,2),10);
  minuto = parseInt(cadena.substr(3,2),10);
    
  if (hora < 0 || hora >= 24) return false;
  if (minuto < 0 || minuto >= 60) return false;
  
  return true;
}

function controlFechasSinActual( objFecha1, objFecha2)
{
  fecha1 = objFecha1.value;
  fecha2 = objFecha2.value;

  if (compruebaFechaValida(fecha1)!=true) {
    alert(MSJ_FECHA_FORMATODESDE);
    objFecha1.focus();
    return false;
  }
  if (compruebaFechaValida(fecha2)!=true) {
    alert(MSJ_FECHA_FORMATOHASTA);
    objFecha2.focus();
    return false;
  }
  FechaAct = new Date();
  fechacadena1=fecha1.substr(3,3)
  fechacadena2=fecha1.substr(0,3)
  fechacadena3=fecha1.substr(6,4)
  FechaCDes= fechacadena1 + fechacadena2 + fechacadena3

  fechacadena1=fecha2.substr(3,3)
  fechacadena2=fecha2.substr(0,3)
  fechacadena3=fecha2.substr(6,4)
  FechaCHas= fechacadena1 + fechacadena2 + fechacadena3

  FechaDes = new Date(FechaCDes);
  FechaHas = new Date(FechaCHas);
  Diferencia= FechaHas-FechaDes;

  if (FechaDes > FechaHas) {
    alert(MSJ_FECHA_DESDEHASTA);
    objFecha1.focus();
    return false;			    			    
  }
  return true;
}
