function prepareSendMessage() {
  if ($('contactstatus').getStyle('hidden') != 'none') {
    $('contactstatus').fade('out', {
      onFinish: function() {
        sendMessage();
      }
    });
  }
  else {
    sendMessage();
  }
}

function sendMessage() {    
  $('contactform').disable();
      
  var name    = $('contactform').find('input[name="name"]')[0];
  var email   = $('contactform').find('input[name="email"]')[0];
  var subject = $('contactform').find('input[name="subject"]')[0];
  var message = $('contactform').find('textarea[name="message"]')[0];
  
  name.removeClass('error');
  email.removeClass('error');
  subject.removeClass('error');
  message.removeClass('error');
  
  if (name.getRealValue().blank() || email.getRealValue().blank() || subject.getRealValue().blank() || message.getRealValue().blank()) {  
    if (name.getRealValue().blank()) {
      name.addClass('error');
    }
    
    if (email.getRealValue().blank()) {
      email.addClass('error');
    }
    
    if (subject.getRealValue().blank()) {
      subject.addClass('error');
    }
    
    if (message.getRealValue().blank()) {
      message.addClass('error');
    }
  
    return showInfoMessage("You need to fill in all the fields!");
  }
  
  if(!email.getRealValue().match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i))
  {
    return showInfoMessage("The provided email address is not valid!");
  }
  
  $('contactstatus').update("Sending message...").fade('in');

  
  var request = new Xhr('contact.php',
    {
      params: {
        name:    name.getRealValue(),
        email:   email.getRealValue(),
        subject: subject.getRealValue(),
        message: message.getRealValue()
      },
      evalJSON: true
    }
  );
  
  request.on(
    {
      success: function()
      {
        var json = this.responseJSON;
        
        if(json.status == 'success')
        {      
          var name    = $('contactform').find('input[name="name"]')[0];
          var email   = $('contactform').find('input[name="email"]')[0];
          var subject = $('contactform').find('input[name="subject"]')[0];
          var message = $('contactform').find('textarea[name="message"]')[0];
  
          name.setValue('').fire('change');
          email.setValue('').fire('change');
          subject.setValue('').fire('change');
          message.setValue('').fire('change');
          
          return showInfoMessage("The message was successfully sent!");
        }
        else if(json.status == 'failure')
        {
          return showInfoMessage(json.message);
        }
      },
      
      failure: function()
      {
        return showInfoMessage("The message could not be sent.");
      }
    }
  );
  
  request.send();
}

function showInfoMessage(message)
{
  $('contactform').enable();
  
  $('contactstatus').update(message).fade('in');
  
  return false;
}

$(document).on('ready',
  function() {
    $('contactstatus').hide(); 
    
    $('contactform').on('submit',
      function(e)
      {        
        e.preventDefault();
        
        prepareSendMessage();
      }
    );
  }
);
