var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

function rtt( input ) {
 var output = ''
 var len = input.length;
 var chr = 0;
 var cap = 0;
 for ( i = 0; i < len; i++ ) {
  chr = input.charCodeAt( i );
  cap = chr & 32;
  chr &= ~cap;
  chr = ( ( chr >= 65 ) && ( chr <= 90 ) ) ? ( chr % 26 + 65 ) : chr;
  chr |= cap;
  output += String.fromCharCode( chr );
 }
 return output;
}

function dsf( input ) {
 var output = '';
 var chr1, chr2, chr3;
 var enc1, enc2, enc3, enc4;
 var i = 0;

 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

 do {
  enc1 = keyStr.indexOf( input.charAt( i++ ) );
  enc2 = keyStr.indexOf( input.charAt( i++ ) );
  enc3 = keyStr.indexOf( input.charAt( i++ ) );
  enc4 = keyStr.indexOf( input.charAt( i++ ) );

  chr1 = ( enc1 << 2 ) | ( enc2 >> 4 );
  chr2 = ( ( enc2 & 15 ) << 4) | ( enc3 >> 2 );
  chr3 = ( ( enc3 & 3 ) << 6) | enc4;

  output += String.fromCharCode( chr1 );

  if ( enc3 != 64 ) {
   output += String.fromCharCode( chr2 );
  }
  if ( enc4 != 64 ) {
   output += String.fromCharCode( chr3 );
  }
 } while ( i < input.length );

 return output;
}

function esf( input ) {
 var output = '';
 var chr1, chr2, chr3;
 var enc1, enc2, enc3, enc4;
 var i = 0;

 do {
  chr1 = input.charCodeAt( i++ );
  chr2 = input.charCodeAt( i++ );
  chr3 = input.charCodeAt( i++ );

  enc1 = chr1 >> 2;
  enc2 = ( ( chr1 & 3 ) << 4 ) | ( chr2 >> 4 );
  enc3 = ( ( chr2 & 15 ) << 2 ) | ( chr3 >> 6 );
  enc4 = chr3 & 63;

  if ( isNaN( chr2 ) ) {
   enc3 = enc4 = 64;
  } else if ( isNaN( chr3 ) ) {
   enc4 = 64;
  }

  output += keyStr.charAt( enc1 ) + keyStr.charAt( enc2 ) + keyStr.charAt( enc3 ) + keyStr.charAt( enc4 );
 } while ( i < input.length );
   
 return output;
}

function sm( mail, mask, title ) {
 document.write( '<a title="' + title + '" href="' + rtt( dsf( rtt( mail ) ) ) + '">' + mask + '</a>' );
}
