//CSFecha.js
//Clase fecha.

//Konstanteak.
var CSFECHA_FORMAT = map["CSFECHA_FORMAT"];
var CSFECHA_MSG_OBLIGATORY = map["MSG_OBLIGATORY"];
var CSFECHA_MSG_SPACES = map["MSG_SPACES"];
var CSFECHA_MSG_INCORRECT = map["MSG_INCORRECT"]; 
var CSFECHA_MSG_CSFECHA_SAMPLE = map["MSG_CSFECHA_SAMPLE"];

function CSFecha(campo,etiqueta,obligatorio) {
	this.campo = campo;
	this.etiqueta = etiqueta;
	this.obligatorio = obligatorio;
	this.error = "";
	
	this.validar = CSFecha_validar;
	this.msg_error = CSFecha_msg_error;
	
}

//Devuelve true o false si el campo es correcto o incorrecto.
function CSFecha_validar() {
   var re,espacios,anyo,mes,dia;	
   var fecha;
   
     fecha=this.campo;
     if (this.obligatorio){
		if (fecha == "") {
           this.error = CSFECHA_MSG_OBLIGATORY;
		   this.error = this.error.replace('XXXXXX',this.etiqueta);
           return false;
        }
	 } else {
		if (fecha == "") {
		   return true;
        }
	 }

     re = /^\s+$/;
     espacios = re.test(fecha);
     if (espacios) {
              this.error = CSFECHA_MSG_SPACES;
 		      this.error = this.error.replace('XXXXXX',this.etiqueta);			  
		      return false;
	 } else {
			   // YYYY-MM-DD
               // MM-DD-YYYY
               // DD-MM-YYYY
               // YYYY/MM/DD
               // MM/DD/YYYY
               // DD/MM/YYYY
               // YYYY.MM.DD
               // MM.DD.YYYY
               // DD.MM.YYYY
			 if (CSFECHA_FORMAT == "YYYY-MM-DD") {
                   re = /^(\d{4,4})-(\d\d|\d)-(\d\d|\d)$/;
                   anyo=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   dia=fecha.replace(re,"$3");
             } else if (CSFECHA_FORMAT == "MM-DD-YYYY") {
                   re = /^(\d\d|\d)-(\d\d|\d)-(\d{4,4})$/;
                   mes=fecha.replace(re,"$1");
                   dia=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
			 } else if (CSFECHA_FORMAT == "DD-MM-YYYY") {
                   re = /^(\d\d|\d)-(\d\d|\d)-(\d{4,4})$/;
                   dia=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
             } else if (CSFECHA_FORMAT == "YYYY/MM/DD") {
                   re = /^(\d{4,4})\/(\d\d|\d)\/(\d\d|\d)$/;
                   anyo=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   dia=fecha.replace(re,"$3");
             } else if (CSFECHA_FORMAT == "MM/DD/YYYY") {
                   re = /^(\d\d|\d)\/(\d\d|\d)\/(\d{4,4})$/;
                   mes=fecha.replace(re,"$1");
                   dia=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
			 } else if (CSFECHA_FORMAT == "DD/MM/YYYY") {
                   re = /^(\d\d|\d)\/(\d\d|\d)\/(\d{4,4})$/;
                   dia=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
			 } else if (CSFECHA_FORMAT == "YYYY.MM.DD") {
                   re = /^(\d{4,4})\.(\d\d|\d)\.(\d\d|\d)$/;
                   anyo=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   dia=fecha.replace(re,"$3");
			 } else if (CSFECHA_FORMAT == "MM.DD.YYYY") {
                   re = /^(\d\d|\d)\.(\d\d|\d)\.(\d{4,4})$/;
                   mes=fecha.replace(re,"$1");
                   dia=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
			 } else if (CSFECHA_FORMAT == "DD.MM.YYYY") {
                   re = /^(\d\d|\d)\.(\d\d|\d)\.(\d{4,4})$/;
                   dia=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   anyo=fecha.replace(re,"$3");
			 } else {
                   re = /^(\d{4,4})-(\d\d|\d)-(\d\d|\d)$/;
                   anyo=fecha.replace(re,"$1");
                   mes=fecha.replace(re,"$2");
                   dia=fecha.replace(re,"$3");
             }

            if (CSFecha_esDia(anyo,mes,dia)) {
                 return true;
             } else {
                 this.error = CSFECHA_MSG_INCORRECT;
 		         this.error = this.error.replace('XXXXXX',this.etiqueta) + ' ' + CSFECHA_MSG_CSFECHA_SAMPLE;
		         return false;
  		     }

        }
	}

//Devuelve el mensaje de error o cadena vacia
function CSFecha_msg_error() {
   return this.error;
	
}

//Funciones auxiliares.
function CSFecha_esAnyo(anyo) {
     return (anyo >= 1000 && anyo <= 9999);
  }


function CSFecha_esMes(mes) {
     return (mes >= 1 && mes <= 12);
  }


function CSFecha_esBisiesto(anyo) {
    return ((anyo % 4 == 0 && anyo % 100 != 0) || anyo % 400 == 0);
  }

function CSFecha_esDia(anyo,mes,dia) {

    if (anyo == 0 && mes == 0 && dia == 0) {return true;}
    if (!CSFecha_esAnyo(anyo)) {return false;}
    if (!CSFecha_esMes(mes)) {return false;}
    if (mes == 2) {
       if (CSFecha_esBisiesto(anyo)) {
         return (dia >=1 && dia <=29);
       } else {
         return (dia >=1 && dia <=28);
       }
    } else {
         if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || 
             mes == 8 || mes == 10 || mes == 12) {
            return (dia >= 1 && dia <= 31);
         } else {
            return (dia >= 1 && dia <= 30);
         }
    }
  }
