var DecryptEmail = Class.create({
  initialize: function() {
    var c_elements = $$('span[class="babelfish"]');
    var temp_handler = this;
    c_elements.each(function(c_element) {
      temp_handler.decrypt(c_element);
    });
  },
  
  decrypt: function(c_element) {
    this.mailto_text = c_element.innerHTML;
    
    // only the textContent *could be* just text
    if (c_element.innerHTML.match(/[A-Za-z0-9._%+-]+[?]{1}[A-Za-z0-9.-]+[?]{1}[A-Za-z]{2,4}/)) {
      c_element.innerHTML = c_element.innerHTML.sub('[?]', '@');
      c_element.innerHTML = c_element.innerHTML.sub('[?]', '.');
      this.mailto_text = this.rot13(c_element.innerHTML);
    }
    
    c_element.title = c_element.title.sub('[?]', '@');
    c_element.title = c_element.title.sub('[?]', '.');
    this.mailto_link = this.rot13(c_element.title);
    
    this.generate_link(c_element);
  },
  
  generate_link: function(c_element) {
    var email = document.createElement("a");
		email.setAttribute("href", "mailto:" + this.mailto_link);
		email.innerHTML = this.mailto_text;
		c_element.replace(email);
  },
  
  rot13: function(str) {
    var a_code = 'a'.charCodeAt();
    var z_code = 'z'.charCodeAt();
    var A_code = 'A'.charCodeAt();
    var Z_code = 'Z'.charCodeAt();
    var result = '';
    
    for (var i = 0; i < str.length; i++) {
      var charCode = str.charCodeAt(i);
      if (charCode >= a_code && charCode <= z_code) {
        charCode = a_code + (charCode - a_code + 13) % 26;
      } else if (charCode >= A_code && charCode <= Z_code) {
        charCode = A_code + (charCode - A_code + 13) % 26;
      }
      result += String.fromCharCode(charCode);
    }
    
    return result;
  }
});

new DecryptEmail();