Jquery: executar script após ajax load ()

Eu estou usando a função load () para buscar detalhes dinamicamente a partir de diferentes páginas clicando nos botões do menu. Um dos botões aponta para uma galeria de imagens que usa seus próprios efeitos jquery. Mas esses scripts não estão sendo executados. Eu tentei carregá-los explicitamente usando o método getcript (), mas isso não funciona. Aqui está o código:

$(document).ready(function() {

var hash = window.location.hash.substr(1);
var href = $('#nav li a').each(function(){
    var href = $(this).attr('href');
    if((hash==href.substr(0,href.length-4))&&(hash!='')){
        var toLoad = hash+'.php #content';
        $('#content').load(toLoad);
    }                                           
});

$('#nav li a').click(function(){

    var toLoad = $(this).attr('href')+' #content';
    $('#content').hide();   
    window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-4);
    $('#content').load(toLoad,showNewContent());
    function showNewContent() {
        $('#content').fadeIn(1000);
        $.getScript("gallery.js");
    }

    return false;

});

});

Aqui está o conteúdo do meu arquivo gallery.js. O efeito exato pode ser irrelevante, colei o código abaixo para mostrar a posição das minhas caixas de alerta:

$(document).ready(function(){
//perform actions when DOM is ready
  var z = 0; //for setting the initial z-index's
  var inAnimation = false; //flag for testing if we are in a animation
  alert("1");
  $('#pictures img').each(function() { //set the initial z-index's    
    z++; //at the end we have the highest z-index value stored in the z variable
    $(this).css('z-index', z); //apply increased z-index to <img>
    alert("2");
  });

  function swapFirstLast(isFirst) {
    if(inAnimation) return false; //if already swapping pictures just return
    else inAnimation = true; //set the flag that we process a image
    var processZindex, direction, newZindex, inDeCrease; //change for previous or next image
    alert("3");
    if(isFirst) { processZindex = z; direction = '-'; newZindex = 1; inDeCrease = 1; } //set variables for "next" action
    else { processZindex = 1; direction = ''; newZindex = z; inDeCrease = -1; } //set variables for "previous" action

    $('#pictures img').each(function() { //process each image
    alert("4");
          if($(this).css('z-index') == processZindex) { //if its the image we need to process
        $(this).animate({ 'top' : direction + $(this).height() + 'px' }, 'slow', function() { //animate the img above/under the gallery (assuming all pictures are equal height)
          $(this).css('z-index', newZindex) //set new z-index
            .animate({ 'top' : '0' }, 'slow', function() { //animate the image back to its original position
              inAnimation = false; //reset the flag
            });
        });
      } else { //not the image we need to process, only in/de-crease z-index
        $(this).animate({ 'top' : '0' }, 'slow', function() { //make sure to wait swapping the z-index when image is above/under the gallery
          $(this).css('z-index', parseInt($(this).css('z-index')) + inDeCrease); //in/de-crease the z-index by one
        });
      }
    });

    return false; //don't follow the clicked link
  }

  $('#next1 a').click(function() {
      alert("5");
    return swapFirstLast(true); //swap first image to last position
  });

  $('#prev1 a').click(function() {
      alert("6");
    return swapFirstLast(false); //swap last image to first position
  });

});
//Function for z-index based gallery ends here

Aqui está o que eu encontrei:

Eu faço um ctrl + F5 e carrego a página desde o início, e clico no botão da galeria. Eu recebo o alerta "1". As imagens são carregadas, mas a animação não funciona.

Clico novamente no botão de galeria, sem atualizar, e recebo todos os alertas apropriados de 1 a 6 e o ​​efeito funciona como um encanto.

Quando o efeito não funciona, simplesmente coloco o conteúdo de gallery.js no console do chrome e clico em enter, e o efeito funciona perfeitamente de novo.

Além disso, há momentos em que os efeitos não funcionam, apesar de repetir exatamente as etapas acima. Qual poderia ser o problema aqui? Ouvi dizer que o método getcript é assíncrono e até tentei configurar o ajax sync, mas ainda assim recebo resultados imprevisíveis.