/***************************************************************************************************
  Fichero:     \libcliente\FuncionesValidacion.js
  Autor:       Antonio Ramón Antón Pascual
  Fecha:       16/09/2002 (10:27)
  Descripcion: Libreria de funciones de cliente con funciones genéricas y funciones de fechas
***************************************************************************************************/





  
/***********************************************************************************************
                                    Inicio Funciones Generales
***********************************************************************************************/


/**************************************************************************************************
  Nombre: setcookie
  Autor: Antonio Ramón Antón Pascual
  Fecha: 23/09/2002 (14:27)
  Descripcion: Esta función sirve para guardar una cookie, cuyo nombre, valor y caducidad se le 
    pasan como parametros
  Entrada:
    - [in] nombre: nombre con el que queremos guardar la cookie
    - [in] valor: valor que le ponemos a la cooki
    - [in] caducidad: cuando queremos que caduque dicha cookie	
**************************************************************************************************/

  function setcookie(nombre, valor, caducidad) 
  {
    document.cookie = nombre + "=" + escape(valor) + ((caducidad == null) ? "" : ("; expires=" + 
	                  caducidad.toGMTString()))
  }

  
/**************************************************************************************************
  Nombre: readcookie
  Autor: Antonio Ramón Antón Pascual
  Fecha: 23/09/2002 (14:27)
  Descripcion: Esta función sirve para leer una cookie que hay guardada
  Entrada:
    - [in] nombre: nombre de la cookie que queremos leer
  Salida: devuelve el valor de la cookie
**************************************************************************************************/

  function readcookie(nombre) 
  {
    var buscamos = nombre + "=";
    
	if (document.cookie.length > 0) 
	{
      var i = document.cookie.indexOf(buscamos);
      if (i != -1) 
	  {
        i += buscamos.length;
        var j = document.cookie.indexOf(";", i);
        
		if (j == -1)
          j = document.cookie.length;
        return unescape(document.cookie.substring(i,j));
      }
    }
	return "";
  }

/**************************************************************************************************
  Nombre: statusBarMsg
  Fecha: 27/01/2004 (14:48)
  Descripcion: Esta función sirve para escribir un mensaje en la barra de estado
  Entrada:
    - [in] message: mensaje a escribir
  Salida:
*************************************************************************************************/

  function statusBarMsg(message)
  {
	window.status = message;
  }

/**************************************************************************************************
  Nombre: EscribirBarraEstado
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:27)
  Descripcion: Esta función sirve para escribir un mensaje en la barra de estado
  Entrada: 
    - [in] message: mensaje a escribir
**************************************************************************************************/

  function EscribirBarraEstado(message)
  {
    window.status = message;
  }

/**************************************************************************************************
  Nombre: ObtenerTextoSeleccionadoDesplegable
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:50)
  Descripcion: Esta función sirve para obtener el texto seleccionado en un campo desplegable
  Entrada: 
    - [in] formulario: Nombre del formulario
    - [in] campo: nombre del campo desplegable
  Salida: devuelve el texto seleccionado
**************************************************************************************************/

  function ObtenerTextoSeleccionadoDesplegable(formulario, campo)
  {
	var f = document[formulario];

	if(f[campo].selectedIndex != -1)
	{
	  var TextoSeleccionado = f[campo].options[f[campo].selectedIndex].text;
	  return TextoSeleccionado;
	}
    
	return -1;
  }


/**************************************************************************************************
  Nombre: ObtenerValorSeleccionadoDesplegable
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:50)
  Descripcion: Esta función sirve para obtener el valor seleccionado en un campo desplegable
  Entrada: 
    - [in] formulario: Nombre del formulario
    - [in] campo: nombre del campo desplegable
  Salida: devuelve el valor seleccionado
**************************************************************************************************/

  function ObtenerValorSeleccionadoDesplegable(formulario, campo)
  {
 
	var f = document[formulario];
	if(f[campo].selectedIndex != -1)
	{
	  var ValorSeleccionado = f[campo].options[f[campo].selectedIndex].value;
	  return ValorSeleccionado;
	}
    
	return -1;
  }

/**************************************************************************************************
  Nombre: BorrarOpcionesDesplegable
  Autor: Antonio Ramón Antón Pascual
  Fecha: 20/11/2002 (12:47)
  Descripcion: Esta función se encarga de borrar las opciones de un desplegable
  Entrada:
    - [in] formulario: Nombre del formulario
    - [in] campo: Nombre del campo
**************************************************************************************************/
  
   function BorrarOpcionesDesplegable(formulario, campo)
   {
     var f = document[formulario];
	 
	 while (f[campo].length > 0)
      f[campo].options[0] = null;
   }
 
/**************************************************************************************************
  Nombre: CargarOpcionesDesplegable
  Autor: Antonio Ramón Antón Pascual
  Fecha: 20/11/2002 (12:47)
  Descripcion: Funcion que añade las opciones de un desplegable, los valores se encuentran
    en el parametro tabla que es de tipo object
  Entrada:
    - [in] formulario: Nombre del formulario
    - [in] campo: Nombre del campo
    - [in] tabla: variable de tipo object que representa y array asociativo, con los pares tupla, valor.
**************************************************************************************************/


   function CargarOpcionesDesplegable(formulario, campo, tabla)
   {
     var f = document[formulario];
	 
	 var opcs = f[campo].options;
  	 for (var i in tabla)
	 {
	   opcs[opcs.length] = new Option(tabla[i], i);
	   if (opcs.length == 1 && f[campo].type == "select-one")
	     opcs[0].selected = true;
	 }
   }
  
  
/**************************************************************************************************
  Nombre: Reemplazar
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:37)
  Descripcion: Esta función sirve para reemplazar una subcadena dentro de una cadena
  Entrada:   
    - [in] Cadena: cadena donde se encuentra la subcadena que queremos sustituir
    - [in] ExpresionRegular: expresion regular que indica la cadena que queremos sustituir
            se puede poner simplemente la cadena que queremos que busque para sustituir por otra
    - [in] ReplaceText: cadena de texto que queremos que aparezca en la cadena resultado en lugar de
            la cadena que aparezca la expresion regular.
  Salida: Devuelve la cadena reemplazada
**************************************************************************************************/
  
  function Reemplazar(Cadena, ExpresionRegular, ReplaceText)
  {
    var cad = new String(Cadena);
	var expr = new RegExp(ExpresionRegular, "gi");
	var resultado = cad.replace(expr, ReplaceText);
	return resultado;
  }

/**************************************************************************************************
  Nombre: QuitarComillas
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:36)
  Descripcion: Esta función se encarga de quitarle las comillas a la cadena pasada como parametro
  Entrada:
    - [in] cadena: cadena a la que queremos quitar las comillas
  Salida: cadena resultante
**************************************************************************************************/
  
  function QuitarComillas(cadena)
  {
    var resultado = new String(Reemplazar(cadena, "\"", ""));
	return resultado;
  }
  
/**************************************************************************************************
  Nombre: ChequearTodo
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:39)
  Descripcion:  Esta función sirve para chequear todos los checkbox en una lista de checkbox
  Entrada: 
    - [in] Formulario: el nombre del formulario donde se encuentran los checkbox
    - [in] CampoControl: el nombre del campo checkbox que sirve para chequear o no todos los demas checkboxs
**************************************************************************************************/

  function ChequearTodo(Formulario, CampoControl)
  {
	var f = document[Formulario];
	
	for (var i=0; i < f.elements.length; i++)
    {
      var e = f.elements[i];
      var boolValue = f[CampoControl].checked;

      if (e.name != CampoControl)
	  {
        e.checked = boolValue;
	  }
	  f[CampoControl].checked = boolValue;
    }
  }
 
  
/***********************************************************************************************
                                    Fin Funciones Generales
***********************************************************************************************/




/***********************************************************************************************
                            Inicio Funciones para formatear las fechas
***********************************************************************************************/

/**************************************************************************************************
  Nombre: ObtenerTextoDiaSemana
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:30)
  Descripcion: Esta función sirve para obtener el texto del día de la semana en función del parámetro
  Entrada: 
    - [in] Dia: Numero del dia de la semana
  Salida: Devuelve el texto correspondiente al dia de la semana
**************************************************************************************************/

  function ObtenerTextoDiaSemana(Dia)
  {
    var textoDia = "";
	
	switch(Dia)
	{
	  case 1:  textoDia = "Lunes";
	           break;
	  case 2:  textoDia = "Martes";
	           break;
	  case 3:  textoDia = "Miércoles";
	           break;
	  case 4:  textoDia = "Jueves";
	           break;
	  case 5:  textoDia = "Viernes";
	           break;
	  case 6:  textoDia = "Sábado";
	           break;
	  case 7:  textoDia = "Domingo";
	           break;
	}
	
	return textoDia;
  }
  
/**************************************************************************************************
  Nombre: ObtenerTextoMes
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:30)
  Descripcion: Sirve para obtener el texto del mes del año en función del parámetro que le pasamos
  Entrada: 
    - [in] Mes: Numero del mes
  Salida: texto correspondiente al número del mes
**************************************************************************************************/
  
  function ObtenerTextoMes(Mes)
  {
    var textoMes = "";
	
	switch(Mes)
	{
	  case  1: textoMes = "Enero";
	           break;
	  case  2: textoMes = "Febrero";
	           break;
	  case  3: textoMes = "Marzo";
	           break;
	  case  4: textoMes = "Abril";
	           break;
	  case  5: textoMes = "Mayo";
	           break;
	  case  6: textoMes = "Junio";
	           break;
	  case  7: textoMes = "Julio";
	           break;
	  case  8: textoMes = "Agosto";
	           break;
	  case  9: textoMes = "Septiembre";
	           break;
	  case 10: textoMes = "Octubre";
	           break;
	  case 11: textoMes = "Noviembre";
	           break;
	  case 12: textoMes = "Diciembre";
	           break;
	}
	
	return textoMes;
  }

/**************************************************************************************************
  Nombre: Formatea
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:31)
  Descripcion: Esta función pone un cero delante del numero si este numero es menor que 10.
  Entrada: 
    - [in] numero: numero a formatear
  Salida: numero formateado
**************************************************************************************************/

  function Formatea(numero)
  {
    var str = numero;
	if(numero < 10)
	  str = "0" + numero;
		
    return str;
  }
  
/**************************************************************************************************
  Nombre: FormatearFecha
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:32)
  Descripcion: Esta función se encarga de formatear la fecha 
  Entrada: 
    - [in] FechaSinFormatear: Le pasamos la fecha sin formatear
  Salida: Devuelve la fecha formateada con el formato dd/mm/yyyy hh24:mm:ss
    La cadena se va a formatear como por ejemplo "Miercoles, 13 de Noviembre de 1999 21:23:13"
**************************************************************************************************/

  function FormatearFecha(FechaSinFormatear)
  {  
     var fecha = new Date(FechaSinFormatear);

     var cadenaFecha = ObtenerTextoDiaSemana(fecha.getDay())+", " + Formatea(fecha.getDate()) + " " + 
	                   ObtenerTextoMes(eval(fecha.getMonth()+1)) +" " + fecha.getFullYear() + " " + 
					   Formatea(fecha.getHours())+":"+Formatea(fecha.getMinutes()) + ":" + 
					   Formatea(fecha.getSeconds());
	 
	 return cadenaFecha;
  }


/**************************************************************************************************
  Nombre: FechaActual
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/09/2002 (10:35)
  Descripcion: Esta función nos devuelve la fecha actual
  Salida: devuelve la cadena con la fecha actual
**************************************************************************************************/
	
  function FechaActual()
  {
	var fecha, cadenaFecha;
    fecha = new Date();
    cadenaFecha = Formatea(fecha.getDate()) + "/" + Formatea((1 + fecha.getMonth())) + "/" + Formatea(fecha.getYear());
	  
    return cadenaFecha;            
  }
  
/**************************************************************************************************
  Nombre: CompararFechas
  Autor: Antonio Ramón Antón Pascual
  Fecha: 24/09/2003 (12:11)
  Descripcion: Funcion que compara dos fechas pasadas como parametro siendo cadena en el 
    formato(dd/dm/yyyy) 
  Entrada:
    - [in] fecha1: Primera fecha
    - [in] fecha2: Segunda fecha
  Salida: Numero de dias de diferencia. Si es negativo, la primera fecha es menor, si es 0 son iguales y si es positiva 
    es mayor
  Observaciones: IMPORTANTE fecha en modo español!! (dia/mes/año)	
**************************************************************************************************/

function CompararFechas(p_dFecha1, p_dFecha2)
{ 
  var arrayFecha1 = p_dFecha1.split("/");
  var d1 = arrayFecha1[0];
  var m1 = arrayFecha1[1];
  var y1 = arrayFecha1[2];

  var arrayFecha2 = p_dFecha2.split("/");
  var d2 = arrayFecha2[0];
  var m2 = arrayFecha2[1];
  var y2 = arrayFecha2[2];

  fechaIni = new Date(m1 + "/" + d1 + "/" + y1); 
  fechaFin = new Date(m2 + "/" + d2 + "/" + y2);

  calculoFecha = Math.ceil((fechaIni - fechaFin) / (1000*60*60*24));

  return calculoFecha;

}

 
  
/***********************************************************************************************
                            Fin Funciones para formatear las fechas
***********************************************************************************************/
  
/**************************************************************************************************
  Nombre: cambiaFoto
  Autor: Victor Manuel Alvarez Alvarez
  Fecha: 17/10/2002 (13:44)
  Descripcion: Esta función se encarga de cambiar la foto por la 
  Entrada: 
    - [in] pImagen: objeto imagen
**************************************************************************************************/

function cambiaFoto(pImagen) 
{
   var imageName ="/images/linkroto.gif";   
     pImagen.src=imageName
}


/**************************************************************************************************
  Nombre: abreVentanaImprimir
  Autor: Antonio Ramón Antón Pascual
  Fecha: 12/05/2004 (9:30)
  Descripcion: Esta función se encarga de abrir la ventana para imprimimr
  Entrada:
    - [in] p_sUrl: dirección url a la que mandamos la página
'**************************************************************************************************/

function abreVentanaImprimir(p_sUrl)
{
	ventanaImprimir=window.open(p_sUrl,'_blank','location=no, menubar=no, resizable=yes');
}


/**************************************************************************************************
  Nombre: cierraVentanaImprimir
  Autor: Antonio Ramón Antón Pascual
  Fecha: 12/05/2004 (9:30)
  Descripcion: Esta función cierra una ventana de impresion
'**************************************************************************************************/

function cierraVentanaImprimir()
{
	ventanaImprimir.close();
}


/****************************************************************************************
  Nombre: cambiaClass
  Autor: Victor Manuel Alvarez Alvarez
  Fecha: 29/01/2003 (9:52)
  Descripcion: Funciones para cambiar el estilo al pasar el raton sobre un TABLE, lo que
  				se hara, será cambiar su class por el que viene como parametro
  Entrada: 
    - [in] pObjetoTabla: objeto HTML al que haremos referencia para cambiar el class
	- [in] pNombreClass: Nombre del class previamente definido como estili CSS
*****************************************************************************************/
function cambiaClass(pObjetoTabla,pNombreClass)
{
  pObjetoTabla.className=pNombreClass;
}

/**************************************************************************************************
  Nombre: IluminarImagen
  Autor: Pascual Muñoz Martínez
  Fecha: 14/02/2003 (12:20)
  Descripcion: Esta función sirve para poner la opacidad de una imagen al 100 %
  Entrada:
    - [in] imagen: objeto de la imagen
    - [in] velocidadDegradado: velocidad con la que se iluminada la imagen
**************************************************************************************************/

function IluminarImagen(imagen, velocidadDegradado)
{
  theobject = imagen;

  if(window.highlighting)
    clearInterval(highlighting)

  highlighting = setInterval("Degradado(theobject, " + velocidadDegradado + ")", 20);
}

/**************************************************************************************************
  Nombre: ApagarImagen
  Autor: Pascual Muñoz Martínez
  Fecha: 14/02/2003 (12:20)
  Descripcion: Esta función sirve para poner la imagen al porcentaje de opacidad que le pasamos como
    parámetro, de forma gradual.
  Entrada:
    - [in] imagen: objeto de la imagen
    - [in] opacidad: porcentaje de opacidad
**************************************************************************************************/

function ApagarImagen(imagen, opacidad)
{
  clearInterval(highlighting);
  imagen.filters.alpha.opacity = opacidad;
}

/**************************************************************************************************
  Nombre: Degradado
  Autor: Pascual Muñoz Martínez
  Fecha: 14/02/2003 (12:20)
  Descripcion: Esta función sirve para realizar el degradado de la imagen.
  Entrada:
    - [in] imagen: objecto de la imagen
    - [in] velocidadDegradado: velocidad con la que se iluminada la imagen
**************************************************************************************************/

function Degradado(imagen, velocidadDegradado)
{
  if(imagen.filters.alpha.opacity <= 100)
    imagen.filters.alpha.opacity += velocidadDegradado
  else if(window.highlighting)
    clearInterval(highlighting)
}

/****************************************************************************************
  Nombre: crearInputHidden
  Autor: Victor Manuel Alvarez Alvarez
  Fecha: 19/06/2003 (16:56)
  Descripcion: Esta funcion se encarga de crear un nuevo input HIDDEN a un formulario
               del documento actual
  Entrada: 
    - [in] p_sNombreFormulario: nombre del formulario
    - [in] p_sNombreHidden: nombre que va a llevar el nuevo input HIDDEN
    - [in] p_sValueHidden: valor que va a llevar el nuevo input HIDDEN
*****************************************************************************************/
function crearInputHidden(p_sNombreFormulario, p_sNombreHidden, p_sValueHidden){
  var newHidden  = document.createElement("<INPUT TYPE='HIDDEN' NAME='" + p_sNombreHidden + "' VALUE='" + p_sValueHidden + "'>");
  var formulario = document[p_sNombreFormulario];

  formulario.insertBefore(newHidden);
}

/**************************************************************************************************
  Nombre: PermiteSoloDigitos
  Autor: Pascual Muñoz
  Fecha: 21/07/2003 (13:16)
  Descripcion: comprueba si la tecla pulsada es una valor numerico, si no es asi ignorara la tecla 
               pulsada.
  Entrada:
    - [in] p_oEvento: objeto event
**************************************************************************************************/
function PermiteSoloDigitos(p_oEvento)
{
  if (p_oEvento.keyCode < 48 || p_oEvento.keyCode > 57)
    p_oEvento.keyCode = 0
}

/**************************************************************************************************
  Nombre: LPAD
  Autor: DAVID GOMIS
  Fecha: 23/02/2004
  Descripcion: esta funcion le concatena a p_sCadena tantos caracteres (p_sCaracter) por la izquierda 
  			   como se indique en la variable p_iNumeroCaracteres
  Entrada:
    - [in] p_sCadena: cadena a formatear
	- [in] p_iNumeroCaracteres: numero de caracteres final de la cadena
	- [in] p_sCaracter: caracter a concatenar
  Salida: LPAD('123', 5, '0') --> 00123
**************************************************************************************************/
function LPAD(p_sCadena, p_iNumeroCaracteres, p_sCaracter)
{
	var NumeroCaracteres=p_iNumeroCaracteres; 
  	var s = p_sCadena;
  
	if (p_iNumeroCaracteres > 0) 
  	{ 
    	for (;NumeroCaracteres>0;NumeroCaracteres+=-1) 
		{
			if(s.length==p_iNumeroCaracteres)
			{
				NumeroCaracteres=0;
			}
			else
			{
		  		s = String(p_sCaracter) + String(s);
	  		}
		}
  	}
    
	return s
}
/**************************************************************************************************
  Nombre: LPAD2
  Autor: Pascual Muñoz
  Fecha: 21/07/2003 (13:32)
  Descripcion: esta funcion le concatena a p_sCadena tantos caracteres (p_sCaracter) por la izquierda 
  			   como se indique en la variable p_iNumeroCaracteres
  Entrada:
    - [in] p_sCadena: cadena a formatear
	- [in] p_iNumeroCaracteres: numero de caracteres a concatenar por la izquierda
	- [in] p_sCaracter: caracter a concatenar
  Salida: LPAD('123', 5, '0') --> 00123
**************************************************************************************************/
function LPAD2(p_sCadena, p_iNumeroCaracteres, p_sCaracter)
{
  var p_iNumeroCaracteres; 
  var s = p_sCadena;
  
  if (p_iNumeroCaracteres > 0) 
  { 
    for (;p_iNumeroCaracteres!=0;p_iNumeroCaracteres+=-1) 
	{
	  s = String(p_sCaracter) + String(s);
	}
  }
    
	return s
}

/**************************************************************************************************
  Nombre: CambiarTecla
  Autor: Pascual Muñoz
  Fecha: 21/07/2003 (13:55)
  Descripcion: captura la tecla pulsada y comprueba si se trata de la indicada en el parametro 
  			   p_iCodigoOrigen, si es asi la sustituye por la tecla indicada en el parametro 
			   p_iCodigoDestino
  Entrada: 
    - [in] event: objeto event, donde se almacena la tecla pulsada
	- [in] p_iCodigoOrigen: codigo de tecla que queremos sustituir
	- [in] p_iCodigoDestino: codigo de tecla por el que se va a cambiar
  Salida: CambiarTecla(event, 46, 44) --> cuando pulsemos '.' lo sustituira por ','
**************************************************************************************************/

function CambiarTecla(event, p_iCodigoOrigen, p_iCodigoDestino)
{
  if (event.keyCode == p_iCodigoOrigen) 
    event.keyCode = p_iCodigoDestino;
}  


/**************************************************************************************************
  Nombre: XMLHttp_Cambiar_Metodo
  Autor: David Gomis Andreu
  Fecha: 30/07/2003 (13:14)
  Descripcion: Cambia el metodo de envio del XMLHttp
  Entrada:
  Salida: 
**************************************************************************************************/
function XMLHttp_Cambiar_Metodo(cadena)
{
 	if (cadena=="GET" || cadena=="POST")
 		this.metodo=cadena;
 	else
 		alert("Metodo de llamda a XMLHttp incorrecto ("+cadena+")");
 		
}

/**************************************************************************************************
  Nombre:XMLHttp_Ejecutar
  Autor: David Gomis Andreu
  Fecha: 30/07/2003 (13:14)
  Descripcion: Metodo del objeto XMLHttp que ejecuta la llamada y devuelve la respuesta
  Entrada:
  Salida: devuelve la ejecucion dle asp, si se produce un error devuelve el codigo $$-1
**************************************************************************************************/
function XMLHttp_Ejecutar()
{
  try
  {
    var s=  new Date();

//	alert(this.metodo + " - " + this.asp + " - " + this.parametros);
	if (this.metodo=="GET")
	{
	var cadena=this.asp+"?time="+s.getTime()+this.parametros;
    	this.obj.open(this.metodo,cadena,false);
	    this.obj.send("");
	}
	else
	{
	 	this.obj.open(this.metodo,this.asp,false);
		this.obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		this.obj.send("time="+s.getTime()+this.parametros);		
	}
	
    //INI Pascual 11/07/2007 
	//si se ha producido un error en la llamada y devuelve la pagina de mantenimiento lo redirigimos a ella.
	if (this.obj.getResponseHeader("CODIGO_ERROR") == "MANTENIMIENTO")
	{
	  document.location.href = "/error/mantenimiento.asp";
	}
	//FIN Pascual 11/07/2007
	
	return this.obj.responseText;
  }
  catch(e)
  {
	return "$$-1";
  }
}

/**************************************************************************************************
  Nombre:XMLHttp_Parametro
  Autor: David Gomis Andreu
  Fecha: 30/07/2003 (13:13)
  Descripcion: Metodo del objetoi XMLHttp que permite pasar parametros al asp
  Entrada: 
    - [in] param: nombre del parametro
    - [in] valor: valor del parametro
**************************************************************************************************/
function XMLHttp_Parametro(param,valor)
{
  if (this.metodo=="GET")
    this.parametros = this.parametros+"&"+param+"="+valor;
  else
    this.parametros = this.parametros + "&" + param + "=" + valor;
  
}


/**************************************************************************************************
  Nombre:XMLHttp
  Autor: David Gomis Andreu
  Fecha: 30/07/2003 (13:11)
  Descripcion: Contructor del Objeto XMLHttp
  Entrada: 
    - [in] asp: fichero asp
**************************************************************************************************/

function XMLHttp(asp, met)
{
  if (met==undefined || met==null || met+""=="undefined")
  	 this.metodo="GET";
  else
  	 this.metodo=met;
  this.asp        = asp;
  this.parametros = "";
  
  if(window.XMLHttpRequest) 
  {
    this.obj = new XMLHttpRequest();
  }
  else
  {
    this.obj = new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  //this.obj        = new ActiveXObject("Microsoft.XMLHTTP");
  this.Ejecutar   = XMLHttp_Ejecutar;
  this.Parametro  = XMLHttp_Parametro;
  this.Cambiar_Metodo=XMLHttp_Cambiar_Metodo;

 
}

/**************************************************************************************************
  Nombre: RellenarDesplegableConCadenaXMLHTTP
  Autor: Antonio Ramón Antón Pascual
  Fecha: 16/10/2003 (17:03)
  Descripcion: Esta función se encarga de extraer la información con el contenido del desplegale
    que hay formateada de forma especial en el parámetro p_sTexto e introducirlos como opciones
	del campo desplegable que le pasamos en el parámetro p_objDesplegable
  Entrada: 
    - [IN] p_sTexto: información formateada de forma especial
	- [IN] p_objDesplegable: objeto del campo desplegable
**************************************************************************************************/

function RellenarDesplegableConCadenaXMLHTTP(p_sTexto, p_objDesplegable)
{
  var sPartes        = p_sTexto.split("@@");
  var sCadenaTextos  = sPartes[0];
  var sCadenaValores = sPartes[1];
  var sTextos        = sCadenaTextos.split("$$");
  var sValores       = sCadenaValores.split("$$");
  var options        = new Object();
  options            = p_objDesplegable.options;

  while (options.length > 0)
    options[0] = null;
	
  if(p_sTexto != "$$-1")
  {	
    for (var j = 0; j < sTextos.length-1; j++)
    {
      var SelOption = new Option(sTextos[j], sValores[j]);
 	  eval(options[options.length] = SelOption);
    }
  }
}

/*function Codificar(p_sText)
{
	sSalida = "";
	sText=escape(p_sText);
	for(i = 0; i < sText.length; i++) 
	{
		sSalida += sText.charCodeAt(i) - 23;
	}
	return sSalida;
}*/


/**************************************************************************************************
  Nombre: Decodificar
  Autor: David Gomis Andreu
  Fecha: 22/03/2004 
  Descripcion: Decodifica una cadena de texto codificado con los codigos ascii
  Entrada: 
    - [IN] p_sText: cadena a decodificar encriptado
**************************************************************************************************/

function Decodificar(p_sText)
{
	if (p_sText.indexOf("_$$_")>0)
		return p_sText.replace("_$$_","@");
		
	sSalida="";	
	for(i = 0; i < p_sText.length; i += 2) 
	{
		num_in = parseInt(p_sText.substr(i,[2])) + 23;
		num_in = unescape('%' + num_in.toString(16));
		sSalida += num_in;
	}

	return  unescape(sSalida);
}

/**************************************************************************************************
  Nombre: GenerarCorreo
  Autor: David Gomis Andreu
  Fecha: 22/03/2004 
  Descripcion: Esta funcion se encarga de generar el codigo html correspondiente para enviar un correo
  Entrada: 
    - [IN] p_sCorreoEnc	: correo encriptado
	- [IN] p_sTexto		: texto que se vera en la pagina
	- [IN] p_sSubject 	: subject del correo
	- [IN] p_sClass 	: calse del tag <a>
**************************************************************************************************/

function GenerarCorreo(p_sCorreoEnc,p_sTexto,p_sSubject,p_sClass)
{
	sCorreoDes=Decodificar(p_sCorreoEnc);
	if (p_sTexto=="" || p_sTexto==null)
		var sTexto=sCorreoDes;
	else
		var sTexto=p_sTexto;
	if (p_sSubject=="" || p_sSubject==null)
	 	sCorreoDes=sCorreoDes
	else
		sCorreoDes=sCorreoDes+"&subject="+p_sSubject;
	if (p_sClass=="" || p_sClass==null)
		var sCadena="<a href='mailto:"+sCorreoDes+"'>"+sTexto+"</a>";
	else
		var sCadena="<a href='mailto:"+sCorreoDes+"' class='"+p_sClass+"'>"+sTexto+"</a>";
	return sCadena;

}

/**************************************************************************************************
  Nombre: Trim
  Autor: Alberto Moreno
  Fecha: 13/05/2005
  Descripcion: Es la funcion equivalente a Trim de ASP, encargada de eliminar espacios en blanco por
               delante y detras de la cadena.
  Entrada: 
    - [IN] p_sCadena : cadena a formatear
**************************************************************************************************/

function Trim(p_sCadena) 
{ 
  return TrimRight(TrimLeft(p_sCadena));
}

/**************************************************************************************************
  Nombre: TrimRight
  Autor: Alberto Moreno
  Fecha: 13/05/2005
  Descripcion: Es la funcion encargada de eliminar espacios en blanco por la izquierda de la cadena
  Entrada: 
    - [IN] p_sCadena : cadena a formatear
**************************************************************************************************/
function TrimLeft(p_sCadena) 
{ 
  var i; 
  i = 0; 
  str = p_sCadena.split(""); 
  while(i < p_sCadena.length) 
  { 
    if(str[i]==" ") 
    { 
      str[i] = "" 
    } 
    else 
    { 
      break; 
    } 
    i++; 
  } 
  return (str.join("")) 
} 

/**************************************************************************************************
  Nombre: TrimRight
  Autor: Alberto Moreno
  Fecha: 13/05/2005
  Descripcion: Es la funcion encargada de eliminar espacios en blanco por la derecha de la cadena
  Entrada: 
    - [IN] p_sCadena : cadena a formatear
**************************************************************************************************/
   
function TrimRight(p_sCadena) 
{   
  var j; 
  j=p_sCadena.length-1; 
  str = p_sCadena.split(""); 
  while(j > 0) 
  { 
    if(str[j]== " ") 
    { 
      str[j]="" 
    } 
    else 
    { 
      break; 
    } 
    j--; 
  } 
  return (str.join("")) 
}

/**************************************************************************************************
  Nombre: MostrarCapa
  Fecha: 21/07/2006 (10:02)
  Descripcion: Esta función se encarga de mostrar y ocultar la capa que se le pasa por parámetro en función de la variable global que se le pasa como 
    2º parametro, debe definirse en la página donde se vaya a llamar a la función.
  Entrada:
    - [in] p_sIdCapa: nombre de la capa
	- [in] p_sVariableGlobal: cadena con el nombre de la variable global que hay que definir para que funcione la función,
	         que es la que guarda el estado del objeto en todo momento.
'**************************************************************************************************/
		
	function MostrarCapa(p_sIdCapa, p_sVariableGlobal)
	{
		if(this[p_sVariableGlobal])
			document.getElementById(p_sIdCapa).style.visibility = 'visible';
		else
			document.getElementById(p_sIdCapa).style.visibility = 'hidden';
		
		this[p_sVariableGlobal] = !this[p_sVariableGlobal];
	}


/**************************************************************************************************
  Nombre: CambiarImagen
  Fecha: 21/07/2006 (11:04)
  Descripcion: OJO: Para que funcione esta función debe declararse la variable global g_bMostrar en la página donde se vaya a llamar a esta función.
    Esta función se encarga de cambiar una imagen que hay en la página WEB.
  Entrada:
    - [in] p_sIdImagen: identificador del objeto imagen a cambair
    - [in] p_sRuta: ruta donde se encuentran las imagenes a intercambiar
	- [in] p_sImagen1: imagen 1
	- [in] p_sImagen2: imagen 2
	- [in] p_bCambiarVariable: esta variable indica si cambiamos el valor en esta función de la variable g_bMostrar o lo dejamos como está. Puede ser TRUE o FALSE.
  Salida:
'**************************************************************************************************/

	function CambiarImagen(p_sIdImagen, p_sRuta, p_sImagen1, p_sImagen2, p_sVariableGlobal, p_bCambiarVariable) 
	{
		if(this[p_sVariableGlobal])
			document.getElementById(p_sIdImagen).src = p_sRuta + p_sImagen1; 
		else
			document.getElementById(p_sIdImagen).src = p_sRuta + p_sImagen2;
		
		if(p_bCambiarVariable)
			this[p_sVariableGlobal] = !this[p_sVariableGlobal];

}


