HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/hours.komma.pro/wwwroot/js/hours-page.js
/*  --------------------  Event handlers --------------------  */

//make new url by chosen date
$(document).off( "change", "#hourOverview #datepicker").on( "change", "#hourOverview #datepicker", function () {
    changeDate($(this).val());
});

//make new url by chosen user
$(document).off( "change", "#selectUser").on( "change", "#selectUser", function () {
    //goPjax(updateQueryString('user', $(this).val(), null));
    changeUser(undefined, undefined, $(this).val());
});

//make new url by chosen project
$(document).off( "change", ".selectProject.selectpicker").on( "change", ".selectProject.selectpicker", function() {
    var projectID = $(".tab-content .active select.selectProject").val();

    if(projectID) {
        $.ajax({
            type: 'get',
            url: '/getProgressBarForProject',
            data: {
                'id': projectID
            },
            success: function (data) {
                $(".project_progress_bar").html(data);
                //$.each($("#project_progress_bar"), function(i, progress_bar){ $(progress_bar).html(data); });
            },
            error: function( jqXHR, textStatus, errorThrown ) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
        refreshSubprojectSelect();
    }



});

//make new url by chosen subproject
$(document).off( "change", ".active .selectSubproject.selectpicker").on( "change", ".active .selectSubproject.selectpicker", function () {
    console.log('select.selectSubproject change');
    var subProjectID = $(".active select.selectSubproject").val();
    var isExpenses = $(".tab-content .active").attr("id") === 'expense'; //window.location.pathname.split('?')[0] === '/expense';
    if(subProjectID) {
        $.ajax({
            type: 'get',
            url: '/getProgressBarForSubProject',
            data: {
                'id': subProjectID
            },
            success: function (data) {
                //$.each($("subproject_progress_bar"), function(i, progress_bar){ $(progress_bar).html(data); });
                $(".subproject_progress_bar").html(data);
            },
            error: function( jqXHR, textStatus, errorThrown ) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });

        refreshTaskSelect();

        $.ajax({
            type: 'get',
            url: '/getExpenseTypesAndUnits',
            data: {
                'id': subProjectID
            },
            success: function (data) {
                $(".error-container").html('');
                fillExpenseSelect(data.expenses);
            },
            error: function( jqXHR, textStatus, errorThrown ) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }
});

$(document).off( "keydown", "textarea[name='description']").on( "keydown", "textarea[name='description']", function(event){
    $( ".main-form-submit" ).removeAttr("disabled");
    if ((event.ctrlKey || event.metaKey) && event.which == 13) {
        $( ".tab-pane.active form" ).submit();
        event.preventDefault();
    }
});

$(document).off( "keydown", "textarea[name='internDescription']").on( "keydown", "textarea[name='internDescription']", function(event){
    $( "#intern-hours-submit" ).removeAttr("disabled");
    if ((event.ctrlKey || event.metaKey) && event.which == 13) {
        $( "#absence-form" ).submit();
        event.preventDefault();
    }
});

$(document).off( "change", ".selectAbsence.selectpicker").on( "change", ".selectAbsence.selectpicker", function(){
    $("#internal input[name='internHours']").removeAttr("disabled");
    $("#internal input[name='internHours']").spinner( "enable" );
    $("#internal input[name='internHours']").focus();

    $("#internal textarea[name='internDescription']").removeAttr("disabled");
});

$(document).off( "change", "#expense #selectExpense").on( "change", "#expense #selectExpense", function () {

    var optionSelected = $("option:selected", this);
    var expenseUnitName = optionSelected.attr('data-unit-name');
    $('#expense #expenseOrTaskLabel').text(expenseUnitName);
    $('.description').removeAttr("disabled");
    $('.internDescription').removeAttr("disabled");

});


$(document).off( "change", "#selectTask").on( "change", "#selectTask", function () {
    $('.description').removeAttr("disabled");
    $('.internDescription').removeAttr("disabled");
    $("input[name='hours']").focus();
});


$(document).off( "blur", "input[type=number]").on( "blur", 'input[type=number]', function (e) {
    if (this.value && this.value[0] === ".") {
        this.value = '0'+this.value;
    }
});


//make correct form for delete hour or expense
$(document).off( "click", ".deleteModal").on( "click", ".deleteModal", function () {
    var targetModal = $(this).attr('data-target');
    var target = $(targetModal).find('.nameholder').html();
    var id = $(targetModal).find('.idholder').val();

    //console.log('deleteModal clicked ' + target + " => " +id);

    switch(target){
        case 'onkosten':
            $('#delete-form').attr('action', '/expense/' + id);
            $('#delete-form').attr('id', 'delete-form-onkosten-'+id);
            $('button#submitButton').attr('form', 'delete-form-onkosten-'+id);

            // form has a different ID in the projects show blade
            // $('.projectOverview button#submitButton').attr('form', 'delete-form-onkosten-'+id);
            break;
        case 'verlofuren':
            $('#delete-form').attr('action', '/absence/' + id);
            $('#delete-form').attr('id', 'delete-form-verlofuren-'+id);
            $('button#submitButton').attr('form', 'delete-form-verlofuren-'+id);
            break;
        case 'uren':
            $('#delete-form').attr('action', '/hours/' + id);
            $('#delete-form').attr('id', 'delete-form-uren-'+id);
            $('button#submitButton').attr('form', 'delete-form-uren-'+id);
            break;
        case 'taak':
            $('button#submitButton').attr('form', 'delete-form-taak-'+id);
            break;
        case 'taak-template':
            $('button#submitButton').attr('form', 'delete-form-taak-template-'+id);
            break;
        case 'subproject-template':
            $('button#submitButton').attr('form', 'delete-form-subproject-template-'+id);
            break;
        case 'project-template':
            $('button#submitButton').attr('form', 'delete-form-project-template-'+id);
            break;
        case 'deelproject':
            $('button#submitButton').attr('form', 'delete-form-deelproject-'+id);
            break;
        case 'projecturen':
            $('button#submitButton').attr('form', 'delete-form-projecturen-'+id);
            break;
        case 'absence-balance':
            $('button#submitButton').attr('form', 'delete-form-absence-balance-'+id);
            break;
    }
});

/* attach a submit handler to the form */
$(document).off( "submit", "form[id^='delete-form']").on( "submit", "form[id^='delete-form']", function(event) {
    $.pjax.submit(event, pJaxContainer);
    $(".modal").hide();
    $('body').removeClass('modal-open');
    document.body.removeAttribute("style");
    $(".modal-backdrop").hide();
    event.preventDefault();
});




// /* attach a submit handler to the form */
$(document).off( "submit", "#hour-form, #expense-form, #travel-form").on( "submit", "#hour-form, #expense-form, #travel-form", function(event) {
    if(isFormValid($(this))) {
        this.action = $(".tab-pane.active .main-form-submit").attr("formaction");
        $.pjax.submit(event, pJaxContainer);
    }
    event.preventDefault();
    return false;


});

$(document).off( "submit", "#intern-hours-form").on( "submit", "#intern-hours-form", function(event) {
    if(isFormValid($("#intern-hours-form")) ) {
        this.action = $(".active #intern-hours-submit").attr("formaction");
        $.pjax.submit(event, pJaxContainer);
    }
    event.preventDefault();
    return false;
});















/*  -------------------- Functions -------------------- */


function showHourForm() {
    resetForms();
    $(".panel #hours").addClass('active').siblings().removeClass('active');
    $("ul.nav-tabs li:first-child").addClass('active').siblings().removeClass('active');
    $("#hours .selectProject").focus();
}
function showAbsenceForm() {
    resetForms();
    $(".panel #internal").addClass('active').siblings().removeClass('active');
    $("ul.nav-tabs li:nth-child(2)").addClass('active').siblings().removeClass('active');
    $(".selectAbsence button").focus();
}
function showExpenseForm() {
    resetForms();
    $(".panel #expense").addClass('active').siblings().removeClass('active');
    $("ul.nav-tabs li:nth-child(3)").addClass('active').siblings().removeClass('active');
    $("#expense .selectProject").focus();
}

function showTravelForm() {
    resetForms();
    $(".panel #travel").addClass('active').siblings().removeClass('active');
    $("ul.nav-tabs li:last-child").addClass('active').siblings().removeClass('active');

    $("#travel input[name='hours']").prop('disabled', false);
    $("#travel input[name='hours']").spinner( "enable" );

    $("#travel .description").prop('disabled', false);
}

function resetForms(){
    resetHoursForm($('#hour-form'));
    resetHoursForm($('#expense-form'));
    resetAbsenceForm($('#absence-form'));
}

function editHour(event, projectID, subProjectID, hourID, userID, date, view){
    if(event.target.nodeName != 'SPAN' && event.target.nodeName != 'BUTTON') {
        $(event.target).closest('tr').addClass('active').siblings().removeClass('active');
        data = {
            'project': projectID,
            'subproject': subProjectID,
            'hour':hourID,
            'user':userID,
            'date':date,
            'view':view,
        };
        // console.log('editHour ', hourID);
        showHourForm();

        $.ajax({
            type: 'get',
            url: '/getHourFormData',
            data: data,
            success: function (result) {
                $(".error-container").html('');
                result.userId = userID;
                fillHourForm(result);
            },
            error: function( jqXHR, textStatus, errorThrown) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }
}

function editExpense(event, projectID, subProjectID, expenseID, userID, date, view){
    if(event.target.nodeName != 'SPAN' && event.target.nodeName != 'BUTTON') {
        data = {
            'project': projectID,
            'subproject': subProjectID,
            'expense': expenseID,
            'user': userID,
            'date': date,
            'view':view,
        };

        showExpenseForm();

        $.ajax({
            type: 'get',
            url: '/getExpenseFormData',
            data: data,
            success: function (result) {
                $(".error-container").html('');
                fillExpenseForm(result);
            },
            error: function( jqXHR, textStatus, errorThrown) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }
}

function editTravelExpense(event, projectID, subProjectID, expenseID, userID, date, view){
    if(event.target.nodeName != 'SPAN' && event.target.nodeName != 'BUTTON') {
        data = {
            'project': projectID,
            'subproject': subProjectID,
            'expense': expenseID,
            'user': userID,
            'date': date,
            'view':view,
        };

        showTravelForm();

        $.ajax({
            type: 'get',
            url: '/getExpenseFormData',
            data: data,
            success: function (result) {
                $(".error-container").html('');
                fillTravelForm(result);
            },
            error: function( jqXHR, textStatus, errorThrown) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }
}

function editAbsence(event, absenceID, userID, date, view) {
    if(event.target.nodeName != 'SPAN' && event.target.nodeName != 'BUTTON') {
        data = {
            'absence': absenceID,
            'user': userID,
            'date': date,
            'view':view,
        };
        showAbsenceForm();

        $.ajax({
            type: 'get',
            url: '/getAbsenceFormData',
            data: data,
            success: function (result) {
                $(".error-container").html('');
                fillAbsenceForm(result);
            },
            error: function( jqXHR, textStatus, errorThrown) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }
}


function fillHourForm(data) {
    // set project and progress bar
    $("#hours .selectProject").children('[value="'+data.subprojectWithTasks.project_id+'"]').prop("selected", "selected");
    $('#hours .selectProject').selectpicker('refresh');
    $("#hours .project_progress_bar").html(data.projectProgressBar);

    // fill subprojects and set selected subproject incl. progressbar
    fillSubProjectSelect(data.subprojects);
    $("#hours .selectSubproject").children('[value="'+data.subprojectWithTasks.id+'"]').prop("selected", "selected");
    $('#hours .selectSubproject').selectpicker('refresh');
    $("#hours .subproject_progress_bar").html(data.subprojectProgressBar);

    // fill tasks and set selected task
    fillTaskSelect(data.subprojectWithTasks);
    $("#selectTask").children('[value="'+data.hour.task_id+'"]').prop("selected", "selected");
    $('#selectTask').selectpicker('refresh');

    // set hour value and description
    $("#hours input[name='hours']").val(parseFloat(data.hour.value));
    $('#hours .description').removeAttr("disabled");
    $('#hours .internDescription').removeAttr("disabled");
    $("#hours input[name='hours']").spinner( "enable" );
    $('#hours .description').text(data.hour.description);
    if(data.hour.intern_description !== '' && data.hour.intern_description != null) {
        console.log('intern_description:', data.hour.intern_description);
        $('#hours .internDescription').text(data.hour.intern_description);
        $('#hours .collapsableDescription').addClass('in');
    }

    // set hour bug checkbox
    $("#hours input[name='bug']").prop('checked', data.hour.bug);

    // enable form button and show cancel button
    $( "#hours .main-form-submit" ).removeAttr("disabled");
    $( "#hours .main-form-submit" ).attr('formaction', '/hours/'+data.hour.id);
    $( "#hour-form" ).attr('action', '/hours/'+data.hour.id);
    $( "#hours .hiddenUpdate" ).val('PUT');
    $( "#hours .hiddenDate" ).val($("#datepicker").val());
    $( "#hours .hiddenUser" ).val(data.userId);
    $( "#hours #main-form-reset" ).css('display', 'block');
    $("#hours input[name='hours']").focus();

}

function resetHoursForm(form) {
    //$.pjax({url: '/hours', container: '.hour-form'});
    $(form)[0].reset();
    $('tr.clickable-row').removeClass('active');

    $('.selectProject').val('default');
    $('.selectSubproject').prop('disabled', true);
    $('.selectSubproject').val('default');
    $('#subprojectlink').prop('disabled', true);
    $('#selectTask').prop('disabled', true);
    $('#selectTask').val('default');
    $('#selectExpense').prop('disabled', true);
    $('#selectExpense').val('default');
    $(".selectpicker").selectpicker('refresh');

    $(".project_progress_bar").html('');
    $(" .subproject_progress_bar").html('');
    $("#expense #expenseOrTaskLabel").text('<--- Kies het type onkosten');
    $('.description').text('');
    $('.description').prop('disabled', true);
    $('.internDescription').text('');
    $('.internDescription').prop('disabled', true);

    $("#hours input[name='hours']").val('');
    $("#hours input[name='hours']").prop('disabled', true);
    $("#hours input[name='hours']").spinner( "disable" );

    $( "#hours .main-form-submit" ).prop('disabled', true);
    $( "#hours .main-form-submit" ).attr('formaction', '/newhour');
    $( "#hour-form" ).attr('action', '/newhour');
    $( ".hiddenUpdate" ).val('POST');

    $( "#main-form-reset" ).css('display', 'none');

}

function fillExpenseForm(data) {
    // set project and progress bar
    $("#expense .selectProject").children('[value="'+data.subproject.project_id+'"]').prop("selected", "selected");
    $('#expense .selectProject').selectpicker('refresh');
    $("#expense .project_progress_bar").html(data.projectProgressBar);

    // fill subprojects and set selected subproject incl. progressbar
    fillSubProjectSelect(data.subprojects);
    $("#expense .selectSubproject").children('[value="'+data.subproject.id+'"]').prop("selected", "selected");
    $('#expense .selectSubproject').selectpicker('refresh');
    $("#expense .subproject_progress_bar").html(data.subprojectProgressBar);

    // fill tasks and set selected task
    fillExpenseSelect(data.expenses);
    $("#selectExpense").children('[value="'+data.expense.expense_type_id+'"]').prop("selected", "selected");
    $('#selectExpense').selectpicker('refresh');

    var expenseUnitName = data.expenses.find(function (arr) { return arr.id === data.expense.expense_type_id; }).expense_unit.name;
    $('#expense #expenseOrTaskLabel').text(expenseUnitName);

    // set hour value and description
    $("#expense input[name='hours']").val(parseFloat(data.expense.value));
    $("#expense input[name='hours']").spinner( "enable" );
    $('#expense .description').removeAttr("disabled");
    $('#expense .internDescription').removeAttr("disabled");
    $('#expense .description').text(data.expense.description);

    if(data.expense.intern_description !== '' && data.expense.intern_description != null) {
        console.log('intern_description:', data.expense.intern_description);
        $('#expense .internDescription').text(data.expense.intern_description);
        $('#expense .collapsableDescription').addClass('in');
    }

    // enable form button and show cancel button
    $( "#expense .main-form-submit" ).removeAttr("disabled");
    $( "#expense .main-form-submit" ).attr('formaction', '/expense/'+data.expense.id);
    $( "#expense #expense-form" ).attr('action', '/expense/'+data.expense.id);

    $( "#expense .hiddenDate" ).val($("#datepicker").val());
    $( "#expense .hiddenUpdate" ).val('PUT');

    $( "#expense #main-form-reset" ).css('display', 'block');
    $( "#expense input[name='hours']" ).focus();

}

function fillTravelForm(data) {
    // set hour value and description
    $("#travel input[name='hours']").val(parseFloat(data.expense.value));
    $("#travel input[name='hours']").spinner( "enable" );
    $('#travel .description').removeAttr("disabled");
    $('#travel .internDescription').removeAttr("disabled");
    $('#travel .description').text(data.expense.description);

    // enable form button and show cancel button
    $( "#travel .main-form-submit" ).removeAttr("disabled");
    $( "#travel .main-form-submit" ).attr('formaction', '/expense/'+data.expense.id);
    $( "#travel #expense-form" ).attr('action', '/expense/'+data.expense.id);

    $( "#travel .hiddenDate" ).val($("#datepicker").val());
    $( "#travel .hiddenUpdate" ).val('PUT');

    $( "#travel #main-form-reset" ).css('display', 'block');
    $( "#travel input[name='hours']" ).focus();

}

function fillAbsenceForm(data){
    $("#internal .selectAbsence").children('[value="'+data.absence_type+'"]').prop("selected", "selected");
    $("#internal .selectAbsence").selectpicker('refresh');

    $("#internal input[name='internHours']").removeAttr("disabled");
    $("#internal input[name='internHours']").val(parseFloat(data.value));

    $("#internal textarea[name='internDescription']").removeAttr("disabled");
    $("#internal textarea[name='internDescription']").text(data.description);

    // enable form button and show cancel button
    $( "#internal #intern-hours-submit" ).removeAttr("disabled");
    $( "#internal #intern-hours-submit" ).attr('formaction', '/absence/'+data.absence_id);
    $( "#internal #absence-form" ).attr('action', '/absence/'+data.absence_id);

    $( "#internal .hiddenDate" ).val($("#datepicker").val());
    $( "#internal .hiddenUpdate" ).val('PUT');

    $( "#internal #intern-hours-reset" ).css('display', 'block');
    $( "#internal input[name='internHours']" ).focus();
}

function resetAbsenceForm(form){
    $(form)[0].reset();

    $("#internal .selectAbsence").children('option:selected').prop("selected", false);
    $("#internal .selectAbsence").selectpicker('refresh');

    $("#internal input[name='internHours']").val('');
    $("#internal input[name='internHours']").prop('disabled', true);
    $("#internal input[name='internHours']").spinner( "disable" );

    $("#internal textarea[name='internDescription']").prop('disabled', true);
    $("#internal textarea[name='internDescription']").text('');

    // enable form button and show cancel button
    $( "#internal #intern-hours-submit" ).removeAttr("disabled");
    $( "#internal #intern-hours-submit" ).attr('formaction', '/absence');
    $( "#internal #absence-form" ).attr('action', '/absence');
    $( ".hiddenUpdate" ).val('POST');

    $( "#intern-hours-submit" ).prop('disabled', true);
    $( "#intern-hours-reset" ).css('display', 'none');

}

function refreshProjectSelect(selectedID) {
    $.ajax({
        type: 'get',
        url: '/getProjects',
        success: function (data) {
            $(".error-container").html('');
            fillProjectSelect(data.projects, selectedID);
        },
        error: function( jqXHR, textStatus, errorThrown) {
            checkAuthentication(jqXHR);
            $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
        }
    });
}

function fillProjectSelect(projects, selectedID) {
    var projectOptions = '';
    $.each(projects, function(i, project) {
        var selected = (selectedID && selectedID == project.id);
        projectOptions += '<option value="'+project.id+'" '+ (selected ? "selected" : "") +'>'+project.name+'</option>';
    });

    //$.each($('#selectSubproject'), function(i, select){ $(select).html(subProjectOptions); });
    $('select.selectProject').html(projectOptions);
    $('.selectProject').selectpicker('refresh');

    $('.selectSubproject').removeAttr("disabled");
    $('#subprojectlink').removeAttr("disabled");

    if(selectedID) {
        $.ajax({
            type: 'get',
            url: '/getProgressBarForProject',
            data: {
                'id': selectedID
            },
            success: function (data) {
                $(".project_progress_bar").html(data);
            }
        });

        refreshSubprojectSelect();
    }

}
function refreshSubprojectSelect(selectedID) {
    selectedID = typeof selectedID === 'undefined' ? null : selectedID;
    var projectID = $(".tab-content .active select.selectProject").val();
    if(projectID) {
        $.ajax({
            type: 'get',
            url: '/getSubprojectsForProject',
            data: {
                'id': projectID
            },
            success: function (data) {
                $(".error-container").html('');
                fillSubProjectSelect(data.subprojects, selectedID);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                checkAuthentication(jqXHR);
                $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
            }
        });
    }

    if(selectedID) {
        $.ajax({
            type: 'get',
            url: '/getProgressBarForSubProject',
            data: {
                'id': selectedID
            },
            success: function (data) {
                //$.each($("subproject_progress_bar"), function(i, progress_bar){ $(progress_bar).html(data); });
                $(".subproject_progress_bar").html(data);
            }
        });
    }
}

function fillSubProjectSelect(subprojects, selectedID) {
    var subProjectOptions = '';
    var lockDividerAdded = false;
    subprojects.sort(function(a, b){return a.locked - b.locked});

    $.each(subprojects, function(i, subProject) {
        var selected = (selectedID && selectedID == subProject.id);
        if(subProject.locked) {
            if(!lockDividerAdded) {
                subProjectOptions += '<option data-divider="true"></option>';
                lockDividerAdded = true;
            }
            subProjectOptions += '<option disabled data-icon="glyphicon-lock" value="' + subProject.id + '" ' + (selected ? "selected" : "") + '>' + subProject.name + '</option>';
        } else {
            subProjectOptions += '<option value="' + subProject.id + '" ' + (selected ? "selected" : "") + '>' + subProject.name + '</option>';
        }
    });

    //$.each($('#selectSubproject'), function(i, select){ $(select).html(subProjectOptions); });
    $('select.selectSubproject').html(subProjectOptions);
    $('.selectSubproject').selectpicker('refresh');

    $('.selectSubproject').removeAttr("disabled");
    $('#subprojectlink').removeAttr("disabled");

    $('#selectTask').prop('disabled', true);
    $('#selectTask').selectpicker('refresh');
    $("input[name='hours']").prop('disabled', true);

    $(".tab-content .active button[data-id='selectSubproject']").focus();

    if(selectedID) { refreshTaskSelect(); }

    $("#subproject_progress_bar").html('');
    $('.selectSubproject').selectpicker('refresh');
}

function refreshTaskSelect() {
    var subProjectID = $(".active select.selectSubproject").val();

    $.ajax({
        type: 'get',
        url: '/getTasksForSubProject',
        data: {
            'id': subProjectID
        },
        success: function (data) {
            $(".error-container").html('');
            fillTaskSelect(data.subproject);
        },
        error: function( jqXHR, textStatus, errorThrown) {
            checkAuthentication(jqXHR);
            $(".error-container").html('<div class="alert alert-danger" role="alert">' + errorThrown + '</div>');
        }
    });

}

function fillTaskSelect(subprojectWithTasks, selectedID) {
    console.log('fillTaskSelect');
    var selectOptions = '';
    $.each(subprojectWithTasks.tasks, function (i, task) {
        var taskTemplate =subprojectWithTasks.task_templates.find(function (arr) { return arr.id === task.task_template_id; });
        selectOptions += '<option value="' + task.id + '">' + taskTemplate.name + '</option>';
    });
    //console.log(subprojectWithTasks.billable !== undefined, " && ", subprojectWithTasks.billable !== null, " : ", subprojectWithTasks.subproject_template.standard_billable);
    $('#hours #billable').val( (subprojectWithTasks.billable !== undefined && subprojectWithTasks.billable !== null) ? subprojectWithTasks.billable : subprojectWithTasks.subproject_template.standard_billable);
    $('#selectTask').html(selectOptions);
    $('#selectTask').removeAttr("disabled");
    $('#tasklink').removeAttr("disabled");
    $('#selectTask').selectpicker('refresh');
    $("#hours input[name='hours']").removeAttr("disabled");
    $("#hours input[name='hours']").spinner( "enable" );
    $("#hours button[data-id='selectTask']").focus();

}

function fillExpenseSelect(expenses) {
    var selectOptions = '';
    $.each(expenses, function (i, expense) {
        selectOptions += '<option value="' + expense.id + '" data-unit-name="' + expense.expense_unit.name + '">' + expense.name + '</option>';
    });
    $('#expense #billable').val(1);
    $('#selectExpense').html(selectOptions);
    $('#selectExpense').removeAttr("disabled");
    $('#selectExpense').selectpicker('refresh');
    $("#expense input[name='hours']").removeAttr("disabled");
    $("#expense input[name='hours']").spinner( "enable" );
    $("#expense button[data-id='selectExpense']").focus();
}








/*  -------------------- Helper Functions -------------------- */

function changeDate(date, view, user) {
    if(typeof view === 'undefined') {
        view = $('input#view').val() }
    else
    {
        $('input#view').val(view);
    }
    user = typeof user === 'undefined' ? $('input.hiddenUser').val() : user;
    $("input.hiddenDate").val(date);
    var data = {
        'date': date,
        'view': view,
        'user': user,
        "_token": $('meta[name="csrf-token"]').attr('content')
    };

    //$.pjax({url: url, container: '#hourOverview'});
    $.pjax({url: "/hours", type:"POST", data: data, container: '#hourOverview'}).done(function()  { $.pjax({url: "/hours", type:"POST", data: data, container: '#hoursDashboard'}); });
}

function changeUser(date, view, user) {
    view = typeof view === 'undefined' ? $('input#view').val() : view;
    date = typeof date === 'undefined' ? $('input.hiddenDate').val() : date;
    $('input.hiddenUser').val(user);
    var data = {
        'date': date,
        'view': view,
        'user': user,
        "_token": $('meta[name="csrf-token"]').attr('content')
    };

    $.pjax({url: "/hours", type:"POST", data: data, container: '#hourOverview'}).done(function()  { $.pjax({url: "/hours", type:"POST", data: data, container: '#hoursDashboard'}); });
}


function setView(view) {
    $('input#view').val(view);
}

function showTaskPopup(){
    var subProjectID = $(".tab-content .active select.selectSubproject").val();
    loadPopup('/taken/create/'+subProjectID,'#createTaskModal');
}

function showSubProjectPopup(){
    var projectID = $(".tab-content .active select.selectProject").val();
    loadPopup('/subprojecten/create/'+projectID,'#createSubProjectModal');
}

function checkAuthentication(jqXHRObject){
    if(jqXHRObject.status === 401) {
        window.location = "/login";
    }
}

/*  -------------------- Stopwatch -------------------- */

var swSeconds = 0, swMinutes = 0, swHours = 0, t=null;

function addSeconds() {
    swSeconds++;
    if (swSeconds >= 60) {
        swSeconds = 0;
        swMinutes++;
        if (swMinutes >= 60) {
            swMinutes = 0;
            swHours++;
        }
    }

    var timeString = (swHours ? (swHours > 9 ? swHours : "0" + swHours) : "00") + ":"
        + (swMinutes ? (swMinutes > 9 ? swMinutes : "0" + swMinutes) : "00") + ":"
        + (swSeconds > 9 ? swSeconds : "0" + swSeconds);

    $(".time").html(timeString);
}


$(document).on( "click", "#start", function(){
    if(t === null) { t = setInterval(addSeconds, 1000); }
});
$(document).on( "click", "#stop", function(){
    clearInterval(t);
    t = null;
});
$(document).on( "click", "#clear", function() {
    $(".time").html("00:00:00");
    swSeconds = 0; swMinutes = 0; swHours = 0;
});