/*
+----------------------------------------------------------------------+
| JavaScript                                                      
+----------------------------------------------------------------------+
| Autor: TSU. Benjamin Castillo Arriaga   
+----------------------------------------------------------------------+
| Descripcion: Conjunto de funciones para validación de formularios	
| 
| Funciones:
| 			validaTextRequeridos(form:object,array:array,lang:string):Boolean
| 			validaSelectRequeridos(form:object,array:array,lang:string):Boolean
+----------------------------------------------------------------------+
| Versión: 0.4                				                            
| Fecha Actualización: 30-Jun-09 				                        
+----------------------------------------------------------------------+
*/
function validaTextRequeridos(form,array,lang){
	/* Función para validación de campos requeridos de tipo "text".
		Parametros:
		-----------------------------------------------------------------------------
		| form  | Debe recibir un formulario 
		------------------------------------------------------------------------------
		| array | Debe recibir un arreglo con los nombres de los campos 
		              a validar.
		------------------------------------------------------------------------------
		| lang  | Debe recibir una cadena con el codigo del leguaje 
		              los leguajes soportados son "es" para español
					  y "en" para ingles.
		------------------------------------------------------------------------------
		
		Ejempleo de uso:
		
		Código en cabacera del programa 
		------------------------------------
		function validaEnvio(){
			//Se instancia un objeto de tipo arreglo con el número de campos requeridos del formulario
			requiredFields=new Array; 
			//Se van agreagndo los nómbres de los campos que son requridos
			requiredFields.push("txt_NombreCliente"); 
			requiredFields.push("txt_ApePaterno");
			// Se manda llamar la función y se le envía el arreglo como parametro
			var resultado=validaTextRequeridos(MyForm,requiredFields,"es"); 
			//La funcion devolverá true si todos los campos requeridos fueron llenados
			// y devolverá false si falta algún campo por llenar además de mostra
			// una ventana con el nombre de los campos faltantes acompañados 
			// de una descripción de dichos campos por medio de la propiedad title
		}
		-------------------------------------
		Código html del formnulario
		Se debe agregar a cada campo de  tipo "text" ya que esta función sólo soporta este tipo,
		deberá agregarse la propiedad "title" con una descripción del campo solicitado, con una descripción breve
		del campo al que se refiere.
		Ejemplo:
		------------------------
		<form ....>
			<input name="txt_NombreCliente" type="text" title="Primer Nombre del Solicitante."/>
		</form> 
	*/
	
   // var x=parseInt(array.length);
	//alert("Tamaño del arreglo :" + x);
	bandera=0;
	separador="\n";
	var campos = "";
	var mensajes = new Array("The following fields are necessary:\n","Los siguientes campos son obligatorios:\n");
	if(lang=="es"){
		campos =mensajes[1];	
	}else if(lang=="en"){
		campos =mensajes[0];	
	}else{
		campos =mensajes[1];
	}
	
	//alert("Elementos del formulario " + form.elements.length);
	//var fx = form.elements.length;
	for( c = 0 ; c < form.elements.length ; c++){
		for( cont = 0 ; cont < parseInt(array.length) ; cont++){
			//alert("Campo requerido: " + array[cont]);
			if(form.elements[c].name == array[cont]){ //Verifica si el nombre del campo es igual a uno de los requeridos			
				//alert("Antes: '"+form.elements[c].value+"'")
				trim(form.elements[c])
				//alert("DespUes: '"+form.elements[c].value+"'")
				if(form.elements[c].value == ""){// Verifica si contiene algún texto
					campos=campos +  form.elements[c].title + separador;
					bandera=bandera+1;
				}			
			}
		}
	}

if(bandera>0){
		 alert(campos);
		 return false;
	}else{
		return true;
	}		
}// Fin de función validar

function validaSelectRequeridos(form,array,lang){
	/* Función para validación de campos requeridos de tipo "select".
		Ejempleo de uso:
		Código en cabacera del programa 
		------------------------------------
		function validaEnvio(){
			//Se instancia un objeto de tipo arreglo con el número de campos requeridos del formulario
			requiredLists=new Array; 
			//Se van agreagndo los nómbres de los campos que son requridos
			requiredLists[0]="cboEstados"; 
			requiredLists[1]="CboMunicipios";
			// Se manda llamar la función y se le envía el arreglo como parametro
			var resultado=validaSelectRequeridos(requiredLists); 
			//La funcion devolverá true si todos los campos requeridos fueron diferentes a 0
			// por lo que no debe olvidar agregar al inicio del campo "select" un "<option value=0></option>"
			// y devolverá false si falta algún campo por seleccionar, además de mostra
			// una ventana con el nombre de los campos faltantes acompañados 
			// de una descripción de dichos campos por medio de la propiedad title
		}
		-------------------------------------
		Código html del formnulario
		Se debe agregar a cada campo de  tipo "select" ya que esta función sólo soporta este tipo,
		deberá agregarse la propiedad "title" con una descripción del campo solicitado, con una descripción breve
		del campo al que se refiere.
		Ejemplo:
		------------------------

		------------------------
		<form ....>
			<select name="cboEstados" title="Estados de la republica." >
		      <option value="0"></option>
		      .....
			  .....
		    </select>
		</form> 
	*/
    var x=parseInt(array.length);
	//alert("Tamaño del arreglo :" + x);
	bandera=0;
	separador="\n";
	campos="Debe seleccionar una opcion de:\n";	
	//alert("Elementos del formulario " + form.elements.length);
	var fx = form.elements.length;
	for(c=0;c<fx;c++){
		for(i=0;i<x;i++){
			//alert("Campo requerido: " + array[i]);
			if(form.elements[c].name==array[i]){ //Verifica si el nombre del campo es igual a uno de los requeridos
				if(form.elements[c].selectedIndex<=0){// Verifica si contiene algún texto
					campos=campos +  form.elements[c].title + separador;
					bandera=bandera+1;
				}			
			}
		}
	}

	if(bandera>0){
		 alert(campos);
		 return false;
	}else{
		return true;
	}		

}



function trim(Obj) {
	/* Borra los espacios en blanco del lado izquierdo y derecho recibe como parametro un objeto
	 
	*/
	return rtrim(ltrim(Obj));	
}

/*======================================================================================
Funcion que elimina los blancos a la izquierda de un string.
Obj: Objeto que contiene Strin a eliminar blancos de la izquierda.
Retorna :Un Objeto
*/
function ltrim(obj) {
	
	InString = obj.value;
	n = i = 0;
	
	while (i < InString.length) {
		if (InString.charAt(i) != " ") {
			n = i
			break
		}
		i++
	}
	if (n == 0 && i == InString.length)
		obj.value = ''
	else
		obj.value = InString.substring(n, InString.length)
	return obj;
	
}

/*======================================================================================
Elimina los blancos a la derecha de un string.
obj:	objeto que contiene string a eliminar blancos de la derecha
Retorna: Un Objeto	
*/
function rtrim(obj) {
	InString = obj.value;
	n = i = InString.length
	while (i > 0) {
		if (InString.charAt(i - 1) != " ") {
			n = i
			break
		}
		i--
	}
	if (n == InString.length && i == 0)
		obj.value = ''
	else
		obj.value = InString.substring(0, n);
	return obj;	
}

/*----------------------- Funcion de validacion de email
Recibe una cadena como parametro, devuelve true si el correo es válido
o false si es falso
Fecha de Actualización: 03-Abr-09

*/
function validaMail(form_id,email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   var address = document.forms[form_id].elements[email].value;
   if(reg.test(address) == false){
//      alert('Correo no valido');
      return false;
   }else{
	   return true;	
   }// Fin de if
}// Fin de funcion


