
	function trim(cadena) {
    if (cadena==null) return "";   // Evitamos que surja un error al pasar a string
    
    cadena_aux = cadena.toString();
    
    var espacio=' ';
    var len=cadena_aux.length;
    var cont=0;
    var j=-1;			  
    var i=-1;
     
    // Si es vacía o sólo contiene espacios devolvemos ''
    if (isEmpty(cadena_aux)) return '';  		    

    // Suprimimos los espacios iniciales
    while ((cont==0)&&(i<cadena_aux.length)) 
    {
      i++;			
      var caracter = cadena_aux.substring(i, i+1);
      if (caracter.indexOf(espacio)==-1)  cont=1;
    }

    // Suprimimos los espacios finales
    cont=0; 			  
    while ((cont==0)&&(j<cadena_aux.length)) 
    {
      j++;			
      caracter = cadena_aux.substring(len-j-1, len-j);
      if (caracter.indexOf(espacio)==-1)  cont=1;
    }
    return cadena_aux.substring(i,len-j);
  }
  
  
  
  function isEmpty(cadena) 
  {  	
    if (cadena==null) return true;   // Evitamos que surja un error al pasar a string  
    
  	var cadena_aux=cadena.toString(); // Pasamos la cadena de entrada a string ya que si el parametro de entrada es un entero el algoritmo daría error
  	
  	if((cadena_aux==null)||(cadena_aux==""))   // Es nula o vacía
    {
      return true;
    }  
    else
    {
      for (var i=0;i<cadena_aux.length;i++)
      {
        if (cadena_aux.charAt(i)!=" ")  return false; // Contiene caracteres distintos al espacio, por lo tanto no es una cadena vacía
      }  
    }
    return true;
  }
  
  
  function isEmail(email)      
  {
    email = trim(email); // Suprimimos los espacios laterales
    
    if (email.indexOf(" ")!=-1) // Comprobamos que email no contenga espacios internos  
    {
    	return false;  
    } 	
    
    if (email.indexOf("@")==-1) // Comprobamos que exista al menos un carácter @
    {
       return false;
    }
    else
    {
      var posarroba=email.indexOf("@");
      var nombre=email.substring(0, posarroba);
      var dominio=email.substring(posarroba+1);

      // Comprobamos que nombre tenga al menos un carácter
      if (nombre.length==0)    return false;

      // Comprobamos que nombre no sea un solo punto
      if (nombre==".")         return false;

      // Comprobamos que dominio tenga al menos un carácter
      if (dominio.length==0)   return false;

      // Comprobamos que dominio tenga al menos un punto
      if (dominio.indexOf(".")==-1)     return false;
      
      // Comprobamos que la ni la primera ni la última posición del dominio sea el punto
      len_dom=dominio.length - 1;
      if ((dominio.charAt(0)==".")||(dominio.charAt(len_dom)=="."))  return false;
      
      // Comprobamos que el subdominio tenga a lo cinco tres carácteres
      if (dominio.substring(dominio.lastIndexOf(".")+1).length>5)    return false;

      // Comprobamos que tanto nombre como dominio sólo cotengan carácteres válidos
      if (CharInCorrectosEmail(nombre))  return false;
      if (CharInCorrectosEmail(dominio)) return false;
    }
    return true;
  }
  
  function CharInCorrectosEmail(cadena)
  {
    validos="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";

    // Comprobamos que 'cadena' no tenga algún carácter no contemplado en el string 'validos', y que no existan dos puntos contiguos
    for (i=0;i<cadena.length;i++)
    {
      if (validos.indexOf(cadena.charAt(i))==-1) return true;
      
      if (cadena.charAt(i)==".")
        if ((i!=cadena.length-1) && (cadena.charAt(i+1)=="."))
          return true;
    }
    return false; // No se ha encontrado ninguna irregularidad
  }
  
  function isCreditCard(numberCC)
  {
  	var i=0;
  	var strNumberCC="";
  	
    // Suprimimos los posibles espacios laterales del número de tarjeta
    numberCC=trim(numberCC);
    
    // Comprobamos que el número dado no sea vacío
    if (isEmpty(numberCC)) return false;    
      	
    // Tomamos sólo los digitos de la cadena de entrada, por si la tarjeta de credito viene en formato 'XXXX-XXXX-XXXX-XXXX' o 'XXXX XXXX XXXX XXXX'. Nota: También prescindiría de letras y cualquier otro carácter no numérico
    for (i=0;i<numberCC.length;i++)  
    {
      var charNumberCC=numberCC.substr(i,1);
      
      if (isDigit(charNumberCC)) strNumberCC=strNumberCC+charNumberCC; 
    }
    
    // Comprobamos si los números de la cadena de entrada pueden corresponder a una tarjeta de crédito
    return isCreditCardNoFormat(strNumberCC);
  }
  
  function isCreditCardNoFormat(numberCC)
  {
  	var weight=0;
  	var digitWeighted=0;
  	var sumWeight=0;
  	var count=0;

    if (numberCC==null) return false;   // Evitamos que surja un error al pasar a string    

    numberCC=numberCC.toString();
    
    // Comprobamos que sólo contenga dígitos (ni letras, ni espacios, ni cualquier carácter no numérico)
    if (!isDigit(numberCC)) return false;
  
	  // Hallamos el peso de cada dígito de la tarjeta. Si la tarjeta tiene un número par de dígitos, el primer dígito tendrá un peso de 2, en caso contrario tendrá un peso de 1. Los pesos de los siguientes dígitos se alternan de la forma: 1,2,1,2,1,2,...  	
  	if   (numberCC.length % 2 == 0)	weight=2;
  	else                    		    weight=1;
  
    // Multiplicamos cada dígito de la tarjeta por su peso. Si el dígito una vez pesado resulta mayor que 9, restamos 9.
  	for(count=0; count < numberCC.length; count++) 
  	{
  		// Multiplicamos cada digito por su peso
  		digitWeighted = numberCC.substr(count,1) * weight;
  		
      // Si el digito una vez pesado supera 9, se resta 9.
  		if (digitWeighted > 9) digitWeighted -= 9;
  		
  		// Sumamos los dígitos ya pesados
  		sumWeight += digitWeighted;
  		
  		// Alternamos los pesos de los dígitos de la forma antes indicada
  		if   (weight==2)	weight=1;
  		else          	 	weight=2;
  	}
  
    // Comprobamos si la suma de los digitos pesados es divisible por 10. En ese caso contrario posiblemente no se trate de un número de una tarjeta de crédito
  	if ((sumWeight % 10)==0)	return true;
  	else                		  return false;
  }
  
  function isDigit(cadena) 
  {
    if (cadena!=null)  cadena=cadena.toString();      // Sorprendentemente, en js si una variable es el entero 0, la pregunta if (variable=='') devuelve true. Así que si esta función recibiera como parámetro de entrada el entero 0, devolvería false ya que sería reconocida como vacía si no parseamos antes a string (posiblemente esa pregunta compare con el valor de inicialización asignado al tipo de variable que sea: entero 0 y string null)

    if ((cadena==null)||(cadena=="")) return false;   // Si es nula ó vacía entonces devolvemos falso

  	var cadena_aux=cadena.toString(); // Pasamos la cadena de entrada a string ya que si el parametro de entrada en un entero el algoritmo daría error

    // Recorremos los caracteres de la cadena de entrada y comprobamos si es un dígito(0123456789)
    for (i=0;i<cadena_aux.length;i++)
    {
    	var chr = cadena_aux.charAt(i);
    	if ((chr<'0')||(chr>'9')) return false; // Encontrado carácter no numérico
    }   
    return true;  
  }
  
  function addZeroLeft(cadena)
  {
    if (parseInt(cadena,10)<10) return ("0"+cadena);
    return cadena;	
  }
  
  
  
  function numerico(valor){
	  cad = valor.toString();
	  for (var i=0; i<cad.length; i++) {
	    var caracter = cad.charAt(i);
		if (caracter<"0" || caracter>"9")
		  return false;
	  }
	  return true;
	}
	
	function obtenerDigito(valor){
	  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
	  control = 0;
	  for (i=0; i<=9; i++)
	    control += parseInt(valor.charAt(i)) * valores[i];
	  control = 11 - (control % 11);
	  if (control == 11) control = 0;
	  else if (control == 10) control = 1;
	  return control;
	}
	
	
	function validarCCC(banco,sucursal,dc,cuenta) {
  	if (banco.value == ""  || sucursal.value == "" || dc.value == "" || cuenta.value == "") {
   		 return false;
  	}
  	else {
    	if (banco.value.length != 4 || sucursal.value.length != 4 || dc.value.length != 2 || cuenta.value.length != 10) {
      	return false;
      }
    
    	else {
      	if (!numerico(banco.value) || !numerico(sucursal.value) || !numerico(dc.value) || !numerico(cuenta.value)) {
        	return false;
        }
     		else {
        	if (!(obtenerDigito("00" + banco.value + sucursal.value) == parseInt(dc.value.charAt(0))) || !(obtenerDigito(cuenta.value) == parseInt(dc.value.charAt(1)))) {
          	return false;
          }
	    		else {
          	return true;
        	}
      	}
    	}
  	}
	}
	
	
	function getRadioButtonSelectedValue(ctrl) {
    	for(i=0;i<ctrl.length;i++)
      		if(ctrl[i].checked) return ctrl[i].value;
	}
	
	function isRadioButtonSelectedValue(ctrl) {
    	for(i=0;i<ctrl.length;i++)
      	if(ctrl[i].checked) return true;
      return false;
	}
	
	function urlencode(str) {
		return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
	}
	
	function isNumber(cadena) {
	  if (isEmpty(cadena)) return false; // Es sólo espacios o vacía
	  if (isNaN(cadena))   return false; // No es un número
	  return true;                       // Es un número, aunque contenga espacios laterales (se suprimen en el servidor)
	}
