﻿var workoutsTable;
var selectedWorkouts = new Array();
var selectRow;


jQuery.fn.dataTableExt.oSort['natural-asc'] = stripNaturalSortAsc;
jQuery.fn.dataTableExt.oSort['natural-desc'] = stripNaturalSortDesc;
jQuery.fn.dataTableExt.oSort['distance-asc'] = distanceSortAsc;
jQuery.fn.dataTableExt.oSort['distance-desc'] = distanceSortDesc;

function initTable(drawCallback) {
    workoutsTable = $('#my_workouts').dataTable({
            "bStateSave": true,
            "bAutoWidth": false,
            "aaSorting": [[2, "desc"]],
            "bLengthChange": false,
            "bFilter": true,
            "iDisplayLength": 5,
            "sPaginationType": "full_numbers",
            "fnRowCallback": fnRowCallback,
            "aoColumns": [
                {
                    "sType": "string",
                    "sWidth": "10%"
                },
                {
                    "bSortable": false,
                    "sWidth": "8%"
                },
                {
                    "sWidth": "20%",
                    "bSortable": true,
                    "sType": "natural"
                },
                {
                    "sType": "distance",
                    "sWidth": "12%"
                },
                {
                    "sType": "natural",
                    "sWidth": "13%"
                },
                {
                    "sType": "natural",
                    "sWidth": "13%"
                },
                {
                    "sType": "natural",
                    "sWidth": "15%"
                },
                {
                    "bSortable": false,
                    "bVisible": false
                    //"sWidth": "7%"
                },
                {
                    "bSortable": false,
                    "bVisible": false
                },
                {
                    "bSortable": "false",
                    "sWidth": "5%"
                }
            ],
            "fnDrawCallback": function() {
                //console.log("Draw");
                //setTimeout(applyDateCorrector, 1);
            },
            "oLanguage": {
                "sInfo": "Showing _START_ to _END_ of <b>_TOTAL_</b> workouts",
                "sZeroRecords": '<p>&nbsp;</p><p>Still no workouts, <a href="/Download" title="Download SportyPal">download SportyPal</a> and start rolling workouts.</p>'
            }
        });
    $(".paginate_button").live('click', function() { setTimeout(drawCallback, 1); });
    $('.grid').show();
    return workoutsTable;
}

/* Get the rows which are currently selected */

function fnGetSelected(oTableLocal) {
    var aReturn = new Array();
    var aTrs = oTableLocal.fnGetNodes();
    for (var i = 0; i < aTrs.length; i++) {
        if ($(aTrs[i]).hasClass('row_selected')) {
            aReturn.push(aTrs[i]);
        }
    }
    return aReturn;
}

var deletedRow = function(data) {
    var anSelected = fnGetSelected(workoutsTable);
    for (var i = 0; i < anSelected.length; i++) {
        var iRow = workoutsTable.fnGetPosition(anSelected[i]);
        workoutsTable.fnDeleteRow(iRow);
    }
    selectedWorkouts = new Array();
};

function selectRow(id) {
    var row = document.getElementById("tr_" + id);
    if ($(row).hasClass('row_selected')) {
        $(row).removeClass('row_selected');
        $("#cb_" + id).attr('checked', false);
        var temp = new Array();
        for (var i = 0; i < selectedWorkouts.length; i++) {
            if (selectedWorkouts[i] != id) {
                temp.push(selectedWorkouts[i]);
            }
        }
        selectedWorkouts = temp;
    } else {
        $(row).addClass('row_selected');
        $("#cb_" + id).attr('checked', true);
        selectedRow = $(row);
        selectedWorkouts.push(id);
    }
    return false;
}


var gotoWorkoutDetails = function() {
    rowId = this.parentNode.id;
    var wId = rowId.split("_")[1];
    window.location = "/Workouts/Details/" + wId;
    // "#filter=" + getWorkoutsFiltered();
};
var fnRowCallback = function(nRow, aData, iDisplayIndex) {
    shiftDateTZ($(nRow).children(".date-field"));
    return nRow;
};
var getWorkoutsFiltered = function() {
    var workoutsFiltered = workoutsTable.fnGetFilteredNodes();
    var workoutFilteredIds = [];
    for (var k = 0; k < workoutsFiltered.length; ++k) {
        workoutFilteredIds.push(workoutsFiltered[k].id.split("_")[1]);
    }
    return workoutFilteredIds.join(",");
};
var timer;
var from, to;

function failureWorkoutsList() {
    alert("Could not retrieve workouts.");
}

var fullFilter = function(filterObj) {
    if (filterObj) {
        if (filterObj.fromDate && filterObj.toDate) {
            filterWorkouts(filterObj.fromDate, filterObj.toDate);
        } else {
            fullFilterStatic(filterObj);
        }
    }
};
var oldPage = null;

var fullFilterStatic = function(filterObj) {
    if (filterObj.type) {
        filterByType(null, filterObj.type);
    } else {
        clearFilter();
    }
    try {
        workoutsTable.fnSetCurrentPage(filterObj.page);
    } catch(e) { /*console.log(e);*/
    } // cant set this page.
    oldPage = filterObj.page;
};
var pageCallback = function(obj) {
    if (!workoutsTable) return null;
    var page = workoutsTable.fnGetCurrentPage();
    if (page == 0) {
        page = null;
    }
    if (page != oldPage) {
        ajaxHistory.attrToAnchor("page", page);
        oldPage = page;
    }
};
var successWorkoutsList = function() {
    $('#load').hide();
    $('#workoutsList').show();
    $('#buttons').show();
    selectedWorkouts = new Array();
    initTable(pageCallback);
    fullFilterStatic(ajaxHistory.getURLHash(document.hash));
};
$(document).ready(function() {


    initSlider(filterWorkoutsHistory);
    WorkoutTypesSelect.init(filterByTypeHistory, clearFilterHistory);
    ajaxHistory.hashCallback = fullFilter;
    to = new Date().getTime() + 24 * 3600000;
    from = to - 1365 * 24 * 3600000;
    dialogDelete = new JQDialog({
            title: "Delete confirmation",
            autoOpen: false,
            bgiframe: true,
            modal: true,
            buttons: {
                'Delete workout': function() {
                    $.post("/Workouts/Delete", { workouts: selectedWorkouts }, deletedRow);
                    dialogDelete.dialog('close');
                },
                Cancel: function() {
                    dialogDelete.dialog('close');
                }
            }
        });
    dialogDelete.setHtml("<p>Are you sure you want to delete the selected workouts?</p>");

    dialogErrorMerge = new JQDialog({
            title: "Merge error",
            autoOpen: false,
            bgiframe: true,
            modal: true,
            buttons: {
                "OK": function() { dialogErrorMerge.close(); }
            }
        });
    $("#dialogMerge").dialog({
            autoOpen: false,
            bgiframe: true,
            modal: true,
            buttons: {
                "Merge": function() {
                    $.getJSON("/Workouts/Merge", { workouts: selectedWorkouts }, function(response) {
                        $("#dialogMerge").dialog('close');
                        if (response.success) {
                            window.location = "/Workouts/Details/" + response.id;
                        } else {
                            dialogErrorMerge.setImageAndText("/Images/Static/Store/warning.png", response.errorMessage);
                            dialogErrorMerge.dialog('open');
                        }
                    });
                },
                "Cancel": function() { $("#dialogMerge").dialog("close"); }
            }
        });


    $("#share_dialog").dialog({
            autoOpen: false,
            bgiframe: true,
            modal: true
        });

    $("#share_dialog_map").dialog({
            autoOpen: false,
            bgiframe: true,
            modal: true
        });

    initTable(pageCallback);

    $('#tags_filter').keyup(function() {
        if (timer)
            clearTimeout(timer);
        timer = setTimeout('updateFilter()', 500);
    });

    $('#tags_filter').autofill({
            value: 'Filter by location or tags',
            defaultTextColor: '#A0A3A5',
            activeTextColor: '#000000'
        });
    ajaxHistory.runHashCallback(document.hash);
    $("#workoutAccessLevel li").click(function() {
        var id = this.id.split("_")[1];
        setAccessLevel(id);
    });
    $("#workoutAccessLevelMap li").click(function() {
        var id = this.id.split("_")[1];
        setAccessLevelMap(id);
    });

    $(".clickDetails").click(gotoWorkoutDetails);
    $(".workout_checkbox").attr("checked", false);
    filterWorkouts(from, to);

});

var updateFilter = function() {
    var data = $('#tags_filter').val();
    workoutsTable.fnFilter(data, 8);
    timer = null;
};

function compareWorkouts() {
    if (selectedWorkouts.length > 1) {
        window.location = "/Workouts/Compare?id1=" + selectedWorkouts[0] + "&id2=" + selectedWorkouts[1];
    }
}

function deleteWorkouts() {
    if (selectedWorkouts.length > 0) {
        dialogDelete.dialog('open');
    }
}

function mergeWorkouts() {
    if (selectedWorkouts.length == 2) {
        $("#dialogMerge").dialog('open');
    }
}

function archiveWorkouts() {
    if (selectedWorkouts.length > 0) {
        $.post("/Workouts/Archive", { workouts: selectedWorkouts }, deletedRow);
    }
}

function shareWorkouts() {
    if (selectedWorkouts.length > 0) {
        $('#share_dialog').dialog('open');
    }
}

function shareWorkoutMaps() {
    if (selectedWorkouts.length > 0) {
        $('#share_dialog_map').dialog('open');
    }
}

function shareCompleted() {
    $('#workoutsList').load("/Workouts/Filter", { from: from, to: to, user_id: $("#user_id").val() }, successWorkoutsList);
}

function setAccessLevel(level) {
    $('#load').show();
    $('#workoutsList').hide();
    $('#buttons').hide();
    $.post("/Workouts/SetAccessLevel", { workouts: selectedWorkouts, level: level }, shareCompleted);
    $('#share_dialog').dialog('close');
}

function setAccessLevelMap(level) {
    $('#load').show();
    $('#workoutsList').hide();
    $('#buttons').hide();
    $.post("/Workouts/SetAccessLevelMap", { workouts: selectedWorkouts, level: level }, shareCompleted);
    $('#share_dialog_map').dialog('close');
}

function filterWorkoutsHistory(fromDate, toDate) {
    ajaxHistory.attrsToAnchor({ "fromDate": fromDate, "toDate": toDate });
    filterWorkouts(fromDate, toDate);
}

function filterWorkouts(fromDate, toDate) {
    from = fromDate;
    to = toDate;
    $('#workoutsList').hide();
    $('#buttons').hide();
    $('#load').show();
    $('#workoutsList').load("/Workouts/Filter", { from: fromDate, to: toDate, user_id: $("#user_id").val() }, successWorkoutsList);
}

function filterByTypeHistory(id, type) {
    ajaxHistory.attrToAnchor("type", type);
    filterByType(id, type);
}

function filterByType(id, type) {
    workoutsTable.fnFilter(type, 0);

}

function clearFilterHistory() {
    ajaxHistory.attrToAnchor("type", null);
    clearFilter();
}

function clearFilter() {
    try {
        workoutsTable.fnFilter('', 0);
    } catch(e) {
    } // do nothing, list is not loaded yet
}
