var efapers = function() {
    return {
        getAuthCookie: function() {
            var cn = "Authorization=";
            var idx = document.cookie.indexOf(cn)

            if (idx != -1) {
                var end = document.cookie.indexOf(";", idx + 1);
                if (end == -1) end = document.cookie.length;
                return unescape(document.cookie.substring(idx + cn.length, end));
            } else {
                return "";
            }
        }
    };
} ();
jQuery.efapers =
{
    baseUrl: "Personalization",
    serviceUrl: "EfaService",
    renameID: "",
    restriction: {
        origin: 0,
        destination: 1,
        via: 2,
        departure: 3,
        intermediate: 4,
        personal: 5,
        recent: 6,
        monitored: 7,
        stopEvent: 8,
        serviceDirection: 9
    },
    odvTypes: {
        0: 'place',
        1: 'stop',
        2: 'stopID',
        3: 'address',
        4: 'street',
        5: 'poi',
        6: 'coord',
        7: 'any'
    },
    
    options: {
        inclMOT_0 : '100',
        inclMOT_1 : '101',
        inclMOT_2 : '102',
        inclMOT_3 : '103',
        inclMOT_4 : '104',
        inclMOT_5 : '105',
        inclMOT_6 : '106',
        inclMOT_7 : '107',
        inclMOT_8 : '108',
        inclMOT_9 : '109',
        inclMOT_10 : '110',
        inclMOT_11 : '111',
        includedMeans : '130',
        changeSpeed : '201',
        noSolidStairs : '202',
        noEscalators : '203',
        noElevators : '204',
        wheelchair : '205',
        routeType : '206',
        lineRestriction : '207',
        useProxFootSearch : '208',
        maxChanges : '209',
        bikeTakeAlong: '301',
        trITMOTvalue100 : '401'
    },
    optionTypes: {
        100: 'inclMOT_0',
        101: 'inclMOT_1',
        102: 'inclMOT_2',
        103: 'inclMOT_3',
        104: 'inclMOT_4',
        105: 'inclMOT_5',
        106: 'inclMOT_6',
        107: 'inclMOT_7',
        108: 'inclMOT_8',
        109: 'inclMOT_9',
        110: 'inclMOT_10',
        111: 'inclMOT_11',
        130: 'includedMeans',
        201: 'changeSpeed',
        202: 'noSolidStairs',
        203: 'noEscalators',
        204: 'noElevators',
        205: 'wheelchair',
        206: 'routeType',
        207: 'lineRestriction',
        208: 'useProxFootSearch',
        209: 'maxChanges',
        301: 'bikeTakeAlong',
        401: 'trITMOTvalue100'
    },
    optionTypesText: {
        100: 'Rail',
        101: 'DLR',
        102: 'Tube',
        103: 'inclMot_3',
        104: 'Trams',
        105: 'Buses',
        106: 'inclMot_6',
        107: 'National Express',
        108: 'inclMot_8',
        109: 'River',
        130: '',
        201: 'walking speed',
        202: 'stairs',
        203: 'escalators',
        204: 'lifts',
        205: 'wheelchair accessible vehicles',
        401: 'max. walking distance'
    },
    
    register: function(auth) {
    
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Registry/RegisterCredentials",
            contentType: "application/json; charset=utf-8",
            success: function(msg) {
                //debugger;
                var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
                //var header = "Basic " + $.base64.encode("IdentificationID"+ ":" + msg.RegisterCredentialsResult);
                document.cookie = "Authorization=" + header;
                auth.success(msg);
            },
            dataType: "json",
            data: auth.registerData,
            error: auth.error
        });
    },
    deleteProfile: function(auth) {
    
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Registry/DeleteCredentials",
            contentType: "application/json; charset=utf-8",
            success: function(msg) {
                
                $.cookie("Authorization", null);
                $.cookie("EFA_User", null);
                
                auth.success(msg);
            },
            dataType: "json",
            data: auth.deleteData,
            error: auth.error
        });
    },

    activate: function(request) {
    
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Registry/ActivateCredentials",
            contentType: "application/json; charset=utf-8",
            success: function(msg) {
            
                var res = msg.ActivateCredentialsResult
                
                if(res.ActivationState == 'Success'){
                    var id = res.IdentificationID;
                    var header = "Basic " + $.base64.encode("IdentificationID"+ ":" + id);
                    
                    $.cookie("Authorization", header);
                    
                    var name = res.FirstName + ' ' + res.LastName + '#' + res.Username;
                    
                    $.cookie("EFA_User", name);
                }
                
                request.success(msg);
                
            },
            dataType: "json",
            data: request.data,
            error: request.error
        });
    },

    
    authenticate: function(auth) {
    
        var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
        document.cookie = "Authorization=" + header;
        $.ajax({
            type: "GET",
            url: this.baseUrl + "/Data/Profile",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", header);
            },
            dataType: "json",
            success: auth.success,
            error: auth.error
        });
    },
    changePassword: function(change) {
    
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Registry/ChangePassword",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: change.passwordData,
            success: function(msg) {
                eval('data=' + change.passwordData)
                  
                var header = "Basic " + $.base64.encode(data.Username + ":" + data.NewPassword);
                document.cookie = "Authorization=" + header;
                
                change.success(msg);
               
            },
            error: change.error
        });
    },
    sendPassword: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Registry/SendPassword",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.data,
            success: request.success,
            error: request.error
        });
    },
    getProfile: function(request) {

        $.ajax({
            type: "GET",
            url: this.baseUrl + "/Data/Profile",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            success: request.success,
            error: request.error
        });
    },
    createMobilePhone: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/MobilePhone",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.data,
            success: request.success,
            error: request.error
        });
    },
    createPassedZone: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/PassedZone",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.passedZone,
            success: request.success,
            error: request.error
        });
    },
    createPersonalData: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/PersonalData",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.personalData,
            success: request.success,
            error: request.error
        });
    },
    createPoint: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/Point",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.point,
            success: request.success,
            error: request.error
        });
    },
    createPointLocality: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/PointLocality",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.pointLocality,
            success: request.success,
            error: request.error
        });
    },
    createPointPlatform: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/PointPlatform",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.pointPlatform,
            success: request.success,
            error: request.error
        });
    },
    createProfile: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/Profile",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.profile,
            success: request.success,
            error: request.error
        });
    },
    createService: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/Service",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.service,
            success: request.success,
            error: request.error
        });
    },
    createStopEvent: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/StopEvent",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.stopEvent,
            success: request.success,
            error: request.error
        });
    },
    createTicket: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/Ticket",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.ticket,
            success: request.success,
            error: request.error
        });
    },
    createTrip: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/Trip",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.trip,
            success: request.success,
            error: request.error
        });
    },
    createTripOption: function(request) {
        $.ajax({
            type: "POST",
            url: this.baseUrl + "/Data/TripOption",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.tripOption,
            success: request.success,
            error: request.error
        });
    },
    selectObject: function(request) {
        $.ajax({
            type: "GET",
            url: request.uri,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            success: request.success,
            error: request.error
        });
    },
    updateObject: function(request) {
        $.ajax({
            type: "POST",
            url: request.uri,
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                 xhr.setRequestHeader("X-HTTP-Method", "PUT");
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.data,
            success: function(msg) {
                request.success(msg);
            },
            error: request.error
        });
    },
    mergeObject: function(request) {
        $.ajax({
            type: "POST",
            url: request.uri,
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("X-HTTP-Method", "MERGE");
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            data: request.data,
            success: request.success,
            error: request.error
        });
    },
    deleteObject: function(request) {
        $.ajax({
            type: "POST",
            url: request.uri,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("X-HTTP-Method", "DELETE");
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            dataType: "json",
            success: request.success,
            error: request.error
        });
    },
    updateMonitoring: function(request) {
    
        $.ajax({
            type: "GET",
            url: request.url,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", efapers.getAuthCookie());
            },
            //dataType: "json",
            success: request.success,
            error: request.error,
            async: false
        });
    }
};
