﻿filesExecute = function (activeDataStore, $container, onSuccess) {
    var dataStore = activeDataStore;
    var categories = function () {
        return dataStore.getFolders();
    }
    var files = function (searchString) {
        var folder = $('#categoryList').val();
        return dataStore.getFiles(folder, searchString);
    };
    function enableButton(button, enable) {
        if (enable) {
            $(button).attr('disabled', '').removeClass('ui-state-disabled');
        } else {
            $(button).attr('disabled', 'disabled').addClass('ui-state-disabled');
        }
    }
    function getGridOptions() {
        var gridOptions = {
            datatype: 'local',
            colNames: ['Section', 'File Name', 'URL', ''],
            colModel: [
                            { name: 'section', index: 'section', width: 300, sorttype: 'text' },
                            { name: 'fileName', index: 'fileName', width: 600, sorttype: 'text' },
                            { name: 'url', index: 'url', width: 0, hidden: true },
							{ name: 'EmptyColumn', index: 'blank', width: 30},
                        ],
            caption: 'Geotab Downloads',
            ondblClickRow: function () {
                downloadFile();
            },
            onSelectRow: function () {
                $button = $("#downloadButton");
                enableButton($button, true);
            }
        };
        return gridOptions;
    }
    function getGridData(files) {
        var userdata = {
            "rowCount": "-1",
            "data": []
        };
        var rowCounter = 0;
        for (var i = 0, len = files.length; i < len; i++) {
            var record = files[i];
            var jsonRecord = {
                id: record.id,
                cell: {
                    section: record.cleanParent,
                    fileName: record.cleanName,
                    url: record.path + '/' + record.name
                }
            };
            userdata.data.push(jsonRecord);
            rowCounter++;
        }
        userdata.rowCount = rowCounter;
        return userdata;
    }
    function loadFiles($table) {
        $table.jqGrid('clearGridData', false);
        var myJsonData = getGridData(files($("#searchText").val()));
        for (var i = 0; i < myJsonData.rowCount; i++) {
            $table.addRowData(i + 1, myJsonData.data[i].cell);
        }
        $button = $("#downloadButton");
        enableButton($button, false);
    }
    function downloadFile() {
        var myRecord = $table.jqGrid('getRowData', $table.jqGrid('getGridParam', 'selrow'));
       window.location.href = 'http://www.geotab.com/WebDataStore.ashx?fileName=' + myRecord.url;
    }
    function loadCategories() {
        var categoryOutput = [];
        $.each(categories(), function (key, value) {
            categoryOutput.push('<option>' + value + '</option>');
        });
        $('#categoryList').html(categoryOutput.join('')).change(function () {
            loadFiles($table);
        });
    }
    function setupForm() {
        $container.append('<div><label class="supportlabel">Category: </label><select id="categoryList"><option></option></select>  <label class="supportlabel">Search: </label><input id="searchText" type="text" /></div>');
        $container.append('<div style="text-align: right;"><input id="downloadButton" type="button" value="Download File" /></div>');
        $container.append('<p><table id="fileGrid" class="documentcaption"></table></p>');
        $button = $("#downloadButton");
        $table = $container.find('table#fileGrid');
        $table.jqGrid(getGridOptions($table)).jqGrid('setGridHeight', '250').jqGrid('setGridWidth', '960');
        loadCategories();
        $button.click(function () {
            downloadFile();
        }).button();
        $("#searchText").keyup(function () {
            loadFiles($table);
        }).keyup();
    }
    // Execute Point
    setupForm();
    if (onSuccess) {
        onSuccess();
    }
};
