HH.insert('API',function(){

    let failCode = null;

    async function apiRequest( url , method, data, func  ){
        let request = {
            method: method,
            headers: {
                "Content-Type": "application/json"
            }
        }
        if( method === 'GET' ){
            let query_string = new URLSearchParams(data).toString();
            if( query_string.length ){
                url = url + '?' + query_string;
            }
        }
        if( method === 'POST' ){
            request.body = JSON.stringify(data);
        }
        const response = await fetch(HH_API + url, request );
        try {
            const resp = await response.json();
            if( response.status < 200 || response.status >= 300 ) {
                if (typeof failCode === 'function') {
                    failCode(response,resp);
                }
            }else {
                if( typeof func === 'function' ) {
                    func(resp);
                }
            }
        } catch(e) {
            if (typeof failCode === 'function') {
                failCode(response, {} );
            }
        }
    }
    return {
        request :   function( url , method = 'GET', data = {}, func = null ){
            apiRequest( url , method, data, func )
            return {
                fail    :   function(func){
                    failCode = func;
                }
            }
        }
    }

});HH.insert('get_stats',function(hub_id){
    let hubStats = null;
    let timers = document.getElementsByClassName('switchTime');
    let startTime = new Date();
    startTime.setDate(startTime.getDate() - 30);
    function buildLaunchesChart(launches){
        let dataArray = [];
        dataArray.push(['Date','Launches']);
        let totalLaunches = 0;
        for (const key in launches) {
            if( Date.parse(key) > startTime ) {
                totalLaunches = totalLaunches + launches[key];
                dataArray.push([key, launches[key]]);
            }
        }
        document.getElementsByClassName('totalLaunches')[0].innerHTML = 'Hub Launches (' + totalLaunches + ')';
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Hub Launches',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('launches'));
        chart.draw(data, options);
    }

    function buildFlagsChart(flags){
        let dataArray = [];
        dataArray.push(['Date','Flags']);
        let totalFlags = 0;
        for (const key in flags) {
            if( Date.parse(key) > startTime ) {
                totalFlags = totalFlags + flags[key];
                dataArray.push([key, flags[key]]);
            }
        }
        document.getElementsByClassName('totalFlags')[0].innerHTML = 'Flags/Answers Collected (' + totalFlags + ')';
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 550,
            title: 'Flags Found',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('flags'));
        chart.draw(data, options);
    }

    function buildLaunchTimeChart(launchTime){
        let dataArray = [];
        dataArray.push(['Date','Seconds']);
        let totalTime = 0;
        let instances = 0;
        for (const key in launchTime) {
            if( Date.parse(key) > startTime ) {
                let tmpTime = ( launchTime[key] > 120 ) ? 120 : launchTime[key];
                totalTime = totalTime + tmpTime;
                instances++
                dataArray.push([key, tmpTime]);
            }
        }
        document.getElementsByClassName('averageLaunchTime')[0].innerHTML = 'Launch Time (' + Math.round((totalTime/instances)) + ' seconds average)';
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Time To Launch',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('launchtime'));
        chart.draw(data, options);
    }
    function buildCharts(){
        buildLaunchesChart(hubStats.launched)
        buildFlagsChart(hubStats.flags);
        buildLaunchTimeChart( hubStats.launch_time );
    }

    function buildTable(){
        google.charts.load('current', {'packages': ['table']});
        google.charts.setOnLoadCallback(function () {
            let data = new google.visualization.DataTable();
            data.addColumn('string', 'Hub Name');
            data.addColumn('number', 'Launches');
            data.addColumn('number', 'Flags/Answers');
            let dataStructure = [];
            for(let i=0;i<hubStats.length;i++){
                dataStructure.push(  ['<a href="/hubs/' + hubStats[i].id + '/stats">' + hubStats[i].name + '</a>'  ,hubStats[i].launches,hubStats[i].flags] )
            }
            data.addRows( dataStructure );
            let table = new google.visualization.Table(document.getElementById('allstats'));
            table.draw(data, { allowHtml: true, showRowNumber: false, width: '100%', height: '100%',sortColumn: 1, sortAscending: false  });
        });
    }



    function totalUsersChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Total Users',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.LineChart(document.getElementById('total_users'));
        chart.draw(data, options);
    }

    function dailySignupChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Daily Signups',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.LineChart(document.getElementById('daily_signups'));
        chart.draw(data, options);
    }

    function dailyFlagChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Daily Flags',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.LineChart(document.getElementById('daily_flags'));
        chart.draw(data, options);
    }

    function monthlySignupChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Monthly Signups',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('monthly_signups'));
        chart.draw(data, options);
    }

    function monthlyFlagChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Monthly Flags',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('monthly_flags'));
        chart.draw(data, options);
    }


    function dailyActiveUsersChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Daily Active Users',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.LineChart(document.getElementById('dau'));
        chart.draw(data, options);
    }


    function monthlyActiveUsersChart(dataArray){
        let data = google.visualization.arrayToDataTable(dataArray);
        let options = {
            height: 500,
            title: 'Monthly Active Users',
            legend: { position: 'none' }
        };
        let chart = new google.visualization.ColumnChart(document.getElementById('mau'));
        chart.draw(data, options);
    }

    if( typeof hub_id === 'string' && hub_id === 'all' ) {

        for (let i = 0; i < timers.length; i++) {
            timers[i].addEventListener('click', function (e) {
                e.preventDefault();
                for (let i = 0; i < timers.length; i++) {
                    timers[i].classList.remove('label-success');
                    timers[i].classList.add('label-default');
                }
                e.target.classList.add('label-success');
                let timescale = (e.target.attributes["data-time"].value);
                if (timescale === 'all') {
                    startTime = new Date();
                    startTime.setDate(startTime.getDate() - 10000);
                }
                if (timescale === 'last100') {
                    startTime = new Date();
                    startTime.setDate(startTime.getDate() - 100);
                }
                if (timescale === 'last30') {
                    startTime = new Date();
                    startTime.setDate(startTime.getDate() - 30);
                }
                if (timescale === 'last7') {
                    startTime = new Date();
                    startTime.setDate(startTime.getDate() - 7);
                }
                if (timescale === 'last24') {
                    startTime = new Date();
                    startTime.setDate(startTime.getDate() - 1);
                }
                getStatsData();
            })
        }
        getStatsData();
    } else if ( typeof hub_id === 'string' && hub_id === 'users' ){
        google.charts.load('current', {'packages': ['corechart', 'bar']});
        google.charts.setOnLoadCallback(function () {
            HH.API().request('/admin/users/stats', 'GET', {}, function (resp) {
                if (resp.hasOwnProperty('logged_in') && resp.hasOwnProperty('days') && resp.hasOwnProperty('months')) {
                    let usersArray = [];
                    usersArray.push(['Date','Users']);
                    let totalUsers = 0;
                    let totalUsersArray = [];
                    totalUsersArray.push(['Date','Users']);
                    let flagsArray = [];
                    flagsArray.push(['Date','Flags']);
                    let dauArray = [];
                    dauArray.push(['Date','DAU']);
                    let monthlyUsersArray = [];
                    monthlyUsersArray.push(['Date','Users']);
                    let monthlyFlagsArray = [];
                    monthlyFlagsArray.push(['Date','Flags']);
                    let mauArray = [];
                    mauArray.push(['Date','MAU']);
                    for (const key in resp.days ) {
                        totalUsers = totalUsers + resp.days[key].users;
                        totalUsersArray.push([key, totalUsers  ]);
                        usersArray.push([key, resp.days[key].users  ]);
                        flagsArray.push([key, resp.days[key].flags  ]);
                        dauArray.push([key, resp.days[key].active  ]);
                    }
                    for (const key in resp.months ) {
                        monthlyUsersArray.push([key, resp.months[key].users  ]);
                        monthlyFlagsArray.push([key, resp.months[key].flags  ]);
                        mauArray.push([key, resp.months[key].active  ]);
                    }
                    totalUsersChart(totalUsersArray);
                    dailySignupChart(usersArray);
                    dailyFlagChart(flagsArray);
                    dailyActiveUsersChart(dauArray);
                    monthlySignupChart(monthlyUsersArray);
                    monthlyFlagChart(monthlyFlagsArray);
                    monthlyActiveUsersChart(mauArray);
                }
            }).fail(function (resp, data) {
                if (data.hasOwnProperty('error')) {
                    alert(data.error);
                } else {
                    alert('An unexpected error occurred.');
                }
            });
        });
    }else {
        google.charts.load('current', {'packages': ['corechart', 'bar']});
        google.charts.setOnLoadCallback(function () {
            HH.API().request('/admin/hubs/' + hub_id + '/stats', 'GET', {}, function (resp) {
                if (resp.hasOwnProperty('logged_in') && resp.hasOwnProperty('hub') && resp.hasOwnProperty('stats')) {
                    document.getElementsByClassName('bcname')[0].innerHTML = resp.hub.name + ' Stats';
                    document.getElementsByTagName('H1')[0].innerHTML = 'Hubs - ' + resp.hub.name;
                    hubStats = resp.stats;
                    buildCharts();
                    for (let i = 0; i < timers.length; i++) {
                        timers[i].addEventListener('click', function (e) {
                            e.preventDefault();
                            for (let i = 0; i < timers.length; i++) {
                                timers[i].classList.remove('label-success');
                                timers[i].classList.add('label-default');
                            }
                            e.target.classList.add('label-success');
                            let timescale = (e.target.attributes["data-time"].value);
                            if (timescale === 'all') {
                                startTime = new Date();
                                startTime.setDate(startTime.getDate() - 10000);
                            }
                            if (timescale === 'last100') {
                                startTime = new Date();
                                startTime.setDate(startTime.getDate() - 100);
                            }
                            if (timescale === 'last30') {
                                startTime = new Date();
                                startTime.setDate(startTime.getDate() - 30);
                            }
                            if (timescale === 'last7') {
                                startTime = new Date();
                                startTime.setDate(startTime.getDate() - 7);
                            }
                            if (timescale === 'last24') {
                                startTime = new Date();
                                startTime.setDate(startTime.getDate() - 1);
                            }
                            buildCharts();
                        })
                    }
                }
            }).fail(function (resp, data) {
                if (data.hasOwnProperty('error')) {
                    alert(data.error);
                } else {
                    alert('An unexpected error occurred.');
                }
            });
        });
    }



});


HH.insert('listHubs',function(part_of){

    let current_page = 1;
    let keyuptimer;
    let failed = 0;

    document.getElementById('filter').value = '';

    function addHub( hub, padding_class, logged_in ){
        let tmphub = document.createElement('DIV');
        let html = '<div class="col-md-4 col-sm-6' + padding_class + '" data-id="' + hub.id + '" data-type="' + hub.type + '">';
        html += '<div class="challenge">'
        html += ( hub.completed ) ? '<div class="challenge-done"><span class="glyphicon glyphicon-ok"></span></div>' : '';
        html += '<div style="height: 170px">';
        html += '<div class="challenge-title">' + (( hub.completed ) ? '&nbsp;&nbsp;&nbsp;&nbsp;' + hub.name : hub.name);

        if( hub.type != 'module' && hub.type != 'course' ) {
            html += '<div class="challenge-difficulty pull-right">';
            html += '<div class="challenge-difficulty-' + hub.level + '"></div>';
            html += (hub.level < 2) ? '<div style="background-color: #ececec"></div>' : '<div class="challenge-difficulty-' + hub.level + '"></div>';
            html += (hub.level < 3) ? '<div style="background-color: #ececec"></div>' : '<div class="challenge-difficulty-' + hub.level + '"></div>';
            html += (hub.level < 4) ? '<div style="background-color: #ececec"></div>' : '<div class="challenge-difficulty-' + hub.level + '"></div>';
            html += (hub.level < 5) ? '<div style="background-color: #ececec"></div>' : '<div class="challenge-difficulty-' + hub.level + '"></div>';
            html += '</div>';
        }
        html += '</div>';

        html += '<div class="challenge-description">' + hub.description + '</div>';
        html += '</div>';
        html += '<div class="challenge-link" style="height:25px">';
        if( logged_in && hub.type != 'module' && hub.type != 'course' ) {
            html += '<div class="flags-found pull-left">' + hub.flags_found + ' / <strong>' + hub.flags_total + '</strong></div>';
        }
        let viewWording = 'Hub';
        if( hub.type === 'course' ){
            viewWording = 'Course';
        }
        if( hub.type === 'module' ){
            viewWording = 'Module';
        }
        html += '<a href="/hubs/' + hub.url + '" class="pull-right" style="margin-right:10px">View ' + viewWording + '</a>';
        html += '</div>';
        html += '</div>';
        html += '</div>';
        tmphub.innerHTML = html;
        document.getElementById('hubs').append( tmphub );
    }

    function pageChange(a){
        let pages = document.getElementsByClassName('page');
        for( let i=0;i<pages.length;i++){
            pages[i].classList.remove('isactive');
        }
        a.target.classList.add('isactive');
        let page = parseInt( a.target.attributes["data-id"].value );
        if( page !== current_page ) {
            current_page = page;
            document.body.scrollTop = 0;
            document.documentElement.scrollTop = 0;
            getHubs(page);
        }
    }

    function getHubs( page ) {
        document.getElementById('hubs').innerHTML = '';
        let arg = {
            page    :   page,
            part_of :   part_of,
            type    :   document.getElementById('hub_type').value,
            order_by:   document.getElementById('order_by').value
        }
        let filter = document.getElementById('filter').value;
        if( filter.length > 0 ){
            arg['filter'] = filter;
        }
        if( document.getElementById('hide_completed').checked ){
            arg['hide_completed'] = true
        }
        HH.API().request('/hubs', 'GET', arg , function(resp) {
            if (resp.hasOwnProperty('hubs') && resp.hasOwnProperty('pagination') && resp.hasOwnProperty('logged_in')) {
                failed = 0;
                for (let i = 0; i < resp.hubs.length; i++) {
                    let padding_class = '';
                    if (i === 0 && resp.hubs.length === 1) {
                        padding_class = ' col-md-offset-4 col-sm-offset-3';
                    }
                    if (i === 0 && resp.hubs.length === 2) {
                        padding_class = ' col-md-offset-2';
                    }
                    addHub(resp.hubs[i], padding_class, resp.logged_in);
                }
                document.getElementById('pagination').style.display = 'block';
                document.getElementById('pagination').innerHTML = '';
                for (let i = 1; i <= resp.pagination.total_pages; i++) {
                    let tmpPage = document.createElement('DIV');
                    tmpPage.classList.add('page');
                    if (i === page) {
                        tmpPage.classList.add('isactive');
                    }
                    tmpPage.innerHTML = i;
                    tmpPage.setAttribute('data-id', i);
                    tmpPage.addEventListener('click', pageChange);
                    document.getElementById('pagination').appendChild(tmpPage);
                }
            }
        }).fail(function(status,obj){
            failed++;
            if( failed < 3 ) {
                setTimeout(function () {
                    getHubs(page);
                }, 250);
            }else{
                document.getElementById('hubs').innerHTML = '<div class="col-sm-8 col-sm-offset-2"><div class="alert alert-danger text-center"><p>Could not fetch hubs, please refresh the page or try again in a few minutes.</p></div></div>';
            }
        });
    }
    document.getElementById('hide_completed').addEventListener('click',function(){
        failed = 0;
        getHubs(1);
    });
    document.getElementById('order_by').addEventListener('change',function(){
        failed = 0;
        getHubs(1);
    });
    document.getElementById('filter').addEventListener('keyup',function(){
        failed = 0;
        clearTimeout(keyuptimer);
        keyuptimer = setTimeout(function(){
            getHubs(1);
        },500);
    });

    let menu = document.getElementById('hub_type_menu');
    if(  menu != null){

        let menuItems = menu.getElementsByTagName('LI');

        for(let i=0;i<menuItems.length;i++){
            menuItems[i].addEventListener('click',function(){
                for(let i2=0;i2<menuItems.length;i2++){
                    menuItems[i2].classList.remove('active');
                }
                this.classList.add('active');
                document.getElementById('hub_type').value = this.attributes["data-type"].value;
                failed = 0;
                getHubs(1);
            });
        }


        menuItems[0].classList.add('active');
    }

    getHubs(1);
});let hh_modal_func = function(){};

HH.insert('modal',function(action,func = null ){
    const modal = document.getElementById('modal');
    if( action === 'show' ) {
        modal.removeEventListener("click", hh_modal_func);
        if (typeof func === 'function') {
            modal.style.cursor='pointer';
            hh_modal_func = func;
        }else{
            modal.style.cursor='default';
            hh_modal_func = function(){};
        }
        modal.style.display='block';
        modal.addEventListener('click',hh_modal_func);
    }
    if( action === 'update' ) {
        modal.removeEventListener("click", hh_modal_func);
        if (typeof func === 'function') {
            modal.style.cursor='pointer';
            hh_modal_func = func;
        }else{
            modal.style.cursor='default';
            hh_modal_func = function(){};
        }
        modal.addEventListener('click',hh_modal_func);
    }


    if( action === 'hide' ){
        modal.style.display='none';
    }

});HH.insert('notifications',function(hub_id){

    $('.close-notification').click( function(){
        HH.modal('hide');
        $('#modal_contents').hide();
        HH.API().request('/notification/' + $(this).attr('data-id') + '/close');
    });

    let notification_id = 0;
    let pause = false;

    HH.API().request('/notification', 'GET', {} , function(resp) {
        if (resp.hasOwnProperty('logged_in') && resp.hasOwnProperty('notification')) {
            if (resp.logged_in === true) {
                if (resp.notification.hasOwnProperty('id')) {
                    pause = true;
                    notification_id = resp.notification.id;
                    $('.close-notification').attr('data-id', resp.notification.id)
                    $('#modal_message').html(resp.notification.contents);
                    HH.modal('show');
                    $('#modal_contents').show();
                    if (resp.notification.footer) {
                        $('#modal_footer').show();
                    } else {
                        $('#modal_footer').hide();
                    }
                    $('.difficulty-rating').click(function () {
                        HH.modal('hide');
                        $('#modal_contents').hide();
                        HH.API().request('/notification/' + notification_id + '/close','POST',{"data": $(this).attr('data-id') },function(){
                            pause = false;
                            notification_id = 0;
                        })
                    });
                    $('button.questionnaireBtn').click(function(){

                        let proceed = true
                        let hacking_length = parseInt($('input[name="questionnaire_hacking_length"]:checked').val());
                        let hacking_xp = parseInt($('input[name="questionnaire_hacking_xp"]:checked').val());


                        let data = {
                            "goals" :   []
                        }

                        if( $('input[name="questionnaire_goal_1"]').is(':checked') ){
                            data.goals.push("1")
                        }

                        if( $('input[name="questionnaire_goal_2"]').is(':checked') ){
                            data.goals.push("2")
                        }

                        if( $('input[name="questionnaire_goal_3"]').is(':checked') ){
                            data.goals.push("3")
                        }

                        if( $('input[name="questionnaire_goal_4"]').is(':checked') ){
                            data.goals.push("4")
                        }

                        if( $('input[name="questionnaire_goal_5"]').is(':checked') ){
                            data.goals.push("5")
                        }

                        if( $('input[name="questionnaire_goal_6"]').is(':checked') ){
                            data.goals.push("6")
                        }

                        if( hacking_length >= 1 && hacking_length <= 3 ){
                            data["hacking_length"] = hacking_length;
                        }else{
                            proceed = false;
                            alert('Please choose how long you have been hacking for.');
                        }

                        if( hacking_xp >= 1 && hacking_xp <= 3 ){
                            data["hacking_xp"] = hacking_xp;
                        }else{
                            proceed = false;
                            alert('Please choose what you know so far.');
                        }

                        if( data.goals.length === 0 ){
                            proceed = false;
                            alert('Please choose at least one goal.');
                        }

                        if( proceed ){
                            HH.modal('hide');
                            $('#modal_contents').hide();
                            HH.API().request('/notification/' + notification_id + '/close','POST', data ,function(){
                                pause = false;
                                notification_id = 0;
                            });
                        }
                    });
                }
            }
        }
    })



});



HH.insert('popMsg',function(type,msg){

    let modalMessage = document.getElementById('modal_message');
    let modalContents = document.getElementById('modal_contents');
    modalMessage.style.color='#FFF';
    if( type === 'error' ) {
        modalMessage.style.border='1px solid #F00';
        modalMessage.style.backgroundColor='#da7474';
    }
    if( type === 'success' ) {
        modalMessage.style.border='1px solid #2be112';
        modalMessage.style.backgroundColor='#69c75b';
    }
    let newMsg = '';
    if( typeof msg === 'object' ){
        for (const m in msg) {
            newMsg += '<div>&bullet; ' + msg[m] + '</div>';
        }
    }else{
        newMsg = msg;
    }
    modalMessage.innerHTML=newMsg;
    modalContents.style.display='block';
    HH.modal('show',function(){
        HH.modal('hide');
        modalContents.style.display='none';
        modalMessage.style.color='#000';
        modalMessage.style.border='1px solid #cccccc';
        modalMessage.style.backgroundColor='#FFF';
    });

});HH.insert('profile',function(){
    let update_token = '';
    let username = document.getElementById('frm_username');
    let twitter = document.getElementById('frm_twitter');
    let website = document.getElementById('frm_website');
    let twitch = document.getElementById('frm_twitch');
    let youtube = document.getElementById('frm_youtube');
    let marketing_one = document.getElementById('frm_marketing_1');
    let marketing_two = document.getElementById('frm_marketing_2');
    let marketing_three = document.getElementById('frm_marketing_3');
    let discord_info = document.getElementById('discord_info');
    let profileButton = document.getElementById('btn_update_profile');
    let marketingButton = document.getElementById('btn_update_marketing');
    let deleteButton = document.getElementById('btn_update_delete');

    profileButton.addEventListener('click', function(){
        update({
            'action'    :   'profile',
            'username'  :   username.value,
            'twitter'   :   twitter.value,
            'website'   :   website.value,
            'twitch'    :   twitch.value,
            'youtube'   :   youtube.value,
        })
    });

    marketingButton.addEventListener('click', function(){
        let level = 0;
        if( marketing_one.checked ){
            level = 1;
        }
        if( marketing_two.checked ){
            level = 2;
        }
        if( marketing_three.checked ){
            level = 3;
        }
        if( level === 0 ) {
            HH.popMsg('error','A valid marketing level hasn\'t been selected');
        }else{
            update({
                'action': 'marketing',
                'marketing_level': level
            });
        }
    });

    deleteButton.addEventListener('click', function(){
        let confirmation = document.getElementById('frm_delete_confirmation').value;


        if( confirmation === 'DELETE' ) {
            update({
                'action': 'delete'
            }, '/logout');
        }else{
            HH.popMsg('error','You need to type the word "DELETE" into the confirmation box to confirm account deletion.');
        }
    });

    function update( data, redirect= '' ){
        data["update_token"] = update_token;
        HH.API().request('/me', 'POST', data , function(resp) {
            if( resp.hasOwnProperty('message') ){
                if( redirect.length === 0 ) {
                    HH.popMsg('success', resp.message);
                    getUserInfo();
                }else{
                    HH.popMsg('success', resp.message);
                    setTimeout(function(){
                        window.location = redirect;
                    },1500);
                }
            }else{
                HH.popMsg('error','An unspecified error has occured');
            }
        }).fail(function(xhr,resp){
            if( resp.hasOwnProperty('errors') ){
                HH.popMsg('error',resp.errors);
            }else{
                HH.popMsg('error','An unspecified error has occured');
            }
        });
    }

    function getUserInfo(){
        profileButton.disabled = true;
        marketingButton.disabled = true;
        deleteButton.disabled = true;
        HH.API().request('/me', 'GET', {} , function(resp) {
            if( resp.hasOwnProperty('logged_in') && resp.hasOwnProperty('user')  ){
                update_token = resp.user.update_token;
                username.value = resp.user.username;
                twitter.value = resp.user.twitter;
                website.value = resp.user.website;
                twitch.value = resp.user.twitch;
                youtube.value = resp.user.youtube;
                if( resp.user.discord_token ){
                    discord_info.innerHTML = '<p style="color:#ffffff;">Use the below code to link to your discord account.<br> ' +
                        'Send the request <code>!attach ' + resp.user.discord_token + '</code> in a direct message to the HUBBOT only!!! Do not send this' +
                        'code to anyone else!</p>'+
                        '<div style="margin-top:15px"><input name="discord_token" class="form-control ctfinput" value="' + resp.user.discord_token + '" disabled></div>';
                }else{
                    discord_info.innerHTML = '<p style="color:#ffffff;">Your account has already been linked with a discord user</p>';
                }
                if(  parseInt( resp.user.marketing_preference ) === 1 ){
                    marketing_one.checked = true;
                }
                if(  parseInt( resp.user.marketing_preference ) === 2 ){
                    marketing_two.checked = true;
                }
                if(  parseInt( resp.user.marketing_preference ) === 3 ){
                    marketing_three.checked = true;
                }
                profileButton.disabled = false;
                marketingButton.disabled = false;
                deleteButton.disabled = false;
            }
        });
    }


    getUserInfo();

});HH.insert('pusher',function( user_id ){
    var pusher = new Pusher('bfc19cea4e478095b703', {
        cluster: 'eu'
    });
    var channel = pusher.subscribe('private-' + user_id );
    channel.bind('notification', function(data) {
        HH.notifications();
    });
    channel.bind('open-hub', function(data) {
        checkOpenVms();
    });
    channel.bind('trigger', function(data) {
        checkForTriggers();
    });
});