/**************************************************************\
          Scripts de comprobación genéricos.
          ==================================

   El objetivo de esta biblioteca es aunar las comprobaciones
de javascript para que sean mas sencillas de mantener en un
futuro.

\**************************************************************/



/*
FUNCION es_email
================

Devuelve si el email introducido está bien formado o si no lo
está. Admite una lista de emails separados por comas.

Actualmente soporta los nombres de dominio:
   - Dos letras (para no poner todos los posibles paises)
   - .com
   - .net
   - .org
   - .mil
   - .int
   - .edu
   - .biz
   - .info
   - .name
   - .gov

FUNCION es_email
=================



*/

/*****************************************************************************************************************
funcion verifyEmail

Parámetros de entrada: 
	- s: String
	
Parámetros de salida: true o false
Es referenciada por: validateFields()
Descripción: Devuelve true si la cadena "s" es un nombre de email correcto y false en caso contrario.

Ejemplo: 	var str=document.regform.codigo.value;
	   		if (!verifyEmail(str)){
                strErrorMsg+='      * Email \n';
        		}
*********************************************************************************************************************/
function verifyEmail(s) {
        var chrs = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-@';
        var sLen = s.length; var i=0, c=0, cCnt=0, step=0;
        if (sLen < 6) return false;
        while (i < sLen){
                c=s.charAt(i);
                if (!(chrs.indexOf(c)>=0 || (c=='_' && step<1))) return false;
                if (c=='.') { if (cCnt<1) return false; cCnt=0; }
                if (c=='@') { if (step>0) return false; if (cCnt<1) return false; step++; cCnt=0; }
                cCnt=cCnt+1; i++;
        }       
        if (cCnt < 3 || cCnt > 5 || step==0 || (s.indexOf(".")<0) ) return false;
		
		var array = s.split('@');
		if (array[0].length < 3) return false;
		else{
			var array2 = array[1].split('.');
			if (array2[0].length < 3) return false;
			}
		
        return true;
}

function es_email(v){
   var limpio, a_emails, ok, idx_emails;
   idx_emails=0;
   a_emails=v.split(",");
   while((idx_emails<a_emails.length)&&(ok=_es_email(_trim(a_emails[idx_emails++]))));
   return ok;
}

function _es_email(v){
   var t=/^(\w|\~)(\w|\~|\.|\-)*@(\w|\~)(\w|\~|\.|\-)*\.(([A-Za-z]{2})|([bB][iI][zZ])|([Ii][Nn][Ff][Oo])|([Cc][Oo][Mm])|([Nn][Ee][Tt])|([Oo][Rr][Gg])|([Mm][Ii][Ll])|([Ii][Nn][Tt])|([Ee][Dd][Uu])|([nN][aA][mM][eE])|[gG][oO][vV])$/
   return t.test(v);
}

function _trim(v){
   return v.replace(/^( )*([^ ]*)( )*$/,"$2");
}

/*

FUNCION es_moneda
=================

Devuelve verdad si la cadena pasada es del estilo moneda.
Está limitado a cantidades menores de 1000 millones

*/

function es_moneda(v){
   var t=/^\d{1,9}(\.(\d{1,2})?)?$/
   return t.test(v);
}

/*

FUNCION es_telefono
=================

Devuelve verdad si el telefono es aparentemente válido para España

*/

function es_telefono(v){
   var t=/^(6|8|9)\d{8}$/
   return t.test(v);
}


/*

FUNCION es_cp
=================

Devuelve verdad si el código postal es aparentemente válido para España

*/

function es_cp(v){
   var t=/^(([0-4]\d{4})|(5[0-2]\d{3}))$/
   return t.test(v);
}

/*

FUNCION es_letra
=================

Devuelve verdad si se ha pasado una letra diferente a la ñ

*/

function es_letra(v){
   var t=/^([A-Z]|[a-z])$/
   return t.test(v);
}

/*

FUNCION es_entero
=================

Devuelve verdad si se ha pasado un entero mayor que cero

*/

function es_entero(v){
   //var t=/^[0-9]\d*$/
   //return t.test(v);
   if (isNaN(v)) {
            //entonces (no es numero) devuelvo el valor cadena vacia
            return false;
      }else{
            //En caso contrario (Si era un número) devuelvo el valor
            return v;
    } 
}

/*

FUNCION es_dni
==============

Devuelve verdad si se ha pasado una cadena con forma de dni (nif) español

*/

function es_dni(dni){
  
   var forma_dni = /^\d{1,8}[a-zA-Z]$/;
   var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';

   if(!forma_dni.test(dni)){
      return es_nie(dni);
   }

   var numero = dni.substring(0,dni.length-1);
   var letra  = dni.substring(dni.length-1);
   return (letra +" - "+letras.substr(numero%23,1))
   //return (letra.toUpperCase() == letras.substr(numero%23,1));
}

function es_nie(dni){
   var forma_nie = /^[xX]\d{1,7}[a-zA-Z]$/;
   var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';

   if(!forma_nie.test(dni)){
      return false;
   }

   var numero = dni.substring(1,dni.length-1);
   var letra  = dni.substring(dni.length-1);

   return (letra.toUpperCase() == letras.substr(numero%23,1));
}

/*
FUNCION es_texto
================

Devuelve verdad si una cadena es de texto

*/

function es_texto(texto){
   var t = /^([àèìòùÀÈÌÒÙáéíóúÁÉÍÓÚäëïöüÄËÏÖÜçÇa-zA-ZñÑ]|\s)*[àèìòùÀÈÌÒÙáéíóúÁÉÍÓÚäëïöüÄËÏÖÜçÇa-zA-ZñÑ]([àèìòùÀÈÌÒÙáéíóúÁÉÍÓÚäëïöüÄËÏÖÜçÇa-zA-ZñÑ]|\s)*$/
   return t.test(texto);
}

/*
FUNCTION es_fecha
=================

Devuelve verdad si la combinación de día, mes y año son correctas

*/

/** Funcion auxiliar. Si hacemos un parseInt de 08 o 09 no funciona porque evalua que son octales y devuelve 0!!!!! */
function _to_int(str){
   var t=/^(0)*(\d+)$/
   if(!t.test(str)) return 0;
   a_v=t.exec(str);
   return parseInt(a_v[2]);
}

function es_fecha(dia, mes, ano){
   var idia=_to_int(dia), imes=_to_int(mes), iano=_to_int(ano);

   if(!idia||!imes||!iano) return false;

   switch(imes){
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
         return (idia<=31);
      case 4:
      case 6:
      case 9:
      case 11:
         return (idia<=30);
      case 2:
         return (idia<=(28+((((!(iano%4))&&(iano%100))||!(iano%400))?1:0)));
   }
   return false;
}

/*****************************************************************************************************************
funcion checkCharEspeciales

Parámetros de entrada: 
	- strInput: String
	
Parámetros de salida: Cadena sin caracteres ";"
Es referenciada por: checkElementos()
Descripción: Devuelve la cadena de entrada "strInput" después de eliminar los caracteres ";!|"·#$%&¬\?¿¡[]*{}".

Ejemplo: 	var strpostcode=checkCharEspeciales(document.regform.codigo.value);
*********************************************************************************************************************/
function checkCharEspeciales(strInput){
	aux = strInput.replace(/;/g, ' ');
	strInput = aux.replace(/[!|"·#$%&¬\?¿¡*{}\[\]\\\/]/g, '');
	return strInput;
	}

/*****************************************************************************************************************
funcion checkElementos

Parámetros de entrada: nada
Es referenciada por: submitForm()	
Parámetros de salida: nada

Descripción: Chequea todos los elementos del documento para que no incluyan caracteres alfanuméricos

Ejemplo: 	checkElementos();
*********************************************************************************************************************/
function checkElementos(){
	var formularios = document.forms.length;

	for (var i=0;i<formularios;i++){
		var elementos = document.forms[i].elements.length;
		for (var j=0;j<elementos;j++){
			 if (document.forms[i].elements[j].value != null)
				 document.forms[i].elements[j].value = checkCharEspeciales(document.forms[i].elements[j].value);
			}
		}
	}


function compruebaCpProvinciaEspanola(p, cp){
   var cps      = new Array("","15","01","02","03","04","33","05","06","07","08","09","10","11","39","12","13","14","16","17","18","19","20","21","22","23","26","24","25","27","28","29","30","31","32","34","36","37","40","41","42","43","44","45","46","47","48","49","50");

   if(cp.substr(0,2)!=cps[p]) return false;
   return true;
}

function compruebaTelefonoProvinciaEspanola(p, tel){
   var prefijos = new Array("","981","945","967","96","950","98","920","924","971","93","947","927","956","942","964","926","957","969","972","958","949","943","959","974","953","941","987","973","982","91","95","968","948","988","979","986","923","921","95","975","977","978","925","96","983","94","980","976");
   var primero  = tel.substr(0,1);

   if(primero  == "6") return true;
   if(primero  == "8") return true;
   if((primero == "9")&&(tel.substr(0,prefijos[p].length) != prefijos[p])) return false;
   return true;
}

function disable_keyboard(form){
   if(form.sn.checked){
      form.numero.blur();
   }
}

function sn_click(form){
   if(form.sn.checked){
      form.numero.value="S/N";
   }
}

function comprueba_cif(elCIF) 
{
    //alert(elCIF);
  var resul = false;
  var temp = elCIF.toUpperCase(); // pasar a mayúsculas

  if (!/^[A-Za-z0-9]{9}$/.test(temp))  // Son 9 dígitos? 

     //alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
     resul = false;

  else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)) // Es una letra de las admitidas ?

     //alert("El primer dígito es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S ");
     resul = false;

  else 

     resul = true;

  return resul;
}


// La función recibe el CIF completo: A58818501
function valida_cif(F) 
{

  var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
  var temp = 0; 
  var temp1;

  
  for( i = 2; i <= 6; i += 2 ) 
    {
      temp = temp + v1[ parseInt(F.substr(i-1,1)) ];
      temp = temp + parseInt(F.substr(i,1));
    };

  temp = temp + v1[ parseInt(F.substr(7,1)) ];

  temp = (10 - ( temp % 10));
  /*
  if( temp == 10 )
    alert( "El dígito de control es: J ó 0" );
  else
    alert( "El dígito de control es: "+temp ); 
  */
  return true;
}