// Libreria de funcion de fechas creada por Vicente Ugarrio.
// Ultima modificacion: 06/09/2006

//  fechaCorrecta(fecha)                                      fecha: string formato DD/MM/YYYY
//  esMenor(fechaUNO, fechaDOS)							      fechaUNO, fechaDOS: string formato DD/MM/YYYY
//  diasDiferencias(fechaUNO, fechaDOS)						  fechaUNO, fechaDOS: string formato DD/MM/YYYY
//  sumaMes(fecha, nSum)                                      fecha:string formato DD/MM/YYYY, nSum:int
//  sumaDia(fecha, nSum)									  fecha:string formato DD/MM/YYYY, nSum:int
//  esAnioBisiesto(anio)                                      anio: numero
//  getDiaFechaString(fecha)                                  fecha: string formato DD/MM/YYYY
//  getMesFechaString(fecha)                                  fecha: string formato DD/MM/YYYY
//  getAnioFechaString(fecha)                                 fecha: string formato DD/MM/YYYY
//  armaFecha(nDia, nMes, nAno)
//  diaFinMes(nMes, nAno)



//Recibe una fecha en formato cadena (DD/MM/YYYY) y devuelve cierto
//si es correcta (descarta 30/02/2002, por ejemplo)
function fechaCorrecta(fecha){
  
   var dia =0;
   var mes =0;
   var anio =0;
   var sFecha ="";

   if(fecha){
      sFecha =fecha.split('/');
      if (sFecha.length ==3)
      {
       dia  =parseInt(sFecha[0],10);
       mes  =parseInt(sFecha[1],10);
       if (sFecha[2].length==2)
        {
         anio =parseInt("20"+sFecha[2],10);
        }
       else anio =parseInt(sFecha[2],10);

       if(!isNaN(dia) && !isNaN(mes) && !isNaN(anio) &&
         (anio >=1900) && (anio <=2100) &&
         (mes >=1) && (mes <=12) &&
         (dia>=1) && (dia<=31))
       {
          switch(mes){
             case 1:
             case 3:
             case 5:
             case 7:
             case 8:
             case 10:
             case 12:
                return true;
                break;

             case 4:
             case 6:
             case 9:
             case 11:
                return (dia<=30);
                break;

             case 2:  //Febrero
                if(esAnioBisiesto(anio))
                   return (dia<=29);
                 else
                   return (dia<=28);
                break;
          }//switch
       } //isNaN(...)
    }
    }
    return false;
}

//Valida si es menor fechaUNO de fechaDOS
function esMenor(fechaUNO, fechaDOS) {
	var direncia_dias = diasDiferencias(fechaUNO, fechaDOS);
	if (direncia_dias < 0) {
		return false;
	} else {
		return true;
	}
}


function diasDiferencias(fechaUNO, fechaDOS) {
	var resultado = "";
	
	if (fechaCorrecta(fechaUNO) && fechaCorrecta(fechaDOS)) {
	
		var fecha_1 = new Date(getAnioFechaString(fechaUNO),getMesFechaString(fechaUNO),getDiaFechaString(fechaUNO)); 
		var fecha_2 = new Date(getAnioFechaString(fechaDOS),getMesFechaString(fechaDOS),getDiaFechaString(fechaDOS)); 
		
		var fecha_1_time = fecha_1.getTime();
		var fecha_2_time = fecha_2.getTime();
		
		
		var resta = fecha_2_time - fecha_1_time;
		resultado = Math.floor(resta/(1000*60*60*24)); 
	
	} 
	
	return resultado;
}

function sumaMes(fecha, nSum){
	var nDia = getDiaFechaString(fecha);
	var nMes = getMesFechaString(fecha);
	var nAno = getAnioFechaString(fecha);
	
	if (nSum >= 0){
     for (var i = 0; i < Math.abs(nSum); i++){
      if (nMes == 12){
       nMes = 1;
       nAno += 1;
      } else nMes += 1;
     }
    } else {
     for (var i = 0; i < Math.abs(nSum); i++){
      if (nMes == 1){
       nMes = 12;
       nAno -= 1;
      } else nMes -= 1;
     }
    }
	if (nDia > diaFinMes(nMes, nAno))  nDia = diaFinMes(nMes, nAno);
    return armaFecha(nDia, nMes, nAno);
   }
 
function sumaDia(fecha, nSum){ 
   var nDia = getDiaFechaString(fecha);
   var nMes = getMesFechaString(fecha);
   var nAno = getAnioFechaString(fecha);
   var nInc = Math.abs(parseInt(nSum)); 
   
   if (parseInt(nSum) >= 0) {
		for (var i = 0; i < nInc; i++) 
		{
				//sRes = incDate(sRes); 
			   nDia += 1; 
			   if (nDia > diaFinMes(nMes, nAno)){ 
					nDia = 1; 
					nMes += 1; 
					if (nMes == 13){ 
						 nMes = 1; 
						 nAno += 1; 
					} 
			   } 
		}  
   } else {
		for (var i = 0; i < nInc; i++) 
		{
			   nDia -= 1; 
			   if (nDia == 0){ 
				nMes -= 1; 
					if (nMes == 0){ 
						 nMes = 12; 
						 nAno -= 1; 
					} 
				nDia = diaFinMes(nMes, nAno); 
			   }
		}
	}
   
   return armaFecha(nDia, nMes, nAno);
 } 



//Comprueba si el aņo pasado es bisiesto:
function esAnioBisiesto(anio){
   if( (anio % 100)==0  && (anio%400)==0){
      return true;
   }else if ((anio%100)!=0 && (anio%4)==0 ){
      return true;
   }else
      return false;
}


function getDiaFechaString(fecha) {
	var dia = "";
	
	if (fechaCorrecta(fecha)) {		
		sFecha =fecha.split('/');
		dia  = parseInt(sFecha[0],10);
	}	
	return dia;
}

function getMesFechaString(fecha) {
	var mes = "";
	
	if (fechaCorrecta(fecha)) {		
		sFecha =fecha.split('/');
		mes  = parseInt(sFecha[1],10);
	}	
	return mes;
}

function getAnioFechaString(fecha) {
	var anio = "";
	
	if (fechaCorrecta(fecha)) {		
		sFecha =fecha.split('/');
		anio  = parseInt(sFecha[2],10);
	}	
	return anio;
}

function armaFecha(nDia, nMes, nAno){
	var sRes = cerosIzq(String(nDia), 2);
	sRes = sRes + "/" + cerosIzq(String(nMes), 2);
	sRes = sRes + "/" + cerosIzq(String(nAno), 4);
	return sRes;
}

function diaFinMes(nMes, nAno){ 
   var aFinMes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
   return aFinMes[nMes - 1] + (((nMes == 2) && (nAno % 4) == 0)? 1: 0); 
 } 

function cerosIzq(sVal, nPos){
	var sRes = sVal;
	for (var i = sVal.length; i < nPos; i++)
	 sRes = "0" + sRes;
	return sRes;
}

