function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function P7_hideDiv(evt) { //v1.2 by PVII
 var b,relT,mT=false; 
 if(document.layers){b=evt.target;if(b.p7aHide){
  b.visibility="hidden";}else{routeEvent(evt);}
 }else if(document.all&&!window.opera){b=event.srcElement;
  while(b!=null){if(b.tagName=="DIV" && b.p7ahD){mT=true;break;}b=b.parentElement;}
  if(!b.contains(event.toElement)){b.style.visibility="hidden";}
 }else if(document.getElementById){b=evt.currentTarget;relT=evt.relatedTarget;
  while(relT!=null){if(b==relT){mT=true;break;}
  relT=relT.parentNode;}if(!mT){b.style.visibility="hidden";}}
}

function P7_autoHide() { //v1.2 by PVII
 var i,g,args=P7_autoHide.arguments;
 for(i=0;i<args.length;i++){if((g=MM_findObj(args[i]))!=null){
  g.p7aHide=true;if(document.layers){
  g.captureEvents(Event.MOUSEOUT);}g.onmouseout=P7_hideDiv;g.p7ahD=true;}}
}


/*****************************************************************************************
'Descripcion:
'		Recibe una cadena y la retorna sin espacios vacíos a la derecha, a la izquierda
'		ó a ámbos lados, según se especifique
'.........................................................................................
'Parametros:
'		varText: Texto al cual se le quieren eliminar los espacios en blanco
'		side: Constante que indica de qué lado se le quieren eliminar los espacios, así:
'			TRIM_LEFT --> Eliminar espacios a la izquierda
'			TRIM_RIGHT --> Eliminar espacios a la derecha
'			TRIM_BOTH --> Eliminar espacios a ambos lados
*****************************************************************************************/
var TRIM_LEFT  = 0x0001;
var TRIM_RIGHT = 0x0002;
var TRIM_BOTH  = TRIM_LEFT | TRIM_RIGHT;

function strTrim( varText, side )
	{
	var i = 0;
	var j = varText.length - 1;

	if( side & TRIM_LEFT )
		{
		for( i = 0; i < varText.length; i++ )
			{
			if( varText.substring( i, i+1 ) != " " && varText.substring( i, i+1 ) != "\t")
				{
				break;
				}
			}
		}

	if( side & TRIM_RIGHT )
		{
		for( j = varText.length - 1; j >= 0; j-- )
			{
			if( varText.substring( j, j+1 ) != " " && varText.substring( j, j+1 ) != "\t")
				{
				break;
				}
			}
		}

	if( i <= j )
		return( varText.substring( i, (j+1) ) );
	else
		return("");
	}

/*****************************************************************************************
'Descripcion:
'		Funcion para validar que el texto ingresado en un campo texto,
'		corresponda a una dirección válida de correo (e-mail)
'.........................................................................................
'Parametros:
'		Campo:		Control con el valor a validar
'		Mensaje:	Cadena con el nombre descriptivo del control, usada para mostrar
'					un mensaje personalizado.
'.........................................................................................
'Validaciones:
'		- Los caracteres que contiene la cuenta de correo deben estar dentro de la siguiente lista
'			"0123456789abcdefghijlkmnopqrstuvwxyz@.-_"
'		- El primer y último caracter no pueden ser alguno de los caracteres "@.-_"
'		- Los caracteres anterior y posterior a la arroba (@), no pueden ser "@.-_"
'		- La cadena NO puede contener más de una arroba (@)
'		- La cadena debe contener al menos UNA arroba (@)
'		- La cadena NO puede contener espacios vacíos (" ")
'		- Después del último punto, debe haber AL MENOS 2 caracteres
*****************************************************************************************/
function ValidarEmail(Campo, Mensaje)
	{
	var perfect = true;

	with (Campo)
		{
		// Validar que los caracteres que contiene la cuenta de correo
		// esten dentro de los caracteres de la siguiente lista
		var car_validos = "0123456789abcdefghijlkmnopqrstuvwxyz@.-_"
		var car_otros = "@.-_";

		for (var i=0; i < value.length; i++) {
			var ch = value.substring(i, i+1);
			if (car_validos.indexOf(ch) == -1) perfect = false;
		}

		apos = value.indexOf("@");
		lastpos = value.length-1;

		// Validar primer y ultimo caracter
		var car1 = value.substring(0, 1);
		var car2 = value.substring(lastpos, lastpos+1);
		if ((car_otros.indexOf(car1) != -1) || (car_otros.indexOf(car2) != -1)) perfect = false;

		// Validar anterior y siguiente caracter despues de "@"
		car1 = value.substring(apos-1, apos);
		car2= value.substring(apos+1, apos+2);
		if ((car_otros.indexOf(car1) != -1) || (car_otros.indexOf(car2) != -1)) perfect = false;

		// Buscar si existe otro simbolo "@" en el campo
		var subcadena = value.substring(apos + 1, 100);
		a2pos = subcadena.indexOf("@");
		spacepos = value.indexOf(" ");
		dotpos = value.lastIndexOf(".");

		//if (apos < 1 || a2pos != -1 || dotpos - apos < 2 || lastpos - dotpos > 3 || lastpos - dotpos < 2 || spacepos != -1) {
		if (apos < 1 || a2pos != -1 || lastpos - dotpos < 2 || spacepos != -1) perfect = false;
		}

	if (!perfect) 
		{
		alert('\nEl valor de ' + Mensaje + ' E-Mail no es válido.\n\nPor favor corrija la información.');
		Campo.focus();
		return false;
		}

	return true;

	}
	
	
/*-------------------------------------------
   Función que valida que los datos de validacion
   de login sean validos
   ------------------------------------------*/ 
function validarLogin()
	{
	var validos = "abcdefghijklmnñopqrstuvwxyz0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
	var flagU = 1;
	var flagP = 1;
	var temp;
	
	//Validar Caracteres Validos en Usuario
	for (var i=0; i<document.frmlogin.txtUsername.value.length; i++) {
	temp = "" + document.frmlogin.txtUsername.value.substring(i, i+1);
	if (validos.indexOf(temp) == "-1") flagU = 0;
	}
	if (flagU == 0) {
		alert("Verifique su Usuario ingresado. Sólo letras y números son permitidos.");
		document.frmlogin.txtUsername.focus();
		return false;
	}
	
	// Validar Usuario
	Control = document.frmlogin.txtUsername;
	Dato = strTrim(Control.value,TRIM_BOTH);
	if (Dato.length == 0)
		{
		alert("Por favor ingrese su Usuario");
		Control.focus();
		return false;
		}

	//Validar Caracteres Validos en Password
	for (var i=0; i<document.frmlogin.txtPassword.value.length; i++) {
	temp = "" + document.frmlogin.txtPassword.value.substring(i, i+1);
	if (validos.indexOf(temp) == "-1") flagP = 0;
	}
	if (flagP == 0) {
		alert("Verifique su Contraseña ingresada. Sólo letras y números son permitidos.");
		document.frmlogin.txtPassword.focus();
		return false;
	}
	
	// Validar Clave
	Control = document.frmlogin.txtPassword;
	Dato = strTrim(Control.value,TRIM_BOTH);
	if (Dato.length == 0)
		{
		alert("Por favor ingrese su Clave");
		Control.focus();
		return false;
		}
	}
	

	
/*-------------------------------------------
   Función que selecciona todo el listado de
   la pantalla de los check de cambiar estado.
   ------------------------------------------*/  
   function seleccionar_activos()
   {
	for (i = 0; i < document.frmlistado.elements.length; i++)
	{
		nombre = document.frmlistado.elements[i].name;
		
		if (document.frmlistado.elements[i].type == "checkbox" &&
				nombre.substring(0,9) == "chkactivo" )
		{
			if(document.frmlistado.elements[i].checked)
			{ 
				document.frmlistado.elements[i].checked = false;
			}
			else
			{
				document.frmlistado.elements[i].checked = true;
			}
		}
	}
}  
/*-------------------------------------------
   Función que selecciona todo el listado de
   la pantalla de los check de borrar.
   ------------------------------------------*/  
function seleccionar_borrar()
{
	for (i = 0; i < document.frmlistado.elements.length; i++)
	{
		nombre = document.frmlistado.elements[i].name;
		
		if (document.frmlistado.elements[i].type == "checkbox" &&
				nombre.substring(0,9) == "chkborrar" )
		{
			if(document.frmlistado.elements[i].checked)
			{ 
				document.frmlistado.elements[i].checked = false;
			}
			else
			{
				document.frmlistado.elements[i].checked = true;
			}
		}
	}
}

/*-----------------------------------------------
   Función que envía un mensaje de confirmación
   cuando se van a borrar usuarios.
   ----------------------------------------------*/  
function validarBorrar()
{
	z = 0;

	for (i = 0; i < document.frmlistado.elements.length; i++)
	{
		nombre = document.frmlistado.elements[i].name;
		
		if (document.frmlistado.elements[i].type == "checkbox" &&
				nombre.substring(0,9) == "chkborrar" )
		{
			if(document.frmlistado.elements[i].checked)
			{
				z++;
			}
		}
	}
	
	if (z > 0)
	{
		if (window.confirm("Esta seguro que desea borrar esta(s) "+z+" opción(es)?"))
		{
			return true;
		}
		else
		{
			return false;
		}
	} else {
		window.alert("Debe seleccionar por lo menos una opción a borrar");
		return false;
	}
}

/*-------------------------------------------
   Hace un llamado a la función de validar
   borrar.
   ------------------------------------------*/  
function validarActualizar()
{
	borrar = validarBorrar();
	if (!borrar){
		return false;
	}	
	return true;
}

/*----------------------------------------------
   Validar campos para no ingresen caracteres SQL.
   ------------------------------------------*/  


function ValidarCampoForma(forma)
	{
		
			//alert(forma);
			var validos = ",?áéíóú#:-/abcdefghijklmnñopqrstuvwxyz0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ\@. "
			var flagU = 1;
			var temp;
			var control;
			
			
		num_controles = eval("document." +forma +".elements.length");
		//alert(num_controles);
		
		for (var i = 0; i < num_controles; i++)
		{
			if (eval("document." +forma +".elements[i].type")=="text" || eval("document." +forma +".elements[i].type")=="password")
			{
				control = eval("document." +forma +".elements[i].name");
				//alert(control);
				longitud = eval("document." +forma+".elements[i].value.length");
				//alert(longitud);
				
				for (var j=0; j<longitud; j++) {
				
				temp = "" + eval("document." +forma+".elements[i].value.substring(j, j+1)");
				//alert(temp);
				if (validos.indexOf(temp) == "-1") flagU = 0;
				}
				
				if (flagU == 0) 
				{
					alert("Sólo letras y números son permitidos.");
					eval("document." + forma +".elements[i].focus()");
					return false;
				}	
			}
			
			// Palabras conocidas peligrosas
			var pal_conocidas = new Array();
			
			pal_conocidas[0] = "select";
			pal_conocidas[1] = "insert";
			pal_conocidas[2] = "update";
			pal_conocidas[3] = "delete";
			pal_conocidas[4] = "drop";
			pal_conocidas[5] = "--";
			pal_conocidas[6] = "'";
			
			
			valor = eval("document." +forma+".elements[i].value");
			
			
			for (var k = 0; k < pal_conocidas.length; k++)
			{
				//alert(InStr(valor,pal_conocidas[k]));
				if (InStr(valor,pal_conocidas[k])==1)
				{
					alert("Palabra reservada");
					eval("document." + forma +".elements[i].focus()");
					return false;
				}
			}
		}
		return true;
	}	
	
	function InStr(String1, String2)
	{
		var a = 0;

		if (String1 == null || String2 == null)
		return (false);

		String1 = String1.toLowerCase();
		String2 = String2.toLowerCase();

		a = String1.indexOf(String2);
		if (a == -1)
			return 0;
		else
			return a + 1;
	}
