﻿//--------------------------------------------------------------
// funciones javascript utilizadas en BUSQUEDA AVANZADA
// fecha creación: 3/2/2007
//--------------------------------------------------------------

//Para limpiar parametros
function fnLimpiaParametros(){
    // limpia los parametros que son string 
    var tipoString = document.getElementsByName('STRING');
    var largo =tipoString.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('STRING')[i].value="";
    }
    //limpia los parametros que son tipo  textarea
    var tipoTextArea = document.getElementsByName('TEXTAREA');
         largo =tipoTextArea.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('TEXTAREA')[i].value="";
    }

    // limpia los parametros q son  tipo Number
    var tipoNumber = document.getElementsByName('NUMBER');
         largo =tipoNumber.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('NUMBER')[i].value="";
    }
    
    //limbiar los parametros que son tipo  multiple
    var tipoMultiple = document.getElementsByName('MULTIPLE');
         largo =tipoMultiple.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('MULTIPLE')[i].selectedIndex=-1;
    }

    //limpia los parametros que son combobox
    var tipoCombo = document.getElementsByName('COMBOBOX');
         largo =tipoCombo.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('COMBOBOX')[i].selectedIndex=0;
    }
    //limpia los parametros que son de tipo fecha
    var tipoDate = document.getElementsByName('DATE');
          largo =tipoDate.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('DATE')[i].value="";
    }

    //limpia los parametros que son de tipo radio
    var tipoRadio = document.getElementsByName('idparametro_RADIO2');
        largo =tipoRadio.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('idparametro_RADIO2')[i].checked=false;
    }

    // limpia los parametros que son tipo checkbox
    var tipoCheckbox = document.getElementsByName('CHECKBOX');
    var largo =tipoCheckbox.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('CHECKBOX')[i].checked=false;
    }
    // limpia los parametros que son string 
    var tipoString = document.getElementsByName('ASISTENTE');
    var largo =tipoString.length;
    
    for(i=0;i<largo;i++){
    document.getElementsByName('ASISTENTE')[i].value="";
    }




    // casos especiales
    //criterio de palabra o frase
    document.getElementById('criterioPalabraOfrase').value="";
    document.getElementById('excluirPalabraOfrase').value="";
    
    //numero de norma: radio con numero-sin numero
    document.getElementById('sinNumero').checked=false;
    document.getElementById('conNumero').checked = true;
}


//------------------------------------------------preferencias basicas----------------------------------------------
function preferenciasBASIC(url) {
    var ancho=800;
    var alto=600;
    izquierda = (screen.width) ? (screen.width-ancho)/2 : 100
    arriba = (screen.height) ? (screen.height-alto)/2 : 100
    opciones = 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=0,width=' + ancho + ',height=' + alto + ',left=' + izquierda + ',top=' + arriba + ''
    window.open(url, 'popUp', opciones)
}
//----                  -----------------------------------------------------------//
// Declaración de variables

var validandoCampo = false;
var conectorDefault = " , ";
var SecuenciaDeEscape = "!!";
var arregloAux = new Array();
var arregloNombres = new Array();
var nivelAciertoDisabled = new Array();//parametro que se desabilitan al refinar la busqueda
var nivelAciertoDefault = "117";//nivel de acierto por defecto de la busqueda ('117' equivale a 'NORMA')
                                            //este valor cambia al cargar la pagina segun el perfil, la preferencia del usuario o parametro guardado

// funcion para el manejo de divs flotantes
function fnMueveDivObj(obj, idCalled){

    objCalled=document.getElementById(idCalled);
    coord=findPos(obj);
    objCalled.style.left=coord[0]+21+"px";
    objCalled.style.top=coord[1]+"px";
    fnColapse(idCalled);
}

// funcion que cambia el contenido de un objeto recibe:
// id del objeto, id del objeto 2 que es o no visible y cambia su estado
function fnCambiar(strdiv,strdiv2){

    if(document.getElementById(strdiv2).style.display=='none'){
        document.getElementById(strdiv).innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/more.gif\" title=\"Mostrar\" alt=\"Mostrar\" />";  
    } 
    else {
        document.getElementById(strdiv).innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/less.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
    }
}

// funcion que cambia el contenido de un objeto recibe:
// id del objeto, id del objeto 2 que es o no visible y cambia su estado
function fnCambiarAgregarQuitar(strdiv,strdiv2){

    if(document.getElementById(strdiv2).style.display=='none'){
        document.getElementById(strdiv).innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Mostrar\" alt=\"Mostrar\" />";  
    } 
    else {
        document.getElementById(strdiv).innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/cerrar.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
    }

    if(strdiv2 == "personalizarquebusca"){
        document.getElementById("personalizardondebusca").style.display='none';
        document.getElementById("dondebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizarnivelAcierto").style.display='none';
        document.getElementById("nivelAcierto").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("div_recuperarParametros").style.display="none";
        document.getElementById("div_guardarParametros").style.display="none";
    }
    else if(strdiv2 == "personalizardondebusca"){
        document.getElementById("personalizarquebusca").style.display='none';
        document.getElementById("quebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizarnivelAcierto").style.display='none';
        document.getElementById("nivelAcierto").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("div_recuperarParametros").style.display="none";
        document.getElementById("div_guardarParametros").style.display="none";
    }
    else if(strdiv2 == "personalizarnivelAcierto"){
        document.getElementById("personalizarquebusca").style.display='none';
        document.getElementById("quebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizardondebusca").style.display='none';
        document.getElementById("dondebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("div_recuperarParametros").style.display="none";
        document.getElementById("div_guardarParametros").style.display="none";
    }
}

// funcion que habilita las opciones de parte de la Norma
function fnHabilitarParte(value){

    //alert("onClick="+value);
 
 
    if(value==6 || value==117){
        document.getElementById('idparametro_Parte').disabled = true;
        document.getElementById('idparametro_Estructura').disabled = true;
        document.getElementById('idparametro_Parte').style.color = "gray";
        document.getElementById('idparametro_Estructura').style.color = "gray";
    }
    else{
        document.getElementById('idparametro_Parte').disabled = false;
        //alert(document.getElementById('idparametro_Parte').selectedIndex);
        if(document.getElementById('idparametro_Parte').selectedIndex==1){
            document.getElementById('idparametro_Estructura').disabled = false;
            document.getElementById('idparametro_Estructura').style.color = "black";
        }
        document.getElementById('idparametro_Parte').style.color = "black";
    }
    
     if(value==6 || value==11){
    //desplegar  otro numero (41) , numero parte (45) y titulo parte (115)
      agregar_parametros('45');
      agregar_parametros('115');
      agregar_parametros('41');
      
  }
  else if (value==117){
      eliminar_parametros('45');
      eliminar_parametros('115');
      eliminar_parametros('41');
  }
    
}

// esta función habilita las opciones de estructura funcional
function fnHabilitarEstructura(seleccion){

    if(seleccion==1){
        document.getElementById('idparametro_Estructura').disabled = false;
        document.getElementById('idparametro_Estructura').style.color = "black"; 
    }
    else{ 
        document.getElementById('idparametro_Estructura').selectedIndex =0;
        document.getElementById('idparametro_Estructura').disabled = true;
        document.getElementById('idparametro_Estructura').style.color = "gray";
    }

}


// cambia el formato de la fecha Mes-Dia-Año --> Año-Mes-Dia
// recibe como parametro la fecha y la retorna con el formato
// requerido. 12-01-2007

function fnArreglarFecha(str_fecha){//APARENTEMENTE NO ES USADA NUNCA
    var vacio='';
    if (str_fecha!=''){
        var nuevoArray=str_fecha.split('-');
        var str_fechaNueva=nuevoArray[2]+"-"+nuevoArray[0]+"-"+nuevoArray[1];
        return(str_fechaNueva);
    } 
    else{
        return(vacio);
    }
}

// fnBuscarNorma es activado por el boton Busqueda 
// Procedimiento que llama a fnGenerarStringBusqueda y le envia
// como parametros el input hidden 'arreglo_parametros'
 
function fnBuscarNorma(){
contaIteracion=0;
    ocultarDivs();
    if(validandoCampo){
        alert("Actualmente se estaba realizando una validacion. Presione nuevamente \"Buscar Norma\"");
        return true;
    }
    else{
        var x =   fnGenerarStringBusqueda('arreglo_parametros');
        //var x =   fnGenerarArreglo('arreglo_parametros');
        if(x){
            document.getElementById('accionRefinar').disabled = false;
            if(document.getElementById('idparametro_49').checked==true){
                document.getElementById('intermedio').value=1;
            }
            else if(document.getElementById('idparametro_49').checked==false){
                document.getElementById('intermedio').value=0;
            }
            document.getElementById('FormBuscarNorma').submit();
        }
         return true;
    }
}

// fnBuscarNorma es activado por el boton Refinar Busqueda
// Procedimiento que llama a fnGenerarStringBusqueda y le envia
// como parametros el input hidden 'arreglo_refinar'

function fnRefinarBuscarNorma(){

    ocultarDivs();
    if(validandoCampo){
        alert("Actualmente se estaba realizando una validacion. Presione nuevamente \"Refinar Busqueda\"");
        return true;
    }
    else{
        var z = fnGenerarStringBusqueda('arreglo_refinar');
        //var z = fnGenerarArreglo('arreglo_refinar');
        if(z) {
            document.getElementById('FormRefinarBuscarNorma').submit();
        }
         return true;
    }
}


function fnBuscarOrefina(tipoaccion){

    var param_Desabilitar = new Array('idparametro_6', 'idparametro_117', 'idparametro_11', 'idparametro_Parte', 'idparametro_Estructura');
    var largo = param_Desabilitar.length;

     if(tipoaccion == "accionBuscar"){
         document.getElementById("botonBuscar").style.display = "block";
         document.getElementById("botonRefinar").style.display = "none"; 
         
         if(nivelAciertoDisabled.length > 0){
             for(i=0 ; i< largo ; i++){
                document.getElementById(param_Desabilitar[i]).disabled = nivelAciertoDisabled[i];
             }
         }
    }
    else if(tipoaccion == "accionRefinar"){
        document.getElementById("botonRefinar").style.display = "block";
        document.getElementById("botonBuscar").style.display = "none";

        nivelAciertoDisabled = new Array();
         for(i=0 ; i< largo ; i++){
            nivelAciertoDisabled.push(document.getElementById(param_Desabilitar[i]).disabled);
            document.getElementById(param_Desabilitar[i]).disabled = true;
         }
    }
}

// funcion que encuentra la posicion donde ser realizo algun evento
function findPos(obj){
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft,curtop];
}

// oculta o muestra un div deacuerdo a su estado
function fnColapse(strdiv){

  if(document.getElementById(strdiv).style.display=='none'){
       document.getElementById(strdiv).style.display='';
  }else{
       document.getElementById(strdiv).style.display='none';
  }
}
//quita parametros sobre los que tiene permiso para
//poder realizar una busqueda mas sencilla
function eliminar_parametros(str_idTR){
    if (str_idTR == 'trpalabrafrase' || str_idTR == 'trconectoreslogicos'){
            var objCalled1 = document.getElementById(str_idTR + "_chbox");
            objCalled1.style.display = "none";
    }
    var objTR = document.getElementById(str_idTR);
    objTR.style.display = "none";
    var idimgmore = str_idTR + "_imgmore";
    document.getElementById(idimgmore).style.display="";
    var idimgless = str_idTR + "_imgless";
    document.getElementById(idimgless).style.display="none";
    
    fnLimpiaParametrosPorId(str_idTR);
}



// agrega parametros sobre los que tiene permisos
//para una busqueda mas detallada
function agregar_parametros(str_idTR){
    var esNorma = document.getElementById('idparametro_117').checked;
    
    if((str_idTR!='45' && str_idTR!='41' && str_idTR!='115') || esNorma!=true){
        var objTR = document.getElementById(str_idTR);
        if (str_idTR == 'trpalabrafrase' || str_idTR == 'trconectoreslogicos'){
        var objCalled1 = document.getElementById(str_idTR + "_chbox");
        objCalled1.style.display = "";
    }
        objTR.style.display = "";
        var idimgmore = str_idTR + "_imgmore";
        document.getElementById(idimgmore).style.display="none";
        var idimgless = str_idTR + "_imgless";
        document.getElementById(idimgless).style.display="";
        
    }
}




function fnGuardarParametros(objCaller, idCalled, idDesabilitar){

    if (arguments.length > 2) {
        //alert("hola1");

        document.getElementById(idDesabilitar).style.display="none";

        document.getElementById("personalizarquebusca").style.display="none";
        document.getElementById("quebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizardondebusca").style.display="none";
        document.getElementById("dondebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizarnivelAcierto").style.display="none";
        document.getElementById("nivelAcierto").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";

    }


    var arregloIdValor = new Array();
    var arregloNombres = new Array();
    var aux = new Array();
    
    for(i=0; i <datos.length; i++){
        var id = String(datos[i][1]);
        var idparametro = "idparametro_"+id;
        var descparametro = datos[i][0];
        var tipoparametro = datos[i][4];
        var valorAguardar = "";
        var valorNombres = "";
        var desde = "";
        var hasta = "";

        if(tipoparametro == 'DATE'){

            if(document.getElementById(id).style.display != 'none'){
                desde = document.getElementById(idparametro+"_desde").value;
                hasta = document.getElementById(idparametro+"_hasta").value;

                if(desde!=""  || hasta !=""){
                    valorAguardar = desde+"_"+hasta;
                    valorNombres = "Desde: "+desde+"#Hasta: "+hasta;
                    arregloIdValor.push(id+"#"+valorAguardar);
                    arregloNombres.push(descparametro+"#"+valorNombres);
                }
            }
        }
        else if(tipoparametro=='MULTIPLE' || tipoparametro=='COMBOBOX'){

            if(document.getElementById(id).style.display != 'none'){
                valorAguardar=fntodosValoresMultiple(document.getElementById(idparametro));
                valorNombres=fntodosValoresMultiple(document.getElementById(idparametro), "text");

                if(valorAguardar!='None' && valorAguardar!='' && valorAguardar!=undefined){
                    arregloIdValor.push(id+"#"+valorAguardar);
                    arregloNombres.push(descparametro+"#"+valorNombres);
                }
            }
        }
        else if(tipoparametro=='STRING' || tipoparametro=='NUMBER' || tipoparametro=='TEXTAREA' || tipoparametro=='ASISTENTE'){

            if(document.getElementById(id).style.display != 'none'){
                valorAguardar = document.getElementById(idparametro).value;

                if( valorAguardar!='' ){
                    arregloIdValor.push(id+"#"+valorAguardar);
                    arregloNombres.push(descparametro+"#"+valorAguardar);
                  
                }
            }
        }
        else if(tipoparametro != ''){

            if(document.getElementById(id).style.display != 'none'){
                if(document.getElementById(idparametro).checked){
                    valorAguardar = "on";
                    valorNombres = "on";
                    if(id=='11' || id == 11){
                        var indice = document.getElementById('idparametro_Parte').selectedIndex;
                        if(indice == 1){
                            var indice = document.getElementById('idparametro_Estructura').selectedIndex;
                            valorAguardar = document.getElementById('idparametro_Estructura').options[indice].value;
                            valorNombres = document.getElementById('idparametro_Estructura').options[indice].text;
                        }
                        else{
                            valorAguardar = document.getElementById('idparametro_Parte').options[indice].value;
                            valorNombres = document.getElementById('idparametro_Parte').options[indice].text;
                        }
                    }
                    arregloIdValor.push(id+"#"+valorAguardar);
                    arregloNombres.push(descparametro+"#"+valorNombres);
                }
            }
        }
    }

/* alert(arregloIdValor.join("||")); */
//alert(arregloIdValor);
//alert(arregloNombres);


    if( (arregloIdValor.length != 0) && (arregloNombres.length != 0)){

        document.getElementById('parametrosAguardar').value = arregloIdValor.join("||");
        document.getElementById('parametrosAguardarNombres').value = arregloNombres.join("||");

        document.getElementById('FormGuardarBusqueda').submit();

        objCalled=document.getElementById(idCalled);        
        coord=findPos(objCaller);
        objCalled.style.left=coord[0]+265+"px";
        objCalled.style.top=coord[1]-203+"px";
        //srcIframeGuardar();
        document.getElementById(idCalled).style.display="block";
    }
    else{
        alert("Los campos del formulario están vacíos");
    }


}

//  Revisa los Select multiples y recoge (si los tiene)
//  sus multiples valores. recibe como parámetro el objeto multiple
//  y devuelve un string con su(s) valores.

function fntodosValoresMultiple(objetoSelect, retorno){

    if (arguments.length == 1) {
        retorno == "value";
    }

    var opt_selected = new Array();
    var concatenar=new Array();
    var index=0;
    
    for (var i=0;i < objetoSelect.options.length;i++){

        if (objetoSelect.options[i].selected){

            if(objetoSelect.options[i].value!=""){
                if(retorno == "text"){
                    concatenar[index]=objetoSelect.options[i].text;
                }
                else{
                    concatenar[index]=objetoSelect.options[i].value;
                }
                index++;
            }
        }
    }
    
    if (concatenar!=''){
        opt_selected=concatenar.join("#");
        //alert(opt_selected);
        return opt_selected;
    }
}
   
//------------------------------------------ 

function fnRecuperarParametros(objCaller, idCalled, idDesabilitar){

    if (arguments.length > 2) {
        document.getElementById(idDesabilitar).style.display="none";

        document.getElementById("personalizarquebusca").style.display='none';
        document.getElementById("quebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizardondebusca").style.display='none';
        document.getElementById("dondebusca").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
        document.getElementById("personalizarnivelAcierto").style.display='none';
        document.getElementById("nivelAcierto").innerHTML="<img src=\""+document.getElementById('urlImagen').value+"/abrir.gif\" title=\"Ocultar\" alt=\"Ocultar\" />";
    }

    objCalled=document.getElementById(idCalled);
        
    coord=findPos(objCaller);
    objCalled.style.left=coord[0]+265+"px";
    objCalled.style.top=coord[1]-180+"px";
    document.getElementById(idCalled).style.display="block";

}

function validaKeyPress(e, idParametro){
//funcion que valida caracter a caracter ingresado por el usuario para el parametro cuyo id corresponde al descrito en "idParametro"
//idParametro==1. caso especial de validacion para todos los parametros del tipo "DATE", que permiti solo el ingreso de digitos 0-9 y caracter "-"
    var arregloValidacion;
    if(arregloValidacion = ValidacionesPorParametros[idParametro]){
        
        tecla = (document.all)?e.keyCode:e.which;
        caracter = String.fromCharCode(tecla);
        
        var RETORNO = true;
        var formaValidacion = "TODAS";
        var cantValid = arregloValidacion.length;
        var aux;
        
        //alert("cantValid="+cantValid+"\narregloValidacion="+arregloValidacion);
        
        if(isCaracterDeControl(tecla)){
            //alert("Es la tecla de control numero="+tecla);
            for(i=0 ; i<cantValid ; i++){
            
                var validaciones = nuevoArray(arregloValidacion[i]);
                tipo = validaciones.shift();
                
                if(tipo== 1){
                    //Tecla(s) explícitamente permitida(s) sobre el parámetro.
                    //Retorna verdadero (true) a la primera coincidencia.
                    //Por defecto estan permitidas todas la teclas de control
                    if(validaciones.in_array(tecla)){
                        return true;//OJO, explicitamente permitido, tiene mayor importancia que cualquier otra validacion otras restricciones
                        //RETORNO = true;
                    }
                }
                else if(tipo== 2){
                    //Tecla(s) explícitamente NO permitida(s) sobre el parámetro.
                    //Retorna falso (false) a la primera coincidencia.
                    if(validaciones.in_array(tecla)){
                        return false;//OJO, explicitamente NO permitido, tiene mayor importancia que las otras validaciones
                    }
                }
            }
            return RETORNO;
        }
        else{
            for(i=0 ; i<cantValid ; i++){
            
                validaciones = nuevoArray(arregloValidacion[i]);
                //alert(validaciones);
                tipo = validaciones.shift();
                
                if(tipo== 3){
                    //Carácter(es) explícitamente permitido(s) sobre el parámetros.
                    //Retorna verdadero (true) a la primera coincidencia.
                    //Retorna verdadero (true) a la primera coincidencia.
                    
                    if(validaciones.in_array(caracter)){
                        return true;//OJO, explicitamente permitido, tiene mayor importancia que las otras validaciones
                        //RETORNO = true;
                    }
                }
                else if(tipo== 4){
                    //Carácter(es) explícitamente NO permitido(s) sobre el parámetro.
                    //Retorna falso (false) a la primera coincidencia.
                    if(validaciones.in_array(caracter)){
                        return false;//OJO, explicitamente NO permitido, tiene mayor importancia que las otras validaciones
                    }
                }
                else if(tipo== 5){
                    //Expresión(es) regular(es) para caracteres permitidos
                    //Debe coincidir con todos valor de las expresiones regulares

                        if(revisaExpRegTodasOk(validaciones, caracter)){
                            RETORNO = true;
                        }
                        else{
                            return false;
                        }
                }
                else if(tipo== 6){
                    //Expresión(es) regular(es) para caracteres NO permitidos
                    //No puede coincidir con ningun valor de las expresiones regulares
                        if(revisaExpRegNingunaOk(validaciones, caracter)){
                            RETORNO = true;
                        }
                        else{
                            return false;
                        }
                }
            }
        }
        return RETORNO;
    }
    return true;
}


function validaChange(objeto){
//funcion que valida el valor ingresado por el usuario para el parametro cuyo id corresponde al descrito en "idParametro"
//idParametro==0. caso especial de validacion para el parametro "Excluir palabra(s)" del parametro "Palabra o Frase"
//                         Esta validacion solo permite en ingreso de caracteres ""a-zA-Z0-9áéíóúÁÉÍÓÚñÑ" y espacios.
//gbl_Parametros en una variable global (hastable.js) que se llena mientras se cargan los parametros.
	validandoCampo = true;
	var idParametro = objeto.id;
    var arregloDeValidacionesOriginal;
	var obj = gbl_Parametros.get(idParametro);
	objeto.value = trim(objeto.value);
	setValorParametro(idParametro, objeto.value);
	
    if(arregloDeValidacionesOriginal = obj.validacion){

        var cadena = objeto.value;
        var arregloDeValidaciones = arregloDeValidacionesOriginal;
        var cantValid = arregloDeValidaciones.length;
        var RETORNO = true;
        
        if(cadena != ""){
            for(var i=0 ; i<cantValid ; i++){
            
                var validaciones = nuevoArray(arregloDeValidaciones[i]);
                var tipo = validaciones.shift();

                if(tipo== 7){
                    //Expresión(es) regular(es) para frases permitidas
                    //pueden realizarse 2 formas de validacion; 'TODAS' o 'ALGUNA' e indican ‘cuantas’ de las expresiones regulares deben cumplirse

                        formaValidacion = validaciones.shift();
                        formaValidacion.toUpperCase();
                        if(formaValidacion == "TODAS"){
                            if(revisaExpRegTodasOk(validaciones, cadena)){
                                RETORNO = true;
                            }
                            else{
                                //alert("arregloDeValidacionesOriginal enviado a no cumple()="+arregloDeValidacionesOriginal)
                                campoNoCumpleValidacion(objeto, idParametro);
                                fnRealizaValidacion('onBlur');
								setValorParametro(idParametro, objeto.value);
                                return false;
                            }
                        }
                        else if(formaValidacion == "ALGUNA"){
                            if(revisaExpRegAlgunaOk(validaciones, cadena)){
                                RETORNO = true;
                            }
                            else{
                                //alert("arregloDeValidacionesOriginal enviado a no cumple()="+arregloDeValidacionesOriginal)
                                campoNoCumpleValidacion(objeto, idParametro);
                                fnRealizaValidacion('onBlur');
								setValorParametro(idParametro, objeto.value);
                                return false;
                            }
                        }
                }
                else if(tipo== 8){
                    //Expresión(es) regular(es) para frases NO permitidas
                    //No puede coincidir con ningun valor de las expresiones regulares en el arreglo 'validaciones'
                        if(revisaExpRegNingunaOk(validaciones, cadena)){
                            RETORNO = true;
                        }
                        else{
                            //alert("arregloDeValidacionesOriginal enviado a no cumple()="+arregloDeValidacionesOriginal)
                            campoNoCumpleValidacion(objeto, idParametro);
                            fnRealizaValidacion('onBlur');
							setValorParametro(idParametro, objeto.value);
                            return false;
                        }
                }
                else if(tipo== 10){
                    //Lista de Ids de parametros que deben setearse con valor vacio o nulo cuando el parametro actual tiene un valor distinto de nulo
                    //Debe contemplarse el que alguno de los ids en esta lista ya no exixta como parametro valido
                        if(valorParametroNull(idParametro)){
                            //el parametro que genero esta validacion tiene un valor vacio o null por la tanto no debe continuarse la validacion
                            //no se termina la ejecucion de las validaciones por la posibilidad de existir otras que comprobar
                            RETORNO = true;
                        }
                        else{
                            var indice1 = 0;
                            var largoIdsParametro = validaciones.length;
                            var parametrosVaciados = new Array();
                            for(indice1=0 ; indice1 < largoIdsParametro ; indice1++){
                                auxIdParametro = validaciones[indice1];
                                if(fnLimpiaParametrosPorId(auxIdParametro)){
                                    parametrosVaciados.push(auxIdParametro);
                                }
                            }
                            if(parametrosVaciados.length>0){
                                fnAlertarParametrosLimpiados(parametrosVaciados);
                            }
                            //no se termina la ejecucion de las validaciones por la posibilidad de existir otras que comprobar
                            RETORNO = true;
                        }
                }
            }
        }
        if(RETORNO){
            fnRealizaValidacion('onBlur');
			setValorParametro(idParametro, objeto.value);
            return RETORNO;
        }
        else{
            campoNoCumpleValidacion(objeto, idParametro);
            fnRealizaValidacion('onBlur');
			setValorParametro(idParametro, objeto.value);
            return false;
        }
    }
    fnRealizaValidacion('onBlur');
	setValorParametro(idParametro, objeto.value);
    return true;
}

function isCaracterDeControl(tecla){
    if(tecla<32 || tecla==127){
        return true;
    }
    return false;
}

function revisaExpRegTodasOk(arreglo, cadena){
    var cantExpReg = arreglo.length;
    for(i=0 ; i<cantExpReg ; i++){
        auxpatron = arreglo[i];
        //alert("auxpatron="+auxpatron);
        patron = new RegExp(auxpatron);
        if(!(patron.test(cadena))){
            return false;
        }
    }
    return true;
}

function revisaExpRegNingunaOk(arreglo, cadena){
    var cantExpReg = arreglo.length;
    for(i=0 ; i<cantExpReg ; i++){
        auxpatron = arreglo[i]
        patron = new RegExp(auxpatron);
        if(patron.test(cadena)){
            return false;
        }
    }
    return true;
}

function revisaExpRegAlgunaOk(arreglo, cadena){
    var cantExpReg = arreglo.length;
    for(i=0 ; i<cantExpReg ; i++){
        auxpatron = arreglo[i]
        patron = new RegExp(auxpatron);
        if(patron.test(cadena)){
            return true;
        }
    }
    return false;
}

function campoNoCumpleValidacion(objeto, idParametro){

    if(idParametro!=0){
        var descripcion = descParametro(idParametro);
    }
    else{
        var descripcion = "Excluir palabra(s)";
    }
    var nuevoValor=prompt("El campo \""+descripcion+"\" contiene un valor no valido.\nIngreselo nuevamente o cancele para borrarlo", objeto.value);
    if(nuevoValor){
        objeto.value = nuevoValor;
        validaChange(objeto, idParametro);
    }
    else{
        objeto.value = "";
    }
    return false;
}

//Funcion que retorna la descripcion de un parametro dado su id
function descParametro(idParametro){
    var obj = gbl_Parametros.get(idParametro);
    if(obj){
       return obj.nombreparametro;
    }
    else{
        return "";
    }
}


Array.prototype.in_array=function(value){
    for(var z=0;z<this.length;++z){
        if(this[z] == value){
            return true
        }	
    }
    return false
}

function nuevoArray(arregloCopiar){
    var arregloCopiado = new Array();
    for(var ind=0 ; ind<arregloCopiar.length; ind++){
        arregloCopiado[ind]=arregloCopiar[ind];
    }
    return arregloCopiado;
}

function trim(cadena,caracter)
{	
	if(typeof(caracter)=='undefined'){
		caracter = " "
	}
	
	for(var i=0; i<cadena.length && i<caracter.length;)
	{
		if(cadena.substring(i,caracter.length)==caracter)
			cadena=cadena.substring(i+caracter.length, cadena.length);
		else
			break;
	}

	for(var i=cadena.length; i>=0; i=cadena.length-1)
	{
		if(cadena.substring(i-caracter.length,i)==caracter)
			cadena=cadena.substring(0,i-caracter.length);
		else
			break;
	}

	return cadena;
}
function validarBusquedasBloqueadas(arrgloParametros){

	var tmpArray = new Array()
	for (var i = 0; i < arrgloParametros.length; i++) {
		var str = arrgloParametros[i];
		var tmp = str.split(separadorValores);
		if (tmp[0] >= 0 && tmp[2].indexOf('XXtodos') < 0) {//Auxiliares
			tmpArray.push(arrgloParametros[i]);	
		}
	}	
	
	arrgloParametros  = tmpArray;
	
	if(arrgloParametros.length > 3){
		return true;
	}
	for (var i = 0; i < arrgloParametros.length; i++) {
		var str = arrgloParametros[i];
		var tmp = str.split(separadorValores);
		if (tmp[0] == "46" && tmp[1]=="normal") {//Palabra o frase
			var palabra_o_frase 		= document.getElementById('palabra_frase');
			var palabra_frase_excluir 	= document.getElementById('palabra_frase_excluir');
			if(trim(palabra_frase_excluir.value)){
				return true;
			}
			
			for (var i = 0; i < patronesAvanzada.length; i++) {
				patron = patronesAvanzada[i]["patron"];
				var mensaje = patronesAvanzada[i]["mensaje"];
				palabra_o_frase.value = palabra_o_frase.value.replace("  "," ");
				while (palabra_o_frase.value.indexOf("  ") > -1){
					palabra_o_frase.value = palabra_o_frase.value.replace("  "," ");
				}
				palabra_o_frase.value = trim(palabra_o_frase.value);
				if (patron.test(palabra_o_frase.value.toLowerCase())) {
					alert(mensaje);
					return false;
				}
			}
		}

		if (tmp[0] == "2") {//Tipo Norma
			for (var i = 0; i < tiposNormasLimitadas.length; i++) {
				var tipo = tiposNormasLimitadas[i]["tipo"];
				var mensaje = tiposNormasLimitadas[i]["mensaje"];
				if ("XX"+tipo == tmp[2]) {
					alert(mensaje);
					return false;
				}
			}
		}
	}
	
	return true;
}

var separadorValores = "#";
var separadorParametros = "||";

function fnGenerarStringBusqueda(ObjToSend,isToSave){
	if (validandoCampo) return true;
		
    var arregloAux = new Array();
    var cadenaPalabraOfrase = "";
	var vienePalabraOFrase = false;

    if(nivelAciertoDefault && nivelAciertoDefault!=""){
        //nivelAciertoDefault se obtiene desde el nivel de acierto seteado al recargar al cargar la pagina
        var cadenaNivelAcierto = nivelAciertoDefault;
    }
    else{
        //nivel de acierto por defecto en caso de fallar la carga de nivelAciertoDefault al cargar la pagina
        var cadenaNivelAcierto = "117";
    }
    var evaluacion = true;
    var cantParamBusqueda = 0;

    var arregloIdValor = new Array();
	var keys = gbl_Parametros.keys();
    for(var i = 0; i <keys.length; i++){
        var id = keys[i];
		var obj = gbl_Parametros.get(id);
        var idparametro = id;
        var descparametro = obj.nombreparametro;
        var tipoparametro = obj.tipo;
        var valorAguardar = "";
        var desde = "";
        var hasta = "";
        var objetoDesde = "";
        var objetoHasta = "";
        var valorAguardar = "";
		
		if (tipoparametro == undefined) {
			continue;
		}
		
		/*
		 * El caso "Palabra o Frase" es un caso especial, porque pueden seleccionar,
		 * Todas, Exacta, Algunas, además de palabras a excluir.
		 */
		if(idparametro == 'palabra_frase' && obj.valores.length>0 && obj.valores[0] != ""){
			vienePalabraOFrase = true;
			continue;
		}
		/*
		 * Estos parametros son la para "Palabra o Frase"
		 */
		if(idparametro == 'palabra_frase_todas' || idparametro == 'palabra_frase_exacta' || idparametro == 'palabra_frase_algunas' || idparametro == 'palabra_frase_excluir' ){
			continue;
		}
		
		
        if(tipoparametro == 'date'){

            if(obj.valores.length>0 && obj.valores[0] != ""){
                objetoDesde = document.getElementById("fecha_de_"+idparametro);
                objetoHasta = document.getElementById("fecha_a_"+idparametro);
                desde = objetoDesde.value;
                hasta = objetoHasta.value;

                if(desde!=""  || hasta !=""){
                    desde = validarCambioEnFechas(objetoDesde, "desde");
                    hasta = validarCambioEnFechas(objetoHasta, "hasta");

                    if(desde!=""  || hasta !=""){
                        valorAguardar = darFormatoFecha(desde,"aaa-mm-dd")+separadorValores+darFormatoFecha(hasta,"aaa-mm-dd");
                        arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                        cantParamBusqueda++;
                    }
                }
            }
        }
        else if(tipoparametro=='text' || tipoparametro=='select'){
			if(obj.valores.length>0 && obj.valores[0] != ""){
				
			    valorAguardar = obj.valores.join(separadorValores);
				if (id=="tipo"){//Para el Tipo Norma
					valorAguardar = "XX" + valorAguardar;
				}
				valorAguardar = trim(valorAguardar);
				if(EsTipoBusquedaOracle(valorAguardar)){
					valorAguardar = trim(valorAguardar,SecuenciaDeEscape);
					obj.tipoBusqueda = "oracle";
					gbl_Parametros.replace(idparametro,obj);
					arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                    cantParamBusqueda++;
				}else if(valorAguardar!='None' && valorAguardar!='' && valorAguardar!=undefined && valorAguardar!=separadorValores){
                    arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                    cantParamBusqueda++;
                }
            }
        }
        else if(tipoparametro=='organismo' || tipoparametro=='materia'){

            if(obj.valores.length>0 && obj.valores[0] != ""){
                valorAguardar = obj.valores.join(separadorValores);
				if(EsTipoBusquedaOracle(valorAguardar)){
					valorAguardar = trim(valorAguardar,SecuenciaDeEscape);
					obj.tipoBusqueda = "oracle";
					gbl_Parametros.replace(idparametro,obj);
					arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                    cantParamBusqueda++;
				}else if( valorAguardar != '' && valorAguardar != separadorValores){
                    valorAguardar = trim(valorAguardar);
                    arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                    cantParamBusqueda++;
                }
            }
        }
        else if(tipoparametro == 'check' || tipoparametro == 'radio'){
            if(obj.valores.length>0 && obj.valores[0] != "" && obj.valores[0] == "checked"){
                valorAguardar = "on";
                arregloIdValor.push(obj.id+separadorValores+obj.tipoBusqueda+separadorValores+valorAguardar);
                cantParamBusqueda++;
            }
        }
    }
	
	if(vienePalabraOFrase){
		var idparametro = 'palabra_frase';
		var objGblJs = gbl_Parametros.get(idparametro);
		 
		var objPalabra_frase = document.getElementById('palabra_frase');
		var objPalabra_todas = document.getElementById('palabra_frase_todas');
		var objPalabra_exacta = document.getElementById('palabra_frase_exacta');
		var objPalabra_alguna = document.getElementById('palabra_frase_algunas');
		var objPalabra_excluir = document.getElementById('palabra_frase_excluir');

		var valorAguardar = "";
		if (EsTipoBusquedaOracle(objPalabra_frase.value)) {
			valorAguardar = trim(objPalabra_frase.value, SecuenciaDeEscape) + "#";
			excluir = "("+StringformatoBusqueda(objPalabra_excluir)+")";
			valorAguardar += excluir
			objGblJs.tipoBusqueda = "oracle";
			gbl_Parametros.replace(idparametro, objGblJs);
			arregloIdValor.push(objGblJs.id + separadorValores + objGblJs.tipoBusqueda + separadorValores + valorAguardar);
			cantParamBusqueda++;
		}
		else {
			valorAguardar = getStringPalabraOFrase(objPalabra_frase, objPalabra_todas, objPalabra_exacta, objPalabra_alguna, objPalabra_excluir);
			
			arregloIdValor.push(objGblJs.id + separadorValores + objGblJs.tipoBusqueda + separadorValores + valorAguardar);
			cantParamBusqueda++;
			var ok = true;
			//Ahora hay que enviar la forma de busqueda (exacta, alguna, todas)
			if (objPalabra_alguna.checked) {
				objGblJs = gbl_Parametros.get(objPalabra_alguna.id);
			}
			else 
				if (objPalabra_exacta.checked) {
					objGblJs = gbl_Parametros.get(objPalabra_exacta.id);
				}
				else 
					if (objPalabra_todas.checked) {
						objGblJs = gbl_Parametros.get(objPalabra_todas.id);
					}
					else {
						ok = false;
					}
			if (ok) {
				valorAguardar = "on";
				arregloIdValor.push(objGblJs.id + separadorValores + objGblJs.tipoBusqueda + separadorValores + valorAguardar);
				cantParamBusqueda++;
			}
		}
	}
	
	var tmpArray = new Array()
	for (var i = 0; i < arregloIdValor.length; i++) {
		var str = arregloIdValor[i];
		var tmp = str.split(separadorValores);
		if (tmp[0] >= 0 && tmp[2].indexOf('XXtodos') < 0) {//Auxiliares
			tmpArray.push(arregloIdValor[i]);	
		}
	}
		
    if(tmpArray.length > 2){
		if (!BusquedaPorParteYArticuloEstaOK()){
			return false;
		}
        //ALERT QUE MUESTRA ES STRING DE BUSQUEDA
        //window.alert(arregloIdValor.join(separadorParametros));
		if (isToSave){
			if (!MostrarParametrosAGuardar(arregloIdValor.join(separadorParametros))){
				return false;	
			}
		}else{
			if(!validarBusquedasBloqueadas(arregloIdValor)){
				return false;
			}
			var stringArmado = arregloIdValor.join(separadorParametros);
			/*seccion agregada para buscar por el select de codigos el cual se
			 * cambia a numero bcn
			 */
			var selCodigo = document.getElementById('selCodigos');
			var selConstitucion = document.getElementById('selConstitucion');
			var tipoNormaBA = document.getElementById('tipoNormaBA');
			if (!selCodigo.disabled){
				
				stringArmado += "||53#normal#" + selCodigo.value;
				stringArmado = stringArmado.replace('2#normal#XX10||','');
				tipoNormaBA.value = selCodigo.options[selCodigo.selectedIndex].innerHTML;
				
			}
			else if (!selConstitucion.disabled){
				
				stringArmado += "||53#normal#" + selConstitucion.value;
				stringArmado = stringArmado.replace('2#normal#XX30||','');
				tipoNormaBA.value = selConstitucion.options[selConstitucion.selectedIndex].innerHTML;
				
			}
			else{
				tipoNormaBA.value = "";
				}
			
	        document.getElementById(ObjToSend).value = stringArmado;
			
			/*
			 * LLamada a la traza...
			 */
			var stringBusqueda = document.getElementById(ObjToSend).value;
			RegistrarBuscarAvanzada(stringBusqueda);
			
			/*
			 * Se envia la busqueda
			 */
			mostrarMensajeBuscando();
	        document.getElementById('formHidden').submit();
		}
		
        return true;
    }
    else{
        alert("Los campos del formulario están vacíos");
        return false;
    }
}
/*
 * revisa que si busca a nivel de parte o articulo, debe seleccionar
 * el tipo de parte o el tipo de articulo cuando corresponda
 */
function BusquedaPorParteYArticuloEstaOK(){
	var param11_Parte = gbl_Parametros.getById('11');
	var param13_Articulo = gbl_Parametros.getById('13');
	
	if(param11_Parte.valores.length>0 && param11_Parte.valores[0] != "" && param11_Parte.valores[0] == "checked"){
		var p80_tipoParte = gbl_Parametros.getById('80');
		var p154_tipoEstructuraFuncional = gbl_Parametros.getById('154');
		
		var valor80 = p80_tipoParte.valores.join(separadorValores);
		valor80 = trim(valor80);

		var valor154 = p154_tipoEstructuraFuncional.valores.join(separadorValores);
		valor154 = trim(valor154);
		
		if (valor154!='None' && valor154!='' && valor154!=undefined && valor154!=separadorValores) {
			return true;
		}else if(valor80!='None' && valor80!='' && valor80!=undefined && valor80!=separadorValores){
			if(valor80 == '16'){ //Es del Tipo Estructura Funcional, debe seleccionar un tipo de estructura funcional
				alert("Al buscar a nivel de parte y selecciona 'Estructura Funcional' debe seleccionar el tipo de estructura funcional");
				return false;				
			}
			return true;
		}else{
			alert("Para buscar a nivel de Parte, debe seleccionar el Tipo de Parte");
			return false;
		}
	}else if(param13_Articulo.valores.length>0 && param13_Articulo.valores[0] != "" && param13_Articulo.valores[0] == "checked"){
		var p155_tipoArticulo = gbl_Parametros.getById('155');
		
		var valor155 = p155_tipoArticulo.valores.join(separadorValores);
		valor155 = trim(valor155);
		
		if(valor155!='None' && valor155!='' && valor155!=undefined && valor155!=separadorValores){
			return true;
		}else{
			alert("Para buscar a nivel de Artículo, debe seleccionar el Tipo de Artículo");
			return false;
		}
	}
	return true;
}

function EsTipoBusquedaOracle(stringPalabra){
	var patron = new RegExp("^"+SecuenciaDeEscape);
	return patron.test(stringPalabra);
}
function getStringPalabraOFrase(objPalabra_frase,objPalabra_todas,objPalabra_exacta,objPalabra_alguna,objPalabra_excluir){
	var conector = "";
	var aGuargar = "";
	if(objPalabra_todas.checked){
		conector = " + "; //Corresponde al AND
	}
	
	if(objPalabra_alguna.checked){
		conector = " , ";  //Corresponde al OR
	}
	
	if(objPalabra_exacta.checked){
		aGuargar += "[{"+objPalabra_frase.value+"}]";
		excluir = StringformatoBusqueda(objPalabra_excluir);
		aGuargar += "#(" + excluir + ")";
	}else{
		aGuargar += "("+StringformatoBusqueda(objPalabra_frase,conector)+")";		
		excluir = "("+StringformatoBusqueda(objPalabra_excluir)+")";
		aGuargar +="#"+excluir;
	}
	
	return aGuargar;
	
}

//retorna una cadena formateada para consulta con la(s) palabra(s) de la opcion "Excluir palabra(s)" en el parametro "Palabra o Frase"
function StringformatoBusqueda(objHTML,conector){
	if(typeof(conector)=='undefined'){
		conector = conectorDefault;
	}
	try{
    	var palabras = objHTML.value;
    }catch(e){
    	return "";
	}
	if (palabras == "") {
		return "";
	}
	var ArrayPalabras = fnArrayPalabras(palabras);
    palabras = "";
	for (var i = 0; i < ArrayPalabras.length; i++) {
		palabras += conector+"{"+ArrayPalabras[i]+"}";
	}
	palabras = trim(palabras,conector)
	return palabras;
}
function fnArrayPalabras(StringPalabras){
	StringPalabras = fnQuitaAcentos(StringPalabras);
	StringPalabras = sacarEspaciosExtras(StringPalabras);
	var ArrayPalabras = StringPalabras.split(" ");
	return ArrayPalabras;
}
//saca espacios al principio al final de alguna cadena, ademas sacar multiples espacios dejando solo uno
function sacarEspaciosExtras(frase){
    var cadena = frase;
    if(cadena!=""){
        //se quitan los espacio al principio de la cadena
            var patron = /^\s*/g;
                cadena = cadena.replace(patron, "");
        //se quitan los espacio al final de la cadena
            var patron = /\s*$/g;
            cadena = cadena.replace(patron, "");
        //se quitan todos los espacios extras de la cadena, dejando solo uno en donde hay espacios 
            var patron = /\s+/g;
            cadena = cadena.replace(patron, " ");
    }
    return cadena;
}
//Quita todos parametros dentro del arreglo "arregloParametros"
//Usada para quitar todos los parametros de opciones de busqueda segun corresponda o de donde se presione la opcion "Quitar todos los Parámetros"
function eliminar_parametros_All(arregloParametros){

    var largo =arregloParametros.length;
    var idParametro = "";
    var objeto = "";
    var idimgmore = "";
    var idimgless = "";

    for(var i=1 ; i< largo ; i++){
        idParametro = arregloParametros[i];
        objeto = document.getElementById(idParametro);
        
        if(objeto.style.display != "none"){
            objeto.style.display = "none";
            
            idimgmore = idParametro + "_imgmore";
            document.getElementById(idimgmore).style.display="block";
            
            idimgless = idParametro + "_imgless";
            document.getElementById(idimgless).style.display="none";
            
            fnLimpiaParametrosPorId(idParametro);
        }
    }
}

// agrega todos parametros dentro del arreglo "arregloParametros"
function agregar_parametros_All(arregloParametros){

    var largo = arregloParametros.length;
    var idParametro = "";
    var objeto = "";
    var idimgmore = "";
    var idimgless = "";
    var esNorma = document.getElementById('idparametro_117').checked;
//
   
    for(var i=1 ; i< largo ; i++)
    {
        idParametro = arregloParametros[i];
    if (esNorma!=true || (idParametro!='45' && idParametro!='41' && idParametro!='115') )
     {
       
        objeto = document.getElementById(idParametro);
        if(objeto.style.display != "block")
        {
            objeto.style.display = "block";
            
            idimgmore = idParametro + "_imgmore";
            document.getElementById(idimgmore).style.display="none";
            
            idimgless = idParametro + "_imgless";
            document.getElementById(idimgless).style.display="block";
        }
      }
    }
}
/*
 * Funciones ingresadas por DAVID
 * 
 */
/*
 * Revisa que sea una fecha válida
 * y si esta en formato: mm-yyyy devuelve una fecha en formato dd-mm-yyyy (la nueva fecha se valida)
 * y si esta en formato: yyyy devuelve una fecha en formato dd-mm-yyyy (la nueva fecha se valida)
 */
function validaFechas(value,desde_hasta,id_parametro){
	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 obj = gbl_Parametros.get(id_parametro);
	var fechaErrada = obj.nombreparametro+tipo;
	value = reIngresoFecha(value, fechaErrada, mensajeDeError);
	
	return validaFechas(value,desde_hasta,id_parametro);
}

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;
}

/*
 * El parametro objHtml: es el campo de la fecha
 * El parametro tipo puede ser: "desde", "hasta"
 */
function validarCambioEnFechas(objHtml,tipo,desde_calendar){
	if (typeof(desde_calendar)=='undefined'){
		desde_calendar = false;
	}
	if(tipo=="desde"){
		cortar = "fecha_de_";
	}else{
		cortar = "fecha_a_";
	}
	var id_parametro = objHtml.id.substring(cortar.length,objHtml.id.length)
	objHtml.value = validaFechas(objHtml.value,tipo,id_parametro);
	
	var objetoDesde = document.getElementById("fecha_de_"+id_parametro);
	var objetoHasta = document.getElementById("fecha_a_"+id_parametro);

	var fechas = validaRangoFechas(objetoDesde, objetoHasta,id_parametro);
	objetoDesde.value = fechas[0];
	objetoHasta.value = fechas[1];
	setValorParametro(id_parametro,objetoDesde.value);
	addValorParametro(id_parametro,objetoHasta.value);
	if (desde_calendar) {
		objHtml.focus();
	}
	if(tipo=="desde"){
		return objetoDesde.value;
	}else{
		return objetoHasta.value;
	}
}

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 fnRealizaValidacion(accion){
    if(accion=="onFocus"){
        validandoCampo = true;
        ocultarDivs();

    }
    else if(accion=="onBlur"){
		
		validandoCampo = false;
		/*
        if(document.getElementById('accionRefinar').checked){
            validandoCampo = false;
        }
        else{//habiliar boton "Buscar Norma"
            validandoCampo = false;

        }
        */
    }
}


//funcion para quitar todos los acentios de una palabra dada
function fnQuitaAcentos(palabra){   

        if(palabra==""){
            return palabra;
        }
        
        //vocalAcentos = String.fromCharCode(225,233,237,243,250,193,201,205,211,218,241,209);
        //vocalAcentos = "áéíóúÁÉÍÓÚñÑ";
        //vocalSimple = "aeiouAEIOUnN";
        vocalAcentos = "áéíóúÁÉÍÓÚ";
        vocalSimple = "aeiouAEIOU";
        var iter=0;
        for (iter=0; iter<vocalAcentos.length ;iter++ ){
            var letra = new RegExp(vocalAcentos.charAt(iter),"g");
            palabra = palabra.replace(letra, vocalSimple.charAt(iter));
        } 
        return palabra;
}

//Esta funcion limpa el valor de un parametro en particular dado el id de este
//Además retorna un verdadero (true) cuando el valor del parametro cambio al ser limpiado o un falso (false) si no cambio su valor
function fnLimpiaParametrosPorId(idLimpiar){

    var cambioValor = false;
    var indice = buscaParametroPorId(idLimpiar);
    if(indice>=0){
        var idparametro = "idparametro_"+idLimpiar;
        var tipoparametro = datos[indice][4];
    
        if(tipoparametro == 'DATE'){
            if(document.getElementById(idparametro+"_desde").value!="" || document.getElementById(idparametro+"_hasta").value!=""){
                cambioValor = true;
                document.getElementById(idparametro+"_desde").value = "";
                document.getElementById(idparametro+"_hasta").value = "";
            }
        }
        else if(tipoparametro=='MULTIPLE' || tipoparametro=='COMBOBOX'){
            if(document.getElementById(idparametro).selectedIndex!=0){
                cambioValor = true;
                document.getElementById(idparametro).selectedIndex = 0;
            }
        }
        else if(tipoparametro=='STRING' || tipoparametro=='NUMBER' || tipoparametro=='TEXTAREA' || tipoparametro=='ASISTENTE'){
            if(document.getElementById(idparametro).value!=""){
                cambioValor = true;
                document.getElementById(idparametro).value="";
            }
        }
        else if(tipoparametro == 'CHECKBOX'){
            try {
                if(document.getElementById(idparametro).checked){
                    cambioValor = true;
                    document.getElementById(idparametro).checked = false;
                }
            }
            catch(e) { }
        }
        else{
            //si no es ninguno de los posibles tipos de parametros anteriores, entonces es algun radio
            try {
                if(document.getElementById(idparametro).checked){
                    cambioValor = true;
                    document.getElementById(idparametro).checked = false;
                }
            }
            catch(e) { }
        }
        //PROGRAMACION PARA IDs CON CASOS ESPECIALES
        if(idLimpiar==3 || idLimpiar=="3"){
            document.getElementById("conNumero").checked = true;
            conNumero();
        }
        if(idLimpiar==46 || idLimpiar=="46"){
            document.getElementById("criterioPalabraOfrase").selectedIndex = 0;
            if(document.getElementById("excluirPalabraOfrase").value != ""){
                cambioValor = true;
                document.getElementById("excluirPalabraOfrase").value = "";
            }
        }
        if(idLimpiar==11 || idLimpiar=="11"){
            document.getElementById("idparametro_Parte").selectedIndex = 0;
            document.getElementById("idparametro_Estructura").selectedIndex = 0;
        }
        return cambioValor;
    }
    return cambioValor;
}

function buscaParametroPorId(idparam){

    var largo = datos.length;
    var ind=0;
    for(ind=0 ; ind<largo ; ind++){
        if(idparam==datos[ind][1]){
            return ind;
        }
    }
    return -1;
}

//funcion que retorna verdadero cuando el valor del parametro especificado esta vacio o es null
function valorParametroNull(idparam){

    var indice = buscaParametroPorId(idparam);
    if(indice>=0){
        var idparametro = "idparametro_"+idparam;
        var tipoparametro = datos[indice][4];
    
        if(tipoparametro == 'DATE'){
            if(document.getElementById(idparametro+"_desde").value=="" && document.getElementById(idparametro+"_hasta").value==""){
                return true;
            }
            else{
                return false;
            }
        }
        else if(tipoparametro=='MULTIPLE' || tipoparametro=='COMBOBOX'){
            if(document.getElementById(idparametro).selectedIndex == 0){
                return true;
            }
            else{
                return false;
            }
        }
        else if(tipoparametro=='STRING' || tipoparametro=='NUMBER' || tipoparametro=='TEXTAREA' || tipoparametro=='ASISTENTE'){
            if(document.getElementById(idparametro).value==""){
                return true;
            }
            else{
                return false;
            }
        }
        else if(tipoparametro == 'CHECKBOX'){
            try {
                if(document.getElementById(idparametro).checked == false){
                    return true;
                }
                else{
                    return false;
                }
            } catch(e) { return true;}
        }
        else{
            //si no es ninguno de los posibles tipos de parametros anteriores, entonces es algun radio
            try {
                if(document.getElementById(idparametro).checked == false){
                    return true;
                }
                else{
                    return false;
                }
            } catch(e) { return true;}
        }
        //PROGRAMACION PARA IDs CON CASOS ESPECIALES

    }
    return true;
}

function validaRangoFechas(objetoDesde, objetoHasta,id_parametro){
//Funcion que valioda 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 obj = gbl_Parametros.get(id_parametro);
	var descparametro = obj.nombreparametro;
	
    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+"\" (\"Desde\" (D) no es <= que \"Hasta\" (H))!!!.\nRe-ingresar fecha (D/H)??? (Ingrese otra tecla o cancele, para borrar ambas)", "D");
        if(opcionCambiar){
            opcionCambiar = opcionCambiar.toUpperCase();
            if(opcionCambiar=="D"){
                //ERROR Fecha fuera de rango (desde no es <= que hasta)
                var mensajeDeError = "Fecha fuera de rango (\"Desde\" ("+objetoDesde.value+") no es <= que \"Hasta\") ("+objetoHasta.value+").";
                var fechaErrada = descparametro+" De";
                var auxStringFecha = reIngresoFecha(desde, fechaErrada, mensajeDeError)
                objetoDesde.value = auxStringFecha;
                if(auxStringFecha!=""){
                    fnRealizaValidacion('onBlur');
                    desde = validarCambioEnFechas(objetoDesde,"desde");
                    return validaRangoFechas(objetoDesde, objetoHasta, id_parametro);
                }
                else{
                    fnRealizaValidacion('onBlur');
                    return ["", hasta];
                }
            }
            else if(opcionCambiar=="H"){
                //ERROR Fecha fuera de rango (desde no es <= que hasta)
                var mensajeDeError = "Fecha fuera de rango (\"Desde\" ("+objetoDesde.value+") no es <= que \"Hasta\") ("+objetoHasta.value+").";
                var fechaErrada = descparametro+" HASTA";
                var auxStringFecha = reIngresoFecha(objetoHasta.value, fechaErrada, mensajeDeError)
                objetoHasta.value = auxStringFecha;
                if(auxStringFecha!=""){
                    fnRealizaValidacion('onBlur');
                    hasta = validarCambioEnFechas(objetoHasta, "hasta");
                    return validaRangoFechas(objetoDesde, objetoHasta,id_parametro);
                }
                else{
                    fnRealizaValidacion('onBlur');
                    return [desde, ""];
                }
            }
            else{
                objetoDesde.value = "";
                objetoHasta.value = "";
                return ["", ""];
            }
        }
        else{
            objetoDesde.value = "";
            objetoHasta.value = "";
            return ["", ""];
        }
    }
}

function confirmaRegistro(){

    if(confirm("Usted no es un usuario registrado.\n¿Desea ser enviado a formulario de registro?")){
        
        top.document.location.href = "./join_form";
    
    }

}

//funcion que muestra una alerta (alert) con la descripcion de los parametros que fueron Limpiados por la Validacion de parametros N° 10
function fnAlertarParametrosLimpiados(parametrosLimpiados){

    var largoParametrosLimpiados = parametrosLimpiados.length;
    var idParametro = "";
    var descripciones = "";
    var arregloDescripciones = new Array();
    var indicePL = 0;
    
    for(indicePL=0 ; indicePL< largoParametrosLimpiados ; indicePL++){
        idParametro = parametrosLimpiados[indicePL];
        arregloDescripciones.push(descParametro(idParametro))
    }
    descripciones = arregloDescripciones.join("; ");
    alert("Se limpio el (los) parametro(s): "+descripciones);
}

//funcion para activar busqueda si el usuario hizo ENTER en vez de presionar boton buscar
function buscarConEnter(evento,obj){
    var iAscii;	
	if (evento.keyCode){
	    iAscii = evento.keyCode;
	}else if (evento.which){
	          iAscii = evento.which;
	         }else{
	               return false;
	}
	if (iAscii == 13){
		var campos = obj.getElementsByTagName("input");
		for(var i=0; i<campos.length;i++){				
			if(campos[i].type == 'text'){
				if(campos[i].onblur){
					var cuandoFecha;
					var idcampo = campos[i].id;
					if(campos[i].id == "fecha_de_fecha_publicacion" ||campos[i].id == "fecha_a_fecha_publicacion"){
						idcampo = "fecha_publicacion";						 
					}
					if(campos[i].id == "fecha_de_fecha_promulgacion" ||campos[i].id == "fecha_a_fecha_promulgacion"){
						idcampo = "fecha_promulgacion";
					}
					if(campos[i].id == "fecha_de_fecha_publicacion" ||campos[i].id == "fecha_de_fecha_promulgacion"){
						cuandoFecha = "desde";
					}
					if(campos[i].id == "fecha_a_fecha_publicacion" ||campos[i].id == "fecha_a_fecha_promulgacion"){
						cuandoFecha = "hasta";
					}
					var objField = gbl_Parametros.get(idcampo);
					if(objField){
						if(objField.tipo == 'text'){
						   validaChange(campos[i]);	
						}					
						if (objField.tipo == 'date') {
							validarCambioEnFechas(campos[i],cuandoFecha);
						}
						if (objField.tipo == 'organismo') {
							validaChange(campos[i]);
						}
					}
				}
			}
		}
	    fnGenerarStringBusqueda('stringBusqueda');
		return false;
	}
	return true;
}
