function kwExtLinks(data) {
  $(data).find('a[href][rel*=external]').each(function(i) {
    this.target = '_blank';
  });
}

var base64chars = '0123456789:;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split("");
var base64inv = new Array(256); for(var i=0;i<base64chars.length;i++){base64inv[base64chars[i].charCodeAt(0)] = i;}
function kwMailLinks(data) {
  $(data).find('a[href^=mailto:]').each(function(i) {
    var xr = this.href.match(/^mailto:([A-Za-z0-9:;+]+)$/);
    var k = 100 & 255;
    if(!xr) return;
    var s = xr[1];
    var a = new Array();
    var p = (s.charAt(s.length-1) == '+' ? (s.charAt(s.length-2) == '+' ? 'AA' : 'A') : '');
    var r = '';
    s = s.substr(0, s.length - p.length) + p;
    for (var c = 0; c < s.length; c += 4) {
      var n = (base64inv[s.charCodeAt(c)] << 18) + base64inv[s.charCodeAt(c+3)] +
              (base64inv[s.charCodeAt(c+1)] << 12) + (base64inv[s.charCodeAt(c+2)] << 6);
      a.push((n >>> 16) & 255, (n >>> 8) & 255, n & 255);
    }
    if(p.length >= 1) { a.pop();}
    if(p.length == 2) { a.pop();}
    var b = 0;
    s = '';
    for(var i=0;i<a.length;i++) {
      s += String.fromCharCode(b ^= a[i]^k);
    }
    xr = s.split(/\|/);
    this.href = 'mailto:' + xr[0];
    if(xr.length > 1) $(this).html(xr[1]);
  });
}

if('function' === typeof onLoadComments) {
  onLoadComments(kwExtLinks);
  onLoadComments(kwMailLinks);
} else {
  $(function(){
    kwExtLinks(document);
    kwMailLinks(document);
  });
}

