function main()
{
    // Images for the button panel
    var buttons = [
        {src: "images/buttons/home.png", alt: "intro page", action: "intro"},
        {src: "images/buttons/cv.png", alt: "curriculum vitae", action: "cv"},
        {src: "images/buttons/games.png", alt: "game portfolio", action: "games"},
        {src: "images/buttons/work.png", alt: "work portfolio", action: "work"}
    ];

    // Array used to preload all images for a smoother experience.
    var images = [
        "images/arrow_left.png",
        "images/arrow_left_hover.png",
        "images/arrow_right.png",
        "images/arrow_right_hover.png",
        "images/close.png",
        "images/close_hover.png",
        "images/devel_background.png",
        "images/devel_button.png",
        "images/intro_image.png",
        "images/linkedin_logo.png",
        "images/buttons/cv.png",
        "images/buttons/cv_over.png",
        "images/buttons/cv_down.png",
        "images/buttons/games.png",
        "images/buttons/games_over.png",
        "images/buttons/games_down.png",
        "images/buttons/home.png",
        "images/buttons/home_over.png",
        "images/buttons/home_down.png",
        "images/buttons/work.png",
        "images/buttons/work_over.png",
        "images/buttons/work_down.png",
        
        "images/game_logos/avatar.png",
        "images/game_logos/babar.png",
        "images/game_logos/ben10.png",
        "images/game_logos/bomber.png",
        "images/game_logos/conflict.png",
        "images/game_logos/crazy.png",
        "images/game_logos/golf.png",
        "images/game_logos/goo.png",
        "images/game_logos/krab.png",
        "images/game_logos/paradise.png",
        "images/game_logos/paradiseds.png",
        "images/game_logos/sabrina.png",

        "images/work_logos/itx.png",
        "images/work_logos/kbw.png",
        "images/work_logos/mapster.png",
        "images/work_logos/salient.png",
        "images/work_logos/sky.png",
    ];

    // Images for the horizontal sliding preview of the games.
    var game_covers = [
        {src: "images/game_logos/avatar.png", alt: "avatar - master of the elements screenshot", id: "desc_avatar"},
        {src: "images/game_logos/babar.png", alt: "babar - to the rescue game cover", id: "desc_babar"},
        {src: "images/game_logos/ben10.png", alt: "ben 10 - power of the omnitrix screenshot", id: "desc_ben10"},
        {src: "images/game_logos/bomber.png", alt: "bomberblaster game cover", id: "desc_bomber"},
        {src: "images/game_logos/conflict.png", alt: "conflict game cover", id: "desc_conflict"},
        {src: "images/game_logos/crazy.png", alt: "crazy sundaes screenshot", id: "desc_crazy"},
        {src: "images/game_logos/golf.png", alt: "sky sports golf tour screenshot", id: "desc_golf"},
        {src: "images/game_logos/goo.png", alt: "goo goes gaga screenshot", id: "desc_goo"},
        {src: "images/game_logos/paradise.png", alt: "escape from paradise city game cover", id: "desc_escape"},
        {src: "images/game_logos/paradiseds.png", alt: "paradise city ds screenshot", id: "desc_paradise"},
        {src: "images/game_logos/sabrina.png", alt: "sabrina screenshot", id: "desc_sabrina"},
        {src: "images/game_logos/krab.png", alt: "krabtilicus screenshot", id: "desc_krab"}
    ];

    // Definition of the buttons that triggers a popup.
    var work_buttons = [
        {buttonId: "button_itx", popupId: "desc_itx"},
        {buttonId: "button_kbw", popupId: "desc_kbw"},
        {buttonId: "button_mapster", popupId: "desc_mapster"},
        {buttonId: "button_salient", popupId: "desc_salient"},
        {buttonId: "button_sky", popupId: "desc_sky"}
    ];

    // Prevent selection of text.
    document.onmousedown = function()
    {
        return false;
    }
    // Same for IE
    document.onselectstart = function()
    {
        return false;
    }


    // Preload images so the page is shown in one go.
    var MIN_LOAD_TIME = 500; // ms

    function onLoaded()
    {
        // Show developer button
        document.getElementById("devel_button").style.display = "block";
        document.getElementById("devel_text").style.display = "block";

        // Shown main page.
        pageManager.changePage("intro");
    }

    // Load images
    var mainRef = document.getElementById("main");
    loadSplash.load(images, onLoaded, mainRef, MIN_LOAD_TIME);


    // Init description box.
    descriptionBox.init(document.getElementById("description_box"));


    // Create buttons
    var buttonContainer = document.getElementById("button_container");
    var i;
    for (i = 0; i < buttons.length; i++)
    {
        var button = buttons[i];
        var imgRef = buttonManager.createButton(button.src, button.alt, button.action);
        buttonContainer.appendChild(imgRef);
    }

    buttonManager.getButton(0).setSelected(true);


    // Create game covers
    var list = scrollingList(game_covers);
    var coverRef = document.getElementById("games");
    coverRef.appendChild(list.divRef);


    // Link buttons to popups for work portfolio.
    for (i = 0; i < work_buttons.length; i++)
    {
        var workButton = work_buttons[i];
        popup(workButton.buttonId, workButton.popupId);
    }


    // Enable developer button
    slider("devel_button", "devel_text", 233);
}

