/**
 * kleines Skript zum Verlinken von unkenntlichen E-Mail Adressen
 * Bei Verwendung von jQuery kann dem Link einfach die CSS-Klasse
 * email zugewiesen werden, und dem Element mit der Adresse darin
 * die Klasse address
 */

if(typeof jQuery !== 'undefined') {
  $(document).ready(function(){
    $('a.email').each(function(index) {
      if($(this).hasClass('address')) {
        var realAddress = createMailaddress($(this).text()); 
        
        $(this).text(realAddress);
        $(this).attr('href', 'mailto:' + realAddress);
      } else {
        var addressElement = $(this).find('.address');
        var realAddress = createMailaddress(addressElement.text());
        
        addressElement.text(realAddress);
        $(this).attr('href', 'mailto:' + realAddress);
      }
    });
  });
}

/**
 * verwendet die Domain der aktuellen Seite und kombiniert
 * sie mit einem Namen zu einer E-Mail Adresse, die
 * dann als Linkziel und -text gesetzt wird
 *
 * @param string linkid
 * @param string contact
 * @param string subject
 */
function maillink_domain( linkid, contact, subject ) {
  address = contact + '@' + window.location.hostname;
  
  link = document.getElementById( linkid );
  link.href = 'mailto:' + address + '?subject=' + encodeURI( subject );
  link.innerHTML = address;
}

/**
 * Verlinkt eine (ein wenig) unkenntlich gemachte E-Mail-Adresse,
 * wie zum Beispiel info at example dot com.
 * Es dürfen Leerzeichen verwendet werden, aber die Begriffe für @
 * und . können auch in eigene Elemente eingefasst sein.
 * @param string linkId des a-Elements
 * @param string mailId des Elements, das nur die Adresse enthaelt
 * @param string subject für die E-Mail, die dann geschickt wird
 */
function maillink(linkId, mailId, subject) {
  var linkElement = document.getElementById(linkId);
  var addressElement = document.getElementById(mailId); 
  var addressHtml = addressElement.innerHTML;
  var MAILURIPROTOCOLL = 'mailto:';
  
  if(linkElement.href.indexOf(MAILURIPROTOCOLL) == 0) {
    // it's a href!
    var codedAddress = decodeURIComponent(linkElement.href
                        .substring(MAILURIPROTOCOLL.length));
    
    linkElement.href = MAILURIPROTOCOLL + createMailaddress(codedAddress);
  } else {
    var realAddress = createMailaddress(addressElement.innerHTML);
    
    linkElement.href = MAILURIPROTOCOLL + realAddress; 
    
    addressElement.innerHTML = realAddress;
  }
  
  if(subject) {
    linkElement.href += '?subject=' + encodeURI( subject );
  }
}

/**
 * Erzeugt aus einer ausgeschriebenen E-Mail-Adresse eine echte
 * @param string html ausgeschriebene Adresse mit evtl. HTML Elementen
 *  z.B. info at example dot com
 * @return string echte Mailadresse, z.B. info@example.com
 */
function createMailaddress(html) {
  var address = html;
  
  // Zeilenumbrüche durch Leerzeichen ersetzen
  address = address.replace(/\n/g, ' ' );
  
  // Weitere HTML-Elemente durch Leerzeichen ersetzen
  address = address.replace(/<[^>]+>/g, ' ' );
  
  // Text, unterbrochen von zwei in Leerzeichen eingeschlossenen Begriffen suchen
  // und entsprechend weider zusammenbauen
  address = address.replace(/([^ ]+)[ ]+[^ ]+[ ]+([^ ]+)[ ]+[^ ]+[ ](.+)/, '$1@$2.$3');
  
  // noch überflüssige Leerzeichen entfernen
  address = address.replace(/[ ]/g, '');
  
  return address
};
