function CompruebaFechaStrValida(fechaStr)
{
var FechaTemp=fechaStr
var contBarras=0;
if (String(FechaTemp).length<=0)
  {
  return false;
  }
for(var i=0;i<String(FechaTemp).length;i++)
  {
  switch (FechaTemp.charAt(i))
    {
	case "0":
	case "1":
	case "2":
	case "3":
	case "4":
	case "5":
	case "6":
	case "7":
	case "8":
	case "9":
	  break;
	case "/":
	  contBarras++;
	  break;
	default: //caracter no válido	  
	  return false; 
	  break; 
	}
  }
if(contBarras!=2)
  return false;
var anio,mes,dia;
var pos;
pos=FechaTemp.indexOf("/");    //Encuentra la barra
dia=FechaTemp.substring(0,pos); 
dia=Number(dia)
if (String(dia).length>2) { return false; }
FechaTemp=FechaTemp.substr(pos+1,String(fechaStr).length);
pos=FechaTemp.indexOf("/");    //Encuentra la barra
mes=FechaTemp.substring(0,pos); 
mes=Number(mes)
if (String(mes).length>2) { return false; }
FechaTemp=FechaTemp.substr(pos+1,String(fechaStr).length);
anio=FechaTemp;
if ((String(anio).length!=4) && (String(anio).length!=2)) { return false; }

var Fecha = new Date(parseFloat(anio), parseFloat(mes)-1, parseFloat(dia), 0, 0, 0, 0);
if (parseFloat(dia) != Fecha.getDate()) { return false; }
if (parseFloat(mes)-1 != Fecha.getMonth()) { return false; }
return true;
}

function ConvierteFechaAStr(fecha)
{
var dia=String(fecha.getDate());
while(String(dia).length<2)
  dia="0"+dia;
var mes=String(fecha.getMonth());
mes=parseInt(mes)+1;
while(String(mes).length<2)
  {
  mes="0"+mes;
  }
var anio=String(fecha.getFullYear());
while(String(anio).length<3)
  anio="0"+anio;
if (String(anio).length==2)
  anio="20"+anio;
return dia+"/"+mes+"/"+anio;
}

function ConvierteStrAFecha(fecha)
{
var fechaStr=fecha;
if (!CompruebaFechaStrValida(fechaStr))
  {
  //alert (fechaStr+" no es una fecha válida, el formato debe ser dd/mm/aaaa");
  return null;
  }
var anio,mes,dia;
var pos;
pos=fechaStr.indexOf("/");    //Encuentra la barra
dia=fechaStr.substring(0,pos); 
fechaStr=fechaStr.substr(pos+1,String(fechaStr).length);
pos=fechaStr.indexOf("/");    //Encuentra la barra
mes=fechaStr.substring(0,pos); 
fechaStr=fechaStr.substr(pos+1,String(fechaStr).length);
anio=fechaStr;
if (String(anio).length==2)
  anio="20"+anio;
//Asigno
var ObjDate=new Date(anio,mes-1,dia,0,0,0,0);
return ObjDate;
}

function Formatea_DD_MM_AAAA(FechaStr)
{
//Por si no pone 2 dígitos en mes y día y cuatro en año
return ConvierteFechaAStr(ConvierteStrAFecha(FechaStr));
}

function DiasEntre(Fecha1, Fecha2) 
{
if ((Fecha1==null) || (Fecha2==null))
  return -9999;
// Número de milisegundos en un día
var UnDia=1000 * 60 * 60 * 24
// Comvierto ambas fechas a milisegundos
var Fecha1_ms = Fecha1.getTime();
var Fecha2_ms = Fecha2.getTime();
// Calculo la diferencia en milisegundos
var Diferencia_ms = (Fecha2_ms-Fecha1_ms);
// Convierto de nuevo a dias y lo devuelvo
return Math.ceil(Diferencia_ms/UnDia);
}

function SumaDias(Fecha,dias)
{
return new Date(Fecha.getTime() + dias*24*60*60*1000);
}

function SumaDiasAFechaStr(FechaStr,NumDias) 
{
if (CompruebaFechaStrValida(FechaStr))
  {
  var anio,mes,dia;
  var pos;
  pos=FechaStr.indexOf("/");    //Encuentra la barra
  dia=FechaStr.substring(0,pos); 
  FechaStr=FechaStr.substr(pos+1,String(FechaStr).length);
  pos=FechaStr.indexOf("/");    //Encuentra la barra
  mes=FechaStr.substring(0,pos); 
  FechaStr=FechaStr.substr(pos+1,String(FechaStr).length);
  anio=FechaStr;
  if (String(anio).length==2)
    anio="20"+anio;
  //Asigno
  var Fecha=new Date(anio,mes-1,dia,0,0,0,0);
  var Resultado=new Date(Fecha.getTime() + NumDias*24*60*60*1000)
  return ConvierteFechaAStr(Resultado);
  }
else return ''
}

function ComprobarFechas(FechaActual, HoraActual, FRecogida, HRecogida, FEntrega, HEntrega, MinDifDias)
{
resultado=0;
//Dia de hoy del server
var Hoy=ConvierteStrAFecha(FechaActual);//Para evitar que tenga la fecha mal en su ordenador
if (Hoy==null)
  return resultado;
//Dia de Recogida
var FechaRecogida=ConvierteStrAFecha(FRecogida.value);
if (FechaRecogida==null)
  return resultado;
//por si ha puesto una burrada del orden de 150/150/2003
FRecogida.value=ConvierteFechaAStr(FechaRecogida);
//Dia de entrega
var FechaEntrega=ConvierteStrAFecha(FEntrega.value);
if (FechaEntrega==null)
  return resultado;
//por si ha puesto una burrada del orden de 150/150/2003
FEntrega.value=ConvierteFechaAStr(FechaEntrega);
//Añado las horas
Hoy.setHours(parseInt(HoraActual)+1);
FechaRecogida.setHours(parseInt(HRecogida));
FechaEntrega.setHours(parseInt(HEntrega));
//Compruebo rangos
if (FechaRecogida.getTime()<Hoy.getTime())
  {
  alert("La fecha y hora de Recogida debe ser mayor o igual al día y hora actual");
  FRecogida.value=FechaActual;
  return resultado;
  }
if (DiasEntre(FechaRecogida,FechaEntrega)<MinDifDias)
  {
  alert("La fecha de Entrega debe ser al menos "+MinDifDias+" días mayor que la fecha de entrega y solo hay "+DiasEntre(FechaRecogida,FechaEntrega)+" días entre ambas");
  return resultado;
  }
resultado=DiasEntre(FechaRecogida,FechaEntrega);
return resultado;
}

function RangosColision(FechaInicio1,FechaFin1,FechaInicio2,FechaFin2)
{
//Antes de pasar los parametros a esta función debo comprobar que son fechas válidas
//Además debo comprobar que están en el orden correcto, es decire FechaInicio1<=FechaFin1 y así con el 2
var FI1=ConvierteStrAFecha(FechaInicio1);
var FF1=ConvierteStrAFecha(FechaFin1);
var FI2=ConvierteStrAFecha(FechaInicio2);
var FF2=ConvierteStrAFecha(FechaFin2);
//Si las 2 Fechas 1 son estrictamente menores que la FechaInicio2
// O Las 2 fechas 1 son estrictamente mayores que la FechaFin2 es que no colisionan
if ((FI1<FI2 && FF1<FI2) || (FF2<FI1 && FF2<FF1)) 
  return false//No hay colision
 else return true
}

function ConvierteFechaStr_A_BDStr(FechaStr)
{
var fechaTemp=FechaStr;
if (!CompruebaFechaStrValida(fechaTemp))
  {
  alert (fechaTemp+" no es una fecha válida, el formato debe ser dd/mm/aaaa");
  return "";
  }
var anio,mes,dia;
var pos;
pos=fechaTemp.indexOf("/");    //Encuentra la barra
dia=fechaTemp.substring(0,pos); 
while (String(dia).length<2)
  dia="0"+dia;
fechaTemp=fechaTemp.substr(pos+1,String(fechaTemp).length);
pos=fechaTemp.indexOf("/");    //Encuentra la barra
mes=fechaTemp.substring(0,pos); 
while (String(mes).length<2)
  mes="0"+mes;
fechaTemp=fechaTemp.substr(pos+1,String(fechaTemp).length);
anio=fechaTemp;
while (String(anio).length<3)
  anio="0"+anio;
if (String(anio).length<4)
  anio="2"+anio;
return anio+mes+dia;
}

function ConvierteBDStr_A_FechaStr(BDStr)
{
if (String(BDStr).length!=8)
  return ""
var anio,mes,dia;
anio=BDStr.substr(0,4);
mes=BDStr.substr(4,2); 
dia=BDStr.substr(6,2); 
return dia+"/"+mes+"/"+anio;
}

function ConvierteBDHoraStr_A_HoraStr(BDStr)
{
if (String(BDStr).length!=6)
  return ""
var horas,minutos,segundos;
horas=BDStr.substr(0,2);
minutos=BDStr.substr(2,2); 
segundos=BDStr.substr(4,2); 
return horas+":"+minutos+":"+segundos;
}

function ConvierteBDHoraStr_A_HHMM_Str(BDStr)
//Solo devuelve HH:MM horas de salida y vuelta
{
if (String(BDStr).length!=4)
  return ""
var horas,minutos,segundos;
horas=BDStr.substr(0,2);
minutos=BDStr.substr(2,2); 
return horas+":"+minutos;
}

function DiaSemanaStr(Idioma,FechaStr) {
//O para Español y 1 para Ingles
var MiFecha=ConvierteStrAFecha(FechaStr);
var daysEsp = new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado")
var daysIng = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
if (Idioma==0)
  return daysEsp[MiFecha.getDay()];
else return daysEsp[MiFecha.getDay()];
}

function MuestraFechaBonita(fechaStr)
{
if (!CompruebaFechaStrValida(fechaStr))
  return '¿?';
var FechaTemp=fechaStr
var contBarras=0;
if (String(FechaTemp).length<=0)
  {
  return '¿?';
  }
for(var i=0;i<String(FechaTemp).length;i++)
  {
  switch (FechaTemp.charAt(i))
    {
	case "0":
	case "1":
	case "2":
	case "3":
	case "4":
	case "5":
	case "6":
	case "7":
	case "8":
	case "9":
	  break;
	case "/":
	  contBarras++;
	  break;
	default: //caracter no válido	  
	  return '¿?'; 
	  break; 
	}
  }
if(contBarras!=2)
  return '¿?';
var anio,mes,dia;
var anio,mes,dia;
var pos;
pos=FechaTemp.indexOf("/");    //Encuentra la barra
dia=FechaTemp.substring(0,pos); 
dia=Number(dia)
if (String(dia).length>2) { return '¿?'; }
FechaTemp=FechaTemp.substr(pos+1,String(fechaStr).length);
pos=FechaTemp.indexOf("/");    //Encuentra la barra
mes=FechaTemp.substring(0,pos); 
mes=Number(mes)
if (String(mes).length>2) { return '¿?'; }
FechaTemp=FechaTemp.substr(pos+1,String(fechaStr).length);
anio=FechaTemp;
if ((String(anio).length!=4) && (String(anio).length!=2)) { return '¿?'; }
if (String(anio).length==2)
  anio="20"+anio;
var Fecha = new Date(parseFloat(anio), parseFloat(mes)-1, parseFloat(dia), 0, 0, 0, 0);
if (parseFloat(dia) != Fecha.getDate()) { return '¿?'; }
if (parseFloat(mes)-1 != Fecha.getMonth()) { return '¿?'; }
//FORMATEO
return ConvierteFechaAStr(Fecha);
}
