define([
    'jquery',
    '/common/hyperscript.js',
    '/common/cryptpad-common.js',
    '/customize/pages.js',

    'css!/bower_components/components-font-awesome/css/font-awesome.min.css',
], function ($, h, Cryptpad, Pages) {
$(function () {
    var $body = $('body');
    var isMainApp = function () {
        return /^\/(pad|code|slide|poll|whiteboard|file|media|contacts|drive|settings|profile|todo)\/$/.test(location.pathname);
    };

    var infoPage = function () {
        return h('div#mainBlock.hidden', typeof(Pages[location.pathname]) === 'function'?
            Pages[location.pathname](): [h('div#container')]);
    };

    var $main = $(infoPage());

    var pathname = location.pathname;

    if (isMainApp()) {
        if (typeof(Pages[pathname]) === 'function') {
            var $flash = $('body, #iframe-container, #pad-iframe, textarea');
            $flash.css({
                display: 'none',
                opacity: 0,
                overflow: 'hidden',
            });
            var ready = function () {
                $flash.css({
                    display: '',
                    opacity: '',
                    overflow: '',
                });
            };

            require([
                'less!/customize/src/less/loading.less'
            ], function () {
                if (/whiteboard/.test(pathname)) {
                    $('body').html(h('body', Pages[pathname]()).innerHTML);
                    require(['/whiteboard/main.js'], ready);
                } else if (/poll/.test(pathname)) {
                    $('body').html(h('body', Pages[pathname]()).innerHTML);
                    require(['/poll/main.js'], ready);
                } else if (/drive/.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require(['/drive/main.js'], ready);
                } else if (/\/file\//.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/file/main.js' ], ready);
                } else if (/contacts/.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/contacts/main.js' ], ready);
                } else if (/pad/.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/pad/main.js' ], ready);
                } else if (/code/.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/code/main.js' ], ready);
                } else if (/slide/.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/slide/main.js' ], ready);
                } else if (/^\/settings\//.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/settings/main.js', ], ready);
                } else if (/^\/profile\//.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/profile/main.js', ], ready);
                } else if (/^\/todo\//.test(pathname)) {
                    $('body').append(h('body', Pages[pathname]()).innerHTML);
                    require([ '/todo/main.js', ], ready);
                }
            });

            return;
        }
    } else {
        // add class on info-pages
        var css = location.pathname.replace(/(index)?\.html$/gi, "") // .html
            .replace(/[^a-zA-Z]+/gi, '-') // any non-alpha character
            .replace(/^-|-$/g, ''); // starting/trailing dashes
        if (css === '')
        {
            css = 'index';
        }
        $('body').addClass('cp-page-' + css);
    }

    require([
        'less!/customize/src/less2/main.less',
        'css!/bower_components/bootstrap/dist/css/bootstrap.min.css',
        '/bower_components/bootstrap/dist/js/bootstrap.min.js'
    ], function () {
        $body.append($main);

        if (/^\/user\//.test(pathname)) {
            require([ '/user/main.js'], function () {});
        } else if (/^\/register\//.test(pathname)) {
            require([ '/register/main.js' ], function () {});
        } else if (/^\/login\//.test(pathname)) {
            require([ '/login/main.js' ], function () {});
        } else if (/^\/($|^\/index\.html$)/.test(pathname)) {
            // TODO use different top bar
            require([ '/customize/main.js', ], function () {});
        } else if (/invite/.test(pathname)) {
            require([ '/invite/main.js'], function () {});
        } else {
            require([ '/customize/main.js', ], function () {});
        }
    });
});
});
