
	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 Field 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 Field  (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 escriba un númedo de "+longitud+" digitos y sin espacios o caracteres como - o ,....");}return (false);}
	if(valor.length>longitud2){if (msj){alert("El Campo \""+nombre_campo+"\" es demasiado largo. Por favor escriba un númedo de "+longitud+" digitos y sin espacios o caracteres como - o ,....");}return (false);}
	return (true);
}



/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que valida si Field 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 characters															*
*                                                                                                       *
* 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 Field  (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 Field  (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 un máximo de "+longitud+" caracteres y tiene "+valor.length+".");} return (false);}
	if (valor.length>longitud2) {if (msj){alert("El Campo \""+nombre_campo+"\" es demasiado largo. Debe tener un máximo de "+longitud2+" caracteres y tiene "+valor.length+".");} return (false);}
	return (true);
}




/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que calcula la letra de un nif									 				            *
*********************************************************************************************************/
function NIF(cadena){
    var baremo;
    var letraNIF, letras = "TRWAGMYFPDXBNJZSQVHLCKET";
    baremo = cadena % 23; 
    letraNIF = letras.charAt(baremo);
	return letraNIF;
}

/********************************************************************************************************
* Descripción:                                                                                          *
*	Funcion que valida si un NIF es valido o no								 				            *
*********************************************************************************************************/
function esNIF(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);}}
	dni_numero=cadena.substring(0, cadena.length-1)
	dni_letra=cadena.substring(cadena.length-1, cadena.length)
	dni_letra=dni_letra.toUpperCase();
	if(!isNaN(dni_letra))  {if (msj){alert("El DNI debe terminar con una letra.");} return (false);} 
	if(NIF(dni_numero)!=dni_letra)  {if (msj){alert("El Campo \""+nombre_campo+"\" no es correcto.");} 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,redimension){
	var win = ventanea("about:blank",ancho,alto,nombreventana,swscroll);
	with (win.document) {
	  open("text/html", "replace");
	  write(texto);
	  close();
	}
}
/********************************************************************************************************
*	Abre una ventana HTML centrada en la pantalla                                                       *
* Parametros:                                                                                           *
*	ventanea(pagina,ancho,alto,nombreventana,swscroll)                                                  *
*	pagina: Página que se mostrará dentro de la ventana                                                 *
*	ancho y alto: dimensiones de la ventana                                                             *
*	nombreventana: nombre de la variable ventana                                                        *
*	swscroll: 0 no mostrará el scroll 1 si                                                              *
********************************************************************************************************/
function ventanea(pagina,ancho,alto,nombreventana,swscroll,redimension) {
	anchoPantalla=(screen.width/2)-(ancho/2)
	altoPantalla=(screen.height/2)-(alto/2)
	var win= eval('window.open(""+pagina+"",""+nombreventana+"","width="+ancho+",height="+alto+",resizable="+redimension+",toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars="+swscroll+",left="+anchoPantalla+",top="+altoPantalla+",noresize")')
	return win
}


/********************************************************************************************************
*	Limpia el contenido de un objeto del formulario y devuelve el foco sobre el                         *
********************************************************************************************************/
function limpia(objeto){
	objeto.value="";
	objeto.focus();
}


/********************************************************************************************************
*	Limpia el contenido de un objeto del formulario y devuelve el foco sobre el                         *
********************************************************************************************************/
function contiene(cadena,subcadena){
	if (cadena.indexOf(subcadena)!=-1){return true}
	else {return false}
}


/********************************************************************************************************
*	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 characters de una cadena									                *
********************************************************************************************************/
function left(cadena,n){return cadena.substring(0,n);}
/********************************************************************************************************
*	Devuelve los n ultimos characters 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 characters					    *
********************************************************************************************************/
function mid(cadena, inicio, n){inicio--;return cadena.substring(inicio,inicio+n);}






/********************************************************************************************************
*	VALIDAD CIF												    *
********************************************************************************************************/


function esCIF(texto){ 
        
        var pares = 0; 
        var impares = 0; 
        var suma; 
        var ultima; 
        var unumero; 
        var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I"); 
        var xxx; 
         
        texto = texto.toUpperCase(); 
         
        var regular =/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g; 
         if (!regular.exec(texto)) return false; 
              
         ultima = texto.substr(8,1); 

         for (var cont = 1 ; cont < 7 ; cont ++){ 
             xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0"; 
             impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
             pares += parseInt(texto.substr(cont,1)); 
         } 
         xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0"; 
         impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
          
         suma = (pares + impares).toString(); 
         unumero = parseInt(suma.substr(suma.length - 1, 1)); 
         unumero = (10 - unumero).toString(); 
         if(unumero == 10) unumero = 0; 
          
         if ((ultima == unumero) || (ultima == uletra[unumero]))
             return true; 
         else 
             return false; 

} 