﻿var numberOfRequests = 0;

$(document).ready(function () {
    $(".taskbutton").button();
    createEventTable("Future Events");

    //event binding for showing actions drop down
    $(".actionsTrigger").live("click", displayActionsDropDownUL);
    $(".printEventButton").live("click", function () {
        window.open('/Manager/SecurePortal/Print/Events.aspx?view=' + $("[id *= 'eventViewDDL']").val(), 'popup', 'width=1000,height=600');
        return false; 
       });

    $("body").click(function () {
        var $dropDown = $('#actionsDropDown');
        if ($dropDown.css("display") != "none") {
            $('#actionsDropDown').fadeOut("fast");
            $(".actionsTrigger").removeClass("active");
        }
    });


    //call to get data for future events and resulting call to create the jqgrid
    $.ajax({
        type: "GET",
        url: "/Manager/AjaxService.svc/Task/GetOpenEventsForUser",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function () { ajaxStart("Loading..."); },
        success: function (data) { updateEventTable(data.d, "Open Tasks"); ajaxStop("Success"); },
        error: function (XMLHttpRequest, textStatus, errorThrown) { ajaxStop("Error"); }
    });

    var isBroker = $("[id *= 'isBroker_hidden']").val() === "True";
    if (isBroker) {
        $.ajax({
            type: "GET",
            url: "/Manager/AjaxService.svc/Task/GetClientAndDelegateTasksForBroker_Open",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            beforeSend: function () { ajaxStart("Loading..."); },
            success: function (data) {
                if (data.d.length > 0) {
                    CreateDelegateAndWorkspaceMemberTaskTable(data.d, "Open Tasks");
                    updateClientEventTable(data.d, "Open Tasks");
                    
                } 
                    else { } ajaxStop("Success"); },
            error: function (XMLHttpRequest, textStatus, errorThrown) { ajaxStop("Error"); }
        });
    }

    //re-initialize thickbox when number of results per page is changed in jqgrid
    $(".ui-pg-selbox").change(function () {
        tb_init('.thickbox');
    });

    //event listener that detects change to the event view ddl
    $("[id *= 'eventViewDDL']").change(function () {
        if ($(this).val() == "0") {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetOpenEventsForUser",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_eventTable"); },
                success: function (data) { updateEventTable(data.d, "Open Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
        else if ($(this).val() == "1") {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetFutureEventsForCurrentUser",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_eventTable"); },
                success: function (data) { updateEventTable(data.d, "Upcoming Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
        else {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetClosedEventsForUser",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_eventTable"); },
                success: function (data) { updateEventTable(data.d, "Closed Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
    });

    $("[id *= 'clientAndDelegateEventViewDDL']").change(function () {
        if ($(this).val() == "0") {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetClientAndDelegateTasksForBroker_Open",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_clientEventTable"); },
                success: function (data) { updateClientEventTable(data.d, "Open Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
        else if ($(this).val() == "1") {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetClientAndDelegateTasksForBroker_Upcoming",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_clientEventTable"); },
                success: function (data) { updateClientEventTable(data.d, "Upcoming Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
        else {
            $.ajax({
                type: "GET",
                url: "/Manager/AjaxService.svc/Task/GetClientAndDelegateTasksForBroker_Closed",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { toggleLoadingSpinnerDisplay("load_clientEventTable"); },
                success: function (data) { updateClientEventTable(data.d, "Closed Tasks"); },
                error: function (XMLHttpRequest, textStatus, errorThrown) { }
            });
        }
    });

    //event listener that detects when a task/event checkbox has been maked as complete (or changed back to incomplete)
    $("[id *= 'isComplete']").live("click", function () {

        var isComplete = $(this).is(":checked");
        var $parentRow = $(this).parent().parent();
        var taskId = parseInt($(this).attr("id").substring(10));
        $.ajax({
            type: "POST",
            url: "/Manager/AjaxService.svc/Task/UpdateTaskCompleteness",
            data: '{"id":"' + taskId + '", "isComplete":"' + isComplete + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            beforeSend: function () { ajaxStart("Saving Changes..."); },
            success: function (data) { ajaxStop("Saved"); /*fade out row if view is open or closed*/if ($(".taskViewDDL").val() == 0 || $(".taskViewDDL").val() == 2) { $parentRow.fadeOut(); } },
            error: function (XMLHttpRequest, textStatus, errorThrown) { ajaxStop("Error"); }
        });

    });

    //periodic check for table row length
//    var periodicCheck = self.setInterval(function () {
//        var rowcount = getNumberOfRowsOfData($('#eventTable').html());
//        if (rowcount <= 0) {
//            //Hide jqgrid and paging container
//            $("#gview_eventTable").fadeOut();
//            $("#eventPager").fadeOut();
//            $("#gbox_eventTable").fadeOut();

//            if (!$("#eventMessageNotification_message").is(":visible")) {
//                //set and show no event message
//                var tableCaption = $("#ctl00_ContentPlaceHolderMain_eventViewDDL option:selected").text();
//                //alert(tableCaption);
//                $("#eventMessageNotification_message").html("No " + tableCaption + ".");
//                $("#eventMessageNotification").fadeIn();
//            }
//        }
//    }, 1000);
});


function createJsonForEventTable(data) {
    var jsonObj = []; //declare array

    for (var i = 0; i < data.length; i++) {
        if (data[i].dueDateField != null) {
            var dueDate = new Date(parseInt(data[i].dueDateField.substr(6)));
            var dueDate_month = global_monthArray[dueDate.getMonth()];
            var dueDate_day = dueDate.getDate();
            var dueDate_year = dueDate.getFullYear();
            var dueDate_formattedDate = dueDate_month + " " + dueDate_day + ", " + dueDate_year;
        }
        else {
            var dueDate_formattedDate = "-";
        }
        var dateCreated = new Date(parseInt(data[i].dateCreatedField.substr(6)));
        var dateCreated_month = global_monthArray[dateCreated.getMonth()];
        var dateCreated_day = dateCreated.getDate();
        var dateCreated_year = dateCreated.getFullYear();
        var dateCreated_formattedDate = dateCreated_month + " " + dateCreated_day + ", " + dateCreated_year;

        var isCompleteCheckbox = "<input type='checkbox' id='isComplete" + data[i].idField;
        if (data[i].isCompleteField) {
            isCompleteCheckbox += "' checked=' " + data[i].isCompleteField + "'/>";
        }
        else {
            isCompleteCheckbox += "'/>";
        }

        //the below anchor has a 'title' element to allow easy jQgrid sorting
        var taskName = "<a title=\"" + data[i].taskNameField + "\" href='/Manager/SecurePortal/Modals/CreateOrEditEventModal.aspx?id=" + data[i].idField + "&TB_iframe=true&width=310&height=480&modal=true' class='thickbox'>" + data[i].taskNameField + "</a>";
        var workspaceName = data[i].workspaceNameField;
        if (!workspaceName) {
            workspaceName = "-";
        }
        else {
            workspaceName = "<a title=\"" + data[i].taskNameField + "\"href='/Manager/SecurePortal/MyWorkspace/WorkspaceDetails/Default.aspx?wid=" + data[i].workspaceIdField + "'>" + data[i].workspaceNameField + "</a>";
        }

        var resourceName = data[i].resourceNameField;
        if (!resourceName) {
            resourceName = "-";
        }
        else {
            resourceName = "<a title=\"" + data[i].taskNameField + "\"href='/Manager/SecurePortal/MyWorkspace/RiskTools/" + data[i].resourceTypeField + "s/?id=" + data[i].resourceIdField + "&wid=" + data[i].workspaceIdField + "'>" + data[i].resourceNameField + "</a>";
        }

        var creator = data[i].creatorFirstNameField + " " + data[i].creatorLastNameField + " on " + dateCreated_formattedDate;
        var assignedTo = data[i].asigneeFirstNameField + " " + data[i].asigneeLastNameField;
        var actionsTrigger = '<a class="actionsTrigger ui-corner-all" id="actionsTrigger' + data[i].idField + '" href="#"></a>';

        
        jsonObj.push({ isCompleteField: isCompleteCheckbox, dueDateField: dueDate_formattedDate, taskNameField: taskName, workspaceNameField: workspaceName, resourceNameField: resourceName, creatorField: creator, actionsTriggerField: actionsTrigger, creatorLastNameField: data[i].creatorLastNameField, asigneeField: assignedTo });
    }
    return jsonObj;
}

function createEventTable(tableCaption) {
    var emptyJsonData = [];
    toggleLoadingSpinnerDisplay("load_eventTable");

    $("#eventTable").jqGrid({
        data: emptyJsonData,
        datatype: "local",
        height: 50,
        autowidth: true,
        rowNum: 25,
        rowList: [25, 50, 75, 100],
        colNames: ['<img src="/Manager/Images/clipboard_check.png" class="tooltip" title="Click here to check off a Task when it is Complete." />', 'Due Date', 'Task', 'Workspace', 'Related To', 'Created By', ''],
        colModel: [
   		    { name: 'isCompleteField', index: 'isCompleteField', align: 'center', width: 26, sortable: false },
   		    { name: 'dueDateField', index: 'dueDateField', width: 119 },
   		    { name: 'taskNameField', index: 'taskNameField' },
   		    { name: 'workspaceNameField', index: 'workspaceNameField' },
   		    { name: 'resourceNameField', index: 'resourceNameField' },
            { name: 'creatorField', index: 'creatorLastNameField' },
            { name: 'actionsTriggerField', width: 40, sortable: false }
   	    ],
        pager: '#eventPager',
        scrollOffset: 0,
        viewrecords: true,
        caption: tableCaption
    });

    tb_init('.thickbox');
}

function CreateDelegateAndWorkspaceMemberTaskTable(data, tableCaption) {
    var emptyJsonData = [];
    $("#clientEventTable").jqGrid({
        data: emptyJsonData,
        datatype: "local",
        height: 50,
        autowidth: true,
        rowNum: 25,
        rowList: [25, 50, 75, 100],
        colNames: ['<img src="/Manager/Images/clipboard_check.png" class="tooltip" title="Click here to check off a Task when it is Complete." />', 'Due Date', 'Task', 'Assigned To', 'Workspace', 'Related To', 'Created By', ''],
        colModel: [
   		    { name: 'isCompleteField', index: 'isCompleteField', align: 'center', width: 26, sortable: false },
   		    { name: 'dueDateField', index: 'dueDateField', width: 119 },
   		    { name: 'taskNameField', index: 'taskNameField' },
            { name: 'assigneeField', index: 'assigneeField' },
   		    { name: 'workspaceNameField', index: 'workspaceNameField' },
   		    { name: 'resourceNameField', index: 'resourceNameField' },
            { name: 'creatorField', index: 'creatorLastNameField' },
            { name: 'actionsTriggerField', width: 40, sortable: false }
   	    ],
        pager: '#clientEventPager',
        scrollOffset: 0,
        viewrecords: true,
        caption: tableCaption
    });
}


function updateEventTable(data, tableCaption) {
    var jsonObj = createJsonForEventTable(data);
    toggleLoadingSpinnerDisplay("load_eventTable");
    if (jsonObj.length > 0) {
        //bind new data to jqgrid
        $("#eventTable").clearGridData().jqGrid('setCaption', tableCaption).jqGrid('setGridParam', { data: jsonObj }).jqGrid("setGridHeight", "100%").trigger("reloadGrid");

        //make sure jqgrid and pager are visible
        $("#gview_eventTable").fadeIn();
        $("#eventPager").fadeIn();
        $("#gbox_eventTable").fadeIn();
        tb_init('.thickbox');

        //hide "no events" message
        $("#eventMessageNotification").fadeOut();
    }
    else {
        //Hide jqgrid and paging container
        $("#gview_eventTable").fadeOut();
        $("#eventPager").fadeOut();
        $("#gbox_eventTable").fadeOut();

        //set and show no event message
        $("#eventMessageNotification_message").html("No " + tableCaption + ".");
        $("#eventMessageNotification").fadeIn();
    }

}

function updateClientEventTable(data, tableCaption) {
    var jsonObj = createJsonForEventTable(data);
    toggleLoadingSpinnerDisplay("load_clientEventTable");
    if (jsonObj.length > 0) {
        //bind new data to jqgrid
        $("#clientEventTable").clearGridData().jqGrid('setCaption', tableCaption).jqGrid('setGridParam', { data: jsonObj }).jqGrid("setGridHeight", "100%").trigger("reloadGrid");

        //make sure jqgrid and pager are visible
        $("#gview_clientEventTable").fadeIn();
        $("#clientEventPager").fadeIn();
        tb_init('.thickbox');

        $("#gbox_clientEventTable").fadeIn();
        $('#clientTasks').removeClass("hiddenOnLoad");
        //hide "no events" message
        $("#clientEventMessageNotification").fadeOut();
    }
    else {
        //Hide jqgrid and paging container
        $("#gview_clientEventTable").fadeOut();
        $("#clientEventPager").fadeOut();
        $("#gbox_clientEventTable").fadeOut();
        
        //set and show no event message
        $("#clientEventMessageNotification_message").html("No " + tableCaption + ".");
        $("#clientEventMessageNotification").fadeIn();
    }

}


function toggleLoadingSpinnerDisplay(elementId) {
    var $element = $("#" + elementId);
    if ($element.css("display") === "none") {
        $element.css("display", "block");
    }
    else {
        $element.css("display", "none");
    }

}

function displayActionsDropDownUL(event) {

    //update links in UL for current risk tool
    var taskId = $(this).attr("id").substring(14);
    $(this).addClass("active");
    //set action links

    var editLink = "/Manager/SecurePortal/Modals/CreateOrEditEventModal.aspx?id=" + taskId + "&TB_iframe=true&width=480&height=400&modal=true";

    $(".act_editLink").attr("href", editLink);
    $(".act_deleteLink").unbind("click").bind("click", { taskId: taskId }, DeleteTask);

    //if a ul is already being displayed hide it
    $('#actionsDropDown').css("display", "none");

    //set location of the ul to be under the actions button
    var position = $(this).position(); //offset relative to parent element

    //offset of each table relative to document
    var eventTableStart = $('#eventTable').offset().top; //start of event table
    var verticalOffset = eventTableStart + position.top - 146 + $(this).height();
    $('#actionsDropDown').css("top", verticalOffset).css("left", position.left + 15).slideDown("fast"); //display actions drop down

    //stop event bubbling
    event.stopPropagation();
    event.preventDefault();

    //reinitalize thickbox
    tb_init('.thickbox');
}

function DeleteTask(event) {
    var userConfirmation = confirm("Are you sure you want to remove this Task?");
    if (userConfirmation) {
        var taskId = event.data.taskId
        $('#actionsDropDown').fadeOut();
        //remove resource from db
        $.ajax({
            type: "POST",
            url: "/Manager/AjaxService.svc/Task/DeleteTaskById",
            data: '{"taskId":"' + taskId + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            beforeSend: function () { ajaxStart("Deleting Resource"); },
            success: function (data) {
                var rowToDelete_Id = $('#isComplete' + taskId).parent().parent().fadeOut(); ajaxStop("Resource Deleted");
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) { ajaxStop("Failed"); }
        });
    }
    return false;
}


function ajaxStart(message) {
    $("#notifierMessage").html(message);
    $("#notifierIcon").attr('src', '/Manager/Images/loading.gif');
    $("#ajaxNotifier").slideDown('slow');
    numberOfRequests++;
}

function ajaxStop(message) {
    numberOfRequests--;
    if (numberOfRequests <= 0) {
        $("#notifierMessage").html(message);
        $("#notifierIcon").attr('src', '/Manager/Images/checkmark.png');
        $("#ajaxNotifier").fadeOut('slow');
    }
}

function getNumberOfRowsOfData(eventTableHtml) {
    var tbodyStart = eventTableHtml.indexOf("<tbody>");
    var tbodyEnd = eventTableHtml.indexOf("</tbody>");
    var tbody = eventTableHtml.substring(tbodyStart, tbodyEnd);
    var trcount = tbody.split("<tr id=");
    var rowcount = trcount.length - 1;

    for (var i = 1; i < trcount.length; i++) {
        if (trcount[i].indexOf("display: none") >= 0) {
            rowcount--;
        }
    }

    return rowcount;
}


