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

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

  var request = new Xhr('contact.php',
    {
      params: {
        name:    name,
        email:   email,
        subject: subject,
        message: message
      },
      evalJSON: true
    }
  );
  
  request.on(
    {
      success: function()
      {
        var json = this.responseJSON;
        
        if(json.status == 'success')
        {
          $('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();
  
  $('status').update(message).fade('in');
  
  $('submit').setValue('Send');
  
  return false;
}

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