/*
	Funcion	: wgrl_ObtValorTag
	Pre	: tagI=tag inicial, tagF=tag final, buffer
	Post	:
	Descrip.: Devuelve una cadena segun el tag inicial
			  y el tag final	
*/
function wgrl_ObtValorSegui( buffer )
{
	var indexF = buffer.indexOf(TI_NEVT);
	
	if( -1 == indexF )
	  return;

	return buffer.substring( 0, indexF);
}

/*
	Funcion	: wgrl_ObtValorTag
	Pre	: tagI=tag inicial, tagF=tag final, buffer
	Post	:
	Descrip.: Devuelve una cadena segun el tag inicial
			  y el tag final	
*/
function wgrl_ObtValorTag(tagI, tagF, buffer)
{
	var indexI = buffer.indexOf(tagI);
	var indexF = buffer.indexOf(tagF);
	
	if( -1 == indexI || -1 == indexF )
	  return;

	return buffer.substring(indexI + tagI.length, indexF);
}

/*
	Funcion	: recortarCadena
	Pre	: tagI= tag inicial
	Post	:
	Descrip.: Recortar cadena hasta el tag inicial dado
	
*/
function wgrl_RecortarCadena(tagI, buffer)
{
	var ret = "";
	var indexI = buffer.indexOf(tagI);
	
	if( (indexI + tagI.length) == buffer.length )
		return ret;
	
	ret = buffer.substring(indexI + tagI.length, buffer.length);
	
	return ret; 
}

/*
	Funcion	: wgrl_PonEstadoComponente
	Pre	: tagI= tag inicial
	Post	:
	Descrip.: Recortar cadena hasta el tag inicial dado
	
*/
function wgrl_PonEstadoComponente(componente, habil)
{
	if( (componente.type == "text") || (componente.type == "textarea") || (componente.type == "password") )
	{
		if(habil == HABILITAR)
			componente.readOnly = "" ;
		else
			componente.readOnly = "readOnly" ;
	}
	else
	{
		if(habil == HABILITAR)
			componente.disabled = "";
		else
			componente.disabled = "disabled";
	}
}

/*
	Funcion	: wgrl_AlCambiar
	Pre	: 
	Post	:
	Descrip.: Se invoca en el momento que se realiza un cambio ( en un componente )
*/
function wgrl_AlCambiar(componente)
{
	var atrVen, idVen, tipVen, modoCmp;

	idVen = componente.name;
	
	if( componente.type == 'radio' )
		idVen = componente.getAttribute('idVen');
		
	modoCmp = componente.getAttribute('modo');
	cambioCmp = componente.getAttribute('cambioCmp');
	
	atrVen = frameCont.document.getElementById(idVen);
	tipVen = atrVen.getAttribute('tipVen');

	// Cambia la forma que se edita la actual
	atrVen.setAttribute('cambio', SI);

	// si el tipo de ventana es movimiento (encabezado o detalle)
	// se obtiene el mov para cambiar el estado
	if( (tipVen & VEN_MMOVIM) == VEN_MMOVIM )
	{
		var atrVenMov, idVenMov;
		
		idVenMov = atrVen.getAttribute('idMov');
		atrVenMov = frameCont.document.getElementById(idVenMov);
		
		atrVenMov.setAttribute('cambio', SI);
	}

	if( (modoCmp & WCMP_MDETALLABLE) == WCMP_MDETALLABLE )
	{
		dejarCmp = componente.getAttribute('dejarCmp');

		if( dejarCmp == SI )
			wcol_Encolar(CM_DEJARCMP, componente.id, idVen);
	}

	// Es cuando un campo tiene un cambio y 
	// se le mete el evento de cambio en el campo
	if( cambioCmp == SI )
		wgrl_CambioCmp(componente);
}

/*
	Funcion	: wgrl_CambioCmp
	Pre	: 
	Post	:
	Descrip.: Se invoca en el momento que se realiza perdida del foco ( en un componente )
*/
function wgrl_CambioCmp(componente)
{
	var atrVen, idVen;
	
	xmlCmps = "";
	idVen = componente.name;

	atrVen = frameCont.document.getElementById(idVen);
	px     = atrVen.getAttribute('px');
	tipVen = atrVen.getAttribute('tipVen');
	
	if( (tipVen & VEN_MMULTI) == VEN_MMULTI )
		xmlCmps = wtbl_ObtFila(componente);
	else
		xmlCmps = wglr_ObtCampos(idVen);
	
	xml = TI_PX + px + TF_PX;
	xml = xml + TI_IDCMP + componente.id + TF_IDCMP + xmlCmps;

	evt = new wevt( CM_CAMBIOCMP, xml );
	evts.push(evt);

	wajax_Enviar( urlServer );
}

/*
	Funcion	: wgrl_DejarCmp
	Pre	: 
	Post	:
	Descrip.: Se invoca en el momento que se realiza perdida del foco ( en un componente )
*/
function wgrl_DejarCmp(componente)
{
	var atrVen, idVen, estado, xmlCmps, px, tipVen;
	var modoCmp = componente.getAttribute('modo');
	
	xmlCmps = "";
	idVen = componente.name;

	atrVen = frameCont.document.getElementById(idVen);
	px     = atrVen.getAttribute('px');
	tipVen = atrVen.getAttribute('tipVen');
	estado = atrVen.getAttribute('estado');
	
	// Si es consulta se retorna
	if( estado == E_CONSULTANDO )
		return;

	if( (modoCmp & WCMP_MDETALLABLE) != WCMP_MDETALLABLE )
	{
		if( componente.readOnly == true || componente.disabled == true )
			return;
	}
	
	if( (tipVen & VEN_MMULTI) == VEN_MMULTI )
		xmlCmps = wtbl_ObtFila(componente);
	else
		xmlCmps = wglr_ObtCampos(idVen);
	
	xml = TI_PX + px + TF_PX;
	xml = xml + TI_IDCMP + componente.id + TF_IDCMP + xmlCmps;

	evt = new wevt( CM_SINLOGUEAR, "" );
	evts.push(evt);
	
	evt = new wevt( CM_DEJARCMP, xml );
	evts.push(evt);

	wajax_Enviar( urlServer );
}

/*
	Funcion	: wglr_ObtCampos
	Pre	: 
	Post	:
	Descrip.: Obtiene los campos con el valor de una forma normal
*/
function wglr_ObtCampos(idVen)
{
	var xmlCmps = "";
	var numCmps = 0;
	
	// se obtienen los campos de la ventana actual
	cmps = frameCont.document.getElementsByName(idVen);
	
	for( var i=0; i<cmps.length; i++ )
	{
		cmp = cmps[i]; // componente de la ventana
		
		if( cmp.type == "radio" && !cmp.checked )
			continue;

		if( cmp.type == "button" )
			continue;

		xmlCmp = TI_CMP +
				TI_IDCMP + cmp.id + TF_IDCMP +
				TI_VLRCMP + cmp.value + TF_VLRCMP +
			 TF_CMP;
			 
		xmlCmps = xmlCmps + xmlCmp;
		numCmps++;
	}
	
	// Obtiene los radios de la ventana
	var vent = frameCont.document.getElementById('div'+idVen);
	var cmpsRACH = vent.getElementsByTagName("input");
	var arrChe = new Array();

	// Recorrido solbre los radios
	for( var i=0; i<cmpsRACH.length; i++ )
	{
		var cmp = cmpsRACH[i]; // componente de la ventana
		
		if( cmp.type != "radio" && cmp.type != "checkbox" )
			continue;
		
		var valor = cmp.getAttribute("valDef");
		var xmlCmp = "";
	
		if( cmp.checked )
		{
			xmlCmp = TI_CMP +
						TI_IDCMP + cmp.id + TF_IDCMP +
						TI_VLRCMP + valor + TF_VLRCMP +
					 TF_CMP;

			xmlCmps = xmlCmps + xmlCmp;
			numCmps++;
		}
		// Para el chequeo
		if(cmp.type == "checkbox" )
		{
			if( arrChe[cmp.id] == undefined )
					arrChe[cmp.id] = 0;
			
			if( cmp.checked )
				arrChe[cmp.id] = parseInt(arrChe[cmp.id]) + parseInt(cmp.value);
		}
	}//Fin for radios y chequeos
	
	// Recorrido de los chequeos
	for(id in arrChe)
	{
		var xmlCmp = TI_CMP +
						TI_IDCMP + id + TF_IDCMP +
						TI_VLRCMP + arrChe[id] + TF_VLRCMP +
					 TF_CMP;

		xmlCmps = xmlCmps + xmlCmp;
		numCmps++;
	}
	
	xml = TI_NCMPS + numCmps + TF_NCMPS + xmlCmps;
	
	return xml;
}

/*
	Funcion	: wgrl_HayCambio
	Pre	: 
	Post	:
	Descrip.: Si hay cambio en edicion se pregunta por si se desean guardar los Cambios
		  en caso de ser movimiento desgloza el detalle y el encabezado
*/
function wgrl_HayCambio(estado, idVen)
{
	var atrVen, cambio, estado, tipVen, res;
	
	atrVen = frameCont.document.getElementById(idVen);
	cambio = atrVen.getAttribute('cambio');
	estado = atrVen.getAttribute('estado');
	tipVen = atrVen.getAttribute('tipVen');
	
	if( estado == E_CONSULTANDO )
		return false;
	
	if( cambio == NO )
		return false;
	
	// Confirma si desea guardar cambios
	// Modif alejo verificar bien el funcionamiento -- Pendiente
	//res = true;
	res = window.confirm("Ocurrieron algunos cambio.\nDesea guardar ?")
	
	// Si la ventana es encabezado
	// Cambia el estado del contenedor y del detalle
	if( (tipVen & VEN_MENCABEZADO) == VEN_MENCABEZADO )
	{
		var atrVenMov, atrVenDet, idVenMov, idVenDet;
		
		idVenMov = atrVen.getAttribute('idMov');
		atrVenMov = frameCont.document.getElementById(idVenMov);
		
		idVenDet = atrVenMov.getAttribute('idVenDet');
		atrVenDet = frameCont.document.getElementById(idVenDet);
		
		atrVenMov.setAttribute('cambio', NO);
		atrVenDet.setAttribute('cambio', NO);
	}
	
	if( res == false )
		return false;

	return true;
}

/*
	Funcion	: wgrl_Grabar
	Pre	: 
	Post	:
	Descrip.: Arma el xml con los eventos para realizar los cambio
		  en caso de ser movimiento desgloza el detalle y el encabezado
*/
function wgrl_Grabar(idVen, cm)
{
	var atrVen, px, estado, nPag, tipVen, cmps, cambio;
	var numCmps, xmlCmps, xml;
	
	atrVen = frameCont.document.getElementById(idVen);
	tipVen = atrVen.getAttribute('tipVen');

	if( cm != CM_GRABARENC )
		cm = CM_GRABAR;
	
	// En cado de que sea una ventana de movimiento
	// se obtiene el encabezado
	if( (tipVen & VEN_MMOVIM) == VEN_MMOVIM )
	{
		idVen = atrVen.getAttribute('idVenEnc');
		atrVen = frameCont.document.getElementById(idVen);
	}

	// Atributos de la ventana actual
	px     = atrVen.getAttribute('px');
	estado = atrVen.getAttribute('estado');
	nPag   = atrVen.getAttribute('nPag');
	tipVen = atrVen.getAttribute('tipVen');
	
	// Campos para el XML
	numCmps = 0;
	xmlCmps = "";
	tmpCmps = "";

	// Si es escabezado o multiregistro
	// se guardan los cambio del detalle o multiregistro
	if( ( (tipVen & VEN_MENCABEZADO) == VEN_MENCABEZADO || (tipVen & VEN_MMULTI) == VEN_MMULTI ) && cm == CM_GRABAR )
	{
		var atrVenMov, atrVenDet, idVenMov, idVenDet;
		
		idVenMov  = atrVen.getAttribute('idMov');
		atrVenMov = frameCont.document.getElementById(idVenMov);
		
		idVenDet  = atrVenMov.getAttribute('idVenDet');
		atrVenDet = frameCont.document.getElementById(idVenDet);
		cambio    = atrVenDet.getAttribute('cambio');
		
		// Si hubo cambio graba
		if( cambio == SI )
			wtbl_Grabar(idVenDet, nPag);
	}
	
	// Cambio del encabezado o forma normal
	cambio = atrVen.getAttribute('cambio');
	// Si hubo cambio graba
	if( cambio == NO )
		return;
	
	if( (tipVen & VEN_MMULTI2) == VEN_MMULTI2 )
		wtbl_Grabar(idVen, nPag);
	else
	{
		// se obtienen los campos de la ventana actual
		cmps = frameCont.document.getElementsByName(idVen);

		// Si es ventana encabezado o diferente a multiregistro
		if( (tipVen & VEN_MENCABEZADO) == VEN_MENCABEZADO || (tipVen & VEN_MMULTI) != VEN_MMULTI )
		{
			for( var i=0; i<cmps.length; i++ )
			{
				var xmlCmp = "";
				
				cmp = cmps[i]; // componente de la ventana
				var valorCampo = cmp.value;
				
				if( cmp.name == "ATR_"+idVen )
					continue;

				modo = parseInt(cmp.getAttribute("modo"));
				
				if( (modo & WCMP_MNOENTABLA) == WCMP_MNOENTABLA  )
					continue;
	
				// Se validan los campos obligatorios que son los text y password
				if( cmp.type == "text" || cmp.type == "password" )
				{
					if( (modo & WCMP_MOBLIGATORIO) == WCMP_MOBLIGATORIO || (modo & WCMP_MLLAVEPRIMARIA) == WCMP_MLLAVEPRIMARIA ) 
					{
						if( cmp.value == "" )
						{
							if( tmp == 0 )
								alert("Hay algunos campos que son obligatorios (*).\nPor favor diligencielos...");
							tmp = 1;
							return false;
						}
					}
						
				}
				
				if((cmp.type == "text") && ((modo & WCMP_MMONEDA) == WCMP_MMONEDA))
					valorCampo = wgrl_quitarComas(valorCampo);
				
				if((cmp.type == "text") && ((modo & WCMP_MHORA) == WCMP_MHORA))
					valorCampo = wgrl_quitarFormatoHora(valorCampo);

				if( (cmp.type == "text")  || (cmp.type == "textarea") || (cmp.type == "hidden") || 
					(cmp.type == "password") || (cmp.type == "file") || (cmp.type == "select-one") )
				{
					
					xmlCmp = TI_CMP +
							TI_IDCMP + cmp.id + TF_IDCMP +
							TI_VLRCMP + escape(valorCampo) + TF_VLRCMP +
						 TF_CMP;
				}
				else
					continue;
	
				xmlCmps = xmlCmps + xmlCmp;
				tmpCmps = tmpCmps + xmlCmp + "\n";
				numCmps++;
			}// Fin for campos != de radios
	
			// Obtiene los radios de la ventana
			var vent = frameCont.document.getElementById('div'+idVen);
			var cmpsRACH = vent.getElementsByTagName("input");
			var arrChe = new Array();
	
			// Recorrido solbre los radios
			for( var i=0; i<cmpsRACH.length; i++ )
			{
				var cmp = cmpsRACH[i]; // componente de la ventana
				
				if( cmp.type != "radio" && cmp.type != "checkbox" )
					continue;
				
				var valor = cmp.getAttribute("valDef");
				var xmlCmp = "";
			
				if( cmp.type == "radio" && cmp.checked )
				{
					xmlCmp = TI_CMP +
								TI_IDCMP + cmp.id + TF_IDCMP +
								TI_VLRCMP + valor + TF_VLRCMP +
							 TF_CMP;
	
					xmlCmps = xmlCmps + xmlCmp;
					numCmps++;
				}
				// Para el chequeo
				if(cmp.type == "checkbox" )
				{
					if( arrChe[cmp.id] == undefined || arrChe[cmp.id] == 'undefined' )
						arrChe[cmp.id] = 0;
					
					if( cmp.checked )
						arrChe[cmp.id] = parseInt(arrChe[cmp.id]) + parseInt(cmp.value);
				}
			}//Fin for radios y chequeos

			// Recorrido de los chequeos
			for(id in arrChe)
			{
				var xmlCmp = TI_CMP +
								TI_IDCMP + id + TF_IDCMP +
								TI_VLRCMP + arrChe[id] + TF_VLRCMP +
							 TF_CMP;

				xmlCmps = xmlCmps + xmlCmp;
				numCmps++;
			}
		}
	}// Fin si de diferente al multi2

	xml = TI_PX + px + TF_PX;
	xml = xml + TI_EST + estado + TF_EST;
	xml = xml + TI_NPAG + nPag + TF_NPAG;
	xml = xml + TI_NCMPS + numCmps + TF_NCMPS;
	xml = xml + TI_NUMFIL + 0 + TF_NUMFIL;
	xml = xml + xmlCmps;

	evt = new wevt( CM_SINLOGUEAR, "" );
	evts.push(evt);
	
	if( (tipVen & VEN_MMULTI2) != VEN_MMULTI2 )
	{
		evt = new wevt( cm, xml );
		evts.push(evt);
	}
	
	return true;
}

/*
	Funcion	: wgrl_LimpiarForma
	Pre	: 
	Post	:
	Descrip.: Limpia una forma
*/
function wgrl_LimpiarForma(idVen, cmd)
{
	var componentes, nuevoEstado, modo;

	atrVen = frameCont.document.getElementById(idVen);
	tipVen = atrVen.getAttribute('tipVen');
	
	// Componentes que tengan el mismo name de la ventana
	componentes = frameCont.document.getElementsByName(idVen);
	nuevoEstado = E_CONSULTANDO;
		
	for( var i=0; i<componentes.length; i++ )
	{
		componente = componentes[i];
		modo = componente.getAttribute("modo");

		if( (modo & WCMP_MNOENTABLA) == WCMP_MNOENTABLA || (modo & WCMP_MFECHA) == WCMP_MFECHA )
		{
			if( cmd == CM_ADICIONAR && componente.type != "button" && componente.type != "checkbox" )
				componente.value = "";
			
			if( componente.type == "button" || componente.type == "text" || componente.type == "password" )
				wgrl_PonEstadoComponente(componente, HABILITAR);
			
			continue;
		}
		
		if( ((modo & WCMP_MDETALLABLE) == WCMP_MDETALLABLE) && 
		    ((tipVen & VEN_MMULTI) != VEN_MMULTI || (tipVen & VEN_MMULTI2) != VEN_MMULTI2 ) 
		)
		{
			if( cmd == CM_ADICIONAR && componente.type != "button" )
				componente.value = "";
			
			continue;
		}
		
		if( cmd == CM_ADICIONAR )
		{
			if( componente.type != "button" )
			{
				if( (modo & WCMP_MHORA) == WCMP_MHORA )
					componente.value = "00:00am";
				else
				{
					if( componente.type == "checkbox" )
						componente.checked = false;
					else
						componente.value = "";
				}
			}
			
			if( (modo & WCMP_MNOARRIVABLE) != WCMP_MNOARRIVABLE )
				wgrl_PonEstadoComponente(componente, HABILITAR);
			
			if( componente.type == "select-one" )
				componente.value = 0;
		}
		else
		if( cmd == CM_MODIFICAR || cmd == CM_ACTUALIZAR )
		{
			if( (modo & WCMP_MLLAVEPRIMARIA) == WCMP_MLLAVEPRIMARIA || (modo & WCMP_MFECHA) == WCMP_MFECHA )
			{
				wgrl_PonEstadoComponente(componente, DESHABILITAR);
				if( (modo & WCMP_MARRIVABLE) == WCMP_MARRIVABLE )
					wgrl_PonEstadoComponente(componente, HABILITAR);
			}
			else
			if( (modo & WCMP_MNOARRIVABLE) == WCMP_MNOARRIVABLE )
					wgrl_PonEstadoComponente(componente, DESHABILITAR);
			else
				wgrl_PonEstadoComponente(componente, HABILITAR);
		}
		else
		if( cmd == CM_CONSULTAR )
			wgrl_PonEstadoComponente(componente, DESHABILITAR);
	}// fin for de componentes de id ventana

	// Poner nuevo estado	
	if( cmd == CM_ADICIONAR )
		nuevoEstado = E_ADICIONANDO;
	else if( cmd == CM_MODIFICAR )
		nuevoEstado = E_MODIFICANDO;
	if( cmd == CM_ACTUALIZAR )
		nuevoEstado = E_ACTUALIZANDO;
		
	// Obtiene los radios de la ventana
	var vent = frameCont.document.getElementById('div'+idVen);
	var cmpsRACH = vent.getElementsByTagName("input");
	
	// Recorrido solbre los radios
	for( var i=0; i<cmpsRACH.length; i++ )
	{
		var cmp = cmpsRACH[i]; // componente de la ventana
		
		if( cmp.type != "radio" && cmp.type != "checkbox" )
			continue;
		
		if( cmd == CM_ADICIONAR )
		{
			if( cmp.type == "radio" && (modo & WCMP_MPRENDIDO) == WCMP_MPRENDIDO )
				cmp.checked = true;
			
			if( cmp.type == "checkbox" && (modo & WCMP_MPRENDIDO) == WCMP_MPRENDIDO )
				cmp.checked = 'checked';
		}
		
		modo = cmp.getAttribute("modo");
		wgrl_PonEstadoComponente(cmp, DESHABILITAR);
		
		if( cmd == CM_ADICIONAR || cmd == CM_MODIFICAR || cmd == CM_ACTUALIZAR )
		{
			if( (modo & WCMP_MNOARRIVABLE) != WCMP_MNOARRIVABLE )
				wgrl_PonEstadoComponente(cmp, HABILITAR);
		}
	}
	
	return nuevoEstado;
}

/*
	Funcion	: wgrl_CamposObligatoriosLlenos
	Pre	: 
	Post	:
	Descrip.: Valida que los campos obligatorios de una forma esten diligenciados
*/
function wgrl_CamposObligatoriosLlenos(idVen)
{
	// se obtienen los campos de la ventana actual
	cmps = frameCont.document.getElementsByName(idVen);
	
	for( var i=0; i<cmps.length; i++ )
	{
		cmp = cmps[i]; // componente de la ventana
		
		modo = cmp.getAttribute("modo");
		
		if( (modo & WCMP_MLLAVEPRIMARIA) == WCMP_MLLAVEPRIMARIA || (modo & WCMP_MOBLIGATORIO) == WCMP_MOBLIGATORIO )
		{
			if( cmp.value == "" )
			{
				alert("Por favor digite los campos obligatorios(*)");
				return false;
			}
		}
	}
	
	return true;
}

/*
	Funcion	: wgrl_chequearComponente
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_chequearComponente(componente, valor)
{
	var componente;
	
	if( componente.type == 'checkbox' )
	{
		if( (componente.value & valor) == componente.value )
			componente.checked = "checked";
		else
			componente.checked = "";
	}
	else if( componente.type == 'radio' )
	{
		if( componente.value == valor )
			componente.checked = "true";
	}
}

/*
	Funcion	: wgrl_chequearComponente
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_NuevoRenglon(idVen)
{
	var atrVen = frameCont.document.getElementById(idVen);
	var estado = atrVen.getAttribute('estado');
	var tipVen = atrVen.getAttribute('tipVen');

	// obtenemos las llaves del encabezado para los nuevos renglones
	if( (tipVen & VEN_MMOVIM) == VEN_MMOVIM && estado == E_ADICIONANDO )
	{
		var atrVenMov, idVenMov, idVenEnc;
		
		// se obtiene el contendor para traer el id de la ventana del encabezado
		// y obtener los campos del encabezado
		idVenMov = atrVen.getAttribute('idMov');

		wevt_Grabar( idVenMov, CM_GRABARENC );
	}
	else
		wtbl_NuevoRenglon(idVen);
}

/*
	Funcion	: wgrl_validarEntero
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_validarEntero(componente, e, signo)
{
	var codigoTecla = (window.Event) ? e.which : e.keyCode;

	// Si el componente no posee signo, y el caracter digitado es el signo(-)
	var modo = componente.getAttribute("modo");
	if( ((modo & WCMP_MENTEROSINSIGNO) == WCMP_MENTEROSINSIGNO) && (codigoTecla == 45))
		return false;

	// si la tecla es el signo (+),
	// si tiene el signo (-), quitarlo.
	if(codigoTecla == 43)
	{
		if(componente.value.charAt(0) == '-')
			componente.value =  componente.value.substring(1, componente.value.length);
	}
	if(codigoTecla == 45) // si la tecla es el signo (-)
	{
		if(wgrl_validarCaracter(componente, codigoTecla) == -1)
			componente.value = String.fromCharCode(codigoTecla) + componente.value;
		return false;
	}

	if (codigoTecla > 31 && (codigoTecla < 48 || codigoTecla > 57))
		return false;
	
	// Si es un digito
	if( codigoTecla >= 48 && codigoTecla <= 57 )
	{
		// Obtener el numero de digitos que se pueden almacenar en el campo
		var numCaracteres = componente.getAttribute("numCaracteres");
		var len = componente.value.length;

		// Si existe el caracter (-)
		if(wgrl_validarCaracter(componente, 45) != -1)
			len--;
		
		// Si ambos tamanos son iguales es porque no se puede ingresar mas digitos
		if(numCaracteres == len)
			return false;
	}

	return true;
}

/*
	Funcion	: wgrl_validarDecimal
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_validarDecimal(componente, e)
{
	var len;
	
	var codigoTecla = (window.Event) ? e.which : e.keyCode;
	
	// si la tecla es el signo (+),
	// si tiene el signo (-), quitarlo.
	if(codigoTecla == 43)
	{
		if(componente.value.charAt(0) == '-')
			componente.value =  componente.value.substring(1, componente.value.length);
	}
	if(codigoTecla == 45) // si la tecla es el signo (-)
	{
		if(wgrl_validarCaracter(componente, codigoTecla) == -1)
			componente.value = String.fromCharCode(codigoTecla) + componente.value;
		return false;
	}

	if(codigoTecla == 46) // Si es el caracter punto (.), verificar que no exista
	{
		if(wgrl_validarCaracter(componente, codigoTecla) == -1)
			return true;
		else
			return false;
	}
	
	if (codigoTecla > 31 && (codigoTecla < 48 || codigoTecla > 57))
		return false;
	
	// Si es un digito
	if( codigoTecla >= 48 && codigoTecla <= 57 )
	{
		// Obtener el numero de digitos que se pueden almacenar en el campo
		var numCaracteres = componente.getAttribute("numCaracteres");
		var len = componente.value.length;
		
		// Si existe el caracter (-)
		if(wgrl_validarCaracter(componente, 45) != -1)
			len--;
		
		// Si ambos tamanos son iguales es porque no se puede ingresar mas digitos
		if(numCaracteres == len)
			return false;
	}
	
	return true;
}

/*
	Funcion	: wgrl_validarMoneda
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_validarMoneda(componente, e)
{
	var len;
	var cadena;
	var posPunto;
	var strCheck = '0123456789';
	var i;
	
	var codigoTecla = (window.Event) ? e.which : e.keyCode;
	
	// si la tecla es el signo (+),
	// si tiene el signo (-), quitarlo.
	if(codigoTecla == 43)
	{
		if(componente.value.charAt(0) == '-')
			componente.value =  componente.value.substring(1, componente.value.length);
	}
	if(codigoTecla == 45) // si la tecla es el signo (-)
	{
		if(wgrl_validarCaracter(componente, codigoTecla) == -1)
			componente.value = String.fromCharCode(codigoTecla) + componente.value;
		return false;
	}
	
	if(codigoTecla == 46) // Si es el caracter punto (.), verificar que no exista
	{
		if(wgrl_validarCaracter(componente, codigoTecla) == -1)
			componente.value = componente.value + String.fromCharCode(codigoTecla);
		return false;
	}
	    
	if (codigoTecla > 31 && (codigoTecla < 48 || codigoTecla > 57))
		return false;
	
	// Si el caracter es un digito o backspace
	if( (codigoTecla >= 48 && codigoTecla <= 57) || codigoTecla == 8 )
	{
		// Si es un digito
		if( codigoTecla >= 48 && codigoTecla <= 57 )
		{
			// Obtener el numero de digitos que se pueden almacenar en el campo
			var numCaracteres = componente.getAttribute("numCaracteres");
			var len = componente.value.length;
			var cantidadDigitos = 0;
			
			// Cuenta cantidad de digitos
			for(i = 0 ; i < len; i++)
				if (strCheck.indexOf(componente.value.charAt(i))!=-1)
					cantidadDigitos++;

			// Si existe el caracter (.)
			if(wgrl_validarCaracter(componente, 46) != -1)
				cantidadDigitos++;
			
			// Si ambos tamanos son iguales es porque no se puede ingresar mas digitos
			if(numCaracteres == cantidadDigitos)
				return false;
		}
		
		// Verifica si contiene punto (.)
		posPunto = wgrl_validarCaracter(componente, 46);
		if(posPunto == -1) // Si la cadena no contiene el punto
		{
			// Si el caracter es backspace, entonces permitir borrar.
			if(codigoTecla == 8)
				cadena = componente.value.substring(0, componente.value.length - 1);
			else
				cadena = componente.value + String.fromCharCode(codigoTecla);
				
			componente.value = wgrl_ponerComas(cadena);
			return false;
		}
		else
		{
			// Si el caracter es backspace, entonces permitir borrar.
			if(codigoTecla == 8)
			{
				cadena = componente.value.substring(0, componente.value.length - 1);
				componente.value = wgrl_ponerComas(cadena);
				return false;
			}
			
			if( (componente.value.length - posPunto) > 2 )
				return false;
			
			cadena = componente.value + String.fromCharCode(codigoTecla);
			componente.value = wgrl_ponerComas(cadena);
			return false;
		}
	}
}

/*
	Funcion	: wgrl_ponerComas
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_ponerComas(cadena)
{
	var i;
	var j;
	var strCheck = '0123456789';
	var len = cadena.length;
	var len2;
	var aux = '';
	var SeparadorMilesimo = ',';
	var cadenaNueva = '';
	var existeMenos = false;
	var cadenaDecimal = undefined;
	
	// Buscar valor decimal
	var indicePuntoDecimal = cadena.indexOf(".");
	if(indicePuntoDecimal != -1)
	{
		cadenaDecimal = cadena.substring(indicePuntoDecimal, cadena.length);
		cadena = cadena.substring(0, indicePuntoDecimal);
	}
		
	for(i = 0 ; i < len; i++)
	{
		if (strCheck.indexOf(cadena.charAt(i))!=-1)
			aux += cadena.charAt(i);
		// Si existe el caracter (-)
		if(cadena.charAt(i) == '-')
			existeMenos = true;
	}
	
	len = aux.length;
    
        for (j = 0, i = len - 1; i >= 0; i--)
	{
            if (j == 3)
	    {
                cadenaNueva = SeparadorMilesimo + cadenaNueva;
                j = 0;
            }
	    
            cadenaNueva = aux.charAt(i) + cadenaNueva;
            j++;
        }
	
	if(existeMenos)
		cadenaNueva = '-' + cadenaNueva;
	if(cadenaDecimal != undefined)
		cadenaNueva = cadenaNueva + cadenaDecimal; 
	
	return cadenaNueva;
}

/*
	Funcion	: wgrl_quitarComas
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_quitarComas(cadena)
{
	var strCheck = '0123456789';
	var len = cadena.length;
	var i;
	var cadenaNueva = '';
	
	for(i = 0 ; i < len; i++)
	{
		if ( (strCheck.indexOf(cadena.charAt(i))!=-1) || (cadena.charAt(i) == '-') || (cadena.charAt(i) == '.'))
			cadenaNueva += cadena.charAt(i);
	}
	
	return cadenaNueva;
}

/*
	Funcion	: wgrl_quitarComas
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_validarCaracter(componente, codigoTecla)
{
	    var i;
	    var len = componente.value.length;
	    
	    for(i = 0; i < len; i++)
	    {
		if(componente.value.charAt(i) == String.fromCharCode(codigoTecla))
			return i;
	    }
	    
	    return -1;
}


/*
	Funcion	: wgrl_validarHora
	Pre	: 
	Post	:
	Descrip.: 
*/
function wgrl_validarHora(componente, e)
{
	var posCursor;
	var texto = "";
	var cadenaIzq;
	var cadenaDer;
	var cadena;
	
	var codigoTecla = e.keyCode;

	// Si es flecha izquierda o derecha
	if((codigoTecla == 37) || (codigoTecla == 39))
		return true;
	// Si es flecha arriba o abajo
	if((codigoTecla == 38) || (codigoTecla == 40))
	{
		posCursor = posicionCursor(componente);
		texto = componente.value;
		
		if((posCursor == 0) || (posCursor == 1))
		{
			cadena = texto.substring(0,2);
			cadenaDer = texto.substring(2,texto.length);
			
			// Flecha arriba
			if(codigoTecla == 38) 
			{
				if(cadena == 11)
					cadena = -1;
				
				cadena ++;
				cadena = cadena + "";
				if(cadena.length == 1)
					cadena = "0" + cadena;
			}
			else
			{
				if(cadena == 0)
					cadena = 12;
				
				cadena --;
				cadena = cadena + "";
				if(cadena.length == 1)
					cadena = "0" + cadena;
			}
			
			componente.value = cadena + cadenaDer;
			componente.selectionStart = posCursor; 
		}
		else if((posCursor == 3) || (posCursor == 4))
		{
			cadena = texto.substring(3,5);
			cadenaIzq = texto.substring(0,3);
			cadenaDer = texto.substring(5,texto.length);

			// Flecha arriba
 			if(codigoTecla == 38) 
			{
				if(cadena == 59)
					cadena = -1;
				
				cadena ++;
				cadena = cadena + "";
				if(cadena.length == 1)
					cadena = "0" + cadena;
			}
			else
			{
				if(cadena == 0)
					cadena = 60;
				
				cadena --;
				cadena = cadena + "";
				if(cadena.length == 1)
					cadena = "0" + cadena;
			}
			
			componente.value = cadenaIzq + cadena + cadenaDer;
			componente.selectionStart = posCursor; 
		}
		else if((posCursor == 6) || (posCursor == 7))
		{
			cadena = texto.substring(5,7);
			cadenaIzq = texto.substring(0,5);
			
			if(cadena == "am")
				cadena = "pm";
			else
				cadena = "am";
				
			componente.value = cadenaIzq + cadena;
			componente.selectionStart = posCursor; 
		}
		
		wgrl_AlCambiar(componente);
	}
	
	return false;
}

/*
	Funcion	: posicionCursor
	Pre	: 
	Post	:
	Descrip.: Devuelve posicion de cursor en componente text
*/
function posicionCursor(componente)
{
	var cursor = -1;
       
        // IE
        if (document.selection && (document.selection != 'undefined'))
        {
            var _range = document.selection.createRange();
            var contador = 0;
            while (_range.move('character', -1))
                contador++;
            cursor = contador;
        }
       // FF
        else if (componente.selectionStart >= 0)
            cursor = componente.selectionStart;
   
       return cursor;
}

/*
	Funcion	: wgrl_quitarFormatoHora
	Pre	: 
	Post	:
	Descrip.: Devuelve hora como entero
*/
function wgrl_quitarFormatoHora(cadena)
{
	var result;
	var horaEntero;
	var hora = cadena.substring(0,2);
	var minutos = cadena.substring(3,5);
	var amPm = cadena.substring(5,7);

	if(hora.substring(0,1) == "0")
		hora = hora.substring(1,2);
	
	if(amPm == "am")
		result = hora + minutos;
	else
	{
		horaEntero = parseInt(hora);
		horaEntero += 12;
		result = horaEntero + minutos;
	}
	
	return result;
}

/*
	Funcion	: wgrl_ponerFormatoHora
	Pre	: 
	Post	:
	Descrip.: Devuelve hora como entero
*/
function wgrl_ponerFormatoHora(cadena)
{
	// Completar cadena hora
	while(cadena.length < 4)
		cadena = "0" + cadena;
	
	var result;
	var horaEntero;
	var hora = cadena.substring(0,2);
	var minutos = cadena.substring(2,4);
	var amPm = "am";

	
	if(hora.substring(0,1) == "0")
		hora = hora.substring(1,2);
	
	horaEntero = parseInt(hora);
	
	if(horaEntero >= 12)
	{
		horaEntero -= 12;
		amPm = "pm";
	}
	
	hora = horaEntero + "";
	if(hora.length == 1)
		hora = "0" + hora;
	if(minutos.length == 1)
		minutos = "0" + minutos;

	return (hora + ":" + minutos + amPm);
}

function wgrl_LlamarLog()
{
	evt = new wevt( 0, "" );
	evts.push(evt);
	wajax_Enviar( urlServer );
	//wevt_CrearVentana( 'log', 'logven_Ejecutar', 0, 'login');
} 
