/*
    Libreria para la codificacion de textos para envio por POST/GET
    (c) Juan Antonio Fernandez Madrigal, 2006
*/


function hexa(decimal)
/* Devuelve el text hexadecimal del numero dado, tenga los caracteres que tenga */
{
 var hexs="0123456789ABCDEF";
 var res="";
 var mask=0xF;
 do
 {
   var x=decimal & mask;
   res=hexs.charAt(x)+res;
   decimal=decimal >> 4;
 } while (decimal>0);
 return(res);
}

function transforma(c)
/* Devuelve el caracter C transformado (si hace falta) */
{
  switch (c.charCodeAt(0))
  {
	case 10: //r="linefeed"; break;
	case 13: //r="retornocarro"; break;
    case 32: //r="espac"; break;
    case 33: // r="admir"; break;
    case 34: // r="quote"; break;
    case 35: // r="almoh"; break;
    case 36: // r="dolar"; break;
    case 37: // r="porc"; break;
    case 38: // r="amp"; break;
    case 39: // r="comilla"; break;
    case 40: // r="lpar"; break;
    case 41: // r="rpar"; break;
    case 42: // r="aster"; break;
    case 43: // r="mas"; break;
    case 44: // r="coma"; break;
    case 47: // r="dividir"; break;
    case 58: // r="dospuntos"; break;
    case 59: // r="puntoycoma"; break;
    case 60: // r="lt"; break;
    case 61: // r="igual"; break;
    case 62: // r="gt"; break;
    case 63: // r="interr"; break;
    case 64: // r="arroba"; break;
    case 91: // r="lcorch"; break;
    case 93: // r="rcorch"; break;
    case 95: // r="bajo"; break;
    case 161: // r="iexcl"; break;
    case 166: // r="brvbar"; break;
    case 169: // r="copy"; break;
    case 171: // r="laquo"; break;
    case 186: // r="ordm"; break;
    case 187: // r="raquo"; break;
    case 191: // r="iquest"; break;
    case 192: // r="Agrave"; break;
    case 193: // r="Aacute"; break;
    case 194: // r="Acirc"; break;
    case 196: // r="Auml"; break;
    case 197: // r="Aring";  break;
    case 198: // r="AElig"; break;
    case 199: // r="Ccedil"; break;
    case 200: // r="Egrave"; break;
    case 201: // r="Eacute"; break;
    case 202: // r="Ecirc"; break;
    case 203: // r="Euml"; break;
    case 204: // r="Igrave"; break;
    case 205: // r="Iacute"; break;
    case 206: // r="Icirc"; break;
    case 207: // r="Iuml"; break;
    case 209: // r="Ntilde"; break;
    case 210: // r="Ograve"; break;
    case 211: // r="Oacute"; break;
    case 212: // r="Ocirc"; break;
    case 214: // r="Ouml"; break;
    case 217: // r="Ugrave"; break;
    case 218: // r="Uacute"; break;
    case 219: // r="Ucirc"; break;
    case 220: // r="Uuml"; break;
    case 224: // r="agrave"; break;
    case 225: // r="aacute"; break;
    case 226: // r="acirc"; break;
    case 228: // r="auml"; break;
    case 229: // r="aring"; break;
    case 230: // r="aelig"; break;
    case 231: // r="ccedil"; break;
    case 232: // r="egrave"; break;
    case 233: // r="eacute"; break;
    case 234: // r="ecirc"; break;
    case 235: // r="euml"; break;
    case 236: // r="igrave"; break;
    case 237: // r="iacute"; break;
    case 238: // r="icirc"; break;
    case 239: // r="iuml"; break;
    case 241: // r="ntilde"; break;
    case 242: // r="ograve"; break;
    case 243: // r="oacute"; break;
    case 244: // r="ocirc"; break;
    case 246: // r="ouml"; break;
    case 249: // r="ugrave"; break;
    case 250: // r="uacute"; break;
    case 251: // r="ucirc"; break;
    case 252: break; // r="uuml"; break;
    default: return(c);
  }
  return("_"+hexa(c.charCodeAt(0))+"_");
}

function quitaHTML(texto)
/* Quita cosas HTML del texto */
{
   do
   {
      var p=texto.indexOf('&quot;');
      if (p>=0) texto=texto.substring(0,p)+'"'+texto.substring(p+6);
   } while (p>=0);
   
   return(texto);
}

function URLtransformatexto(texto)
/* Transforma todo el texto dado */
{
 var res="";
 texto=quitaHTML(texto);
 for (var f=0; f<texto.length; f++)
    res=res+transforma(texto.charAt(f));
//alert("ORIG: "+texto);
//alert("TRANS: "+res);
 return(res);
}

function URLencodeparameters(data)
/* Codifica el array de datos dado */
{
 if (data==undefined) return('');
 var res='';
 var f;
 for (f=0; f<data.length; f++)
 {
 	var param=data[f];
	var n=param[0];
	var v=URLtransformatexto(param[1]);
	if (f>0) res=res+'&';
	res=res+n+'='+v;
 }
// alert(res);
 return(res);
}

