/*----------------------------------------------------------
validaciones javascript
 
Edison Dairo Jimenez Taborda
NTecnologías I-D

03 Agosto 2007 - primera version estable
30 octubre 2007 - actualizado para validaciones en firefox
-----------------------------------------------------------*/
var nav4 = window.Event ? true : false;

function isnumber(caracter)
{
	if(caracter>=48&&caracter<=57)
		return true;
	return false;
}
function isletter(caracter)
{
	if(caracter>=65&&caracter<=90)
		return true;
	if(caracter>=97&&caracter<=122)
		return true;		
	return false;
}		
function urlencode(cadena)
{
	var SAFECHARS = "0123456789" +
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";
	var HEX = "0123456789ABCDEF";

	var plaintext = cadena;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++){
		var ch = plaintext.charAt(i);
	    if (ch == " "){
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch)!= -1){
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255){
			    alert("Unicode Character '" 
                        + ch 
                        + "' no pued ser codificado con el estandar URL encoding.\n" +
				          "(URL encoding solo soporta caracteres de 8-bits.)\n" +
						  "Un espacio (+) sera susituido.");
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4)& 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}
	return encoded;
}
function urldecode(cadena)
{
   var HEXCHARS = "0123456789ABCDEFabcdef";
   var encoded = cadena;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length){
       var ch = encoded.charAt(i);
	   if (ch == "+"){
	       plaintext += " ";
		   i++;
	   } else if (ch == "%"){
			if (i < (encoded.length-2)
					&& HEXCHARS.indexOf(encoded.charAt(i+1))!= -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2))!= -1){
				plaintext += unescape(encoded.substr(i,3));
				i += 3;
			} else {
				alert('Mala secuencia d escape cerca ...' + encoded.substr(i));
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	}
   return plaintext;
}
function validateNone(e)
{
	return false;
}

/*-------------------------------
validacion de password
permite paso de 
0	1
2	3	4	5	6	7	8	9	A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z	a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
------------------------------*/
function validatePassword(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key >= 48 && key <= 57) ||(key>=97&&key<=122)||(key>=65&&key<=90));
}

/*-------------------------------
validacion de password
permite paso de 
0	1
2	3	4	5	6	7	8	9	A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z	a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
------------------------------*/
function validatePlaca(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=65&&key<=90)||(key>=97&&key<=122)||(key>=48&&key<=57));
}

/*-------------------------------
validacion de numero telefonico
permite paso de 0123456789 - ()
------------------------------*/
function validateTelefono(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57)||key==45||key==40||key==41);
}

/*-------------------------------
validacion de cedula
permite paso de 0123456789
------------------------------*/
function validateCedula(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57));
}

/*-------------------------------
validacion de nit
permite paso de 0123456789 - 
------------------------------*/
function validateNit(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57)||key==45);
}

/*-------------------------------
validacion deip
permite paso de 0123456789 .
------------------------------*/
function validateIp(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57)||key==46);
}

/*-------------------------------
validacion de numero de factura
0	1
2	3	4	5	6	7	8	9
A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z
a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
-------------------------------*/
function validateTipoFactura(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=65&&key<=90)||(key>=97&&key<=122)||(key>=48&&key<=57));
}
/*-------------------------------
validacion de direccion
esp "	#  &	' (	)	*	+	,	-	.	/	0	1
2	3	4	5	6	7	8	9	:	;
A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z
a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
á é í ó ú n Ñ 
------------------------------*/
function validateDireccion(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || key==32||key==34||key==35||(key>=38&&key<=59)||(key>=65&&key<=90)||
	   key==241||key==209||(key>=97&&key<=122)||key==225||key==233||key==237||
	   key==243||key==250||key==164||key==165);		
}

/*-------------------------------
validacion de nombre
esp "	&	' 	,	-	.	/	0	1
2	3	4	5	6	7	8	9	:	;
A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z
a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
á é í ó ú n Ñ 
------------------------------*/
function validateNombre(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || key==32||key==34||key==38||key==39||(key>=44&&key<=59)||(key>=65&&key<=90)||
	   key==241||key==209||(key>=97&&key<=122)||key==225||key==233||key==237||
	   key==243||key==250||key==164||key==165);
}

/*-------------------------------
validacion de email
_ @ - .
 0 1 2 3 4 5 6 7 8 9
 A	B	C	D	E 
F	G	H	I	J	K	L	M	N	O
P	Q	R	S	T	U	V	W	X	Y
Z
a	b	c
d	e	f	g	h	i	j	k	l	m
n	o	p	q	r	s	t	u	v	w
x	y	z
------------------------------*/
function validateEmail(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || key==95||key==64||key==45||key==46||(key>=48&&key<=57)||
	  (key>=65&&key<=90)||(key>=97&&key<=122));
}

/*-------------------------------
validacion de numero
0123456789
------------------------------*/
function validateNumero(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || key>=48&&key<=57);
}

/*-------------------------------
validacion de Medias
0123456789 x
------------------------------*/
function validateMedidas(e)
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57)||key==120);
}

/*-------------------------------
validacion de ISBN
0123456789 -
------------------------------*/
function validateISBN()
{
	var key = nav4 ? e.which : e.keyCode;
	return (key <= 13 || (key>=48&&key<=57)||key==45);
}

/*-----------------------------
valida que no se haya llenado un campo
con solo espacios
-----------------------------*/
function validateLleno(cadena)
{
	checkOk=" ";
	var contador=0;
	var i=0;
	
	if(cadena.length==0)
		return false;
	else
	{
		for(i=0;i<cadena.length;i++)
		{
			if(cadena.charAt(i)==checkOk.charAt(0))
				contador=contador+1;
		}				
				if(contador<cadena.length)
			return true;
		else
			return false;
	}	
}

/*-----------------------------
valida que no se haya seleccionado 
algo en un select
-----------------------------*/
function validateSelect(valor)
{
	if(valor==null||valor==0)
		return false;
	return true;
}
/*-----------------------
valida que la direccion
de email tenga un
formato valido
nombre@sitio.dominio
------------------------*/
function validateLlenoEmail(emailstring)
{	
	var ampIndex = emailstring.indexOf("@");
	var afterAmp = emailstring.substring((ampIndex + 1), emailstring.length);
	//Encuentra un punto sólo en la porción de la cadena después del ampersand
	var dotIndex = afterAmp.indexOf(".");
	//Determina la posición del punto en toda la cadena (no sólo después del ampersand)
	dotIndex = dotIndex + ampIndex + 1;
	//afterAmp será la porción de la cadena desde el ampersand hasta el punto
	afterAmp = emailstring.substring((ampIndex + 1), dotIndex);
	//afterDot será la porción de la cadena desde el punto hasta el final de la cadena
	var afterDot = emailstring.substring((dotIndex + 1), emailstring.length);
	var beforeAmp = emailstring.substring(0,(ampIndex));
	//var email_regex = /^[\w\d\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~]+(\.[\w\d\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~])*\@(((\w+[\w\d\-]*[\w\d]\.)+(\w+[\w\d\-]*[\w\d]))|((\d{1,3}\.){3}\d{1,3}))$/;
	var email_regex = /^\w(?:\w|-|\.(?!\.|@))*@\w(?:\w|-|\.(?!\.))*\.\w{2,3}/ 
	//Índice de -1 significa que no se encontró
	if ((emailstring.indexOf("@")!= "-1")&&
		(emailstring.length > 5)&&
		(afterAmp.length > 0)&&
		(beforeAmp.length > 1)&&
		(afterDot.length > 1)&&
		(email_regex.test(emailstring))){
			  return true;
	} 
	else
		return false;
}