﻿/* Data Manager which handles all calls to read or write data from/to a database through
a web service
*/

com.timmons.srl.dataManager = function() {

    // Declare private properties here

    var _getAllDeptsURL = 'SRL_WS.asmx/GetAllDepartments';
    var _getProbTypesByKeywordURL = 'SRL_WS.asmx/GetProblemleafCollection_ByKeyword';
    var _getProbTypesByDepartmentURL = 'SRL_WS.asmx/GetProblemleafCollection_ByDept';
    var _getAllProblemTypesURL = 'SRL_WS.asmx/GetProblemleafCollection_All';
    var _getOpenRequestsByTypeURL = 'SRL_WS.asmx/GetOpenRequestByType';
    var _getProblemQuestionListURL = 'SRL_WS.asmx/GetProblemQuestionList';
    var _submitRequestURL = 'SRL_WS.asmx/AddNewServiceRequest';
    var _getDefaultSettingsURL = 'SRL_WS.asmx/GetDefaultSettings';
    var _deleteUploadFileURL = 'SRL_WS.asmx/DeleteFile';
    //var _getCityStateListURL = 'SRL_WS.asmx/GetCityStateList'; //nvs 20090915 - not needed if using the config object
    //var _getDefaultMapSettingsURL = 'SRL_WS.asmx/GetDefaultMapSettings'; //nvs 20090915 - not needed if using the config object

    // Private Methods

    var _initialize = function() {

        $.ajaxSetup({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataFilter: function(data) {
                var msg;

                if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function')
                    msg = JSON.parse(data);
                else
                    msg = eval('(' + data + ')');

                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            }
        });
    };

    var _getAllDepartments = function(obj, callback) {

        $.ajax({
            url: _getAllDeptsURL,
            success: function(msg) {

                var deptData = eval('(' + msg + ')');
                callback.call(obj, deptData);
            }
        });
    };

    var _getProblemTypesByKeyword = function(keyword, obj, callback) {

        $.ajax({
            url: _getProbTypesByKeywordURL,
            data: '{ "KeywordFilter": "' + keyword + '" }',
            success: function(msg) {

                var problems = eval('(' + msg + ')');
                callback.call(obj, problems);
            }
        });
    };

    var _getProblemTypesByDepartment = function(department, obj, callback) {

        $.ajax({
            url: _getProbTypesByDepartmentURL,
            data: '{ "DeptDivFilter": "' + department + '" }',
            success: function(msg) {

                var problems = eval('(' + msg + ')');
                callback.call(obj, problems);
            }
        });
    };

    var _getAllProblemTypes = function(obj, callback) {

        $.ajax({
            url: _getAllProblemTypesURL,
            data: '{}',
            success: function(msg) {

                var problems = eval('(' + msg + ')');
                callback.call(obj, problems);
            }
        });
    };

    var _getOpenRequestsByType = function(problemType, obj, callback) {

        $.ajax({
            url: _getOpenRequestsByTypeURL,
            data: '{ "ProblemsId": "' + problemType + '" }',
            success: function(msg) {

                var openRequests = eval('(' + msg + ')');
                callback.call(obj, openRequests);
            }
        });
    };

    var _getProblemQuestionList = function(problemType, obj, callback) {

        $.ajax({
            url: _getProblemQuestionListURL,
            data: '{ "ProblemsIDIn": "' + problemType + '" }',
            success: function(msg) {
                var qaList = eval('(' + msg + ')');
                callback.call(obj, qaList);
            }
        });
    };

    var _submitRequest = function(request, obj, callback) {
        
        //var DTO = { 'requestIn': request };


        $.ajax({
            url: _submitRequestURL,
            data: '{ "requestIn": ' + JSON.stringify(JSON.stringify(request)) + ' }',
            //data: JSON.stringify(DTO),
            contentType: "application/json; charset=utf-8",
            success: function(msg) {

                var submitJson = eval('(' + msg + ')');
                submitJson = eval('(' + submitJson + ')');
                callback.call(obj, submitJson);
            }
        });
    };

    var _getDefaultSettings = function(obj, callback) {

        $.ajax({
            url: _getDefaultSettingsURL,
            data: '{}',
            success: function(msg) {

                var appSettings = eval('(' + msg + ')');
                callback.call(obj, appSettings);
            }
        });
    };

    //DeleteFile

    var _deleteUploadFile = function(uploadFile, obj, callback) {

        //var DTO = { 'requestIn': request };

        $.ajax({
            url: _deleteUploadFileURL,
            data: '{ "fileUploaded": ' + JSON.stringify(JSON.stringify(uploadFile)) + ' }',
            //data: JSON.stringify(DTO),
            contentType: "application/json; charset=utf-8",
            success: function(msg) {

                var deleteSuccess = eval('(' + msg + ')');
                callback.call(obj, deleteSuccess, uploadFile);
            }
        });
    };

    /******************************************************
    //nvs 20090915 - not needed if using the config object
    var _getCityStateList = function(obj, callback) {

        $.ajax({
            url: _getCityStateListURL,
            data: '{}',
            success: function(msg) {
                var cityStateList = eval('(' + msg + ')');
                callback.call(obj, cityStateList);
            }
        });
    };

    var _getDefaultMapSettings = function(obj, callback) {

        $.ajax({
            url: _getDefaultMapSettingsURL,
            data: '{}',
            success: function(msg) {

                var defaultMapSettings = eval('(' + msg + ')');
                callback.call(obj, defaultMapSettings);
            }
        });
        
    }; 
    ******************************************************/

    return {
        //Declare public properties here
        //Declare public methods here
        initialize: function() {

            _initialize();
        },

        getAllDepartments: function(obj, callback) {

            _getAllDepartments(obj, callback);
        },

        getProblemTypesByDepartment: function(department, obj, callback) {

            _getProblemTypesByDepartment(department, obj, callback);
        },

        getProblemTypesByKeyword: function(keyword, obj, callback) {

            _getProblemTypesByKeyword(keyword, obj, callback);
        },

        getAllProblemTypes: function(obj, callback) {

            _getAllProblemTypes(obj, callback);
        },
        getOpenRequestsByType: function(problemType, obj, callback) {

            _getOpenRequestsByType(problemType, obj, callback);
        },
        getProblemQuestionList: function(problemType, obj, callback) {

            _getProblemQuestionList(problemType, obj, callback);
        },
        submitRequest: function(request, obj, callback) {

            _submitRequest(request, obj, callback);
        },
        getDefaultSettings: function(obj, callback) {

            _getDefaultSettings(obj, callback);
        },
        deleteUploadFile: function(file, obj, callback) {

            _deleteUploadFile(file, obj, callback);
        }
    };

};
