// #################################################

// functions that manipulate html entities

// 8-bit generic entity expression ( e.g.  &#233; for é )
var entexp = /&#(\d{3});/;

// returns a string with 8-bit entities converted to a byte of the same 8-bits
function undoent(cca) {
   var isafety = 0;      // prevent infinite loop -- limit to 100 entities 
   while (cca.match(entexp) && isafety++ < 100) {
     cca = cca.replace(entexp,decbyte_to_char(RegExp.$1));
   }
   return cca;
}

// returns a single character from a decimal ANSII value 
function decbyte_to_char(ia) {
  var ca;
  return unescape("%" + dec_to_hex(ia));
}

// converts a decimal number ( 0 - 255 ) to its hex equivalent
function dec_to_hex(ia) {
  var ib = ia % 16;
  return hexdigit((ia - ib)/16) + hexdigit(ib);
}

// converts a decimal number ( 0 - 15 ) to its hex equivalent
function hexdigit(ia) {
  if (ia ==  0) { return  '0'; }
  else if (ia ==  1) { return  '1'; }
  else if (ia ==  2) { return  '2'; }
  else if (ia ==  3) { return  '3'; }
  else if (ia ==  4) { return  '4'; }
  else if (ia ==  5) { return  '5'; }
  else if (ia ==  6) { return  '6'; }
  else if (ia ==  7) { return  '7'; }
  else if (ia ==  8) { return  '8'; }
  else if (ia ==  9) { return  '9'; }
  else if (ia == 10) { return  'a'; }
  else if (ia == 11) { return  'b'; }
  else if (ia == 12) { return  'c'; }
  else if (ia == 13) { return  'd'; }
  else if (ia == 14) { return  'e'; }
  else if (ia == 15) { return  'f'; }
  else { return ' '; }
}

// #############################################################

