deaxon software design

deaxon software design deaxon software design
Visit deaxon.com
var $root = $(document.documentElement),
  $window = $(window);

$root.attr("class", "js");

$(function() {

  function animateLoader() {

    var loader = $("#loader"),
      loaderPos = 0;
    setInterval(function() {
      if (loaderPos == 12) loaderPos = 0;
      loader.css("background-position", (loaderPos * -15) + "px 0");
      loaderPos++;
    }, 60);

  }

  function preload() {

    var $works = $("section"),
      postboxCompose = function() {

        var postboxCompose = $works.eq(1),
          emptyElt = $("<div/>");

        postboxCompose.append($("<span/>", {
          "class": "compose-area"
        })).children().wrapAll(emptyElt.clone().addClass("wrap")).end().prepend(emptyElt.clone().addClass("shadow")).prepend(emptyElt.clone().addClass("gradient"));

      },
      kickoffTodos = function() {

        var kickoffTodos = $works.eq(5),
          emptyElt = $("<span/>");

        kickoffTodos.prepend(emptyElt.clone().addClass("starsFront")).prepend(emptyElt.clone().addClass("starsMiddle")).prepend(emptyElt.clone().addClass("starsBack")).prepend(emptyElt.clone().addClass("bg")).append(emptyElt.clone().addClass("blur"));

      },
      thanks = function() {

        var animBox = $works.eq(6).children("p").eq(0),
          animImagesLength = 100;

        function insertImg(src) {
          var img = $("<img/>", {
            alt: "",
            src: "images/thanks/" + src + ".png"
          })
          img.appendTo(animBox);
        }

        for (var i = animImagesLength; i > -1; i--) insertImg(i);

      };

    postboxCompose();
    kickoffTodos();
    thanks();

  };

  animateLoader();
  preload();

});

$window.load(function() {

  // Helpers

  var browserCSSPrefix = "",
    animationEndEvent = "animationend";

  if ($.browser.webkit) {
    browserCSSPrefix = "-webkit-";
    animationEndEvent = "webkitAnimationEnd";
  } else if ($.browser.mozilla) browserCSSPrefix = "-moz-";
  else if ($.browser.opera) browserCSSPrefix = "-o-";

  var windowWidth = $root.width(),
    windowHeight = $root.height(),
    $style = $("<style/>").appendTo("head"),
    $works = $("section"),
    logo = $("h1"),
    baseline = $("h2"),
    reactiveClass = "reactive",
    visibleClass = "visible",
    hiddenClass = "hidden",
    resizeScreenshot = function(screenshot) {

      var windowWidth = $root.width(),
        windowHeight = $root.height();
      screenshotWidth = screenshot.width(), screenshotHeight = screenshot.height();

      if (windowHeight < screenshotHeight) screenshot.css(
      prefix("transform"), "scale(" + windowHeight / screenshotHeight + ")");
      else if (windowWidth < screenshotWidth) screenshot.css(
      prefix("transform"), "scale(" + windowWidth / screenshotWidth + ")");
      else screenshot.css(prefix("transform"), "scale(1)");

    },
    prefix = function(obj) {
      if (obj instanceof Object) {
        var dict = obj,
          newDict = {};
        $.each(dict, function(key, value) {
          newDict[prefix(key)] = value;
        });
        return newDict;
      }
      if (["transform", "animation", "animation-name", "animation-duration", "animation-timing-function", "animation-iteration-count", "animation-direction", "animation-delay"].indexOf(obj) > -1) obj = browserCSSPrefix + obj;
      return obj;
    },
    insertCSSAnimation = function(name, properties) {
      var anim = "@" + browserCSSPrefix + "keyframes " + name + " {\n";
      $.each(properties, function(progress, props) {
        anim += "\t" + progress + "% {\n";
        $.each(props, function(key, value) {
          anim += "\t\t" + key + ":" + value + ";\n";
        })
        anim += "\t" + "}\n";
      })
      anim += "}\n";
      $style.append(anim);
    };

  // Works

  function personal32pxSet() {

    var personal32pxSet = $works.eq(0),
      images = personal32pxSet.children("img");

    function inAnim() {

      personal32pxSet.addClass(visibleClass);

      var animName = "inPersonal32pxSet";

      insertCSSAnimation(animName, {
        0: prefix({
          "transform": "translateX(" + windowWidth + "px)"
        }),
        50: prefix({
          "transform": "translateX(-20px)"
        }),
        100: prefix({
          "transform": "translateX(0)"
        })
      });

      images.css(prefix({
        "transform": "translateX(" + windowWidth + "px)",
        "animation": animName + " .8s cubic-bezier(.2,.6,.3,1)"
      })).bind(animationEndEvent, function(e) {
        if (e.originalEvent.animationName == animName) {
          images.css(prefix("transform"), "translateX(0)");
          $root.addClass(reactiveClass);
        }
      });

      images.eq(0).css(prefix("animation-delay"), "1.2s");
      images.eq(1).css(prefix("animation-delay"), "1.4s");
      images.eq(2).css(prefix("animation-delay"), "1.6s");
      images.eq(3).css(prefix("animation-delay"), "1.8s");

    }

    function outAnim() {

      if (!$root.is("." + reactiveClass)) return;

      $root.removeClass(reactiveClass);

      var animName = "outPersonal32pxSet",
        imagesLength = images.length;

      insertCSSAnimation(animName, {
        0: {},
        100: prefix({
          "transform": "translateX(-" + windowWidth + "px)"
        })
      });

      images.each(function(i) {

        var $this = images.eq(i),
          animDelay = 0;

        if (i == 1) animDelay = "08";
        else if (i == 2) animDelay = "16";
        else if (i == 3) animDelay = "24";

        $this.css(
        prefix("animation"), animName + " 1s cubic-bezier(.7,0,.6,.2) ." + animDelay + "s").bind(animationEndEvent, function() {
          $this.addClass(hiddenClass);
          if (i == imagesLength - 1) {
            personal32pxSet.removeClass(visibleClass);
            postboxCompose();
          }
        });

      });

    }

    inAnim();
    $root.click(outAnim);

  };

  function postboxCompose() {

    var postboxCompose = $works.eq(1),
      gradient = postboxCompose.children(".gradient"),
      shadow = postboxCompose.children(".shadow"),
      wrap = postboxCompose.children(".wrap");

    postboxCompose.addClass(visibleClass);
    $root.css("background", "#DF93BE");
    logo.css("text-shadow", "0 1px 0 rgba(0,0,0,.35)");
    baseline.css({
      "color": "#5A3D51",
      "text-shadow": "0 1px 0 rgba(255,255,255,.15)"
    });

    insertCSSAnimation("showGradient", {
      0: prefix({
        "opacity": "0",
        "transform": "scale(1.2)"
      }),
      100: {}
    });

    insertCSSAnimation("showWindow", {
      0: prefix({
        "opacity": "0",
        "transform": "scale(.3)"
      }),
      40: prefix({
        "opacity": "0",
        "transform": "scale(.3)"
      }),
      50: prefix({
        "opacity": ".1",
        "transform": "scale(1.05)"
      }),
      60: prefix({
        "opacity": ".2",
        "transform": "scale(.98)"
      }),
      70: prefix({
        "opacity": ".3",
        "transform": "scale(1.02)"
      }),
      100: {}
    });

    insertCSSAnimation("resizeShadow", {
      0: prefix({
        "opacity": "0",
        "transform": "scaleY(.965) translateY(11px)"
      }),
      40: prefix({
        "opacity": "0",
        "transform": "scaleY(.965) translateY(11px)"
      }),
      68: prefix({
        "transform": "scaleY(.965) translateY(11px)"
      }),
      100: {}
    });

    insertCSSAnimation("toolbarSlidesUp", {
      0: prefix({
        "transform": "translateY(21px)"
      }),
      80: prefix({
        "transform": "translateY(21px)"
      }),
      100: {}
    });

    insertCSSAnimation("formatSlidesDown", {
      0: prefix({
        "transform": "translateY(-26px)"
      }),
      88: prefix({
        "transform": "translateY(-26px)"
      }),
      100: {}
    });

    insertCSSAnimation("outWindow", {
      0: {},
      20: prefix({
        "opacity": ".9",
        "transform": "scale(1.05)"
      }),
      35: prefix({
        "opacity": ".8",
        "transform": "scale(1.05)"
      }),
      100: prefix({
        "transform": "scale(.1)",
        "opacity": "0"
      })
    });

    insertCSSAnimation("outGradient", {
      0: {},
      100: prefix({
        "opacity": "0",
        "transform": "translateY(20px)"
      })
    });

    gradient.css(
    prefix("animation"), "showGradient .8s linear");

    shadow.css(
    prefix("animation"), "resizeShadow 3.5s ease-out");

    wrap.css(
    prefix("animation"), "showWindow 1.8s ease-in");

    postboxCompose.find("[src*=toolbar]").css(
    prefix("animation"), "toolbarSlidesUp 3s cubic-bezier(.2,.6,.3,1)");

    postboxCompose.find("[src*=format]").css(
    prefix("animation"), "formatSlidesDown 3.2s cubic-bezier(.2,.6,.3,1)");

    postboxCompose.bind(animationEndEvent, function(e) {
      if (e.originalEvent.animationName == "formatSlidesDown") {
        $root.addClass(reactiveClass).click(function() {

          gradient.css(
          prefix("animation"), "outGradient .8s linear");

          shadow.css(
          prefix("animation"), "outWindow .8s cubic-bezier(.7,0,.6,.2)");

          wrap.css(
          prefix("animation"), "outWindow .8s cubic-bezier(.7,0,.6,.2)");

          $root.removeClass(reactiveClass);

          postboxCompose.bind(animationEndEvent, function(e) {
            if (e.originalEvent.animationName == "outGradient") {
              postboxCompose.removeClass(visibleClass);
              postboxToolbarGlyphs();
            }
          });

        });
      }
    });

    $window.resize(function() {
      resizeScreenshot(shadow);
      resizeScreenshot(wrap);
    });

  };

  function postboxToolbarGlyphs() {

    var postboxToolbarGlyphs = $works.eq(2),
      images = postboxToolbarGlyphs.children(),
      inAnimName = "inPostboxToolbarGlyph",
      outAnimName = "outPostboxToolbarGlyph";

    postboxToolbarGlyphs.addClass(visibleClass);
    $root.css("background", "#D0D0D0");
    logo.css("text-shadow", "0 1px 0 rgba(0,0,0,.35)");
    baseline.css({
      "color": "#888",
      "text-shadow": "0 1px 0 rgba(255,255,255,.3)"
    });

    var centerValue = parseInt(images.length / 2),
      centerImage = images.eq(centerValue),
      centerImageXPos = centerImage.position().left,
      centerImageYPos = centerImage.position().top;

    insertCSSAnimation("showCenterPostboxGlyph", {
      0: prefix({
        "opacity": "0",
        "transform": "scale(2.5)"
      }),
      30: prefix({
        "opacity": "0",
        "transform": "scale(2.5)"
      }),
      50: prefix({
        "transform": "scale(.6)"
      }),
      100: {}
    });

    centerImage.css(
    prefix("animation"), "showCenterPostboxGlyph 2.2s cubic-bezier(.2,.6,.3,1)");

    images.each(function(i) {

      if (i == centerValue) return;

      var $this = images.eq(i),
        thisInAnimName = inAnimName + i,
        thisInAnimDelay = 65 + (i / 1.5),
        offsetX = (centerImageXPos - $this.position().left) + "px",
        offsetY = (centerImageYPos - $this.position().top) + "px",
        props = {
          0: prefix({
            "opacity": "0",
            "transform": "translate(" + offsetX + "," + offsetY + ")"
          }),
          100: {}
        };

      props[thisInAnimDelay] = prefix({
        "opacity": "0",
        "transform": "translate(" + offsetX + "," + offsetY + ")"
      });

      insertCSSAnimation(thisInAnimName, props);

      $this.css(
      prefix("animation"), thisInAnimName + " 3s cubic-bezier(.2,.6,.3,1)");

    });

    postboxToolbarGlyphs.bind(animationEndEvent, function(e) {
      if (e.originalEvent.animationName == inAnimName + (images.length - 1)) {
        $root.addClass(reactiveClass).click(function() {
          $root.removeClass(reactiveClass);
          insertCSSAnimation(outAnimName, {
            0: {},
            20: prefix({
              "transform": "scale(1.2)"
            }),
            100: prefix({
              "opacity": "0",
              "transform": "scale(.1)"
            })
          });
          images.css(
          prefix("animation"), outAnimName + " 1.2s cubic-bezier(.2,.6,.3,1)").eq(images.length - 1).bind(animationEndEvent, function(e) {
            if (e.originalEvent.animationName == outAnimName) {
              postboxToolbarGlyphs.removeClass(visibleClass);
              postboxFolderIcons();
            }
          });
        });
      }
    });

  }

  function postboxFolderIcons() {

    var postboxFolderIcons = $works.eq(3),
      images = postboxFolderIcons.children(),
      imagesLength = images.length,
      inAnimName = "inPostboxFolderIcons";

    postboxFolderIcons.addClass(visibleClass);
    $root.css("background", "#DCE1E7");
    logo.css("text-shadow", "0 1px 0 #A4AFBE");
    baseline.css({
      "color": "#A4AFBE",
      "text-shadow": "0 1px 0 rgba(255,255,255,.5)"
    });

    insertCSSAnimation(inAnimName, {
      0: prefix({
        "transform": "translateY(-" + windowHeight + "px)"
      }),
      94: prefix({
        "transform": "translateY(8px)"
      }),
      100: prefix({
        "transform": "translateY(0)"
      })
    });

    function outAnim() {

      var outAnimName = "outPostboxFolderIcons";

      insertCSSAnimation(outAnimName, {
        0: {},
        40: prefix({
          "transform": "translateY(-8px)"
        }),
        100: prefix({
          "transform": "translateY(" + windowHeight + "px)"
        })
      });

      images.each(function(i) {
        var $this = images.eq(i);
        $this.css(prefix({
          "animation": outAnimName + " .8s cubic-bezier(.7,0,.6,.2) " + i / 15 + "s"
        })).bind(animationEndEvent, function() {
          $this.css(prefix("transform"), "translateY(" + windowHeight + "px)");
          if (i == imagesLength - 1) {
            postboxFolderIcons.removeClass(visibleClass);
            kickoffBlankslateIcons();
          }
        });
      });

      $root.removeClass(reactiveClass);

    };

    images.each(function(i) {
      var $this = images.eq(i);
      $this.css(prefix({
        "transform": "translateY(-" + windowHeight + "px)",
        "animation": inAnimName + " 1.5s ease-in " + i / 15 + "s"
      })).bind(animationEndEvent, function(e) {
        if (e.originalEvent.animationName == inAnimName) {
          $this.css(prefix("transform"), "translateY(0)");
          if (i == imagesLength - 1) $root.addClass(reactiveClass).click(outAnim);
        }
      });
    });

  }

  function kickoffBlankslateIcons() {

    var kickoffBlankslateIcons = $works.eq(4),
      icons = kickoffBlankslateIcons.children("img"),
      inAnim = function() {

        var iconSquaresNumber = 100,
          iconSquareElt = $("<span/>", {
            "class": "square"
          }),
          iconsSquaresWrap = $("<span/>", {
            "class": "wrap"
          }),
          iconsNumber = icons.length,
          animName = "inKickoffBlankslateIcons";

        insertCSSAnimation(animName, {
          0: prefix({
            "opacity": "0",
            "transform": "translateX(" + windowWidth + "px) scale(10) rotate(180deg)"
          }),
          50: prefix({
            "opacity": ".5",
            "transform": "translateX(-5px) scale(.5) rotate(-10deg)"
          }),
          100: {
            "opacity": "1"
          }
        });

        function styleBrand() {

          $root.css("background", "#F6F7FA");
          logo.css({
            "color": "#000",
            "text-shadow": "none"
          });
          baseline.css({
            "color": "#ACB5CE",
            "text-shadow": "0 1px 0 #fff"
          });

        }

        function createParticles() {

          var wrap = iconsSquaresWrap.clone(),
            bg = $(this).attr("src");

          for (var i = 0; i < iconSquaresNumber; i++) {
            var x = (i % 10) * 25,
              y = ~~ (i / 10) * 25;
            iconSquareElt.clone().css(prefix({
              "opacity": "0",
              "background-image": "url(" + bg + ")",
              "background-repeat": "no-repeat",
              "background-position": "-" + x + "px -" + y + "px",
              "animation": animName + " 2.8s cubic-bezier(.1,.8,.4,1) " + Math.random() + "s"
            })).appendTo(wrap).bind(animationEndEvent, function(e) {
              if (e.originalEvent.animationName == animName) {
                $(this).css("opacity", "1");
              }
            });

          };

          kickoffBlankslateIcons.append(wrap);

        }

        function animListener(e) {
          if (e.originalEvent.animationName == animName) {
            $root.addClass(reactiveClass).click(outAnim);
            $(this).unbind(animationEndEvent, animListener);
          }
        }

        kickoffBlankslateIcons.addClass(visibleClass);
        styleBrand();
        icons.each(createParticles);
        kickoffBlankslateIcons.bind(animationEndEvent, animListener);

      },
      outAnim = function() {

        var animName = "outKickoffBlankslateIcons",
          animDuration = 1200,
          squares = kickoffBlankslateIcons.find(".square"),
          delays = [];

        insertCSSAnimation(animName, {
          0: {},
          100: prefix({
            "opacity": "0",
            "transform": "translateX(-" + windowWidth + "px) scale(.1) rotate(-300deg)"
          })
        });

        function hideParticles() {

          var $this = $(this),
            delay = Math.random();

          delays.push(delay);

          $this.css(prefix({
            "animation-name": animName,
            "animation-duration": animDuration + "ms",
            "animation-timing-function": "cubic-bezier(.7,0,.6,.2)",
            "animation-delay": delay
          })).bind(animationEndEvent, function(e) {
            if (e.originalEvent.animationName == animName) $this.addClass(hiddenClass);
          });

        }

        squares.each(hideParticles);
        $root.removeClass(reactiveClass).unbind("click", outAnim);

        setTimeout(function() {
          kickoffBlankslateIcons.removeClass(visibleClass);
          kickoffTodos();
        }, animDuration + (delays.sort().pop() * 1000));

      };

    inAnim();

  }

  function kickoffTodos() {

    var kickoffTodos = $works.eq(5),
      screenshot = kickoffTodos.children("img"),
      inAnim = function() {

        var bg = kickoffTodos.children(".bg"),
          starsBack = kickoffTodos.children(".starsBack"),
          starsMiddle = kickoffTodos.children(".starsMiddle"),
          starsFront = kickoffTodos.children(".starsFront"),
          blur = kickoffTodos.children(".blur"),
          stars = [starsBack, starsMiddle, starsFront],
          starsLength = stars.length,
          auroraAnimName = "inAuroraFadesIn",
          starsAnimName = "inMoveStars",
          screenshotAnimName = "inKickoffTodosWindow",
          inBlurAnimName = "inKickoffTodosBlurWindow",
          outBlurAnimName = "outKickoffTodosBlurWindow";

        logo.css({
          "color": "#fff",
          "text-shadow": "0 1px 0 #000"
        });
        baseline.css({
          "color": "#666E8A",
          "text-shadow": "0 1px 0 #000"
        });

        kickoffTodos.addClass(visibleClass);

        insertCSSAnimation(auroraAnimName, {
          0: prefix({
            "opacity": "0",
            "transform": "scale(1.1) translateX(10px)"
          }),
          100: {}
        });

        insertCSSAnimation(starsAnimName, {
          0: {
            "opacity": "0"
          },
          2: prefix({
            "opacity": "1",
            "transform": "translateX(-160px)"
          }),
          4: prefix({
            "opacity": ".2",
            "transform": "translateX(-320px)"
          }),
          5: prefix({
            "opacity": "1",
            "transform": "translateX(-400px)"
          }),
          99: prefix({
            "transform": "translateX(-8000px)"
          }),
          100: prefix({
            "opacity": "0",
            "transform": "translateX(-8000px)"
          })
        });

        insertCSSAnimation(screenshotAnimName, {
          0: {
            "opacity": "0"
          },
          100: {}
        });

        insertCSSAnimation(inBlurAnimName, {
          0: prefix({
            "opacity": "0",
            "transform": "scale(.96)"
          }),
          100: {
            "opacity": ".7"
          }
        });

        insertCSSAnimation(outBlurAnimName, {
          0: {
            "opacity": ".7"
          },
          100: {
            "opacity": "0"
          }
        });

        bg.css(prefix("animation"), auroraAnimName + " 1.5s ease-out").bind(animationEndEvent, function(e) {
          if (e.originalEvent.animationName == auroraAnimName) $root.css("background", "#03092B");
        });

        for (var i = 0; i < starsLength; i++)
        stars[i].css(prefix({
          "animation-name": starsAnimName,
          "animation-timing-function": "linear",
          "animation-iteration-count": "infinite"
        }));

        starsFront.css(prefix("animation-duration"), "420s");
        starsMiddle.css(prefix("animation-duration"), "660s");
        starsBack.css(prefix("animation-duration"), "840s");

        screenshot.addClass(hiddenClass);

        blur.css(prefix({
          "opacity": "0",
          "animation": inBlurAnimName + " .4s ease-out 1.2s"
        })).bind(animationEndEvent, function(e) {
          if (e.originalEvent.animationName == inBlurAnimName) {
            blur.css(prefix("animation"), outBlurAnimName + " 1s linear").bind(animationEndEvent, function(e) {
              if (e.originalEvent.animationName == outBlurAnimName) {
                blur.addClass(hiddenClass);
                $root.addClass(reactiveClass).click(outAnim);
              }
            });
            screenshot.css(prefix("animation"), screenshotAnimName + " .5s linear").removeClass(hiddenClass);
          }
        });

      },
      outAnim = function() {

        var outGlobalAnimName = "outKickoffTodosGlobal",
          outScreenshotAnimName = "outKickoffTodosScreenshot";

        insertCSSAnimation(outGlobalAnimName, {
          0: {},
          100: {
            "opacity": "0"
          }
        });

        insertCSSAnimation(outScreenshotAnimName, {
          0: {},
          100: {
            "opacity": "0"
          }
        });

        kickoffTodos.css(
        prefix("animation"), outGlobalAnimName + " 2.5s ease-out").bind(animationEndEvent, function(e) {
          if (e.originalEvent.animationName == outGlobalAnimName) {
            kickoffTodos.removeClass(visibleClass);
            thanks();
          }
        });

        screenshot.css(
        prefix("animation"), outScreenshotAnimName + " 2s cubic-bezier(.2,.5,.3,1)").bind(animationEndEvent, function(e) {
          if (e.originalEvent.animationName == outScreenshotAnimName) screenshot.addClass(hiddenClass);
        });

        $root.css("background", "#000").removeClass(reactiveClass);

      };

    inAnim();
    $window.resize(function() {
      resizeScreenshot(screenshot);
    });

  }

  function thanks() {

    var thanks = $works.eq(6),
      inAnim = function() {

        var gradient = $("<span/>", {
          "class": "gradient"
        }),
          gradientAnimName = "inThanksGradient",
          infoAnimName = "inThanksInfo",
          copyright = thanks.children("p").eq(1),
          lis = thanks.find("li"),
          mail = lis.eq(0),
          twitter = lis.eq(1),
          info = [copyright, mail, twitter],
          infoLength = info.length,
          styleBrand = function() {

            $root.css("background", "#000");
            logo.css({
              "color": "#fff",
              "text-shadow": "0 1px 0 #000"
            });
            baseline.css({
              "color": "#777",
              "text-shadow": "0 1px 0 #000"
            });

          },
          showInfo = function() {

            for (var j = 0; j < infoLength; j++) {
              info[j].css(
              prefix("animation"), infoAnimName + " 1.2s cubic-bezier(.2,.5,.3,1)").bind(animationEndEvent, function(e) {
                if (e.originalEvent.animationName == infoAnimName) $(this).css("opacity", 1);
              });
            };

            mail.css(prefix("animation-delay"), ".4s");
            twitter.css(prefix("animation-delay"), ".6s");

          };

        insertCSSAnimation(gradientAnimName, {
          0: prefix({
            "opacity": "0",
            "transform": "scale(1.5)"
          }),
          100: {
            "opacity": "1"
          }
        });

        insertCSSAnimation(infoAnimName, {
          0: prefix({
            "opacity": "0",
            "transform": "translateY(15px)"
          }),
          100: {
            "opacity": "1"
          }
        });

        gradient.css(
        prefix("animation"), gradientAnimName + " 2s cubic-bezier(.2,.5,.3,1)");

        for (var i = 0; i < infoLength; i++) {
          info[i].css("opacity", 0);
        };

        var animImages = thanks.children("p").eq(0).children("img"),
          i = 0,
          animImagesLength = animImages.length - 1,
          thanksAnim = setInterval(function() {
            animImages.eq(i).remove();
            i++;
            if (i == animImagesLength) {
              clearInterval(thanksAnim);
              showInfo();
            }
          }, 30);

        thanks.prepend(gradient).addClass(visibleClass);
        styleBrand();

      };

    inAnim();

  }

  function removeLoader() {

    var $loader = $("#loader"),
      animName = "removeLoader";

    insertCSSAnimation(animName, {
      0: {},
      10: prefix({
        "transform": "scale(1.2)"
      }),
      15: prefix({
        "transform": "scale(1.2)"
      }),
      100: prefix({
        "transform": "scale(.1)",
        "opacity": "0"
      })
    });

    $loader.css(prefix("animation"), animName + " 1.5s cubic-bezier(.2,.6,.3,1)").bind(animationEndEvent, function() {
      $loader.remove();
    });

  };

  // Let the show begin

  removeLoader();
  personal32pxSet();

});
var $root = $(document.documentElement),
    $window = $(window);

$root.attr("class","js");

$(function(){

  function animateLoader() { 

    var loader = $("#loader"),
        loaderPos = 0;
    setInterval(function(){
      if(loaderPos == 12)
        loaderPos = 0;
      loader.css("background-position", (loaderPos * -15) + "px 0");
      loaderPos++;
    }, 60);

  }
  function preload() {

    var $works = $("section"),
        postboxCompose = function() {

          var postboxCompose = $works.eq(1),
              emptyElt = $("<div/>");

          postboxCompose
            .append($("<span/>", {"class":"compose-area"}))
            .children()
            .wrapAll(emptyElt.clone().addClass("wrap"))
            .end()
            .prepend(emptyElt.clone().addClass("shadow"))
            .prepend(emptyElt.clone().addClass("gradient"));

        },
        kickoffTodos = function() {

          var kickoffTodos = $works.eq(5),
              emptyElt = $("<span/>");

          kickoffTodos
            .prepend(emptyElt.clone().addClass("starsFront"))
            .prepend(emptyElt.clone().addClass("starsMiddle"))
            .prepend(emptyElt.clone().addClass("starsBack"))
            .prepend(emptyElt.clone().addClass("bg"))
            .append(emptyElt.clone().addClass("blur"));

        },
        thanks = function() {

          var animBox = $works.eq(6).children("p").eq(0),
              animImagesLength = 100;

          function insertImg(src) {
            var img = $("<img/>", {
              alt:"",
              src:"images/thanks/" + src + ".png"
            })
            img.appendTo(animBox);
          }

          for(var i = animImagesLength; i > -1; i--) insertImg(i);

        };

    postboxCompose();
    kickoffTodos();
    thanks();

  };

  animateLoader();
  preload();

});

$window.load(function(){

  // Helpers

  var browserCSSPrefix = "",
      animationEndEvent = "animationend";

  if($.browser.webkit) {
    browserCSSPrefix = "-webkit-";
    animationEndEvent = "webkitAnimationEnd";
  }
  else if($.browser.mozilla)
    browserCSSPrefix = "-moz-";
  else if($.browser.opera)
    browserCSSPrefix = "-o-";

  var windowWidth = $root.width(),
      windowHeight = $root.height(),
      $style = $("<style/>").appendTo("head"),
      $works = $("section"),
      logo = $("h1"),
      baseline = $("h2"),
      reactiveClass = "reactive",
      visibleClass = "visible",
      hiddenClass = "hidden",
      resizeScreenshot = function(screenshot){

        var windowWidth = $root.width(),
            windowHeight = $root.height();
            screenshotWidth = screenshot.width(),
            screenshotHeight = screenshot.height();

        if(windowHeight < screenshotHeight)
          screenshot.css(
            prefix("transform"),"scale(" + windowHeight / screenshotHeight + ")"
          );
        else if(windowWidth < screenshotWidth)
          screenshot.css(
            prefix("transform"),"scale(" + windowWidth / screenshotWidth + ")"
          );
        else
          screenshot.css(prefix("transform"),"scale(1)");

      },
      prefix = function(obj) {
        if(obj instanceof Object) {
          var dict = obj,
              newDict = {};
          $.each(dict,function(key , value) {
            newDict[prefix(key)] = value;
          });
          return newDict;
        }
        if([
          "transform",
          "animation",
          "animation-name",
          "animation-duration",
          "animation-timing-function",
          "animation-iteration-count",
          "animation-direction",
          "animation-delay"
        ].indexOf(obj) > -1)
          obj = browserCSSPrefix + obj;
        return obj;
      },
      insertCSSAnimation = function(name, properties) {
        var anim = "@" + browserCSSPrefix + "keyframes " + name + " {\n";
        $.each(properties, function(progress, props) {
          anim += "\t" + progress + "% {\n";
          $.each(props,function(key , value) {
            anim += "\t\t" + key + ":" + value + ";\n";
          })
          anim += "\t" + "}\n";
        })
        anim += "}\n";
        $style.append(anim);
      };

  // Works

  function personal32pxSet(){

    var personal32pxSet = $works.eq(0),
        images = personal32pxSet.children("img");

    function inAnim(){

      personal32pxSet.addClass(visibleClass);

      var animName = "inPersonal32pxSet";

      insertCSSAnimation(animName, {
        0 : prefix({ "transform" : "translateX(" + windowWidth + "px)" }),
        50 : prefix({ "transform" : "translateX(-20px)" }),
        100 : prefix({ "transform" : "translateX(0)" })
      });

      images
        .css(prefix({
          "transform":"translateX(" + windowWidth + "px)",
          "animation":animName + " .8s cubic-bezier(.2,.6,.3,1)"
        }))
        .bind(animationEndEvent, function(e){
          if(e.originalEvent.animationName == animName) {
            images.css(prefix("transform"),"translateX(0)");
            $root.addClass(reactiveClass);
          }
        });

      images.eq(0).css(prefix("animation-delay"),"1.2s");
      images.eq(1).css(prefix("animation-delay"),"1.4s");
      images.eq(2).css(prefix("animation-delay"),"1.6s");
      images.eq(3).css(prefix("animation-delay"),"1.8s");

    }
    function outAnim(){

      if(!$root.is("." + reactiveClass)) return;

      $root.removeClass(reactiveClass);

      var animName = "outPersonal32pxSet",
          imagesLength = images.length;

      insertCSSAnimation(animName, {
        0 : {},
        100 : prefix({ "transform":"translateX(-" + windowWidth + "px)" })
      });

      images.each(function(i){

        var $this = images.eq(i),
            animDelay = 0;

        if(i == 1) animDelay = "08";
        else if(i == 2) animDelay = "16";
        else if(i == 3) animDelay = "24";

        $this
          .css(
            prefix("animation"),
            animName + " 1s cubic-bezier(.7,0,.6,.2) ." + animDelay + "s"
          )
          .bind(animationEndEvent, function(){
            $this.addClass(hiddenClass);
            if(i == imagesLength - 1) {
              personal32pxSet.removeClass(visibleClass);
              postboxCompose();
            }
          });

      });

    }

    inAnim();
    $root.click(outAnim);

  };
  function postboxCompose(){

    var postboxCompose = $works.eq(1),
        gradient = postboxCompose.children(".gradient"),
        shadow = postboxCompose.children(".shadow"),
        wrap = postboxCompose.children(".wrap");

    postboxCompose.addClass(visibleClass);
    $root.css("background","#DF93BE");
    logo.css("text-shadow","0 1px 0 rgba(0,0,0,.35)");
    baseline.css({
      "color":"#5A3D51",
      "text-shadow":"0 1px 0 rgba(255,255,255,.15)"
    });

    insertCSSAnimation("showGradient", {
      0 : prefix({
        "opacity":"0",
        "transform":"scale(1.2)"
      }),
      100 : {}
    });

    insertCSSAnimation("showWindow", {
      0 : prefix({
        "opacity":"0",
        "transform":"scale(.3)"
      }),
      40 : prefix({
        "opacity":"0",
        "transform":"scale(.3)"
      }),
      50 : prefix({
        "opacity":".1",
        "transform":"scale(1.05)"
      }),
      60 : prefix({
        "opacity":".2",
        "transform":"scale(.98)"
      }),
      70 : prefix({
        "opacity":".3",
        "transform":"scale(1.02)"
      }),
      100 : {}
    });

    insertCSSAnimation("resizeShadow", {
      0 : prefix({
        "opacity":"0",
        "transform":"scaleY(.965) translateY(11px)"
      }),
      40 : prefix({
        "opacity":"0",
        "transform":"scaleY(.965) translateY(11px)"
      }),
      68 : prefix({"transform":"scaleY(.965) translateY(11px)"}),
      100 : {}
    });

    insertCSSAnimation("toolbarSlidesUp", {
      0 : prefix({"transform":"translateY(21px)"}),
      80 : prefix({"transform":"translateY(21px)"}),
      100 : {}
    });

    insertCSSAnimation("formatSlidesDown", {
      0 : prefix({"transform":"translateY(-26px)"}),
      88 : prefix({"transform":"translateY(-26px)"}),
      100 : {}
    });

    insertCSSAnimation("outWindow", {
      0 : {},
      20 : prefix({
        "opacity":".9",
        "transform":"scale(1.05)"
      }),
      35 : prefix({
        "opacity":".8",
        "transform":"scale(1.05)"
      }),
      100 : prefix({
        "transform":"scale(.1)",
        "opacity":"0"
      })
    });

    insertCSSAnimation("outGradient", {
      0 : {},
      100 : prefix({
        "opacity":"0",
        "transform":"translateY(20px)"
      })
    });

    gradient.css(
      prefix("animation"), "showGradient .8s linear"
    );

    shadow.css(
      prefix("animation"), "resizeShadow 3.5s ease-out"
    );

    wrap.css(
      prefix("animation"), "showWindow 1.8s ease-in"
    );

    postboxCompose.find("[src*=toolbar]").css(
      prefix("animation"), "toolbarSlidesUp 3s cubic-bezier(.2,.6,.3,1)"
    );

    postboxCompose.find("[src*=format]").css(
      prefix("animation"), "formatSlidesDown 3.2s cubic-bezier(.2,.6,.3,1)"
    );

    postboxCompose.bind(animationEndEvent, function(e){
      if(e.originalEvent.animationName == "formatSlidesDown") {
        $root.addClass(reactiveClass).click(function(){

          gradient.css(
            prefix("animation"),"outGradient .8s linear"
          );

          shadow.css(
            prefix("animation"),"outWindow .8s cubic-bezier(.7,0,.6,.2)"
          );

          wrap.css(
            prefix("animation"),"outWindow .8s cubic-bezier(.7,0,.6,.2)"
          );

          $root.removeClass(reactiveClass);

          postboxCompose.bind(animationEndEvent, function(e){
            if(e.originalEvent.animationName == "outGradient") {
              postboxCompose.removeClass(visibleClass);
              postboxToolbarGlyphs();
            }
          });

        });
      }
    });

    $window.resize(function(){
      resizeScreenshot(shadow);
      resizeScreenshot(wrap);
    });

  };
  function postboxToolbarGlyphs(){

    var postboxToolbarGlyphs = $works.eq(2),
        images = postboxToolbarGlyphs.children(),
        inAnimName = "inPostboxToolbarGlyph",
        outAnimName = "outPostboxToolbarGlyph";

    postboxToolbarGlyphs.addClass(visibleClass);
    $root.css("background","#D0D0D0");
    logo.css("text-shadow","0 1px 0 rgba(0,0,0,.35)");
    baseline.css({
      "color":"#888",
      "text-shadow":"0 1px 0 rgba(255,255,255,.3)"
    });

    var centerValue = parseInt(images.length / 2),
        centerImage = images.eq(centerValue),
        centerImageXPos = centerImage.position().left,
        centerImageYPos = centerImage.position().top;

    insertCSSAnimation("showCenterPostboxGlyph", {
      0 : prefix({
        "opacity":"0",
        "transform":"scale(2.5)"
      }),
      30 : prefix({
        "opacity":"0",
        "transform":"scale(2.5)"
      }),
      50 : prefix({
        "transform":"scale(.6)"
      }),
      100 : {}
    });

    centerImage.css(
      prefix("animation"),
      "showCenterPostboxGlyph 2.2s cubic-bezier(.2,.6,.3,1)"
    );

    images.each(function(i){

      if(i == centerValue) return;

      var $this = images.eq(i),
          thisInAnimName = inAnimName + i,
          thisInAnimDelay = 65 + (i/1.5),
          offsetX = (centerImageXPos - $this.position().left) + "px",
          offsetY = (centerImageYPos - $this.position().top) + "px",
          props = {
            0 : prefix({
              "opacity":"0",
              "transform":"translate(" + offsetX + "," + offsetY + ")"
            }),
            100 : {}
          };

      props[thisInAnimDelay] = prefix({
        "opacity":"0",
        "transform":"translate(" + offsetX + "," + offsetY + ")"
      });

      insertCSSAnimation(thisInAnimName, props);

      $this.css(
        prefix("animation"),
        thisInAnimName + " 3s cubic-bezier(.2,.6,.3,1)"
      );

    });

    postboxToolbarGlyphs.bind(animationEndEvent, function(e){
      if(e.originalEvent.animationName == inAnimName + (images.length - 1)) {
        $root.addClass(reactiveClass).click(function(){
          $root.removeClass(reactiveClass);
          insertCSSAnimation(outAnimName, {
            0 : {},
            20 : prefix({"transform":"scale(1.2)"}),
            100 : prefix({
              "opacity":"0",
              "transform":"scale(.1)"
            })
          });
          images
            .css(
              prefix("animation"),
              outAnimName + " 1.2s cubic-bezier(.2,.6,.3,1)"
            )
            .eq(images.length - 1)
            .bind(animationEndEvent, function(e){
              if(e.originalEvent.animationName == outAnimName) {
                postboxToolbarGlyphs.removeClass(visibleClass);
                postboxFolderIcons();
              }
            });
        });
      }
    });

  }
  function postboxFolderIcons(){

    var postboxFolderIcons = $works.eq(3),
        images = postboxFolderIcons.children(),
        imagesLength = images.length,
        inAnimName = "inPostboxFolderIcons";

    postboxFolderIcons.addClass(visibleClass);
    $root.css("background","#DCE1E7");
    logo.css("text-shadow","0 1px 0 #A4AFBE");
    baseline.css({
      "color":"#A4AFBE",
      "text-shadow":"0 1px 0 rgba(255,255,255,.5)"
    });

    insertCSSAnimation(inAnimName, {
      0 : prefix({"transform":"translateY(-" + windowHeight + "px)"}),
      94 : prefix({"transform":"translateY(8px)"}),
      100 : prefix({"transform":"translateY(0)"})
    });

    function outAnim() {

      var outAnimName = "outPostboxFolderIcons";

      insertCSSAnimation(outAnimName, {
        0 : {},
        40 : prefix({"transform":"translateY(-8px)"}),
        100 : prefix({"transform":"translateY(" + windowHeight + "px)"})
      });

      images.each(function(i){
        var $this = images.eq(i);
        $this
          .css(prefix({
            "animation":outAnimName+" .8s cubic-bezier(.7,0,.6,.2) "+i/15+"s"
          }))
          .bind(animationEndEvent, function(){
            $this.css(prefix("transform"),"translateY(" + windowHeight + "px)");
            if(i == imagesLength - 1) {
              postboxFolderIcons.removeClass(visibleClass);
              kickoffBlankslateIcons();
            }
          });
      });

      $root.removeClass(reactiveClass);

    };

    images.each(function(i){
      var $this = images.eq(i);
      $this
        .css(prefix({
          "transform":"translateY(-" + windowHeight + "px)",
          "animation":inAnimName + " 1.5s ease-in " + i/15 + "s"
        }))
        .bind(animationEndEvent, function(e){
          if(e.originalEvent.animationName == inAnimName) {
            $this.css(prefix("transform"),"translateY(0)");
            if(i == imagesLength - 1)
              $root.addClass(reactiveClass).click(outAnim);
          }
        });
    });

  }
  function kickoffBlankslateIcons(){

    var kickoffBlankslateIcons = $works.eq(4),
        icons = kickoffBlankslateIcons.children("img"),
        inAnim = function(){

          var iconSquaresNumber = 100,
              iconSquareElt = $("<span/>", {"class":"square"}),
              iconsSquaresWrap = $("<span/>", {"class":"wrap"}),
              iconsNumber = icons.length,
              animName = "inKickoffBlankslateIcons";

          insertCSSAnimation(animName, {
            0 : prefix({
              "opacity":"0",
              "transform":"translateX("
                          + windowWidth
                          + "px) scale(10) rotate(180deg)"
            }),
            50 : prefix({
              "opacity":".5",
              "transform":"translateX(-5px) scale(.5) rotate(-10deg)"
            }),
            100 : {"opacity":"1"}
          });

          function styleBrand(){

            $root.css("background","#F6F7FA");
            logo.css({
              "color":"#000",
              "text-shadow":"none"
            });
            baseline.css({
              "color":"#ACB5CE",
              "text-shadow":"0 1px 0 #fff"
            });

          }
          function createParticles() {

            var wrap = iconsSquaresWrap.clone(),
                bg = $(this).attr("src");

            for (var i=0; i < iconSquaresNumber; i++) {
              var x = (i % 10) * 25,
                  y = ~~(i / 10) * 25;
              iconSquareElt
                .clone()
                .css(prefix({
                  "opacity":"0",
                  "background-image":"url(" + bg + ")",
                  "background-repeat":"no-repeat",
                  "background-position":"-" + x + "px -" + y + "px",
                  "animation":animName
                              + " 2.8s cubic-bezier(.1,.8,.4,1) "
                              + Math.random()
                              + "s"
                }))
                .appendTo(wrap)
                .bind(animationEndEvent, function(e){
                  if(e.originalEvent.animationName == animName) {
                    $(this).css("opacity","1");
                  }
                });

            };

            kickoffBlankslateIcons.append(wrap);

          }
          function animListener(e) {
            if(e.originalEvent.animationName == animName) {
              $root.addClass(reactiveClass).click(outAnim);
              $(this).unbind(animationEndEvent, animListener);
            }
          }

          kickoffBlankslateIcons.addClass(visibleClass);
          styleBrand();
          icons.each(createParticles);
          kickoffBlankslateIcons.bind(animationEndEvent, animListener);

        },
        outAnim = function(){

          var animName = "outKickoffBlankslateIcons",
              animDuration = 1200,
              squares = kickoffBlankslateIcons.find(".square"),
              delays = [];

          insertCSSAnimation(animName, {
            0 : {},
            100 : prefix({
              "opacity":"0",
              "transform":"translateX(-"
                          + windowWidth
                          + "px) scale(.1) rotate(-300deg)"
            })
          });

          function hideParticles() {

            var $this = $(this),
                delay = Math.random();

            delays.push(delay);

            $this
              .css(prefix({
                "animation-name":animName,
                "animation-duration":animDuration + "ms",
                "animation-timing-function":"cubic-bezier(.7,0,.6,.2)",
                "animation-delay":delay
              }))
              .bind(animationEndEvent, function(e){
                if(e.originalEvent.animationName == animName)
                  $this.addClass(hiddenClass);
              });

          }

          squares.each(hideParticles);
          $root.removeClass(reactiveClass).unbind("click", outAnim);

          setTimeout(function(){
            kickoffBlankslateIcons.removeClass(visibleClass);
            kickoffTodos();
          }, animDuration + (delays.sort().pop() * 1000));

        };

    inAnim();

  }
  function kickoffTodos(){

    var kickoffTodos = $works.eq(5),
        screenshot = kickoffTodos.children("img"),
        inAnim = function() {

          var bg = kickoffTodos.children(".bg"),
              starsBack = kickoffTodos.children(".starsBack"),
              starsMiddle = kickoffTodos.children(".starsMiddle"),
              starsFront = kickoffTodos.children(".starsFront"),
              blur = kickoffTodos.children(".blur"),
              stars = [starsBack,starsMiddle,starsFront],
              starsLength = stars.length,
              auroraAnimName = "inAuroraFadesIn",
              starsAnimName = "inMoveStars",
              screenshotAnimName = "inKickoffTodosWindow",
              inBlurAnimName = "inKickoffTodosBlurWindow",
              outBlurAnimName = "outKickoffTodosBlurWindow";

          logo.css({
            "color":"#fff",
            "text-shadow":"0 1px 0 #000"
          });
          baseline.css({
            "color":"#666E8A",
            "text-shadow":"0 1px 0 #000"
          });

          kickoffTodos.addClass(visibleClass);

          insertCSSAnimation(auroraAnimName, {
            0 : prefix({
              "opacity":"0",
              "transform":"scale(1.1) translateX(10px)"
            }),
            100 : {}
          });

          insertCSSAnimation(starsAnimName, {
            0 : {"opacity":"0"},
            2 : prefix({
              "opacity":"1",
              "transform":"translateX(-160px)"
            }),
            4 : prefix({
              "opacity":".2",
              "transform":"translateX(-320px)"
            }),
            5 : prefix({
              "opacity":"1",
              "transform":"translateX(-400px)"
            }),
            99: prefix({"transform":"translateX(-8000px)"}),
            100 : prefix({
              "opacity":"0",
              "transform":"translateX(-8000px)"
            })
          });

          insertCSSAnimation(screenshotAnimName, {
            0 : {"opacity":"0"},
            100 : {}
          });

          insertCSSAnimation(inBlurAnimName, {
            0 : prefix({
              "opacity":"0",
              "transform":"scale(.96)"
            }),
            100 : {"opacity":".7"}
          });

          insertCSSAnimation(outBlurAnimName, {
            0 : {"opacity":".7"},
            100 : {"opacity":"0"}
          });

          bg
            .css(prefix("animation"), auroraAnimName + " 1.5s ease-out")
            .bind(animationEndEvent, function(e){
              if(e.originalEvent.animationName == auroraAnimName)
                $root.css("background","#03092B");
            });

          for (var i=0; i < starsLength; i++)
            stars[i].css(prefix({
              "animation-name":starsAnimName,
              "animation-timing-function":"linear",
              "animation-iteration-count":"infinite"
            }));

          starsFront.css(prefix("animation-duration"), "420s");
          starsMiddle.css(prefix("animation-duration"),"660s");
          starsBack.css(prefix("animation-duration"),  "840s");

          screenshot.addClass(hiddenClass);

          blur
            .css(prefix({
              "opacity":"0",
              "animation":inBlurAnimName + " .4s ease-out 1.2s"
            }))
            .bind(animationEndEvent, function(e){
              if(e.originalEvent.animationName == inBlurAnimName) {
                blur
                  .css(prefix("animation"), outBlurAnimName + " 1s linear")
                  .bind(animationEndEvent, function(e){
                    if(e.originalEvent.animationName == outBlurAnimName) {
                      blur.addClass(hiddenClass);
                      $root.addClass(reactiveClass).click(outAnim);
                    }
                  });
                screenshot
                  .css(prefix("animation"), screenshotAnimName + " .5s linear")
                  .removeClass(hiddenClass);
              }
            });

        },
        outAnim = function() {

          var outGlobalAnimName = "outKickoffTodosGlobal",
              outScreenshotAnimName = "outKickoffTodosScreenshot";

          insertCSSAnimation(outGlobalAnimName, {
            0 : {},
            100 : {"opacity":"0"}
          });

          insertCSSAnimation(outScreenshotAnimName, {
            0 : {},
            100 : {"opacity":"0"}
          });

          kickoffTodos
            .css(
              prefix("animation"),
              outGlobalAnimName + " 2.5s ease-out"
            )
            .bind(animationEndEvent, function(e){
              if(e.originalEvent.animationName == outGlobalAnimName) {
                kickoffTodos.removeClass(visibleClass);
                thanks();
              }
            });

          screenshot
            .css(
              prefix("animation"),
              outScreenshotAnimName + " 2s cubic-bezier(.2,.5,.3,1)"
            )
            .bind(animationEndEvent, function(e){
              if(e.originalEvent.animationName == outScreenshotAnimName)
                screenshot.addClass(hiddenClass);
            });

          $root.css("background","#000").removeClass(reactiveClass);

        };

    inAnim();
    $window.resize(function(){
      resizeScreenshot(screenshot);
    });

  }
  function thanks(){

    var thanks = $works.eq(6),
        inAnim = function(){

          var gradient = $("<span/>", {"class":"gradient"}),
              gradientAnimName = "inThanksGradient",
              infoAnimName = "inThanksInfo",
              copyright = thanks.children("p").eq(1),
              lis = thanks.find("li"),
              mail = lis.eq(0),
              twitter = lis.eq(1),
              info = [copyright,mail,twitter],
              infoLength = info.length,
              styleBrand = function() {

                $root.css("background","#000");
                logo.css({
                  "color":"#fff",
                  "text-shadow":"0 1px 0 #000"
                });
                baseline.css({
                  "color":"#777",
                  "text-shadow":"0 1px 0 #000"
                });

              },
              showInfo = function() {

                for (var j=0; j < infoLength; j++) {
                  info[j]
                    .css(
                      prefix("animation"),
                      infoAnimName + " 1.2s cubic-bezier(.2,.5,.3,1)"
                    )
                    .bind(animationEndEvent, function(e){
                      if(e.originalEvent.animationName == infoAnimName)
                        $(this).css("opacity",1);
                    });
                };

                mail.css(prefix("animation-delay"),".4s");
                twitter.css(prefix("animation-delay"),".6s");

              };

          insertCSSAnimation(gradientAnimName, {
            0 : prefix({
              "opacity":"0",
              "transform":"scale(1.5)"
            }),
            100 : {"opacity":"1"}
          });

          insertCSSAnimation(infoAnimName, {
            0 : prefix({
              "opacity":"0",
              "transform":"translateY(15px)"
            }),
            100 : {"opacity":"1"}
          });

          gradient.css(
            prefix("animation"),
            gradientAnimName + " 2s cubic-bezier(.2,.5,.3,1)"
          );

          for (var i=0; i < infoLength; i++) {
            info[i].css("opacity",0);
          };

          var animImages = thanks.children("p").eq(0).children("img"),
              i = 0,
              animImagesLength = animImages.length - 1,
              thanksAnim = setInterval(function(){
                animImages.eq(i).remove();
                i++;
                if(i == animImagesLength) {
                  clearInterval(thanksAnim);
                  showInfo();
                }
              }, 30);

          thanks.prepend(gradient).addClass(visibleClass);
          styleBrand();

        };

    inAnim();

  }
  function removeLoader(){

    var $loader = $("#loader"),
        animName = "removeLoader";

    insertCSSAnimation(animName, {
      0 : {},
      10 : prefix({"transform":"scale(1.2)"}),
      15 : prefix({"transform":"scale(1.2)"}),
      100 : prefix({
        "transform":"scale(.1)",
        "opacity":"0"
      })
    });

    $loader
      .css(prefix("animation"), animName + " 1.5s cubic-bezier(.2,.6,.3,1)")
      .bind(animationEndEvent, function(){
        $loader.remove();
      });

  };

  // Let the show begin

  removeLoader();
  personal32pxSet();

});