// Escaping emails
(function() {
  var escapeMails = function() {
    // var pattern = new RegExp("'([^']+)' at '([^']+)'", "g"); // 'account' at 'domain.com'
    var pattern = new RegExp("'([^']+)' on '([^']+)' domain", "g"); // 'account' on 'domain.com' domain
  
    $$('span').each(function(container) {
      var origText = container.get('html');
      var parts = pattern.exec(origText);
    
      if (parts.length == 3) {
        var newText = origText.replace(pattern, "");

        // create link element from link data
        var mailAddress = parts[1] + "@" + parts[2];
        var newLink = new Element("a", {
          'href': 'mailto:' + mailAddress,
          'title': container.get('title'),
          'tabindex': container.get('tabindex'),
          'html': mailAddress
        });
        
        // update element content
        newLink.replaces(container);
      }
    });
  };

  window.addEvent('domready', function() {
    if (document.body.id == 'contact-me') escapeMails();
  });
})();

// Adding handlers to contact form
(function() {  
  var validateAndSend = function() {
    var passed1 = _validateField($("name"));
    var passed2 = _validateField($("message"));
    
    if (passed1 && passed2 && !$("via-contact-form").retrieve('sending')) {
      new Request({
        url: "/dynamic/sendmail",
        isSuccess: _isSuccessful,
        onFailure: _sendingFailed,
        onSuccess: _sendingSuccedded
        }).send($("via-contact-form").toQueryString());
      _toggleFormState(true);
    } else {
      if (!passed1) $("name").highlight("#88010A");
      if (!passed2) $("message").highlight("#88010A"); 
    }    
  };
  
  var resetContactForm = function() {
    if (!$("via-contact-form").retrieve("sending")) {
      $("via-contact-form").reset();
      $$($("name"), $("message")).fireEvent("keyup");
    }
  };
  
  window.addEvent('domready', function() {
    if (document.body.id == 'contact-me') {
      $("submit").addEvent('click', validateAndSend);
  
      $$($("name"), $("message")).addEvent("keyup", _updateWarning).fireEvent("keyup");
    }
  });
  
  // Private methods
  var _validateField = function(field) {
    if (field.get('value').trim().length == 0) return false;
    else return true;
  };
  
  var _toggleFormState = function(sending) {
    if (sending) {
      $("submit").set("html", "sending");
      $$("textarea", "input").set("disabled", "disabled");
      $("via-contact-form").store("sending", true).addClass("sending");
    } else {
      $("submit").set("html", "send");
      $$("textarea", "input").set("disabled", "");
      $("via-contact-form").store("sending", false).removeClass("sending");
    }
  };
  
  var _isSuccessful = function() {
    return (this.status>=200) && (this.status<300) && (this.xhr.responseText === "1");
  };
  
  var _sendingFailed = function() {
    showAlert(false);
    _toggleFormState(false);
  };
  
  var _sendingSuccedded = function() {
    showAlert(true);
    _toggleFormState(false);
    $("via-contact-form").reset();
  };
  
  var showAlert = function(status) {
    $("confirm-box").set("class", status ? "success" : "failure").addEvent("click", function() {
      $("confirm-box").set("class", "");
    });
  };
  
  var _updateWarning = function() {
    thisEl = $(this);
    if (thisEl.get("value").trim().length > 0 || thisEl.get("text").trim().length > 0)
      thisEl.removeClass("warning");
    else
      thisEl.addClass("warning");
  };
})();