


/*!! VARIABLES GLOBALES !!*/


var libstd = new LibStd();

var active = true;
var popupWindow;


/* DDP impedir reenvio form */
var bolFormEnviado = false;
var enlacePulsado = null;

function LibStd_getValor(lit)
{
  return(this.lit);
}

function LibStd_setValor(lit, valor)
{
  if (valor != null || valor != "")
  {
    eval("this." + lit + "= '" + valor + "'");
  }
}

function LibStd()
{
  this.campo = "El campo ";
  this.duplicado = " esta duplicado";
  this.informar = "No se ha informado de nigun campo, " + 
                  "Por Favor, Introduzca algun dato en el formulario";
  this.notnull = " es OBLIGATORIO";
  this.novalido = " no es valido";
  this.guardar = "¿desea aceptar los cambios?";
  this.limpiar = "¿desea cancelar los cambios?";
  this.entre = " debe estar entre ";
  this.error = "ERROR: ";
  this.tipo = " tipo de numero ";
  this.noconocido =" DESCONOCIDO";
  this.noexiste = " no existe ";
  this.y = " y ";
  this.fecinifin = "La fecha fin debe se superior a la fecha de inicio";
  this.fechoy = " debe ser superior a la fecha actual";
  this.cambio = " Desea aplicar los cambios antes de paginar ?"
  /*== ==*/
  this.getValor = LibStd_getValor;
  this.setValor = LibStd_setValor;
  this.win = null;
}

/*== VALIDACIONES ==*/
/*===================================================================
 Funcion: validar_cars
 PUBLIC
 Argumentos:
 Descripcion: 
 Uso: En <INPUT type="text"
                onKeyPress="return validar_cars(event, this, 'NUMBER/DATE'[, 'INT/DEC'])">
**
 25/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_cars(event, campo, tipo, subtipo)
{	
  var key = 0;
  var car = "";
  var cars_num = "0123456789";
  var cars_sig = "+-";
  var cars_dec = ",.";
  var cars_fec = " .-/*+";
  var BACK = 8;
  var ENTER = 13;
  var ESC = 27;
  var TAB = 9;
  var AYU = 63;
    
  /*== iExplorer ==*/
  if (window.event)
  {	
    key = window.event.keyCode;
  }
  else
  /*== Netscape 4.0 ==*/
  if (event)
  {	  
    key = event.which;
  }
  else
  {	
    return true;
  }  
  
  car = String.fromCharCode(key);
  
  /*== Permitir caracteres de control ==*/
  if ((key==null) || (key==0) || (key==BACK) || 
      (key==TAB) || (key==ENTER) || (key==ESC))
  {
	//campo.resultado = true;	
    return true;
  }  
 
  if (tipo.toUpperCase() == "NUMBER")
  {
    if (subtipo.toUpperCase() == "INT")
    {
      /*== cifras y signos ==*/
/*!! VGZ No se validan signos !!*/
/*
      if (cars_num.indexOf(car)<0 &&
          cars_sig.indexOf(car)<0)
*/
      if (cars_num.indexOf(car)<0)
      {
        if (window.event)
        {
          window.event.returnValue = 0;
        }
        campo.resultado = false;
        return false;
      }
    }
    else
    if (subtipo.toUpperCase() == "DEC" || subtipo.toUpperCase() == "FLOAT")
    {	    
      /*== cifras, signos, decimales ==*/
      if (cars_num.indexOf(car)<0 &&
          cars_sig.indexOf(car)<0 &&
          cars_dec.indexOf(car)<0)
      {	      
        if (window.event)
        {
          window.event.returnValue = 0;
        }        
        campo.resultado = false;
        return false;
      } 
    }
  }
  else
  if (tipo.toUpperCase() == "DATE")
  {
      /*== cifras, separadores ==*/
      if (cars_num.indexOf(car)<0 &&
          cars_fec.indexOf(car)<0)
      {
        if (window.event)
        {
          window.event.returnValue = 0;
        }
        campo.resultado = false;
        return false;
      }
  }  
  //campo.resultado = true;
  return true;
}/*== validar_cars ==*/

/*===================================================================
 Funcion: validar_campo
 PUBLIC
 Argumentos:
 Descripcion: 
 Uso: En <INPUT type="text" 
                onChange="validar_campo(this,'NUMBER/DATE'[,'INT/DEC',valmin,valmax])">
**
 25/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_campo(campo, tipo, subtipo, valmin, valmax)
{	
  var campoTemp = campo.value;  
  /*== primero validar notnull ==*/
  if (!validar_nonulo(campo))
  {	
	campo.resultado = false;
    return false;
  }
  /*== despues validar tipos ==*/
  if (tipo.toUpperCase() == "NUMBER")
  {
    if (!validar_numero(campo, subtipo)) 
    {	  
	  campo.resultado = false;  
      return false;
    }    
    if (valmin != null || valmax != null)
    {
	  campoTemp = (campoTemp).replace(/,/,'.');
      if (parseFloat(campoTemp) < parseFloat(valmin) ||
          parseFloat(campoTemp) > parseFloat(valmax)
         )
      {		    
        alert(libstd.campo + getprompt(campo).toUpperCase()+ libstd.entre +valmin + libstd.y + valmax);        
        campo.value = "";
        campo.resultado = false;       
        return false;
      }
      
    }
  }
  else
  if (tipo.toUpperCase() == "DATE")
  {
    if (!validar_fecha(campo))
    {
	   campo.resultado = false;
       return false;
    }        
    if (valmin != null || valmax != null)
    {
      /*!! FALTA: comparacion de fechas !!*/
      if (false)
      {
        alert(libstd.campo + getprompt(campo).toUpperCase()+ libstd.entre + valmin + libstd.y + valmax);
        campo.value = "";
        campo.resultado = false;
        return false;
      }
    }
  }
  else
  if (tipo.toUpperCase() != "TEXT")
  {
     alert(libstd.error + libstd.campo + getprompt(campo).toUpperCase() + tipo.toUpperCase() + libstd.novalido);
     campo.resultado = false;
     return false;
  }
  //campo.resultado = true;
  return true;   
}/*=== validar_campo ===*/


/*===================================================================
 Funcion: validar_nonulo
 PRIVATE
 Argumentos:
 Descripcion: Comprueba si un campo es nulo
 Control de Cambios:

 28/10/2002 IPS 1.01    Añadida opcion _notsendnull para validar campos no informados
 26/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_nonulo(campo)
{  
  /*!! NO se puede acceder a campo.class (Netscape), (iE=classname) !!*/
  if ((campo.name.toLowerCase().indexOf("_notnull") >= 0) ||
      (campo.name.toLowerCase().indexOf("_notsendnull") >= 0))
  {
    /*== si campo text(/area) nulo o lista no seleccionada ==*/
    if ( ( (campo.type.toLowerCase() == "text" || campo.type.toLowerCase() == "textarea") &&
            es_blanco(campo)
         )
        || (campo.type.toLowerCase() == "select-one" && campo.value.length == 0)        
       )
    {
      alert(libstd.campo + getprompt(campo).toUpperCase() + libstd.notnull);
      campo.focus();
		if ((campo.type.toLowerCase() != "select-one")&&(campo.type.toLowerCase() != "select-multiple"))  campo.select();
      //campo.resultado = false;
      return false;
    }
  }
  //campo.resultado = true;
  return true;
}/*=== validar_nonulo ===*/


/*===================================================================
 Funcion: es_blanco
 PRIVATE
 Argumentos:
 Descripcion: Comprueba si un campo es nulo
 Control de Cambios:

 12/06/2001	VGZ	1.01	Creacion
====================================================================*/
function es_blanco(campo)
{
  /*== SIEMPRE ELIMINAR ESPACIOS POR EL FINAL ==*/
  return (rtrim(campo) == "");
}/*=== es_blanco ===*/


/*===================================================================
 Funcion: rtrim
 PRIVATE
 Argumentos:
 Descripcion: Elimina espacios en blanco al final de una cadena
 Salida: Cadena de entrada MODIFICADA: sin espacios al final
 Control de Cambios:

 22/01/2003	VGZ	1.02	Cambios
		- No se modifica el valor del campo si contiene algun
		  caracter distinto de blanco.
 12/06/2001	VGZ	1.01	Creacion
====================================================================*/
function rtrim(campo)
{
  var fin = campo.value.length-1;
  var i;

  for (i=campo.value.length-1; i>=0; i--)
  {
    if (campo.value.charAt(i) != " ")
    {
      fin = i;
      break;
    }
  }
  if (i < 0)
  {
    campo.value = "";
  }

  return campo.value;
}/*=== rtrim ===*/

/*===================================================================
 Funcion: validar_num_decimal
 PRIVATE
 Argumentos: campo:campo a validar
             tipo: 
             subtipo:
             valmin
             valmax
             ndecmin: número mínimo de decimales
             ndecmax: número ,áximo de decimales.
 
 tipo: DEC/FLOAT
 
 Descripcion: Comprueba que el campo sea un numero puro, que léxicamente es
        numero decimal y que el número de decimales se encuentra entre los 
        límites especificados.
        
 Control de Cambios:

 15/12/2004	VGZ	1.01	Creacion
====================================================================*/
function validar_num_decimal(campo,tipo,subtipo,valmin,valmax,ndecmin,ndecmax) 
{  
  

  
  if (!validar_campo(campo, tipo, subtipo, valmin, valmax))
  {
    //alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
    campo.value = "";
    campo.focus();
    campo.select();
    campo.resultado=false;
    return false;
  }
  
  if (campo.value.indexOf('.') == -1)
  {
    if (campo.value.indexOf(',') == -1)
    {
      alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
      campo.value = "";
      campo.focus();
      campo.select();
      campo.resultado = false;
      return false;
    } 
    else
    {
      if (!((campo.value.length-campo.value.indexOf(',')-1) >= ndecmin &&  (campo.value.length -campo.value.indexOf(',')-1) <= ndecmax))
      {
        alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido );
        campo.value = "";
        campo.focus();
        campo.select();
  	campo.resultado = false;			
        return false;
      }
    }
  }
  else
    {
      if (!((campo.value.length-campo.value.indexOf('.')-1) >= ndecmin && (campo.value.length-campo.value.indexOf('.') -1) <= ndecmax))
      {
        alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
        campo.value = "";
        campo.focus();
        campo.select();
		  campo.resultado = false;
        return false;
      }
    }

//campo.resultado = true;
return true;
}/*=== validar_numero ===*/

/*===================================================================
 Funcion: validar_numero
 PRIVATE
 Argumentos:
 tipo: INT, DEC/FLOAT
 Descripcion: Comprueba que el campo sea un numero puro
 Control de Cambios:

 11/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_numero(campo,tipo) 
{  
  if (!es_numero(campo,tipo))
  {
    alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
    campo.value = "";
    campo.focus();
    campo.select();
//    campo.resultado = false;
    return false;
  }
//campo.resultado = true;
return true;
}/*=== validar_numero ===*/

/*===================================================================
 Funcion: es_numero
 PRIVATE
 Argumentos:
 Descripcion:
 Control de Cambios:

 11/06/2001	VGZ	1.01	Creacion
====================================================================*/
function es_numero(campo,tipo) 
{  
  var valido = "";
  var ok = "si";
  var temp = "";
  var i;
  var j = 0;
  var k = 0;
  var decim = false;

  if (tipo.toUpperCase() == "INT")
  {
    valido = "0123456789-"
  }
  else
  if (tipo.toUpperCase() == "DEC" || tipo.toUpperCase() == "FLOAT")
  {
    valido = "0123456789.,-"
  }
  else
  {
    alert(libstd.error + libstd.tipo + tipo.toUpperCase() + libstd.noconocido + libstd.numvalido);
    //campo.resultado = false;
    return false;
  }

  for (i=0; i<campo.value.length; i++) 
  {
    temp = campo.value.substring(i, i+1);

    if(temp=='-' && i > 0)
    {
      ok = "no"
      break;
    }
    
    if (((temp == ".") || (temp == ",")) && (i == 0))
    {
      ok = "no";
      break;
    }
	
	 if (temp == "." || temp == ",")
	 {
		j = j +1;
	 }
  
    /*!! RBC: o < 0 !!*/
    if (valido.indexOf(temp) == "-1") 
    {
      ok = "no";
      break;
    }

    
    if (j > 1)
    {
      ok = "no";
      break;
    }
  }

  if (ok == "no") 
  {
	//campo.resultado = false;
    return false;
  }
//campo.resultado = true;
return true;
}/*=== funcion es_numero ===*/


/*===================================================================
 Funcion: validar_fecha
 PRIVATE
 Argumentos:
 Descripcion: Comprueba que el intervalo de fechas sea correcta
 Control de Cambios:

 11/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_fecha(campo)
{	
  if (!es_fecha(campo))
  {
    alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
    campo.value = "";
    campo.focus();
    campo.select();
    //campo.resultado = false;
    return false;
  }
  //campo.resultado = true;
return true;
}/*=== validar_fecha ===*/


/*===================================================================
 Funcion: es_fecha
 INTERNA: solo la utiliza validar_fecha()
 Argumentos:
 Descripcion: Comprueba que el intervalo de fechas sea correcta
 Control de Cambios:

 11/06/2001	VGZ	1.01	Creacion
====================================================================*/
function es_fecha(fecha)
{
  /*== estilo fecha US (MM-DD-AA), EU (DD-MM-AA) ==*/
  var strEstiloFecha = "EU";
  var strFecha = fecha.value;
  var strFechaArray;
  var strDia;
  var strMes;
  var strYear;
  var intDia;
  var intMes;
  var intYear;
  var booEncontrado = false;
  var strSeparadorArray = new Array("-"," ","/",".");
  var error = 0;
  var strMesArray = new Array(12);
  var cdia = "";
  var intElementoNr;
  var i;

  strMesArray[0] = "01";
  strMesArray[1] = "02";
  strMesArray[2] = "03";
  strMesArray[3] = "04";
  strMesArray[4] = "05";
  strMesArray[5] = "06";
  strMesArray[6] = "07";
  strMesArray[7] = "08";
  strMesArray[8] = "09";
  strMesArray[9] = "10";
  strMesArray[10] = "11";
  strMesArray[11] = "12";

  /*!! RBC: o == 0 !!*/
  if (strFecha.length < 1)
  {
    return true;
  }

  for (intElementoNr = 0; intElementoNr < strSeparadorArray.length; intElementoNr++)
  {
    if (strFecha.indexOf(strSeparadorArray[intElementoNr]) != -1)
    {
      strFechaArray = strFecha.split(strSeparadorArray[intElementoNr]);

      if (strFechaArray.length != 3)
      {
        error = 1;
        return false;
      }
      else
      {
        strDia = strFechaArray[0];
        strMes = strFechaArray[1];
        strYear = strFechaArray[2];        
      }
      if (strYear.length<2){
			return false;
		}

      booEncontrado = true;
    }
  }

  if (booEncontrado == false)
  {
    if (strFecha.length>5)
    {
      strDia = strFecha.substr(0, 2);
      strMes = strFecha.substr(2, 2);
      strYear = strFecha.substr(4);      
    }
    else
    {
      error = 11;
      return false;
    }
  }

/*!! RBC: FALTA TRATAMIENTO Y2K !!*/
  if (strYear.length == 2)
  {
    strYear = '20' + strYear;
  }
  if (strYear.length == 3)
  {	  
	  return false;
  }

  if (strEstiloFecha == "US")
  {
    strTemp = strDia;
    strDia = strMes;
    strMes = strTemp;
  }

  intDia = parseInt(strDia, 10);

  if (isNaN(intDia))
  {
    error = 2;
    return false;
  }

  intMes = parseInt(strMes, 10);

  if (isNaN(intMes))
  {
    for (i=0; i<12; i++)
    {
      if (strMes.toUpperCase() == strMesArray[i].toUpperCase())
      {
        intMes = i+1;
        strMes = strMesArray[i];
        i = 12;
      }
    }

    if (isNaN(intMes))
    {
      error = 3;
      return false;
    }
  }

  intYear = parseInt(strYear, 10);  
  if (intYear==0){	  
	  return false;
  }	  
  if (isNaN(intYear))
  {
    error = 4;
    return false;
  }

  if (intMes>12 || intMes<1)
  {
    error = 5;
    return false;
  }

  if ((intMes == 1 || intMes == 3 || intMes == 5 || intMes == 7 || intMes == 8 || intMes == 10 || intMes == 12) && (intDia > 31 || intDia < 1))
  {
    error = 6;
    return false;
  }

  if ((intMes == 4 || intMes == 6 || intMes == 9 || intMes == 11) && (intDia > 30 || intDia < 1))
  {
    error = 7;
    return false;
  }

  if (intMes == 2)
  {
    if (intDia < 1)
    {
      error = 8;
      return false;
    }
 
    if (es_bisiesto(intYear))
    {
      if (intDia > 29)
      {
        error = 9;
        return false;
      }
    }
    else
    {
      if (intDia > 28)
      {
        error = 10;
        return false;
      }
    }
  }

  if (strEstiloFecha == "US")
  {
    fecha.value = strMesArray[intMes-1] + " " + intDia+" " + strYear;
  }
  else
  {
    if (intDia < 10)
    {
      cdia = "0" + intDia; 
    }
    else
    {
      cdia = intDia;
    }
  
    fecha.value = cdia + "/" + strMesArray[intMes-1] + "/" + strYear;
    
  }

  return true;
}/*=== es_fecha ===*/


/*===================================================================
 Funcion: es_bisiesto
 PRIVATE solo la utiliza validar_fecha()
 Argumentos:
 Descripcion: Comprueba que el intervalo de fechas sea correcta
 Control de Cambios:

 11/06/2001	VGZ	1.01	Creacion
====================================================================*/
function es_bisiesto(intYear)
{
  if (intYear % 100 == 0)
  {
    if (intYear % 400 == 0)
    { 
      return true; 
    }
  }
  else
  {
    if ((intYear % 4) == 0)
    { 
      return true; 
    }
  }

  return false;
}/*=== es_bisiesto ===*/


/*== VALIDACIONES ==*/


/*===================================================================
 Funcion: reset_forms
 PUBLIC
 Argumentos:
 Descripcion: Resetea todos los forms de la pantalla
 Control de Cambios:

 28/06/2001	VGZ	1.01	Creacion
====================================================================*/
function reset_forms()
{
  var form = null;
  var i;

  for (i=0; i<document.forms.length; i++)
  {
    form = document.forms[i];

    if ((form.name.toLowerCase() != "control") && (form.name.toLowerCase() != "configuracion"))
    {
      form.reset();
    }
  }
/*!! PENDIENTE: variable global !!*/
  valido = true;
}/*=== reset_forms ===*/


/*!! REVISAR !!*/

/*===================================================================
 Funcion: enviar_todo
 PUBLIC
 Argumentos:
 Descripcion: Se envian todos los forms existentes en el documento
 Control de Cambios:

 13/06/2001	VGZ	1.01	Creacion
====================================================================*/
function enviar_todo()
{ 	
 if (!bolFormEnviado) 
 {
  if (!validar_forms())
  {
    return false;
  }
  
/*--
  var i;
  for (i=0; i<document.forms.length; i++)
  {
    document.forms[i].submit();
  }
--*/
  if (!enviar_xml())
  {
    return false;
  }
 bolFormEnviado = true;
 }
return true;
}/*=== enviar_todo ===*/


/*===================================================================
 Funcion: validar_forms
 Argumentos:
 Descripcion: Se validan todos los forms, si no hay ningun error
              se hace el envio de todos los forms del documento 
 Control de Cambios:

 13/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_forms()
{
  var j;  	
  for (j=0; j<document.forms.length; j++)
  {	  
    if (document.forms[j].name.indexOf("_notsendnull")>=0){
      if (!validar_campos_form_notsendnull(document.forms[j]))      
      {	      
	  	return false;      
      }else
      	return true;
    }else{	    
    	if (!check_not_null(document.forms[j])){	    
      		return false;      	
    	}
  	}
  }
/*--
  if (boolEnviar)
  {
    enviar_todo();
  }
--*/
return true;
}/*=== validar_forms ===*/


/*===================================================================
 Funcion: check_not_null
 Argumentos:
 Descripcion: Comprueba que los campos obligatorios esten informados
 Control de Cambios:

 12/06/2001	VGZ	1.01	Creacion
====================================================================*/
function check_not_null(form)
{
  var campo;
  var i;
  var valor;

  for (i=0; i<form.length; i++)
  {
    campo = form.elements[i];

    if (!validar_nonulo(campo))
    {
      return false;
    }

    if (campo.name.toLowerCase().indexOf("_date") >= 0)
    {
      if (!validar_campo(campo,'DATE'))
      {
        return false;
      }
    }

    if (campo.name.toLowerCase().indexOf("_numberdec") >= 0)
    {
      if (!validar_campo(campo,'NUMBER','DEC'))
      {
        return false;
      }
    }
  }
  return true;
}/*=== check_not_null ===*/


/*===================================================================
 Funcion: validar_campos_form_notsendnull
 Argumentos:
 Descripcion: Comprueba que los campos obligatorios esten informados
              en los formularis de tipo _notsendnull 
 Control de Cambios:

 28/10/2002 IPS 1.01    Creacion
====================================================================*/
function validar_campos_form_notsendnull(form)
{
    var boolMensaje;	
    for (i=0; i<form.length; i++)
    {
      campo = form.elements[i];

      if ((campo.name.toLowerCase().indexOf("_notsendnull") >= 0) ||
          (campo.name.toLowerCase().indexOf("_notnull") >= 0))
      {		
        if (((campo.type.toLowerCase() == "text" || campo.type.toLowerCase() == "textarea") &&
              es_blanco(campo))
            || ((campo.type.toLowerCase() == "select-one" && (campo.value.length == 0)))
           )
        {	        
           alert(libstd.campo + getprompt(campo).toUpperCase() + libstd.notnull);
           campo.focus();
           return false;
        }/*== if ==*/

      }/*== if ==*/

    }/*== for ==*/

  return true;
}/*=== validar_campos_form_notsendnull ===*/


/*===================================================================
 Funcion: validar_form_notsendnull
 Argumentos:
 Descripcion: Comprueba que los campos obligatorios esten informados
 Control de Cambios:

 28/10/2002 IPS 1.01    Añadida opcion _notnull para validar campos no informados
 10/12/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_form_notsendnull(form)
{	
  var campo;
  var i;
  var valor;

  if (form.name.toLowerCase().indexOf("_notsendnull") >= 0)
  {
    for (i=0; i<form.length; i++)
    {
      campo = form.elements[i];

      if ((campo.name.toLowerCase().indexOf("_notsendnull") >= 0) ||
          (campo.name.toLowerCase().indexOf("_notnull") >= 0))
      {
        if (((campo.type.toLowerCase() == "text" || campo.type.toLowerCase() == "textarea") &&
              es_blanco(campo))
            || (campo.type.toLowerCase() == "select-one" && (campo.value.length == 0))
           )           
        {
          alert(libstd.campo + getprompt(campo).toUpperCase() + libstd.notnull);
          campo.focus();
          return false;
        }/*== if ==*/

      }/*== if ==*/

    }/*== for ==*/

  }/*== if ==*/

  return true;

}/*=== validar_form_notsendnull ===*/

/*===================================================================
 Funcion: validar_form_notsendchange
 Argumentos:
 Descripcion: Comprueba que al menos un campo de un form ha cambiado
 Control de Cambios:

 13/12/2001	MCR	1.01	Creacion
====================================================================*/
function validar_form_notsendchange(form)
{
  var campo;
  var i;
  var valor;  
  if (form.name.toLowerCase().indexOf("_notsendchange") >= 0)
  {
    for (i=0; i<form.length; i++)
    {
      campo = form.elements[i];

      if (campo.type.toLowerCase() == "text" || 
          campo.type.toLowerCase() == "textarea" ||
          campo.type.toLowerCase() == "password")
      {
        if ( campo.value != campo.defaultValue)
        {
          return true;
        }/*if*/
      }/*if*/
      
      if (campo.type.toLowerCase() == "select-one")
      {
        //if (campo.value.length > 0)
        if(!campo.options[campo.selectedIndex].defaultSelected)
        {
          return true;
        }/*if*/
      }/*if*/

      if (campo.type.toLowerCase() == "checkbox" ||
          campo.type.toLowerCase() == "radio")
      {
        if (campo.checked != campo.defaultChecked)
        {
          return true;
        }/*if*/
      }/*if*/
    }/*for*/
    return false;
  }/*if*/
  
  return true;

}/*=== validar_form_notsendchange ===*/


/*===================================================================
 Funcion: enviar_xml
 PUBLIC
 Argumentos:
 Descripcion: Forma y envia la cadena xml con los datos de todos los
              formularios
 Control de Cambios:

 15/10/2002	VGZ	1.03  Cambios
		- Se introduce el tratamniento del CDATA
 27/06/2002	MCR	1.02  Cambios
		- Acceso a los forms por nombre y no por indice y otras mejoras de rendimiento
 25/06/2001	VGZ	1.01	Creacion
====================================================================*/
function enviar_xml()
{	
  var form = null;
  var campo = null;
  var cadenaXml = "";
  var j;
  var l;
  var cars = new Array("<","]",">","&");
  var cadenaTemp = "";


  cadenaXml="<FI>";
  /*== Se buscan los valores de configuracion ==*/
  if (document.control!=null)
  {
    cadenaXml = cadenaXml + "<CF>";
    if (document.control.aplicacion!=null)
    {                 
      cadenaXml=cadenaXml + "<AP>" +  document.control.aplicacion.value + "</AP>";
    }
    else
    {
      alert("ERROR: no existe TAG 'aplicacion' ");

      return false;
    }
    if (document.control.consultas!=null)
    {                 
      cadenaXml=cadenaXml + "<AC>" +  document.control.consultas.value + "</AC>";
    }
    else
    {
      alert("ERROR: no existe TAG 'consultas' ");

      return false;
    }
    if (document.generico!=null)
    {
      for (j=0; j<document.generico.length; j++)
      {
        campo = document.generico.elements[j];

        if (existeCaracter(campo.value, cars))
        {
          cadenaXml=cadenaXml + "<" + getname(campo) 
                              + "><![CDATA[" + campo.value + "]]></" + getname(campo) + ">";
        }
        else
        {
          cadenaXml=cadenaXml + "<" + getname(campo) + ">" + campo.value + "</" + getname(campo) + ">";
        }
      }
    }  
    cadenaXml = cadenaXml + "</CF>";
  }
  else
  {
    alert("ERROR: no existe FORM 'control' ");

    return false;
  }
  
  /*== Se buscan los datos de los formularios ==*/
  for (l=0; l<document.forms.length; l++)
  {
    form = document.forms[l];

    /*== Se desestiman los formularios de control y generico ==*/
    if ((form.name.toLowerCase() != "control") &&
        (form.name.toLowerCase() != "generico") &&
        (validar_form_notsendchange(form))
       )
    {
      if (!validar_form_notsendnull(form))
      {
	      
        return false;
      }	
      cadenaXml=cadenaXml + "<RG>";
      for (j=0; j<form.length; j++)
      {
        campo = form.elements[j];        

        if (campo.name.toLowerCase().indexOf("_send") >= 0 ||
            campo.name.toLowerCase().indexOf("_nosend") < 0
           )
        {

        if ( (campo.type.toLowerCase() == "text") ||
             (campo.type.toLowerCase() == "hidden") ||
             (campo.type.toLowerCase() == "checkbox") ||
             (campo.type.toLowerCase() == "radio") ||
             (campo.type.toLowerCase() == "password") ||
             (campo.type.toLowerCase() == "textarea")
             
           )
        {
          if (existeCaracter(campo.value, cars))
          {
            cadenaXml=cadenaXml + "<" + getname(campo) + "><![CDATA["
                                + campo.value + "]]></" + getname(campo) + ">";
          }
          else
          {
            cadenaXml=cadenaXml + "<" + getname(campo) + ">"
                                + campo.value + "</" + getname(campo) + ">";
          }
        }
        else 
        if (campo.type.toLowerCase() == "select-one" )
        //&& campo.selectedIndex != 0)
        {
          if (existeCaracter(campo.options[campo.selectedIndex].value, cars))
          {
            cadenaXml=cadenaXml + "<" + getname(campo) + "><![CDATA["
                                + campo.options[campo.selectedIndex].value
                                + "]]></" + getname(campo) + ">";
          }
          else
          {
            cadenaXml=cadenaXml + "<" + getname(campo) + ">"
                                + campo.options[campo.selectedIndex].value
                                + "</" + getname(campo) + ">";
          }
        }
        else
        if (campo.type.toLowerCase() == "select-multiple" )
        {
	        for(var i=0;i<campo.options.length;i++){
				if(campo.options[i].selected){									
               if (i==0)
                  cadenaTemp = campo.options[i].value;
               else
                  cadenaTemp = cadenaTemp + "," + campo.options[i].value;
            }
  			}	  
			cadenaXml=cadenaXml + "<" + getname(campo) + ">"
                                + cadenaTemp
                                + "</" + getname(campo) + ">";          	
        }

        }/* _send */
      }/* for */

      cadenaXml=cadenaXml + "</RG>";    
  
      }
  }

  cadenaXml = cadenaXml + "</FI>";
  /*== Se copia la cadenaXML en un campo hidden ==*/
  document.control.cadenaXML.value = cadenaXml;
  //alert(cadenaXml);

  /*QUITAR!!!!*/

  /*== Se realiza el envio de la cadena xml ==*/
  document.control.submit();

return true;
}/*=== enviar_xml ===*/

/*===================================================================
 Funcion: existeCaracter
 PRIVATE
 Argumentos:
 Descripcion: Recupera el prompt del control, entre ()
 Control de Cambios:

 15/10/2002	VGZ	1.01	Creacion
====================================================================*/
function existeCaracter(campo, cars)
{
  //campo.resultado = false;
  for (i=0; i<cars.length; i++)
  {
    if (campo.indexOf(cars[i]) >= 0)
    {
      return true;
    }
  }
  //campo.resultado = true;
  return false;
}/*== existeCaracter ==*/

/*===================================================================
 Funcion: getname
 PRIVATE
 Argumentos:
 Descripcion: Recupera el prompt del control, entre ()
 Control de Cambios:

 28/10/2002 IPS 1.01    Añadida opcion _notnull 
 15/06/2001	SEMA	1.01	Creacion
====================================================================*/
function getname(campo)
{  
  var ini=-1;
  var fin=-1;
  var name = campo.name;

  if (campo.name.toLowerCase().indexOf("_send") >= 0 ||
      campo.name.toLowerCase().indexOf("_nosend") >= 0 ||
      campo.name.toLowerCase().indexOf("_notnull") >= 0 ||
      campo.name.toLowerCase().indexOf("_notsendnull") >= 0
     )
  {
    ini = campo.name.indexOf("(");
    fin = campo.name.indexOf(")");
    if (ini >= 0 && fin >= 0 && fin-ini > 1)
    {
      /*!! indexA=1er car=ini+1, indexB=ult car+1=fin-1+1 !!*/
      name = campo.name.substring(ini+1, fin-1+1);
    }
  }
  return name;
}/*=== getname ===*/


/*===================================================================
 Funcion: getprompt
 PRIVATE
 Argumentos: campo
 Descripcion: Recupera el prompt del control, entre []
 Control de Cambios:

 27/09/2001	VGZ	1.01	Creacion
====================================================================*/
function getprompt(campo)
{
  var ini=-1;
  var fin=-1;
  var descripcion="";

  ini = campo.name.indexOf("[");
  fin = campo.name.indexOf("]");
  if (ini >= 0 && fin >= 0 && fin-ini > 1)
  {
    /*!! indexA=1er car=ini+1, indexB=ult car+1=fin-1+1 !!*/
    descripcion = campo.name.substring(ini+1, fin-1+1);
  }
  else
  {
    descripcion = getname(campo);
  }
  return descripcion;
}/*=== getprompt ===*/

/*===================================================================
 Funcion: val_checkbox
 PUBLIC
 Argumentos:
 Descripcion: Da valor 'S' o 'N' a un determinado checkbox.
 Control de Cambios:

 13/12/2001	MCR	1.01	Creacion
====================================================================*/
function val_checkbox(chk)
{
  if (chk.checked)
  {
    chk.value = 'S'; 
  }
  else
  {
    chk.value = 'N';
  }
}/*=== val_checkbox ===*/

/*===================================================================
 Funcion: setfoco()
 PUBLIC
 Argumentos:
 Descripcion:
 Control de Cambios:

 23/01/2002	VGZ	1.01	Creacion
====================================================================*/
function setfoco()
{
  var form  = null;
  var campo = null;

  for (i=0; i<document.forms.length; i++)
  {
    form = document.forms[i];

    for (j=0; j<form.length; j++)
    {
      campo = form.elements[j];

      if ( (campo.type.toLowerCase() == "text") || 
           (campo.type.toLowerCase() == "select-one") )
      {
        campo.focus();

        return true;

      }//if

    }//for

  }//for

  return false;

}/*=== setfoco ===*/

/*===================================================================
 Funcion: getElementIndex()
 PUBLIC
 Argumentos: Input elemento de tipo input del que se desea el indice.
 Descripcion:Obtiene el indice que ocupa un determinado elemento de tipo
             input en un formulario.
 Control de Cambios:

 24/06/2002	MCR	1.01	Creacion
====================================================================*/
function getElementIndex(input) {
  var index = -1, i = 0, found = false;
  while (i < input.form.length && index == -1)
  if (input.form[i] == input)
  {
    index = i;
    break;
  }
  else i++;
  return index;
}

/*===================================================================
 Funcion: getFormIndex()
 PUBLIC
 Argumentos: form elemento de tipo form del que se desea el indice.
 Descripcion:Obtiene el indice que ocupa un determinado formulario en
             la coleccion de forms del document.
 Control de Cambios:

 24/06/2002	MCR	1.01	Creacion
====================================================================*/
function getFormIndex(form) {
  var index = -1, i = 0, found = false;
  while (i < document.forms.length && index == -1)
  if (document.forms[i] == form)
  {
    index = i;
    break;
  }
  else i++;
  return index;
}

/*===================================================================
 Funcion: getNextElement()
 PUBLIC
 Argumentos: input elemento de tipo input.
 Descripcion:Tras la pulsacion de la tecla enter sobre el elemento
             informado se navega al siguiente input.
 Control de Cambios:

 24/06/2002	MCR	1.01	Creacion
====================================================================*/
function getNextElement (input){
  var i=-1, elementIndex=-1, formIndex=getFormIndex(input.form);
  i=getElementIndex(input)+1;
  while (elementIndex==-1)
  {
    if (i == document.forms[formIndex].elements.length)
    {
      i=0;
      formIndex++;
      if (formIndex==document.forms.length)
      //formIndex=0;
      {
        enviar_todo();
        break;  
      }
    }
    if (document.forms[formIndex].elements[i].type.toLowerCase()!="hidden") 
    {
    elementIndex = i;
    break;
    }
    else 
    {
      i++;
    }
  }
  return document.forms[formIndex].elements[elementIndex];
}

function nextItem(input,ev)
{
  var booNavegar = false;
  /*== iExplorer ==*/
  if (window.event && window.event.keyCode==13) booNavegar=true;
  /*== Netscape 4.0 ==*/
  else if (ev && ev.which==13)
  {
    booNavegar=true;
  }
  else
  {
    
  }
  if (booNavegar)getNextElement(input).focus();
}

/*===================================================================
 Funcion: checkEnter(e)
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que detecta si se ha pulsado el intro en cualquier momento dentro de un formulario
 Control de Cambios:

 20/11/2003	Creacion
====================================================================*/
function checkEnter(e){ //e is event object passed from function invocation
var characterCode  

	 if(e && e.which){ //if which property of event object is supported (NN4)
	 e = e
	 characterCode = e.which //character code is contained in NN4's which property
	 }
	 else{							
	 e = event						
	 characterCode = e.keyCode //character code is contained in IE's keyCode property
	 }
	 
	 
	 if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
	 document.forms.control.Aceptar.onclick() //submit the form
	 return false 
	 }
	 else{
	 return true 
	 }
}//fin funcion				

/*===================================================================
 Funcion: guardaYPagina(formu)
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que te pagina y guarda 			  

 20/11/2003	Creacion
====================================================================*/
function guardaYPagina(formu,formCambio,posDest)
{	      	 
   document.forms[formCambio].posIni.value=posDest;	   
   document.forms.control.Aceptar.onclick();
   
return true;
}

/*===================================================================
 Funcion: noGuardaYPagina(formu)
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que te pagina sin guardar 			  

 20/11/2003	Creacion
====================================================================*/
function noguardaYPagina(formu)
{	      	 
	 document.forms[formu].submit();
	 return false;
}

/*===================================================================
 Funcion: cierra_ayuda()
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que cierra la venta de ayuda emergente
 20/11/2003	Creacion
====================================================================*/
function cierra_ayuda(){	
if (libstd.win!=null){
	libstd.win.close();
	libstd.win = null;
}
	
}

/*===================================================================
 Funcion: validar_cars_ayuda(event, campo)
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que comprueba si se ha pulsado F1
 20/11/2003	Creacion
====================================================================*/
function validar_cars_ayuda(event, dir)
{		
  var key = 0;
  var car = "";  
  var BACK = 8;
  var ENTER = 13;
  var ESC = 27;
  var TAB = 9;
  var F2 = 113;
    
  
  /*== iExplorer ==*/
  if (window.event)
  {	
    key = window.event.keyCode;
  }
  else
  /*== Netscape 4.0 ==*/
  if (event)
  {
    key = event.which;        
  }
  else
  {
    return true;
  }
    
  /*== Permitir caracteres de control ==*/
  if (key==F2 || key==null || key==0)
  {	
	libstd.win = window.open(dir,'prueba','width=800,height=480,scrollbars=yes');
	libstd.win.focus();
	return false;
}  
}

/*===================================================================
 Funcion: abre_ayuda(dir)
 PUBLIC
 Argumentos: 
 Descripcion: Funcion que abre la ventana emergente de ayuda
 20/11/2003	Creacion
====================================================================*/
function abre_ayuda(dir){	
	libstd.win = window.open(dir,'prueba','width=800,height=480,scrollbars=yes');
	libstd.win.focus();
}


/*===================================================================
 Funcion: ir_a_pagina(formu,pagTot,rowNum)
 PUBLIC
 Argumentos: 
 Descripcion: funcion que pagina a una determinada página
 23/03/2004	Creacion
====================================================================*/
function ir_a_pagina(formu,pagTot,rows){  
   var rows = (rows!=undefined ? rows : (rowNumStd!=undefined)? rowNumStd : 10);
	if (document.forms[formu].pagDest.value>=pagTot){		
		document.forms[formu].posIni.value = (pagTot-1)*rows;	
	}else{		
		document.forms[formu].posIni.value=(document.forms[formu].pagDest.value-1)*rows;
	}
	document.forms[formu].submit();
	return true;
}

/*===================================================================
 Funcion: ir_y_paginar(formu,formSelec,pagTot,rowNum)
 PUBLIC
 Argumentos: 
 Descripcion: funcion que pagina a una determinada página y guarda los cambios
 23/03/2004	Creacion
====================================================================*/
function ir_y_paginar(formu,formSelec,pagTot,rowNum){  
   var rows = (rows!=undefined ? rows : (rowNum!=undefined)? rowNum : 10);
	if (document.forms[formu].pagDest.value>=pagTot){		
		document.forms[formSelec].posIni.value = (pagTot-1)*rowNum;	
	}else{		
		document.forms[formSelec].posIni.value=(document.forms[formu].pagDest.value-1)*rowNum;
	}
	document.forms.control.Aceptar.onclick();
	return true;
}


/*===================================================================
 Funcion: deshabilita_intro(event,campo)
 PUBLIC
 Argumentos: 
 Descripcion: funcion que deshabilita el intro en la paginacion
 23/03/2004	Creacion
====================================================================*/
function deshabilita_intro(event,campo){
var keyCode = 0;
if (window.event){
keyCode = window.event.keyCode;
if (keyCode == 13) {
	return false;
}else
return true;
}else if (event){
keyCode = event.which;
if (keyCode == 13) {
var i;
for (i = 0; i < campo.form.elements.length; i++)
if (campo == campo.form.elements[i])
break;
i = (i + 1) % campo.form.elements.length;
campo.form.elements[i].focus();
return false;
}
else
return true;
}}
//  End -->

/*===================================================================
 Funcion: question(popupUrl)
 PUBLIC
 Argumentos: 
 Descripcion: funcion que muestara la pagina de confirmacion de paginacion
 23/03/2004	Creacion
====================================================================*/
function question(popupUrl){
	var left = (screen.width - 250) / 2;
    var top = (screen.height - 150) / 2;
	popupWindow=window.open(popupUrl,"Pop","width=300,height=200");
	popupWindow.moveTo(left,top);	
}

/*===================================================================
 Funcion: getWindowFocus(popupUrl)
 PUBLIC
 Argumentos: 
 Descripcion: funcion que convierte la pantalla de confirmacion en modal
 23/03/2004	Creacion
====================================================================*/
function getWindowFocus(){
	if (popupWindow!=null){popupWindow.focus();};
}

function setActive(){
}
/* fin LIBSTD.JS */

/*===================================================================
 Funcion: val_envio_nulo()
 PUBLIC
 Argumentos: 
 Descripcion: funcion que impide enviar un formulario de tipo 
              notsendchange si no ha cambiado ningun campo
 07/04/2004	Creacion
====================================================================*/
function val_envio_nulo()
{
  var form = null;
  var campo = null;

  for (i=0; i<document.forms.length; i++)
  {
    form = document.forms[i];

    if ( form.name.toLowerCase() != "control" )
    {
      for (j=0; j<form.length; j++)
      {
        campo = form.elements[j];

        if (campo.type.toLowerCase() == "text" ||
            campo.type.toLowerCase() == "textarea" ||
            campo.type.toLowerCase() == "password")
        {
          if ( campo.value != campo.defaultValue)
          {
            return true;
          }/*if*/
        }/*if*/

        if (campo.type.toLowerCase() == "select-one")
        {
          if (!campo.options[campo.selectedIndex].defaultSelected)
          {
            return true;
          }/*if*/
        }/*if*/

        if (campo.type.toLowerCase() == "checkbox" || campo.type.toLowerCase() == "radio")
        {
          if (campo.checked != campo.defaultChecked)
          {
            return true;
          }/*if*/
        }/*if*/

      }//for(j)
    }
  }//for(i)

  alert(libstd.informar);
  return false;

}/*=== val_envio_nulo ===*/


/*== VALIDACIONES ==*/
/*===================================================================
 Funcion: validar_cars_alfanum
 PUBLIC
 Argumentos:
 Descripcion: Funcion que valida si los carácteres introducidos en un campo son validos.
**
 25/06/2001	VGZ	1.01	Creacion
====================================================================*/
function validar_cars_alfanum(campo)
{	
  var cars_validos = "0123456789abcdefghijklmnopqrstuvwxyzáéíóúüàòèç,.?¿!¡()&$";
  var i=0;  
  for (j=1;j<=campo.value.length;j++){	  
	  	if (cars_validos.indexOf(campo.value.substring(i,j))!=-1){		  	
			i++;
	  		//return true;
  		}else{
  			alert(libstd.campo + "(" + getprompt(campo).toUpperCase() + ")" + libstd.novalido);
  			campo.value = "";
  			campo.focus();
        	campo.resultado = false;
	  		return false;
  		}
  }
  return true;
  
}/*== validar_cars ==*/

/*===================================================================
 Funcion: enviar_listas
 PUBLIC
 Argumentos:
 Descripcion: Forma y envia la cadena xml con los datos seleccionados de las listas
**
 25/06/2004	1.0	Creacion
====================================================================*/
function enviar_listas(accion)
{	
  var form = null;
  var campo = null;
  var cadenaXml = "";
  var j;
  var l;
  var cars = new Array("<","]",">","&");
  var cadenaTemp = "";


  cadenaXml="<FI>";
  /*== Se buscan los valores de configuracion ==*/
  if (document.control!=null)
  {
    cadenaXml = cadenaXml + "<CF>";
    if (document.control.aplicacion!=null)
    {                 
      cadenaXml=cadenaXml + "<AP>" +  document.control.aplicacion.value + "</AP>";
    }
    else
    {
      alert("ERROR: no existe TAG 'aplicacion' ");

      return false;
    }
    if (document.control.consultas!=null)
    {                 
      cadenaXml=cadenaXml + "<AC>" +  document.control.consultas.value + "</AC>";
    }
    else
    {
      alert("ERROR: no existe TAG 'consultas' ");

      return false;
    }
    if (document.generico!=null)
    {
      for (j=0; j<document.generico.length; j++)
      {
        campo = document.generico.elements[j];

        if (existeCaracter(campo.value, cars))
        {
          cadenaXml=cadenaXml + "<" + getname(campo) 
                              + "><![CDATA[" + campo.value + "]]></" + getname(campo) + ">";
        }
        else
        {
          cadenaXml=cadenaXml + "<" + getname(campo) + ">" + campo.value + "</" + getname(campo) + ">";
        }
      }
    }  
    cadenaXml = cadenaXml + "</CF>";
  }
  else
  {
    alert("ERROR: no existe FORM 'control' ");

    return false;
  }
  cadenaXml=cadenaXml + "<RG>";
  /*== Se buscan los datos de los formularios ==*/
  for (l=0; l<document.forms.length; l++)
  {
    form = document.forms[l];

    /*== Se desestiman los formularios de control y generico ==*/
    if ((form.name.toLowerCase() != "control") &&
        (form.name.toLowerCase() != "generico") &&
        (form.name.toLowerCase() == accion) &&
        (validar_form_notsendchange(form))){
      	if (!validar_form_notsendnull(form)){	      
        	return false;
      	}	      	
      	for (j=0; j<form.length; j++){	      	
        	campo = form.elements[j];        
        	if (campo.type=="select-multiple"){
	    		for(var i=0;i<campo.options.length;i++){
					if(campo.options[i].selected){
						cadenaTemp = cadenaTemp + campo.options[i].value + ",";				
      				}      			
				}//fin for
				cadenaTemp = cadenaTemp.substr(0,cadenaTemp.length-1);
  				cadenaXml=cadenaXml + "<" + getname(campo) + ">"
            	                + cadenaTemp
                	            + "</" + getname(campo) + ">"; 			
			}else{		
			cadenaXml=cadenaXml + "<" + getname(campo) + ">"
            	                + campo.value
                	            + "</" + getname(campo) + ">"; 			
			}
       }//fin for form.lenght
	}/* _send */	
  }/* for */
  cadenaXml=cadenaXml + "</RG>";
  cadenaXml = cadenaXml + "</FI>";
  /*== Se copia la cadenaXML en un campo hidden ==*/
  document.control.cadenaXML.value = cadenaXml;
  //alert(cadenaXml);

  /*QUITAR!!!!*/

  /*== Se realiza el envio de la cadena xml ==*/
  document.control.submit();

return true;
}/*=== enviar_listas ===*/

/*===================================================================
 Funcion: inhabilitaClick
 PUBLIC
 Argumentos: enlace q se ha pulsado
 Descripcion:Inhabilita el click sobre un elnlace ya pulsado
 Control de Cambios:

 05/07/2004	Creacion
====================================================================*/
function inhabilitaClick(enlace)
{	
	if (enlacePulsado == enlace){		
		return false;
	}else{		
		enlacePulsado = enlace;		
		return true;
	}
}//fin inhabilitaClick
