
function obscure( Name, Domain, Text)
//       #######
//
// The three parameters Name, Domain, and Text are of type string,
// the third parameter 'Text' is optional. Its content replaces
// the otherwise displayed e-mail-address.
//
{
   function Rint(n)                   // Random integer r: 1 <= r <= n
   { return Math.floor( n*Math.random() + 1 );
   }
   function s2h(str)                  // Replaces chars randomly by three
   { var s = "", i, z1 = 0, z2, cod;  // different HTML character notations,
     for( i = 0; i < str.length; i++) // namely direct notation,
     { cod = str.charCodeAt(i);       // decimal notation, and
       z2 = Rint(3);                  // hexadecimal notation.
       while( z2 == z1 ) { z2 = Rint(3); } // Avoids repetitions.
       z1 = z2;
       switch( z1 )
       { case 1: s += "&#"  + cod.toString(10) + ";"; break;
         case 2: s += "&#x" + cod.toString(16) + ";"; break;
         case 3: s += String.fromCharCode(cod); break;
       }
     }
     return s;
   }
   Name = s2h(Name);
   Domain = s2h(Domain);
   if( arguments.length < 3 )
   { Text = Name + "&#x24D0;" + Domain;
   }
   document.write("<a href=\""
               + s2h(decodeURIComponent("%6D%61%69%6C%74%6F%3A"))
               + Name + decodeURIComponent("%40") + Domain + "\">"
               + Text + "</a>");
}

