/**
* Create new namespace MAP.deeCard
*/
(function(){
  if(!window['MAP']) {
       alert("Include the MAP namespace and library first of all!");
    }
  function myDeeCard() {
    var emailClass='email';
    var emailTag='SPAN';
    var microformatName='deeCard';  
  
    var consumeElement = 
      function(element, linkText) {
        var emailAddress = getEmailFromMicroformat(element);        
        if (emailAddress != null) {
          if (linkText == null || linkText == '') {
            linkText = emailAddress
          }
          transformElement (element, emailAddress, linkText);
        }
      };    
    var consumeCard = 
      function(element) {
        var fullName = MAP.getElementsByClassName('fn','SPAN',element);
        var subElement = MAP.getElementsByClassName(
                              'email', 
                              'SPAN', 
                              element);

        var emailAddress = getEmailFromMicroformat(subElement[0]);        
        if (emailAddress != null) {
          transformCardElement (
              element, 
              emailAddress, 
              (fullName[0].textContent || fullName[0].innerText));
        }
      };    
    
    var getEmailFromMicroformat = 
      function(element) {
        var recipient = MAP.getElementsByClassName(
                                 'recipient',
                                 'SPAN',
                                 element);
        var smtpHost = MAP.getElementsByClassName(
                                 'smtpHost',
                                 'SPAN',
                                 element);
        var recipientContent =  
           (recipient[0].textContent || recipient[0].innerText); 
        var smtpHostContent =  
           (smtpHost[0].textContent || smtpHost[0].innerText);        
                                       
       if (recipientContent == undefined
            || recipient.length != 1) {
          return null;
        }
        if (smtpHostContent == undefined
            || smtpHost.length != 1) {
          return null;
        }

        var emailAddress = recipientContent + "@" + smtpHostContent;
        return emailAddress;
      };
  
     var transformElement = 
        function(element, emailAddress, linkText) {
          var newAnchor = document.createElement('A');
          
          newAnchor.setAttribute('href', 'mailto:' + emailAddress);
          newAnchor.setAttribute('class', element.className);
          if (element.id != '') {
            newAnchor.setAttribute('id', element.id);
          }
          newAnchor.appendChild(document.createTextNode(linkText));
          element.parentNode.insertBefore(newAnchor, element);
          element.parentNode.removeChild(element);
        };
     var transformCardElement = 
        function(element, emailAddress, linkText) {
          var newAnchor = document.createElement('A');
          
          newAnchor.setAttribute('href', 'mailto:' + emailAddress);
          newAnchor.setAttribute('class', 'email');
          if (element.id != '') {
            newAnchor.setAttribute('id', element.id);
          }
          newAnchor.appendChild(document.createTextNode(linkText));
          MAP.removeChildren(element);
          element.appendChild(newAnchor);
        };
 
     var elements = MAP.getElementsByClassName(
                              emailClass, 
                              emailTag, 
                              document);
                              
    for (var e = 0; e < elements.length; e++) {
      if (//elements[e].parentNode.tagName == 'DIV' && 
          MAP.hasClassName(
                    elements[e].parentNode,
                    microformatName)) {
          if (MAP.hasClassName(elements[e], 'deeCardFormat1')) {
            consumeCard(elements[e].parentNode);
          }
          else if (MAP.hasClassName(elements[e], 'deeCardFormat2')) {
            var fullName = MAP.getElementsByClassName('fn','SPAN',elements[e].parentNode);
            consumeElement(elements[e], 'email ' + (fullName[0].textContent || fullName[0].innerText));
          }
          else {
            consumeElement(elements[e],'');
          }
        }
     }                          
  }

// set the namespace into the MAP namespace…
  window['MAP']['deeCard'] = myDeeCard;
  MAP.addEvent(window,'load',function(W3CEvent) {
    var dCard = new MAP.deeCard();
  });

})();

