$(document).ready(function() {
  function showLoadingError() {
    $('#content').html('<div class="errorMsg">Seite konnte nicht geladen werden!</div>');
    endLoadingContent();
  }
  
  function showContent(data) {
    $('#content').html(data.content);
    endLoadingContent();
    document.title = data.title;
  }
    
  function endLoadingContent() {
    $('#content').animate({'opacity':'show', 'height':'show'}, 'fast');
    $('#loading').animate({'opacity':'hide', 'height':'hide'}, 100);
  }
  
  function loadContent(hash) {
    if (hash == '') return;
    var url = '?page=' + hash + '&ajax';
    
    $('#content').animate({'opacity':'hide', 'height':'hide'}, 'fast', function() {
      $('#loading').animate({'opacity':'show', 'height':'show'}, 100);
      $.ajax({
        url: url,
        dataType: 'json',
        success: function(data){ showContent(data); },
        error: showLoadingError
      });
    });
  }

  // initialize history recording (re-enable back-button)
  $.history.init(loadContent);
  
  // load linked sites per ajax
  $('#mainmenu a, a.internal').live('click', function(e) {
    var url = $(this).attr('href');
    var hash = url.substr(url.indexOf('?page=') + 6);
    $.history.load(hash);
    
    return false;
  });
  
  // send forms per ajax
  $('form').live('submit', function(e) {
    var url = $(this).attr('action') + '&ajax';
    var formData = $(this).serialize() + '&submit=';
    
    $('#content').animate({'opacity':'hide', 'height':'hide'}, 'fast', function() {
      $('#loading').animate({'opacity':'show', 'height':'show'}, 100);
      $.ajax({
        url: url,
        type: 'POST',
        data: formData,
        dataType: 'json',
        success: function(data){ showContent(data); },
        error: showLoadingError
      });
    });
    
    return false;
  });
});
