/**
* @param tam - Tama?o maximo del texto almacenado en cada posicion del array de retorno.
* @param texto - Texto fuente que queremos trocear. 
* (Hay que pasarle el parametro de la forma: 'document.formulario.textarea.value')
* @return array
* <p>
*   Dado un texto contenido en un textarea, retorna un array
*   que en cada posicion contiene una porcion de texto de
*   tama?o m?ximo "tam".
* </p>
*/
function trocea(texto, tam)
{
				
	var longitud = texto.length;	
	var contenidoTA = texto;
		
	var numPartes = (longitud / tam)
	var numResto = (longitud % tam)
	if(numResto != 0) numPartes++
    numPartes = (numPartes - (numResto / tam))	
    var aPartes = new Array(numPartes)
    
    var pos = 0 
    for(var i=0; i < numPartes; i++)
    {
        aPartes[i] = contenidoTA.substring(0+pos, tam+pos)
        pos += tam        
    }
        
    return aPartes;               	
}

function getTextoFormatoHTML(PsTexto)
{
    var arrCaracteres = new Array(); 
    var arrCaracteresEsc = new Array();
    
    arrCaracteres[0] = "?";
    arrCaracteresEsc[0] = "&yacute;";
    arrCaracteres[1] = "?";
    arrCaracteresEsc[1] = "&Yacute;";
    arrCaracteres[2] = "?";
    arrCaracteresEsc[2] = "&iexcl;";    
    arrCaracteres[3] = "|";
    arrCaracteresEsc[3] = "&brvbar;";
    arrCaracteres[4] = "?";
    arrCaracteresEsc[4] = "&yuml;";                 
    arrCaracteres[5] = "?";
    arrCaracteresEsc[5] = "&iquest;";
    arrCaracteres[6] = "<";
    arrCaracteresEsc[6] = "&lt;";
    arrCaracteres[7] = ">";
    arrCaracteresEsc[7] = "&gt;";
    arrCaracteres[8] = "?";
    arrCaracteresEsc[8] = "&times;";
    arrCaracteres[9] = "?";
    arrCaracteresEsc[9] = "&divide;";
    arrCaracteres[10] = "?";
    arrCaracteresEsc[10] = "&pound;";
    arrCaracteres[11] = "?";
    arrCaracteresEsc[11] = "&curren;";
    arrCaracteres[12] = "?";
    arrCaracteresEsc[12] = "&sect;";
    arrCaracteres[13] = "?";
    arrCaracteresEsc[13] = "&deg;";
    arrCaracteres[14] = "?";
    arrCaracteresEsc[14] = "&aacute;";
    arrCaracteres[15] = "?";
    arrCaracteresEsc[15] = "&Aacute;";
    arrCaracteres[16] = "?";
    arrCaracteresEsc[16] = "&acirc;";
    arrCaracteres[17] = "?";
    arrCaracteresEsc[17] = "&Acirc;";
    arrCaracteres[18] = "?";
    arrCaracteresEsc[18] = "&agrave;";
    arrCaracteres[19] = "?";
    arrCaracteresEsc[19] = "&Agrave;";
    arrCaracteres[20] = "?";
    arrCaracteresEsc[20] = "&aring;";
    arrCaracteres[21] = "?";
    arrCaracteresEsc[21] = "&Aring;";
    arrCaracteres[22] = "?";
    arrCaracteresEsc[22] = "&atilde;";
    arrCaracteres[23] = "?";
    arrCaracteresEsc[23] = "&Atilde;";
    arrCaracteres[24] = "?";
    arrCaracteresEsc[24] = "&auml;";
    arrCaracteres[25] = "?";
    arrCaracteresEsc[25] = "&Auml;";   
    arrCaracteres[26] = "?";
    arrCaracteresEsc[26] = "&ordf;";
    arrCaracteres[27] = "?";
    arrCaracteresEsc[27] = "&aelig;";
    arrCaracteres[28] = "?";
    arrCaracteresEsc[28] = "&AElig;";
    arrCaracteres[29] = "?";
    arrCaracteresEsc[29] = "&ccedil;";
    arrCaracteres[30] = "?";
    arrCaracteresEsc[30] = "&Ccedil;";
    arrCaracteres[31] = "?";
    arrCaracteresEsc[31] = "&ETH;";
    arrCaracteres[32] = "?";
    arrCaracteresEsc[32] = "&eth;";
    arrCaracteres[33] = "?";
    arrCaracteresEsc[33] = "&plusmn;";
    arrCaracteres[34] = "?";
    arrCaracteresEsc[34] = "&cent;";                                    
    arrCaracteres[35] = "?";
    arrCaracteresEsc[35] = "&eacute;";
    arrCaracteres[36] = "?";
    arrCaracteresEsc[36] = "&Eacute;";
    arrCaracteres[37] = "?";
    arrCaracteresEsc[37] = "&ecirc;";
    arrCaracteres[38] = "?";
    arrCaracteresEsc[38] = "&ecirc;";
    arrCaracteres[39] = "?";
    arrCaracteresEsc[39] = "&egrave;";
    arrCaracteres[40] = "?";
    arrCaracteresEsc[40] = "&Egrave;";
    arrCaracteres[41] = "?";
    arrCaracteresEsc[41] = "&euml;";
    arrCaracteres[42] = "?";
    arrCaracteresEsc[42] = "&Euml;";
    arrCaracteres[43] = "?";
    arrCaracteresEsc[43] = "&iacute;";                            
    arrCaracteres[44] = "?";
    arrCaracteresEsc[44] = "&Iacute;";
    arrCaracteres[45] = "?";
    arrCaracteresEsc[45] = "&icirc;";
    arrCaracteres[46] = "?";
    arrCaracteresEsc[46] = "&Icirc;";
    arrCaracteres[47] = "?";
    arrCaracteresEsc[47] = "&igrave;";
    arrCaracteres[48] = "?";
    arrCaracteresEsc[48] = "&Igrave;";
    arrCaracteres[49] = "?";
    arrCaracteresEsc[49] = "&iuml;";
    arrCaracteres[50] = "?";
    arrCaracteresEsc[50] = "&Iuml;";
    arrCaracteres[51] = "?";
    arrCaracteresEsc[51] = "&ntilde;";
    arrCaracteres[52] = "?";
    arrCaracteresEsc[52] = "&Ntilde;";
    arrCaracteres[53] = "?";
    arrCaracteresEsc[53] = "&oacute;";
    arrCaracteres[54] = "?";
    arrCaracteresEsc[54] = "&Oacute;";
    arrCaracteres[55] = "?";
    arrCaracteresEsc[55] = "&ocirc;";
    arrCaracteres[56] = "?";
    arrCaracteresEsc[56] = "&Ocirc;";
    arrCaracteres[57] = "?";
    arrCaracteresEsc[57] = "&ograve;";
    arrCaracteres[58] = "?";
    arrCaracteresEsc[58] = "&Ograve;";
    arrCaracteres[59] = "?";
    arrCaracteresEsc[59] = "&ordm;";
    arrCaracteres[60] = "?";
    arrCaracteresEsc[60] = "&oslash;";
    arrCaracteres[61] = "?";
    arrCaracteresEsc[61] = "&Oslash;";
    arrCaracteres[62] = "?";
    arrCaracteresEsc[62] = "&otilde;";
    arrCaracteres[63] = "?";
    arrCaracteresEsc[63] = "&Otilde;";
    arrCaracteres[64] = "?";
    arrCaracteresEsc[64] = "&ouml;";
    arrCaracteres[65] = "?";
    arrCaracteresEsc[65] = "&Ouml;";
    arrCaracteres[66] = "?";
    arrCaracteresEsc[66] = "&uacute;";
    arrCaracteres[67] = "?";
    arrCaracteresEsc[67] = "&Uacute;";
    arrCaracteres[68] = "?";
    arrCaracteresEsc[68] = "&ucirc;";
    arrCaracteres[69] = "?";
    arrCaracteresEsc[69] = "&Ucirc;";
    arrCaracteres[70] = "?";
    arrCaracteresEsc[70] = "&ugrave;";
    arrCaracteres[71] = "?";
    arrCaracteresEsc[71] = "&Ugrave;";                                                                                    
    arrCaracteres[72] = "?";
    arrCaracteresEsc[72] = "&uuml;";
    
    for (var i=0; i<arrCaracteres.length; i++)
    {
        while(PsTexto.indexOf(arrCaracteres[i])!=-1)
        {
            PsTexto = PsTexto.replace(arrCaracteres[i], arrCaracteresEsc[i]);
        }
    }
    return PsTexto;
}

//Esta funci?n cuadra el ?ltimo td de una tabla en funci?n de la anchura del scroll
//de la p?gina que contiene a la tabla (para p?ginas que aparecen en un iframe)
//Par?metros:
//	anchoScroll: 	Anchura del scroll (resultado del c?lculo que se muestra debajo)
//	anchoNecesario:	Anchura "ideal" del scroll, es decir, el ancho que queremos que tenga.
// NOTA: Si anchoScroll=anchoNecesario --> La tabla est? cuadrada y por tanto, la funci?n
// no hace nada.
//	anchoTD:	Ancho actual del ?ltimo TD de la tabla.
//	numFilas:	N?mero de filas de la tabla
//	prefijoTD:	Prefijo de los td's a cuadrar
//**********************************************************************************
//* Para calcular anchoScroll, ser? necesario hacer lo siguiente, en la p?gina que *
//* llame a esta funci?n:                                                          *
//* if(ie)                                                                         *
//* {                                                                              *
//*     anchoPadre = window.parent.document.body.clientWidth;                      *
//*     ancho = document.getElementById("tablaInt").offsetWidth;                   *
//* }                                                                              *
//* else                                                                           *
//* {                                                                              *
//*     anchoPadre = window.parent.innerWidth;                                     *
//*     ancho = window.innerWidth;                                                 *
//* }                                                                              *
//* anchoScroll = anchoPadre - ancho;                                              *
//**********************************************************************************
function cuadraTabla(anchoScroll, anchoNecesario, anchoTD, numFilas, prefijoTD)
{
    var restar = anchoNecesario+anchoTD;
    if(anchoScroll != anchoNecesario)
    {
        restar = restar - anchoScroll;
        for(var a = 0; a < numFilas; a++)
        {
            document.getElementById(prefijoTD+a).style.width = restar;
        }
    }
}


// Funci?n que marca/desmarca en fucni?n del par?metro PBEstado 
// todos los checkbox del formulario PFormulario excepto los 
// checkbos con nombre CHECK_TODOS_ELEMENTOS.
function marcaChecks(PBEstado,PFormulario)
{
   var index=0;
   for(i=0; i<PFormulario.elements.length; i++)
   {
      if(PFormulario.elements[i].type=='checkbox' && PFormulario.elements[i].name!='CHECK_TODOS_ELEMENTOS')
         PFormulario.elements[i].checked=PBEstado;
   } // for(i=0; i<PFormulario.elements.length; i++)
} // function marcaChecks(PBEstado,PFormulario)

/*
* Funci?n que arregla el problema de la funci?n parseInt de JavaScript que
* devuelve NaN al pasar como argumento algunas cadenas que empiezan por cero,
* como por ejemplo "08" o "09".
*/
function parsearEntero(sCadena)
{
    while(sCadena.charAt(0)=="0" && sCadena.length > 1)
        sCadena = sCadena.substr(1, sCadena.length-1);

    return parseInt(sCadena);
}




// Convierte la fecha recibida (PsFecha) a un formato est?ndar (dd/mm/aaaa), sabiendo con antelaci?n el formato original 
// que tiene dicha fecha (PsFormatoOriginal).
// Para del formato recibido est?n permitidos los caracteres:
// 	'd' o 'D' para los d?gitos del d?a;
// 	'm' o 'M' para los d?gitos del mes;
// 	'a', 'A', 'y', o 'Y' para los d?gitos del a?o.
function convertirFechaFormatoEstandar(PsFecha, PsFormatoOriginal)
{
	var sFecha = '';
	var sDia = "";
	var sMes = "";
	var sAnyo = "";
	
	// Trata uno por uno los caracteres
	for ( var i=0; i<PsFormatoOriginal.length; i++ )
	{
		var sCaracterFormato = "" + PsFormatoOriginal.charAt(i);
		var sCaracterCampo = "" + PsFecha.charAt(i);
		
	   	// Si el d?gito pertenece al d?a
		if (sCaracterFormato=="d" || sCaracterFormato=="D")
		{
		   sDia += sCaracterCampo;
		}
		// Si el d?gito pertenece al mes
		else if (sCaracterFormato=="m" || sCaracterFormato=="M")
		{
			sMes += sCaracterCampo;
		}
		// Si el d?gito pertenece al a?o
		else if ( sCaracterFormato=="a" || sCaracterFormato=="A" || sCaracterFormato=="y" || sCaracterFormato=="Y" )
		{
			sAnyo += sCaracterCampo;
		}
	} // for ( var i=0; i<PsFormatoOriginal.length; i++ )
	
	sFecha = sDia + '/' + sMes + '/' + sAnyo;
	
	return sFecha;
} // function convertirFechaFormatoEstandar(PsFecha, PsFormatoOriginal)




// Convierte la fecha recibida (PsFecha) al formato correspondiente al idioma recibido (PsIdioma) sabiendo 
// con antelaci?n el formato original que tiene dicha fecha (PsFormatoOriginal).
// Para del formato recibido est?n permitidos los caracteres:
// 	'd' o 'D' para los d?gitos del d?a;
// 	'm' o 'M' para los d?gitos del mes;
// 	'a', 'A', 'y', o 'Y' para los d?gitos del a?o.
// Idiomas soportados hasta ahora:
// - 01: Espa?ol (por defecto)
// - 02: Ingl?s
function convertirFechaFormatoIdioma(PsFecha, PsFormatoOriginal, PsIdioma)
{
	var sFecha = '';
	var sDia = "";
	var sMes = "";
	var sAnyo = "";
	
	// Trata uno por uno los caracteres
	for ( var i=0; i<PsFormatoOriginal.length; i++ )
	{
		var sCaracterFormato = "" + PsFormatoOriginal.charAt(i);
		var sCaracterCampo = "" + PsFecha.charAt(i);
		
	   	// Si el d?gito pertenece al d?a
		if (sCaracterFormato=="d" || sCaracterFormato=="D")
		{
		   sDia += sCaracterCampo;
		}
		// Si el d?gito pertenece al mes
		else if (sCaracterFormato=="m" || sCaracterFormato=="M")
		{
			sMes += sCaracterCampo;
		}
		// Si el d?gito pertenece al a?o
		else if ( sCaracterFormato=="a" || sCaracterFormato=="A" || sCaracterFormato=="y" || sCaracterFormato=="Y" )
		{
			sAnyo += sCaracterCampo;
		}
	} // for ( var i=0; i<PsFormatoOriginal.length; i++ )
	
	sFecha = sDia + '/' + sMes + '/' + sAnyo;
	
	if (PsIdioma=='02')
		sFecha = sAnyo + '/' + sMes + '/' + sDia;
	
	return sFecha;
} // function convertirFechaFormatoEstandar(PsFecha, PsFormatoOriginal, PsIdioma)

//funci?n que elimina todos los espacios en blanco de una cadena.
function ignoreSpaces(string) 
{
	var temp = "";
	string = '' + string;
	splitstring = string.split(" ");

	for(i = 0; i < splitstring.length; i++)
		temp += splitstring[i];

	return temp;
}

// Devuelve el varlor del radio button que est? seleccionado. Si no est? seleccionado ninguno devuelve null.
function obtenerValorRadio(PobjRadio)
{
    if (PobjRadio != null)
    {
    	if (PobjRadio.length)
    	{
        	for (i=0; i<PobjRadio.length; i++)
            {
              if (PobjRadio[i].checked)
                return PobjRadio[i].value;
            }//for
       	}
       	else
       	{
       		if (PobjRadio.checked)
                return PobjRadio.value;
       	}
    }
    return null;
}//function obtenerValorRadio()


  // Variable que sirve para bloquear la ejecuci?n de los submits de un formulario 
  // (para evitar que se ejecute dos veces cuando la respuesta tarda demasiado)
  var bFormulariosBloqueados = false;
  
  // Realiza el submit de un formulario solo si no est?n bloqueados los formularios de
  // la pantalla.  
  function enviarFormulario(formulario)
  {
  	if (!bFormulariosBloqueados)      	
  	{
  		bloquearFormularios();
  		setTimeout(function(){formulario.submit()},1);
  	}
  	
  	return false;
  }
  
  // Bloquea los formularios de la pantalla para evitar la ejecuci?n del m?todo submit().  
  
  var estiloCursorBody = "";
  function bloquearFormularios()
  {
  	bFormulariosBloqueados = true;
  	estiloCursorBody = document.body.style.cursor;
  	document.body.style.cursor="progress";
  }

  // Desbloquea los formularios de la pantalla permitiendo la ejecuci?n del m?todo submit().  
  function desBloquearFormularios()
  {
  	bFormulariosBloqueados = false;
  	document.body.style.cursor=estiloCursorBody;
  }
  
  // Devuelve si la p?gina tiene los formularios bloqueados.  
  function isFormulariosBloqueados()
  {
  	return bFormulariosBloqueados;
  }	

  function crearCadenaIdentificativa(ParrDatos)
  {
     var sTamanoCadena="";
     var sDatosCadena="";
     for(var i=0;i< ParrDatos.length;i++)
     {
     	sTamanoCadena+=ParrDatos[i].length+"_";
     	sDatosCadena+=ParrDatos[i];
     }
     return sTamanoCadena+sDatosCadena;
  }
  
  
  //devuelve los segundos que han pasado desde 1-ene-1970
  function getSegundos()
  {
  	 return (new Date()).getTime();
  }