
	// Verifica el tipo de navegador netscape/mozilla
	var isNS4 = (navigator.appName=="Netscape")?1:0;


	// Admite la escritura de ciertos caracteres
	// patron: expresión regular que permite validar si se admite o no la pulsación.
	// patron = /[A-Za-z\s]/; 	// Se admiten letras mayúsculas A-Z, letras minúsculas a-z y el espacio \s
	// patron = /\d/; 					// Solo acepta números
	// patron = /\w/;						// Acepta números y letras
	// patron = /\D/;						// No acepta números
	// patron = /[A-Za-zñÑ\s]/;	// Se admiten letras mayúsculas A-Z, letras minúsculas a-z, el espacio y las letras ñ y Ñ
//	function AdmitirCaracteres(ObjEvento, StrPatron)
//	{
//			var IntCodTecla;
//			var ObjPatron = new String;
//
//			// ObjEvento.keyCode (explorer) y ObjEvento.which (netscape/mozilla) obtienen el valor ASCII de la tecla pulsada
//			IntCodTecla = (document.all) ? ObjEvento.keyCode : ObjEvento.which;
//
//			if (StrPatron == 'numericos')
//			{
//				patron = /[0-9\b]/;
//			}
//			if (StrPatron == 'nonumericos')
//			{
//				patron = /[^0-9]/;
//			}
//			if (StrPatron == 'mail')
//			{
//				patron = /[\w\b@.]/;
//			}
//			else if (StrPatron == 'alfabeticos')
//			{
//				patron = /[\sA-ZnNa-z]/;
//			}
//			else if (StrPatron == 'alfanumericos')
//			{
//				patron = /\w/;
//			}
//			else
//			{
//					// pasa pasa un patron personalizado, no está funcionando aún
//					// patron ="/"+StrPatron+"/";
//			}
//
//			// Se convierte el valor ASCII de la variable IntCodTecla a su correspondiente carácter
//			StrCaracter = String.fromCharCode(IntCodTecla);
//			// Si el carácter 'StrCaracter' coincide con el patrón, la función devuelve true, si no coincide devuelve false
//			return patron.test(StrCaracter);
//	}


	// Admite la escritura de ciertos caracteres
	function AdmitirCaracteres(ObjEvento, StrPatron)
	{
		var IntCodTecla;
		var BolValido = false;
		var IntBackSpace = 8, IntDelete = 127, IntGuion = 45, IntPunto = 46, IntDosPuntos = 58, IntSlash = 47, IntArroba = 64, IntGuionBajo = 95, IntSpace = 32;

		// ObjEvento.keyCode (explorer) y ObjEvento.which (netscape/mozilla) obtienen el valor ASCII de la tecla pulsada
		IntCodTecla = (document.all) ? ObjEvento.keyCode : ObjEvento.charCode;

		switch (StrPatron)
		{
			// números únicamente, acepta delete y backspace
			case "numericos":
				if (IntCodTecla != 0)
				{
					// 48:'0' - 57:'9'
					if ((IntCodTecla > 47 && IntCodTecla < 58) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace))
						return IntCodTecla;
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;


			// letras mayúsculas y minúsculas únicamente, acepta delete y backspace
			case "alfabeticos":
				if (IntCodTecla != 0)
				{
					// 65:'A' - 90:'Z' / 97:'a' - 122:'z'
					if ((IntCodTecla > 64 && IntCodTecla < 91) || (IntCodTecla > 96 && IntCodTecla < 123) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace))
						return IntCodTecla;
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;


			// numeros y letras mayúsculas y minúsculas únicamente únicamente, acepta delete y backspace
			case "alfanumericos":
				if (IntCodTecla != 0)
				{
					// 48:'0' - 57:'9' / 65:'A' - 90:'Z' / 97:'a' - 122:'z'
					if ((IntCodTecla > 47 && IntCodTecla < 58) || (IntCodTecla > 64 && IntCodTecla < 91) || (IntCodTecla > 96 && IntCodTecla < 123) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace))
					{
						return IntCodTecla;
					}
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;


			// numeros y letras mayúsculas y minúsculas únicamente únicamente, acepta espacio delete y backspace
			case "general":
				if (IntCodTecla != 0)
				{
					// 48:'0' - 57:'9' / 65:'A' - 90:'Z' / 97:'a' - 122:'z' / 45:'-' / 46:'.' / 32:' ' / 95:'_'
					// 128:'Ç' - 165:'Ñ'
					if ((IntCodTecla > 47 && IntCodTecla < 58) || (IntCodTecla > 64 && IntCodTecla < 91) || (IntCodTecla > 96 && IntCodTecla < 123) || (IntCodTecla > 128 && IntCodTecla < 165) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace) || (IntCodTecla == IntGuion) || (IntCodTecla == IntPunto) || (IntCodTecla == IntSpace) || (IntCodTecla == IntGuionBajo))
					{
						return IntCodTecla;
					}
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;


			// numeros y letras mayúsculas y minúsculas únicamente, acepta guión, punto, arroba, guión bajo, delete y backspace
			case "mail":
				if (IntCodTecla != 0)
				{
					// 48:'0' - 57:'9' / 65:'A' - 90:'Z' / 97:'a' - 122:'z' / 45:'-' / 46:'.' / 64:'@' / 95:'_'
					if ((IntCodTecla > 47 && IntCodTecla < 58) || (IntCodTecla > 64 && IntCodTecla < 91) || (IntCodTecla > 96 && IntCodTecla < 123) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace) || (IntCodTecla == IntGuion) || (IntCodTecla == IntPunto) || (IntCodTecla == IntArroba) || (IntCodTecla == IntGuionBajo))
					{
						return IntCodTecla;
					}
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;


				// numeros y letras mayúsculas y minúsculas únicamente, acepta guión, punto, dos puntos, back slash, guión bajo, delete y backspace
				case "url":
				if (IntCodTecla != 0)
				{
					// 48:'0' - 57:'9' / 65:'A' - 90:'Z' / 97:'a' - 122:'z' / 45:'-' / 46:'.' / 47:':' / 58:'/' / 95:'_'
					if ((IntCodTecla > 47 && IntCodTecla < 58) || (IntCodTecla > 64 && IntCodTecla < 91) || (IntCodTecla > 96 && IntCodTecla < 123) || (IntCodTecla == IntDelete) || (IntCodTecla == IntBackSpace) || (IntCodTecla == IntGuion) || (IntCodTecla == IntPunto) || (IntCodTecla == IntDosPuntos) || (IntCodTecla == IntSlash) || (IntCodTecla == IntGuionBajo))
					{
						return IntCodTecla;
					}
					else
						BolValido = false;
				}
				else
					BolValido = true;
				break;	
		}
		return BolValido;
	}


	// Muestra en el campo "countfield" el número de caracteres que se han digitado en el campo "field", permite escribir el número de 
	// caracteres especificados en "maxlimit"
	function textCounter(field, countfield, maxlimit)
	{
		if (field.value.length > maxlimit) // if too long...trim it!
			field.value = field.value.substring(0, maxlimit);
		// otherwise, update 'characters left' counter
		else 
		countfield.value = maxlimit - field.value.length;
	}


	// Muesta un mensaje de alerta cuando se supera el máximo de caracteres permitido 'IntMaxCars' en el objeto
	// text o textarea pasado como parámetro en 'ObjText'
	function ContarCars(ObjText, IntMaxCars, ObjEvento)
	{
		var IntCodTecla;

		// IntCodTecla = (document.all) ? ObjEvento.keyCode : ObjEvento.which;
		IntCodTecla = (document.all) ? ObjEvento.keyCode : ObjEvento.charCode;

		if (IntCodTecla > 31 && IntCodTecla < 128)
		{
			if (ObjText.value.length >= IntMaxCars)
			{
				alert("Este campo permite un maximo de "+IntMaxCars+" caracteres.");
				ObjText.value = ObjText.value.substring(0, IntMaxCars);
				return false;
			}
		}
	}


	// 
	function regresar(ObjFrm ,StrURL)
	{
		ObjFrm.action = StrURL;
		return true;
	}


	// Submit form y abre el archivo StrUrl
	function EnviarForm(ObjForm, StrUrl)
	{
		if (typeof(ObjForm) != 'object') {ObjForm = document.getElementById(ObjForm);}

		ObjForm.action = StrUrl;
		ObjForm.submit();
	}


	// Selecciona todos los elmentos de la lista ObjSel
	function SelecTodo(ObjForm, ObjSel)
	{
		var ObjLista = ObjSel;
		//ObjForm.action = StrUrl;

		for (i = 0; i < ObjLista.length; i++) 
			ObjLista.options[i].selected = true;
		//ObjForm.submit();
	}


	// Sube una posición al elemento seleccionado en la lista de selección ObjSel
	function Subir(ObjSel) 
	{
		var ObjLista = ObjSel;

		IntIndex = ObjLista.selectedIndex;
		if (IntIndex > 0)
		{
			var ObjOrigen = new Option(ObjLista.options[IntIndex].text, ObjLista.options[IntIndex].value);
			var ObjDestino = new Option(ObjLista.options[IntIndex - 1].text, ObjLista.options[IntIndex - 1].value);
			ObjLista.options[IntIndex] = ObjDestino;
			ObjLista.options[IntIndex - 1] = ObjOrigen;
			ObjLista.options[IntIndex - 1].selected = true;
		}
	}


	// Baja una posición al elemento seleccionado en la lista de selección ObjSel
	function Bajar(ObjSel)
	{
		var ObjLista = ObjSel;

		IntIndex = ObjLista.selectedIndex;
		if ((IntIndex < (ObjLista.length - 1)) && (IntIndex >= 0))
		{
			var ObjOrigen = new Option(ObjLista.options[IntIndex].text, ObjLista.options[IntIndex].value);
			var ObjDestino	= new Option(ObjLista.options[IntIndex + 1].text, ObjLista.options[IntIndex + 1].value);
			ObjLista.options[IntIndex] = ObjDestino;
			ObjLista.options[IntIndex + 1] = ObjOrigen;
			ObjLista.options[IntIndex + 1].selected = true;
		}
	}


	// Oculta o muestra el elemento referenciado por el argumento 'id'
	function cambiarDisplay(id)
	{
			if (!document.getElementById)
				return false;
			
			ObjElemento = document.getElementById(id);
			if (ObjElemento.style.display != "none")
			{
				ObjElemento.style.display = "none";	//ocultar ObjElemento
			}
			else
			{
				ObjElemento.style.display = "";			//mostrar ObjElemento
			}
	}


	// permite visualizar varias imagenes dentro del contenido de un select en una imagen
	function previewImage( list, image, base_path )
	{
		form = document.Form;
		srcList = eval( "form." + list );
		srcImage = eval( "document." + image );
		var srcOption = srcList.options[(srcList.selectedIndex < 0) ? 0 : srcList.selectedIndex];
		var fileName = srcOption.text;
		var fileName2 = srcOption.value;
		if (fileName.length == 0 || fileName2.length == 0) {
			srcImage.src = 'images/blank.gif';
		} else {
			srcImage.src = base_path + fileName2;
		}
	}


	// retorna true si ninguna de las opciones del radio está seleccionada, si alguna está seleccionada retorna false
	function RadioVacio(ObjRadio)
	{
		var Vacio = true;
		for (IntIndex = 0; IntIndex < ObjRadio.length; IntIndex++)
		{
			if (ObjRadio[IntIndex].checked == true)
			{
				Vacio = false;
				break;
			}
		}
		return Vacio;
	}