// VALIDAR CORREO ELECTRONICO.
function validaEmail(email) {
  return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email));
}


// VALIDA EL NOMBRE DE UN FICHERO.
function validaFichero(fichero) {
  return (/^\w+$/.test(fichero));
}


// VALIDA EL LOGIN QUE SE INTRODUCE COMO NUEVO USUARIO.
function validaLogin(login) {
  return (login.length >= 8 && login.length <= 16);
}


// VALIDA EL PASSWORD QUE SE INTRODUCE COMO NUEVO USUARIO.
function validaPassword(password) {
  return (password.length >= 4 && password.length <= 8);
}


// VALIDA LA ENTRADA DE NUMEROS.
function esNumero(caracter) {
  if (caracter >= "0" && caracter <= "9") {
    return true;
  } else {
    return false;
  }
}


// VALIDAR SOLO LA ENTRADA DE NUMEROS.
function solo_numeros(e) {
  var valido = false;
  var codigoTecla, cadenaTecla;
  var filtroNumeros = new Array("1","2","3","4","5","6","7","8","9","0",".");
  
  if(document.all) {
    codigoTecla = event.keyCode
    cadenaTecla = (String.fromCharCode(event.keyCode));
  } else if(document.layers) {
    codigoTecla = e.which
    cadenaTecla = String.fromCharCode(e.which);
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
    cadenaTecla=(String.fromCharCode(codigoTecla));
  }
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  }
  for(i=0;i<filtroNumeros.length;i++) {
    if(cadenaTecla==filtroNumeros[i])
      valido=true;
  }
  if(valido==false) {
    if(document.all)
      event.returnValue = false;
    else
      return false;
  }
  return true;
}


// VALIDAR SOLO LA ENTRADA DE NUMEROS.
function solo_numeros_sinpto(e) {
  var valido = false;
  var codigoTecla, cadenaTecla;
  var filtroNumeros = new Array("1","2","3","4","5","6","7","8","9","0");
  
  if(document.all) {
    codigoTecla = event.keyCode
    cadenaTecla = (String.fromCharCode(event.keyCode));
  } else if(document.layers) {
    codigoTecla = e.which
    cadenaTecla = String.fromCharCode(e.which);
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
    cadenaTecla=(String.fromCharCode(codigoTecla));
  }
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  }
  for(i=0;i<filtroNumeros.length;i++) {
    if(cadenaTecla==filtroNumeros[i])
      valido=true;
  }
  if(valido==false) {
    if(document.all)
      event.returnValue = false;
    else
      return false;
  }
  return true;
}


// VALIDA LA ENTRADA DE LETRAS.
function esLetra(caracter) {
  if ((caracter >= "a" && caracter <= "z") || (caracter >= "A" && caracter <= "Z") || (caracter == "ñ") || (caracter == "Ñ")) {
    return true;
  } else {
    return false;
  }
}


// SOLO PERMITE NUMEROS Y LETRAS MINUSCULAS. NO ACENTOS. NO nh.
function soloCaracteresValidos(e) {
  var valido = false;
  var codigoTecla, cadenaTecla;
 
  if(document.all) {
    codigoTecla = event.keyCode;
    cadenaTecla = (String.fromCharCode(event.keyCode));
  } else if(document.layers) {
    codigoTecla = e.which;
    cadenaTecla = String.fromCharCode(e.which);
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
    cadenaTecla = (String.fromCharCode(codigoTecla));
  }
  
  // Valores Null, Backspace y retorno de carro.
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  }
  
  // Permitimos solo la entrada de letras en minuscula y numeros. No acentos, no nh.
  if ((codigoTecla >= 48 && codigoTecla <= 57) || (codigoTecla >= 97 && codigoTecla <= 122)) {
    valido = true;
  }
  
  if(valido==false) {
    if(document.all)
      event.returnValue = false;
    else
      return false;
  }
  
  return true;
 }


// VALIDADOR DE CARACTERES PASANDO YA DIRECTAMENTE EL CODIGO DECIMAL DEL CARACTER.
function validarCaracteresCadena(codigoTecla){
  var valido = false;
  
  // Permitimos solo la entrada de letras en minuscula y numeros. No acentos, no nh.
  if ((codigoTecla >= 48 && codigoTecla <= 57) || (codigoTecla >= 97 && codigoTecla <= 122)) {
    valido = true;
  }
  
  return valido;
}


// ELIMINA EL ESPACIO INICIAL DE 'S'
function ltrim(s) { 
  return s.replace(/^\s+/, ""); 
} 
 

// ELIMINA EL ESPACIO FINAL DE 'S'
function rtrim(s) { 
  return s.replace(/\s+$/, ""); 
} 
 

// ELIMINA LOS ESPACIOS INICIAL Y FINAL
function trim(s) { 
  return rtrim(ltrim(s)); 
}


// FILTRA EL TEXTO EN CUANTO ES PULSADO.
function filtroTexto(e, control, strFormat) {
  valido = false;
  // capturamos el codigo del caracter
  if(document.all) {
    codigoTecla = event.keyCode;
  } else if(document.layers) {
    codigoTecla = e.which;
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
  }
  // convertimos el codigo del caracter a string
  cadenaTecla = String.fromCharCode(codigoTecla);
  pos = control.value.length;
  letraFiltro = strFormat.charAt(pos);
  switch (letraFiltro) {
    case "0": // Numero entrada obligatoria
      valido = esNumero(cadenaTecla);
      break;
    case "9": // Numero entrada opcional
      valido = esNumero(cadenaTecla) || (cadenaTecla == " ");
      break;
    case "L": // Letra entrada obligatoria
      valido = esLetra(cadenaTecla);
      break;
    case "?": // Letra entrada opcional
      valido = esLetra(cadenaTecla) || (cadenaTecla == " ");
      break;
    case "A": // Numero o Letra entrada obligatoria
      valido = esNumero(cadenaTecla) || esLetra(cadenaTecla);
      break;
    case "a": // Numero o Letra entrada opcional
      valido = esNumero(cadenaTecla) || esLetra(cadenaTecla) || (cadenaTecla == " ");
      break;
    case "C": // Cualquier caracter
      valido = true;
      break;
  }
  // convertimos el codigo del caracter a string
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  }
  if(valido == false) {
    if(document.all)
      event.returnValue = false;
    else
      return false;
  } else {
    if(document.all)
      event.returnValue = true;
    else
      return true;
  }
}


function filtroCaracteres(e, caracteres) {
  var valido = false;
  var codigoTecla, cadenaTecla;   
  if(document.all) {
    codigoTecla = event.keyCode
  } else if(document.layers) {
    codigoTecla = e.which
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
  }
  // convertimos el codigo del caracter a string
  cadenaTecla = String.fromCharCode(codigoTecla);
  // convertimos el codigo del caracter a string
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  } else {
    for(i = 0; i < caracteres.length; i++) {
      if (cadenaTecla == caracteres[i]) valido = true;
    }
  }
  if(document.all)
    event.returnValue = valido;
  else
    return valido;
}


function filtroSoloNumeros(e, control) {
  var valido = false;
  // capturamos el codigo del caracter
  if(document.all) {
    codigoTecla = event.keyCode;
  } else if(document.layers) {
    codigoTecla = e.which;
  } else if(document.getElementById) {
    codigoTecla = (window.Event) ? e.which : e.keyCode;
  }
  // convertimos el codigo del caracter a string
  if (codigoTecla == 0 || codigoTecla == 8 || codigoTecla == 13) {
    valido = true;
  } else {
    cadenaTecla = String.fromCharCode(codigoTecla);
    valido = esNumero(cadenaTecla);
  }
  if(valido == false) {
    if(document.all)
      event.returnValue = false;
    else
      return false;
  } else {
    if(document.all)
      event.returnValue = true;
    else
      return true;
  }
}


// IMPRIMIMOS LAS DISTINTAS OPCIONES: HTML, PDF Y TEXTO.
function imprimir(ruta, opcion){
  var myWin;
  if(!myWin || myWin.closed){
      myWin = window.open(ruta + "/_include/imprimir_carta.php?opt=" + opcion , null, "height=842,width=615,status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=yes,top=" + ((screen.height/2)-225) + ",left=" + ((screen.width/2)-275));
  };
  void(0);
}


function reemplazar(cadena, original, sustituto) {
  while ((pos = cadena.indexOf(original)) != -1) {
    cadena = cadena.substring(0, pos) + sustituto + cadena.substring(pos + original.length, cadena.length);
  }
  return cadena;
}


function sacarCadenaValores(objSelect) {
  var strValores = "";
  for (i = 0; i < objSelect.length; i++) {
    if (strValores == "") {
      strValores = objSelect.options[i].value;
    } else {
      strValores += "," + objSelect.options[i].value;
    }
  }
  return strValores;
}


// Funcion que muestra error de haberlo.
function mostrar_errores(error){
  document.getElementById("lista_de_erros").innerHTML = error;
  document.getElementById("error").style.display = 'block';
  document.getElementById("error").style.marginBottom='5px';
}


// Funcion que muestra error de haberlo.
function mostrar_errores2(error){
  document.getElementById("lista_de_erros").innerHTML = error;
  document.getElementById("error2").style.display = 'block';
  document.getElementById("error2").style.marginBottom='5px';
}


// Funcion que oculta los errores si se hace, p.e., una carga dinamica de datos.
function ocultar_errores(){
  document.getElementById("lista_de_erros").innerHTML = '';
  document.getElementById("error").style.display = 'none';
}


// Carga de documentos con AJAX. Esta funcion cargara las paginas
function llamarasincrono (url, id_contenedor){
  var pagina_requerida = false;
  
  if (window.XMLHttpRequest){
    // Si es Mozilla, Safari etc
    pagina_requerida = new XMLHttpRequest();
  } else if (window.ActiveXObject){
    
    // pero si es IE
    try {
      pagina_requerida = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      
      // en caso que sea una version antigua
      try {
        pagina_requerida = new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){
      }
    }
    
  } else return false;
  
  pagina_requerida.onreadystatechange = function(){
    // funcion de respuesta
    cargarpagina(pagina_requerida, id_contenedor);
  }
  
  pagina_requerida.open('GET', url, true); // asignamos los metodos open y send
  pagina_requerida.send(null);
}


// todo es correcto y ha llegado el momento de poner la informacion requerida en su sitio en la pagina xhtml
function cargarpagina (pagina_requerida, id_contenedor){
  if(pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf("http") == - 1)){
    document.getElementById(id_contenedor).innerHTML = pagina_requerida.responseText;
  }
}


// Añade una nueva opcion al select form pasado como argument (con algunos parametros)
function addOptionCarta(oSelect,catSelect,name,value,defaultSelected,selected,categoria) {
  if (oSelect.type=="select-one" || oSelect.type =="select-multiple") {
    
    var error="";
    
    var newOption = new Option(name,value,defaultSelected,selected);
    var newOption1 = new Option('','','','');
    
    // posicion en la que anhadir.
    var insertAt = oSelect.options.length;
    
    // comprobamos si lo que se va a anhadir es una categoria..
    if(categoria==1 && insertAt > 0) {
      
      registroanterior = insertAt - 1;
      
      if(oSelect.options[registroanterior].text.substring(0,2) == '++'){
        error = error + "- Non seleccionou ningun elemento para a categoria " + oSelect.options[registroanterior].text;
        
        // mantenemos seleccionada la categoria que no tiene elementos seleccionados.
        catSelect.options[oSelect.options[registroanterior].value].selected=true;
      }
      
      if(error == ""){
        oSelect.options[insertAt] = newOption1;
        insertAt = insertAt + 1;
      }
    }
    
    if(error == ""){
      oSelect.options[insertAt] = newOption;
      return true;
    } else {
      mostrar_errores(error);
      return false;
    }
    
  } else {
    error = error + "- Produciuse un erro o engadir un novo elemento a carta.";
    mostrar_errores(error);
    return false;
  }
}


// Eliminamos un option del select.
function removeOption(nombreSelect){
  var x=document.getElementById(nombreSelect);
  x.remove(x.selectedIndex);
}


//Vacia el contenido de un select.
function removeAllOptions(oSelect) {
  if (oSelect.type=="select-one" || oSelect.type=="select-multiple"){
    oSelect.options.length=0;
  } else {
    error = error + "- Produciuse un erro o engadir un novo elemento a carta.";
    mostrar_errores(error);
    return false;
  }
}
