var msg_blanco = 'El campo no puede tener espacios en blanco.';
var msg_arroba = 'Este cambo debe llevar un @';
var msg_letras = 'Escriba sólo letras';
var msg_dominio = 'No es un dominio.';
var msg_mas_arroba = 'Existe mas de un @';
var isEmp = false;
var numeros = "0123456789"
var espacio = " "; 
var letras_g_n = "Ñ"
var letras_p_n = "ñ"
var letras_g = "QWERTYUIOPLKJHGFDSAZXCVBNM"
var letras_p = "qwertyuioplkjhgfdsazxcvbnm"
var vocales = "aeiouAEIOU"
var acentos ="áéíóúÁÉÍÓÚÀÈÌÒÙàèìòùäëïöüÄËÏÖÜ"
var letras = letras_g+letras_p+letras_g_n+letras_p_n+espacio
var comillas = "'"+'"'
var caracteres = "#$%&^`´~@¬|°¨_.,;:"+"<=>{}[]()/*-+"+"!¡¿?"
var caracteres_email="@.-_"
var alfanumerico=letras+numeros+caracteres+acentos+espacio+caracteres
var alfanumerico2=letras+numeros+caracteres+acentos+espacio+caracteres+comillas
var alfanumerico_search=letras+numeros+acentos+"*"
var letras_email =letras_g+letras_p+caracteres_email+numeros
// var whitespace = " \t\n\r";

var msg_arroba = 'Dirección inválida.';
var dominioswww = "/.com/.net/.org/.edu/.mil/.gov/.int/";
var paises = "/.ac/.ad/.ae/.af/.ag/.ai/.al/.am/.an/.ao/.aq/.ar/.as/.at/.au/.aw/.az/.ba/.bb/.bd/.be/.bf/.bg/.bh/.bi/.bj/.bm/.bn/.bo/.br/.bs/.bt/.bv/.bw/.by/.bz/.ca/.cc/.cd/.cf/.cg/.ch/.ci/.ck/.cl/.cm/.cn/.co/.cr/.cu/.cv/.cx/.cy/.cz/.de/.dj/.dk/.dm/.do/.dz/.ec/.ee/.eg/.eh/.er/.es/.et/.fi/.fj/.fk/.fm/.fo/.fr/.ga/.gd/.ge/.gf/.gg/.gh/.gi/.gl/.gm/.gn/.gp/.gq/.gr/.gs/.gt/.gu/.gw/.gy/";
	paises += "/.hk/.hm/.hn/.hr/.ht/.hu/.id/.ie/.il/.im/.in/.io/.iq/.ir/.is/.it/.je/.jm/.jo/.jp/.ke/.kg/.kh/.ki/.km/.kn/.kp/.kr/.kw/.ky/.kz/.la/.lb/.lc/.li/.lk/.lr/.ls/.lt/.lu/.lv/.ly/.ma/.mc/.md/.mg/.mh/.mk/.ml/.mm/.mn/.mo/.mp/.mq/.mr/.ms/.mt/.mu/.mv/.mw/.mx/.my/.mz/.na/.nc/.ne/.nf/.ng/.ni/.nl/.no/.np/.nr/.nu/.nz/.om/.pa/.pe/.pf/.pg/.ph/.pk/.pl/.pm/.pn/.pr/.ps/.pt/.pw/.py/";
	paises += "/.qa/.re/.ro/.ru/.rw/.sa/.sb/.sc/.sd/.se/.sg/.sh/.si/.sj/.sk/.sl/.sm/.sn/.so/.sr/.st/.sv/.sy/.sz/.tc/.td/.tf/.tg/.th/.tj/.tk/.tm/.tn/.to/.tp/.tr/.tt/.tv/.tw/.tz/.ua/.ug/.uk/.um/.us/.uy/.uz/.va/.vc/.ve/.vg/.vi/.vn/.vu/.wf/.ws/.ye/.yt/.yu/.za/.zm/.zr/.zw/";
var buen_www = dominioswww + paises;
 
function advertencia(w,texto)
{
  alert(texto);
  w.focus();
  w.select();
  return false;
}

function vacio(w)
  {
	return ((w == null) || (w.length == 0));
  }

function blanco(w)
{
//     if (vacio(w)) return true; 	
     if (vacio(w))
	 { 
	   return false;
	 }
	 else
	 {
       for (var i = 0; i < w.length; i++) 
	     {  
           var ww = w.charAt(i);
           if (espacio.indexOf(ww) == -1) return false;
         }
      }
  return true;
}

function b_puntos(w)
{
  var arroba=w.value.indexOf("@");
  if (arroba == -1) return false;
   var sdom = w.value.substring(arroba+1, w.value.length);
   var result=sdom.match(/[.]/g);   
   var p_s=sdom.lastIndexOf(".");
   if (p_s==-1)return false;
   var hjy = sdom.substring(p_s,sdom.length);
   if (hjy.length==4) 
    {result.length=1;}
   
   if(result.length>0)
   {
   if (result.length==2)
     {
        despues=sdom.substring(p_s, sdom.length);
	    antes=sdom.substring(0,p_s);   
	    p_s=antes.lastIndexOf(".");
        var pre = antes.substring(0,p_s);	 
        if (vacio(pre)) return false;		
	    antes=antes.substring(p_s, antes.length);
     }
     else if (result.length==1)
       {
	     var pre = sdom.substring(0,p_s)		 
         if (vacio(pre)) return false;		 
         despues=sdom.substring(p_s, sdom.length);
       }
       else if (result.length>2)
         {
            despues=sdom.substring(p_s, sdom.length);
	        antes=sdom.substring(0,p_s);   
	        p_s=antes.lastIndexOf(".");
	        var pre = antes.substring(0,p_s);
            if (vacio(pre)) return false;		  		   			
	        antes=antes.substring(p_s, antes.length);
         }
	}
	else {return false};
			
	if (result.length==1)
	{
	  if (dominioswww.indexOf("/" + despues + "/") == -1) return false;
	}
	else if (result.length>=2)
	{
   	  if (paises.indexOf("/" + despues + "/") == -1) return false;
 	  if (dominioswww.indexOf("/" + antes + "/") == -1) return false;
	}
	return true;
}

function ver_letras(w)
{
  for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (letras_email.indexOf(ww) == -1) return false;
  }
  return true;
}

function email(w)  
{
if (w.value.length!=0)
{

  var arroba=w.value.indexOf("@");
  if (arroba == -1) return false;  

  var results=w.value.match(/@/g); 
  if (results.length!=1)return advertencia(w,msg_mas_arroba);

  var semail = w.value.substring(0, arroba);
  var sdominio = w.value.substring(arroba+1, w.value.length);
  if (blanco(semail)) return false;
  if (blanco(sdominio)) return false;
  if (!b_puntos(w)) return false;
  if (!ver_letras(w)) return false;
  }
//	var punto = sdominio.value.indexOf(".");
//	if (punto == -1) return false;
	return true;
}

function esEmail(w) {
	//Add Employee email change check
/*	if (isEmp) {
		if (tmp_email != w.value) {
			w.value = tmp_email;
			return advertencia(w,'Ladireccion esta piche');
		}
	}*/
    if (blanco(w.value)) return advertencia(w,msg_blanco);
    else
	 if (!email(w)) return advertencia(w,msg_arroba);
	else if (!dominio(w)) return advertencia(w,msg_dominio);
	return true;
}

function dominio(w) {
	var domidx = w.value.lastIndexOf(".");
	var dom = w.value.substring(domidx);
	var dom_lc = dom.toLowerCase();
	if (buen_www.indexOf("/" + dom_lc + "/") == -1) return false;
	return true;
}
function esString(w)
{
if (!vacio(w))
{
 for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (letras.indexOf(ww) == -1) return advertencia(w,msg_letras);
  }
 }  
  return true;
}
function esCelular(w)
{
if (!vacio(w.value))
{
 for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (numeros.indexOf(ww) == -1) return advertencia(w,'Debe escribir solo números sin letras, puntos ni espacios');
	if (w.value.substr(0,2)!='04') return advertencia(w,'Escriba numero con el formato 04xxxxxxxxx');
	if (w.value.length!=11) return advertencia(w,'Faltan numeros');
  }
  }
  return true;
}

function esNumero(w)
{
if (!vacio(w))
{
    for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (numeros.indexOf(ww) == -1) return advertencia(w,'Debe escribir solo números sin letras, puntos ni espacios');
  }
  }
  return true;
}

function esAlfanumerico(w)
{
if (!vacio(w))
{
    for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (alfanumerico.indexOf(ww) == -1) return advertencia(w,'Este campo no permite los caracteres '+"'"+' y "');
  }
}
  return true;
}

function esAlfanumerico2(w)
{
if (!vacio(w))
{
    for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (alfanumerico2.indexOf(ww) == -1) return advertencia(w,'Este campo no permite los caracteres '+"'"+' y "');
  }
}
  return true;
}
function esAlfanumericoSearch(w)
{
if (!vacio(w))
{
    for (var i = 0; i < w.value.length; i++) 
  {  
    var ww = w.value.charAt(i);
    if (alfanumerico_search.indexOf(ww) == -1) return advertencia(w,'Este campo no permite caracteres especiales ni '+"'"+' y "');
  }
}
  return true;
}

function requerido(w,valor_requerido)
{
if ((valor_requerido==true)&&(vacio(w.value)))
  {
    return(advertencia(w,'Este campo requiere información'));
  }
 return true;
 }


function validador(valor,tipo,valor_requerido)
{
 w=valor;
//  alert(requerido(w,valor_requerido)); 
if (requerido(w,valor_requerido)==0) return false;
//  alert('pase por seven dust');
 switch (tipo.toUpperCase()) 
{ 
   case "D" :
      rExp = /[0-9]/gi
      break; 
   case "H":
     break;	  
   case "S" :
      return(esAlfanumerico(w,requerido));
      break;
   case "Z" :
      return(esAlfanumerico2(w,requerido));
      break;	  
   case "SEARCH" :
      return(esAlfanumericoSearch(w,requerido));
      break;
   case "N" :
      return(esNumero(w,requerido));
      break;	   
   case "E" :
     return(esEmail(w,requerido));
     break;
   case "L":
     return(esString(w,requerido));
	 break;
   case "C":
     return(esCelular(w,requerido));
	 break;
   default:
     return(esString(w,requerido));
} 


if (w.value.length == 0)
{
  return(true)
}
  if (w.value.length != 10)
  {
    alert("El campo fecha debe tener el formato dd/mm/aaaa");
    w.focus();
	w.select();	
	return(false);
  }
 
  fecha=w.value
  dia=fecha.substr(0,2)
  mes=fecha.substr(3,2)
  ano=fecha.substr(6,4)
  s1=fecha.substr(2,1)
  s2=fecha.substr(5,1)

  rExp1= /[/]/gi
//************************************ dia  *****************************************//  
if (rExp.test(dia))
{
  myString = new String(dia)
  results = myString.match(rExp)
  www=results.length
}
else
{
  www=0
}
if (www!=2)
  {
    alert("Debe escribir numeros en 'dd'");
	w.focus();
	w.select();	
	return(false);
  }
 else {
 }//fin del else
  
  
if (s1.search(rExp1)==-1)
{
    alert("despues de dd viene '/'");
	w.focus();	
	w.select();	
	return(false);
}  


//************************************ mes  *****************************************//
  //this.lista.Asunto_extracto.value=rExp.test(mes)
  llopa=rExp.test(mes)
if ((rExp.test(mes))||(mes<=12)||(mes>=1))  // la verdad que desconozco porque esto es asi con   !
{
  myString = new String(mes)
  results = myString.match(rExp)
  www=results.length
//  this.lista.txtpartes.value="bueno mes"+www
}
else
{
  www=0
//  this.lista.txtpartes.value="malo mes"+www
}
//  this.lista.txttitulo.value=mes
  
if (www!=2)
  {
    alert("Debe escribir numeros en 'mm'");
	w.focus();	
	w.select();	
	return(false);
  }
if (s2.search(rExp1)==-1)
{
    alert("despues de mm viene '/'");
	w.focus();	
	w.select();	
	return(false);
}    

//************************************ año  *****************************************//
if (rExp.test(ano))
{
  myString = new String(ano)
  results = myString.match(rExp)
  www=results.length
}
else
{
  www=0
}
if (www!=4)
  {
    alert("Debe escribir numeros en 'aaaa'");
	w.focus();	
	w.select();	
	return(false);
  }  
  
 if ((mes>12)||(mes<1))
 {
    alert("Debe escribir en el rango 01-12 en 'mm'");
	w.focus();
	w.select(4,2);	
	return(false); 
 }
 d=new Date()
 anno=d.getFullYear()+1
 
  if ((ano>anno)||(ano<1900))
 {
    alert("Debe escribir en el rango 1900-"+anno+" en 'aaaa'");
	w.focus();
	w.select();	
	return(false); 
 }

if ((mes=="01")||(mes=="03")||(mes=="05")||(mes=="07")||(mes=="08")||(mes=="10")||(mes=="12"))
 {   
   dia_mayor=31;
 }

 if ((mes=="04")||(mes=="06")||(mes=="09"))
 {
	  dia_mayor=30;
 }
	  
 if (mes=="02")
  {
    if (((ano % 4==0)&&(ano % 100!=0))||(ano % 400==0))
	   {
	     dia_mayor=29;
	   }
	 else
	 {
         dia_mayor=28; 
	 }  
  }  
 if ((dia>dia_mayor)||(dia<1))
 {
    alert("Debe escribir en el rango 01-"+dia_mayor+" en 'dd'");
	w.focus();
	w.select();
	return(false); 
 }  
    return(true);	
}

function saber_dia(fec)
{
  fecha=fec
  dia=fecha.substr(0,2)
  mes=fecha.substr(3,2)
  ano=fecha.substr(6,4)
  fecha_inversa=mes+"/"+dia+"/"+ano;
  marcel=new Date(fecha_inversa);
  switch(marcel.getDay())
	{
	  case 0:
	    saber_dia="Domingo"
	    break;
	  case 1:
	    saber_dia="Lunes"
	    break;
	  case 2:
	    saber_dia="Martes"
	    break;
	  case 3:
	    saber_dia="Miercoles"
	    break;
	  case 4:
	    saber_dia="Jueves"
	    break;
	  case 5:
	    saber_dia="Viernes"
	    break;
	  case 6:
	    saber_dia="Sabado"
	    break;
	}
	return(saber_dia);
}

function cargar_dia(ole,tocate)
{
 w=tocate;
 window.location.href=ole+"&fecha="+w.value;
}
