   	var gvalgen_ColorError = "#D6BBB8";

	if (typeof Configuracion!="undefined")
	{
		var config_ValidacionGenerica = Configuracion.Globalizacion.ValidacionGenerica;
		gvalgen_ColorError    = config_ValidacionGenerica.COLOR_ERROR;
	}
	
	var gvalgen_CAR_NOVALIDOS = "#"+"$"+"&"+"´"+"¨"+"·"+"`";
	var gvalgen_CAR_NUM  = "0123456789";
	var gvalgen_CAR_REAL = "0123456789,";
	var gvalgen_CAR_ALFA = " \t\n\r" + "abcdefghijklmnopqrstuvwxyzáéíóú" + "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜ";
	var gvalgen_ARRAY_CAR_FILTRAR = [ ];

	
	var gvalgen_REQUIRED      = "REQUIRED";
	var gvalgen_VALIDATE      = "VALIDATE";
	var gvalgen_INFOVALIDATE  = "INFOVALIDATE";
	var gvalgen_PATTERN       = "PATTERN";
	var gvalgen_ERROR	      = "ERROR";
	var gvalgen_EXCLUSIVE     = "EXCLUSIVE";
	
		var gvalgen_valor_REQUIRED = "required";
	var gvalgen_valor_OPTIONAL = "optional";
	var gvalgen_valor_IGNORE   = "ignore";

    var gvalgen_NONE    	= "none";
	var gvalgen_NUM 		= "num";

	var gvalgen_ALFA 		= "alfa";
	var gvalgen_ALFANUM 	= "alfanum";
	var gvalgen_DATE 		= "date";
	var gvalgen_EMAIL 		= "email";

	var gvalgen_MAXLENGTH   = "maxlength";
	var gvalgen_FUNCTION_NET    = "net";
	
	
    var gvalgen_SEPARADOR_VALIDATE			 = "#"; 	var gvalgen_SEPARADOR_INFOVALIDATE		 = "="; 	var gvalgen_SEPARADOR_ITEMS_INFOVALIDATE = "#"; 	
		var gvalgen_REGEXP      = "regexp";
	
	gvalgen_CAMPO_INPUT = "input";
	gvalgen_TEXT = "text";
	gvalgen_PASSWORD = "password";
	gvalgen_FILE = "file";
	gvalgen_CHECKBOX = "checkbox";
	gvalgen_RADIO = "radio";
	gvalgen_HIDDEN = "hidden";
	gvalgen_IMAGE = "image";
	gvalgen_RESET = "reset";
	gvalgen_SUBMIT = "submit";

		gvalgen_CAMPO_SELECT = "select";	
	gvalgen_SELECT = "select-one";
	gvalgen_SELECT_MULTIPLE = "select-multiple";	

		gvalgen_CAMPO_TEXTAREA = "textarea";
	gvalgen_TEXTAREA = "textarea";
	
		gvalgen_CAMPO_BUTTON = "button";
	gvalgen_BUTTON = "button";
		 
		var gvalgen_frmID = null;


if (typeof(ValidadorGenerico) == "undefined" ) alert("Objeto ValidadorGenerico no definido");






function valgen_getValorInfoValidacion(attr_infoValidate, key_infoValidacion) {

    var attrLength = attr_infoValidate.length, keyLength = key_infoValidacion.length;
    if ((attrLength == 0) || (keyLength == 0)) return null;

	    var hayItemsValidacion = ( attr_infoValidate.indexOf(gvalgen_SEPARADOR_ITEMS_INFOVALIDATE) != -1);
	
		if (!hayItemsValidacion)
	{
				var posSeparador = attr_infoValidate.search(gvalgen_SEPARADOR_INFOVALIDATE);
		if (posSeparador < 0) return null;

			    var tipoValidacion      = attr_infoValidate.substring(0,posSeparador);  	    var valorTipoValidacion = attr_infoValidate.substr(posSeparador+1);     	
		if (key_infoValidacion != tipoValidacion) return null;
		
		return valorTipoValidacion;
	}
		else
	{
						var arrayInfoValidacion = attr_infoValidate.split(gvalgen_SEPARADOR_ITEMS_INFOVALIDATE);
			var numItemsInfoValidacion = arrayInfoValidacion.length;

			
						for (var i=0; i < numItemsInfoValidacion; i++)
			{
			
								var infoValidacion = arrayInfoValidacion[i];
				var posSeparador = infoValidacion.search(gvalgen_SEPARADOR_INFOVALIDATE);
				
				if (posSeparador < 0) return null;

							    var tipoValidacion      = infoValidacion.substring(0,posSeparador);  			    var valorTipoValidacion = infoValidacion.substr(posSeparador+1);     	
								if (key_infoValidacion == tipoValidacion) 
						return valorTipoValidacion;			
			}
			
			return null; 	}
	

} 
function valgen_ltrim(s)
{
return s.replace(/^\s*/,"");
}
function valgen_rtrim(s)
{
return s.replace(/\s*$/,"");
}
function valgen_trim(s)
{
return valgen_rtrim(valgen_ltrim(s));
}

function valgen_validarCampo(objetoCampo,valorCampo,campoRequerido,tipoValidacion,patronCampo,infoValidacion)
{

		var esValido= false;
	var esOpcionalVacio = false;
	var tipoCampo = null;

		if (objetoCampo) tipoCampo = (objetoCampo.type).toLowerCase();
	
	
		valorCampo=valgen_trim(valorCampo); 
	
		campoRequerido = campoRequerido.toLowerCase();
 	tipoValidacion = tipoValidacion.toLowerCase();
	if (patronCampo != null) patronCampo    = patronCampo.toLowerCase();
	
		switch (campoRequerido)
	{   
	    		case gvalgen_valor_REQUIRED:
        	  			  if (!esVacio(valorCampo) && !esBlanco(valorCampo)) esValido = true;
		break;
		
				case gvalgen_valor_OPTIONAL:
			  esValido = true;
			  esOpcionalVacio = ( esVacio(valorCampo) || esBlanco(valorCampo)); 			  
		break;

			    case gvalgen_valor_IGNORE:
		      esValido = true;
		break;
		default:
			alert("Error campo requerido");
			esValido = false;
		break;
	}

		if (tipoCampo != gvalgen_CHECKBOX)
	{
				if (!esValido) return false;
				if (esOpcionalVacio) return true; 
	}

		if (campoRequerido == gvalgen_valor_IGNORE) return esValido;
	
		esValido = false;
	
			if (tipoValidacion == gvalgen_NONE) return true;	

	switch (tipoValidacion)
	{    
	    		case gvalgen_NUM:
			if ( esNatural(valorCampo)) esValido = true;
		break;

				case gvalgen_ALFANUM:
			if (esCadenaValidaNoCaracteres (valorCampo, gvalgen_CAR_NOVALIDOS)) 	esValido = true;		
		break;
	
	    		case gvalgen_ALFA:
			if (esCadenaValidaCaracteres (valorCampo, gvalgen_CAR_ALFA)) esValido = true;		
		break;

				case gvalgen_DATE: 
			 if	( gfec_OBJFECHA.esFecha(valorCampo) ) esValido = true;		
		break;

				case gvalgen_EMAIL:
			if (esCorreo(valorCampo)) esValido = true;
	    break;

	    case gvalgen_MAXLENGTH:
			if (infoValidacion == null) break; 
		    			var valorTipoValidacion = valgen_getValorInfoValidacion(infoValidacion, gvalgen_MAXLENGTH); 			if (valorTipoValidacion == null) break;
			
			esValido = !( eval(valorCampo.length) >  eval(valorTipoValidacion) ); 

		break;
		
	
		case gvalgen_FUNCTION_NET:
			if (infoValidacion == null) break; 
			
					    var valorTipoValidacion = valgen_getValorInfoValidacion(infoValidacion, gvalgen_FUNCTION_NET); 
			if (valorTipoValidacion == null) break;			
			
						var nombreFuncionCustomValidacion = valorTipoValidacion;

						var sender = objetoCampo;
						var args = { Value:valorCampo, IsValid:true };
			
			    	    if (typeof(nombreFuncionCustomValidacion) == "string") 
			{
						        eval(nombreFuncionCustomValidacion+ "(sender, args) ;");
			}
			else
			{
				alert("Funcion NET CustomValidator No definida");
				args.IsValid = false;
			}
		    esValido = args.IsValid;
		break;
						
			case gvalgen_NONE:
			esValido = true;
		break; 
	
		default:
			alert("Error validación Campos");
			esValido = false;		
		break;
	
	} 
	return esValido;

} 


function valgen_validarForm(frmID, objetoFormulario)
{

	if (typeof(GestorValidacionGenerica) == "undefined" ) 
	{
		alert("ValidaciónGenérica. Objeto GestorValidacionGenerica no definido");
		return false;
	}

		if (!GestorValidacionGenerica.validacionActiva) return true;
	

		gvalgen_frmID = frmID;

		var arrayCamposError = new Array(); 
		var arrayNombreCamposError = new Array();		
	
		var debug = "";
	
		var arrayCamposValidos = new Array(); 
	
			var arrayCampos = [gvalgen_CAMPO_INPUT, gvalgen_CAMPO_SELECT, gvalgen_CAMPO_TEXTAREA, "file"];


		var T = "";
	var campo, nombreCampo, tipoCampo;
	
    	for (j=0; j<arrayCampos.length;j++)
	{
		   var elementos = objetoFormulario.getElementsByTagName(arrayCampos[j]);
		   
		   		   for (i=0;i<elementos.length;i++)
		   {
				campo = elementos[i];
				nombreCampo = elementos[i].name;
				tipoCampo = elementos[i].type;
				tipoCampo = tipoCampo.toLowerCase();

			 switch (tipoCampo)
			 {
				 				 case gvalgen_SELECT:
				 case gvalgen_TEXTAREA:
				 case gvalgen_TEXT:
				 case gvalgen_PASSWORD:
				 case gvalgen_FILE:
				 case gvalgen_CHECKBOX:
				 case gvalgen_HIDDEN: 
			 
				 													    var attr_validate = elementos[i].getAttribute(gvalgen_VALIDATE);
						var attr_infovalidate = elementos[i].getAttribute(gvalgen_INFOVALIDATE);
				  	    var attr_required = elementos[i].getAttribute(gvalgen_REQUIRED);
					    var attr_pattern = null;
						var attr_error = elementos[i].getAttribute(gvalgen_ERROR);
						var attr_exclusive = elementos[i].getAttribute(gvalgen_EXCLUSIVE);
					
					    						if (attr_validate == null || attr_validate =='undefined' || attr_validate.length == 0) break;
						if (attr_required == null || attr_required =='undefined' || attr_required.length == 0) break;
						if (attr_error == null || attr_error =='undefined'  || attr_error.length == 0) break;

						attr_validate = attr_validate.toLowerCase();
						attr_required = attr_required.toLowerCase();

																								if (attr_validate != null)
						   if (attr_validate != 'undefined')
						       if (attr_validate == gvalgen_REGEXP)
								 	attr_pattern =  elementos[i].getAttribute(gvalgen_PATTERN);
					

					
												if (GestorValidacionGenerica.validacionExclusiva)
						{
							var valorExclusive = GestorValidacionGenerica.validacionExclusivaValor;
							
							if (attr_exclusive == null || attr_exclusive =='undefined'  
							|| attr_exclusive.length == 0) continue;
							
														attr_exclusive = attr_exclusive.toLowerCase();
							valorExclusive = valorExclusive.toLowerCase();
							
							if (attr_exclusive != valorExclusive) continue;
						}


									
						var haySeparadorValidaciones = ( attr_validate.indexOf(gvalgen_SEPARADOR_VALIDATE) != -1);

						var arrayValidaciones = attr_validate.split(gvalgen_SEPARADOR_VALIDATE);
						var numValidaciones = arrayValidaciones.length;
						var campoValido = false;
						
						for (var k=0;k<numValidaciones;k++) 
						{
				           var tipoValidacion = arrayValidaciones[k];
						   var valorCampo     = elementos[i].value;
						   var objetoCampo    = elementos[i]; 
						   
					       						   campoValido = valgen_validarCampo(objetoCampo,valorCampo,attr_required,tipoValidacion,attr_pattern,attr_infovalidate);

						   if (!campoValido)
						   {
arrayNombreCamposError[arrayNombreCamposError.length]=elementos[i].name; 		            		  				arrayCamposError[arrayCamposError.length]=elementos[i]; 								
								
								
																break;
		   	   			   }	        

				        } 						
												if (campoValido)
														arrayCamposValidos[arrayCamposValidos.length]=elementos[i]; 						
				 break;
	 
				 default:
	  		     break;
		
     		 } 
	 
   		   }	    } 

	   
	if (typeof(util_replace) == "undefined" ) 
	{
		alert("ValidaciónGenérica. Objeto util_replace no definido");
		return false;
	}
	
		if (eval(arrayCamposError.length==0))
	{
		var numCampos = arrayCamposValidos.length;
		for (var i=0;i<numCampos;i++) 
		{
			var campo = arrayCamposValidos[i];
			
						for (j=0; j<gvalgen_ARRAY_CAR_FILTRAR.length;j++)
		    {
			  var arrayCaracteres = gvalgen_ARRAY_CAR_FILTRAR[j];
			  campo.value = util_replace(campo.value,arrayCaracteres[0],arrayCaracteres[1]);
		    }						
		}
	}
			
		var strError = "";
	var campoNoValido, campoForm;
	var noFocus = true;
	
    for (i=0;i<arrayCamposError.length;i++)
    {

	  	campoNoValido = arrayNombreCamposError[i]; 	    if (campoNoValido != "")
		{
						campoForm = arrayCamposError[i];

															
  			strError = strError + "\n" + campoForm.getAttribute(gvalgen_ERROR); 			
					   				
															if (noFocus)
			{
			 			 			 			 if (!campoForm.disabled) 
			 {
				 				 				 				 				 if (campoForm.onfocus)
				 { 
					 campoForm.focus(); 
		 			 noFocus = false;
				 }
			 }
			}
															  
	        		    campoForm.style.backgroundColor= gvalgen_ColorError;
			
						      }
	} 	
		if (eval(arrayCamposError.length>0))
	{
	   strError="Se han encontrado los siguientes errores:\n\n" +  strError 
  	   	   alert(strError);
	   
	   	   
       return false;
	}	   

    return true;

} 

function valgen_validarFormulario(frmID)
{
		gvalgen_frmID = frmID;
	
	return valgen_validarForm(frmID, document);
	
} 
			
function valgen_validarCamposFormulario(frmID)
{
		gvalgen_frmID = frmID;
	
		var formulario = document.getElementById(frmID);
	
	return valgen_validarForm(frmID, formulario);
	
} 

function valgen_activarCampoError(campoForm, bVaciar)
{
	var campoID;
	if (typeof campoForm == "string") 
	{
		campoID = campoForm;
		campoForm = document.getElementById(campoID);
	}
	
	if (typeof campoForm != "object") return;
	
	if (!campoForm.disabled) 
	{
										if (campoForm.onfocus) campoForm.focus(); 
	}
		campoForm.style.backgroundColor= gvalgen_ColorError;
	
	if (bVaciar)
		campoForm.value = "";
}


GestorValidacionGenerica = new GestorValidacionGenerica();



function GestorValidacionGenerica()
{
		this.validacionActiva = true;
	this.validacionExclusiva = false;
	this.validacionExclusivaValor = "";
}


GestorValidacionGenerica.Validar = function(frmID)
{
	return valgen_validarFormulario(frmID);
}
