/*
FUNCION is_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 is_email
=================

*/

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

function _is_email(v){
   var t=/^(\w|\~)(\w|\~|\.|\-)*@(\w|\~)(\w|\~|\.|\-)*\.(([a-z]{2})|biz|info|com|net|org|mil|int|edu|name|gov)$/i
   return t.test(v);
}

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

/*

FUNCION is_phone
=================

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


*/

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


/*

FUNCION is_dni
==============

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

*/

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

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

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

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

function is_dni(dni){
   if (is_extrict_dni(dni)) return true;
   if (is_nie(dni)) return true;
   return false;
}

function is_nie(dni){
   var forma_nie = /^[xX]\d{1,8}[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));
}

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

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

function is_zip_phone_es(cp, telefono){
  var cps = new Array();
  cps["01"]="945"; cps["02"]="967"; cps["03"]="96";  cps["04"]="950"; cps["05"]="920"; cps["06"]="924";
  cps["07"]="971"; cps["08"]="93";  cps["09"]="947"; cps["10"]="927"; cps["11"]="956"; cps["12"]="964";
  cps["13"]="926"; cps["14"]="957"; cps["15"]="981"; cps["16"]="969"; cps["17"]="972"; cps["18"]="958";
  cps["19"]="949"; cps["20"]="943"; cps["21"]="959"; cps["22"]="974"; cps["23"]="953"; cps["24"]="987";
  cps["25"]="973"; cps["26"]="941"; cps["27"]="982"; cps["28"]="91";  cps["29"]="95";  cps["30"]="968";
  cps["31"]="948"; cps["32"]="988"; cps["33"]="98";  cps["34"]="979"; cps["35"]="928"; cps["36"]="986";
  cps["37"]="923"; cps["38"]="922"; cps["39"]="942"; cps["40"]="921"; cps["41"]="95";  cps["42"]="975";
  cps["43"]="977"; cps["44"]="978"; cps["45"]="925"; cps["46"]="96";  cps["47"]="983"; cps["48"]="94";
  cps["49"]="980"; cps["50"]="976"; cps["51"]="956"; cps["52"]="95";
      
  if(telefono.substring(0,1)!="9") return true;
  cp=cp.substring(0,2);
  return (cps[cp]==telefono.substring(0,cp.length));
}
