Trying to simplify a setTimeout sequence
// Put everything in one function, but break it up internally
function opening() {
  // A tiny, internal helper function
  // I've switched the order of arguments compared to setTimeout
  // because it makes for nicer code (no dangling argument after
  // a function body)
  function createTimeout(delay, func) {
    return function () {
      setTimeout(func, delay);
    };
  }

  var step1, step2, step3, // Declare some vars that'll hold functions
      stage = $('#stage'); // and find the #stage element right away

  // Create the first step. When called, it'll wait 400ms 
  // and then execute the function
  step1 = createTimeout(400, function () {
    stage.find('h1').fadeIn('slow', step2); // call step2, when the fade-in completes
  });

  // Same principle as above
  step2 = createTimeout(800, function () {
    stage.find('.logo').fadeIn('slow', step3); // call step3
  });

  // and again
  step3 = createTimeout(400, function () {
    stage.find('p').fadeIn('slow');
    stage.find('#btn').fadeIn('slow');
  });

  step1(); // execute step 1
}


So calling opening() will


wait 400ms
make the H1 to fade in
wait 800ms
make the logo fade in
wait 400mx
make the P and #btn elements fade in