﻿function validaAlMenosUno(form){
	var inputs = form.getElementsByTagName("input");
	var ok = false;
	for (var i = 0; i < inputs.length; i++) {
		if (trim(inputs[i].value) != "") {
			ok = true;
			inputs[i].value = trim(inputs[i].value.toUpperCase());
		}
		else {
			inputs[i].value = trim(inputs[i].value);
		}
	}
	if (ok){
		return true;
	}
	var selects = form.getElementsByTagName("select");
	for (var i=0;i<selects.length;i++){
		if(selects[i].value != ""){
			return true;
		}
	}
	alert("Favor ingrese al menos un criterio de búsqueda");
	return false;
}
function cargaPeriodo(inicio,idselect){
   var hoy =new Date()
   var n=Math.abs((hoy.getFullYear()-inicio)/10);
   var obj = document.getElementById(idselect);
   
   for(i=0;i<n;i++){
       obj.options[obj.options.length]=new Option((inicio+1)+' - '+(inicio+10),(inicio+1)+' - '+(inicio+10))
       inicio=inicio+10; 
   }

}

function validar(form)
{
form.submit();
}


function enviar(obj){
var link = obj;
window.location=link;
}

function mostrarFlechaTratados(col,orden){
	var columna = col;
	var direccion= orden;
	var clase = "";
    var norma = document.getElementById('ordenNorma');
	var fecha = document.getElementById('ordenFecha');
    var pais = document.getElementById('ordenPais');
    switch(direccion){
	    case 1: clase = "ico_bajar_listado";
		        break;
	    case 2: clase = "ico_subir_listado";
		        break;
	    default:
	        clase = "ordenlistado";
	}
	switch(columna){
		case 1:norma.className=clase;
		       fecha.className="ordenlistado";
               pais.className="ordenlistado";
			   break;
	    case 4:norma.className="ordenlistado";
               fecha.className=clase;
		       pais.className="ordenlistado";
			   break;
        case 5:norma.className="ordenlistado";
               fecha.className="ordenlistado";
		       pais.className=clase;
			   break;
		default:
			   fecha.className=clase;
		       norma.className="ordenlistado";
               pais.className="ordenlistado";
	}
	
}
function enviarConsultaTratado(materia,pais,periodo,organismo,palabra){
	function sino(nombre,dato){
		if (dato != "") {
			var  dic ="{'descripcion':'"+nombre+"','valor_busqueda':'"+dato+"'},"
			return dic
		}
		else return "";
	}
	var params = "[";
	params += sino("Materia",materia);
	params += sino("Pais",pais);
	params += sino("Periodo",periodo);
	params += sino("Organismo",organismo);
	params += sino("Palabra",palabra);
	params += "]"
	
	/*
alert(materia+" "+pais+" "+periodo+" "+organismo+" "+palabra);
	alert(params);
*/
	
	document.getElementById("paramBusqueda").value = params;
	document.getElementById("frmConsutalH").target = "_parent";
	document.getElementById("frmConsutalH").submit();

	
}


function poneEspacios(id,cadena){
   var casilla = document.getElementById(id);
   var nuevacadena = cadena.replace(/;/g," ; ");
   casilla.innerHTML = nuevacadena;
}

function validarCambioEnFechasTrat(idObjDesde, idObjHasta){
	var objetoDesde = $(idObjDesde);
	var objetoHasta = $(idObjHasta);
	

	objetoDesde.value = validaFechasTrat(objetoDesde.value, 'desde');
	objetoHasta.value = validaFechasTrat(objetoHasta.value, 'hasta');
	
	var fechas = validaRangoFechasTrat(objetoDesde, objetoHasta);

	objetoDesde.value = fechas[0];
	objetoHasta.value = fechas[1];

}
function validaRangoFechasTrat(objetoDesde, objetoHasta){
    //Funcion que valida el correcto rango de las fechas, es decir, que fecha desde debe ser menor que fecha hasta
    var desde = objetoDesde.value;
    var hasta = objetoHasta.value;
    var descparametro = 'la fecha';
    if(desde==""  || hasta==""){
        return [desde, hasta];
    }
    var desdeArreglo = desde.split("-");
    var hastaArreglo = hasta.split("-");
    var desdeDate = new Date(eval(desdeArreglo[2]), eval(desdeArreglo[1])-1, eval(desdeArreglo[0]));
    var hastaDate = new Date(eval(hastaArreglo[2]), eval(hastaArreglo[1])-1, eval(hastaArreglo[0]));
    
    if(desdeDate <= hastaDate){
        return [desde, hasta];
    }
    else{
        var opcionCambiar=prompt("ERROR en \""+descparametro+"\"\n\n- Fecha De: es mayor que Fecha A:.\n\n- Para re-ingresar Fecha De: ingrese \"Desde\"\n- Para re-ingresar Fecha A:,  ingrese \"Hasta\"\n\n(Presione en Cancelar para borrar ambas)", "Desde");
        if(opcionCambiar){
            opcionCambiar = opcionCambiar.toUpperCase();
            if(opcionCambiar.toLowerCase()=="desde"){
                //ERROR Fecha fuera de rango (desde no es <= que hasta)
                var mensajeDeError = "Fecha fuera de rango \n(\"Desde\" ("+objetoDesde.value+") no es menor o igual que \"Hasta\" ("+objetoHasta.value+")).";
                var fechaErrada = descparametro+" De";
                var auxStringFecha = reIngresoFecha(desde, fechaErrada, mensajeDeError)
                objetoDesde.value = auxStringFecha;
                if(auxStringFecha!=""){
                    desde = validarCambioEnFechasTrat(objetoDesde,"desde");
                    return validaRangoFechasTrat(objetoDesde, objetoHasta, id_parametro);
                }
                else{
                    return ["", hasta];
                }
            }
            else if(opcionCambiar.toLowerCase()=="hasta"){
                //ERROR Fecha fuera de rango (desde no es <= que hasta)
                var mensajeDeError = "Fecha fuera de rango (\"Desde\" ("+objetoDesde.value+") no es menor o igual que \"Hasta\" ("+objetoHasta.value+")).";
                var fechaErrada = descparametro+" HASTA";
                var auxStringFecha = reIngresoFecha(objetoHasta.value, fechaErrada, mensajeDeError)
                objetoHasta.value = auxStringFecha;
                if(auxStringFecha!=""){
                    fnRealizaValidacion('onBlur');
                    hasta = validarCambioEnFechasTrat(objetoHasta, "hasta");
                    return validaRangoFechasTrat(objetoDesde, objetoHasta,id_parametro);
                }
                else{
                    fnRealizaValidacion('onBlur');
                    return [desde, ""];
                }
            }
            else{
                objetoDesde.value = "";
                objetoHasta.value = "";
                return ["", ""];
            }
        }
        else{
            objetoDesde.value = "";
            objetoHasta.value = "";
            return ["", ""];
        }
    }
}
function reIngresoFecha(fechaConErrores, fechaErrada, mensajeError){
    var nuevoValor=prompt("ERROR en \""+fechaErrada+"\"!!!\nIngresela correctamente o cancele para borrarla."+
                                    "\n\nMensaje de error: " + mensajeError+"\n\n", fechaConErrores);
    if(nuevoValor){
        return nuevoValor;
    }
    else{
        return "";
    }
}
function validaFechasTrat(value, desde_hasta){
	if(value == "") return "";
	var mensajeDeError ="";
	if (formatoValido(value)) {
		if (checkDate(value)) {
			var formato = getFormato(value);
			if (formato == "mm-yyyy") {
				if (desde_hasta == "desde") {
					return "01-" + value;
				}
				else {
					if (checkDate("31-" + value)) {
						return "31-" + value;
					}
					else 
						if (checkDate("30-" + value)) {
							return "30-" + value;
						}
						else 
							if (checkDate("29-" + value)) {
								return "29-" + value;
							}
							else 
								if (checkDate("28-" + value)) {
									return "28-" + value;
								}
				}
			}
			if (formato == "yyyy") {
				if (desde_hasta == "desde") {
					return "01-01-" + value;
				}
				else {
					return "31-12-" + value;
				}
			}
			if (formato == "dd-mm-yyyy") {
				return value;
			}
		}
		else {
			mensajeDeError = "La fecha ingresada no es una fecha válida";
		}
	}else{
		mensajeDeError = "La fecha ingresada no está en un formato válido:\nLos formatos válidos son: dd-mm-aaaa, mm-aaaa, aaaa";
	}
	var tipo = "";
	if(desde_hasta=="desde"){
		tipo = " De";
	}else{
		tipo = " A";
	}
	var fechaErrada = "la fecha";
	value = reIngresoFecha(value, fechaErrada, mensajeDeError);
	
	return validaFechasTrat(value, desde_hasta);
}
function getFormato(t_fecha){
	var dd_mm_yyyy = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;	
	var mm_yyyy = /^[0-9]{2}-[0-9]{4}$/;	
	var yyyy = /^[0-9]{4}$/;	
	//En Formato dd-mm-yyyy
	if(dd_mm_yyyy.test(t_fecha)){
		return "dd-mm-yyyy";
	//En Formato mm-yyyy
	}else if(mm_yyyy.test(t_fecha)){
		return "mm-yyyy";
	//En Formato yyyy		
	}else if(yyyy.test(t_fecha)){
		return "yyyy";
	}
}
/*
 * Formatos Validos
 * dd-mm-yyyy
 * mm-yyyy
 * yyyy
 */
function formatoValido(value){
	var b = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$|^[0-9]{2}-[0-9]{4}$|^[0-9]{4}$|^.{0}$/;	
	if (!b.test(value))
	{
       return false;
	}else{
		return true;
	}
}
var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

/*
 * Valida que la fecha este en alguno de estos formatos:
 * 		dd-mm-yyyy
 * 		mm-yyyy
 * 		yyyy
 * y que además sean fechas validas (en cuanto a si existe la fecha)
 */
function checkDate(t_fecha)
{
	var dd_mm_yyyy = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;	
	var mm_yyyy = /^[0-9]{2}-[0-9]{4}$/;	
	var yyyy = /^[0-9]{4}$/;	
	
	var day = false;
	var month = false;
	var year = false;
	
	//En Formato dd-mm-yyyy
	if(dd_mm_yyyy.test(t_fecha)){
		
		tmp = t_fecha.split('-');
		day = tmp [0];
		month = tmp [1];
		year = tmp [2];
		
	//En Formato mm-yyyy
	}else if(mm_yyyy.test(t_fecha)){
		tmp = t_fecha.split('-');
		month = tmp [0];
		year = tmp [1];
		
	//En Formato yyyy		
	}else if(yyyy.test(t_fecha)){
		tmp = t_fecha.split('-');
		year = tmp [0];
	}
	
	if (!day && !month && !year) {
		return false;
	}
	
	//si es año bisiesto
	if (parseInt(year)/4 == parseInt(parseInt(year)/4))
		monthLength[1] = 29;

	if (day && month) {
		if (parseInt(day) > monthLength[parseInt(month) - 1]) {
			return false;
		}
	}

	if(month > 12)
		return false;
		
	monthLength[1] = 28;

		

	var now = new Date();
	now = now.getTime(); //NN3

	var dateToCheck = new Date();
	dateToCheck.setYear(parseInt(year));

	if(!month) month = 12;
	dateToCheck.setMonth(parseInt(month)-1);

	if(!day) day = 10;
	dateToCheck.setDate(parseInt(day));
	
	var checkDate = dateToCheck.getTime();
	
	var futureDate = (now < checkDate);
	var pastDate = (now >= checkDate);
	
	return (futureDate || pastDate)?true:false;
}
