/* JavaScript que valida forma de registro de usuario
   Jesús André Soto
   Septiembre 2004
   --Guillermo Mosso Vallejo
   --Febrero 2005
*/

function validaForma(formaRegistro, update) {  //update es un boolean que si es TRUE indica que la petición vino de la forma de 'Actualización de Información'
      	var alphaChars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
		var alphaChars2="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-][{};:/.,? ";
		var invalidForNames="0123456789!@#$%^&*()_+=-][{};:/.,";
		var numChars="0123456789";
	
	// Verificar que los campos requeridos hayan sido llenados y con el tipo de dato correspondiente
	
		//validar que el nombre no este vacio
        if (formaRegistro.nombre.value == "") {
            alert('Por favor ingresa tu nombre(s)');
            formaRegistro.nombre.focus();
            return false;
        }		
		
		//validar que el campo de apellidos no este vacio
		if (formaRegistro.apellidoPaterno.value == "") {
            alert('Por favor ingresa tu apellido paterno');
            formaRegistro.apellidoPaterno.focus();
            return false;
        }
		
		if (formaRegistro.apellidoMaterno.value == "") {
            alert('Por favor ingresa tu apellido materno');
            formaRegistro.apellidoMaterno.focus();
            return false;
        }
		
		//validar que email no este vacio
		if (formaRegistro.email.value == "") {
            alert('Por favor especifica tu cuenta de e-mail');
            formaRegistro.email.focus();
            return false;
        }else{
			//validar cuenta de email
			var good;
			var goodEmail = formaRegistro.email.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
			if (goodEmail){
   				good = true
			} else {
   					alert('La cuenta de e-mail es invalida, por favor verifica')
   					formaRegistro.email.focus();
   					good = false
					return false;
   			}
		}

		//validar email alternativo en caso de que se haya ingresado
		if ( formaRegistro.emailopc.value != "" ) {
			if ( formaRegistro.emailopc.value != "No definido") {
			//validar cuenta de email
			var good;
			var goodEmail = formaRegistro.emailopc.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
			if (goodEmail){
   				good = true
			} else {
   					alert('La cuenta alternativa de e-mail es invalida, por favor verificala')
   					formaRegistro.emailopc.focus();
   					good = false
					return false;
   			}
		  }
		}
		
		//validar que email y email alternativo no sean iguales
		if(formaRegistro.email.value == formaRegistro.emailopc.value){
			alert('La cuenta alternativa de e-mail no puede ser igual a la cuenta de email, por favor especifica otra')
			formaRegistro.emailopc.focus();
			return false;
		}
		
		//validar que el nombre no este vacio
        if (formaRegistro.nombreNovio.value == "") {
            alert('Por favor ingresa nombre del novio');
            formaRegistro.nombreNovio.focus();
            return false;
        }		
		
		//validar que el campo de apellidos no este vacio
		if (formaRegistro.paternoNovio.value == "") {
            alert('Por favor ingresa apellido paterno del novio');
            formaRegistro.paternoNovio.focus();
            return false;
        }
		
		if (formaRegistro.maternoNovio.value == "") {
            alert('Por favor ingresa tu apellido materno del novio');
            formaRegistro.maternoNovio.focus();
            return false;
        }
		
		//validar que email no este vacio
		if (formaRegistro.emailNovio.value == "") {
            alert('Por favor especifica tu cuenta de e-mail');
            formaRegistro.emailNovio.focus();
            return false;
        }else{
			//validar cuenta de email
			var good;
			var goodEmail = formaRegistro.emailNovio.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
			if (goodEmail){
   				good = true
			} else {
   					alert('La cuenta de e-mail del novio es invalida, por favor verifica')
   					formaRegistro.emailNovio.focus();
   					good = false
					return false;
   			}
		}

		//validar email alternativo en caso de que se haya ingresado
		if ( formaRegistro.emailopcNovio.value != "" ) {
			if ( formaRegistro.emailopcNovio.value != "No definido") {
			//validar cuenta de email
			var good;
			var goodEmail = formaRegistro.emailopcNovio.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
			if (goodEmail){
   				good = true
			} else {
   					alert('La cuenta alternativa de e-mail del novio es invalida, por favor verificala')
   					formaRegistro.emailopcNovio.focus();
   					good = false
					return false;
   			}
		  }
		}
		
		//validar que email y email alternativo no sean iguales
		if(formaRegistro.emailNovio.value == formaRegistro.emailopcNovio.value){
			alert('La cuenta alternativa de e-mail del novio no puede ser igual a la cuenta de email, por favor especifica otra')
			formaRegistro.emailopcNovio.focus();
			return false;
		}
		
		//validar que la ciudad no este vacia
		/*if (formaRegistro.ciudad.value == "") {
            alert('Por favor ingresa tu ciudad');
            formaRegistro.ciudad.focus();
            return false;
        }*/
		
		//validar que el estado no este vacio
		/*if (formaRegistro.estado.value == "Elegir Estado") {
            alert('Por favor selecciona tu estado');
            formaRegistro.estado.focus();
            return false;
        }	*/
		
		//validar que el codigo postal no este vacia
		/*if (formaRegistro.codp.value == "") {
            alert('Por favor especifica tu Código Postal');
            formaRegistro.codp.focus();
            return false;
        }*/
		
		//codigo postal solo puede tener numeros
	if (formaRegistro.codp.value != "") {	 
	  	 for(var i=0; i<formaRegistro.codp.value.length; i++){
			  for(var j=0; j<alphaChars2.length; j++){
				   if(alphaChars2.charAt(j)==formaRegistro.codp.value.charAt(i)){
   					   alert('El Código Postal contiene caracteres inválidos');
					   formaRegistro.codp.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	} 
		
		//validar que el telefono particular no este vacio
		if (formaRegistro.telpart.value == "") {
            alert('Por favor ingresa tu teléfono');
            formaRegistro.telpart.focus();
            return false;
        }	
		
		if (formaRegistro.celular.value == "") {
            alert('Por favor ingresa tu celular');
            formaRegistro.celular.focus();
            return false;
        }	
		
		/*//La parte de 'Horarios en que te encuentres disponible' fue quitada de la forma de registro
		if (formaRegistro.horcasa1.value=="" || formaRegistro.horcasa2.value=="") {
            alert('Por favor especifica un horario en que te encuentres disponible');
            formaRegistro.horcasa1.focus();
            return false;
        }	
		
		
		//validar que si el tel de oficina se ingreso tambien se ingrese el horario
		if (formaRegistro.telof.value!="" && (formaRegistro.horofna1.value=="" || formaRegistro.horofna2.value=="")) {
            alert('Por favor especifica un horario en que te encuentres disponible en la oficina');
            formaRegistro.horofna1.focus();
            return false;
        }	
		*/
		
	if (formaRegistro.invitados.value == "") {
            alert('Por favor ingresa numero de invitados (puede ser aproximado si no lo tienes definido)');
            formaRegistro.invitados.focus();
            return false;
        }				
		//numero de invitados solo puede tener numeros
	if (formaRegistro.invitados.value != "") {	 
	  	 for(var i=0; i<formaRegistro.invitados.value.length; i++){
			  for(var j=0; j<alphaChars2.length; j++){
				   if(alphaChars2.charAt(j)==formaRegistro.invitados.value.charAt(i)){
   					   alert('El número de invitados contiene caracteres inválidos');
					   formaRegistro.invitados.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	} 
	
		//validar que la fecha de la boda no este vacia
		/*if (formaRegistro.fechaboda.value == "") {  //&& formaRegistro.fechaDef.value=="Elegir") {
            alert('Por favor especifica la fecha de tu boda.\n Si aún no la tienes definida por favor introduce una fecha Tentativa.');
            //formaRegistro.fechaboda.focus();
            return false;
        }	*/
		
		//validar que se indique si la fecha es definitiva o no
		if (formaRegistro.fechaDef.value == "" || formaRegistro.fechaDef.value == "Elegir") {
            alert('Por favor especifica si la fecha de tu boda es Tentativa o Definitiva.');
            formaRegistro.fechaDef.focus();
            return false;
        }
			
		//validar que password no este vacio
		if (formaRegistro.password.value == "" || (formaRegistro.password.value).length<=0) {
            alert('Por favor especifica tu contraseña');
            formaRegistro.password.focus();
            return false;
        }	

		//validar que confirmacion password no este vacio
		if (formaRegistro.password2.value == "") {
            alert('Por favor confirma tu contraseña');
            formaRegistro.password2.focus();
            return false;
        }	
		
	   //validar que password y confirmacion sean iguales
		if(formaRegistro.password.value!=formaRegistro.password2.value){
			alert('Por favor verifica que tu contraseña sea la misma en los dos campos');
            formaRegistro.password2.value="";
			formaRegistro.password2.focus();
            return false;
		}

		
	//el nombre solo puede tener letras
	if (formaRegistro.nombre.value != "") {	 
	  	 for(var i=0; i<formaRegistro.nombre.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.nombre.value.charAt(i)){
   					   alert('El nombre contiene caracteres inválidos');
					   formaRegistro.nombre.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	} 
	
	// los appellidos solo pueden tener letras
	if (formaRegistro.apellidoPaterno.value != "") {	 
	  	 for(var i=0; i<formaRegistro.apellidoPaterno.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.apellidoPaterno.value.charAt(i)){
   					   alert('El apellido paterno caracteres inválidos');
					   formaRegistro.apellidoPaterno.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	}
	
	if (formaRegistro.apellidoMaterno.value != "") {	 
	  	 for(var i=0; i<formaRegistro.apellidoMaterno.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.apellidoMaterno.value.charAt(i)){
   					   alert('El apellido materno caracteres inválidos');
					   formaRegistro.apellidoMaterno.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	}
	
	
	// validar nombre del novio
	if (formaRegistro.nombreNovio.value != "") {	 
	  	 for(var i=0; i<formaRegistro.nombreNovio.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.nombreNovio.value.charAt(i)){
   					   alert('El nombre del novio contiene caracteres inválidos');
					   formaRegistro.nombreNovio.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	}
	
		// validar apellidos del novio
	if (formaRegistro.paternoNovio.value != "") {	 
	  	 for(var i=0; i<formaRegistro.paternoNovio.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.paternoNovio.value.charAt(i)){
   					   alert('El apellido paterno del novio contiene caracteres inválidos');
					   formaRegistro.paternoNovio.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	}
	
		if (formaRegistro.maternoNovio.value != "") {	 
	  	 for(var i=0; i<formaRegistro.maternoNovio.value.length; i++){
			  for(var j=0; j<invalidForNames.length; j++){
				   if(invalidForNames.charAt(j)==formaRegistro.maternoNovio.value.charAt(i)){
   					   alert('El apellido materno del novio contiene caracteres inválidos');
					   formaRegistro.maternoNovio.focus();
					   return false;   
					}	   
    		  }
			
		 }						 
	}
	
	
	if(update){
		
		//validar que la calle no este vacia
		if (formaRegistro.calle.value == "") {
            alert('Por favor ingresa tu calle y número');
            formaRegistro.calle.focus();
            return false;
		}

		//validar que la colonia no este vacia
		if (formaRegistro.colonia.value == "") {
            alert('Por favor ingresa tu colonia');
            formaRegistro.colonia.focus();
            return false;
		}
		
		//Validar que se haya indicado el num estimado de invitados
		if (formaRegistro.invitados.value == "") {
            alert('Por favor especifica el número de invitados que esperas para ofrecerte alternativas concretas');
            formaRegistro.invitados.focus();
            return false;
        }
		
		//validar que el lugar de la recepcion no este vacia
		if (formaRegistro.recepcion.value == "") {
            alert('Por favor especifica el lugar de la recepción. \nSi aún no lo sabes escribe: No definido');
            formaRegistro.recepcion.focus();
            return false;
        }
		
	}
		
	return revisaMayusculas(formaRegistro, update);
 }
 

 
/////////////checaFormato.js

function revisaMayusculas(formaRegistro, update) {
	 revisaMayusc2(formaRegistro.nombre);
	 revisaMayusc2(formaRegistro.apellidoPaterno);
	 revisaMayusc2(formaRegistro.apellidoMaterno);
	 revisaMayusc2(formaRegistro.calle);
	 revisaMayusc2(formaRegistro.colonia);
	 revisaMayusc2(formaRegistro.ciudad);
	 revisaMayusc2(formaRegistro.recepcion);
	 revisaMayusc2(formaRegistro.nombreNovio);
     revisaMayusc2(formaRegistro.paternoNovio);
     revisaMayusc2(formaRegistro.maternoNovio);
	 	 
	 return true;  //para el testing regresar siempre FALSO para q no envíe el formulario
 }
 
function revisaMayusc2(campo, formaRegistro){
	 
	 //arreglo con la forma correcta de apellidos más usuales
	 palabrasSinAcento = new Array("lopez", "gomez", "perez", "ruben");
	 palabrasConAcento = new Array("López", "Gómez", "Pérez", "Rubén");
	 
	 palabrasSinCambiar = new Array("el", "la", "lo", "los", "las", "un", "una", "unos", "unas", //articulos
									"y", "e", "o", "u", // conjunciones
									"a", "ante", "cabe", "con", "contra", "de", "desde", "en", "entre", "hacia", "hasta", "para", "por", "según", "sin", "sobre", "tras", //preposiciones
									"al", "del", "que");
		 		 		 
		 if(campo.value != ""){
			 var longitud = campo.value.toString().length;
			 campo.value = campo.value.toString().toLowerCase();  //primero poner toda la entrada en minúsculas
			 
			 //Colocar la primera letra de la entrada en mayúscula
			 campo.value = campo.value.toString().charAt(0).toUpperCase( ) + campo.value.toString().substring(1, longitud);
			 //Obtener un arreglo con las palabras separadas de la entrada, el separador es el espacio
			 var palabras = campo.value.toString().split(" ");
			 var numPalabras = palabras.length;
			 
			 //ciclo para checar si la palabra es uno de los apellidos que se conoce deben llevar acento
			 for(var k=0; k<palabrasSinAcento.length; k++){
			 	if(palabras[0].toLowerCase() == palabrasSinAcento[k]){
					palabras[0] = palabrasConAcento[k];
					break;
				}
			 }
			 
			 var result = palabras[0]; //variable que va a guardar la cadena resultante
			 
			 //Sila entrada contiene más de una palabra realizar el ciclo para poner las iniciales mayúsculas de cada una 
			 if(numPalabras > 1){
				 
				 //ciclo para recorrer el arreglo de las palabras de una en una
				 for(var i=1; i<numPalabras; i++){
					 bandera = new Boolean(false);  //si la bandera es FALSE entonces se le cambia la primera letra a Mayúscula
					 //ciclo para checar que la palabra no sea un artículo
					 for(var j=0; j<palabrasSinCambiar.length; j++){
						 if(palabras[i] == palabrasSinCambiar[j]){
						 	bandera = true;
						 	break;
						 }
					 }//fin de checar si la palabra debe o no ser puesta con inicial mayúscula
					 
					 //ciclo para checar si la palabra es uno de los apellidos que se conoce deben llevar acento
					 for(var m=0; m<palabrasSinAcento.length; m++){
						if(palabras[i] == palabrasSinAcento[m]){
							palabras[i] = palabrasConAcento[m];
							bandera = true;
							break;
						}
					 }
					 
					 //Si la palabra no fue artículo, conjunción ni preposición, entonces ponerla en inicial mayúscula
					 if(bandera == false){
						result = result + " " + palabras[i].toString().charAt(0).toUpperCase( ) + palabras[i].toString().substring(1, palabras[i].length);
					 } else {
						result = result + " " + palabras[i]; 
					 }
				 }//fin del ciclo FOR que recorre el arreglo de palabras
			 }//fin del IF para checar el # de palabras
			 campo.value = result;  //colocar el resultado en la forma
		 }//fin del IF que checa si el campo no es vacío
 }
 
 
 
