/********************************************************************************************************
* Libreria de validacion de formularios - Copyright 2003 WYSIWYG* 2003                                  *
* Version 0.99  - Bugs y sugerencias miguel@wysiwyg.net - Miguel Vaquero Caro                           *
********************************************************************************************************/


/********************************************************************************************************
* Deteccion de navegador                                                                                *
********************************************************************************************************/
	ns = (document.layers)? true:false
	ie = (document.all && document.getElementById) ? true:false
	ns6 = (!document.all && document.getElementById) ? true : false

/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que crea los objetos de formulario. Si el formulario esta dentro de una capa hay indicarlo  *
*                                                                                                       *
* Parametros:                                                                                           *
*	creaFrmObj(formulario,nombre) o creaFrmObj(formulario,nombre,capa)                                  *                                *
*	- formulario: Nombre del formulario donde se encuentra el objeto                                    *
*	- nombre: Nombre del objeto formulario                                                              *
*	- capa (opcional): Si el formulario esta dentro de una capa hay que especificarlo				  	*
********************************************************************************************************/
function creaFrmObj(formulario,nombre,capa){
	if (ie){objeto= eval("document.forms['"+formulario+"']."+nombre);}
	if (ns){
		if (capa!=null || capa==""){objeto=  eval("document.layers[capa].document."+formulario+"."+nombre);}
		else{objeto=eval("document."+formulario+"."+nombre);}
	}
	if (ns6){objeto=  eval("document.getElementById('"+formulario+"')."+nombre);}	
	if(eval(!objeto)){alert("ERROR EN LA DECLARACION:\nNo se ha encontrado el objeto \""+nombre+"\", revisa los nombres del objeto,\nformulario y capa en caso de haberla."); return false}
	else {return objeto;}
}



/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que valida si el campo pasado como parametro es válido como numero de télefono.             *
*                                                                                                       *
* Sintaxis de validación:                                                                               *
*	- Puede ser obligatorio                                                                             *
*	- Ser númerico                                                                                      *
*	- entre longitud y longitud 2	(telefonos nacionales 9, internacionales 13 digitos)                *
*                                                                                                       *
* Parametros:                                                                                           *
*	esNumero(cadena,obligatorio,nombre_campo,longitud,longitud2,mensajes)                             *
*	- cadena: cadena de texto a validar                                                                 *
*	- obligatorio: si es 1 es obligatorio y si es 0 no                                                  *
*	- nombre_campo: Literal con el que el usuario conoce el campo  (por ejemplo "Teléfono de contacto") *
*	- longitud: Longitud minima																			*
*	- longitud2: Longitud maxima																		*
*	- mensajes: Como tratar las alertas "1"  se muestran, "0" se trataran desde la pagina del formulario*
********************************************************************************************************/
function esNumero(cadena,obligatorio,nombre_campo,longitud,longitud2,mensajes) {
	valor=trim(cadena);
	if (mensajes==1) {msj=true;} else {msj=false;}
	if (obligatorio==1){if(valor==""){if (msj){alert("El campo \""+nombre_campo+"\" es obligatorio.");}return (false);}}
	if(isNaN(valor)){if (msj){alert("El campo \""+nombre_campo+"\" debe ser numérico.");}return (false);}
	if(valor.length<longitud){if (msj){alert("El campo \""+nombre_campo+"\" es demasiado corto. Por favor escríbalo como un número de "+longitud+" dígitos y sin dejar espacios ni guiones entre los mismos.");}return (false);}
	if(valor.length>longitud2){if (msj){alert("El campo \""+nombre_campo+"\" es demasiado largo. Por favor escríbalo como un número de "+longitud+" dígitos y sin dejar espacios ni guiones entre los mismos.");}return (false);}
	return (true);
}



/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que valida si el campo pasado como parametro es válido como email.    				        *
*                                                                                                       *
* Sintaxis de validación:                                                                               *
*  - Puede ser obligatorio                                                                              *
*  - Tener al menos un "@" y un "."                												        *
*  - No puede contener "@." o ".@"																		*
*  - Tener algun "." despues de la "@"				  												    *
*  - No puede tener un "." al principio o al final														*
*  - No puede tener un "@" al principio o al final														*
*  - El dominio debe tener de 2 a 4 caracteres															*
*                                                                                                       *
* Parametros:                                                                                           *
*	esEmail(cadena,obligatorio,nombre_campo, mensajes  									                *
*	- cadena: cadena de texto a validar                                                                 *
*	- obligatorio: si es 1 es obligatorio y si es 0 no                                                  *
*	- nombre_campo: Literal con el que el usuario conoce el campo  (por ejemplo "Teléfono de contacto") *
*	- mensajes: Como tratar las alertas "1"  se muestran, "0" se trataran desde la pagina del formulario*
********************************************************************************************************/
function esEmail(cadena,obligatorio,nombre_campo,mensajes) {
	valor=trim(cadena);
	if (mensajes==1) {msj=true;} else {msj=false;}
	if (obligatorio==1){if(valor==""){if (msj){alert("El campo \""+nombre_campo+"\" es obligatorio.");}return (false);}}
	if ((valor.indexOf(" ") != -1) ||(valor.indexOf("	") != -1))  {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} // tiene " " o "	"
	if ((valor.indexOf("@.") != -1) ||(valor.indexOf(".@") != -1))  {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} // tiene "@." o ".@"
	if (valor.indexOf("@") == -1 || valor.lastIndexOf(".") == -1) {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} // debe tener "@" y "."
	if (valor.lastIndexOf(".") < valor.indexOf("@")) {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} //debe haber algun punto despues de la "@"
	if ( valor.indexOf(".")==0 || (valor.lastIndexOf(".")+1)==valor.length) {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} //hay un "." al principio o al final
	if ( valor.indexOf("@")==0 || (valor.lastIndexOf("@")+1)==valor.length) {if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} //hay un "@" al principio o al final
	trozos=valor.split("@");
	trozos2=trozos[1].split(".");
	if (trozos2[trozos2.length-1].length>4 || trozos2[trozos2.length-1].length<2 ){if (msj){alert("El campo \""+nombre_campo+"\" no es correcto.");} return (false);} // el dominio es demasiado largo o corto
	return (true);
}





/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que valida un si el texto pasado como parametro es válido		    				        *
*                                                                                                       *
* Sintaxis de validación:                                                                               *
*  - Puede ser obligatorio                                                 		                        *
*  - entre longitud y longitud 2																	    *
*                                                                                                       *
* Parametros:                                                                                           *
*	valorTextarea(cadena,obligatorio,nombre_campo,longitud,longitud2,mensajes)			                *
*	- cadena: cadena de texto a validar                                                                 *
*	- obligatorio: si es 1 es obligatorio y si es 0 no                                                  *
*	- nombre_campo: Literal con el que el usuario conoce el campo  (por ejemplo "Teléfono de contacto") *
*	- longitud: Longitud minima																			*
*	- longitud2: Longitud maxima																		*
*	- mensajes: Como tratar las alertas "1"  se muestran, "0" se trataran desde la pagina del formulario*
********************************************************************************************************/
function valorTextarea(cadena,obligatorio,nombre_campo,longitud,longitud2,mensajes) {
	valor=trim(cadena);
	if (mensajes==1) {msj=true;} else {msj=false;}
	if (obligatorio==1){if(valor==""){if (msj){alert("El campo \""+nombre_campo+"\" es obligatorio.");}return (false);}}
	if (valor.length<longitud) {if (msj){alert("El campo \""+nombre_campo+"\" es demasiado largo. Debe tener como máximo "+longitud+" caracteres y tiene "+valor.length+".");} return (false);}
	if (valor.length>longitud2) {if (msj){alert("El campo \""+nombre_campo+"\" es demasiado largo. Debe tener como máximo "+longitud2+" caracteres y tiene "+valor.length+".");} return (false);}
	return (true);
}




/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que devuelve los tres valores de un select que pueden interesarnos 				            *
*                                                                                                       *
* Parametros:                                                                                           *
*	valoresSelect(objeto,cual)							                                                *
*	objeto: objeto de tipo select											                            * 
*	cual:  																								*
*		- "i" devuelve el indice seleccionado                                                           *
*		- "v" devuelve el "value" de la opcion seleccionada                                             *
*		- "t" devuelve el texto seleccionado                                                            *
********************************************************************************************************/
function valoresSelect(objeto,cual){
	if (objeto.type=="select-one") {
		if (cual=="i"){return objeto.selectedIndex}
		if (cual=="v"){return objeto[objeto.selectedIndex].value}
		if (cual=="t"){return objeto[objeto.selectedIndex].text}
	}
	else{
		alert("ERROR EN LA DECLARACION:\nLa función valoresSelect() no puede utlizarse para selects de tipo múltiple.");
		return false;
	}
}
/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que devuelve el value del radiobuton seleccionado				 				            *
*                                                                                                       *
* Parametros:                                                                                           *
*	valorRadio(objeto)									                                                *
*	objeto: objeto de tipo radio											                            * 
********************************************************************************************************/
function valorRadio(objeto,cual){
	var valor_seleccionado=false;
	for(i=0;i<objeto.length;i++){
		if(objeto[i].checked==true){
			valor_seleccionado=objeto[i].value;
		}
	}
	return valor_seleccionado;
}


/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que devuelve el value o el check check box seleccionado			 				            *
*                                                                                                       *
* Parametros:                                                                                           *
*	valorRadio(objeto)									                                                *
*	objeto: objeto de tipo radio											                            * 
********************************************************************************************************/
function valorCheck(objeto,cual){
		if (cual==1){return objeto.checked}
		if (cual==2){return objeto.value}
}

/********************************************************************************************************
*	Abre una ventana HTML con el código que se le pase como parametro en la variable texto              *
* Parametros:                                                                                           *
*	ventanea(ancho,alto,nombreventana,pagina,swscroll)                                                  *
*	ancho y alto: dimensiones de la ventana                                                             *
*	nombreventana: nombre de la variable ventana                                                        *
*	pagina: Página que se mostrará dentro de la ventana                                                 *
*	swscroll: 0 no mostrará el scroll 1 si                                                              *
********************************************************************************************************/
function ventaneaMiHTML(texto,ancho,alto,nombreventana,swscroll){
	var win = ventanea("about:blank",ancho,alto,nombreventana,swscroll);
	with (win.document) {
	  open("text/html", "replace");
	  write(texto);
	  close();
	}
}


/********************************************************************************************************
*	Limpia el contenido de un objeto del formulario y devuelve el foco sobre el                         *
********************************************************************************************************/
function limpia(objeto){
	objeto.value="";
	objeto.focus();
}




/********************************************************************************************************
*	Funcion que limpia los espacios por la izquierda de una cadena de texto			                    *
*	Mientras que el indice j sea menor que la longitud de la cadena y el caracter en la posicion j      *
*	de la cadena sea el espacio o la tabulacion incremento j. Cuando termine se habra acabado la cadena *
*	o tendremos la posicion del primer caracter distinto de espacio o tabulacion                        *
********************************************************************************************************/
function ltrim(cadena){
	espacios = " \t"; //limpia espacios y tabulaciones
	cadena_aux = cadena;
    j=0; i = cadena.length;
	while (j < i && espacios.indexOf(cadena_aux.charAt(j)) != -1) {j++;} 
	cadena_aux = cadena_aux.substring(j, i);
	return cadena_aux;
}
/********************************************************************************************************
*	Funcion que limpia los espacios por la derecha de una cadena de texto			                    *
*	Mientras que el indice sea mayor o igual a la longitud de la cadena i el caracter en la posicion i  *
*	de la cadena sea el espacio o la tabulacion decremento i. Cuando termine se habra acabado la cadena *
*	o tendremos la posicion del ultimo caracter distinto de espacio o tabulacion                        *
********************************************************************************************************/
function rtrim(cadena){
	espacios = " \t"; //limpia espacios y tabulaciones
	cadena_aux = cadena;
    var i = cadena.length - 1;
    while (i >= 0 && espacios.indexOf(cadena_aux.charAt(i)) != -1) i--;
    cadena_aux = cadena_aux.substring(0, i+1);
	return cadena_aux;
}
/********************************************************************************************************
*	Limpia los espacios por la izquierda y por la derecha de una cadena de texto			            *
********************************************************************************************************/
function trim(cadena){return rtrim(ltrim(cadena));}
/********************************************************************************************************
*	Devuelve los n primeros caracteres de una cadena									                *
********************************************************************************************************/
function left(cadena,n){return cadena.substring(0,n);}
/********************************************************************************************************
*	Devuelve los n ultimos caracteres de una cadena										                *
********************************************************************************************************/
function right(cadena,n){return cadena.substring(cadena.length, cadena.length - n);}
/********************************************************************************************************
*	Devuelve una subcadena desde el inicio (1 es el primero), hasta n caracteres					    *
********************************************************************************************************/
function mid(cadena, inicio, n){inicio--;return cadena.substring(inicio,inicio+n);}


