/*********************************************************************************************
									CONTROL DE FECHAS 
*********************************************************************************************/


var a, mes, dia, anyo, febrero;


function validarFecha(a){// Le mandamos fecha con formato dd/mm/yyyy
	dia=a.split("/")[0];
	mes=a.split("/")[1];
	anyo=a.split("/")[2];
	//comprobamos que ponga las barras
	if(a.length!=10){
		alert("La fecha introducida no tiene el formato dd/mm/aaaa");
		return false;
	}
	//comporbamos que solo haya n?meros
	if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) ){
		alert("La fecha introducida debe estar formada sólo por números");
		return false;
	}
	if(anyoBisiesto(anyo))	 febrero=29;
	else   febrero=28;
	
	// si el mes <  0 o > 12 
	if ((mes<1) || (mes>12)){
		alert("El mes introducido no es válido. Por favor, introduzca un mes correcto");
	
		return false;
	}
	
	// Comprobamos que en febrero el n? de dias no sea mayor o menor a los que dispone
	if ((mes==2) && ((dia<1) || (dia>febrero))){
		alert("El dia introducido no es válido para el mes de Febrero");
		return false;
	}

	// si el mes es de 31 dias y se  meten mas de 31 
	
	if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))){
		alert("El dia introducido no es válido. Por favor, introduzca un dia correcto");
		return false;
	}

	//si el mes tiene 30 dias y se meten mas de 30
	
	if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))){
		alert("El dia introducido no es válido. Por favor, introduzca un dia correcto");
		return false;
	}

	if ((anyo<1900) || (anyo>2020)){
		alert("El a?o introducido no es válido. Por favor, introduzca un año entre 1900 y 2010");
		return false;
	} 
	return true;
}  // fin function



function ComparaFechas (fecha1, fecha2 ) {

   //Obtiene los datos del formulario
   CadenaFecha1 = fecha1;
   CadenaFecha2 = fecha2;
   
   //Obtiene dia, mes y a?o
   var fecha1 = new fecha( CadenaFecha1 );  
   var fecha2 = new fecha( CadenaFecha2 );
   
   //Obtiene objetos Date
   var miFecha1 = new Date( fecha1.anio, fecha1.mes, fecha1.dia );
   var miFecha2 = new Date( fecha2.anio, fecha2.mes, fecha2.dia );
   
   //Resta fechas y redondea
   var diferencia = miFecha1.getTime() - miFecha2.getTime();
  // var dias = Math.floor(diferencia / (1000 * 60 * 60 * 24))
   var segundos = Math.floor(diferencia / 1000);
   if (segundos<0){// Si la fecha2 es menor que fecha1
    return false;
   }	
   else{
	return true;
   }
}

function fecha( cadena ) {

   //Separador para la introduccion de las fechas
   var separador = "/"

   //Separa por dia, mes y a?o
   if ( cadena.indexOf( separador ) != -1 ) {
        var posi1 = 0
        var posi2 = cadena.indexOf( separador, posi1 + 1 )
        var posi3 = cadena.indexOf( separador, posi2 + 1 )
        this.dia = cadena.substring( posi1, posi2 )
		// El formato Date de javascript enero=0, por lo que al mes le restamos 1.
        this.mes = eval(cadena.substring( posi2 + 1, posi3 ) - 1);
        this.anio = cadena.substring( posi3 + 1, cadena.length )
   } else {
        this.dia = 0
        this.mes = 0
        this.anio = 0   
   }
}
function anyoBisiesto(anyo) {
 // pasamos yy a yyyy
 if (anyo < 100)   var fin = anyo + 1900;
 else     var fin = anyo ;

 // Si (a?o Mod 4) no es cero  el a?o no es bisiesto
 if (fin % 4 != 0)            return false;
 else{
  if (fin % 100 == 0){
   // Si (a?o / 4 ) && (a?o / 100) &&(a?o / 400)
   if (fin % 400 == 0)    return true;
   else    return false;
  }else{// si es divisible por 4 y no es divisible por 100 > el año es bisiesto
   return true;
  }
 }
}



//FUNCION INCREMENTADIAS: incrementa una fecha en base a un numero de dias
//RECIBE: fecha (Date), dias (intenger)
//DEVUELVE: fechaFinal (Date)

function incrementaDias (fecha, dias){
	//Obtenemos las variables de la fecha
	// dia de la fecha	
	var dia = fecha.getDate();
	// a?o de la fecha 
	var anyo = fecha.getFullYear();
	// mes de la fecha
	var mes = fecha.getMonth();
	
	//Obtenemos los dias del mes
	var diasMes=0;
	if (mes==0 || mes==2 || mes==4 || mes==6 || mes==7 || mes==9 || mes==11){
		diasMes=31;
	}else if (mes==3 || mes==5 || mes==8 || mes==10){
		diasMes=30;
	}else if (anyoBisiesto(anyo)){
		diasMes=29;
	}else{
		diasMes=28;
	}
	//Incrementamos los dias
	dia = dia + dias;
	if (dia>diasMes){
		dia=dia-diasMes;
		mes = mes + 1;
		if (mes==12){
			mes = 0;
			anyo = anyo + 1;
		}
	}
	//creamos la nueva fecha
	var fechaFinal = new Date (anyo,mes,dia);
	return fechaFinal;
}



//FUNCION INCREMENTADIASSTRING: incrementa una fecha en base a un numero de d?as
//RECIBE: fecha (String), dias (intenger)
//DEVUELVE: fechaAux (Date)

function incrementaDiasString (fecha, dias){
	
	// dia de la fecha
		hasta = fecha.value.indexOf("/",0);
		dia = fecha.substring(0,fecha.indexOf("/",0));
	// a?o de la fecha
		fin = fecha.lastIndexOf("/",fecha.length);
		anyo = fecha.substring(fin+1,fecha.length);
	// mes de la fecha
		otra = fecha.indexOf("/",fin);
		mes = fecha.substring(fecha.indexOf("/",0)+1,fin);
	// fecha pasada a date
		var fechaAux = new Date(anyo,mes-1,dia);
		
	// incremento de la fecha mediante la funcion incrementaDias
		fechaAux = incrementaDias(fechaAux, dias);
		return fechaAux;
}
	
	
	
//FUNCION CUMPLESUNRUL: comprueba si entre dos fechas hay un s?bado (Sunday Rule)	
//RECIBE: fecIni (Date), fecFin (Date)
//DEVUELVE: true o false
	
function cumpleSunRul (fecIni, fecFin){

	//Obtenemos la diferencia de dias entre el d?a de fecha de inicio y el sabado siguiente a este
	
	var difSab = 6 - fecIni.getDay();
	
	//Sumo la diferencia para conseguir una la fecha del siguiente sabado a la fecha de inicio
	fecIni = incrementaDias(fecIni, difSab);
	
	//Si la nueva fecha del s?bado es inferior a la fecha de regreso se cumple la Sunday Rule
	if (fecFin>fecIni){
		return true;
	}else{
		return false;
	}
}
	
	
 function compruebaCadena(nStr, nLen){
    var sRes = String(nStr);
    var sCeros = "0000000000";
    return sCeros.substr(0, nLen - sRes.length) + sRes;
   }

   function stringToSegundos(tiempo){
    var sep1 = tiempo.indexOf(":");
    var sep2 = tiempo.lastIndexOf(":");
    var hor = tiempo.substr(0, sep1);
    var min = tiempo.substr(sep2 + 1);
    return ((Number(min) * 60) + (Number(hor) * 3600));
   }

   function segundosToHora(secs){
    var hor = Math.floor(secs / 3600);
    var min = Math.floor((secs - (hor * 3600)) / 60);
    return compruebaCadena(hor, 2) + ":" + compruebaCadena(min, 2);
   }

   function sacaTiempos(horFin, horIni){
    var secs1 = stringToSegundos(horFin);
    var secs2 = stringToSegundos(horIni);
    var secsDif = secs1 - secs2;
    return segundosToHora(secsDif);
   }

   function restaHoras(horaFin, horaIni){
     var horas;
     horas = sacaTiempos(horaFin, horaIni);
     return horas;
   }	
	
	
	
	