/* **********************************************************************************
 *                                                FUNCIONES DE VALIDACION GENERICAS
 * PROYECTO: 
 *           TODOS
 *
 * Desarrollado por: 
 *           FORMATIA - Formación, Consulta y Desarrollo PEFER, S.L.
 *                    - C/ Capitán Gallarza, 1 entlo. - 26001 - Logroño - La Rioja
 *                    - 941 202 596 - 941 214 304 - desarrollo@formatia.net
 *
 * Fecha de inicio del proyecto: 07/11/2007
 * **********************************************************************************
 * Fichero JavaScript: js/general_validator.js
 * Archivos asociados:
 *    cualquiera
 *
 * Fecha de creación del fichero:  20/07/2007
 * Desarrollador: Luis Fernández
 * Modificaciones:
 *
 * ******************************************************************************* */
function PasarJSaASP(cadena){
      cadena.value = cadena.value.replace(/\x27/g,'&#39;');//" 39
      cadena.value = cadena.value.replace(/\x22/g,'&quot;');//" 34
	  cadena.value = cadena.value.replace(/\xE1/g,'&aacute;');//á 255
	  cadena.value = cadena.value.replace(/\xE9/g,'&eacute;');//é 233
	  cadena.value = cadena.value.replace(/\xED/g,'&iacute;');//í 237
	  cadena.value = cadena.value.replace(/\xF3/g,'&oacute;');//ó 243
	  cadena.value = cadena.value.replace(/\xFA/g,'&uacute;');//ú 250
	  cadena.value = cadena.value.replace(/\xC1/g,'&Aacute;');//Á 193
	  cadena.value = cadena.value.replace(/\xC9/g,'&Eacute;');//É 201
	  cadena.value = cadena.value.replace(/\xCD/g,'&Iacute;');//Í 205
	  cadena.value = cadena.value.replace(/\xD3/g,'&Oacute;');//Ó 211
	  cadena.value = cadena.value.replace(/\xDA/g,'&Uacute;');//Ú 218
	  cadena.value = cadena.value.replace(/\xF1/g,'&ntilde;');//ñ 241
	  cadena.value = cadena.value.replace(/\xD1/g,'&Ntilde;');//Ñ 209
	  //cadena.value = cadena.value.replace(/\n/g,'<br>');//salto de linea y retorno de carro
	  //cadena.value = cadena.value.replace(/\r/g,'');//salto de linea
	  cadena.value = cadena.value.replace(/\xFC/g,'&uuml;');//ü 252
	  cadena.value = cadena.value.replace(/\xDC/g,'&Uuml;');//Ü 220
	  cadena.value = cadena.value.replace(/\x24/g,'&#36;');//$ 36
	  cadena.value = cadena.value.replace(/\xBA/g,'&ordm;');//º 186
	  cadena.value = cadena.value.replace(/\xD8/g,'&Oslash;');//ODiametro 216
	  cadena.value = cadena.value.replace(/\xF8/g,'&oslash;');//odiametro 248
	  cadena.value = cadena.value.replace(/\xAA/g,'&ordf;');//ª 170
	  cadena.value = cadena.value.replace(/\x80/g,'&euro;');//€ 128
}
function PasarHTMLaJS(cadena){
   //Transforma el contenido html tipo &aacute; en JS para cuadros de texto. 
      cadena.value = cadena.value.replace(/&#39;/g,String.fromCharCode(39));//' 27
      cadena.value = cadena.value.replace(/&quot;/g,String.fromCharCode(34));//" 22
	  cadena.value = cadena.value.replace(/&aacute;/g,String.fromCharCode(225));//á E1
	  cadena.value = cadena.value.replace(/&eacute;/g,String.fromCharCode(233));//é E9
	  cadena.value = cadena.value.replace(/&iacute;/g,String.fromCharCode(237));//í ED
	  cadena.value = cadena.value.replace(/&oacute;/g,String.fromCharCode(243));//ó F3
	  cadena.value = cadena.value.replace(/&uacute;/g,String.fromCharCode(250));//ú FA
	  cadena.value = cadena.value.replace(/&Aacute;/g,String.fromCharCode(193));//Á C1
	  cadena.value = cadena.value.replace(/&Eacute;/g,String.fromCharCode(201));//É C9
	  cadena.value = cadena.value.replace(/&Iacute;/g,String.fromCharCode(205));//Í CD
	  cadena.value = cadena.value.replace(/&Oacute;/g,String.fromCharCode(211));//Ó D3
	  cadena.value = cadena.value.replace(/&Uacute;/g,String.fromCharCode(218));//Ú DA
	  cadena.value = cadena.value.replace(/&ntilde;/g,String.fromCharCode(241));//ñ F1
	  cadena.value = cadena.value.replace(/&Ntilde;/g,String.fromCharCode(209));//Ñ D1
	  //cadena.value = cadena.value.replace(/\n/g,'<br>');//salto de linea y retorno de carro
	  //cadena.value = cadena.value.replace(/\r/g,'');//salto de linea
	  cadena.value = cadena.value.replace(/&uuml;/g,String.fromCharCode(252));//ü FC
	  cadena.value = cadena.value.replace(/&Uuml;/g,String.fromCharCode(220));//Ü DC
	  cadena.value = cadena.value.replace(/&#36;/g,String.fromCharCode(36));//$ 24
	  cadena.value = cadena.value.replace(/&ordm;/g,String.fromCharCode(186));//º BA
	  cadena.value = cadena.value.replace(/&Oslash;/g,String.fromCharCode(216));//ODiametro D8
	  cadena.value = cadena.value.replace(/&oslash;/g,String.fromCharCode(248));//odiametro F8
	  cadena.value = cadena.value.replace(/&ordf;/g,String.fromCharCode(170));//ª AA
	  cadena.value = cadena.value.replace(/&euro;/g,String.fromCharCode(128));//€ 80
}

function EliminarEtiquetas(cadena){
   cadena = cadena.replace(/\x3C/g,'&lt;');//< 60
   cadena = cadena.replace(/\x3E/g,'&gt;');//> 62
   return cadena;
}
/* **********************************************************************************
 * function campoVacio(campo, nombre, msg)
 *    Entrada:
 *       campo: texto del campo del formulario que queremos validar.
 *       nombre: Nombre del campo - se muestra en el mensaje.
 *       msg: true/false dependiendo si hay que lanzar alerta javascript.
 * 
 *    Salida:
 *       Devuelve true si la cadena campo está vacía y false en caso contrario.
 *       Si msg es true lanza un aviso en el explorador en forma de alert.
 * ******************************************************************************* */
function campoVacio(campo, nombre, msg){
   retorno = false;
   cadena = campo.replace(/ /g,'');
   if (cadena.length == 0) campo = "";
   if (campo.length == 0){
      if (msg) alert('Debe rellenar el campo \''+nombre+'\'.');
	  retorno = true;
   }
   return retorno;
}

/* **********************************************************************************
 * function validar_email(email)
 *
 * Entrada: email: Dirección de correo tipo nombre@dominio.es o similar.
 *
 * Salida:  Devuelve 1 si es una dirección de correo bien construida y 0 en caso 
 *          contrario. (Validado con expresiones regulares PCRE de PERL)
 * 
 * Fechas:
 *    Creado: 25/06/2007 (Luis)
 *    Modificado: 
 * ******************************************************************************* */
function validar_email(email){
   var expresion = /(^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*((\.\w{2,3})+$|(\.\w{2,3}\.\w{2,3})+$))/;
   return expresion.test(email);
}

/* **********************************************************************************
 * function validarDominio(dominio)
 *
 * Entrada: dominio: Nombre de dominio tipo dominio.es o similar.
 *
 * Salida:  Devuelve 1 si es un nombre de dominio válido y 0 en caso contrario
 *          (Validado con expresiones regulares PCRE de PERL)
 * 
 * Fechas:
 *    Creado: 25/06/2007 (Luis)
 *    Modificado: 
 * ******************************************************************************* */
function validarDominio(dominio){
   var strHTTP = dominio.slice(0,7);
   if (strHTTP.toUpperCase() == "HTTP://") 
      dominio = dominio.slice(7,dominio.length);
   var arrAuxiliar = dominio.split("/");
   var expresion = /(^\w+([\.-]?\w+)*((\.\w{2,3})+$|(\.\w{2,3}\.\w{2,3})+$))|(^[1-9][0-9]{0,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)/;
   es_Valido = expresion.test(arrAuxiliar[0]);
   return(es_Valido);
}
function ValidarTelefono(telefono){
   telefono.value = telefono.value.replace(/ /g,"");
   var EsValido = !isNaN(telefono.value);
   if (EsValido){
      var longn = telefono.value.length;
      if (longn != 9 && longn != 11 && longn != 13) EsValido = false;
	  else{
	     if (longn == 9) telefono.value = "0034" + telefono.value;
		 if (longn == 11) telefono.value = "00" + telefono.value;
	  }
   }
   return EsValido;
}
function ValidarTelefono2(telefono){
   telefono = telefono.replace(/ /g,"");
   var EsValido = !isNaN(telefono);
   if (EsValido){
      var longn = telefono.length;
      if (longn != 9) EsValido = false;
   }
   return EsValido;
}

/*function esNIFesCIF(str) devuelve 0 si no es válido, 1 si es NIF y 2 si es CIF */
function esNIFesCIF(str){
   var strEs = 0;
   var straux = str.toUpperCase();
   var Posi;
   var Posi2;
   var Caracter1;
   if (straux.length < 9 || straux.length > 10) strAux = null;
   if (straux != null){
      if (straux.length == 10){
	     Posi = straux.indexOf("-");
		 if (Posi == 8 || Posi == 1){
		    straux = straux.replace(/-/,"");
			if (straux.length != 9) straux = null;
		 }else{ 
		    //No puede ser ni CIF ni NIF
		    straux = null;
		 }
	  }
   }
   var strLetrasCIF = "ABCDEFGHKLMNPQS";
   var strLetrasCIF2 = "JABCDEFGHI";
   var strLetrasNIF = "TRWAGMYFPDXBNJZSQVHLCKET";
   var strNumeros = "1234567890";
   var num;
   if (straux != null){
      Caracter1 = straux.substring(0,1);
	  Posi = strLetrasCIF.indexOf(Caracter1);
	  if (Posi == -1){
	     //No es CIF
		 num = straux.substring(0,8);
         if (isNaN(num) || num.indexOf(".") != -1){
		    straux = null;
		 }else{
		    //Puede ser NIF
			Posi2 = num % 23;
			if (strLetrasNIF.substring(Posi2,Posi2 + 1) != straux.substring(8,9)){
			   straux = null;
			   strEs = 0;
		    }else{ 
			   //Es NIF válido
			   strEs = 1;
			}
		 }
	  }else{
	     //solo puede ser CIF
		 num = straux.substring(1,8);
		 if (isNaN(num) || num.indexOf(".") != -1){
		    straux = null;
		 }else{
		    var SumaA = 0;
			var SumaB = 0;
			var SumaC;
			var NumB;
		    for (i = 2; i <= 6; i += 2){
		       SumaA = SumaA + parseInt(straux.substring(i,i + 1));
		    }
			for (i = 1; i <= 7; i += 2){
			   NumB = parseInt(straux.substring(i,i + 1)) * 2;
		       SumaB = SumaB + (NumB % 10) + ((NumB - (NumB % 10)) / 10);
		    }
			SumaC = SumaA + SumaB;
			NumB = 10 - (SumaC % 10);
			if (straux.substring(8,9) == NumB ||
			    straux.substring(8,9) == strLetrasCIF2.substring(NumB,NumB + 1)){
	           //Es CIF válido
			   strEs = 2;
			}else{
			   //No es CIF válido
			   strES = 0;
			}
		 }
	  }
   }
   return strEs;
}